基于距离度量和统计分析结合的软件故障定位系统及方法转让专利

申请号 : CN201310132421.5

文献号 : CN103268280B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 段振华平永侠田聪张南王小兵罗玲

申请人 : 西安电子科技大学

摘要 :

本发明公开了一种基于距离度量和统计分析结合的软件故障定位系统及方法,所述系统包括总体输入模块、基于距离度量的故障定位模块、基于统计分析的故障定位模块以及定位结果展示模块,通过所述系统对目标软件进行故障定位:采用基于距离度量的软件故障定位和基于统计分析的软件故障定位进行故障定位,并得出语句的可疑度和非可疑度,然后前面两种方法得到的可疑度值和非可疑度值按照权值综合起来,用图形化的方式向用户展示故障定位结果,以友好的方式帮助用户排查软件故障。本发明结合了现有软件故障定位方法的优点,通过定义统一的路径格式可以针对普遍性软件进行软件故障定位,定位的准确率很高,实用性很强。

权利要求 :

1.基于距离度量和统计计算结合的软件故障定位系统,包括目标软件,其特征在于,所述系统包括:总体输入模块,所述输入模块是用于向所述系统的总体输入,包括当前失效路径、测试路径集以及程序源代码;其中所述当前失效路径通过实时地记录所述目标软件的执行路径获得,所述测试路径通过实时记录所述目标软件的执行路径和执行结果获得,所述程序源代码用于获取所述目标软件的静态控制流信息,提高定位准确率;

基于距离度量的故障定位模块,所述模块用于计算所述目标软件语句的可疑度和非可疑度,其中包括利用所述目标软件的源代码绘制DD图,然后通过DD图中的控制流关系计算系统无约束边,再利用无约束边的替换策略为所述当前失效路径生成相似路径集,其次采用路径对比的方法,对比挑选的成功路径集和失效路径集中的路径,并找出两条路径的分支点,最后计算得出可疑度值和非可疑度值;

基于统计分析的故障定位模块,所述模块用于计算所述目标软件语句的可疑度,其中包括将所述总体输入中的当前失效路径和测试路径集混合构成历史路径集,然后利用统计的方法,计算出历史路径集中每一条语句在失效路径集中出现的频率,最后计算得出可疑度值;

定位结果展示模块,所述模块用于展示所述目标软件的故障定位结果图,其中包括了综合所述基于距离度量的故障定位模块所获得的可疑度值和非可疑度值,以及所述基于统计分析的故障定位模块所获得的可疑度值,并通过图形化的方式将故障定位结果、DD图以及生成的所述当前失效路径的相似路径集进行展示。

2.根据权利要求1所述的软件故障定位系统,其特征在于,所述当前失效路径和所述测试路径集对于任意语言编写的程序源代码都能唯一地记录其实际执行过程,所述测试路径集中的每一条测试路径包括路径和执行结果,其中所述路径是指当前本次运行的实际路径,其格式与所述当前失效路径的格式相同;所述执行结果是指当次执行是否成功,即当前运行的结果与预期结果是否一致。

3.根据权利要求1所述的软件故障定位系统,其特征在于,通过替换无约束边为当前失效路径生成相似路径集的过程以当前失效路径中的无约束边为基准,用户可以选择同时替换的无约束边的条数。

4.根据权利要求1所述的软件故障定位系统,其特征在于,所述定位结果展示可将可疑度值和非可疑度值用不同颜色条标识对应的代码。

5.一种根据权利要求1的软件故障定位方法,其特征在于,包括以下步骤:

(1)利用基于距离度量的故障定位模块计算目标软件语句的可疑度和非可疑度:a.根据所述总体输入模块中程序源代码为所述目标软件绘制系统的DD图;

b.根据所获得的DD图计算系统的无约束边,所述无约束边通过多次遍历并约减DD图所计算得出;

c.根据计算出的系统无约束边和系统的DD图为当前失效路径生成相似路径集;

d.在测试路径集中查找相似路径的执行结果组成相似测试路径集,若测试路径集中不存在相似路径,则通过替代策略选择其他的路径代替相似路径;

e.将所述相似测试路径集按执行结果分为成功路径集和失效路径集;

f.分别针对两种路径集中的每两条路径,即成功路径集和失效路径集中的两条路径、成功路径集中两条不同的路径以及失效路径集中两条不同的路径进行路径对比,找出两条路径出现不同时的分支语句;

g.根据公式计算语句的可疑度和非可疑度;

(2)利用基于统计分析的故障定位方法计算语句的可疑度:

a.提取所述目标软件每一条原始测试路径中的文件位置和行号等相关信息;

b.计算成功路径与失效路径的总数,以及一条语句在成功路径集和失效路径集中出现的频率;

c.计算语句的可疑度;

(3)结合所述(1)和(2)故障定位的结果:

a.将(1)中步骤a计算得到的系统的DD图用图形显示,同时支持边和结点的拖拽及缩放效果;

b.将(1)中步骤c计算的当前失效路径的相似路径集展示出来,其中包括整体替换后的结果以及中间替换的结果;

c.将(1)和(2)中计算的语句的可疑度和非可疑度根据权值综合起来,然后用不同颜色条覆盖在源代码上显示,且具有提示效果,显示实际的可疑度值或非可疑度值。

6.根据权利要求5所述的软件故障定位方法,其特征在于,所述绘制系统DD图时,先计算小模块的CFG,然后经过化简得到小模块的DD图,最后根据小模块之间的调用关系将小模块的DD图串联起来得到系统的DD图。

7.根据权利要求5所述的软件故障定位方法,其特征在于,所述为当前失效路径生成相似路径集时,首先对应当前失效路径和系统的DD图,找出当前失效路径中包含的无约束边,然后计算这些无约束边对应的替换边或者替换边集合,其次为当前失效路径的每一条无约束边进行单次的替换得到多条相似路径,最后根据用户设置的允许同时替换的无约束边的条数,用组合算法生成最终的相似路径集。

8.根据权利要求5所述的软件故障定位方法,其特征在于,当所述相似测试路径集按执行结果分为成功路径集和失效路径集时,分别对两种路径集去除冗余路径,消除重复路径,防止出现无效的对比。

说明书 :

基于距离度量和统计分析结合的软件故障定位系统及方法

技术领域

[0001] 本发明涉及软件安全保障领域,具体涉及一种实时地定位软件故障的系统,可用于对普遍性软件进行软件故障的定位。

背景技术

[0002] 软件作为计算机的中枢神经已经延伸到现代社会的各个角落,一方面软件是设计师塑造的功能强大的工具,另一方面软件中寄生着各个Bug,顷刻间又变成了破坏力强大的敌人,这就是软件的“双重效应”。因此当软件故障发生后,快速找到导致软件出现故障的原因并且准确地更正软件故障,是软件质量保障课题的重中之重。由于这一过程要求分析人员对软件非常了解,同时又有较为丰富的故障分析经验,因此研究自动化的软件故障定位技术对软件安全保障领域有很大的意义。
[0003] 自动化的软件故障定位的方法也是近年来人们研究的热点,研究方法大致可以分为四种:基于静态分析的软件故障定位方法、基于动态分析的软件故障定位方法、基于程序行为累积分析的软件故障定位方法和基于试验的软件故障定位方法。这四种故障定位方法分别从不同角度对软件进行分析来查找软件故障的位置,每一种方法分析的对象都不同,故障定位的能力和定位粒度也不同。其中:
[0004] 1.基于静态分析的软件故障定位方法主要采用静态分析的手段,从软件失效发生的位置对源代码进行回溯分析,从而寻找可能引发软件失效的相关语句。静态定位的代表方法是程序切片。该方法是根据控制流或者数据流关系只关注程序中有用的程序片段。该过程需要使用者自行构造切片规则,找出感兴趣的关键点。在程序切片中切片规则的制定相当重要,因为它会影响故障定位的准确度。使用该方法进行定位故障的粒度较为精细,可以达到语句级或者变量级,但是不可否认当切片规则选取不恰当或者切片规则较多时,利用程序切片进行软件故障定位需要付出的代价也比较大。
[0005] 2.基于动态分析的故障定位方法是一种基于程序的一次具体执行过程来观察程序行为的技术,主要包括日志分析技术和动态切片技术。其中日志分析技术是指在观察程序的具体执行时,通过在代码中添加日志记录语句,输出程序运行中发生事件的列表来帮助用户分析程序的执行过程。该方法属于较为原始的软件故障定位方法,分析的工作量大,添加的日志语句依赖于分析人员的经验;动态切片技术不同于静态的切片技术,它是基于一次具体的执行,研究对象为本次执行涉及到的代码片段,它经过控制流或者数据流关系动态地查找软件故障位置。同静态切片不同的是动态切片的针对性更强,具有实时性。但是动态切片仍属于程序切片的范畴,对切片规则的依赖仍然存在。
[0006] 3.基于动态分析的软件故障定位方法是基于一次具体的执行过程,针对性很强,但是本次的执行只记录了当前状态下的执行信息,而基于程序行为累积分析的软件故障定位方法则包含多次执行过程的执行信息,这些丰富的数据和信息可以更全面的表达软件的行为,为分析软件故障位置提供原材料。该方法主要可以分为两大类:基于测试的软件故障定位方法和基于程序不变式的软件故障定位方法。程序不变式描述的是某个程序点上的变量之间在程序执行过程中保持不变的关系,且这种关系总是成立。由于查找不变式的技术发展不是很成熟,因此利用该方法进行软件故障定位具有很大的局限性;基于测试的软件故障定位方法是利用程序多次执行记录下的路径信息来分析软件故障的可疑位置。本发明中涉及的基于距离度量的软件故障定位方法和基于统计分析的软件故障定位方法均属于基于测试的软件故障定位方法,其中前者主要采用路径对比的方法,定位结果是部分语句的可疑度和非可疑度,定位过程具有实时性,但是对分支语句的定位较为准确并且结果不具备完备性;后者采用统计分析的方法,定位结果是几乎全部语句的可疑度,具备结果的完备性,但是由于是简单的统计分析,因此定位过程不具备实时性,适合定位的语句是顺序语句,对分支语句定位效果不是很好。
[0007] 4.基于试验的软件故障定位方法根据程序多次的执行和试验来定位软件故障,代表方法是Delta调试。Delta调试通过自动多次运行程序,缩减成功执行和失效执行之间的差异,从而区分出引发失效的程序元素来完成故障定位。但是Delta调试的差异在缩减的过程中,无法考虑差异之间可能的关系,只是按照二分法切分差异,极容易产生无法判断的结果,另外该方法通过不停的询问以缩减可疑区域,整体来说代价较大。

发明内容

[0008] 本发明的目的在于克服现有技术的不足,设计并实现一个可行的针对普遍性软件的软件故障定位系统,以完成自动化的软件故障定位过程,从而帮助程序开发人员快速而准确的定位软件故障。
[0009] 为了实现上述目的,本发明采用的技术方案如下:通过结合基于距离度量的软件故障定位方法和基于统计分析的软件故障定位方法,并利用DD图(Decision-to-Decision Graph)为当前失效路径生成相似路径集来增加定位的实时性,另外在最后结合两种定位结果并用图形化的方式展示给用户,从而设计并实现出一个可行的针对普遍性软件的软件故障定位系统。该系统包括目标软件,其中还包括:
[0010] 总体输入模块,所述输入模块是用于向所述系统的总体输入,包括当前失效路径、测试路径集以及程序源代码。其中所述当前失效路径通过实时地记录所述目标软件的执行路径获得,所述测试路径通过实时记录所述目标软件的执行路径和执行结果获得,所述程序源代码用于获取所述目标软件的静态控制流信息,提高定位准确率。
[0011] 基于距离度量的故障定位模块,所述模块用于计算所述目标软件语句的可疑度和非可疑度,其中包括利用所述目标软件的源代码绘制DD图,然后通过DD图中的控制流关系计算系统无约束边,再利用无约束边的替换策略为所述当前失效路径生成相似路径集,其次采用路径对比的方法,对比挑选的成功路径集和失效路径集中的路径,并找出两条路径的分支点,最后计算得出可疑度值和非可疑度值。
[0012] 基于统计分析的故障定位模块,所述模块用于计算所述目标软件语句的可疑度,其中包括将所述总体输入中的当前失效路径和测试路径集混合构成历史路径集,然后利用统计的方法,计算出历史路径集中每一条语句在失效路径集中出现的频率,最后计算得出可疑度值。
[0013] 定位结果展示模块,所述模块用于展示所述目标软件的故障定位结果图,其中包括了综合所述基于距离度量的故障定位模块和所述基于统计分析的故障定位模块所述获得的可疑度值和非可疑度值,通过图形化的方式将故障定位结果、DD图以及生成的所述当前失效路径的相似路径集进行展示。
[0014] 需要说明的是,所述当前失效路径和所述测试路径集对于任意语言编写的软件源代码都能唯一地记录其是实际执行过程,所述测试路径集中的每一条测试路径包括路径和执行结果,其中所述路径是指当前本次运行的实际路径,其格式与所述当前失效路径的格式相同;所述执行结果是指当次执行是否成功,即当前运行的结果与预期结果是否一致。
[0015] 进一步地说,为了实现当前失效路径和测试路径集的定义,原则上需要描述用任意语言编写的程序源代码,并且可以唯一地记录软件的实际执行过程,因此对当前失效路径的记录定义如下格式:
[0016] project1.package1.file1[执行的实际语句的行号]-project2.package2.file2[执行的实际语句的行号]-…-projectn.packagen.filen[执行的实际语句的行号].
[0017] 其中projecti,packagei和filei(1≤i≤n)分别表示软件源代码的工程名,包(或文件夹)名和类(实际的文件)名;执行的实际语句的行号表示实际执行过程中语句的先后顺序,数字之间用逗号分隔,例如1,2,3,4,5,7,9等。另外当函数之间存在函数调用时,一个文件可能被分成两部分来表达软件的实际执行顺序。
[0018] 例如A文件的某函数中有对B文件中某函数的调用,那么记录可能为:myProject.package1.A[1,2,3,5,6]-myProject.package2.B[1,3,7,9,10]-myP roject.package1.A[7,8,9,11].
[0019] 进一步地说,执行结果是指当次执行是否成功,若二者一致代表执行成功,用1表示,否则用0表示;
[0020] 单条测试路径的格式如下:project1.package1.file1[执行的实际语句的行号]-project2.package2.file2[执行的实际语句的行号]-…-projectn.packagen.filen[执行的实际语句的行号]:0(或者1).
[0021] 需要说明的是,通过替换无约束边为当前失效路径生成相似路径集的过程以当前失效路径中的无约束边为基准,用户可以选择同时替换的无约束边的条数。
[0022] 作为一种优选的方案,所述定位结果展示可将可疑度和非可疑度值用不同颜色条标识对应的代码。
[0023] 利用上述系统实现目标软件故障定位的方法是:包括以下步骤:
[0024] (1)利用基于距离度量的故障定位模块计算目标软件语句的可疑度和非可疑度:
[0025] a.根据所述总体输入模块中程序源代码为所述目标软件绘制系统的DD图;
[0026] b.根据所获得的DD图计算系统的无约束边,所述无约束边通过多次遍历并约减DD图所计算得出;
[0027] c.根据计算出的系统无约束边和系统的DD图为当前失效路径生成相似路径集;
[0028] d.在测试路径集中查找相似路径的执行结果组成相似测试路径集,若测试路径集中不存在相似路径,则通过替代策略选择其他的路径代替相似路径;
[0029] e.将所述相似测试路径集按执行结果分为成功路径集和失效路径集;
[0030] f.分别针对两种路径集中的每两条路径,即成功路径集和失效路径集中的两条路径、成功路径集中两条不同的路径以及失效路径集中两条不同的路径进行路径对比,找出两条路径出现不同是的分支语句;
[0031] 需要说明的是,路径对比的过程首先通过去除冗余路径过程来剔除重复路径,然后分别一一对比失效路径-失效路径、失效路径-成功路径、成功路径-成功路径,找出两条路径的不相同的分支点并构造FF(Fail-Fail)表,FS(Fail-Success)表和SS(Success-Success)表。
[0032] g.根据公式计算语句的可疑度和非可疑度。
[0033] (2)利用基于统计分析的故障定位方法计算语句的可疑度:
[0034] a.提取所述目标软件每一条原始测试路径中的文件位置和行号等相关信息;
[0035] b.计算成功路径与失效路径的总数,以及一条语句在成功路径集和失效路径集中出现的频率;
[0036] c.计算语句的可疑度。
[0037] (3)结合所述(1)和(2)故障定位的结果:
[0038] a.将(1)中步骤a计算得到的系统的DD图用图形显示,同时支持边和结点的拖拽及缩放效果;
[0039] b.将(1)中步骤c计算的当前失效路径的相似路径集展示出来,其中包括整体替换后的结果以及中间替换的结果;
[0040] c.将(1)和(2)中计算的语句的可疑度和非可疑度根据权值综合起来,然后用不同颜色条覆盖在源代码上显示,且具有提示效果,显示实际的可疑度值或非可疑度值。
[0041] 需要说明的是,所述绘制系统DD图时,先计算小模块的CFG,然后经过化简得到小模块的DD图,最后根据小模块之间的调用关系将小模块的DD图串联起来得到系统的DD图。
[0042] 需要说明的是,所述为当前失效路径生成相似路径集时,首先对应当前失效路径和系统的DD图,找出当前失效路径中包含的无约束边,然后计算这些无约束边对应的替换边或替换边集合,其次为当前失效路径的每一条无约束边进行单次的替换得到多条相似路径,最后根据用户设置的允许同时替换的无约束边的条数,用组合算法生成最终的相似路径集。
[0043] 作为一种优选的方案,当所述相似测试路径集按执行结果分为成功路径集和失效路径集时,分别对两种路径集去除冗余路径,消除重复路径,防止出现无效的对比。
[0044] 本发明有益效果在于:两种软件故障定位的方法刚好弥补了彼此的缺陷,综合彼此的优点,同时路径格式的定义和细节性的优化使得该系统可以满足对当前普遍性的软件进行软件故障定位,并且优化操作也在一定程度上提高了本系统的故障定位准确率。

附图说明

[0045] 图1为本发明的流程示意图;

具体实施方式

[0046] 如图1,本发明的软件故障定位系统包括:
[0047] 总体输入模块,所述输入模块是用于向所述系统的总体输入,包括当前失效路径、测试路径集以及程序源代码。其中所述当前失效路径通过实时地记录所述目标软件的执行路径获得,所述测试路径通过实时记录所述目标软件的执行路径和执行结果获得,所述程序源代码用于获取所述目标软件的静态控制流信息,提高定位准确率。
[0048] 基于距离度量的故障定位模块,所述模块用于计算所述目标软件语句的可疑度和非可疑度,其中包括利用所述目标软件的源代码绘制DD图,然后通过DD图中的控制流关系计算系统无约束边,再利用无约束边的替换策略为所述当前失效路径生成相似路径集,其次采用路径对比的方法,对比挑选的成功路径集和失效路径集中的路径,并找出两条路径的分支点,最后计算得出可疑度值和非可疑度值。
[0049] 基于统计分析的故障定位模块,所述模块用于计算所述目标软件语句的可疑度,其中包括将所述总体输入中的当前失效路径和测试路径集混合构成历史路径集,然后利用统计的方法,计算出历史路径集中每一条语句在失效路径集中出现的频率,最后计算得出可疑度值。
[0050] 定位结果展示模块,所述模块用于展示所述目标软件的故障定位结果图,其中包括了综合所述基于距离度量的故障定位模块和所述基于统计分析的故障定位模块所述获得的可疑度值和非可疑度值,通过图形化的方式将故障定位结果、DD图以及生成的所述当前失效路径的相似路径集进行展示。所述定位结果展示可将可疑度值和非可疑度值用不同颜色条标识对应的代码。
[0051] 实现软件故障定位的方法包括以下步骤:
[0052] (1)利用基于距离度量的故障定位模块计算目标软件语句的可疑度和非可疑度:
[0053] a.根据所述总体输入模块中程序源代码为所述目标软件绘制系统的DD图;
[0054] b.根据所获得的DD图计算系统的无约束边,所述无约束边通过多次遍历并约减DD图所计算得出;
[0055] c.根据计算出的系统无约束边和系统的DD图为当前失效路径生成相似路径集;
[0056] d.在测试路径集中查找相似路径的执行结果组成相似测试路径集,若测试路径集中不存在相似路径,则通过替代策略选择其他的路径代替相似路径;
[0057] e.将所述相似测试路径集按执行结果分为成功路径集和失效路径集;
[0058] f.分别针对两种路径集中的每两条路径,即成功路径集和失效路径集中的两条路径、成功路径集中两条不同的路径以及失效路径集中两条不同的路径进行路径对比,找出两条路径出现不同是的分支语句;
[0059] g.根据公式计算语句的可疑度和非可疑度。
[0060] (2)利用基于统计分析的故障定位方法计算语句的可疑度:
[0061] a.提取所述目标软件每一条原始测试路径中的文件位置和行号等相关信息;
[0062] b.计算成功路径与失效路径的总数,以及一条语句在成功路径集和失效路径集中出现的频率;
[0063] c.计算语句的可疑度。
[0064] (3)结合所述(1)和(2)故障定位的结果:
[0065] a.将(1)中步骤a计算得到的系统的DD图用图形显示,同时支持边和结点的拖拽及缩放效果;
[0066] b.将(1)中步骤c计算的当前失效路径的相似路径集展示出来,其中包括整体替换后的结果以及中间替换的结果;
[0067] c.将(1)和(2)中计算的语句的可疑度和非可疑度根据权值综合起来,然后用不同颜色条覆盖在源代码上显示,且具有提示效果,显示实际的可疑度值或非可疑度值。
[0068] 实例测试:
[0069] 经过对被测系统——AddressBook人为植入软件故障,并利用本故障定位系统进行故障定位,定位结果表明该系统可以发现被测系统中的所有故障,同时准确率也很高,并且还帮助定位出意外的故障,具有很好的实用性。
[0070] 对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。