一级工程实践(四)讲师:刘晓光单元测试本节课主要内容:白盒测试概念综述静态代码检查的意义及工具覆盖率的意义及工具单元测试让我们飞升到学术思维单元测试•白盒测试定义:IEEE给出的定义“Testingthattakesintoaccounttheinternalmechanismofasystemcomponent”单元测试有些问题是黑盒测试无法检测出来的。理论上黑盒测试永远无法无法测试出这类问题。单元测试黑盒测试无法/很难检测出来的问题。检测内存泄露。没有被处理的异常。想知道代码运行了那一部分。有没有垃圾代码。代码编写质量如何?是否设计合理?有没有被hack?单元测试白盒测试的意义80%左右的缺陷是白盒测试发现的。白盒测试发现的缺陷修复起来代价更小(缺陷放大原理)积累的白盒(单元)测试用例是一种资产,能够增强产品交付前的信心。足够的白盒(单元)测试用例能够形成一张保护网,在代码不断修改、增多的时候保证开发顺利进行。复杂系统中,代码量大到一定程度(如一万行以上的C++),没有单元测试,系统维护成本会越来越高。白盒测试能够帮助开发人员更好的理解设计(人们对某种新事物的认知都是一个由浅入深的过程)单元测试单元测试的分类:学术界的一些叫法单元测试控制流测试(基于覆盖率的测试)语句覆盖(StatementCoverage)分支覆盖(BranchCoverage)条件覆盖(ConditionCoverage)组合覆盖(CombinedCoverage)单元测试控制流测试一段代码片段:if((a>1)&&(b==0))x=x/a;if((a==2)||(x>1))x=x+1;单元测试画出流程图并标出路径单元测试语句覆盖:设计若干条测试用例,使程序中每条可执行语句至少执行一次。单元测试CASE1:A=2B=0X=3单元测试CASE2:A=2B=1X=3单元测试语句覆盖是最弱的覆盖单元测试•分支覆盖设计测试用例,使程序中的每个逻辑判断的取真和取假的分支至少经历一次。单元测试CASE1:A=2B=0X=3单元测试CASE3:A=1B=0X=1单元测试只做到分支覆盖将无法确定判定内部条件的错误。单元测试另一组分支覆盖的例子:仍然不能检测出上页的错误。因此单一的判定覆盖也是一种较弱的覆盖条件。单元测试条件覆盖:设计若干测试用例,使程序的每个判定中的每个条件的可能取值至少满足一次单元测试满足条件覆盖的一组测试用例:单元测试单元测试组合覆盖:分支-条件覆盖:使判定中每个条件的可能取值至少满足一次,并且使每个判定分支至少执行一次。判定-条件覆盖:能同时满足判定、条件两种覆盖标准。单元测试满足分支-条件覆...