软件测试定义中的“设想”和“预期的结果”其实就是我们现在所说的用户需求或功能设计。软件的质量标准就是“符合要求”。目前比较主流的测试思想,核心观点测试方法是试图验证软件是“工作的”,所谓“工作的”就是指软件的功能是按照预先的设计执行的,以正向思维,针对软件系统的所有功能点,逐个验证其正确性。软件测试业界把这种方法看作是的软件测试类方法。

尽管如此,这一方法还是受到很多业界权威的质疑和挑战。代表人物是 Glenford J.Myers(代表论著《The Art of Software Testing》)。他认为测试不应该着眼于验证软件是工作的,相反应该首先认定软件是有错误的,然后用逆向思维去发现尽可能多的错误。他还从人的心理学 的角度论证,如果将 “验证软件是工作的”作为软件测试的目的,非常不利于测试人员发现软件的错误。于是他于 1979 年提出了他对软件测试的定义:“测试是为发现错误而执行的一个程序或者系统的过程。(” The process of executing a program or system with the intent of finding errors.)这个定义,也被业界所认可,经常被引用。

除此之外, Myers 还给出了与软件测试相关的重要观点,那就是:测试是为了证明程序有错,而不是证明程序无错误; 一个好的测试用例是在于它能发现至今未发现的错误; 一个成功的测试是发现了至今未发现的错误的测试。 回顾软件测试的起源与发展,就是方法论的一种体现。当人们一开始认识软件测试的时候,认为软件测试是软件开发活动中的最后一个环节,就像是工厂生产的产品需要经过最后的质检一样。

早期的观点认为,检验一个软件产品质量的好坏,是证明它“能正确工作”,在这个前提之下去检查自然就会走偏差;而反过来看如果前提改成“软件是存在错误的,错误或大或 小”,那么就要去证明软件产品里面有错误、有缺陷、有用户不满意的地方。

这种前后期观念的改变,是经历过很长阶段的摸索与总结。人们关注软件生命周期的研发过程,关注开发过程中到底哪些环节上容易出问题,怎么能够在软件产品开发阶段,甚至于在产品需求获取阶段,把软件产品中容易出现的问题尽量使之最小化,最好是完全杜绝。