软件测试的艺术-CH2
by GlenFord J. Myers(U.S.A)
测试是为发现错误而执行程序的过程
软件测试心理学
人类的行为总是倾向于具有高度目标性,建议一个正确的目标有重要的心理学影响,如果我们的目标在于证明程序中的错误,那我们设计的测试数据就会发现更多的问题,
反之,则相反。
如果在测试阶段发现了错误并且成功得到修复,那么测试是成功的
如果本次测试可以确定再无其它可以查出的错误,那么本次测试仍然是成功的
总结,软件测试更适宜被视为试图发现程序中错误的破坏性过程。一个成功的测试用例,通过诱发程序发生错误,从而在这个方向上可以促进软件质量的改进。
最终我们通过软件测试来建立某种程度的信心:软件做了该做的,未做其不该做的,通过对错误的不断研究是实现这个目的的最佳途径。
软件测试经济学
软件测试是否能够发现“所有”的错误?一般来说这是不切实际的。这个基本的问题反过来暗示出软件测试的经济学问题,即测试人员对被测软件的期望,以及测试用例的
设计方式。
为了应对经济学上的挑战,应该在测试之前建立某些策略。
黑盒测试
又成为数据驱动的测试或者输入/输出驱动的测试。程序视为一个黑盒子,重点集中在发现程序不按其规范正确运行的环境条件。
这种方法如果想要发现所有的错误,就要穷举输入测试数据,这当然是不可能完成的任务。
故这种方法目标在于如何通过有限的测试用例集,最大限度的提高发现问题的数量,以取得最好的测试效果,当然要实现这个目标,还需要能够窥见软件的内部,对程序
做一些合理的假设,如 2,2,2是一个等边三角形,那么有理由相信 3,3,3也会被程序认定为等边三角形。
白盒测试
又称逻辑驱动的测试,允许我们检查程序的内部结构。
软件测试的重要原则
1. 测试用例中的一个必需部分是对预期输出或结果的定义
一个测试用例必需包含两个部分
1.对程序输入数据的描述
2.对程序在上述输入数据下的正确输出结果的精确描述
2. 程序员应当避免测试自己编写的程序
处于心理学层面,应当避免让程序员直接测试自己编写的程序,让其它人来测试程序会更加有效,也更容易测试成功
3. 应当测查每个测试的执行结果
常常被忽视检查执行结果,导致遗漏场景
4. 不仅要输入有效的数据场景,也要输入无效和未预料的输入情况
5. 程序某部分存在更多错误的可能性,与该部分已经发现的错误数量成正比
错误总是倾向于聚集存在,最好对容易存在错误的部分进行额外的测试,以获取更大的成效。
小结
1. 软件测试是为发现错误而执行程序的过程
2. 尽量避免编码人员测试自己编写的程序
3. 好的测试用例对未发现的错误高度敏感
4. 成功的测试用例能够发现未知的错误
5. 成功的测试用例要仔细定义输入输出的期望值
6. 成功的测试需要仔细分析测试结果