到底什么是软件测试?
有人说是:软件测试就是发现软件产品中的BUG(缺陷)。
也有人说:软件测试是验证软件产品特性是否满足用户的需求。
上述回答都没有错,是对软件测试正反两个方面的解释。
- 软件测试是发现软件产品中的BUG,强调测试人员以逆向思维的方式,不断思考开发人员可能存在的误区,不良的习惯,系统的边界条件,异常输入和操作,系统弱点和漏洞等,更快的发现软件系统的问题。毕竟开发人员力求构造软件,以正向思维为主,所以测试人员从逆向思维出发,可以获得更高的测试效率。
- 软件测试是验证软件产品特性是否满足用户需求,是以正向思维方式针对软件系统的所有功能点,逐个验证其正确性,这是传统工业质检工作在软件业的自然延申。
但仅仅这样理解软件测试还不够,需要更全面的理解软件测试,就可以更好的做好工作,也可以适应不同软件开发过程中所带来的挑战,包括敏捷方法带给软件测试的极大挑战。
30年前一本书《软件测试之艺术》给出了测试的定义:程序测试就是为了发现错误而执行程序的过程。那时对软件测试的认识非常的有局限性,这也是受软件开发瀑布模型的影响,认为软件测试是编程之后的一个阶段。
只有等待代码开发出来之后,通过执行程序,像用户那样操作软件发现问题,这就是“动态测试”。
如果此时发现软件功能设计的不合理或者性能不好,就需要修改需求或修改设计,那就不得不返工到需求定义或者系统设计阶段,造成很大的代价。
所以有必要将软件测试延申到需求阶段,设计阶段,也就是对阶段性的成果——需求定义文档,设计技术文档进行验证,从而将动态测试延申到静态测试,尽早的发现问题,将问题消失在萌芽之中。将每个阶段的缺陷即时清除,极大的提高产品的质量,有效的降低企业的成本。静态测试就是在不运行软件系统时对软件或阶段性成果进行评审,包括需求评审,代码扫描,代码评审等。
软件测试从“动态测试”到“静态测试”,是从”狭义的软件测试“到”广义的软件测试“,也使”软件测试“不在停留在编程之后的某个阶段,而是贯穿整个软件开发的声明周期的质量保证活动。有了广义软件测试的概念,在敏捷开发中,软件测试就能被解释为软件产品质量的持续评估。在敏捷方法中,不仅提倡持续集成,而且提倡持续测试,持续集成实际上也是为了持续测试。
从国际标准对软件测试的定义来看,软件测试被看作是”验证“和”有效性确认“这两类活动构成的整体,缺一不可,如果只做到其中一项,测试是不完整的。
- ”验证“是验证软件是否正确实现了产品规格说明书所定义的系统功能和特性,验证过程提供证据表明软件相关产品与所有生命周期活动的要求相一致,及验证软件实现是否达到了软件需求定义和设计目标。
- ”有效性确认“是确认所开发的软件是否满足用户实际需求的活动。因为软件需求定义和设计可能就不对,上述一致性不能保证软件产品符合客户的实际需求,而且客户的需求也是在变化的,当需求定义是半年前定义的,这种变化的可能性就比较大。
概括起来,可以这样说,软件测试是贯穿整个软件开发声明周期,对软件产品(包括阶**段性产品)进行验证和确认的活动过程,也是对软件产品质量持续评估的过程,其目的是尽早尽快的发现在软件产品(包括阶段性产品)中所存在的各种问题,尽最大可能地消除软件开发过程中所存在的产品质量风险。