软件测试的5W2H (what why where when who how howmuch)
一.什么是软件测试(What)
一句话,软件测试就是对软件质量的度量,判断其是否满足需求。
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
软件测试已有了行业标准(IEEE/ANSI ),1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。它再也不是一个一次性的,而且只是开发后期的活动,而是与整个开发流程融合成一体。
二.软件测试的重要性(Why)
对于产品质量、用户利益、尤其是涉及生命安全或重要的军事、经济目标的项目显得
尤其重要。
用户为了保证自己业务的顺利完成,当然希望选用优质的软件。质量不佳的软件产品
不仅会使开发商的维护费用和用户的使用成本大幅度增加,还可能产生其他的责任风险,造成公司信誉下降。一些关键的应用领域(例如银行、证券交易、军事等)如果质量有问题,还可能造成灾难性的后果。
现在人们已经逐步认识到,因为软件产品整个生命周期,会不可避免地引入错误,是
软件中存在的错误导致了软件开发在成本、进度和质量上的失控,测试的目的是为了发现和改正错误。由于软件是由人来完成的,所以它不可能十全十美,虽然不可能完全杜绝软件中的错误,但可以通过软件测试等手段使程序中的错误数量尽可能少,密度尽可能小。
一些案例:
1. 2011年温州7.23 动车事故
2011年7月23日20时30分05秒,甬温线浙江省温州市境内,由北京南站开往福州
站的D301次列车与杭州站开往福州南站的D3115次列车发生动车组列车追尾事故,造成40人死亡、172人受伤,中断行车32小时35分,直接经济损失19371.65万元。
上海铁路局声称,根据初步掌握的情况分析,“7·23”动车事故是由于温州南站信号
设备在设计上存在严重缺陷,遭雷击发生故障后,导致本应显示为红灯的区间信号机错误显示为绿灯。
2. 消失在太空
在制造其火星气候轨道探测器时,一个NASA的工程小组使用的是英制单位,而不是预
定的公制单位。这会造成探测器的推进器无法正常运作。正是因为这个 Bug,1999年探测器从距离火星表面130英尺的高度垂直坠毁。此项工程成本耗费3.27亿美元,这还不包括损失的时间(该探测器从发射到抵达火星将近一年时间。)
3. 阿丽亚娜5型火箭的杯具处女秀
1996年6月4日,阿丽亚娜5型运载火箭的首航,原计划将运送4颗太阳风观察卫星到预定轨道,因软件引发的问题导致火箭在发射39秒后偏轨,从而激活了火箭的自我摧毁装置。阿丽亚娜5型火箭和其他卫星在瞬间灰飞烟灭。
后来查明的事故原因是:代码重用。阿5型的发射系统代码直接重用了阿4型的相应代码,而阿4型的飞行条件和阿5型的飞行条件截然不同。此次事故损失3.7亿美元。
4. Healthcare.gov灾难
HealthCare.gov是美国联邦健康保险交换系统的核心,该网站自2013年10月1日开通运营以来一直遭受各种问题的困扰,比如用户注册失败、浏览器崩溃、性能、数据问题等等。
承包商表示,他们仅有两周的时间来测试该系统,实际上需要几个月的时间才可以完成,因此,网站崩溃的原因之一便是测试时间太短。
事实上,作为典型的政府项目,它失败原因有很多,以下是HealthCare.gov七宗罪:
承包商太多,导致最终结构过度复杂;
整个项目都依赖于Experian提供的数据,而无论是政府还是承包商都对数据质量没有发言权,数据出现问题会导致整个网站遭遇问题;
从未经过时间检验的全新结构;
需求不断变化,设计不断改变;
由于需求直到上线最后一分钟还在改,导致网站根本无法进行全面的测试;
不是逐步增加新特性,网站将全部功能一下子推出,由于没有办法在高负荷下测试网站的性能,政府无法根据测试结果扩建基础设施;
网站没有有效的方法在多层组件中管理bug跟踪,没有方法识别问题根源。
三.软件测试在整个研发流程中的位置(Where)
四.测试什么时候介入(when)
统计表明,属于需求分析和软件设计错误的约占三分之二,属于程序编写错误的仅占
三分之一左右。项目整个生命周期,都需要测试介入,越早越好,提倡测试左移(又称测试前移)。
测试左移是依据敏捷宣言而来的,测试左移的原则支持测试团队在软件开发周期早期
和所有干系人合作。因此他们能清晰地理解需求以及设计测试用例去帮助软件“快速失败”,促使团队更早的修改所有的bug。
测试左移,让测试人员在软件开发生命周期内更早的参与进来,同时让他们去理解需
求、软件设计、软件架构以及软件功能,也让他们去向客户、商业分析师和开发人员问问题,寻找答案,提供反馈结果已达到支持团队的工作得可能性。参与和理解会使测试人员获取产品完整的知识,彻底想清楚各种场景,根据软件行为设计实时的场景,这些都会帮助团队在编码完成之前识别出一些缺陷。
五.谁来执行测试(who)
测试主要由SQA组完成,小组分工:项目推进组,质量保证组,测试开发组,详见人员分工思维导图。
测试也需要产品、开发、业务人员介入,比如:
单元测试:主要由开发人员完成
冒烟测试:主要由开发人员提交测试前完成
验收测试:主要由产品和业务人员验收完成
......
六.如何执行(How)
参与需求/开发/UI等各类评审;
编写测试方案/测试分析/测试用例,并据此执行测试;
提交bug并验证bug解决情况;
编写测试报告等等;
测试用例和测试bug示例如下:
七.测试成本(How much)
软件测试,到底是成本花费,还是一种长期的软件质量投资?
软件测试是生产的必不可少的环节,不仅仅是生产过程中产生的费用叫成本,未来因为产品缺陷产生的服务费用也是成本,如果产生了客户退货、产品召回,也是要算成本!
在软件开发早期,软件开发只是编码及部署。但随着软件行业的发展,开发企业开始在发布前进行测试。因此,这个意义上来说,软件测试是成本。但从更普遍的意义上来讲,软件测试其实是一种提供软件质量的投资。
软件测试看似成本,但其实是一项可以减少将来若干不必要费用的投资,同时还可以为企业赢得良好的口碑。许多统计资料表明,开发过程每前进一步,发现和修复一个缺陷的平均成本要提高10倍甚至更高。软件测试的另一个经济目标是尽早发现缺陷,降低修复及售后服务成本。每一个已发布产品中的缺陷除了会影响产品及企业的声誉外,还会直接增加产品的售后服务成本。无论是派人到现场调试,或研发、发布补丁程序都要远比在发布前的修复成本昂贵数十倍,甚至数百倍。
软件开发面临很多的困难,诸如发布时间紧、市场压力大、投资过高等。这些不能成为挤压软件测试投入的借口。因为软件测试是软件开以生命周期一个非常重要的部分。对于一些基于产品的公司或组织,软件测试作为一种投资可能更加适合,因为它可以节约销售成本及技术支持成本。