持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
白盒测试
永远不应该跳过黑盒测试,但这很少是足够的。如果不查看代码的内部结构,就不可能知道哪些测试用例可能会提供新信息。考虑一下这个微不足道的例子:
查看代码,我们可以看到,由于测试,如果 x <= 2,则值 0、1 和 2 被视为特殊情况,因此需要进行测试。如果不看代码,人们可能不会测试is_prime(2),因此不会发现函数调用is_prime(2)返回False,错误地指示2不是素数。
玻璃盒测试套件通常比黑盒测试套件更容易构建。规范,包括本书中的许多规范,通常不完整,而且通常非常草率,这使得估计黑盒测试套件探索有趣输入空间的彻底程度成为一个挑战。相比之下,通过代码的路径的概念定义得很好,并且相对容易评估一个人探索空间的彻底程度。事实上,有一些商业工具可以用来客观地衡量玻璃盒测试的完整性。如果玻璃盒测试套件通过程序执行每个潜在路径,则该测试套件是路径完备的。这通常是不可能的,因为它取决于每个循环执行的次数和每个递归的深度。例如,阶乘的递归实现对于每个可能的输入都遵循不同的路径(因为递归的级别数将不同)。
此外,即使是路径完整的测试套件也不能保证所有错误都会暴露出来。考虑:
该规范表明有两种可能的情况:x要么是负数,要么不是。这表明输入集 {2, -2} 足以探索规范中的所有路径。这个测试套件具有额外的好属性,可以强制程序通过其所有路径,因此它看起来也像一个完整的玻璃盒套件。唯一的问题是,这个测试套件不会暴露abs(-1)将返回-1的事实。
尽管玻璃盒测试存在局限性,但通常值得遵循一些经验法则:
执行所有 if 语句的两个分支。
·确保每个例外子句都已执行。
·对于每个 for 循环,都有以下测试用例:
o 不输入循环(例如,如果循环正在迭代列表的元素,请确保在空列表中对其进行测试)。
o 循环的主体只执行一次。o 循环的主体被多次执行。
·对于每个 while 循环
o 查看与处理 for 循环时相同的情况。
o 包括与退出循环的所有可能方式相对应的测试用例。例如,对于以 len(L) 开头的循环,> 0 而不是 L[i] == e
查找循环因 len (L) 较大而退出的情况
比零和它退出的情况,因为 L[i] ==e.
对于递归函数,包括导致函数返回而不进行递归调用、恰好一个递归调用和多个递归调用的测试用例。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mkjdt/16284.html