早期并没有软件测试这个概念,直到 20 世纪 60 年代(软件工程建立前),为证明程序设计的 正确性而进行了相关的测试。 1972 年,在北卡罗来纳大学举行了首届软件测试正式会议。 1975 年,John Good Enough 和 Susan Gerhart 在 IEEE 上发表了文章《测试数据选择的原理》, 软件测试被确定为一种研究方向。 1979 年,Glenford Myers 在《软件测试艺术》中,对测试做了定义:测试是为发现错误而执行 的一个程序或者系统的过程。 20 世纪 80 年代早期,“质量”的号角开始吹响。软件测试定义发生了改变,测试不单纯是一 个发现错误的过程,而且包含软件质量评价的内容,制定了各类标准。 1983 年,Bill Hetzel 在《软件测试完全指南》中指出:测试是以评价一个程序或者系统属性为 目标的任何一种活动,测试是对软件质量的度量。
20 世纪 90 年代,测试工具盛行起来。现阶段的测试工具主要有两种来源:开源测试工具和商 业测试工具。 (1)开源测试管理工具主要有:Bugzilla、Bugfree、TestLink、Mantis 等。 (2)开源自动化测试工具主要有:Watir、Selenium、MaxQ、WebInject 等。 (3)开源性能测试工具主要有:JMeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator 等。 (4)商业测试工具主要包括以下几种: 1)TestDirector:全球最大的软件测试工具提供商 Mercury Interactive 公司生产的企业级测试管 理工具,也是业界第一个基于 Web 的测试管理系统,它可以在公司内部或外部进行全球范围内测 试的管理。通过在一个整体的应用系统中集成了测试管理的各个部分,包括需求管理、测试计划、 测试执行以及错误跟踪等功能,TestDirector 极大地加速了测试过程。 2)Quality Center:基于 Web 的测试管理工具,可以组织和管理应用程序测试流程的所有阶段, 包括指定测试需求、计划测试、执行测试和跟踪缺陷。此外,通过 Quality Center 还可以创建报告 和图来监控测试流程。合理使用 Quality Center 可以提高测试的工作效率,节省时间,达到事半功 倍的效果。 3)QuickTest Professional:HP QuickTest Professional 针对功能测试和回归测试自动化提供业界 最佳的解决方案,适用于软件主要应用环境的功能测试和回归测试的自动化。采用关键字驱动的理 念来简化对测试用例的创建和维护。它让用户可以直接录制屏幕上的操作流程,自动生成功能测试 或回归测试脚本。专业的测试者也可以通过其提供的内置脚本和调试环境来取得对测试对象属性的 完全控制。 4)LoadRunner:一种预测系统行为和性能的负载测试工具。以模拟上千万用户并发负载并 实时监测系统性能的方式来确认和查找问题。LoadRunner 能够对整个企业架构进行测试。通过 使用 LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 其他工具与自动化测试框架还有:Rational Functional Tester、Borland Silk 系列工具、WinRunner、 Robot 等。 1996 年提出的测试能力成熟度(Testing Capability Maturity Model,TCMM)、测试支持度 (Testability Support Model,TSM)、测试成熟度模型(Testing Maturity Model,TMM)。 1)TCMM 于 1996 年,由 Rodger 和 Susan Burgess 在 Testing Computer Software 会议上提出。 2)TSM 于 1996 年,由 David Gelperin 和 Aldin Hayashi 提出。 3)TMM 于 1996 年,由 Ilene Burnsein 博士在伊利诺伊研究所提出。 TCMM、TSM 和 TMM 是对软件能力成熟度模型(CMM)的有益补充。 到了 2002 年,Rick 和 Stefan 在《系统的软件测试》一书中对软件测试进行了进一步定义: 测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护整个生命周期的 过程。 我国的软件测试技术研究起步于“六五”期间,主要是随着软件工程的研究而逐步发展起来的。
由于起步较晚,与国际先进水平相比差距较大。现在国内软件测试还处于初级发展阶段,在 2004 之前大学毕业生出来找工作,可能几乎没有听说过软件测试这个职位,企业也不重视软件测试,近 些年随着互联网信息技术和我国外包业务的发展,很多 IT 企业开始重视软件测试,并开始组建软 件测试团队。 虽然近些年来,软件测试在国内得到很大的发展,但相对于国外软件测试的发展来说,国内还 处于初级阶段,目前国外开发工程师与测试工程师的人员比例为 1:1,而在国内开发人员与测试人 员的比例为大概 7:1 左右,相对于国外还有很大差距。据国家权威部门统计,中国软件人才缺口超 过 100 万人,其中很大一部分为软件测试人才,缺口达到 30~40 万。 然而符合企业急需的软件测试工程师在国内现有的人才数量中却寥寥无几,由于软件测试工程 师属于软件产业化过程中凸显的一个新型软件技术职业,国内传统学历教育在这方面尚处于真空状 态,无法满足行业对这一特殊岗位的需求。根据信息产业部门发布的最新报告显示,我国软件测试 工程师的行业需求超过 30 万,业内专家预计,在未来 5~10 年中,我国企业对测试人才的需求数 字还将继续增大。 在国外,软件测试已经不仅仅是为了发现程序或系统中的错误,还包括对软件质量的度量和评 价,而在国内,软件测试更多的是为了发现程序或系统中存在的错误。 目前,国内主要以手工测试为主,主要验证客户需求是否被实现,而随着软件复杂程度不断加 大,手工测试的成本越来越高,导致测试的整体成本越来越高,随着国内手工测试的不断发展与完 善,这两年国内很多 IT 企业也已经开始研究自动化测试,希望通过自动化测试来提高测试效率。 但目前大部分企业通过自动化测试工具录制和回放来实施自动化测试,离开发一个很完善的自动化 测试流程框架还有很长的一段路。 目前,国内的软件测试流程还在不断的完善之中,并且软件测试工程师的整体素质还不是很高, 未来企业对软件测试工程师的要求会越来越高,不仅仅需要掌握软件测试的相关知识,还需要了解 编程技术、业务流程、数据库技术、网络技术等。 正是因为国内软件测试还处于初级发展阶段,所以未来软件测试行业还有着很大的发展潜力。 其主要有三个方面。 第一:进入软件测试行业的机会 现在软件测试的门槛相对于软件开发低很多,这样为想进入软件测试的朋友提供了更多更好的 机会。正是由于进入软件测试较简单,所以进入软件测试行业之后受到公司的重视程度与软件开发 工程师也有所不同,原因很简单,开发工程师可以生产出产品,产品是可见的,而测试并不能生产 出产品,只是发现产品里面的缺陷。因此一些企业不是很重视软件测试。但随着软件测试的发展, 软件质量在整个公司的研发过程和整个项目团队中得到充分的重视,那么同级别的测试工程师和开 发工程师的待遇将是一样的。在国外一些软件测试工程师的待遇甚至超过开发工程师,因为高级软 件测试工程师的要求可能超过同级别的开发工程师,他们不但需要熟悉软件测试,还需要熟悉编程 的相关知识。
第二:未来发展和待遇 软件测试工程师的未来是高级测试工程师,而高级软件测试工程师就需要熟悉性能测试或自动 化测试。随着软件测试的发展,未来手工测试工程师的竞争力逐渐下降,性能测试和自动化测试是 国内软件测试发展的趋势,性能测试工程师和自动化测试工程师的职业逐渐形成,就不仅仅要求他 们能设计测试用例,还需要相关的编码能力,并且对数据库、操作系统等都应该有相应的了解。当 然,性能测试工程师和自动化测试工程师的待遇相对于手工测试工程师也有很大的提高,并且比一 般的开发工程师也会高出很多,这同时也说明仅仅依靠手工测试,想要在软件测试行业有一个好的 发展变得越来越难了。 毋庸置疑,国内软件测试的未来是美好的,但是并不代表每个软件测试工程师一定会有一个好 的发展,准确地说中国的软件测试发展充满机会和挑战,只有不断地提高自身的能力,才能更好地 适应软件测试行业的发展。 第三:相关培训机构和第三方测评机构不断发展 国内关于软件测试培训的公司或机构很少,但随着软件测试的发展,企业对软件测试人员的需 求不断增多,促使软件测试相关的培训机构也不断发展。而对于企业来说,企业在发展过程中也需 要不断完善测试流程,这同样需要相关培训机构的帮助,所以会促使软件测试相关培训机构的发展。 1.2 历史教训 以前大家不把软件当回事,但现在我们不能对软件视而不见,软件几乎渗透到我们生活的每个 角落。然而软件始终不能做到完美无缺,总是存在让人厌烦的缺陷。软件开发工程师一个小失误就 可能带来灾难性的事故。 1.2.1 1962 年,“水手 1 号”火箭爆炸 经济损失:1850 万美元。 1962 年 7 月 22 日,美国发射了一枚命名为“水手 1 号”的火箭。火箭在飞往金星途中,突 然偏离预定的轨道,任务控制在起飞 293 秒后摧毁了火箭,凌空爆炸。有关部门立即进行了紧张 的调查,调查的结果也出乎人们的意料,导致这次事故的原因是:在控制火箭飞行的计算机程序 中错误地省略了一个连字号“-”。仅仅是因为缺少了一个小小的连字号“-”,竟使美国损失了 1850 万美元。 1.2.2 1978 年,哈特福德体育场倒塌 经济损失:7000 万美元以及给当地经济造成的 2000 万美元的损失。 1978 年,在上万球迷离开哈特福德体育场仅仅几小时后,钢结构的体育场屋顶就被大雪压塌 了。起因是 CAD 软件程序员在设计体育场时通常错误地假设钢结构屋顶的支撑仅承受纯压力,但 当其中一个支撑意外地因大雪而被压塌,引起连锁反应,导致体育场屋顶的其余部分像多米诺骨牌一样相继倒塌,进而导致整个体育场全部倒塌。 1.2.3 “5·19”南方六省断网事件 2009 年 5 月 19 日,海南、甘肃、浙江、江苏、安徽、广西六个省出现了严重的断网现象,称 之为“5·19”断网事件。因此导致打不开网页,QQ、MSN 等即时通信工具掉线和无法在网络上 收听、收看音、视频等故障。广东、上海、北京等 10 多个省市也受到波及。 事故原因是 DNS 域名解析故障。DNS 域名解析是网络用户访问互联网时服务商所进行的必要 工作,普通用户在访问互联网时一般是输入网站的域名,但在后台技术上则需要翻译成数字化的服 务器地址,经过这个过程,用户才能看到想要访问的网站。 由于暴风影音客户端软件存在缺陷,加上其高达 1.2 亿的用户,当暴风影音域名授权服务器工 作异常时,导致安装该软件的上网终端频繁发起域名解析请求,引发 DNS 拥塞,造成大量用户访 问网站慢或网页打不开。 此次事故从某种意义上完全是一场“蝴蝶效应”。最开始可能仅仅是一家网游私服为了争夺玩 家,不择手段地攻击另外一家私服。黑客在设法黑掉竞争对手网站的情况下,干脆从域名下手,对 DNSPod 的服务器进行狂轰滥炸。这导致中国电信方面检测到异常的网间流量,从而启动应急机制。 不幸的是这台被攻击的 DNS 服务器正在为大约 10 万家网站提供域名解析服务,其中有 VeryCD、 中国站长、4399.com 等知名网站,而最出名、流量最大的恰恰是暴风影音。网民同时向以暴风影 音为首的 10 万个网站的访问请求随即演变为一场灾难。由于 DNS 服务器已经瘫痪,而用户的请求 集体转向中国电信的 DNS 解析服务器,从而导致电信服务器很快就瘫痪了。这样的效应逐步扩大, 最终导致全国“5·19”南方六省网络瘫痪的重大事故。 1.2.4 2003 年,美加停电事故 著名安全机构 SecurityFocus 的数据表明,2003 年 8 月 14 日发生的美国及加拿大部分地区史上 最大停电事故是由软件错误所致。 SecurityFocus 的数据表明,位于美国俄亥俄州的第一能源(First Energy)公司下属的电力监测与 控制管理系统“XA/21”出现软件错误,是北美大停电的罪魁祸首。根据第一能源公司发言人提供的数 据,由于系统中重要的预警部分出现严重故障,负责预警服务的主服务器与备份服务器接连失控,使 得错误没有得到及时通报和处理,最终多个重要设备出现故障导致大规模停电。 预警系统崩溃后没有接收到更多的警报,更没法向外传播,操作员并不知道预警系统已经失 效,他们发现了部分异常情况,但因为没有看到预警系统的警报,而不知道情况有多么严重,以 致一个小时后才得到控制站的指示。但此时没完没了的故障干扰已经让操作员反应不过来,无法 控制整个局面。正常情况下,出现错误的网络会立即与其他网络分隔开来,这样一来错误就会被 固定在一个地方,但是同样由于预警系统失灵,操作员没有做出应有的反应,最终使得错误蔓延, 一发不可收拾。 根据北美电力可靠性协会(NERC)公布的有关事故资料,可看出事故起因和发展过程:在发生大停电事故前 1 小时,即美国东部时间 15:06,美国俄亥俄州的一条 345kV 输电线路 (Camberlain-Harding)跳开,其输送的功率转移到相邻的 345kV 线路(Hanna-Juniper)上,引起 该线路长时间过热并下垂,从而接触线下树木。当时由于警报系统失灵没能及时报警并通知运行人 员,15:32 该线路因短路故障而跳闸,使得克利夫兰失去第二回电源线,系统电压降低。 此后,发生了一系列连锁反应,包括:多回输电线路跳开、潮流大范围转移、系统发生摇摆和 振荡、局部系统电压进一步降低,引起发电机组跳闸,使系统功率缺额增大,进一步发生电压崩溃, 同时有更多的发电机和输电线路跳开,造成大面积停电的发生。 在首先跳开的 5 回 345kV 线路中,除第 4 回属于 AEP 公司外,其他 4 回均属于 FE 公司。他们认 为,虽然有一些线路跳闸,系统也是安全的,因而未与其他相连系统解列,导致事故扩大。