热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《构建之法》第2章个人技术和流程

《构建之法》第2章个人技术和流程本章的理论和知识点主要有:单元测试,回归测试,效能分析,个人软件开发流程(psp)一、单元测试:单元测试作为一种解决方案,让自己负责的模块功能定义尽量明确,模

《构建之法》第2章 个人技术和流程

本章的理论和知识点主要有:单元测试,回归测试,效能分析,个人软件开发流程(psp)

一、单元测试:

单元测试作为一种解决方案,让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定、量化的保证。

1.1用VSTS写单元测试

1.2 好的单元测试的标准

一个好的单元测试,应该准确、快速的保证程序基本模块的正确性。下面是验证单元测试好坏的一系列标准:

  • 单元测试应该在最基本的功能/参数上验证程序的正确性。
  • 单元测试必须由最熟悉代码的人(程序的作者)来写:代码的作者最了解代码的目的、特点和实现的局限性。
  • 单元测试过后,机器状态保持不变:这样即可保证单元测试不断的运行,如果创建了临时的文件或目录,应该在Teardown阶段删掉。
  • 单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟)。
  • 单元测试应该产生可重复、一致的结果。
  • 独立性——单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性:程序中的各个模块是相互依赖的,一般情况下单元测试中的模块可以直接引用其他的模块,如果其他的模块很不稳定,或者其他的模块运行比较费时,而且对于本模块的正确性并不起关键作用时,可以认为的构造数据,以保证单元测试的独立性。
  • 单元测试应该覆盖所有代码路径。

    注意:100%的覆盖率并不等于100%的正确性。
  • 单元测试应该集成到自动测试的框架中,这样每个人都能随时、随地运行单元测试。
  • 单元测试必须和产品代码一起保存和维护。

1.3 回归测试

  • 回归是指模块出现了一个退化,从正常状态回归到以前不正常的状态。能避免遗漏bug,以及确保bug都已解决。
  • 回归测试最好要自动化,因为这样就可以对于每一个构建快速运行所有回归测试,以保证尽快发现问题。单元测试是回归测试的基础。
  • 针对一个bug修复,也要进行回归测试,目的是:
    1.验证新的代码的确改正了缺陷。
    2.同时要验证新的代码有没有破坏模块的现有功能,有没有regression。

二、效能分析工具

通过效能分析工具,尽快找到程序的效能瓶颈,从而进行程序的改进。通过“效能测试,分析,改进,再效能测试”的流程,逐渐提高程序的效能和我们的编程水平。

可以选择两种分析方法:

  • 抽样:当程序运行时,时不时看一看这个程序运行在哪一个函数内,并记录下来。抽样的运行较快,可以很快的找到瓶颈,但是不能得到精确的数据,也不能准确表示代码中的调用关系树。

  • 代码注入:将检测的代码加入到每一个函数中,这程序的一举一动都被记录在案,程序的各个效能数据都可以被精确地测量。但运行时间大大加长,还会产生很大的数据文件,也相应增加了数据分析的时间。

一般的做法是,先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析。

三、个人开发流程

通过大学生和工程师的psp数据比较,我们可以看到从学生到职业的程序员,花在写代码上的时间反而少了许多,更多时间用在“需求分析”和“测试”这两方面。

psp特点:

  • 不局限于某一个软件技术(如编程语言),而是着眼于软件开发的流程,这样开发不同应用的软件工程师可以相互比较。
  • 不依赖于考试,而主要靠工程是自己手机数据,然后分析,提高。
  • PSP依赖于数据,需要工程师输入数据,记录工程师的各项活动,再加上数据不准确或者有遗失。
  • PSP的目的记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。

总结:

  通过本章的学习,我学会了一种思想,在学好代码的同时,要运用好单元测试和效能分析,有效的优化代码,提高效率,并保证模块的质量更加的稳定和量化。但是具体如何进行单元测试和效能分析,还需要进一步的学习体会。


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
author-avatar
筱美嘚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有