软件测试就是发现软件产品中的Bug,强调测试人员以逆向思维方式,不断思考开发人员可能存在的误区、不良习惯、系统的边界条件、异常输入和操作、系统弱点和漏洞等,更快地发现软件系统的问题。毕竟开发人员力求构造软件,以正向思维方式为主,所以测试人员从逆向思维出发,可以获得更高的测试效率。
软件测试是验证软件产品特性是否满足用户的需求,是以正向思维方式针对软件系统的所有功能点,逐个验证其正确性,这是传统工业的质检工作在软件业的自然延伸。
只有等待代码开发出来之后,通过执行程序,像用户那样操作软件发现问题,这就是“动态测试”。
静态测试就是在不运行软件系统时对软件或阶段性成果进行评审,包括需求评审、设计评审、代码扫描、代码评审等。
软件测试从“动态测试”延伸到“静态测试”,是从狭义的软件测试发展到广义的软件测试,也使“软件测试”不再停留在编程之后的某个阶段上,而是贯穿整个软件开发生命周期(Software Development Life Cycle,SDLC)的质量保证活动。有了广义软件测试的概念,在敏捷开发中,软件测试就能被解释为对软件产品质量的持续评估。在敏捷方法中,不仅提倡持续集成,而且提倡持续测试,持续集成实际上也是为了持续测试。
从国际标准对软件测试的定义来看,软件测试被看做是“验证(Verification)”和“有效性确认(Validation)”这两类活动构成的整体,缺一不可。如果只做到其中一项,测试是不完整的。
(1)“验证”是检验软件是否已正确地实现了产品规格书所定义的系统功能和特性。验证过程提供证据表明软件相关产品与所有生命周期活动的要求相一致,即验证软件实现(即交付给客户的产品)是否达到了软件需求定义和设计目标。
(2)“有效性确认”是确认所开发的软件是否满足用户实际需求的活动。因为软件需求定义和设计可能就不对,上述一致性不能保证软件产品符合客户的实际需求,而且客户的需求也是在变化的,当需求定义是半年前确定的,这种变化的可能性就比较大。
软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性产品)中所存在的各种问题,尽最大可能地消除软件开发过程中所存在的产品质量风险。