一种回归测试中基于分布的测试用例优先级划分方法

文档序号:6430200阅读:182来源:国知局
专利名称:一种回归测试中基于分布的测试用例优先级划分方法
技术领域
本发明属于软件测试技术领域,尤其是软件测试中回归测试技术领域,用于基于分布的测试用例优先级技术,一种回归测试中基于分布的测试用例优先级划分方法。
背景技术
对于工业程序,测试用例集通常包含数以千计甚至更多的测试用例。执行全部的测试用例代价昂贵,这种情况对于回归测试尤为明显随着程序的不断演化,测试用例数目不断增多;在有限的资源限制下,很难重新执行每个测试用例。测试用例优先级技术旨在解决上述问题。测试用例优先级技术根据一些准则重新排列测试用例被执行的顺序,优先级高的测试用例将被优先执行。本发明主要针对回归测试场景,关注于通用的回归测试情况,即测试用例优先级技术将应用于基础版本而不考虑其上发生的任何代码改变。测试用例优先级技术的目的是,如果一组测试用例按照特定的顺序执行,那么该组测试用例更容易满足某个目标。理想情况下,测试用例应该按照尽可能早地最大化错误检测能力来排序。但在错误信息未知之前,照此排序是不切实际的。因此,测试用例优先级技术使用代理,尽可能早的最大化代理的某种属性,希望能够尽早最大化错误检测能力。传统的测试用例优先级技术使用覆盖信息作为代理。它们关注于尽可能早地最大化某种程序元素的覆盖率,如语句、分支、数据流/控制流等的覆盖率,希望以此最大化错误检测能力;这种技术被称为基于覆盖的测试用例优先级技术。常见的基于覆盖的优先级技术包括贪心算法、遗传算法等等。近几年的学术研究指出,基于覆盖的测试用例优先级技术并不一定能够保证获得高的错误检测能力,更多的研究开始转向基于分布的测试用例优先级技术。基于分布的测试用例优先级技术,根据执行剖面的特征以及执行剖面在剖面空间中的分布,对测试用例进行重新排序。现有的研究集中在使用元素覆盖率作为执行剖面的特征,使用Euclidean Distance, Jaccard Distance等基于集合的距离度量公式作为相异性方程来计算执行剖面的距离。但是,使用元素覆盖率作为执行剖面的特征会忽略对顺序敏感错误的检测。一些错误仅当程序按照一定顺序执行时才能被检测出来,这种错误被称为顺序敏感的错误。比如,一些错误可能会存在于循环中,并且仅当循环执行多遍时才能检测出来。这样,一个仅执行一次循环的测试用例和执行多次循环的测试用例在错误检测能力上是不同的,尽管对于这个循环片段,它们具有相同的代码覆盖率。因此,顺序敏感错误仅仅依靠元素覆盖率是很难被检测到的。这说明,现有研究使用元素覆盖率作为执行剖面的特征并不一定能够保证获得高的错误检测能力和快速的错误检测速率。

发明内容
本发明要解决的问题是现有的基于分布的测试用例优先级技术使用元素覆盖率作为执行剖面的特征,并不一定能够保证获得高的错误检测速率,需要提高测试用例优先
4级技术的错误检测速率。本发明的技术方案为一种回归测试中基于分布的测试用例优先级划分方法,对于回归测试中的测试用例集,依据执行剖面在剖面空间中的分布对测试用例的执行顺序进行优先级排序,优先级高的测试用例将被优先执行。使得执行顺序临近的测试用例尽可能分散在剖面空间中,以尽早最大化错误检测能力,提高错误检测速率,该方法包括以下步骤1)获得测试用例集合T中每个测试用例的执行序列信息和覆盖率信息,使用执行序列信息作为测试用例执行剖面的特征,所述执行序列是一序列的字符串,记录了程序元素的执行顺序;2)利用测试用例的执行序列的编辑距离,来计算测试用例之间的相异性程度,两个执行序列的编辑距离为通过插入、删除和替换操作,将其中一个执行序列转换为另一个执行序列所需要的操作数;3)使用最远距离优先farthest-first算法对测试用例的执行顺序进行排序,使得排序后,执行顺序临近的测试用例能够分散在剖面空间中最远距离优先算法对测试用例的排序为后一个测试用例尽可能远离之前的测试用例,以保证执行顺序临近的测试用例尽可能的分散,其过程是首先选择第一个测试用例,该测试用例拥有最大的元素覆盖率,然后它迭代选择下一个测试用例,直到所有的测试用例都被选择,选择时,将所有未被排序的测试用例构造成一个候选集合,对其中的每个候选测试用例,分别计算其与已经挑选的测试用例集合中每一个测试用例之间的距离,也就是相异性程度,将其中最小的距离作为该候选测试用例与已被选择的测试用例集合之间的距离;最后,选择候选集合中距离已经被选择的测试用例集合最远的一个测试用例,由测试用例的选择顺序得到测试优先级排序,选择顺序越前,优先级越高;4)由步骤幻得到测试用例的测试优先级排序,按照排序后的顺序执行测试用例。或,步骤幻使用聚类cluster算法对测试用例的执行顺序进行排序,使得排序后, 执行顺序临近的测试用例能够分散在剖面空间中聚类cluster算法根据相异性程度将测试用例划分为不同的簇,然后在不同的簇间轮流挑选测试用例,挑选的先后顺序即为测试用例执行的顺序,其过程是首先使用聚类分析技术将测试用例划分为不同的簇,每个簇的排列顺序根据它们创建的顺序决定;然后, 依次从每个簇中挑选测试用例从第一个簇中挑选一个测试用例,然后转向第二个簇,挑选一个测试用例,依次类推,直到所有的测试用例都被挑选,一个簇中测试用例的挑选顺序根据它们的元素覆盖率来决定,覆盖率高的测试用例将优先被挑选,由测试用例的选择顺序得到测试优先级排序,选择顺序越前,优先级越高;所述聚类分析技术使用凝聚的层次化聚类算法一开始,每个簇中只包含一个测试用例,然后逐步合并距离最近的两个簇,合并的过程反复进行,直到簇的个数达到预先设置的临界值,所述临界值为测试用例总数的百分比,簇之间的两两距离采用平均距离,即首先计算两个簇之间每对测试用例之间的距离,然后累加求平均。预先设置的临界值为测试用例总数的5%、10%或15%。使用白盒测试工具CodeCover获取测试用例集中各测试用例的执行序列信息和覆盖率信息,白盒测试工具CodeCover包括注入阶段、执行阶段和报告阶段注入阶段在程序源代码上注入收集覆盖信息的辅助代码;注入完毕后,再在源代码上注入收集序列信息的辅助代码;两次注入完毕后,编译器产生可执行代码,随着测试用例的运行,注入后的可执行代码被执行,测试用例的执行序列信息和覆盖信息随之被记录到日志中,日志保存了测试用例程序元素被执行的次数以及程序元素的执行顺序,最后产生可阅读的报告。基于分布的测试用例优先级技术依赖于执行剖面的特征、所选用的相异性方程, 以及将测试用例重新排序的算法。执行剖面刻画了测试用例的执行历史,对错误检测十分有用。相异性方程决定了执行剖面在剖面空间中的分布,该方程将两个测试用例的执行剖面作为输入,产生一个实数值代表这两个测试用例的相异性程度。将测试用例重新排序的算法依据测试用例的执行剖面在剖面空间中的分布进行,使得重新排序后,执行顺序临近的测试用例能够分散在剖面空间中。这主要依据以下思想剖面空间中分布较近的测试用例通常具有相似的行为,以及相似的错误检测能力。例如,该组测试用例具备检测出同一错误引发的不同失效的能力;或者根本不具备检测出任何错误的能力。本发明的特点在于1、使用测试用例的执行序列信息作为执行剖面的特征;2、使用编辑距离作为相异性方程;3、依据执行序列信息,使用最远距离优先farthest-first算法或聚类cluster算法对测试用例的执行顺序进行排序。特点1和2较之现有的使用元素覆盖率的技术,考虑了程序元素的执行顺序,能够更有效的检测出顺序敏感的错误;同时, 本发明第一次将farthest-first算法引入到测试用例优先级技术中,并改进了聚类算法使之较之前提出的方法更加自动化。将这3点结合,通过实验表明,本发明可以提高错误检测的速率,使得程序员可以尽早找到更多的错误,节省了程序员寻找错误的时间成本。


图1为本发明的实施流程图。图2为工具CodeCover收集覆盖率信息和执行序列信息的主要过程。图3 (a)为本发明实施例中,statement粒度farthest-first算法的APFD值的统计结果。图3 (b)为本发明实施例中,statement粒度cluster算法的APFD值的统计结果。图4(a)为本发明实施例中,branch粒度farthest-first算法的APFD值的统计结果。图4(b)为本发明实施例中,branch粒度cluster算法的APFD值的统计结果。图5(a)为本发明实施例中,loop粒度farthest-first算法的APFD值的统计结^ ο图5(b)为本发明实施例中,loop粒度cluster算法的APFD值的统计结果。
具体实施例方式如图1,本发明对于回归测试中的测试用例集,对测试用例的执行顺序进行优先级排序,优先级高的测试用例将被优先执行,使得执行顺序临近的测试用例尽可能分散在剖面空间中,以尽早最大化错误检测能力,提高错误检测速率,步骤如下1)获得测试用例集合T中每个测试用例的执行序列信息和覆盖率信息,使用执行序列信息作为测试用例执行剖面的特征,所述执行序列是一序列的字符串,记录了程序元
6素的执行顺序;使用白盒测试工具CodeCover获取测试用例集中各测试用例的执行序列信息和覆盖率信息,白盒测试工具CodeCover包括注入阶段、执行阶段和报告阶段注入阶段在程序源代码上注入收集覆盖信息的辅助代码;注入完毕后,再在源代码上注入收集序列信息的辅助代码;两次注入完毕后,编译器产生可执行代码,随着测试用例的运行,注入后的可执行代码被执行,测试用例的执行序列信息和覆盖信息随之被记录到日志中,日志保存了测试用例程序元素被执行的次数以及程序元素的执行顺序,最后产生可阅读的报告;2)利用测试用例的执行序列的编辑距离,来计算测试用例之间的相异性程度。两个执行序列的编辑距离为通过插入、删除和替换操作,将其中一个执行序列转换为另一个执行序列所需要的操作数;3)使用最远距离优先farthest-first算法或聚类cluster算法对测试用例的执行顺序进行排序,使得排序后,执行顺序临近的测试用例能够分散在剖面空间中;4)由步骤幻得到测试用例的测试优先级排序,按照排序后的顺序执行测试用例。本发明中涉及的两个主要算法分别是最远距离优先farthest-first算法和聚类 cluster算法,下面具体说明其实施方式。1、最远距离优先farthest-first算法这个算法的主要流程如下所示Prioritization 过程输入=TIt1, t2,. . . }原始测试用例集合输出P{Pl,p2,. . . }排序后测试用例集合过程1、设置P为空集2、挑选第一个测试用例tfirst3、将tfirst加入集合P中4、调用selectNextkstCase过程直到所有测试用例均被选择5、返回集合PselectNextTestCase 过程过程1、构造候选测试用例集Clc1, C2, ... }2、构造距离集合 D W1,d2,· · · }3、对于C中的每个测试用例Ci设置Cli = (Ci和P之间的距离)4、选择D中最大的距离Cli5、将Cli对应的候选测试用例Ci加入集合P中Prioritization过程首先选择第一个测试用例,该测试用例拥有最大的元素覆盖率。然后,它重复调用selectNextTestCase过程来选择下一个未被排序的测试用例,直到所有的测试用例都被选中。selectNextTestCase过程将所有未排序的测试用例构造成一个候选集合,每一次挑选一个距离已经选择的测试用例集合最远的测试用例。为了决定哪个候选测试用例被挑选,该过程考虑两种类型的距离第一种是测试用例两两之间的距离, 第二种是候选测试用例和已经挑选的测试用例集合之间的距离。对于第一种距离,本发明使用编辑距离,根据两个测试用例的执行序列来计算;对于第二种距离,首先计算候选测试用例与已经挑选的测试用例集合中每一个测试用例之间的距离,然后挑选最小的距离代表该候选测试用例与已挑选的测试用例集合之间的距离。最后selectNextTestCase过程选择与已挑选的测试用例集合之间距离最远的测试用例作为下一个测试用例,由测试用例的选择顺序得到测试优先级排序,选择顺序越前,优先级越高。本发明实施例中使用语句 (statement)、分支(branch)、循环(loop)三种粒度信息作为执行剖面的粒度。2、聚类 cluster 算法Cluster算法的基本思想是用聚类分析技术将测试用例划分为不同的簇,这样执行顺序临近的测试用例分属于不同的簇,可以尽可能分散在剖面空间中。相异性方程被用来计算对象之间的距离,以指导聚类过程。测试用例优先级技术排序测试用例的执行顺序, 但不会从原始测试用例集中丢弃任何测试用例。基于此,cluster算法需要两种类型的优先级排序簇间优先级排序和簇内优先级排序。簇间优先级针对不同的簇进行排序,而簇内优先级针对一个簇中的各个测试用例进行排序。Cluster算法的主要过程如下最初,使用聚类分析技术将测试用例划分为不同的簇。每个簇的排列顺序将根据它们创建的顺序决定。然后,依次从每个簇中挑选测试用例。为公平起见,从第一个簇中挑选第一个测试用例,然后转向第二个簇,挑选第一个测试用例,依次类推,直到所有的测试用例都被挑选。一个簇中测试用例的挑选顺序将根据它们的元素覆盖率来决定,覆盖率高的测试用例将优先被挑选,由测试用例的选择顺序得到测试优先级排序,选择顺序越前,优先级越高。本发明实施例中使用语句(statement)、分支 (branch)、循环(loop)三种粒度信息作为执行剖面的粒度,并相应选择语句覆盖率、分支覆盖率、循环覆盖率作为簇内测试用例挑选的依据。Cluster算法中聚类分析技术选用凝聚的层次化聚类算法一开始,每个簇中只包含一个测试用例,然后逐步合并距离最近的两个簇,合并的过程反复进行,直到簇的个数达到临界值。本发明实施例依次选择测试用例总数的5<%、10%、15%作为临界值。簇之间的两两距离采用平均距离,即计算两个簇之间每对测试用例之间的距离,然后累加求平均。 每对测试用例之间的距离根据执行序列,使用编辑距离计算。下面通过具体的实施例来说明本发明的实施。本发明选择了 Checkstyle程序作为实验程序。这个程序为开源程序,并且提供了测试用例集。表1列出了这个程序的详细信息。表1实验程序详细信息
权利要求
1.一种回归测试中基于分布的测试用例优先级划分方法,其特征是对于回归测试中的测试用例集,依据执行剖面在剖面空间中的分布对测试用例的执行顺序进行优先级排序, 优先级高的测试用例将被优先执行,使得执行顺序临近的测试用例尽可能分散在剖面空间中,以尽早最大化错误检测能力,提高错误检测速率,该方法包括以下步骤1)获得测试用例集合T中每个测试用例的执行序列信息和覆盖率信息,使用执行序列信息作为测试用例执行剖面的特征,所述执行序列是一序列的字符串,记录了程序元素的执行顺序;2)利用测试用例的执行序列的编辑距离,来计算测试用例之间的相异性程度,两个执行序列的编辑距离为通过插入、删除和替换操作,将其中一个执行序列转换为另一个执行序列所需要的操作数;3)使用最远距离优先farthest-first算法对测试用例的执行顺序进行排序,使得排序后,执行顺序临近的测试用例能够分散在剖面空间中最远距离优先算法对测试用例的排序为后一个测试用例尽可能远离之前的测试用例,以保证执行顺序临近的测试用例尽可能的分散,其过程是首先选择第一个测试用例, 该测试用例拥有最大的元素覆盖率,然后它迭代选择下一个测试用例,直到所有的测试用例都被选择,选择时,将所有未被排序的测试用例构造成一个候选集合,对其中的每个候选测试用例,分别计算其与已经挑选的测试用例集合中每一个测试用例之间的距离,也就是相异性程度,将其中最小的距离作为该候选测试用例与已被选择的测试用例集合之间的距离;最后,选择候选集合中距离已经被选择的测试用例集合最远的一个测试用例,由测试用例的选择顺序得到测试优先级排序,选择顺序越前,优先级越高;4)由步骤幻得到测试用例的测试优先级排序,按照排序后的顺序执行测试用例。
2.根据权利要求1所述的一种回归测试中基于分布的测试用例优先级划分方法,其特征是步骤幻使用聚类cluster算法对测试用例的执行顺序进行排序,使得排序后,执行顺序临近的测试用例能够分散在剖面空间中聚类cluster算法根据相异性程度将测试用例划分为不同的簇,然后在不同的簇间轮流挑选测试用例,挑选的先后顺序即为测试用例执行的顺序,其过程是首先使用聚类分析技术将测试用例划分为不同的簇,每个簇的排列顺序根据它们创建的顺序决定;然后,依次从每个簇中挑选测试用例从第一个簇中挑选一个测试用例,然后转向第二个簇,挑选一个测试用例,依次类推,直到所有的测试用例都被挑选,一个簇中测试用例的挑选顺序根据它们的元素覆盖率来决定,覆盖率高的测试用例将优先被挑选,由测试用例的选择顺序得到测试优先级排序,选择顺序越前,优先级越高;所述聚类分析技术使用凝聚的层次化聚类算法一开始,每个簇中只包含一个测试用例,然后逐步合并距离最近的两个簇,合并的过程反复进行,直到簇的个数达到预先设置的临界值,所述临界值为测试用例总数的百分比,簇之间的两两距离采用平均距离,即首先计算两个簇之间每对测试用例之间的距离,然后累加求平均。
3.根据权利要求2所述的一种回归测试中基于分布的测试用例优先级划分方法,其特征是预先设置的临界值为测试用例总数的5%、10%或15%。
4.根据权利要求1或2所述的一种回归测试中基于分布的测试用例优先级划分方法, 其特征是使用白盒测试工具CodeCover获取测试用例集中各测试用例的执行序列信息和覆盖率信息,白盒测试工具CodeCover包括注入阶段、执行阶段和报告阶段注入阶段在程序源代码上注入收集覆盖信息的辅助代码;注入完毕后,再在源代码上注入收集序列信息的辅助代码;两次注入完毕后,编译器产生可执行代码,随着测试用例的运行,注入后的可执行代码被执行,测试用例的执行序列信息和覆盖信息随之被记录到日志中,日志保存了测试用例程序元素被执行的次数以及程序元素的执行顺序,最后产生可阅读的报告。
全文摘要
一种回归测试中基于分布的测试用例优化方法,对于回归测试中的测试用例集,依据执行剖面在剖面空间中的分布对测试用例的执行顺序进行优先级排序,优先级高的测试用例将被优先执行,使得执行顺序临近的测试用例尽可能分散在剖面空间中,以尽早最大化错误检测能力,提高错误检测速率。本发明在不进行任何测试用例约简的前提下,对测试用例的执行顺序进行排序,即测试用例的创建顺序并不作为其执行顺序,而是使用基于分布的测试用例优先级技术对执行顺序进行排序。这样一方面使得测试用例集合的错误检测能力不受影响,另一方面提高了错误检测的速率,使得程序员可以尽早地找到更多的错误,节省了程序员寻找错误的时间成本。
文档编号G06F11/36GK102253889SQ20111022531
公开日2011年11月23日 申请日期2011年8月7日 优先权日2011年8月7日
发明者吴堃, 房春荣, 赵志宏, 陈振宇 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1