1.本发明属于软件工程中的软件测试领域,尤其涉及一种回归测试中的测试用例优先级排序方法。
背景技术:
2.回归测试是用于检验程序或代码更改是否对现有功能造成负面影响的软件测试,在软件行业中的应用非常普遍。然而,测试用例规模通常很大,在回归测试中完全执行所有测试用例的成本会很高。将测试用例优先级排序,可以使更有可能检测出故障的测试用例优先执行,在可用测试时间内提供更大的故障检测能力,从而提高测试效率,减少时间和资源开销。如何有效地计算测试用例的优先级,是回归测试中的一个重要内容。
3.现有的回归测试中测试用例优先级排序方法通常基于单一信息确定测试用例相似性,这样并不能全面地考虑测试用例在各方面的相似性;同时,很多排序方法只考虑了将能够发现缺陷的测试用例排在前面,而没有考虑它们是否揭示不同的缺陷。
技术实现要素:
4.本发明提出了一种回归测试中的测试用例优先级排序方法,首先结合测试用例的静态和动态信息计算测试用例的相似性,对测试用例进行聚类;然后结合聚类结果,对多目标优化排序结果进行调整;最后将测试用例是否揭示相同的缺陷纳入关联规则的考量中,进一步调整测试用例排序结果。实验证明,该方法具有更好的排序效果。
5.为了实现上述目的,本发明采用一种回归测试中测试用例优先级的排序方法,包括以下三大步骤:步骤1,根据测试用例的文本主题相似性和语句覆盖率相似性进行测试用例聚类;所述步骤1,根据测试用例的文本主题相似性和语句覆盖率相似性进行测试用例聚类,包含以下步骤:步骤1.1,将测试用例文本进行预处理,对预处理后的文本进行主题建模,计算测试用例的文本主题相似性;执行该步骤的原因是,测试用例文本中包含测试用例的各种信息,因此可以从测试用例的静态文本信息角度出发,判断其在功能上的相似性;步骤1.2,统计测试用例的语句覆盖情况,计算测试用例的语句覆盖相似性;执行该步骤的原因是,语句覆盖情况描述程序源代码被测试用例测试的比例和程度,因此可以从测试用例的动态执行信息角度出发,判断其在代码覆盖范围上的相似性;步骤1.3,根据实验确定两种相似性的加权系数,并计算加权相似性总和;步骤1.4,根据加权相似性总和对测试用例进行层次聚类,得到聚类结果;将测试用例按相似性划分为n个不同类;步骤2,对测试用例进行多目标排序,并根据聚类结果调整排序序列;所述步骤2,对测试用例进行多目标排序,并根据聚类结果调整排序序列,包括以
下步骤:步骤2.1,以代码覆盖率最大化、历史执行失败率最大化和执行时间最大化为排序目标,使用多目标遗传算法对测试用例进行多目标排序,得到排序序列;步骤2.2,根据步骤1得到的聚类结果,调整步骤2.1所得排序序列,使得排在前面的测试用例属不同聚类类别;执行该步骤的原因是,排序序列可能出现检测相同错误的测试用例一起排在序列前端的情况,因此需要根据聚类结果调整排序,以提高检错速度。
6.步骤3,根据测试用例的历史执行结果挖掘关联规则,动态调整排序序列;所述步骤3,根据测试用例的历史执行结果挖掘关联规则,动态调整排序序列,包括以下步骤:步骤3.1,根据测试用例历史执行信息,挖掘测试用例间的执行失败的关联规则;步骤3.2,若得到的关联规则,其前件和后件揭示相同缺陷,则丢弃该关联规则;执行该步骤的原因是,当某个测试用例执行失败,只有在揭示的缺陷不同时,另一个测试用例才有立即执行的必要。
7.步骤3.3,执行步骤2得到的排序序列,过程中若某一测试用例执行失败,则查找以该测试用例为前件的关联规则,将其后件测试用例调整为立即执行;执行该步骤的原因是,保证在某一测试用例失败后,立即执行后面与其具有执行失败关联的测试用例,且该测试用例揭示不同缺陷,以提高检错速率。
8.最终得到的测试用例执行序列就是优先级排序序列。
9.本方法根据测试用例的文本主题相似性和语句覆盖率相似性,分别从静态和动态维度衡量测试用例的相似性,并对测试用例进行聚类;再用最大化代码覆盖率、历史执行失败率和最小化执行时间作为目标,使用多目标优化算法结合聚类结果对测试用例进行排序;最后再利用测试用例间的关联关系动态调整排序结果,最终得到测试用例优先级的排序顺序。该方法是一种融合数据挖掘技术和多目标优化技术的全新方案,结合了测试用例的静态信息和动态执行信息进行相似性判断,提高了缺陷检测速率,考虑更加全面,能得到更好的结果。
附图说明
10.图1为本发明方法的总体流程示意图。
具体实施方式
11.为了更清楚地展示本发明的目的和技术方案,下面将结合附图更加详细地说明本发明的具体实施方式。
12.一种回归测试中测试用例优先级的排序方法,如图1所示,总体上包括以下三大步骤:步骤1,根据测试用例的文本主题相似性和语句覆盖率相似性进行测试用例聚类;该步骤使用文本主题相似性和代码覆盖率相似性分别衡量测试用例的相似性,并使用权值结合两个相似性,再使用层次聚类方法对测试用例进行聚类,将相似的测试用例归为一类,得到聚类结果。
13.所述步骤1,根据测试用例的文本主题相似性和语句覆盖率相似性进行测试用例聚类,如图1所示,包含以下步骤:步骤1.1,将测试用例文本进行预处理,对预处理后的文本进行主题建模,计算测试用例的文本主题相似性;所述测试用例文本预处理是指,提取测试用例文本的语言数据,获取测试用例中的业务关注点;所述主题建模是指,使用主题向量表示每个测试用例与不同语义主题的相关性,近似测试用例的功能;所述测试用例的文本主题相似性是指,通过计算测试用例的文本主题向量之间的距离来度量测试用例间的文本主题相似性,距离越小,代表测试用例越相似。
14.步骤1.2,统计测试用例的语句覆盖情况,计算测试用例的语句覆盖相似性;所述测试用例的语句覆盖情况是指,使用测试用例执行被测程序时,将会执行被测程序源代码中的哪些语句。两个测试用例的语句覆盖范围重合越多,代表它们越相似;所述测试用例的语句覆盖相似性是指,使用杰卡德距离计算两个测试用例间基于语句覆盖的相似性,杰卡德距离越小,代表测试用例越相似。
15.步骤1.3,根据实验确定两种相似性的加权系数,并计算加权相似性总和;如给文本主题相似性st分配权值0.7,给语句覆盖相似性sc分配权值0.3,则加权相似性总和为st*0.7 sc*0.3。两个加权系数的确定,通过在实际项目数据上进行实验后得出。
16.步骤1.4,根据加权相似性总和对测试用例进行层次聚类,得到聚类结果;如将层次聚类的阈值设定为n,就将测试用例按相似性划分为了n个不同类,作为聚类结果。
17.步骤2,对测试用例进行多目标排序,并根据聚类结果调整排序序列;该步骤结合代码覆盖率最大化、历史执行失败率最大化和执行时间最小化三个目标,使用多目标遗传算法对测试用例进行多目标排序,然后根据步骤1得到的聚类结果调整排序序列,使得序列中靠前的测试用例均分属不同类。该步骤结束后初步得到序列结果。
18.所述步骤2,对测试用例进行多目标排序,并根据聚类结果调整排序序列,如图1所示,包括以下步骤:步骤2.1,以代码覆盖率最大化、历史执行失败率最大化和执行时间最大化为排序目标,使用多目标遗传算法对测试用例进行多目标排序,得到排序序列;所述测试用例多目标排序是指,在多个排序目标中寻找折中的排序方案,以提高测试用例的缺陷检测速率;分别使用函数表达式计算三个目标值,使用多目标遗传算法,得到根据目标值优化后的测试用例排序序列。
19.步骤2.2,根据步骤1得到的聚类结果,调整步骤2.1所得排序序列,使得排在前面的测试用例属不同聚类类别;如聚类结果中有n个不同类别的测试用例,则应将排序序列调整为前n个测试用例分属不同类别,且该n个测试用例分别在其所属类中排第一位。
20.步骤3,根据测试用例的历史执行结果挖掘关联规则,动态调整排序序列;该步骤先使用关联规则挖掘技术从测试用例的历史执行信息中挖掘它们之间同
时失败的关联关系,再根据此关系调整上一步骤得到的测试用例排序结果,提升测试用例揭错速率。
21.所述步骤3,根据测试用例的历史执行结果挖掘关联规则,动态调整排序序列,如图1所示,包括以下步骤:步骤3.1,根据测试用例历史执行信息,挖掘测试用例间的执行失败的关联规则;所述执行失败的关联规则是指,每当某个测试用例失败时,总有其余某些测试用例也失败。如执行失败的关联规则x
→
y,意为当一个测试用例x执行失败时,另一个测试用例y也经常同时失败。
22.步骤3.2,若得到的某个关联规则,其前件和后件揭示相同缺陷,则丢弃该关联规则;如得到关联规则x
→
y,前件x和后件y揭示的缺陷相同,则丢弃。
23.步骤3.3,执行步骤2得到的排序序列,过程中若某一测试用例执行失败,则查找以该测试用例为前件的关联规则,将其后件测试用例调整为立即执行;如某一测试用例x执行失败,则查找以x为前件的关联规则x
→
y,将其后件测试用例y调整为立即执行;最终得到的测试用例执行序列就是优先级排序序列。
转载请注明原文地址:https://doc.8miu.com/read-1750012.html