基本概念
测试
指通过运行程序以确定它是否按照预期工作。
调试
则指修复已知的未按预期工作的程序。
测试和调试的关键
就是将程序分解成独立的部件,可以在不受其他部件影响的情况下实现、测试和调试。
关于测试,最重要的是清楚它的目的是证明错误的存在,而不是证明程序没有错误。
测试的关键就是找到极有可能产生错误答案的一组输入,可以称之为测试套件
找到测试套件的关键
是,对所有可能的输入空间进行分区,将其划分为对程序正确性提供相同信息的多个子集,然后构建测试套件,使其包含来自每个分区的至少一个输入。
如果使用来自每个子集的至少一个值对函数实现进行测试,就非常有可能暴露可能存在的错误。
基于代码探索路径的启发式方法称为白盒测试
。
基于规范探索路径的启发式方法称为黑盒测试
。
如果一个白盒测试套件可以测试程序中所有潜在路径,那我们就可以认为它是路径完备
的。一般来说,路径完备不可能达成,因为这取决于程序中循环的次数和递归的深度。
白盒测试提供的一些经验准则
:
测试所有if语句的所有分支。
必须测试每个except子句。
对于每个for循环,需要以下测试用例:
- 未进入循环(例如,如果使用循环遍历列表中的所有元素,则必须测试空列表);
- 循环体只被执行一次;
- 循环体被执行多于一次;
对于每个while循环: