APP下载

结合需求与反馈的动态测试用例优先级排序方法

2015-06-23谢小竹崔建峰庄蔚蔚

厦门理工学院学报 2015年5期
关键词:测试用例排序速率

谢小竹, 肖 蕾, 崔建峰, 庄蔚蔚

(1.厦门理工学院计算机与信息工程学院,福建厦门361024; 2.厦门市软件体系结构重点实验室,福建厦门361024)

结合需求与反馈的动态测试用例优先级排序方法

谢小竹1,2, 肖 蕾1,2, 崔建峰1,2, 庄蔚蔚1,2

(1.厦门理工学院计算机与信息工程学院,福建厦门361024; 2.厦门市软件体系结构重点实验室,福建厦门361024)

为提高软件测试的缺陷检测速率,提出结合需求与反馈信息的动态测试用例优先级排序方法.根据需求优先级和需求是否变更对测试用例优先级进行初始化,执行过程中结合需求相关性和反馈信息动态调整未被执行的测试用例的优先级,直到测试用例执行条件跳出为止.在GPSking中的验证结果为:本方法的APFD为68.73%,而测试用例按被创建顺序的APFD为51.4%,仅采用需求优先级静态排序的APFD为67.5%.结果表明,该方法能很好地提高缺陷检测速率.

测试用例;优先级;动态;需求;相关性

环境在改变,软件需求也无时无刻不在变化,而需求的改变,如完善已有功能、新增功能模块、提高性能等,则带来了软件演化、新版本的发布.频繁的版本发布却带来回归测试成本的剧增.为此,国内外研究人员在提高回归测试的效率、降低回归测试成本方面展开了深入研究,其中测试用例优先级技术就是研究热点之一[1-3].测试用例优先级技术是将所有测试用例按照重要性进行优先级排序,优先级越高,表示其检错能力或覆盖率越强.优先执行优先级高的测试用例,就能够保证尽早地发现软件中的缺陷.同时,还可以根据优先级的排序将测试用例集分不同的等级,在不同的开发阶段执行不同等级的测试用例集.

文献 [1]将测试用例优先级技术分为3类:代码、模型和需求.基于代码的优先级技术[2-3]是依据每个测试用例所能覆盖的程序实体 (根据粒度大小,主要有语句覆盖、方法覆盖、类覆盖、函数覆盖等)进行排序,覆盖率越高,测试用例优先级越高.不过,根据文献 [4],粒度大小对测试用例优先级排序没有明显影响.基于模型的测试用例优先级技术是随着实践人员逐渐倾向于借助模型来设计和实现软件系统而逐步兴起的.当系统改变时,模型也会进行修改操作 (包括迁移添加、迁移移除等),称为模型差异.依据测试用例对模型差异的覆盖信息进行排序,覆盖率越高,测试用例优先级越高[5-6].从需求角度出发来指导测试用例的排序,主要考虑因素包括客户定义的需求优先级、需求变动信息、需求实现复杂度等[7-9].在回归测试执行中,这些技术或者因素既可以单独也可以结合起来作用于测试用例排序,测试者可以根据实际案例情况权衡考虑技术或因素的权重.本文提出一种结合需求与反馈信息的动态测试用例优先级排序方法,首先根据需求优先级和需求变更对测试用例优先级进行初始化,然后执行优先级最高且未被执行的测试用例,接着结合需求相关性动态调整未被执行的测试用例的优先级,反复执行直到测试用例执行条件跳出为止.

1 测试用例优先级排序问题描述

测试用例优先级排序 (test case prioritization,简称TCP)技术最早是为解决回归测试中测试用例全面执行带来的成本问题而提出的,它根据一定的考虑因素将测试用例进行排序,先执行优先级高的测试用例,后执行优先级低的测试用例,有些优先级低的甚至不执行,从而提高测试中缺陷检测的速率,降低回归测试的执行成本.Elbaum等[10]在2000年对TCP问题进行形式化描述如下:

给定:测试用例集T,T的全排列集PT,排序目标函数f(其定义域为PT,值域为实数).问题:求出T′∈PT,且满足:(∀T″)(T″∈PT)(T″≠T′)[f(T′)≥f(T″)].

其中,集合PT是T中所有测试用例的全排列,函数f是对排列的度量公式,输入是PT中一个排列,输出值为一个实数,值越大,说明该测试用例的执行次序的效果越好.TCP问题就是要找到一个测试用例的执行次序,使得f值最大.

2 结合需求与反馈的优先级排序

2.1 相关需求指标

1)需求优先级 (requirement priority,RP).任何一个产品都是基于需求开发的,而且根据二八定律,80%的用户仅仅使用系统20%的功能,80%的系统功能只有少数用户使用.在时间、人力、资源等成本有限的情况下,回归测试应首先根据需求的优先级先保证那20%的测试需求.需求优先级越高,其对应的测试用例就越早被执行.用RPi表示第i个测试用例对应的需求优先级,需求优先级一般分为最高、次高、中、次低、低5个等级,可对应赋值5、4、3、2、1或10、8、6、4、2、1,值越大代表优先级越高.

2)需求变更 (requirement modify,RM).需求变更常常引入软件缺陷,越频繁的需求变更,其软件质量越难以保障.如果测试用例对应的需求发生变更,那么对应的测试用例的执行优先级将提高.用RMi表示第i个测试用例对应的需求是否发生变更.根据需求发生变更与否,RMi可对应赋值5、0或者10、0,与需求优先级的赋值对应.

3)需求相关性 (requirement relativity,RR).各个需求之间一般都不是独立存在,而是相互关联的.一个较大需求由若干个小需求组成,只有所有小需求都测试通过,大需求才算通过,称大小需求互为父子关系,小需求之间为兄弟关系.定义需求的关系矩阵MRR如定义1.

测试用例是根据测试需求来设计的,且是多对多的关系,即一个测试需求可能对应多个测试用例,一个测试用例也有可能对应多个测试需求.定义测试用例与测试需求的关联矩阵MTR如定义2.

当一个测试用例检测出某一测试需求的缺陷时,该测试需求的父子需求或者兄弟需求也很有可能存在相关或类似的缺陷.

2.2 优先级初始化

根据实际需求对RPi和RMi设置不同的权重α、1-α,综合考虑这两个因素对测试用例优先级排序,则基于需求的测试用例优先级值 (test case prioritization based on requirements,TCPR)的计算公式如下:TCPRi,j=RPi,j*α+RMi,j*(1-α),其中:α和1-α分别代表RP和RM的权重,默认值各为0.5;RPi,j就是第j次回归测试中用例i的对应需求优先级值,值越大,优先级越高;RMi,j就是第j次回归测试中用例i对应的需求是否修改,非零代表进行修改,零代表未修改.该优先级排序不仅适用于回归测试,也适用于首次测试.如果用于首次测试,则将RM的权重设为0即可.

2.3 需求相关动态调整优先级

需求优先级一般由用户指定,具有一定主观性.为此,在测试执行过程中,利用需求相关性,根据测试反馈信息动态调整测试用例优先级[11],减少人为主观性带来的偏差,提高缺陷检测速率.

需求相关动态调整测试用例优先级的步骤为:1)根据2.2描述的算法对测试用例集T进行排序初始化,对于相同优先级的测试用例,采用随机算法排序;2)按照从高到低的顺序执行测试用例,当检测到缺陷时,动态地提升该测试用例对应的测试需求ri的兄弟需求和父子需求 (即矩阵MRR第i行元素值为1所对应的所有需求列集合)对应的所有未执行的测试用例的优先级.重复步骤2),直到测试用例执行条件不满足为止.算法描述如下:

输入:测试用例集 T,需求的关系矩阵MRR=(ki,j),测试用例与需求的关系矩阵MTR=(hi,j).

输出:排序后的测试用例集T′.

3 实验分析

GPSking将全球定位系统 (global positioning system,GPS)、地理信息系统 (geographic information system,GIS)技术相结合,通过GPS并利用语音信道,将移动车辆上的GPS位置数据传送到监视中心,实现GIS的图形化监视查询功能,对车辆进行点名、跟踪、轨迹回放.该平台主要包括车辆信息管理、车辆位置查询、车辆监控、车辆调度、车辆电召、报警处理等模块.本文选择车辆监控、车辆调度2个模块进行实验,共75个测试需求,与之对应的85个测试用例,共发现51个bug.

图1 测试用例按被创建时间顺序执行效果Fig.1 Results of prioritization of created time

测试用例按照被创建的时间顺序进行执行,缺陷检测速率效果如图1.由图1可以看到,结果具有随机性,测试用例执行有3个阶段 (10%~20%,50%~60%,80%~90%)没有发现一个缺陷,而有些阶段 (20% ~30%,70% ~80%)缺陷集中爆发,当测试用例完全执行完才将所有缺陷检测完整,其APFD的值为51.4%.图2是根据需求优先级对测试用例进行排序后的执行结果,当测试用例执行到10%时就检测到了27%的缺陷,缺陷检测速率也趋于平稳,当执行80%测试用例时就已经检测到所有缺陷,计算得到APFD的值为67.5%.图3是结合需求与反馈信息动态调整优先级对测试用例进行排序后的执行结果,可以看到,缺陷检测速率稍优于仅按需求优先级排序,计算得到APFD的值为68.73%.

图2 测试用例按需求优先级顺序执行效果Fig.2 Results of requirements prioritization

图3 结合需求相关与反馈信息动态调整测试用例执行效果Fig.3 Results of dynamic prioritization of requirements and feedback

通过实验分析发现:1)基于需求优先级得到的测试用例集排序,与不进行排序或任意排序相比,缺陷检测速率有明显提高,能较快检测到缺陷;2)结合需求相关和反馈信息动态调整测试用例优先级,相比简单基于需求优先级排序,缺陷检测速率稍有提高,且对人为认定需求优先级的主观性具有鲁棒性.

4 结语

本文提出的基于需求优先级、需求变更与历史反馈信息的测试用例优先级排序方法,既适用于回归测试,也适用于首次测试.结合反馈信息,利用需求相关性,在测试过程中动态调整测试用例执行优先级以适应需求优先级的主观性,逐步优化测试用例执行顺序,加快缺陷检测速率,尽早发现缺陷,降低缺陷修复成本.

下一步的工作应考虑以下几点:一是优先级排序影响因子的完善,本文只考虑了需求优先级和需求变更情况2个指标,可以结合实际情况考虑其余指标;二是各影响因子的权重分配优化,本文采用的是均值权重,可以根据实际测试目标进行比例的调整;三是需求相关矩阵的优化,本文对父子、兄弟关系采用统一权值,未考虑不同关系是否产生不同影响;四是动态调整算法的优化.

[1]陈翔,陈继红,鞠小林,等.回归测试中的测试用例优先排序技术述评 [J].软件学报,2013,24(8):1 695-1 712.

[2]ROTHERMEL G,UNTCH R J,CHU C.Prioritizing test cases for regression testing[J].IEEE Trans on Software Engineering,2001,27(10):929-948.

[3]MEI H,HAO D,ZHANG L M,et al.A static approach to prioritizing JUnit test cases[J].IEEE Trans on Software Engineering,2012,38(6):1 258-1 275.

[4]HYUNSOOK D O,GREGG R,ALEX K.Empirical studies of test case prioritization in a JUnit testing environment[J]. IEEE Computer Society,2004,11(1):111-124.

[5]KOREL B,TAHAT L,HARMAN M.Test prioritization using system models[C]//Proceedings of the 21st IEEE International Conference on Software Maintenance.Budapest:IEEE,2005:559-568.

[6]KOREL B,KOUTSOGIANNAKIS G,TAHAT L.Application of system models in regression test suite prioritization[C]//Proceedings of the 24th IEEE International Conference on Software Maintenance.Beijing:IEEE,2008:247-256.

[7]杨广华,包阳,李东红,等.基于需求的测试用例优先级排序 [J].计算机工程与设计,2011,32(8):2 724-2 728.

[8]KRISHNAMOORTHI R,SASA M.Factor oriented requirement coverage based system test case prioritization of new and regression test cases[J].Information and Software Technology,2009,51(4):799-808.

[9]JUNAID ARAFEEN M D,HYUNSOOK D O.Test case prioritization using requirements-based clustering//IEEE Sixth International Conference on Software Testing,Verification and Validation.Luxembourg:IEEE,2013:312-321.

[10]ELBAUM S,MALISHEVSKY A G,ROTHERMEL G.Prioritizing test cases for regression testing[C]//Proceedings of the International Symposium on Software Testing and Analysis.New York:ACM Press,2000:102-112.

[11]常龙辉,缪淮扣,肖蕾.基于历史信息的自适应测试用例优先级技术 [J].计算机科学,2015,42(9):154-158.

Research on Dynamic Combination of Requirements and Feedback

XIE Xiao-zhu1,2,XIAO Lei1,2,CUI Jian-feng1,2,ZHUANG Wei-wei1,2
(1.School of Computer&Information Engineering,Xiamen University of Technology,Xiamen 361024,China;2.Xiamen Key Lab of Software Architecture,Xiamen 361024,China)

In order to improve the defect detection rate in the process of software testing,dynamic test case prioritization using combination of requirements and feedback is proposed in this paper.First,initialize the test case priority according to the requirement priorities and require-ment change,and then adaptivly adjust the unexecuted test cases prioritization according to requir-ement relativity and feedback in the following execution until the test case execution conditions out of date.The results of being validated in the project GPSking are followings:the APFD is 68.73%using the dynamic method,the APFD is 51.4%using created time,and the APFD is 67.5%using the static method.The experimental result shows that this method can improve the defect rate.

test case;prioritization;dynamic;requirement;relativity

TP311

A

1673-4432(2015)05-0070-05

(责任编辑 雨 松)

2015-05-06

2015-06-04

福建省教育厅科技项目 (JB12186)

谢小竹 (1984-),女,助教,硕士,研究方向为体系结构和软件度量.E-mail:xzxie@xmut.edu.cn

猜你喜欢

测试用例排序速率
排序不等式
回归测试中测试用例优化技术研究与探索
基于SmartUnit的安全通信系统单元测试用例自动生成
“化学反应的速率与限度”知识与能力提升
恐怖排序
节日排序
速度和速率有什么不同
网络扫描发包速率学习算法
基于依赖结构的测试用例优先级技术
莲心超微粉碎提高有效成分的溶出速率