1、白盒测试技术陈大卫2022年3月5日目录目录 语句覆盖 分支覆盖(判定覆盖) 条件覆盖 分支-条件覆盖 多重条件覆盖 路径覆盖 逻辑测试比较被测试程序结构被测试程序结构语句覆盖语句覆盖 语句覆盖就是设计若干测试用例,运行所测程序,使得每一可执行语句至少执行一次。用例经过路径学生1分数49分1235学生1分数87分1245语句覆盖的不足语句覆盖的不足 不能保证对于空语句分支情况的检查。 不能判别带有break跳转的While条件的退出条件是否正确。 不能判别Do-While循环的条件错误。分支覆盖(判定覆盖)分支覆盖(判定覆盖) 覆盖要求:每个判定的取真分支和取假分支至少经历一次。用例经过路径学
2、生1分数49分1235学生1分数87分1245学生1分数203分16学生1分数36/学生2分数9312371245分支覆盖的不足分支覆盖的不足 判别多重条件,可能出现不能判定每个条件中隐含的缺陷。 对于多分支造成的路径组合,以及循环路径可能造成的缺陷不能保证被测试。条件覆盖条件覆盖 覆盖要求:每个判定的每个条件的可能取值(真和假)至少执行一次用例经过路径学生1分数49分1235学生1分数87分1245学生1分数203分16学生1分数-316学生1分数36/学生2分数9312371245条件覆盖的不足条件覆盖的不足 不能保证对于多重条件语句各分支情况的检查。 对于多分支造成的路径组合,以及循环路
3、径可能造成的缺陷不能保证被测试。分支分支-条件覆盖条件覆盖 覆盖要求:判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。 对于多分支造成的路径组合,以及循环路径可能造成的缺陷不能保证被测试。多重条件覆盖多重条件覆盖 在很多情况下,计算机处理多重条件判断时,会将其分解成多个单个的判断和分支,这样由于“与”和“或”等表达就可能屏蔽部分条件的判断,因此需要将每个判定中的所有可能的条件结果组合,以及所有的入口点都至少执行一次。路径覆盖路径覆盖 覆盖要求:设计足够的测试用例,覆盖程序中所有可能的路径。 路径测试无法进行穷举测试。圈复杂度计算圈复杂度计算 在软件测试的概
4、念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数。 圈复杂度的计算方法很简单,计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。 也可表示为V(G)=P+1 ,P是代码中判定结点的数量。 V(G)=e-n+2 =12-9+2=5 V(G)=P+1 =4+1=5路径覆盖的不足路径覆盖的不足 由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。If (!A)B+;If (!A)D-; 这两个语句实际只包
5、括了2条执行路径,即A为真或假时候对B和D的处理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。逻辑测试比较逻辑测试比较语句判定条件路径语句覆盖*判定覆盖*条件覆盖*判定条件覆盖*路径覆盖*小结小结 正确使用白盒测试,就要先从代码分析入手,根据不同的代码逻辑规则、语句执行情况,选用适合的覆盖方法。任何一个高效的测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路径。 参考资料参考资料 白盒测试张露莹 白盒测试中的六种覆盖方法 谷剑芳 软件测试经验与教训 问题和讨论问题和讨论谢谢谢谢 大家大家