基于语句覆盖和缺陷检测的多目标测试数据缩减方法

文档序号:6630201阅读:265来源:国知局
基于语句覆盖和缺陷检测的多目标测试数据缩减方法
【专利摘要】本发明提出一种基于语句覆盖和缺陷检测的多目标测试数据缩减方法,目的是有效减少测试数据的冗余度,提高软件测试的效率。首先,将测试数据缩减问题转化为多目标优化问题,优化的目标是使得测试数据集的语句覆盖率和缺陷检测率尽可能地多,并且测试数据的个数尽可能地少;然后明确各个目标函数,建立多目标优化模型;最后提出一种遗传算法对该问题进行求解。该方法能够找到有效的测试数据,使其同时满足满足语句覆盖率、缺陷检测率的最大化,测试数据个数最小化。
【专利说明】基于语句覆盖和缺陷检测的多目标测试数据缩减方法

【技术领域】
[0001] 本发明涉及计算机软件测试领域,设计了一种基于语句覆盖和缺陷检测的多目标 测试数据缩减及进化求解方法。该方法区别于已有方法的特色在于,基于语句覆盖和缺陷 检测建立测试数据缩减问题的多目标优化模型,从而保证缩减后的测试数据具有较好的质 量;另外,给出一种遗传算法来对上述模型进行求解。该方法不但可以有效减少测试数据的 数量,还可以保证缩减后的测试数据具有较好的检错能力,对提高软件测试的效率和质量 具有重要意义。

【背景技术】
[0002] 软件测试的目的是为了发现软件中存在的缺陷甚至错误,从而提高软件的质量。 而进行软件测试的核心,是采用有针对性的理论和方法,生成有效的测试数据,以满足既定 的测试充分性准则。但是,传统方法生成的测试数据往往存在大量冗余。测试数据之所以会 出现冗余,是因为覆盖某一测试目标的测试数据往往同时覆盖其他测试目标。另外,在回归 测试中,会根据新的测试要求不断补充大量测试数据,从而导致测试用例的数量不断攀升。
[0003] 测试数据冗余是软件测试领域面临的一个重要难题。如果能够找到更少的测试数 据满足既定的测试要求,那么,无疑将会提高软件测试的效率,因为这可以减少执行测试数 据集所需的时间,从而降低测试成本。为此,人们提出多种测试数据进行缩减策略,从而达 到减少冗余、提高软件测试效率的目的。
[0004] 一般来说,测试数据缩减的思想是:按照某种覆盖准则,找到原有测试数据集的子 集,使得该子集也能够覆盖所有测试目标,该子集称为原有测试数据集的代表集。如果一个 测试数据集的任何真子集都不能满足既定的测试准则,那么,称该测试数据集为最优集或 最小集。
[0005] Leung和White证明,寻找覆盖所有测试目标的最小测试数据集属于NP困难问题。 所以,人们往往寻找该问题的近似解。Harrold等提出一种启发式算法缩减测试数据集,该 方法首先根据测试数据和测试目标的关联矩阵对测试需求分类,再根据测试需求的等级, 按照一定顺序选择测试数据。Chen等提出另外一种启发式方法,解决测试数据缩减问题,该 方法用到3种策略,分别是贪心策略、必要性策略和一对一策略,其中,贪心策略优先选择 覆盖更多测试目标的测试数据;必要性策略选择必不可少的测试数据;而一对一策略选择 只能由一个测试数据覆盖的测试目标。Lin等改进了 Harrold的方法,区分具有相同优先级 的测试数据。
[0006] 解决测试数据冗余问题的另一种方法,是在生成测试数据的同时,最小化测试数 据集。Ding等提出一种面向连续和并发程序的测试数据生成方法,该方法首先根据条件 语句,将程序的输入域划分为若干子区域;然后,在程序的每个输出节点建立表达式,包括: 相应的输入变量、到达的条件,以及一些"与、或"操作符号等;最后,根据表达式生成相应的 测试数据。实验结果表明,该方法生成的测试数据避免了大量的冗余。Li等提出一种利用 语句优先级选择测试目标的语句覆盖测试数据生成方法,该方法首先按照某种准则确定语 句的优先级;然后,根据语句的优先级选择目标路径,使得该路径能够覆盖更多高优先级的 目标语句。
[0007] 一般情况下,人们把测试数据缩减看成单目标优化问题,优化的目标是测试数据 个数最少。但是,也有把测试数据缩减和其它目标相结合的方法,如:在Υ〇〇和Harman的 工作中,优化的目标包括:代码覆盖、以前的排错记录和执行该测试数据所需要的时间等。 Black等利用线性规划缩减测试数据,该方法包含两个模型,第一个优化的目标是测试数据 个数最少;第二个优化的目标有两个,一个是测试数据个数最少;另一个是测试数据累计 覆盖的测试目标最多。
[0008] 与测试数据缩减相近的另一工作是测试数据选择,二者都是要找到原来的测试数 据集的代表集,不同的是代表集满足的准则不同。测试数据缩减的准则是代表集能够覆盖 既定的测试目标;而测试数据选择主要针对回归测试,考察代表集能否覆盖程序中修改的 部分。
[0009] 现有方法对测试数据进行缩减时,一般只要求缩减后的测试数据满足特定覆盖要 求。虽然也有利用多目标方法解决测试数据缩减问题的,但很少考虑缩减后测试数据的检 错能力。因此,已有测试数据缩减方法虽然可以降低测试数据的数量,但往往会消弱其缺陷 检测能力。
[0010] 语句覆盖是最基本的测试覆盖准则,因此,本发明把语句覆盖率作为衡量测试数 据质量的第一个目标。另外,软件测试的核心是为了查找缺陷。测试数据发现的错误越多, 对应测试数据的质量也就越高。因此,本发明把缺陷检测率作为衡量测试数据质量的第二 个目标。最后,为了降低测试成本,第三个目标是希望缩减后的测试数据数量越少越好。鉴 于此,本发明建立了测试缩减问题的多目标优化模型,并给出其进化求解方法。


【发明内容】

[0011] 本发明给出一种基于语句覆盖和缺陷检测的多目标测试数据缩减方法。首先,把 测试数据缩减问题转化为多目标优化问题,优化的目标分别语句覆盖率、缺陷检测率和缩 减率。在此基础之上,设计了一种遗传算法对上述多目标优化模型进行求解。最后的实验 结果表明,本发明提出的方法不但可以大幅度缩减测试数据的数量,同时可以保证其语句 覆盖率和检错能力不会降低。
[0012] 本发明所要解决的技术问题:基于语句覆盖和缺陷检测建立测试数据缩减问题的 多目标优化模型,从而保证缩减后的测试数据具有较好的质量;提出一种求解上述优化问 题的遗传算法,从而保证该优化问题求解的效率。
[0013] 本发明的技术解决方案:一种基于语句覆盖和缺陷检测的测试数据缩减方法,其 特征包含以下步骤:
[0014] 步骤1.把测试数据缩减问题转化为多目标优化问题
[0015] 首先,明确我们所要解决的问题。假设被测程序为G,其输入空间为D,要求覆盖 的目标语句集为S = {sp s2,…,sm},其中,m为目标语句的个数。已有测试数据集为Ω = {Xl,x2,…,xn},其中Xi eD。假设Ω能够覆盖目标语句集S的所有目标语句。现在要解决 的问题可描述为:找到测试数据集Ω的一个子集Ω*,使其尽可能满足以下几个目标要求: 能够覆盖的目标语句的个数尽可能的多,即语句覆盖率最大化;检测到的缺陷个数尽可能 的多,即缺陷检测率最大化;且包含的测试数据个数尽可能的少,也就是说测试数据集最小 化。
[0016] 因此,我们需要得到满足上述目标的一个子集Ω*。为了有效解决该问题,需要建 立语句覆盖率函数、缺陷检测率函数以及缩减率函数,从而本发明将测试数据缩减问题建 模为一个多目标优化问题。
[0017] 步骤2.明确测试数据缩减问题各个目标函数,建立多目标优化模型
[0018] 我们在对测试数据集进行约简时,同时考虑三个因素,即保证测试数据得到约简, 并且测试数据集的语句覆盖率和缺陷检测能力不会降低。因此,所建立的优化模型包含三 个目标函数,分别是语句覆盖率、缺陷检测率和测试数据缩减率。
[0019] (1)语句覆盖率
[0020] 语句覆盖准则要求测试数据集能够覆盖所有的目标语句。若Ω *覆盖了目标语句 集S中的t条语句,那么,Ω *对S的语句覆盖率可定义为:
[0021]

【权利要求】
1. 基于语句覆盖和缺陷检测的多目标测试数据缩减方法,其特征在于如下步骤: 步骤1.1:把测试数据缩减问题转化为多目标优化问题,优化目标是能够覆盖的目标 语句的个数尽可能的多;检测到的缺陷个数尽可能的多;包含的测试数据个数尽可能的 少,也就是说测试数据集最小化。 步骤1. 2 :明确测试数据缩减问题的各个目标函数,建立多目标优化模型。 步骤1. 3 :利用遗传算法对基于语句覆盖和缺陷检测的多目标测试数据缩减问题进化 求解。
2. 权利要求1中步骤1. 1所述的把测试数据缩减问题转化为多目标优化问题,其特征 在于本发明优化的目标是使得测试数据集的语句覆盖率和检错率不会降低,以及使得测试 数据的个数尽可能的少。
3. 权利要求1中步骤1. 2所述的明确测试数据缩减问题各个目标函数,建立多目标数 学模型,其特征在于将目标函数建立为多目标优化模型。
4. 权利要求1中步骤1. 3所述利用遗传算法进化求解,其特征在于以下步骤: 步骤4. 1 :个体编码方法 设是待求问题(4)的一个候选解,下面将给出的编码方法。对于原有测试数 据集Q = {x,,Xa…,xj,令
则可得到一个长为n的(0-1)串a a2,…,an。可以看出,(0-1)串Yi, y2,…, 和子集是一一对应的关系。因此,我们可以使用长度为n的(0-1)串Yl,Y2,…,Y n来表不个体Q*。这样表不,为遗传操作的顺利实施奠定了基础。 步骤4. 2 :种群初始化 随机生成m个长为n的(0-1)字符串,分别记为,…,。每个字符串是一个个 体,m个个体组成一个初始种群。 步骤4. 3 :个体评价方法 由于(4)式建立的是一个多目标优化问题,需要给出个体的评价方法。由式(1)、(2) 和⑶可知,目标函数&(〇*),&⑴*)和f3(Q*)的取值都在0和1之间,因此,不需要对 目标函数进行归一化处理。 另外,由于和&(0*)是最大化问题,f3(Q*)是最小化问题,现在统一转化 为最小化问题。令 Q *) = 14 ( Q *),f2 ' ( Q *) = l-f2 ( Q *)。则 Q *)和 ⑴*)的值都在〇和1之间,且对心⑴*)和^⑴*)是最大化问题,等价于对f/⑴*) 和(Q*)的最小化问题。 最后,将f/ (Q*),f2' (Q*)和f3(Q*)进行加权组合,得到个体Q*的适应值函数 如下: fit(Q*) = c〇1f1(Q>l<) + c〇2f2(Q>l<) + c〇3f3(^*) (6) 其中,〇2, 〇3为权重系数。个体的适应值越小,就越接近我们期望的解。 步骤4. 4 :进化策略 由于每个个体都是一个(〇,1)字符串,可以采用传统的进化算子对个体实施遗传操 作。本文算法中,个体交叉算子为单点交叉,变异算子为单点变异,选择算子采用轮盘赌选 择。 步骤4. 5 :算法步骤 基于前面提出的个体编码及适应值计算策略,使用遗传算法来求解式(4)的步骤如 下: (1) 遗传算法的参数设置及个体编码 确定算法的控制参数,包括种群规模、算法终止代数、选择概率、交叉概率,以及变异概 率等。种群的个体为已有测试数据集的子集,并按照第4. 1小节给出的方法进行编码。 (2) 种群初始化 随机生成包含若干个体的初始种群A,进化代数t = 1。 (3) 个体适应值计算 对第i代种群%,按照(6)式计算每个个体的适应值。个体适应值越小,说明该个体越 接近最优解,被遗传到下一代的概率也就越大。 (4) 判断算法终止条件是否满足 算法终止的条件是,连续进化若干代后没有出现更优个体,或者种群进化代数超过设 定的最大值。若终止条件被满足,转步骤6 ;否则,转步骤5。 (5) 进行遗传操作 对个体实施选择、交叉和变异算子;令i = i+1,转步骤3。 (6) 停止进化,输出结果。
【文档编号】G06F11/36GK104281522SQ201410543046
【公开日】2015年1月14日 申请日期:2014年10月14日 优先权日:2014年10月14日
【发明者】巩敦卫, 姚香娟, 李彬, 胡雷, 陈永伟 申请人:中国矿业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1