一种预测性变异测试方法

文档序号:10724814阅读:646来源:国知局
一种预测性变异测试方法
【专利摘要】本发明公布了一种预测性变异测试方法,分为训练阶段和预测阶段,通过预测方法来预测每一个变异体的执行结果;训练阶段包括:执行变异体;对已执行变异体进行特征收集,形成特征属性文件;应用分类算法创建分类模型;预测阶段包括:对未执行变异体进行特征收集;对未执行变异体利用分类模型将每一个未执行变异体分类,即获得分类结果。采用本发明技术方案进行变异测试,可对待测的变异体,直接使用建立的预测模型进行预测,不必执行变异体即可得到变异体的执行结果,可显著降低变异测试代价。
【专利说明】
一种预测性变异测试方法
技术领域
[0001] 本发明涉及软件测试技术领域,尤其涉及一种可以减小变异测试代价的预测性变 异测试方法(Predictive Mutation Testing)。
【背景技术】
[0002] 测试用例在保证软件质量方面扮演着重要角色。相比较于质量差的测试用例,经 过良好设计的测试用例能够发现更多的错误。为了衡量测试用例的揭错能力,变异测试 (mutation testing)应运而生,并在近几年得到越来越多研究人员和开发人员的广泛关注 和使用。
[0003] 简单而言,变异测试通过在程序中植入错误来模拟程序中的真实错误,进而用现 有测试用例找出植入错误的能力来预测其找出真实错误的能力。在变异测试中,植入的错 误称为变异体(mutant),当测试用例发现某变异体行为和原来程序行为不一致时,称为该 测试用例杀死(kill) 了变异体。所有被找出的变异体的比例称为变异分数(mutation score),该分数高低即可昭示测试用例质量好坏。
[0004] 由于程序中可以植入很多错误,产生很多变异体,每个变异体均须在每个测试用 例上执行,因而变异测试代价极大。高昂的测试代价成为变异测试技术的瓶颈,因而降低变 异测试代价问题成为变异测试领域研究的重点和热点。选择性变异测试技术是当前比较热 门的变异测试代价降低技术,该技术通过执行程序中的一部分变异体,并用执行过的变异 体的变异分数来预测整体变异体的变异分数,但是,这种方法中,每一个变异体的执行结果 无法被预测。

【发明内容】

[0005] 为了克服上述现有技术的不足,本发明提供一种预测性变异测试(Predictive MutationTesting)方法,在变异体执行结果准确率和变异测试代价之前寻求平衡。当测试 人员急于知道测试用例大概质量而不需要精确变异体执行结果时,该技术可以为开发人员 提供很好的选择。
[0006] 本发明的原理是:为缓解变异测试高代价的问题,提出一种全新的变异测试技 术一一预测性变异测试方法。本发明利用预测方法(如基于规则的方法、机器学习等)来预 测每一个变异体的执行结果,本发明称此方法为预测性变异测试方法(Predictive MutationTesting)。该方法通过分析已执行的变异体的特征属性和执行结果,建立分类模 型(预测模型)。分类模型的训练为离线阶段。训练得到分类模型后,利用分类模型,针对待 预测的变异体,未执行待预测变异体即可将其分类为杀死(killed)或者存活(survived), 从而预测变异体的执行结果。
[0007] 本发明提供的技术方案是:
[0008] -种预测性变异测试方法,分为训练阶段和预测阶段,通过预测方法来预测每一 个变异体的执行结果,包括如下步骤:
[0009] -,训练阶段:
[0010] 11)执行变异体;
[0011] 12)对已执行变异体进行特征收集;
[0012] 收集变异体的特征属性,具体地,本发明根据代码不同类型的特征,包括:错误必 须被执行到(Execution)、有感染性(Infection)、能被传播出来(Propagation)的特征,收 集三种类型的特征属性:
[0013] a)E特征:根据E原则,可收集的特征有:变异体植入错误位置被测试用例执行的总 次数、覆盖该位置的测试用例个数;
[0014] b)I特征:根据I原则,可收集的特征有:变异体被植入错误的语句的类型、生成该 变异体的变异算子类型;
[0015] C)P特征:根据P原则,可收集的特征有:McCabe复杂度、每个方法子方法的数目、代 码行数、不稳定性等表征程序特点的计量准则(metric)。
[0016] 13)应用分类算法创建分类模型;
[0017] 利用收集到的变异体的特征属性,本发明具体使用weka工具,将特征属性文件 (arff)格式作为输入,即可自动生成分类模型(预测模型)。
[0018] 本发明实例中,分类算法采用机器学习作为预测方法,来预测变异体执行结果的 行为。机器学习方法实际上属于分类行为,即把每个变异体进行分类,分为能被测试用例杀 死和不能被测试用例杀死两类。在机器学习的分类算法上,本发明支持多种分类算法,如决 策树、神经网络、支持向量机等。
[0019]二,预测阶段:
[0020] 21)对未执行变异体进行特征收集;
[0021] 22)对未执行变异体利用步骤13)所述分类模型进行分类预测,将每一个变异体分 为两类,即获得分类结果。
[0022]每个变异体的类型分为:能被测试用例杀死或不能被测试用例杀死。
[0023]在实际的变异测试中,被测试用例杀死的变异体往往大于未被杀死的变异体,因 此训练集和测试集的数据往往是不均衡的。传统的机器学习中处理不均衡数据的方法主要 有三种,一是向上均衡法,方法为根据数目少的那一类的数据特点随机生成该类数据,直至 该类数据数量和另外一类均衡;二是向下均衡法,方法为将数目多的那一类随机删掉数据, 直至数据数量和另外一类均衡;三是给不同的类别的数据附以不同的权重,以此来消除不 均衡数据对分类模型的影响。针对不均衡数据处理问题,本发明同时使用两种不均衡数据 处理方法:向下均衡法和权重法。本发明在具体实施时,将同时使用上述两种不均衡数据处 理方法的处理结果和不加不均衡数据处理进行比较,以此来验证不均衡数据的处理对变异 体测试执行结果预测的影响。
[0024] 在实际应用中,本发明提供的预测性变异测试方法可用于三种应用场景:版本内、 跨版本、跨项目。
[0025] 版本内的应用场景利用版本产生的部分变异体及其执行结果作为训练集,来预测 剩下的变异体的执行结果。
[0026] 跨版本的应用场景利用前面一个或者多个版本产生的变异体及其执行结果作为 训练集,来预测新版本的变异体的执行结果。
[0027] 跨项目的应用场景利用部分项目的变异体及其执行结果,来预测其他项目变异体 的执行结果。
[0028] 与现有技术相比,本发明的有益效果是:
[0029] 本发明方法通过分析已执行的变异体的特征属性和执行结果,建立分类模型,利 用预测方法(如基于规则的方法、机器学习等)来预测每一个变异体的执行结果。
[0030] 本发明方法需要根据已经执行的变异体建立模型,因此必须执行一部分变异体。 但预测模型建立好之后,即可离线一直使用。采用本发明技术方案进行变异测试,对于待测 的变异体,直接使用预测模型进行预测,不必执行变异体即可得到变异体的执行结果,可显 著降低变异测试代价。
【附图说明】
[0031] 图1是本发明提供的预测性变异测试方法的流程框图。
【具体实施方式】
[0032] 下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范 围。
[0033] 本发明提供的预测性变异测试方法可使用在很多测试情境,例如,当测试人员急 于了解测试用例的预测质量,但又希望预测结果比较准确的情况。这种情况如采用已有的 预测技术,预测准确率低,难以满足测试人员要求。图1所示是本发明提供的预测性变异测 试方法的流程,包括如下步骤:
[0034] 1)预测模型构建。为构造预测模型,需执行部分变异体(这些变异体产生于被预测 程序的上一个版本或者其他程序),并收集这些变异体的特征属性,结合其执行结果输入到 分类算法中,产生预测模型。需注意预测模型的构建过程可以是离线的事先构建好的。
[0035] 2)待测程序特征收集。对于待测程序,需产生变异体,并收集这些变异体的特征属 性,作为预测模型的输入。
[0036] 3)收集预测结果。收集好的待测程序的变异体特征输入到预测模型中,即可收集 被预测的每个变异体的执行结果。预测每个变异体的执行结果分为两种:变异体被杀死或 变异体存活。
[0037] 针对步骤1)中收集变异体的特征属性,由于软件中错误被发现必须满足PIE原则, 即代码中的错误必须被执行到(Execution)、有感染性(Inf ection)、能被传播出来 (Propagat ion)。基于这三条原则,本发明收集三种类型的特征属性:
[0038] a)E特征:根据E原则,可收集的特征有:变异体植入错误位置被测试用例执行的总 次数、覆盖该位置的测试用例个数;
[0039] b)I特征:根据I原则,可收集的特征有:变异体被植入错误的语句的类型、生成该 变异体的变异算子类型;
[0040] c)P特征:根据P原则,可收集的特征有:McCabe复杂度、每个方法子方法的数目、代 码行数、不稳定性等表征程序特点的计量准则(metric)。
[0041] 针对步骤1)分类算法,本发明实施例采用机器学习来预测变异体执行结果的行 为。机器学习方法实际上属于分类行为,即把每个变异体进行分类,分为能被测试用例杀死 和不能被测试用例杀死两类。分类算法众多,如决策树、神经网络、支持向量机等。
[0042]在实际的变异测试中,被测试用例杀死的变异体往往大于未被杀死的变异体,因 此训练集和测试集的数据往往是不均衡的。传统的机器学习中处理不均衡数据的方法主要 有三种,一是向上均衡法,方法为根据数目少的那一类的数据特点随机生成该类数据,直至 该类数据数量和另外一类均衡;二是向下均衡法,方法为将数目多的那一类随机删掉数据, 直至数据数量和另外一类均衡;三是给不同的类别的数据附以不同的权重,以此来消除不 均衡数据对分类模型的影响。针对不均衡数据处理问题,本发明同时使用两种不均衡数据 处理方法:向下均衡法和权重法。本发明在具体实施时,将同时使用上述两种不均衡数据处 理方法的处理结果和不加不均衡数据处理进行比较,以此来验证不均衡数据的处理对变异 体测试执行结果预测的影响。
[0043]在实际应用中,本发明提供的预测性变异测试技术可用于三种应用场景:版本内、 跨版本、跨项目。版本内的应用场景是指利用版本产生的部分变异体及其执行结果作为训 练集,来预测剩下的变异体的执行结果。跨版本的应用场景是指利用前面一个版本或者几 个版本产生的变异体及其执行结果作为训练集,来预测新版本的变异体的执行结果。跨项 目的应用场景是指,利用部分项目的变异体及其执行结果,来预测其他项目变异体的执行 结果。
[0044] 在针对具体应用的实施方法上,可开发在线平台,帮助开发人员收集预测性变异 测试所需收集的特征,并直接给出预测结果。比如,开发人员想得到项目A的变异体预测结 果,可在开发的在线项目平台上选择应用场景。对于版本内和跨项目的应用场景,开发人员 不需上传其他项目,只需上传项目A的源代码和用来评测的测试用例集合,开发的在线平台 可自动根据不同的应用场景选择不用的处理方法:对于版本内的应用场景,平台自动收集 特征,并执行部分变异体,训练分类模型来预测剩下的变异体,返回最后结果;对于跨版本 预测,平台可以自动收集特征,然后直接调用后台已经建好的分类模型来得到该项目所有 变异体的预测执行结果。对于跨版本的应用场景,开发人员在开发新版本之前上传之前版 本源代码,供平台收集训练集和生成分类模型,当开发人员开发后新版本后,可以将新版本 上传至平台,即可很快的得到所有新版本变异体预测的执行结果。
[0045] 例如,在跨项目应用场景下,可以利用项目A1,A2,A3,…,A10十个项目来构造预测 模型。针对每一个项目,需要对其执行变异测试过程,收集每一个变异体的执行结果以及特 征属性。所有项目的变异体属性和执行结果结合起来构成训练集(trainingdata),然后应 用分类算法产生分类模型M。
[0046] 得到分类模型Μ后,该模型可以应用到任何新项目中,不用执行变异体即可知道这 些新项目的变异体执行结果。例如,假设有新项目Β,只需针对项目Β产生变异体,收集这些 变异体的特征属性,再输入到分类模型中,即可产生预测结果。
[0047] 表1是本发明在跨版本应用场景下的预测效果。表2是本发明在跨项目应用场景下 的预测效果。其中,Sub为项目名称,Ver为版本号(V0-V1即为用第0个版本预测第1个版本); Prec、Recall、F、AUC分别为Precision(准确率)、Recall(召回率)、F_measure(F度量)、AUC (曲线下面积)的缩写;Err代指预测的变异分数和真实变异分数的差值。
[0048] 由表1可以看出,预测性变异测试方法在跨版本应用场景下效果非常好。具体而 言,几乎所有的评测指标都大于〇. 9,并且除三个变异分数误差以外,其它的变异分数误差 都控制在5%以内。
[0049] 由表2可以看出,预测性变异测试方法在跨项目应用场景下的效果虽逊色于跨版 本的应用场景,但是效果也很不错。具体而言,所有的评测指标都高于0.85,几乎所有的变 异分数误差都控制在10%以内。
[0050] 表1.跨版本场景预测结果
[0052] 表2跨项目场景预测结果
[0054]表3是本发明在跨项目应用场景下和传统变异测试的比较结果。其中,sub为项目 名称,2-4列为时间比较,其中第二列为传统的变异测试所用时间(使用工具为当前最快的 PIT工具),第三列左侧为本发明提供的预测性变异测试方法在跨版本应用场景下的测试时 间,第三列右侧为跨版本场景下本发明提供的预测性变异测试方法相对于传统变异测试技 术的加速比;第四列左侧为本发明提供的预测性变异测试方法在跨项目应用场景下的时 间,第三列右侧为跨项目应用场景下本发明提供的预测性变异测试方法相对于传统变异测 试技术的加速比。
[0055]表3跨项目场景和传统变异测试的比较
[0057]由表3可以看出,在跨项目应用场景下,和传统变异测试方法相比,本发明提供的 预测性变异测试方法在保证较低的预测变异分数误差的前提下,跨版本应用场景和跨项目 应用场景下的测试时间均大为减少。另外,随着项目规模的增长,传统变异测试方法时间开 销增长迅速,但是本发明的预测性变异测试方法的时间开销几乎不变,预示着本方法具有 很好的可延展性。
[0058]需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技 术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是 可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求 书界定的范围为准。
【主权项】
1. 一种预测性变异测试方法,分为训练阶段和预测阶段,通过预测方法来预测每一个 变异体的执行结果,包括如下步骤: 一,训练阶段: 11) 执行变异体; 12) 对已执行变异体进行特征收集,形成特征属性文件; 13) 应用分类算法创建分类模型; 二,预测阶段: 21) 对未执行变异体进行特征收集; 22) 对未执行变异体利用步骤13)所述分类模型进行分类预测,将每一个未执行变异体 分类,即获得分类结果。2. 如权利要求1所述预测性变异测试方法,其特征是,步骤12)所述特征包括三种类型, 分别为:错误必须被执行到的E特征、有感染性的I特征、能被传播出来的P特征;所述E特征 包括变异体植入错误位置被测试用例执行的总次数和覆盖该位置的测试用例个数;所述I 特征包括变异体被植入错误的语句的类型和生成该变异体的变异算子类型;所述P特征包 括McCabe复杂度、每个方法子方法的数目、代码行数和不稳定性计量。3. 如权利要求1所述预测性变异测试方法,其特征是,步骤13)具体使用weka工具,将步 骤12)得到的特征属性文件作为输入,自动生成分类模型。4. 如权利要求1所述预测性变异测试方法,其特征是,步骤13)所述分类算法为机器学 习方法,所述机器学习方法为决策树方法、神经网络方法和支持向量机方法中的一种。5. 如权利要求1所述预测性变异测试方法,其特征是,步骤22)所述分类具体将每个未 执行变异体的类型分为:能被测试用例杀死或不能被测试用例杀死。6. 如权利要求1所述预测性变异测试方法,其特征是,步骤22)所述进行分类预测时,使 用不均衡数据处理方法,用于消除不均衡数据对分类模型的影响。7. 如权利要求6所述预测性变异测试方法,其特征是,同时使用向下均衡法和权重法两 种不均衡数据处理方法。8. 将权利要求1~7所述预测性变异测试方法应用于版本内、跨版本或跨项目测试应 用,其特征是,将部分变异体和对此部分变异体的执行结果作为训练集,来预测剩下的变异 体的执行结果。
【文档编号】G06F11/36GK106095684SQ201610437023
【公开日】2016年11月9日
【申请日】2016年6月17日
【发明人】张洁, 郝丹, 张令明, 张路
【申请人】北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1