读构建之法 第二章:个人技术和流程

绝大部分软件都是由多人合作完成的,大家的工作相互有依赖关系。某人负责的模块的功能被其他人调用,但如何让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证???单元测试就是一个很有效的解决方案。

创建单元测试函数的主要步骤是:

1.设置数据(一个假象的正确的E-mail地址)

2.使用被测试类型的功能(用E-mail地址来创建一个User类的实体)

3.比较实际结果和预期的结果(Assert.IsTrue(target!=null)

创建完就可以运行单元测试了,同时可以看看代码覆盖报告,代码百分百地都被覆盖了。

怎样才算一个好的单元测试呢?单元测试应该准确、快速地保证程序基本模块的正确性。

验证单元测试好坏的一系列标准:

1.单元测试应该在最基本的功能、参数上验证程序的正确性;

2.单元测试必须由最熟悉代码的人(程序的作者)来写;最好是在设计的时候就写好单元测试,这样单元测试就能体现API的语义,保障语义的准确性。

3.单元测试过后,机器状态保持不变;这样就能不断地运行单元测试。

4.单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟);快才能保证效率

5.单元测试应该产生可重复、一致的结果;

6.独立性——单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性;

7.单元测试应该覆盖所有代码路径,包括错误处理路径;(要注意:100%的代码覆盖率并不等同于100%的正确性

8.单元测试应该集成到自动测试的框架中;把单元测试自动化,这样每个人都能随时随地运行单元测试。

9.单元测试必须和产品代码一起保存和维护;

在单元测试的基础上,建立关于这一模块的回归测试(Regression Test)

针对一个Bug Fix,我们也要做Regression Test。目的是1.验证新的代码的确改正了缺陷 2.同时要验证新的代码有没有破坏模块的现有功能,有没有Regression

回归测试中的回归可以将其理解为“回归到以前不正常的状态”

回归测试最好要自动化,这样就可以对于每一个构建快速运行所有回归测试,以保证尽早发现问题。

VSTS提供了方便的效能分析工具,让我们能很快地找到程序的效能瓶颈,从而能有的放矢,改进程序。

效能分析可以选择两种分析方法:

1.抽样(Sampling)优点:不需改动程序,运行较快,可以很快找到瓶颈,缺点:不能得出精确的数据,也不能准确表示代码中的调用关系树

2.代码注入(Instrumentation)缺点是程序的运行时间会大大加长,还会产生很大的数据文件,相应的增加了数据分析的时间,同时注入的代码也影响了程序真实的运行情况。

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

看个人项目耗时对比记录表,显然,从学生到职业程序员,并不是更加没完没了的写程序——花在写代码上的时间反而少了许多。

实践是理论的基础和验证标准

实践最简单的项目:WC,根据书上项目要求,实现一个统计程序

如何保证质量——回归测试

如何为这个程序做有效的测试,有以下几种方法,自动化程序由低到高。

1.手动测试,手工比较

2.要做到不断地测试,可以把WC的主要功能封装成一个类,然后测试程序员调用这一个类的主要函数,得出结果并与标准作比较。

3.更进一步,比较测试的输出和标注结果

4.再进一步,把自动构建脚本和构建验证测试结合起来。记录出现的bug。

我看完认为第二章主要讲的是 在设计的时候就写好单元测试,保证程序基本模块的正确性;在单元测试的基础上,建立模块的回归测试,保证之前所有已经发现并修复的bug的确得到了修复,并没有在最后一个版本中复发,才能保证尽早发现问题。还有对程序的效能分析,提高效能,优化程序。

时间: 2024-12-05 21:37:17

读构建之法 第二章:个人技术和流程的相关文章

构建之法第二章个人技术和流程

如果说第一章我还有点概念,那么第二章我可以说一窍不通,什么是VSTS,什么是单元测试,什么是回归测试,还是什么是效能分析--好多的新名称,第一次看见,是那么的没有头绪.要不是百度了,仅仅看书,我完全不知VSTS--Visual Studio Team System,是由微软开发的一套具有高生产力.高集成性.可扩展的生命周期开发工具. 2.1.1节图文并茂的告诉我,单元测试重要作用,可能是自己的能力不足,相关知识了解的太少了,一边看还一边想,单元测试怎么写?写在哪里?什么时候写?就算是按照书本上的

构建之法 第二章 个人技术和流程

这一章重点介绍的是以前了解过但未曾注重过的单元测试&回归测试:个人技术素养是团队协作的基础. 1.VSTS单元测试 源代码 public Class User() { public User(string userEmail) { memail = userEmail; } private string memail;//private变量拒绝外部类访问(除非用get/set方法) } 测试代码1 public void ConstructorTest() { string userEmail

读构建之法第二天

刚刚读了构建之法第一章的内容,主要讲述了计算机科学领域,软件工程与计算机科学的关系,软件的特性以及软件工程的定义和组成部分这四方面的内容.下面我将分为四部分 来记录自己的收获. 第一部分: 1. 软件 = 程序 + 软件工程        软件工程的核心部分是构建管理.源代码管理.软件设计.软件测试.项目管理.广义上软件工程还包括用户体验,用户设计界面等, 所以一个拓展的推论是:        软件企业 = 软件  + 商业模式. 2.  软件开发有不同的阶段:(1)玩具阶段  (2)业余爱好阶

构建之法(第二章个人技术和流程)

在第二章的学习之中,了解到第二章主要讲:单元测试,回归测试,效能分析,个人软件开发流程(PSP) 1.单元测试 软件是由多人合作完成的,不同的工作有相互依赖的关系.单元测试应该准确,快速地保证程序基本模块的正确性. 单元测试好坏的标准如下: 1.单元测试应该在最低功能/参数上验证程序的正确性.        2.单元测试必须由最熟悉代码的人(程序的作者)来写        3.单元测试后,机器状态保持不变        4.单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟)       

构建之法第二章

本章为个人技术和流程,主要介绍了单元测试.回归测试.效能分析和个人软件开发流程等内容. 单元测试:如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的.量化的保证,单元测试就是一个很有效的解决方案. 1.用VSTS写单元测试:在写技术模块的规格说明书的时候,要越详细越好,最好各项要求都可以表示为一个单元测试用例. 2.好的单元测试的标准: 1>单元测试应该在最基本的功能/参数上验证程序的正确性 2>单元测试必须由最熟悉代码的人(程序的作者)来写 3

构建之法第二章读书心得

通过阅读第二章的内容,了解到了为什么要进行单元测试.因为软件是由多个人共同完成的,如果某个模块出现问题,那么整个软件都会出错.那么怎么样才能做好测试呢?1.要在功能和参数上验证程序的正确性.2.单元测试最好由代码的作者来写.3.保证测试之后,机器状态保持不变.4.速度要快.5.重复测试结果应该一致.我们还要对程序进行效能分析,保证程序运行的又快又好,占用资源少.效能分析可以通过抽样或代码注入来完成.我们还应该对个人开发流程进行如下所示的规划:预估任务所需时间.分析需求.生成设计文档.设计复审.代

读构建之法 第一章:概论

软件=程序+软件工程 软件企业=软件+商业模式 工程师的宗旨是:我构建,故我在 程序在这里指的是源程序,就是一行行的代码,它们是建立在数据结构上的一些算法.程序对数据进行操作,工程师把它们构建为机器能懂的可执行代码.构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的软件架构.软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系.编译参数.链接参数,等等.这些都是软件构建的过程.      软件工程:和软件开发活动(构建管理.源代码管理.软件设计.软件测试.项目管理)相关

<构建之法>第二章读后感

本章的实质是在说明,一个合格的软件工程师是怎样的,他应该具备哪些技能. 总结下来,一个合格的工程师在开发时需要同时考虑质量和效率,与之同时需要具备的技能包括:单元测试.效能分析.个人研发流程(PSP): 单元测试能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的.量化的保证. 创建单元测试函数的主要步骤是: 1.设置数据 2.使用被测试类型的功能 3.比较实际结果和预期结果 怎样才算一个好的单元测试:单元测试应该准确.快速的保证程序基本模块的正确性.

完成构建之法第二章后面的小实践~

练习数值计算.找出一个整数数组中子数组之和的最大值,例如:数组[1,-2,3,5,-1],返回8,因为符合要求的子数组是[3,5]: 程序代码如下,使用的是C语言: #include<stdio.h>int Serch(int a[],int n){ int i,temp; for(i=1;i<n;i++) { if(a[0]<a[i]) { temp=a[0]; a[0]=a[i]; a[i]=temp; } } for(i=2;i<n;i++) { if(a[1]<