在理想情况下,我们会尝试测试程序的所有可能执行的情况,然而在大多数情况下,这几乎是不可能的。即使一个看起来非常简单的程序,其可能的输入与输出组合都可以达到几百甚至上千中,对所有可能的情况都去设计测试用例是不切合实际的,对一个复杂的应用程序进行完全的测试,将耗费大量的时间和人力资源,在经济上是不可行的。
软件测试的心理学
测试执行的差,其中一个主要的原因就在于大多数的测试人员一开始就把“测试”这个术语的定义搞错了,他们可能会认为:
1.“软件测试就是证明软件不存在错误的过程”
2.“软件测试的目的在于证明软件能够正确的完成其预定的功能”
3.“软件测试就是建立一个‘软件做了它应该做的’信心的过程”
这些定义都是本末倒置的。
每当测试一个程序时,应当想到要去为程序增加一些价值。通过测试来增加程序的价值,是指测试提高了程序的可靠性或者质量。提高了可靠性是指找出并最终修改了程序的错误。
因此,不要只是为了证明程序能够正确的运行而去测试程序;相反,应该一开始就假设程序中隐藏着错误(这种假设对所有的程序几乎都成立);然后再去测试程序,发现尽可能多的错误。
所以对于测试的定义应该是
“测试是为发现错误而执行程序的过程”
注意:微妙的文字差别会对软件测试产生重大的影响。我们要认为程序本身就一定是存在 缺陷,不可能十全十美,缺陷的定义也不应该只限制于功能问题,包括易用性,可靠性,界面优化等等,而不要为了证明程序能够正常运行去测试它。
这种对软件测试的定义,它暗示了软件测试就是一个破坏性的过程,甚至是一个“施虐”的过程&