第1章 测试那点事
1.1 软件测试概述
软件测试是伴随着软件工程的发展而产生的,它是软件工程发展过程中精细化分工的必然产物之一。在工业领域,每一种产品在生产过程中都会有质量检测环节,质检人员通过测试来检验产品是否达到要求。软件系统的制品过程也不例外。软件测试是指利用评估或验证手段来检查应用系统是否与预期一致,并在规定条件下对程序进行操作以发现错误,同时对软件质量进行评估。
从早期的由一个人完成软件的需求设计、开发、测试、交付客户到逐渐形成不同岗位的精确化细分,其间经历了很长的时间。直到1975年,软件测试才彻底和研发工程师自我的调试阶段区分开来,成为一种寻找软件缺陷的技术活动。1979年,The Art of Software Testing(《软件测试的艺术》)出版,这本书对软件测试行业有着重要的里程碑意义。当时,软件测试的主要目标仍是找到软件中的缺陷,这其实与我们现在所说的软件测试是有区别的。如今,我们在提到保障软件(或构件)质量时,测试活动和制品过程是作为有机整体看待的,而不是看成相互割裂的两部分。
这种保障软件(或构件)质量的思想要追溯到20世纪80年代早期,在这一时期,IEEE(Institute of Electrical and Electronic Engineers)、ANSI(American National Standard Institute)、ISO(International Standard Organization)等国际标准逐渐被制定出来。1983年,Bill Hetzel 在Complete Guide of Software Testing(《软件测试完全指南》)一书中指出,“测试是以评价程序或系统属性为目标的任何一种活动,测试是对软件质量的度量”。软件测试的这一定义至今仍被沿用。2002年,Rick和Stefan在Systematic Software Testing(《系统的软件测试》)一书中对软件测试做了进一步定义,“测试是为了度量和提高被测软件的质量,而对测试软件进行工程设计、实施和维护的整个生命周期过程”。
随着软件工程的发展,“内建质量”的理念越来越被广大IT从业者认可。“质量是构建出来的,而不是测出来的。”在系统提交测试的时候,系统的质量就已经内置于系统之中了,测试工程师运用测试思维,设计测试用例并开发测试场景,从而将系统里存在的缺陷挖掘出来,之后再将问题的详细出现过程记录下来,交给团队内部的研发工程师修复缺陷。这也说明研发工程师和测试工程师是团队协作关系,一支能够交付优秀系统的团队通常由产品经理、研发工程师、测试工程师、运维工程师、项目经理等人员组成,团队内部的每一名成员都需要为交付高质量的系统而努力。