当前位置: 首页 > 专利查询>江苏大学专利>正文

一种基于代码和组合覆盖的测试用例优先级排序方法及测试系统技术方案

技术编号:21891488 阅读:25 留言:0更新日期:2019-08-17 14:21
本发明专利技术公开了一种基于代码和组合覆盖的测试用例优先级排序方法及测试系统,包括:1、进行回归测试,在版本迭代中获得测试用例集在原始程序集上运行的动态代码覆盖信息;2、使用动态代码覆盖信息对用例集进行排序,即基于用例集对该粒度的覆盖信息和粒度中各单元的组合情况进行排序;3、将测试用例集在错误版本上运行,将运行结果与基础版本程序集上结果进行比对,生成用例集错误检测矩阵;4、使用已排序用例集与错误检测矩阵进行用例序列有效值计算,并与其它经典排序策略进行比较评估。本发明专利技术针对现有排序算法的局限性,考虑了各个语句单元的组合覆盖信息,对其进行融合关联,获得了更加丰富的排序信息,从而大大提高错误检测的效率。

A Test Case Priority Sorting Method and Test System Based on Code and Composite Coverage

【技术实现步骤摘要】
一种基于代码和组合覆盖的测试用例优先级排序方法及测试系统
本专利技术属于软件测试领域,涉及一种基于代码和组合覆盖的测试用例优先级排序方法及测试系统。
技术介绍
从软件开发生命周期我们可以发现,软件工程不仅仅是软件开发以及编程语言,软件测试占据了很大的一个部分,尤其是在软件迭代回归测试中,事实上,回归测试作为一种有效的方法,可以保证代码局部的修改而对被测程序带来某些位置的错误,而数据表明,回归测试一般占据了软件测试预算的80%左右,并占据了整个软件维护预算的一半。因此为了缩减回归测试的开销,工业界与学术界提出了一系列基于测试用维护的技术,具体包括测试用例排序TCP(TestCasePrioritization),测试用例选择TCS(TestCaseSelection)以及测试用例缩减TCM(TestCaseMinimization)等。测试用例排序TCP毫无疑问是如今测试研究中的一个热点,其最早由Wong等人于1997年提出,基于传统的测试用例无顺序执行,提出了优化测试用例排序来提高回归测试效率的想法,使得越有可能发现程序错误的用例能够越早执行,以便越早发现错误进行修复,其准则是依据某种原则按优先级高高低对所有程序进行排序,进行测试。基于代码覆盖测试用例排序提出于21世纪初左右,其中Rothermel和Elbaum教授等人在1999年到2002年四年之间发表了4篇奠基性的文章,形成了基于代码覆盖测试的主要框架。同时他们给出了测试用例排序TCP问题的一般性描述:·给定:测试用例集T,T的全排列集PT,排序目标函数f,其定义域为PT,值域为实数。·问题:T′∈PT,使得这里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,编写相关分析脚本,对上述覆盖信息文件进行解析,生成测试用例集在基础版本程序集上的覆盖矩本文档来自技高网
...

【技术保护点】
1.一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,包括如下步骤:步骤1,根据测试用例集在基础版本的程序集上运行情况,收集测试用例集代码覆盖信息;步骤2,将测试用例集在迭代错误版本上运行,获得测试用例集在各个版本上的错误检测情况;步骤3,使用基于代码和组合覆盖排序方法,根据获得的代码覆盖信息进行测试用例排序,输出已排序的测试用例序列。

【技术特征摘要】
1.一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,包括如下步骤:步骤1,根据测试用例集在基础版本的程序集上运行情况,收集测试用例集代码覆盖信息;步骤2,将测试用例集在迭代错误版本上运行,获得测试用例集在各个版本上的错误检测情况;步骤3,使用基于代码和组合覆盖排序方法,根据获得的代码覆盖信息进行测试用例排序,输出已排序的测试用例序列。2.根据权利要求1所述的一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,所述步骤1的具体实现:步骤1.1,根据已获得的测试用例集,将其转换为测试用例脚本,可以输出该用例集代码覆盖信息;步骤1.2,对基础版本的程序集,执行上述的测试用例脚本,获得该测试用例集的覆盖信息文件;步骤1.3,编写相关分析脚本,对上述覆盖信息文件进行解析,生成测试用例集在基础版本程序集上的覆盖矩阵CoverageMatrix,其中每行代表测试用例,每列代表该程序集每种覆盖粒度,矩阵元素取值为0或者1,0代表该测试用例未覆盖该粒度,1代表该测试用例覆盖该粒度。3.根据权利要求1所述的一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,所述步骤2的具体实现:步骤2.1,根据已获得的测试用例集,将其转换为相应的测试用例脚本,可以输出该用例集在程序集上的执行结果;步骤2.2,将上述测试用例脚本在基本版本与相关迭代版本的程序集上分别运行,获得测试用例集在各个版本程序上的输出信息;步骤2.3,编写相关脚本,对测试用例集在基础版本和错误迭代版本上的输出信息进行对比,如果用例在基础版本和错误版本上运行结果相同则表明该用例无法检测到该错误,若运行结果不同则表明该用例可以检测到该错误。以此生成测试用例集的错误检测矩阵FaultMatrix,其中每行代表测试用例,每列代表植入的错误,元素取值为0或者1,0代表该测试用例未检测到该错误,1代表该测试用例检测到该错误。4.根据权利要求1所述的一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,所述步骤3的具体实现:步骤3.1,首先挑选第一个测试用例,对待排序用例集,根据各个用例的覆盖信息,选择覆盖粒度单元最多的测试用例,若存在多个用例满足条件则随机选择;步骤3.2,设置组合覆盖维度,并根据所设置的维度计算各个测试用例的评估值;步骤3.3,根据步骤3.2,依次计算所有待排序用例的评估值,若所有用例评估值均为0,转步骤3.4;若多个用例存在最大评估值,转步骤3.5;否则转步骤3.6;步骤3.4,若某一轮所有待排序测试用例评估值均为0,则依据步骤3.1挑选一个待排序测试用例,将其加入已排序用例集并从待排序用例集中删除,并将组合覆盖情况重置;步骤3.5,若某一轮多个用例拥有相同的最大评估值时,则依据步骤3.1挑选一个最大评估值的用例,将其加入已排序用例集并从待排序用例集中删除;步骤3.6,从待选测试时用例集中挑选具有最大评估值的用例,加入已排序用例集并从待排序用例集中删除;步骤3.7,重复执行上述步骤3.2-3.6,若没有候选测试用例时,结束本次排序,并输出已排序用例序列。5.根据权利要求4所述的一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,所述步骤3.2中计算各个测试用例的评估值时,在计算函数覆盖粒度的评估值时,具体方法如下:对待测程序P,设存在m个函数单元MC{mc1,mc2,mc3,…mcm},覆盖粒度仅有两种状态,mci={0,1}(0≤i≤m),存在长度为n的测试用例集T{...

【专利技术属性】
技术研发人员:黄如兵张犬俊陈锦富
申请(专利权)人:江苏大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1