一种软件多故障定位集成方法技术

技术编号:37042308 阅读:14 留言:0更新日期:2023-03-29 19:21
本发明专利技术公开了一种软件多故障定位集成方法,包括:根据测试用例执行被调试的程序,收集相关语句覆盖率完成数据收集:采用程序语句覆盖率作为失败测试用例的特征表示,通过使用失败测试用例集合和成功测试用例集合的故障定位方法生成可疑排序,然后动态切片得到压缩后的特征表示和可疑排序;获取不同的聚类成员后,得到聚类对象的相似矩阵,使用层次算法得到最终的聚类结果;对于最终聚类结果中的每个簇中,使失败测试用例与所有成功的测试组成集合,生成以故障为中心的怀疑度排序;并修复每个以故障为中心的可疑排序所定位的第一个错误,本发明专利技术的方法显著减少了软件失效用例的特征表示和聚类需要的计算时间。征表示和聚类需要的计算时间。征表示和聚类需要的计算时间。

【技术实现步骤摘要】
一种软件多故障定位集成方法


[0001]本专利技术涉及软件故障定位领域,尤其涉及用于软件多故障场景下的软件故障定位技术。

技术介绍

[0002]软件已经成为影响系统安全的重要因素,由于软件失效而引发的灾难性事故屡见不鲜。如何避免失效发生,提高软件的安全性和可靠性,软件投入使用前的测试与故障定位工作至关重要。由于软件规模的扩大,通过人力进行故障定位昂贵且耗时、费力。软件故障定位技术,旨在利用程序信息和测试信息大体确定故障所在位置,帮助测试人员更好的定位故障位置,缩小测试人员的搜索范围。
[0003]传统的基于程序谱的软件故障定位技术利用软件执行时的动态信息进行分析,例如测试用例的语句覆盖信息。然而这些基于程序谱的软件故障定位技术在多故障场景下效果并不理想。多故障定与单故障定位之间的主要区别在于测试人员在进行多故障定位时需要考虑失效(或失败测试用例)与相应故障之间的直接对应关系。当前的一种解决方法是通过将由同一种故障导致的失效测试用例聚合到同一个簇中,从而得到若干簇,每个簇都与某个故障相关。此外,Jones等人提出了并行调试,其需要将失效的测试用例集进行聚类,使其映射到不同的故障中。并行调试的有效性取决于聚类方法。Jones等人提出了软件行为模型聚类和故障定位聚类,以基于相似性对失败的测试用例进行分组。达拉斯大学学者Ruizhi Gao等人提出了一种基于K中心点算法的多故障定位方法Mseer。Mseer利用美国学者Yager和Filev专利技术的基于峰函数(Mountain method)的聚类算法对聚类数量进行估计并计算出最优的初始中心点位置,然后使用改进的K中心点算法对所有失败测试用例进行聚类。相类似,南京理工大学学者张泽林等人则利用Jaccard距离对每个失败测试用例执行的覆盖向量信息进行聚类分析。
[0004]对应数据集结构变化较大的情况,可以通过聚类集成的方式提高聚类结果的健壮性。目前存在多种针对软件失败测试用例的聚类策略,但由于失败测试用例执行信息的特征表示具有维度高、结构复杂、形状多变的特点,导致单一的聚类算法很难准确的识别出簇的结构,从而不能准确解耦。

技术实现思路

[0005]为解决现有技术中存在的上述问题,本专利技术提出了一种软件多故障定位集成方法,通过选取多种聚类算法以及不同的参数获取多个聚类成员,根据聚类成员得到相似度矩阵,再使用层次聚类获得最终聚类结果,实现不同聚类算法之间的集成,使算法能够识别复杂的簇结构,进而提升故障定位效率。
[0006]本专利技术完整的技术方案包括:
[0007]一种软件多故障定位集成方法,包括如下步骤:
[0008]步骤S1程序执行和数据收集:根据一组测试用例T执行被调试的程序P,采用失败
测试用例集合f
i
和成功测试用例的集合S,收集与每个测试用例相关的语句覆盖率;
[0009]步骤S2获取失败测试用例的特征表示:采用程序语句覆盖率作为失败测试用例的特征表示,通过使用失败测试用例集合和成功测试用例集合的故障定位方法生成所有测试用例的可疑排序,然后使用动态切片得到所有测试用例压缩后的特征表示ct
i
和可疑排序;
[0010]步骤S3获取聚类成员:针对所有测试用例获取不同的聚类成员,即通过多种方法生成的聚类结果;
[0011]步骤S4聚类集成:根据得到的聚类成员,得到聚类对象的相似矩阵,使用层次算法得到最终的聚类结果;
[0012]步骤S5生成以故障为中心的怀疑度排名:对于最终聚类结果中的每个簇中,使失败测试用例与S中所有成功的测试组成集合,生成以故障为中心的怀疑度排序;
[0013]步骤S6:修复每个以故障为中心的可疑排序所定位的第一个错误,返回步骤S1,针对T中的所有测试用例重新执行修改后的程序P。
[0014]进一步的,步骤S2中,测试用例特征压缩的方式为:首选利用基于程序谱的故障定位技术对程序执行信息进行计算,然后筛选出故障怀疑度较大的若干语句,。
[0015]进一步的,步骤S2中,测试用例特征压缩的方式为:通过动态切片的方式筛选与故障变量密切相关的程序语句,根据程序的报错信息,确定故障变量,构造程序语法树对故障变量进行回溯,从而将程序进行切片,使用程序切片代替原始程序谱。
[0016]进一步的,步骤S3中,获取聚类成员的方式包括:(1)使用不同的聚类算法(2)使用不同的方法表示测试用例,以及对测试用例特征的处理(3)设置不同的参数来获取集群成员。
[0017]进一步的,步骤S3中,依次选择三种方式获取不同的聚类结果划分,总的划分数量为上述三种方式获取的不同聚类结果之和。
[0018]本专利技术相对于现有技术的优点在于:
[0019]本专利技术通过软件故障动态切片,从与故障相关的变量开始,构造程序语法树,获得与变量密切相关的程序语句,因此大大减少了软件失效用例的特征表示。也大大减少了聚类需要的计算时间。
[0020]本专利技术所述多故障定位方法实现了不同聚类算法之间的集成,使算法能够识别复杂的簇结构,适应复杂的数据集结构,得到更加稳定的故障定位结果,从而提升故障定位效率。且采用单连接算法(sL)的聚类集成算法在预测数量以及故障数量的趋势都更接近真实。
附图说明
[0021]图1为在defects4j数据集上进行实验的结果;
[0022]图2为不同聚类算法对defects4j数据集故障数量预测;
[0023]图3为软件多故障聚类集成算法框架。
具体实施方式
[0024]以下结合实施例和附图对本专利技术进行详细描述,但需要理解的是,所述实施例和附图仅用于对本专利技术进行示例性的描述,而并不能对本专利技术的保护范围构成任何限制。所
有包含在本专利技术的专利技术宗旨范围内的合理的变换和组合均落入本专利技术的保护范围。
[0025]图3为本专利技术所述多故障定位集成方法实施例的流程图,如图所示,本专利技术的软件多故障定位集成方法包括如下步骤:
[0026]步骤1:程序执行和数据收集
[0027]软件故障定位数据集defects4j数据集由现实世界中真实的软件及其故障组成,因此其形成的测试用例执行信息的内部结构差异非常大,例如,cli项目远小于Jacksondatabind的执行信息。
[0028]根据一组测试用例T执行被调试的程序P,收集与每个测试用例相关的语句覆盖率。
[0029]本实施方式选择失败测试用例集合f
i
,和成功测试用例的集合S,测试用例总数为N如果没有失败的测试用例,那么将终止调试。在这一点上,我们只能得出结论,在测试用例T中执行测试用例不会发现任何错误,这并不能保证P不包含任何错误。
[0030]将测试结果记为e
i
,其中i=1,2,...,N,e
i
=0或1。1表示实际结果与测试结果不一致,测试用例失败。0表示实际结果与测试结果一致,测试用例成功。
[0031]语句覆盖率记为t
i本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种软件多故障定位集成方法,其特征在于,包括如下步骤:步骤S1程序执行和数据收集:根据一组测试用例T执行被调试的程序P,采用失败测试用例集合f
i
和成功测试用例的集合S,收集与每个测试用例相关的语句覆盖率;步骤S2获取失败测试用例的特征表示:采用程序语句覆盖率作为失败测试用例的特征表示,通过使用失败测试用例集合和成功测试用例集合的故障定位方法生成所有测试用例的可疑排序,然后使用动态切片得到所有测试用例压缩后的特征表示和可疑排序;步骤S3获取聚类成员:针对所有测试用例获取不同的聚类成员,即通过多种方法生成的聚类结果;步骤S4聚类集成:根据得到的聚类成员,得到聚类对象的相似矩阵,使用层次算法得到最终的聚类结果;步骤S5生成以故障为中心的怀疑度排名:对于最终聚类结果中的每个簇中,使失败测试用例与S中所有成功的测试组成集合,生成以故障为中心的怀疑度排序;步骤S6:修复每个以故障为中心的可疑排序所定位的第一个错误,返回步骤S1,针对T中的所有测试用例重新...

【专利技术属性】
技术研发人员:王世海杨勋利刘斌路云峰张明星
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1