一种基于动态反馈权重的测试用例优先级排序方法及系统与流程

文档序号:17720814发布日期:2019-05-22 02:08阅读:479来源:国知局
一种基于动态反馈权重的测试用例优先级排序方法及系统与流程

本发明属于软件测试领域,涉及一种基于动态反馈权重的测试用例优先级排序方法。



背景技术:

从软件开发生命周期我们可以发现,软件工程不仅仅是软件开发以及编程语言,软件测试占据了很大的一个部分,尤其是在软件迭代回归测试中,事实上,回归测试作为一种有效的方法,可以保证代码局部的修改而对被测程序带来某些位置的错误,而数据表明,回归测试一般占据了软件测试预算了80%左右,并占据了整个软件维护预算的一半。因此为了缩减回归测试的开销,工业界与学术界提出了一系列基于测试用维护的技术,具体包括测试用例排序tcp(testcaseprioritization),测试用例选择tcs(testcaseselection)以及测试用例缩减tcm(testcaseminimization)等。

测试用例排序tcp毫无疑问是如今测试研究中的一个热点,其最早由wong等人于1997年提出,基于传统的测试用例无顺序执行,提出了优化测试用例排序来提高回归测试效率的想法,使得越有可能发现程序错误的用例能够越早执行,以便越早发现错误进行修复,其准则是依据某种原则按优先级高高低对所有程序进行排序,进行测试。

基于代码覆盖测试用例排序提出于21世纪初左右,其中rothermel和elbaum教授等人在1999年到2002年四年之间发表了4篇奠基性的文章,形成了基于代码覆盖测试的主要框架。

同时他们给出了测试用例排序tcp问题的一般性描述:

·给定:测试用例集t,t的全排列集pt,排序目标函数f,其定义域为pt,值域为实数。

·问题:t′∈pt,使得(t″∈pt)(t″≠t′)[f(t′≥f(t″))]。

这里pt代表着t所有可能的排列顺序,而f函数是输入一个给定的排序顺序,输出一个与排序结果成正比的数值,以此代表该排序的表现结果。

首先rothermel等人基于语句覆盖粒度、分支覆盖粒度提出了total和additional两种贪婪算法思想,并与unorder、random以及optimal进行比较,通过实践验证了total和additional相对于随机测试的优越性。基于1999年论文,elbaum等人进行了一些改进,首先相对于语句和分支覆盖粒度,增加了function覆盖粗粒度,证实了进行粗粒度的排序方法可以减少程序开销,但也会降低排序效果。rothermel等人还考虑到使用软件度量技术来进一步提高tcp技术的有效性,他们将测试用例的fep(faultexposingpotential)值首次应用到相关的贪心算法中,fep值可以用于估计测试用例的缺陷检测能力,其计算pie模型和变异测试分析。pie模型认为可检测程序内在缺陷的测试用例,需满足3个条件:(1)测试用例执行了包含缺陷的语句;(2)造成程序内部状态出错;(3)通过传播错误的内部状态影响到程序的输出。变异测试是评估测试用例集充分性的一种有效手段,对被测程序执行符合语法约束的简单代码修改(即变异算子)可生成大量变异体,当测试用例在变异体和原有程序上的执行行为不一致时,则称该测试用例可以检测到该变异体。以语句覆盖为例,给定被测程序p和测试用例t,首先计算语句s(s∈p)的ms值,计算公式为

其中,mutants(s)返回一组变异算子应用到语句s上得到的变异体数,killed(s,t)返回测试用例t在上述生成的变异体中可以检测出的数量,假设测试用例t覆盖的语句集为s,则该测试用例的fep值为∑s∈sms(s,t)。rothermel将fep值在statement和branch覆盖粒度上进行试验,elbaum等人则在method粒度上计算。同时由于上述提出的算法与理想的最佳排序效果差异较大,elbaum等人还将fep值和缺陷倾向值(faultproneness)(如faultindex值和diff值)进行了结合,提出了一系列diff-fep策略。以diff值、fep值和total策略为例,首先根据diff值对测试用例进行排序,然后对拥有相同diff值的测试用例,按照fep值进行排序。

jeffrey和gupta等人借助程序切片来解决tcp问题,他们基于测试用例输出的相关切片(relevantslice)提出一种新的tcp技术,应用相关切片可以识别出所有可能影响程序输出结果的语句或分支,并在排序时仅考虑对这些语句或分支的覆盖情况。elbaum等人认为,在测试用例排序时仅考虑对程序实体的覆盖并不充分,他们在排序时进一步考虑了测试用例的执行开销和缺陷的危害程度。在实证研究中,他们考虑了不同的测试用例执行开销和缺陷危害程度分布,其中测试用例执行开销的分布包括均匀分布、随机分布、正态分布、取自mozilla开源项目中的分布和取自qtp应用中的分布。而缺陷危害程序的分布包括均匀分布和取自mozilla开源项目的相关分布。赵建军等人通过分析被测程序内部结构,可以估计出每个模块的缺陷倾向性和重要性,并用于指导测试用例的排序。

虽然研究人员提出了大量tcp技术,但根据测试场景特征从中选出合适的tcp技术同样值得关注。elbaum等人通过实证研究考察了不同测试场景(主要考察因素包括被测程序特征、测试用例特征和代码修改类型等)对tcp技术有效性的影响。实证结果为测试人员在不同测试场景下选择出合适的tcp技术提供了重要依据。arafeen等人认为,在软件持续演化过程中,每次演化时的代码修改类型对tcp技术的选择存在影响.他们将该问题建模为多准则决策(multiplecriteriadecisionmaking)问题,并采用层次分析法(analyticalhierarchyprocess,简称ahp)进行选择.结果表明,他们提出的方法可以为每次回归测试活动选择出最为经济有效的tcp技术。

目前来说tcp技术主要基于源代码、历史执行信息、需求以及模型等,具体分为基于代码排序技术、基于搜索排序技术、基于需求排序技术、基于历史排序技术等等。从往年相关论文数量而言,基于代码排序技术依旧是主流,同时基于搜索排序越来越受到研究人关注,本方法主要基于代码覆盖信息对现有测试用例排序技术进行改进。



技术实现要素:

为了能够更加有效地根据代码覆盖信息对测试用例进行排序,本发明提出了一种基于动态反馈权重的测试用例优先级排序方法。另外。本发明还与其他的经典测试用例排序方法进行了比较,验证了提出方法的有效性和先进性。本发明的技术方案包括如下步骤:

步骤1,根据测试用例集在基础版本的程序集上运行情况,收集测试用例集代码覆盖信息;

步骤2,将测试用例集在迭代错误版本上运行,获得测试用例集在各个版本上的错误检测情况;

步骤3,使用动态反馈权重排序方法,根据获得的代码覆盖信息进行测试用例排序,输出已排序的测试用例序列;

步骤4,根据已排序的测试用例序列和测试用例集的错误检测情况,计算该测试用例序列的评估值并进行统计分析。

上述步骤1的具体步骤如下:

步骤1.1,根据已获得的测试用例集,将其转换为测试用例脚本,可以输出该用例集代码覆盖信息;

步骤1.2,对基础版本的程序集,执行上述的测试用例脚本,获得该测试用例集的覆盖信息文件;

步骤1.3,编写相关分析脚本,对上述覆盖信息文件进行解析,生成测试用例集在基础版本程序集上的覆盖矩阵coveragematrix,其中每行代表测试用例,每列代表该程序集每种覆盖粒度,矩阵元素取值为0或者1,0代表该测试用例未覆盖该粒度,1代表该测试用例覆盖该粒度。

上述步骤2的具体步骤如下:

步骤2.1,根据已获得的测试用例集,将其转换为相应的测试用例脚本,可以输出该用例集在程序集上的执行结果;

步骤2.2,将上述测试用例脚本在基本版本与相关迭代版本的程序集上分别运行,获得测试用例集在各个版本程序上的输出信息;

步步骤2.3,编写相关脚本,对测试用例集在基础版本和错误迭代版本上的输出信息进行对比,如果用例在基础版本和错误版本上运行结果相同则表明该用例无法检测到该错误,若运行结果不同则表明该用例可以检测到该错误,以此生成测试用例集的错误检测矩阵faultmatrix,其中每行代表测试用例,每列代表植入的错误,元素取值为0或者1,0代表该测试用例未检测到该错误,1代表该测试用例检测到该错误。

上述步骤3的具体步骤如下:

步骤3.1,根据动态反馈权重进行每轮排序,在每轮排序之前,根据为各粒度进行权重重置,其中stcovernum[j]为粒度被覆盖次数,coveragematrix为覆盖矩阵,之后根据每个用例的评估值进行排序;

步骤3.2,当某一轮多个用例拥有相同的最大评估值时,则随机挑选一个最大评估值的用例;

步骤3.3,重复执行步骤3.1和3.2,当没有候选测试用例时结束本次排序,并输出已排序用例序列。

上述步骤4的具体步骤如下:

步骤4.1,使用贪心算法,即total和additional策略,在语句(statement)、分支(branch)和函数(function)粒度上重复步骤3,生成各个方法的已排序测试用例序列;

步骤4.2,根据各个方法的已排序测试用例序列以及测试用例集的错误覆盖矩阵faultmatrix,生成各个方法的排序结果的评估值,这里以平均错误检测速率apfd(averagepercentageoffaultdetection)为例,其评估值公式为:其中n代表测试用例数量、m代表程序中错误数量,tfi代表检测到第i个错误的第一个测试用例在排序中的执行次序;

步骤4.3,对获得的apfd值进行图形化显示,画出各个方法在每种粒度下的盒图,方便直观显示与比较;

步骤4.4,对获得的apfd值进行统计分析,计算本方法和传统方法的wilcoxp-value以及计算effectsize,以及根据上述结果对本方法进行评估。

进一步,本发明还设计实现了基于动态反馈权重的测试用例优先级排序方法原型测试系统;所述测试系统主界面包括6个菜单项:文件选项、算法参数设置选项、被测程序设置选项、结果分析设置选项、统计分析选项以及图形查看选项;

其中算法参数设置选项,包括选择需要排序的算法,比如total排序策略、additional排序策略以及本方法排序策略,执行次数设置需要指定该排序方法循环执行次数,以及是否输出排序消耗时间等等;

其余5个菜单项分别代表5个功能模块:文件选项模块用于选择项目的文件地址,里面包含的被测程序集,测试时用例集等信息;被测程序设置选项用于指定该实验使用路径下的哪些程序、以及其基础版本和迭代错误版本;结果分析设置选项会显示出各个方法的排序策略具体的错误检测情况,并生成指定的评估值,如apfd值以及指定百分比的napfd值;统计结果分析选项根据结果分析模块的评估值计算本方法和传统方法的wilcox的p值,判断各方法之间是否存在显著差异,同时计算两两方法之间的effectsize,判断本方法与传统方法之间的优劣比较;图形查看选项首先会将结果分析模块的评估值(比如apfd值)进行图形化显示,主要以盒图的形式方便直观地比较各个方法,之后将统计结果分析模块的结果以表格的形式进行两两对比显示,对p值无显著差异以及effectsize低于0.5的数据进行高亮显示。

本发明的有益效果:

1、本发明实现了基于动态反馈权重的测试用例优先级排序,主要依据代码覆盖信息在每轮排序前动态重置各粒度的权重,以此计算待排序用例评估值,并挑选最大评估值用例,该方法时间开销较低并提高了用例检测错误的效率。

2、本发明基于statement、branch和function粒度下,使用了siemens程序集,并与total、additional经典排序策略进行了对比,验证了本发明在不同粒度、不同程序下的优越表现。

3、设计实现了一个基于动态反馈权重的测试用例优先级排序原型系统,该系统很好地实现了自动化测试,提高了测试效率,会在测试用例排序领域发挥重要作用。

4、本发明在每轮排序开始前,根据各粒度的历史覆盖信息重置该粒度的权重,以此重新计算待排序用例的评估值,挑选最大评估值用例加入已排序用例集;该发明在total和additional策略二者之间实现了平衡,显著提高了测试用例发现错误的效率,减少了软件测试中的时间开销与人力开销。

附图说明

图1是基于动态反馈权重的测试用例优先级排序方法流程图。

图2是收集代码覆盖信息流程图。

图3是收集错误矩阵流程图。

图4是动态反馈权重排序流程图。

图5是图形显示界面图。

图6是统计分析界面图。

具体实施方式

下面结合附图和实施案例对本发明作进一步说明,应指出的是,所描述的实施案例仅旨在便于对本发明的理解,而对其不起任何限定作用。

本发明以解决基于代码覆盖进行测试用例排序问题为目的,提供一种基于动态反馈权重的测试用例优先级排序方法,有效地提高了测试用例集在测试中发现错误的效率,提供了完善的测试框架和算法,并且进行了充分的实验,证明了方法的可行性和有效性。

首先,定义本发明所涉及到的几个概念定义如下。

定义1测试用例:测试用例是为确保某种目标而编制的一组测试输入、执行条件以及预期结果。

定义2测试用例排序:给定测试用例集t,t的全排列集pt,排序目标函数f,其定义域为pt,值域为实数,t′∈pt,使得(t″∈pt)(t″≠t′)[f(t′≥f(t″))]。

这里pt代表着t所有可能的排列顺序,而f函数是输入一个给定的排序顺序,输出一个与排序结果成正比的数值,以此代表该排序的表现结果。

定义3代码覆盖:代码覆盖指在测试中需要执行的总代码中,已经执行的代码对其的占比程度。

定义4语句覆盖:又被称为代码行覆盖、段覆盖和基本块覆盖,是最常见的一种代码覆盖方法,主要用于度量程序的源代码中每个可执行语句已执行的程度。

定义5分支覆盖:又称为判定覆盖。它主要用于度量程序中每个可达的判定分支已执行过的程度。

定义6条件覆盖:主要用于度量程序中每个判定的所有子表达式的结果true和false

都有被测试的程度。

定义7路径覆盖:又称断言覆盖,主要用于度量程序中函数的每一个分支都已被执行的程度,因为所有可能的分支都执行一遍,当面临有多个分支嵌套时,需要对多个分支进行排列组合,所以其测试路径会随着分支的数量指数级别增加。

如图1所示,本发明的一种基于动态反馈权重的测试用例优先级排序方法,包括:

步骤1,根据测试用例集在基础版本的程序集上运行情况,收集测试用例集代码覆盖信息。

上述步骤1中,参照图2,程序代码覆盖信息收集步骤如下:

步骤1.1,根据已获得的测试用例集,将其转换为测试用例脚本,可以输出该用例集代码覆盖信息;

步骤1.2,对基础版本的程序集,执行上述的测试用例脚本,获得该测试用例集的覆盖信息文件;

步骤1.3,编写相关分析脚本,对上述覆盖信息文件进行解析,生成测试用例集在基础版本程序集上的覆盖矩阵coveragematrix,其中每行代表测试用例,每列代表该程序集每种覆盖粒度,矩阵元素取值为0或者1,0代表该测试用例未覆盖该粒度,1代表该测试用例覆盖该粒度。

步骤2,将测试用例集在迭代错误版本上运行,获得测试用例集在各个版本上的错误检测情况。

上述步骤2中,参照图3,基于指定程序集的用例错误矩阵生成步骤如下:

步骤2.1,根据已获得的测试用例集,将其转换为相应的测试用例脚本,可以输出该用例集在程序集上的执行结果;

步骤2.2,将上述测试用例脚本在基本版本与相关迭代版本的程序集上分别运行,获得测试用例集在各个版本程序上的输出信息;

步骤2.3,编写相关脚本,对测试用例集在基础版本和错误迭代版本上的输出信息进行对比,如果用例在基础版本和错误版本上运行结果相同则表明该用例无法检测到该错误,若运行结果不同则表明该用例可以检测到该错误,以此生成测试用例集的错误检测矩阵faultmatrix,其中每行代表测试用例,每列代表植入的错误,元素取值为0或者1,0代表该测试用例未检测到该错误,1代表该测试用例检测到该错误。

步骤3,使用动态反馈排序方法,根据获得的代码覆盖信息进行测试用例排序,输出已排序的测试用例序列。

上述步骤3中,参照图4,用例集排序方法步骤如下:

步骤3.1,根据动态反馈权重进行每轮排序,在每轮排序之前,根据为各粒度进行权重重置,其中stcovernum[j]为粒度被覆盖次数,coveragematrix为覆盖矩阵,之后根据每个用例的评估值进行排序;

步骤3.2,当某一轮多个用例拥有相同的最大评估值时,则随机挑选一个最大评估值的用例;

步骤3.3,重复执行步骤3.1和3.2,当没有候选测试用例时结束本次排序,并输出已排序用例序列。

步骤4,根据已排序的测试用例序列和测试用例集的错误检测情况,计算该序列的评估值并进行统计分析。

上述步骤4中,排序方法评估数据产生步骤如下:

步骤4.1,使用贪心算法,即total和additional策略,在语句(statement)、分支(branch)和函数(function)粒度上重复步骤3,生成各个方法的已排序测试用例序列;

步骤4.2,根据各个方法的已排序测试用例序列以及测试用例集的错误覆盖矩阵faultmatrix,生成各个方法的排序结果的评估值,这里以平均错误检测速率apfd(averagepercentageoffaultdetection)为例,其评估值公式为:其中n代表测试用例数量、m代表程序中错误数量,tfi代表检测到第i个错误的第一个测试用例在排序中的执行次序;

步骤4.3,对获得的apfd值进行图形化显示,画出各个方法在每种粒度下的盒图,方便直观显示与比较;

步骤4.4,对获得的apfd值进行统计分析,计算本方法和传统方法的wilcoxp-value以及计算effectsize,以及根据上述结果对本方法进行评估。

本发明还设计实现了基于动态反馈权重的测试用例优先级排序方法原型测试系统;所述测试系统主界面包括6个菜单项:文件选项、算法参数设置选项、被测程序设置选项、结果分析设置选项、统计分析选项以及图形查看选项;

其中算法参数设置选项,包括选择需要排序的算法,比如total排序策略、additional排序策略以及本方法排序策略,执行次数设置需要指定该排序方法循环执行次数,以及是否输出排序消耗时间等等;

其余5个菜单项分别代表5个功能模块:文件选项模块用于选择项目的文件地址,里面包含的被测程序集,测试时用例集等信息;被测程序设置选项用于指定该实验使用路径下的哪些程序、以及其基础版本和迭代错误版本;结果分析设置选项会显示出各个方法的排序策略具体的错误检测情况,并生成指定的评估值,如apfd值以及指定百分比的napfd值;统计结果分析选项根据结果分析模块的评估值计算本方法和传统方法的wilcox的p值,判断各方法之间是否存在显著差异,同时计算两两方法之间的effectsize,判断本方法与传统方法之间的优劣比较;图形查看选项首先会将结果分析模块的评估值(比如apfd值)进行图形化显示,主要以盒图的形式方便直观地比较各个方法,如图5所示,这里横坐标代表各个方法,其中add、tot、md2分别表示additional策略、total策略以及本方法提出的方法,st、br和fn分别表示上述策略基于statement、branch以及method覆盖粒度,纵坐标则代表各个方法的apfd值;之后将统计结果分析模块的结果以表格的形式进行两两对比显示,如图6所示,对p值无显著差异以及effectsize低于0.5的数据进行高亮显示。

上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1