CN110134588A - 一种基于代码和组合覆盖的测试用例优先级排序方法及测试*** - Google Patents

一种基于代码和组合覆盖的测试用例优先级排序方法及测试*** Download PDF

Info

Publication number
CN110134588A
CN110134588A CN201910302282.3A CN201910302282A CN110134588A CN 110134588 A CN110134588 A CN 110134588A CN 201910302282 A CN201910302282 A CN 201910302282A CN 110134588 A CN110134588 A CN 110134588A
Authority
CN
China
Prior art keywords
test
case
covering
cases
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201910302282.3A
Other languages
English (en)
Other versions
CN110134588B (zh
Inventor
黄如兵
张犬俊
陈锦富
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu University
Original Assignee
Jiangsu University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jiangsu University filed Critical Jiangsu University
Priority to CN201910302282.3A priority Critical patent/CN110134588B/zh
Publication of CN110134588A publication Critical patent/CN110134588A/zh
Application granted granted Critical
Publication of CN110134588B publication Critical patent/CN110134588B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种基于代码和组合覆盖的测试用例优先级排序方法及测试 ***
技术领域
本发明属于软件测试领域,涉及一种基于代码和组合覆盖的测试用例优先级排序方法及测试***。
背景技术
从软件开发生命周期我们可以发现,软件工程不仅仅是软件开发以及编程语言,软件测试占据了很大的一个部分,尤其是在软件迭代回归测试中,事实上,回归测试作为一种有效的方法,可以保证代码局部的修改而对被测程序带来某些位置的错误,而数据表明,回归测试一般占据了软件测试预算的80%左右,并占据了整个软件维护预算的一半。因此为了缩减回归测试的开销,工业界与学术界提出了一系列基于测试用维护的技术,具体包括测试用例排序TCP(Test Case Prioritization),测试用例选择TCS(Test CaseSelection)以及测试用例缩减TCM(Test Case Minimization)等。
测试用例排序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(fault exposing potential)值首次应用到相关的贪心算法中,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值和缺陷倾向值(fault proneness)(如faultindex值和Diff值)进行了结合,提出了一系列Diff-FEP策略。以Diff值、FEP值和Total策略为例,首先根据Diff值对测试用例进行排序,然后对拥有相同Diff值的测试用例,按照FEP值进行排序。
Jeffrey和Gupta等人借助程序切片来解决TCP问题,他们基于测试用例输出的相关切片(relevant slice)提出一种新的TCP技术,应用相关切片可以识别出所有可能影响程序输出结果的语句或分支,并在排序时仅考虑对这些语句或分支的覆盖情况。Elbaum等人认为,在测试用例排序时仅考虑对程序实体的覆盖并不充分,他们在排序时进一步考虑了测试用例的执行开销和缺陷的危害程度。在实证研究中,他们考虑了不同的测试用例执行开销和缺陷危害程度分布,其中测试用例执行开销的分布包括均匀分布、随机分布、正态分布、取自Mozilla开源项目中的分布和取自QTP应用中的分布。而缺陷危害程序的分布包括均匀分布和取自Mozilla开源项目的相关分布。赵建军等人通过分析被测程序内部结构,可以估计出每个模块的缺陷倾向性和重要性,并用于指导测试用例的排序。
虽然研究人员提出了大量TCP技术,但根据测试场景特征从中选出合适的TCP技术同样值得关注。Elbaum等人通过实证研究考察了不同测试场景(主要考察因素包括被测程序特征、测试用例特征和代码修改类型等)对TCP技术有效性的影响。实证结果为测试人员在不同测试场景下选择出合适的TCP技术提供了重要依据。Arafeen等人认为,在软件持续演化过程中,每次演化时的代码修改类型对TCP技术的选择存在影响.他们将该问题建模为多准则决策(multiple criteria decision making)问题,并采用层次分析法(analyticalhierarchy process,简称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,首先挑选第一个测试用例,对待排序用例集,根据各个用例的覆盖信息,选择覆盖粒度单元最多的测试用例,若存在多个用例满足条件则随机选择。
步骤3.2,设置组合覆盖维度,并根据所设置的维度计算各个测试用例的评估值。以函数覆盖粒度为例,对待测程序P,设存在m个函数单元MC{mc1,mc2,mc3,…mcm},覆盖粒度仅有两种状态,mci={0,1}(0≤i≤m),存在长度为n的测试用例集T{t1,t2,t3,…tn},存在长度为s的已排序用例集ST{st1,st2,st3,…sts},存在长度为c的待排序测试用例集CT{ct1,ct2,ct3,…dtc},那么对每个用例,设定维度为t,对该粒度存在种覆盖组合,由于每个单元可能取值为1(被覆盖)或者0(未覆盖),因此每个组合存在2t种可能取值,那么对于待选测试用例cti,其评估值为d(cti,S)=CombSet(cti)∪CombSet(ST),其中CombSet(cti)代表t维度下测试用例cti的组合覆盖情况;CombSet(ST)代表t维度下测试用例集ST的组合覆盖情况。
步骤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,若没有候选测试用例时,结束本次排序,并输出已排序用例序列。
上述步骤4的具体步骤如下:
步骤4.1,使用本方法的一维覆盖组合,在函数(function)粒度上重复步骤3,生成该方法的已排序测试用例序列;
步骤4.2,使用贪心算法,即Total和Additional策略,在函数(function)粒度上对测试用例进行排序,生成各个方法的已排序测试用例序列;
步骤4.3,根据各个方法的已排序测试用例序列以及测试用例集的错误覆盖矩阵FaultMatrix,生成各个方法的排序结果的评估值,这里以平均错误检测速率APFD(averagepercentage of fault detection)为例,其评估值公式为: 其中n代表测试用例数量、m代表程序中错误数量,TFi代表检测到第i个错误的第一个测试用例在排序中的执行次序;
步骤4.4,对获得的APFD值进行图形化显示,画出各个方法在每种粒度下的盒图,方便直观显示与比较;
步骤4.5,对获得的APFD值进行统计分析,计算本方法和传统方法的威尔科克森秩和检验的p值(wilcox p-value)以及计算效应量(effect size),以及根据上述结果对本方法进行评估。
进一步,本发明还设计实现了基于代码和组合覆盖的测试用例优先级排序方法原型测试***;所述测试***主界面包括6个菜单项:文件选项、算法参数设置选项、被测程序设置选项、结果分析设置选项、统计结果分析选项以及图形查看选项;
其中算法参数设置选项,包括选择需要排序的算法,比如Total排序策略、Additional排序策略以及本方法排序策略,执行次数设置需要指定该排序方法循环执行次数,以及是否输出排序消耗时间等等;
其余5个菜单项分别代表5个功能模块:文件选项模块用于选择项目的文件地址,里面包含的被测程序集,测试时用例集等信息;被测程序设置选项用于指定该实验使用路径下的哪些程序、以及其基础版本和迭代错误版本;结果分析设置选项会显示出各个方法的排序策略具体的错误检测情况,并生成指定的评估值,如APFD值;统计结果分析选项根据结果分析模块的评估值计算本方法和传统方法的wilcox的p值,判断各方法之间是否存在显著差异,同时计算两两方法之间的effect size,判断本方法与传统方法之间的优劣比较;图形查看选项首先会将结果分析模块的评估值(比如APFD值)进行图形化显示,主要以盒图的形式方便直观地比较各个方法,之后将统计结果分析模块的结果以表格的形式进行两两对比显示,对p值无显著差异以及effect size低于0.5的数据进行高亮显示。
本发明的有益效果:
1、本发明实现了基于代码和组合覆盖的测试用例优先级排序,主要依据测试用例对程序的动态覆盖信息以及程序各个粒度单元之间的组合情况,进一步挖掘所获得的动态覆盖信息,使用更加丰富的原始测试数据,从而大大提高了测试用例集检测错误的速率。
2、本发明基于function粒度下,使用了Siemens和Unix程序集,并与Total、Additional经典排序策略进行了对比,验证了本发明在不同规模程序下的优越表现。
3、设计实现了一个基于代码和组合覆盖的测试用例优先级排序原型***,该***很好地实现了自动化测试,提高了测试效率,会在测试用例排序领域发挥重要作用。
4、本发明获得指定粒度的动态覆盖信息,抽取其中孤立的单元进行组合,使用更加丰富的单元间关联信息进行排序,显著提高了测试用例发现错误的效率,减少了软件测试中的时间开销与人力开销。即每轮排序开始前,根据该粒度的组合覆盖情况,以此重新计算待排序用例的评估值,挑选最大评估值用例加入已排序用例集。
附图说明
图1是基于代码和组合覆盖的测试用例优先级排序方法流程图。
图2是收集代码覆盖信息流程图。
图3是收集错误矩阵流程图。
图4是基于代码和组合覆盖排序流程图。
图5是图形显示界面图。
图6是统计分析界面图。
具体实施方式
下面结合附图和实施案例对本发明作进一步说明,应指出的是,所描述的实施案例仅旨在便于对本发明的理解,而对其不起任何限定作用。
本发明以解决基于代码覆盖进行测试用例排序问题为目的,提供一种基于代码和组合覆盖的测试用例优先级排序方法,有效地提高了测试用例集在测试中发现错误的效率,提供了完善的测试框架和算法,并且进行了充分的实验,证明了方法的可行性和有效性。
首先,定义本发明所涉及到的几个概念定义如下。
定义1测试用例:测试用例是为确保某种目标而编制的一组测试输入、执行条件以及预期结果。
定义2测试用例排序:给定测试用例集T,T的全排列集PT,排序目标函数f,其定义域为PT,值域为实数,T′∈PT,使得
这里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,首先挑选第一个测试用例,对待排序用例集,根据各个用例的覆盖信息,选择覆盖粒度单元最多的测试用例,若存在多个用例满足条件则随机选择。
步骤3.2,设置组合覆盖维度,并根据所设置的维度计算各个测试用例的评估值。以函数覆盖粒度为例,对代待测程序P,设存在m个函数单元MC{mc1,mc2,mc3,…mcm},覆盖粒度仅有两种状态,mci={0,1}(0≤i≤m),存在长度为n的测试用例集T{t1,t2,t3,…tn},存在长度为s的已排序用例集ST{st1,st2,st3,…sts},存在长度为c的待排序测试用例集CT{ct1,ct2,ct3,…dtc},那么对每个用例,设定维度为t,对该粒度存在种覆盖组合,由于每个单元可能取值为1(被覆盖)或者0(未覆盖),因此每个组合存在2t种可能取值,那么对于待选测试用例cti,其评估值为d(cti,S)=CombSet(cti)∪CombSet(ST),其中CombSet(cti)代表t维度下测试用例cti的组合覆盖情况;CombSet(ST)代表t维度下测试用例集ST的组合覆盖情况。
步骤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,若没有候选测试用例时,结束本次排序,并输出已排序用例序列。
步骤4,根据已排序的测试用例序列和测试用例集的错误检测情况,计算该序列的评估值并进行统计分析。
上述步骤4中,排序方法评估数据产生步骤如下:
步骤4.1,使用本方法的一维覆盖组合,在函数(function)粒度上重复步骤3,生成该方法的已排序测试用例序列;
步骤4.2,使用贪心算法,即Total和Additional策略,在函数(function)粒度上对测试用例进行排序,生成各个方法的已排序测试用例序列;
步骤4.3,根据各个方法的已排序测试用例序列以及测试用例集的错误覆盖矩阵FaultMatrix,生成各个方法的排序结果的评估值,这里以平均错误检测速率APFD(averagepercentage of fault detection)为例,其评估值公式为: 其中n代表测试用例数量、m代表程序中错误数量,TFi代表检测到第i个错误的第一个测试用例在排序中的执行次序;
步骤4.4,对获得的APFD值进行图形化显示,画出各个方法在每种粒度下的盒图,方便直观显示与比较;
步骤4.5,对获得的APFD值进行统计分析,计算本方法和传统方法的威尔科克森秩和检验的p值(wilcox p-value)以及计算效应量(effect size),以及根据上述结果对本方法进行评估。
本发明还设计实现了基于代码和组合覆盖的测试用例优先级排序方法原型测试***;所述测试***主界面包括6个菜单项:文件选项、算法参数设置选项、被测程序设置选项、结果分析设置选项、统计结果分析选项以及图形查看选项;
其中算法参数设置选项,包括选择需要排序的算法,比如Total排序策略、Additional排序策略以及本方法排序策略,执行次数设置需要指定该排序方法循环执行次数,以及是否输出排序消耗时间等等;
其余5个菜单项分别代表5个功能模块:文件选项模块用于选择项目的文件地址,里面包含的被测程序集,测试时用例集等信息;被测程序设置选项用于指定该实验使用路径下的哪些程序、以及其基础版本和迭代错误版本;结果分析设置选项会显示出各个方法的排序策略具体的错误检测情况,并生成指定的评估值,如APFD值;统计结果分析选项根据结果分析模块的评估值计算本方法和传统方法的wilcox的p值,判断各方法之间是否存在显著差异,同时计算两两方法之间的effect size,判断本方法与传统方法之间的优劣比较;图形查看选项首先会将结果分析模块的评估值(比如APFD值)进行图形化显示,主要以盒图的形式方便直观地比较各个方法,如图5所示,这里横坐标代表各个方法,其中Add、Tot、F1、F2分别表示Additional策略、Total策略以及基于本发明1维和2维组合覆盖的实现,纵坐标则代表各个方法的APFD值;之后将统计结果分析模块的结果以表格的形式进行两两对比显示,如图6所示,对p值存在显著差异以及effect size高于0.5的数据进行高亮显示。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。

Claims (8)

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{t1,t2,t3,…tn},存在长度为s的已排序用例集ST{st1,st2,st3,…sts},存在长度为c的待排序测试用例集CT{ct1,ct2,ct3,…dtc},那么对每个用例,设定维度为t,对该粒度存在种覆盖组合,由于每个单元可能取值为1(被覆盖)或者0(未覆盖),因此每个组合存在2t种可能取值,那么对于待选测试用例cti,其评估值为d(cti,S)=CombSet(cti)∪CombSet(ST),其中CombSet(cti)代表t维度下测试用例cti的组合覆盖情况;CombSet(ST)代表t维度下测试用例集ST的组合覆盖情况。
6.根据权利要求1所述的一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,还包括步骤4:根据已排序的测试用例序列和测试用例集的错误检测情况,计算该测试用例序列的评估值并进行统计分析。
7.根据权利要求6所述的一种基于代码和组合覆盖的测试用例优先级排序方法,其特征在于,所述步骤4的具体实现:
步骤4.1,使用本方法的一维覆盖组合,在函数(function)粒度上重复步骤3,生成该方法的已排序测试用例序列;
步骤4.2,使用贪心算法,即Total和Additional策略,在函数(function)粒度上对测试用例进行排序,生成各个方法的已排序测试用例序列;
步骤4.3,根据各个方法的已排序测试用例序列以及测试用例集的错误覆盖矩阵FaultMatrix,生成各个方法的排序结果的评估值,这里以平均错误检测速率APFD(averagepercentage of fault detection)为例,其评估值公式为: 其中n代表测试用例数量、m代表程序中错误数量,TFi代表检测到第i个错误的第一个测试用例在排序中的执行次序;
步骤4.4,对获得的APFD值进行图形化显示,画出各个方法在每种粒度下的盒图,方便直观显示与比较;
步骤4.5,对获得的APFD值进行统计分析,计算本方法和传统方法的威尔科克森秩和检验的p值(wilcox p-value)以及计算效应量(effect size),以及根据上述结果进行评估。
8.一种实现如权利要求1-7任一项所述基于代码和组合覆盖的测试用例优先级排序方法的测试***,其特征在于,所述测试***主界面包括6个菜单项:文件选项、算法参数设置选项、被测程序设置选项、结果分析设置选项、统计结果分析选项以及图形查看选项;
其中算法参数设置选项,包括选择需要排序的算法,比如Total排序策略、Additional排序策略以及本方法排序策略,执行次数设置需要指定该排序方法循环执行次数,以及是否输出排序消耗时间等等;
其余5个菜单项分别代表5个功能模块:文件选项模块用于选择项目的文件地址,里面包含的被测程序集,测试时用例集等信息;被测程序设置选项用于指定该实验使用路径下的哪些程序、以及其基础版本和迭代错误版本;结果分析设置选项会显示出各个方法的排序策略具体的错误检测情况,并生成指定的评估值,如APFD值;统计结果分析选项根据结果分析模块的评估值计算本方法和传统方法的wilcox的p值,判断各方法之间是否存在显著差异,同时计算两两方法之间的effect size,判断本方法与传统方法之间的优劣比较;图形查看选项首先会将结果分析模块的评估值(比如APFD值)进行图形化显示,主要以盒图的形式方便直观地比较各个方法,之后将统计结果分析模块的结果以表格的形式进行两两对比显示,对p值无显著差异以及effect size低于0.5的数据进行高亮显示。
CN201910302282.3A 2019-04-16 2019-04-16 一种基于代码和组合覆盖的测试用例优先级排序方法及测试*** Active CN110134588B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910302282.3A CN110134588B (zh) 2019-04-16 2019-04-16 一种基于代码和组合覆盖的测试用例优先级排序方法及测试***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910302282.3A CN110134588B (zh) 2019-04-16 2019-04-16 一种基于代码和组合覆盖的测试用例优先级排序方法及测试***

Publications (2)

Publication Number Publication Date
CN110134588A true CN110134588A (zh) 2019-08-16
CN110134588B CN110134588B (zh) 2023-10-10

Family

ID=67570020

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910302282.3A Active CN110134588B (zh) 2019-04-16 2019-04-16 一种基于代码和组合覆盖的测试用例优先级排序方法及测试***

Country Status (1)

Country Link
CN (1) CN110134588B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110502447A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于图的回归测试用例优先排序方法
CN110647461A (zh) * 2019-08-19 2020-01-03 江苏大学 多信息融合的回归测试用例排序方法及***
CN110704322A (zh) * 2019-09-30 2020-01-17 上海中通吉网络技术有限公司 软件测试方法和***
CN111813681A (zh) * 2020-07-13 2020-10-23 兴业证券股份有限公司 一种动态用例优先级排序方法和装置
CN111858341A (zh) * 2020-07-23 2020-10-30 深圳慕智科技有限公司 一种基于神经元覆盖的测试数据度量方法
CN113672506A (zh) * 2021-08-06 2021-11-19 中国科学院软件研究所 基于机器学习的动态比例测试用例排序选择方法及***
CN114706769A (zh) * 2022-03-30 2022-07-05 天津大学 基于日志的面向回归测试的黑盒测试用例排序方法
CN115809203A (zh) * 2023-02-07 2023-03-17 杭州罗莱迪思科技股份有限公司 软件测试用例动态嵌套方法、装置及其应用
CN117370151A (zh) * 2023-09-08 2024-01-09 中国软件评测中心(工业和信息化部软件与集成电路促进中心) 一种测试用例执行的约简与优化方法、装置、介质及设备
CN117520211A (zh) * 2024-01-08 2024-02-06 江西财经大学 基于多维覆盖矩阵的随机组合测试用例生成方法与***
CN117806981A (zh) * 2024-03-01 2024-04-02 中国空气动力研究与发展中心计算空气动力研究所 一种cfd软件自动化测试方法及***

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030101041A1 (en) * 2001-10-30 2003-05-29 International Business Machines Corporation Annealing harvest event testcase collection within a batch simulation farm
CN102253889A (zh) * 2011-08-07 2011-11-23 南京大学 一种回归测试中基于分布的测试用例优先级划分方法
CN102368226A (zh) * 2011-10-10 2012-03-07 南京大学 一种基于扩展有限状态机可行路径分析的测试用例自动生成方法
CN102831055A (zh) * 2012-07-05 2012-12-19 陈振宇 基于加权属性的测试用例选择方法
CN105446885A (zh) * 2015-12-28 2016-03-30 西南大学 一种基于需求的回归测试用例优先级排序技术
CN106598850A (zh) * 2016-12-03 2017-04-26 浙江理工大学 一种基于程序失效聚类分析的错误定位方法
CN106776311A (zh) * 2016-12-09 2017-05-31 华北计算技术研究所 一种软件接口测试用例的自动生成方法
CN106776351A (zh) * 2017-03-09 2017-05-31 浙江理工大学 一种基于One‑test‑at‑a‑time策略的组合测试用例优先级排序方法
CN107766245A (zh) * 2017-10-18 2018-03-06 浙江理工大学 基于ott策略的可变力度组合测试用例优先级在线排序方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030101041A1 (en) * 2001-10-30 2003-05-29 International Business Machines Corporation Annealing harvest event testcase collection within a batch simulation farm
CN102253889A (zh) * 2011-08-07 2011-11-23 南京大学 一种回归测试中基于分布的测试用例优先级划分方法
CN102368226A (zh) * 2011-10-10 2012-03-07 南京大学 一种基于扩展有限状态机可行路径分析的测试用例自动生成方法
CN102831055A (zh) * 2012-07-05 2012-12-19 陈振宇 基于加权属性的测试用例选择方法
CN105446885A (zh) * 2015-12-28 2016-03-30 西南大学 一种基于需求的回归测试用例优先级排序技术
CN106598850A (zh) * 2016-12-03 2017-04-26 浙江理工大学 一种基于程序失效聚类分析的错误定位方法
CN106776311A (zh) * 2016-12-09 2017-05-31 华北计算技术研究所 一种软件接口测试用例的自动生成方法
CN106776351A (zh) * 2017-03-09 2017-05-31 浙江理工大学 一种基于One‑test‑at‑a‑time策略的组合测试用例优先级排序方法
CN107766245A (zh) * 2017-10-18 2018-03-06 浙江理工大学 基于ott策略的可变力度组合测试用例优先级在线排序方法

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110647461A (zh) * 2019-08-19 2020-01-03 江苏大学 多信息融合的回归测试用例排序方法及***
CN110502447A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于图的回归测试用例优先排序方法
CN110502447B (zh) * 2019-08-30 2022-10-25 西安邮电大学 一种基于图的回归测试用例优先排序方法
CN110704322A (zh) * 2019-09-30 2020-01-17 上海中通吉网络技术有限公司 软件测试方法和***
CN110704322B (zh) * 2019-09-30 2023-03-10 上海中通吉网络技术有限公司 软件测试方法和***
CN111813681B (zh) * 2020-07-13 2022-09-09 兴业证券股份有限公司 一种动态用例优先级排序方法和装置
CN111813681A (zh) * 2020-07-13 2020-10-23 兴业证券股份有限公司 一种动态用例优先级排序方法和装置
CN111858341A (zh) * 2020-07-23 2020-10-30 深圳慕智科技有限公司 一种基于神经元覆盖的测试数据度量方法
CN113672506A (zh) * 2021-08-06 2021-11-19 中国科学院软件研究所 基于机器学习的动态比例测试用例排序选择方法及***
CN114706769A (zh) * 2022-03-30 2022-07-05 天津大学 基于日志的面向回归测试的黑盒测试用例排序方法
CN115809203A (zh) * 2023-02-07 2023-03-17 杭州罗莱迪思科技股份有限公司 软件测试用例动态嵌套方法、装置及其应用
CN115809203B (zh) * 2023-02-07 2023-04-25 杭州罗莱迪思科技股份有限公司 软件测试用例动态嵌套方法、装置及其应用
CN117370151A (zh) * 2023-09-08 2024-01-09 中国软件评测中心(工业和信息化部软件与集成电路促进中心) 一种测试用例执行的约简与优化方法、装置、介质及设备
CN117370151B (zh) * 2023-09-08 2024-03-29 中国软件评测中心(工业和信息化部软件与集成电路促进中心) 一种测试用例执行的约简与优化方法、装置、介质及设备
CN117520211A (zh) * 2024-01-08 2024-02-06 江西财经大学 基于多维覆盖矩阵的随机组合测试用例生成方法与***
CN117806981A (zh) * 2024-03-01 2024-04-02 中国空气动力研究与发展中心计算空气动力研究所 一种cfd软件自动化测试方法及***
CN117806981B (zh) * 2024-03-01 2024-05-07 中国空气动力研究与发展中心计算空气动力研究所 一种cfd软件自动化测试方法及***

Also Published As

Publication number Publication date
CN110134588B (zh) 2023-10-10

Similar Documents

Publication Publication Date Title
CN110134588A (zh) 一种基于代码和组合覆盖的测试用例优先级排序方法及测试***
CN109783349A (zh) 一种基于动态反馈权重的测试用例优先级排序方法及***
Lombardi et al. Policy decision support for renewables deployment through spatially explicit practically optimal alternatives
Chen et al. MULTI: Multi-objective effort-aware just-in-time software defect prediction
Zakari et al. Multiple fault localization of software programs: A systematic literature review
de Souza et al. Spectrum-based software fault localization: A survey of techniques, advances, and challenges
CN109710514A (zh) 测试用例优先级排序中的tie-breaking的解决方法及***
Posnett et al. Ecological inference in empirical software engineering
Miller Using dependency structures for prioritization of functional test suites
Ahmed et al. Handling constraints in combinatorial interaction testing in the presence of multi objective particle swarm and multithreading
CN105893256A (zh) 基于机器学习算法的软件故障定位方法
Saeed et al. The experimental applications of search-based techniques for model-based testing: Taxonomy and systematic literature review
CN105868116A (zh) 基于语义变异算子的测试用例生成和优化方法
Zhang et al. Exploring the usefulness of unlabelled test cases in software fault localization
CN104794059A (zh) 一种基于函数调用记录的缺陷定位方法及装置
Gupta et al. An insight into test case optimization: ideas and trends with future perspectives
CN107066389A (zh) 基于集成学习的软件缺陷重新打开的预测方法
Cui et al. Investigating the impact of multiple dependency structures on software defects
Jain et al. Energy efficiency in South Asia: Trends and determinants
CN103500142A (zh) 面向动态Web应用的多目标测试用例优先级测试方法
CN108021509A (zh) 基于程序行为网络聚合的测试用例动态排序方法
Chi et al. Multi-level random walk for software test suite reduction
Zakari et al. A community-based fault isolation approach for effective simultaneous localization of faults
Zou et al. An empirical study of bug fixing rate
Zhou et al. Predicting concurrency bugs: how many, what kind and where are they?

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant