孟庆鑫 张 龙
(中国电子科技集团公司电子科学研究院 北京 100041)
软件测试模型的探讨
孟庆鑫 张 龙
(中国电子科技集团公司电子科学研究院 北京 100041)
软件测试是软件工程的一个阶段,也是保障软件质量必不可少的重要一环。软件测试模型是软件测试的工作框架,用于指导软件测试过程。本文在深入研究各种综合测试技术的基础上,通过对比分析各种主流的测试模型,提出了一种新的软件测试模型,包括静态测试、动态测试,测试评估等活动,把这些活动嵌入到软件开发的整个生命周期,能更好地规划软件开发和测试等一系列活动,提高了软件生产效率及其质量,该模型还适合于迭代开发。
软件测试模型 V模型 W模型 静态测试 动态测试
信息时代的飞速发展,使得软件产品在社会生活的各个领域得到广泛应用,软件产品本身越来越复杂。如何提高软件质量,提高软件可靠性越来越受到研究机构和企业的关注。长期的软件生产实践表明,软件成功与否的关键技术在于软件测试[1]。正如软件开发有过程模型一样,软件测试也有测试模型。它描述了软件测试过程所包含的主要活动,以及活动之间的相互关系,描述软件测试的各项活动与软件开发过程的其他活动之间的关系。软件测试模型把软件测试用例(TEST CASE)的设计方法集成到一系列已经周密计划过的步骤中去,从而有效地减少测试活动中不必要的资源消耗,使得测试活动更有效率。一个好的软件测试模型,应具有以下特征:
(1)它将测试计划、测试用例设计、测试执行、还有测试结果收集与分析结合在一起。
(2)不同的测试技术,应用于不同的时间点。
(3)使软件设计中的错误尽可能早地暴露出来。
软件开发的几十年中,软件专家总结出了很多开发模型。但在这些模型中,测试作为软件开发的一个阶段,被附加在开发模型后面,忽视了开发活动和测试活动是并行进行的,从而使得测试阶段使用的资源和占用的时间都大大增加。近年来,人们逐步认识到软件测试的重要性,提出了一些新的测试模型如V模型、W模型、X模型等等。本文分析研究了传统的软件测试模型,分析了其不足之处,并提出了一种的测试模型。
2.1 V测试模型
V测试模型结构如图1所示。
图1 V模型结构图
V模型[2]是目前软件测试模型中较广泛使用的模型。如图1所示,左边下降的是开发过程各阶段,与此对应的是右边测试过程的各个阶段。测试先从单元测试开始,然后是集成测试、系统测试和验收测试。例如:单元测试检查代码是否符合原先的详细设计;系统测试检查集成后的产品是否符合需求说明书的要求。V模型的优点是非常明确的标明了测试过程中存在的不同阶段,并且清楚地描述了这些测试阶段和开发过程各阶段的对应关系。V模型的缺点也是显而易见的:
(1)测试活动在编码完成之后才开始,会错过早期发现需求分析和设计中隐含的错误的时机。最严重的错误是那些导致程序无法满足需求的错误,而需求设计阶段引入的错误往往占了软件错误中的很大一部分。
(2)开发人员编码完成,就等着测试小组提交缺陷报告,然后修改程序。人力资源的利用率低,也不利于小组间的合作。
(3)这个模型测试过程和开发过程在时间上被严格地划分开,这样不利于测试计划、测试用例、出错统计和最终分析报告等文档的保存。
(4)每个测试阶段在充分完成后才能进入下个阶段,并且一旦该阶段完成,理论上是不允许再回来修改或执行的。
2.2 W测试模型
W测试模型结构如图2所示。
W模型是对V模型的改进,针对“测试是开发之后的一个阶段”等问题,W模型强调需求、功能和设计同样要测试,W模型由两个V模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行且相对独立的关系。W模型在V模型的基础上增加需求测试、规格测试和设计测试,目的是需求的完整性、一致性、准确性、可测试性等。W模型提倡软件测试并不等于程序测试这个理念,不应仅限于程序测试的范围内,而应贯穿于软件定义与设计开发的整个过程。因此,需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档及程序都应成为软件测试的对象。
图2 W测试模型结构图
W模型虽然强调了开发活动与测试活动之间的并行关系,但其实还可以通过发掘各个测试过程之间的并行性来进一步提高模型的效率;另外,W模型里虽然刻画了各个测试阶段与对应的修改工作之间的微循环关系,但是该模型将循环的关系仅仅局限于单个测试阶段之内的做法容易对测试人员造成误导。实际上,当在某个阶段发现问题并修改之后,往往要回到最初,从单元测试着手进行回归测试。最后,W模型中未能准确描述每个开发或测试阶段应交付的产品,测试对象不明确,未能包含过程控制以及阶段开始和结束的判定。
2.3 X模型
X模型的左边描述的是针对单独程序片段所进行的相互分离的编码和测试,此后将进行频繁的交接,通过集成最终成为可执行的程序,然后再对这些可执行程序进行测试。己通过集成测试的成品可以进行封装并提交给用户,也可以作为更大规模和范围内集成的一部分。多根并行的曲线表示变更可以在各个部分发生。由图3中可见,X模型还定位了探索性测试,这是不进行事先计划的特殊类型的测试,这一方式往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。但这样可能对测试造成人力、物力和财力的浪费,对测试员的熟练程度要求比较高。
图3 X测试模型结构图
2.4 各模型的特点
V模型,非常明确地标注了测试过程中存在的不同类型的测试。
W模型,非常明确地标注了生产周期中开发与测试之间的对应关系。
X模型,这个模型指出整个测试过程是在探索中进行的。
改进的测试模型结构如图4所示。
图4 改进型测试模型结构图
3.1 模型包含的测试活动
该模型包含5个重要的测试活动:测试计划、测试设计与修改、静态测试、动态测试、测试评估[2]。
(1)测试计划:测试计划包含验收测试计划、系统测试计划、集成测试计划、单元测试计划。专业的测试必须以一个好的测试计划作为基础,测试计划应该作为测试的起始步骤和重要环节。测试计划的目标是描述所有要完成的测试,包括完成所需的资源和进度。测试计划应给出被测试软件的背景信息、测试的目标和风险,以及所要执行的特定测试。测得太多不行,浪费人力财力;测得太少也不行,软件的质量得不到保证。有效的测试方法就是明确和评价计算机系统的各种风险,能把这些风险缩小到测试范围内是很重要的。要确定能接受多少风险,然后制定测试计划实现这个目标。所以有经验的测试人员会基于风险找到一个平衡点,逐步完成测试计划[4]。
(2)测试设计:测试设计包含验收测试设计、系统测试设计、集成测试设计、单元测试设计。测试设计环节则是在“测试计划”环节的基础上进一步细化和分析,从而制定出针对于该项目及每个测试活动的测试策略、测试方案、测试用例设计,测试脚本开发,测试数据准备等过程。
(3)静态测试:静态测试包括可行性报告静态测试、需求分析说明书静态测试、概要设计说明书、详细设计说明书静态测试、代码静态测试。静态测试的基本特征是在对软件进行分析、检查和测试时不实际运行被测试的程序。静态测试主要用于对各种软件文档进行测试,是软件开发中行之有效的质量控制方法之一。在软件开发的早期阶段,由于可运行的代码尚未产生,不可能进行动态测试,而这些阶段的中间产品却直接关系到软件开发的成败与开销的大小,因此,在这些阶段静态测试就尤为重要。在软件开发多年的生产实践和教训的基础上,研究人员总结出了一些行之有效的静态测试技术和方法,如正式检查、结构化走通等。每当一个文档通过了静态测试,就标志着一项开发工作的总结,标志着项目取得了一定的进展,进入了一个新的阶段。
(4)动态测试:动态测试就是传统的测试阶段,最基本特征就是通过运行软件来检验软件的动态行为和运行结果的正确性。动态测试包括两个最基本的要素:被测试程序和测试数据。这个阶段包括:
①单元测试。单元测试是对软件中的基本组成部分进行测试。如一个模块,一个过程等等。它是软件动态测试中的最基本组成部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。一个软件单元的正确性是相对于该单位的规约而言的。因此,单元测试以被测单元的规约为基准。
于集成测试。集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。它根据集成测试计划,一边将模块或其他软件单位组合成越来越大的系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。
③系统测试。系统测试是对已集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等指标是否满足规约所指定的要求。系统测试应该按照测试计划进行,其输入、输出和其他动态运行行为应该与软件规约进行比较。
④验收测试。验收测试旨在向软件的购买者展示该软件系统是否满足其用户的需求。验收测试的测试数据通常是系统测试的测试数据的子集。所不同的是,验收测试常常有软件的购买者代表在现场,甚至是在软件安装使用的现场。这是软件在投入使用之前的最后测试。
⑤回归测试。回归测试是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确。这里,修改的正确性有两重含义:一是指所作的修改达到了预定的目的,如错误得到改正,能够适应新的运行环境等;二是指不影响软件的其他功能的正确性。回归测试通常包括重新运行系统测试中的部分测试数据。因此,需要搞清哪些测试数据与被修改的代码有关。在软件开发过程中,保留测试数据与程序代码之间的关系对回归测试具有很大的帮助。回归测试还往往需要使用针对所修改的代码的测试数据。这样的测试数据可以根据单元测试、集成测试和系统测试的方法产生。
(5)测试评估:测试评估就是总结项目的测试结果,以提高企业测试的过程,评价测试的有效性。使测试人员及时了解到测试状态,发现测试中的优点与缺点,在下一个迭代过程或下一个项目中复用与改进。这个时候测试计划、测试用例、出错统计和最终分析报告这些文档就有用处了。可以通过分析这些文档,加以总结,评价测试的有效性。
3.2 模型特点
(1)测试全面:软件不但包含了程序源代码和数据文件,还包含了所有在需求、分析设计等阶段产生的文档。因此测试对象应该包含开发过程中的每一个交付。测试全面也指除了测试系统的功能外,也要测试系统的性能、可用性、兼容性、可维护性等非功能性进行测试。
(2)测试与开发并行化:软件测试与开发过程的其他阶段不再是串行工作方式,而是与整个开发过程并行进行。在该模型中有三条主线,中间一条是开发主线,左边一条是每个阶段的测试计划的编写和进行测试设计,这时可以验证软件是否具有可测试性。右边的主线强调要对每个阶段产生的中间可交付结果进行的静态测试,力争将缺陷控制在软件开发过程的每一个阶段。
(3)迭代测试:软件开发过程中,需求分阶段定义与实现,相应测试工作也按阶段展开。在每一个阶段里,起初定义的需求可能发生变更,或是提出新的需求,或是改变原有的需求,需求变更需要项目团队重新进行需求分析,设计和实现代码,开始新一轮的编码-测试过程。对于测试工作而言,变更的需求需要测试人员重新审阅测试计划,跟踪并纠正以前提交的测试用例。脚本,修复错误,排除多余的成分,以增加新发现的功能等。在改进的测试模型中,这种开发和测试的迭代性得到了体现。
(4)全过程测试:改进的测试模型中也体现了“全过程测试”的概念[5]。软件开发与软件测试紧密结合,软件开发和测试过程会彼此影响,这就要求测试人员对开发和测试的全过程进行充分的关注。全过程测试包含两层含义。第一,测试人员要充分关注开发过程,对开发过程的各种变化及时做出响应。例如,当中间的开发过程改变,要对改变的内容及时进行静态测试,并根据相应的改变,来调整测试计划,修改测试用例的设计。第二,测试人员要对测试的全过程进行全程的跟踪,在定测试计划时建立测试过程度量标准,测试结束或是测试过程中,对测试进行评估,及时了解过程信息,调整测试策略。
总结来说,改进的测试模型将软件测试过程活动完全独立,贯穿于整个产品的周期,与其他流程并发地进行,某个测试点准备就绪时,就可以从测试准备阶段进行到测试执行阶段。软件测试可以尽早地进行,并且可以根据被测物的不同而分层次进行。
这个示意图5演示了在整个生产周期中某个层次上的一次测试“微循环”。图中标注的其它流程可以是任意的开发流程,例如设计流程或者编码流程。也就是说,只要测试条件成熟了,测试准备活动完成了,测试执行活动就可以进行了。
图5 改进型测试模型测试流程示意图
改进的测试模型揭示了一个原理:软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地进行。改进的测试模型指出软件测试要尽早准备,尽早执行。不同的测试活动可以是按照某个次序先后进行的,但也可能是反复的,只要某个测试达到准备就绪点,测试执行活动就可以开展。
本文指出了传统测试模型的不足之处,并提出了相应的修正措施,提出了一种改进的软件测试模型。该模型在理论上具有比传统测试模型优秀的地方。进一步的工作就是把该模型的思想用于实际的项目中检验,并进行分析,以从实践上论证该模型的可行性和优越性,具有一定的参考价值。
[1]郑人杰,殷人昆,陶永雷.实用软件工程[M].北京:清华大学出版社,1997.
[2]William E Lewis.Software Testing and Conlinuous Qualify imyrovement[M].Florida CRC Press,2000:41-45.
[3]张永梅,陈立潮,马礼等.软件测试技术研究[J].测试技术学报,2002,16(2);184-151
[4]李炜,陈瑛.一种有效的软件测试模型[J].计算机工程与应用,2004,41(10):114-117.
[5]方菲,孙家肃.面向对象回归测试技术研究[J].软件学报,2001,12(3):372-376.
Discussion of Software Testing Model
MENG Qing-xin,ZHANG Long
(China Academy of Electronics and Information Technology,Beijing 100041,China)
Software testing is one phase of software engineering,software quality is essential to protect an important part。Software testing model is the work of software testing framework to guide the software testing process。In this paper,in-depth study of the various integrated testing technology on the basis of comparative analysis of the mainstream through the test model,a new model of software testing,Including static testing,dynamic testing,testing and evaluation,and other activities,these activities embedded in the entire software development life cycle,better planning software development and testing of a series of activities to enhance the efficiency and quality of software production,the model is also suitable for Iterative development。
software testing model;V model;W model;static test;dynamic testing
TP391.9
A
1008-1739(2014)05-66-4
定稿日期:2014-01-12