白盒测试的静态部分上篇(我看“静态测试”)已经讲过了,本篇我想说的是白盒测试中的动态部分。本文涉及到的内容很多,所以本文不求面面俱到,只要说明思路即可。
白盒测试的动态测试要根据代码的控制结构设计测试用例。为了在有限的时间和有限的资源内达到最佳的测试效果,传统的测试理论采用了几种优化的设计方法,即逻辑覆盖法和基本路径法。逻辑覆盖通过对程序逻辑结构的遍历实现程序的覆盖,最常用的一般是语句翻盖、分支覆盖等。
在很多行业的测试标准中,通常会对测试要达到的覆盖率有一定的要求,例如要求语句覆盖率和分支覆盖率必须达到100%。一般情况下,要实施覆盖率测试,有三种完全不同的策略。
黑盒测试是面向功能的测试,测试用例的依据是软件的需求,测试的对象是运行起来的软件。通常情况下,一个有经验的测试工程师根据需求说明书编写的测试用例在执行完成后,覆盖率一般能达到70%左右,需要N 个工作日。要达到覆盖率的最终目标100%,还需要增加新的测试用例。有过覆盖率测试经验的朋友知道,剩下的30%可能需要 N *3 工作日,甚至更多。理由很简单,留给朋友意会吧。形象点说明,请看效果图。
2、白盒测试
和黑盒测试正相反,白盒测试的测试用例的依据就是软件代码。测试工程师需要依据代码的逻辑结构、基本路径的分析,得到测试用例。因为该方法直接面向代码,写出的测试用例非常有针对性,每执行一个用例,覆盖率指标都能有新的提高,最终达到终极目标。听起来很不错,其实还有一个很大的问题,就是测试工程师需要分析所有代码的逻辑结构、调用关系、数据流等,仅此一项,就需要花费巨额的时间。请看下面的效果图。
3、白盒和黑盒结合的方法
既然黑盒和白盒各有优劣,所以不如采用二者相结合的方法。先黑盒,把基本的功能都测试一轮,覆盖率达到70%;第二步,根据前面的结果,单独分析剩下30%的代码,使用白盒的方法增加测试用例,最终达到终极目标。经过很多客户的实践经验,这种混合的方法对于覆盖率测试是最有效的。