CN104536879A - 一种基于模糊聚类的多错误定位方法 - Google Patents
一种基于模糊聚类的多错误定位方法 Download PDFInfo
- Publication number
- CN104536879A CN104536879A CN201410710127.2A CN201410710127A CN104536879A CN 104536879 A CN104536879 A CN 104536879A CN 201410710127 A CN201410710127 A CN 201410710127A CN 104536879 A CN104536879 A CN 104536879A
- Authority
- CN
- China
- Prior art keywords
- function
- mistake
- test case
- program
- perform
- 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.)
- Pending
Links
Landscapes
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
一种基于模糊聚类的多错误定位方法,程序当中存在至少一个错误,使用模糊聚类技术对程序特征信息进行聚类,然后结合缺陷定位技术,依据聚类结果对程序错误进行定位。本发明开创性地提出了在多错误环境下的错误分离技术,同时通过该技术在传统的错误定位技术上改进,提升了错误定位技术的实用性和定位精度。通过实验证明,本发明能够较好的提升多错误环境下的错误定位精度。
Description
技术领域
本发明属于计算机技术领域,涉及软件测试技术中的错误定位,尤其是一次性对多个错误进行定位,为一种基于模糊聚类的多错误定位方法。
背景技术
在软件的测试过程中为了找出软件中的错误,有时候开发者要人工审查大量的测试用例,判断其是否执行失败。然后通过审查执行失败的测试用例帮助找到软件中出错根源,这个过程叫做错误定位。事实上,错误定位的过程是软件测试当中最消耗时间的环节之一。
在过去的十年当中,很多技术被引入到错误定位领域,针对错误定位方法的研究取得了巨大的进展,其中最为广泛使用并且效果最好的方法是聚类分析程序执行剖面。
聚类分析是一种大量的对象发现集群的多元分析方法,如一组执行剖面。每个执行剖面的特征被一个属性值向量所标记。聚类分析的目的是划分具有很高的相似性的对象在同一集群的集群,而差异性大的对象被放置在不同的集群。
不足的是,许多错误定位技术都是基于一个不可靠的假设:程序中只有一个错误。在实际情况中,多个错误导致一个测试用例的失败的例子经常发生,这意味着一个测试用例可以定位多个错误。现有技术提到的应用在错误定位上的聚类技术都是“硬聚类”,每个元素只属于一个类簇,不仅无法对多个错误进行准确定位,而且会给错误定位结果带来误差,使得结果不准确或者遗漏错误。事实上,在多个错误存在时,“硬类聚”是不可行的。软件测试人员无法分析这种情况。传统的单错误定位方法有很大的局限性,软件测试当中非常需要一种针对多错误程序来进行错误定位的新方法。
发明内容
本发明要解决的问题是:在程序有多个错误的时候,传统意义上的错误定位技术失效,定位结果不准确。然而,在实际应用当中,经常遇到多个错误包含在一个程序当中的情况,这样的情况无法用传统的错误定位技术来定位错误。本发明要解决的就是在多错误的情况下如何进行准确的错误定位。
本发明的技术方案为:一种基于模糊聚类的多错误定位方法,程序当中存在至少一个错误,使用模糊聚类技术对程序特征信息进行聚类,然后结合缺陷定位技术,依据聚类结果对程序错误进行定位,包括以下步骤:
1)对程序运行所有测试用例,收集执行剖面,执行剖面中的每一个属性都代表程序当中的一个函数,将执行剖面用向量来表示,向量中的数值代表属性对应的函数是否被调用;
2)模糊聚类,采用FCM聚类方法,输入为由执行剖面得到的向量集合X、设定的类簇数量c和距离函数,距离函数采用欧式距离;聚类算法最终返回一个关系矩阵,所述关系矩阵的行表示某个执行剖面分别属于c个类簇的可能性,如果可能性大于设定的阈值,就认为执行剖面属于这个类簇,一个执行剖面可以属于多个类簇;
3)错误定位,使用Spectrum-Based错误定位技术来测试各个类簇,根据和测试用例相关的函数的四个覆盖参数来进行计算,四个覆盖参数分别是
anp:没有执行这个函数并且通过的测试用例个数;
anf:没有执行这个函数并且失效的测试用例个数;
aep:执行这个函数并且通过的测试用例个数;
aef:执行这个函数并且失效的测试用例个数;
四个参数之和等于测试用例集的大小,根据采用的排序指标为每一个函数计算权重,所述权重代表了函数出错可能性的大小,按照函数出错可能性从大到小排列,获取风险排列表,找出最有可能出错的位置。
在软件错误定位领域的研究中,研究人员都假设程序只有一个错误,在此前提下进行错误定位。这样的假设有助于定位方法的简化,容易得出结果。然而,实际情况是,在工业界中,当程序包含多个错误的时候,错误之间会对彼此产生影响,使用传统的单错误定位方法来定位包含多个错误的程序,会产生遗漏,造成错误定位的结果不准确,使得软件测试效率低下。可见基于程序只有一个错误这个不符合实际的假设的方法并没有给程序测试人员带来实际的帮助。本发明在现有技术基础上打破了现有错误定位方法的单错误假设,采用FCM模糊聚类方法,没有把一个执行剖面归于某个特定的类簇,而是认为一个执行剖面与很多类簇都有关系,在实现中用概率来表示这个关系的大小。多个类簇表征了程序中的多个错误,这些错误互相影响,使得一个执行剖面可能属于多个类簇,因此,本发明方法针对多错误互相影响的问题,设计了用于多错误定位的方法,而不会产生现有技术的一个执行剖面只与一个错误相关的缺陷。软件测试人员可以借助本发明方法同时有效的自动定位多个错误。本发明方法更适用于当前软件测试的实际情况,具有良好的实用性和定位精度。
附图说明
图1为本发明的方法框架示意图。
图2为本发明基于模糊聚类的多错误定位技术和现有技术的基于硬聚类的错误定位技术实验效果对比图。
具体实施方式
本发明使用的主要技术有:fuzzy c-means(FCM)聚类算法,错误定位(faultlocalization)技术和对于聚类结果的评估技术(Evaluation Metric)。下面介绍方法的流程并具体说明本发明所使用的各项技术的实施方式。
首先,收集频谱信息。本发明使用的错误定位技术主要是基于频谱的错误定位技术。在使用此技术之前,首先需要收集程序执行频谱。将测试用例集输入到程序中,对程序运行所有测试用例,同时记录程序执行过程中的函数调用情况以及执行结果,收集得到执行剖面,执行剖面中的每一个属性都代表程序当中的一个函数,将执行剖面用向量来表示,向量中的数值代表属性对应的函数是否被调用。在本发明实施例中,设在某一次程序执行过程中,某个函数调用则对应向量位取值为1,没有调用则取值为0。
然后使用模糊聚类技术对程序特征信息进行聚类,最后结合缺陷定位技术,依据聚类结果对程序错误进行定位。
1.FCM聚类算法
FCM聚类算法是一种使用最广泛的模糊聚类算法,由Bezdek于1981年提出。
算法流程如下:
1)FCM算法的输入:
A、类簇的数量c;
B、一个指定的模糊参数(fuzziness parameter)m,m>1,m的取值影响聚类的精确度,但怎样取得最优值不在本发明讨论范围之内,一般根据经验取一个合适的值即可;
C、一组要被聚类的向量集合,设集合的大小为n;
D、一个计算两个向量之间距离的函数||.||。
这里的向量集合也就是由执行剖面得到的向量集合X,距离函数采用欧式距离。在设定类簇数量时需注意,太多的聚类会导致很相似的执行剖面被分到不同的类簇,太少的聚类会导致类簇内部的执行剖面差异较大,难以分辨。实施时可调试确定类簇数量。
2)初始化,随机选择c个向量作为簇中心,组成类簇中心向量集合v。
3)使用如下公式来计算一个n*c的关系矩阵u:
这里k=1,2,…n,,i=1,2,…,c。xk为向量集合X的元素,vi、vj为类簇中心向量集合v的元素,uki为关系矩阵元素。特别地,如果||xk-vi||=0,uki=1;如果存在某个不等于i的j使得||xk-vj||=0,uki=0。
4)使用上一步得到的关系矩阵u和如下公式计算一个新的大小为c的类簇中心向量集合,称之为v’:
这里的m就是在第一步中指定的那个模糊参数,k,c如上所述。
5)指定一个很小的数字ε,接近0,也就是数学上的非常小,例如0.01,0.001等,然后计算:
D=max1≤i≤c(||vi'-vi||/||vi||)
||vi'-vi||指两个向量之间的距离,||vi||指向量vi的模(即长度)。
如果D值大于ε,那就让v=v’,然后跳回到步骤3),重新计算新的关系矩阵u、新的向量集合v’和新的D值,类簇中心向量集合是一个不断更新,不断向最终结果逼近的过程,直到D值满足小于或者等于ε的条件才跳出循环,执行步骤6)的操作。
6)FCM算法的输出:代表类簇中心的大小为c的向量集合v’,以及一个关系矩阵u,关系矩阵u的每一行表示某个执行剖面分别属于这c个类簇的可能性。判定一个执行剖面属于哪一个类簇的方法是可以自己决定,例如,设定一个阈值,如果可能性大于设定的阈值,就认为执行剖面属于这个类簇,也可以设对于一个执行剖面对应的向量xk,在关系矩阵中,xk所在行的任意的不等于i列的j列都有uki>ukj,则认为xk是属于类簇i的,一个执行剖面可以属于多个类簇。得到的类簇对执行剖面进行了分类,每一类都具有相近似的性质,对于程序存在的错误而言,类簇即对应了程序错误,一个执行剖面可以属于多个类簇。
2.错误定位技术(Fault localization)
在本发明中,在收集频谱信息时我们收集了每一个测试用例执行了哪些函数以及这些测试用例是通过还是失败的信息。利用这些信息,使用Tarantula或Naish2等此类基于程序谱的(Spectrum-Based)错误定位技术来测试类簇,这类技术都是根据对于和一个测试用例相关的函数的四个覆盖参数来进行计算,计算每一个函数的4个属性:
1)aep:执行了这个函数且通过了的测试用例个数;
2)aef:执行了这个函数但是结果为失败的测试用例个数;
3)anp:没有执行这个函数结果为通过的测试用例个数;
4)anf:没有执行这个函数结果为失败的测试用例个数;
显然四个参数的之和应当等于测试用例集的大小,得到了上面四个属性之后,我们可以使用多种排序指标(ranking metric)为每一个函数计算一个权重,所述权重代表了函数出错可能性的大小,在同一个类簇中,按照函数出错可能性从大到小排列,获取风险排列表,找出程序最有可能出错的函数位置。
本发明实施例中,我们采用了三种计算权重的方法,这三种方法均为现有技术:
1)Tarantula:
2)Naish2:
Naish2方法的介绍可以参见Naish,L.,Lee,H.J.,and Ramamohanarao,K.(2011).A model forspectra-based software diagnosis.ACM Transactions on Software Engineering and Methodology
3)Russel&Rao:
Russel&Rao方法的介绍可以参见XIE,XIAOYUAN,et al.“A Theoretical Analysis of the RiskEvaluation Formulas for Spectrum-Based Fault Localization.”ACM Transactions on SoftwareEngineering and Methodology(TOSEM)
其中,at ep:执行了函数ft且通过了的测试用例个数;
at ef:执行了函数ft但是结果为失败的测试用例个数;
at np:没有执行函数ft结果为通过的测试用例个数;
at nf:没有执行函数ft结果为失败的测试用例个数;
t为函数的标号,表示第t个函数。
3.聚类结果的评估技术(Evaluation Metric)
评估测量聚类分析可以帮助提高在错误定位时的表现,因为我们要评估FCM和k-means方法(现有主流的硬聚类方法)在聚类结果上的优劣,我们引入了两个指标。一个是聚类纯度(clustering purity),另一个是特定错误定位技术的性能表现。
1)聚类纯度:
当我们沿着函数风险顺序列表进行错误定位的时候,发现的第一个错误叫做first bug(第一个错误)。聚类纯度也就是指执行了包含first bug的函数的测试用例占该簇下总测试用例的比率。聚类中的元素属性会偏离聚类平均值过远,这样的元素在聚类中可能会导致聚类不纯。纯度是对聚类准确度的衡量。聚类纯度越高,说明聚类越成功。
聚类纯度clustering purity是这样计算的:
标号说明:
N1i:类簇i中发现第一个bug所经过的测试用例数目。
Ni:类簇i中的总测试用例数目。
c:类簇数量。
聚类纯度的最大值是1。越接近1,表明纯度越高。
2)当得到了函数风险序列之后,我们要依次检查这些函数直到找到包含了错误的那个函数为止。用S(i)来表示簇i为了定位错误要检查的函数占总函数个数的比率,计算c个簇的一个平均值avg:
这个平均值也称为EXAM分数。EXAM分数越小,说明错误定位的性能越好,聚类的方法也就越好。
下面再通过具体的实例来说明本发明的实施:
1)注入错误。因为本发明旨在改进多错误定位方法,因而,在本实施例中,我们向一个开源项目flex的主程序中分别注入3、5和7个错误。
2)判别失败的测试用例。在正确版本的程序和错误版本的程序上分别运行测试用例,观察它们的输出结果。如果它们的结果不相同,说明这个测试用例的结果为失败;如果它们的结果相同,说明这个测试用例的结果为通过。
3)创建每一个测试用例的执行剖面。使用gcov工具来记录每一个测试用例在执行过程中的函数覆盖信息。这些信息为我们创建每一个测试用例的执行剖面提供了帮助。在本实施例中,每一个执行剖面是一个0-1向量,向量中的每一个属性对应着程序中的每一个函数,如果属性的值为1则代表这个函数被执行,为0则代表没有被执行。
4)聚类分析。我们使用数据挖掘工具Weka以k-means方法对上一步得到的执行剖面进行聚类,然后通过本发明方法实现了以FCM算法对于执行剖面的聚类。两个执行剖面之间的距离计算方法使用的是欧几里得距离。在本发明方法中,聚类的数量分别为6、9和12。
5)定位错误。本发明使用Tarantula,Naish2和Russel&Rao作为定位错误的三种错误定位技术。然后,通过聚类结果的评估技术比较了本发明方法和k-means方法聚类的优劣。
图2展示了每一种聚类方法的聚类纯度。我们从图中可以看到,本发明方法在总体上有着更高的聚类纯度。我们摒弃了传统的k-means聚类算法,考虑实际情况中一个测试用例可能包含多个错误,而采取了FCM聚类算法进行错误定位,包含了多重错误的测试用例应该被分别独立处理。当使用k-means算法时,因为包含了相同错误的测试用例应当被分到相同的簇中,另一些簇可能就会因此少了一些可能检测到错误的测试用例,从而导致了较低的聚类纯度。相反,FCM可以根据相似性将一个测试用例归入不同的聚类中,所以聚类纯度就会高一些。
1)为了更加严格地去验证本发明的结果,我们对成对的FCM和k-means得到的聚类纯度执行t检验。结果如下表:
Program version | 3-bug | 5-bug | 7-bug |
p value | 3E-4 | 7E-6 | 1E-11 |
p值(p value)指显著性差异,是统计学上对数据差异性的评价。由于p值都低于标准值0.05,可以说本发明基于FCM的方法对于k-means方法在聚类纯度上面的改进是显著的。
2)两种方法在错误定位性能上的比较见下表:
表中的数据代表了在特定程序版本中用特定的错误定位技术和聚类方法得到的EXAM分数。从表中我们可以看出,在相同的程序版本中使用相同的错误定位技术,使用了FCM聚类方法的EXAM分数比使用k-means聚类方法的要低。这也就说明了使用模糊聚类方法可以带来错误定位性能的提升。
综上所述,本发明开创性地提出了在多错误环境下的错误分离技术,同时通过该技术在传统的错误定位技术上改进,提升了错误定位技术的实用性和定位精度。通过实验证明,本发明能够较好的提升多错误环境下的错误定位精度。
Claims (2)
1.一种基于模糊聚类的多错误定位方法,其特征是程序当中存在至少一个错误,使用模糊聚类技术对程序特征信息进行聚类,然后结合缺陷定位技术,依据聚类结果对程序错误进行定位,包括以下步骤:
1)对程序运行所有测试用例,收集执行剖面,执行剖面中的每一个属性都代表程序当中的一个函数,将执行剖面用向量来表示,向量中的数值代表属性对应的函数是否被调用;
2)模糊聚类,采用FCM聚类方法,输入为由执行剖面得到的向量集合X、设定的类簇数量c和距离函数,距离函数采用欧式距离;聚类算法最终返回一个关系矩阵,所述关系矩阵的行表示某个执行剖面分别属于c个类簇的可能性,如果可能性大于设定的阈值,就认为执行剖面属于这个类簇,一个执行剖面可以属于多个类簇;
3)错误定位,使用Spectrum-Based错误定位技术来测试各个类簇,根据和测试用例相关的函数的四个覆盖参数来进行计算,四个覆盖参数分别是
anp:没有执行这个函数并且通过的测试用例个数;
anf:没有执行这个函数并且失效的测试用例个数;
aep:执行这个函数并且通过的测试用例个数;
aef:执行这个函数并且失效的测试用例个数;
四个参数之和等于测试用例集的大小,根据采用的排序指标为每一个函数计算权重,所述权重代表了函数出错可能性的大小,按照函数出错可能性从大到小排列,获取风险排列表,找出最有可能出错的位置。
2.根据权利要求1所述的一种基于模糊聚类的多错误定位方法,其特征是步骤3)中采用以下三种方法之一来计算权重:
1)Tarantula:
2)Naish2:
3)Russel&Rao:
其中,执行了函数ft且通过了的测试用例个数;
执行了函数ft但是结果为失败的测试用例个数;
没有执行函数ft结果为通过的测试用例个数;
没有执行函数ft结果为失败的测试用例个数;
t为函数的标号,表示第t个函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410710127.2A CN104536879A (zh) | 2014-11-28 | 2014-11-28 | 一种基于模糊聚类的多错误定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410710127.2A CN104536879A (zh) | 2014-11-28 | 2014-11-28 | 一种基于模糊聚类的多错误定位方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104536879A true CN104536879A (zh) | 2015-04-22 |
Family
ID=52852409
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410710127.2A Pending CN104536879A (zh) | 2014-11-28 | 2014-11-28 | 一种基于模糊聚类的多错误定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104536879A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105117331A (zh) * | 2015-08-17 | 2015-12-02 | 浪潮(北京)电子信息产业有限公司 | 面向错误定位的巧合正确性测试用例识别方法及装置 |
CN107239798A (zh) * | 2017-05-24 | 2017-10-10 | 武汉大学 | 一种面向软件缺陷个数预测的特征选择方法 |
CN115037663A (zh) * | 2022-05-26 | 2022-09-09 | 深圳前海微众银行股份有限公司 | 一种应用系统更新测试方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102253889A (zh) * | 2011-08-07 | 2011-11-23 | 南京大学 | 一种回归测试中基于分布的测试用例优先级划分方法 |
CN102831055A (zh) * | 2012-07-05 | 2012-12-19 | 陈振宇 | 基于加权属性的测试用例选择方法 |
-
2014
- 2014-11-28 CN CN201410710127.2A patent/CN104536879A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102253889A (zh) * | 2011-08-07 | 2011-11-23 | 南京大学 | 一种回归测试中基于分布的测试用例优先级划分方法 |
CN102831055A (zh) * | 2012-07-05 | 2012-12-19 | 陈振宇 | 基于加权属性的测试用例选择方法 |
Non-Patent Citations (2)
Title |
---|
YANQIN HUANG等: "An Empirical Study on Clustering for Isolating Bugs in Fault Localization", 《SOFTWARE RELIABILITY ENGINEERING WORKSHOPS》 * |
姚艳玲: "基于执行路径聚类的程序错误定位方法研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105117331A (zh) * | 2015-08-17 | 2015-12-02 | 浪潮(北京)电子信息产业有限公司 | 面向错误定位的巧合正确性测试用例识别方法及装置 |
CN105117331B (zh) * | 2015-08-17 | 2018-04-13 | 浪潮(北京)电子信息产业有限公司 | 面向错误定位的巧合正确性测试用例识别方法及装置 |
CN107239798A (zh) * | 2017-05-24 | 2017-10-10 | 武汉大学 | 一种面向软件缺陷个数预测的特征选择方法 |
CN107239798B (zh) * | 2017-05-24 | 2020-06-09 | 武汉大学 | 一种面向软件缺陷个数预测的特征选择方法 |
CN115037663A (zh) * | 2022-05-26 | 2022-09-09 | 深圳前海微众银行股份有限公司 | 一种应用系统更新测试方法及装置 |
CN115037663B (zh) * | 2022-05-26 | 2023-07-18 | 深圳前海微众银行股份有限公司 | 一种应用系统更新测试方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102831055B (zh) | 基于加权属性的测试用例选择方法 | |
CN108777873A (zh) | 基于加权混合孤立森林的无线传感网络异常数据检测方法 | |
CN107122298A (zh) | 可视化软件开发过程质量的展示方法 | |
CN104756106A (zh) | 表征数据存储系统中的数据源 | |
CN104021248B (zh) | 一种航空机载机械类产品fmeca分析方法 | |
CN107622801A (zh) | 疾病概率的检测方法和装置 | |
CN105528288A (zh) | 一种软件测试方法以及装置 | |
CN111400505A (zh) | 一种用电信息采集系统匹配故障消缺方案的方法及系统 | |
CN108595336A (zh) | 一种基于以太网的计算机软件测试系统 | |
CN104536879A (zh) | 一种基于模糊聚类的多错误定位方法 | |
CN106228190A (zh) | 针对居民异常用水的决策树判别方法 | |
CN110515826A (zh) | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 | |
CN106557420B (zh) | 测试db数据生成方法及装置 | |
CN103424420A (zh) | 一种基于拟合的核磁共振信号处理方法 | |
CN108038211A (zh) | 一种基于上下文的无监督关系数据异常检测方法 | |
CN103914386B (zh) | 基于输入参数特征谱的软件缺陷定位方法 | |
CN104376078A (zh) | 一种基于知识熵的异常数据检测方法 | |
CN104536882A (zh) | 基于频繁子图挖掘的错误定位方法 | |
CN105411575B (zh) | 一种心电电极位置监控方法 | |
CN104111887A (zh) | 基于Logistic模型的软件故障预测系统及方法 | |
CN105843744A (zh) | 用于并行程序蜕变测试的蜕变关系优先级排序方法 | |
McFadden et al. | Aspect mining using model-based clustering | |
CN105286854B (zh) | 一种远程心电监控方法 | |
Déry et al. | Investigation of the effort data consistency in the ISBSG repository | |
CN103957114A (zh) | 一种基于变异系数的网络抗毁性评估方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150422 |