软件测试的心理学:
测试执行的差,其中一个主要原因在于大多数的程序员一开始就把测试这个术语的定义搞错了,他们可能会认为:
- “软件测试就是证明软件不存在错误的过程”
- “软件测试的目的在于证明软件能够正确完成其预定的功能”
- “软件测试就是建立一个‘软件做了其应该做的’信心的过程”
这些定义都是本末倒置的。
对于测试,更为合适的定义应该是:
“测试是为发现错误而执行程序的过程”
我们可以类比一下病人看医生的情况,病人因为身体不舒服而去看医生。如果医生对病人进行了一些实验检测,却没有诊断出任何病因,我们就不会认为这些实验测试是“成功的”。之所以是“不成功的”检测,是因为病人支付了昂贵的医药费,而病状任然存在。病人会因此而质疑医生的诊断能力。但是,如果实验检测诊断出病人是胃溃疡,那么这检测就是“成功的”,医生可以进行适当的治疗。因此,医疗界会使用“成功的”或“不成功的”来表达适当的意思。我们可以类推到软件测试中来,当我们开始测试某个程序的时候,它就好似我们的病人。
软件测试的经济学:
软件测试是否能够发现“所有”的错误。答案是否定的。
为了应对测试经济学的挑战,应该在开始测试之前建立某些策略。黑盒测试和白盒测试是两种最普遍的策略。
1. 黑盒测试
又称为数据驱动的测试或输入/输出驱动的测试。测试的目标与程序的内部机制和结构完全无关。
2. 白盒测试
又称逻辑驱动的测试。
软件测试的原则:
- 测试用例中一个必须部分是对预期输出或接过进行定义
- 程序员应避免测试自己编写的程序
- 编写软件的组织不应当测试自己编写的软件
- 应当彻底检查每个测试的执行结果
- 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况
- 检擦程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”
- 应避免测试用例用后即弃,除非软件本身就是个一次性的软件
- 计划测试工作时不应默许假定不会发现错误
- 程序某部分存在更多错误的可能性,与该部分已经发现错误的数量成正比
- 软件测试是一项极富创造性,极具智力的挑战性的工作