测试生命周期

5.1 软件测试生命周期

传统的软件工程认为每个软件产品都要经历需求定义、需求分析、设计、编码、测试、使用和维护到最后的退役过程,当软件不再被使用之后软件退役就标志着软件生命周期的结束。对软件测试从狭义和广义两个角度来解读,狭义上人们认为测试是从单元测试和编码开始的,广义上软件测试是软件产品生产的质量”护航人”,是一项从计划调研、需求定义开始参与,乃至软件产品生命周期全过程的活动,是伴随软件项目的建立而启动的,直至软件产品退役为止而结束,伴随软件产品的一生。软件测试比编码和单元测试活动更早的开始,形象的称为测试左移,而软件测试在软件验收后仍然持续工作甚至直到软件退役,形象的称为测试右移

软件测试的生命周期是伴随软件生命周期一生,又具有测试特点的过程。测试工作中,寻找缺陷、追踪缺陷和确认缺陷消除是最核心的工作,在软件测试活动内的软件缺陷的也具有其特有的生命周期。


5.1.1 测试的生命周期

从狭义的角度,测试是从编码和单元测试开始直到验收测试项目提交给用户的,其软件测试生命周期专注于传统的软件测试的策略与技术。

其软件测试阶段的输入信息包括两类:

  • 软件配置:指测试对象。通常包括需求说明书、设计说明书和被测试的源程序等;
  • 测试配置:通常包括测试计划、测试步骤、测试用例以及具体实施测试的测试程序、测试工具等。

测试对执行结果与预期结果进行比较以后,判断是否存在错误,决定是否进入排错阶段,进行调试任务。对修改以后的程序要进行重新测试,因为修改可能会带来新的问题。通常根据出错的情况得到出错率来预估被测软件的可靠性,这将对软件运行后的维护工作有重要价值。

广义角度的测试生命周期

广义角度从测试工作左移的角度来分析,测试的生命周期分为:

  1. 测试目标
  2. 测试需求
  3. 测试计划
  4. 测试设计和配置
  5. 测试实施和总结评估

确定测试目标后,经需求评审依据软件需求规格说明书确定测试需求,开始启动测试工作,制定测试计划,随后的测试设计是根据设计评审后的说明文档,再实施测试,根据缺陷修复情况或回归测试,在测试设计和测试实施之间通过缺陷管理形成循环,并最后输出缺陷报告,测试报告经评审后做总结报告,完成整个测试的生命周期。

无论哪种生命周期形式,在每个阶段都要完成一些确定的任务,在执行每个阶段的任务时,可以采用行之有效的结构分析设计技术和适当的辅助工具;在结束每个阶段的任务时都进行严格的技术审查和管理复审,最后提交最终软件配置的一个或几个成分(文档或程序)。


5.1.2 软件缺陷的生命周期

缺陷管理在软件测试生命周期中很重要,“尽早地和不断地进行软件测试”“成功的测试用例是能够发现未知的错误”。软件测试给软件找缺陷,就好比一位医生给病人看病,要尽快询问病人病症,才能分析病因并彻底治疗。找到病因是最关键的一步,如何去除病根则是第二步。软件测试亦是如此,首先要会给软件”把脉”,首先是全面体检(软件是否满足需求),然后看脸色(软件的外部UI),闻问(输入测试数据,返回值是否与期望相符),找到问题,形成综合评判(缺陷报告),最后就是缺陷分析定位(对症下药),协助开发修复缺陷,并回归测试(复查),确认缺陷已修复。

在软件测试中发现的每一个缺陷都有自己的生命周期,缺陷的生命周期分为四个阶段:发现缺陷、记录缺陷、跟踪缺陷和缺陷关闭。软件缺陷是在软件测试活动的过程中产生的,产生的每一条缺陷都有其特有的生命周期过程。通过软件测试活动发现问题,软件测试人员将问题记录下来,并保持对这个问题的跟踪,通过跟踪又可能会发现新的问题。程序员修复后,再继续在现问题,通过再现问题继续跟踪缺陷。当缺陷完成修复后,缺陷关闭,就成为了历史数据保存下来。

缺陷优先级

记录缺陷不仅要记录缺陷的基本信息,还需要根据问题的严重性确定其待修复的优先级。一般来说,缺陷修复的优先级别和缺陷的严重程度是正相关的,但也有例外,例如有些功能是极少的用户会涉及到,虽然不当操作可能会引发系统崩溃,但极少极个别的用户可能会进行的操作,为让程序员集中精力做更重要的核心功能,可以适当降低优先级。对于是致命或严重级别的缺陷,是需要测试人员着重跟踪到底的缺陷,确认修复后再关闭缺陷。


小故事:扁鹊见蔡桓公

扁鹊见蔡桓公,立有间,扁鹊曰:“君有疾在腠理,不治将恐深。“桓侯曰:“寡人无疾。“扁鹊出,桓侯曰:“医之好治不病以为功。“居十日,扁鹊复见曰:“君之病在肌肤,不治将益深。“桓侯不应。扁鹊出,桓侯又不悦。居十日,扁鹊复见曰:“君子病在肠胃,不治将益深。“桓侯又不应。扁鹊出,桓侯又不悦。居十日,扁鹊望桓侯而还走。桓侯故使人问之,扁鹊曰:“疾在腠理,汤熨之所及也;在肌肤,针石之所及也;在肠胃,火齐之所及也;在骨髓,司命之所属,无奈何也。今在骨髓,臣是以无请也。“居五日,桓侯体痛,使人索扁鹊,已逃秦矣。桓侯遂死。

这个小故事的道理同样可以用在软件测试上,软件的缺陷发现的越早越好,越迟付出的代价越多,有可能就无法挽救了。


总结

人们在对软件工程开发的常规认识中,认为开发程序是一个复杂而困难的过程,需要花费大量的人力、物力和时间,而测试一个程序则比较容易,不需要花费太多的精力。这其实是人们对软件工程开发过程理解上的一个误区。在实际的软件开发过程中,作为现代软件开发工业一个非常重要的组成部分,软件测试正扮演着越来越重要的角色。随着软件规模的不断扩大,如何在有限的条件下对被开发软件进行有效的测试正成为软件工程中一个非常关键的课题。