white-box testing
白盒测试是关注测试用例覆盖程序逻辑(源代码)的程度。最终的白盒测试是执行程序中的每个路径。但对于大多数的程序(例如带有循环的程序),完全意义上的全路径覆盖是不现实的。
logic coverage testing
你可能会觉得一个值得追求的目标是至少执行程序中的每一条语句。不幸的是,这是一个很弱的标准。假设下面这个图表示一个要测试的小程序。相应的java代码片段如下:
你可以通过编写一条单独的测试用例来执行到路径ace。也就是说,在a点设置a=2,b=0和x=3,每个语句将被执行一次。
不幸的是,这个标准相当差。
第一个条件可能是或而不是与。如果是这样,这个bug将不会被检测到。
第二个条件如果是是x>0,这个bug也不会被检测到。
此外,程序中有一条路径,x没有改变(路径abd)。如果这里存在一个错误,也不会被检测到。
更强的逻辑覆盖标准称为条件覆盖或分支覆盖。这个标准规定,你必须编写足够的测试用例,使每个条件至少有一个true和一个false。以及每个分支方向必须至少遍历一次。分支或条件语句的例子包括switch-case、do-while和if-else语句,以及在某些编程语言(如fortran)中的多路径goto语句。
在上图中,分支覆盖可以用两个测试用例覆盖路径ace和abd,或者覆盖路径acd和abe。如果我们选择后者,那么两个测试用例的输入分别是a=3, b=0, x=3和a=2, b=1, x=1。条件覆盖是比语句覆盖更强的标准,但它仍然很弱。因为,此时我们仍然没有探索到x没有改变的路径(abd)。
如果第二个判断有误(写成x1),那么这个bug就不会被前面的测试用例(a=2, b=1, x=1)检测到。
有时比分支覆盖更强的标准是条件覆盖。在这种情况下,你需要编写足够的测试用例来确保每个条件至少有一次取得所有可能的结果。上图中有四个条件:a>1, b=0, a=2, 和x>1。因此,需要足够多的测试用例来覆盖以下情况:
在点a处a>1, a1, 和x<=1。
尽管条件覆盖标准乍一看似乎满足分支覆盖标准,但并不总是如此。例如,两个测试用例 a = 1,b = 0,x = 3 和a = 2,b = 1,x = 1 涵盖了所有条件结果,但只涵盖了四个分支中的两个(它们都涵盖了路径abe,因此不会执行第一个分支的true结果和第二个分支的false结果)。
摆脱这种困境的明显方法是一种称为分支+条件覆盖的标准。它需要足够的测试用例,以便每个分支判断中的每个条件至少有一次取得所有可能的结果。
最后,大家再思考下,现有的仿真验证的代码覆盖率有哪些类型的代码覆盖率,其实是会考虑所有分支里面的所有条件的输入和输出结果的组合的。
另外请再思考下,功能覆盖率能够覆盖哪些代码覆盖率无法描述的场景组合呢?
用8个数据们可设定1~256倍增益的可编程放大器
不平凡的端午节 易方通达光亚展放大招
aigo国民好物固态硬盘产品分类解析:选对不选贵
5G智能终端价格未来将会越来越具有竞争力
魅族Pro7也没能带火的双面屏,或许三星这种第四类双面屏可以
从软件测试白盒测试实例分析
萤石DP1S智能猫眼高清全景洞察 门外世界更清晰
当物联网遇到5G,数据集成是挑战
看电动汽车电池如何被回收利用Step7
河北移动携手华为推出算力应用感知APS方案
传华为Mate 40Pro屏幕面板将来自京东方、三星和LG
荣耀8和华为nova哪个好?荣耀8和华为nova评测对比
Katalium简介:让Selenium和TestNG变得简单
海尔H-2116彩电保护电路
注射针用圆锥接头多功能测试仪
我国智能制造产值规模将超4.5万亿元,还正处在需要改造的阶段
机器人辅助完成首宗眼部手术 高精准度、高效率、低风险
“东厂”肆虐:台积电能否走出内斗漩涡?
点评:美国处罚中兴要钱处罚华为会拼命 恩智浦位列AI芯片全球前三
贴片电阻器的命名特性