1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。它再也不是一个一次性的,而且只是开发后期的活动,而是与整个开发流程融合成一体。这一定义将测试从开发的对立面(给开发找BUG),转为对软件质量的度量。
上述的三个定义对应Boris Beizer对测试者的认知划分的5个阶段的阶段1到3。
阶段1:测试的目的是现实软件是可工作的
阶段2:测试的目的是为了显示软件是不能
阶段3:测试的目的不是去证明任何东西,而是把软件可能不工作的预知风险制约到一个可接受的阈值下。
即测试的目的从找BUG到控制质量风险。因为测试是没有办法提高质量的,只能反应软件的质量,而软件的质量更多的需要靠前期的设计与预防,测试发现的BUG越多,说明质量越差,项目按期交付的风险就越高。此外,测试也不是发现越多的BUG越好,如果这个BUG不会在客户的场景中遇到,那这个BUG就没有太大意义。
瀑布开发到敏捷开发的转变
瀑布模型开发严格把软件项目的开发分隔成各个开发阶段:需求分析,概要设计,详细设计,编码,单无测试,集成测试,系统测试等。使用里程碑的方式,严格定义了各个开发阶段的输入和输出。瀑布模型更像是开发流水线,如果上一阶段达不到要求的输出,下一阶段的工作就不展开。在瀑布开发模型中开发人员与测试人员工作相互独立,测试只有在开发交付可测试的版本后才会启动,整个项目的周期就很长。
敏捷开发的思想是适应客户需求的快速变化。因为只有快才可以适应目前社会的快节奏,主动接受需求变更,使设计出来的软件有灵活性,可扩展性,让客户满意,才能获得成功。敏捷开发是一种新的开发方式,更好地满足了客户的需求,应该说是未来的一个发展趋势。