文章比较主题是软件测试,比较专业,但其中阐述的观点与日常生活同样适用。
软件测试是一项技术性的工作,同时也涉及经济学和人类心理学的重要因素。为了发现软件中隐藏的所有BUG,在理想情况下,我们会测试程序的所有可能执行情况,但在现实的
时间和人力的约束下,这几乎是不可能的。即便一个非常简单的承程序,其可能的输入与输出组合上百种甚至上万种,如果要进行完全测试,同时在经济上也是不可行的。实际中,成功的完成测试可以归纳为一个心理学和经济学问题。
软件测试的心理学
测试执行得差,其中主要原因在于大多数程序员并没有将软件测试的定义弄明白。
人类行为总是倾向于具有高度目标性,如果我们的目的是证明程序中不存在错误,那就会在潜意识中倾向于实现这个目标,我们于是会倾向于选择可能较少导致程序失效的测试数据。另一方面,如果我们的目标在于证明程序中存在错误,我们设计的测试数据就有可能发现更多的问题。当然,对于测试,更为合适的定义是“测试是为了发现错误而执行程序的过程”
现实的软件测试中,大多数项目经理将没有发现错误的测试用例称为“成功的测试”,而将发现某个新错误的测试称为“不成功的测试”。这实际是一种本末倒置,因为在测试程序时发现了错误,而且这些错误是可以修复的,就将这次有效执行的测试称做是“成功的”。如果最终确定再无其他可查的错误,同样也被称为“成功的”。而未能全面对程序检查,而认为不包含错误的观点才是“不成功的”。
总结一下,软件测试更适宜被视为试图发现程序中的错误的破坏过程。最终我们是想要通过软件测试来建立某种程度的信心,软件做了该做的,不做其不该做的。
“软件测试就是证明不存在错误的过程”与“测试是为发现错误而执行程序的过程”,仅几个字的差别,却会对成功的测试产生很大的影响。生活中同样要警醒自己,抓住症结,才能对症下药。