CN105224463A - 一种基于崩溃栈数据的软件缺陷代码定位方法 - Google Patents
一种基于崩溃栈数据的软件缺陷代码定位方法 Download PDFInfo
- Publication number
- CN105224463A CN105224463A CN201510714252.5A CN201510714252A CN105224463A CN 105224463 A CN105224463 A CN 105224463A CN 201510714252 A CN201510714252 A CN 201510714252A CN 105224463 A CN105224463 A CN 105224463A
- Authority
- CN
- China
- Prior art keywords
- collapse
- code unit
- history
- stack data
- defect
- 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.)
- Granted
Links
- 230000007547 defect Effects 0.000 title claims abstract description 115
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000012423 maintenance Methods 0.000 claims abstract description 22
- 238000004458 analytical method Methods 0.000 claims abstract description 17
- 230000003068 static effect Effects 0.000 claims description 28
- 238000005303 weighing Methods 0.000 claims description 12
- 238000005206 flow analysis Methods 0.000 claims description 6
- 238000012549 training Methods 0.000 claims description 6
- 230000015572 biosynthetic process Effects 0.000 claims description 3
- 239000011159 matrix material Substances 0.000 claims description 3
- 238000012360 testing method Methods 0.000 abstract description 4
- 238000013461 design Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 230000018109 developmental process Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 239000002253 acid Substances 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于崩溃栈数据的软件缺陷代码定位方法,结合历史崩溃栈数据和历史代码维修记录,应用机器学习技术,构建缺陷代码预测模型,预测软件中包含缺陷的各个最终目标崩溃代码单元,从而快速定位软件中包含缺陷的代码单元,并且针对各个最终目标崩溃代码单元进行评价,有效提高软件代码修复的工作效率;并且本发明设计方法简单,适用于不同类型的编程语言,以及不同规模的计算机软件,具有扩展性和适应性,方便应用并行算法,能够快速有效地分析和处理大量的崩溃栈数据,提高软件缺陷定位的效能,可用于中到大型软件***的测试和维护工作。
Description
技术领域
本发明涉及一种基于崩溃栈数据的软件缺陷代码定位方法,属于软件测试维护技术领域。
背景技术
计算机软件在开发和维护过程中不可避免地产生软件缺陷,缺陷定位是软件调试过程中一件耗时耗力的工作,对大规模软件***更是如此。软件缺陷定位一直是软件工程研究领域中的热点问题之一。缺陷定位利用代码执行信息和缺陷(问题)报告,预测缺陷代码的可能范围,辅助开发人员找到缺陷位置。当前软件***规模越来越大,代码文件越来越多,根据缺陷报告内容,从海量的代码文件中定位到缺陷代码的过程可谓是大海捞针。此外,在软件开发周期中,庞大的软件规模和有限的开发和测试成本之间也形成反差。
目前缺陷代码定位仍然以人工定位和经验判定为主,多利用交互式的调试工具,需要大量人工干预,定位效率低,耗费大量时间和成本,且不可重复,难以满足和适应大规模软件***的调试需求。近年来,研究者提出一些自动缺陷代码定位方法,但是这些方法多需要获取软件执行过程的动态信息,如代码覆盖数据和执行轨迹等,适用于小范围语句级的软件缺陷定位;尚不能满足大规模软件***在函数和过程级的缺陷定位要求。
发明内容
针对上述技术问题,本发明所要解决的技术问题是提供一种基于崩溃栈数据的软件缺陷代码定位方法,应用机器学习技术,能够快速定位软件中包含缺陷的代码单元,有效提高软件代码修复的工作效率。
本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种基于崩溃栈数据的软件缺陷代码定位方法,包括如下步骤:
步骤001.收集软件***的历史崩溃栈数据和历史代码维修记录,并分别针对各个历史崩溃栈数据,获得历史崩溃栈数据所对应的各个历史崩溃代码单元,构成所有历史崩溃栈数据所对应的历史崩溃代码单元集合,并进入步骤002;
步骤002.分别针对历史崩溃代码单元集合中的各个历史崩溃代码单元,获得历史崩溃代码单元的各个预设特征指标的特征值;然后分别针对各个历史崩溃代码单元,将历史崩溃代码单元转化为其所对应各个预设特征指标的特征值组成的特征向量,获得各个历史崩溃代码单元所分别对应的特征向量,并进入步骤003;
步骤003.根据历史代码维修记录,结合各个历史崩溃代码单元所分别对应的特征向量,分别判断各个历史崩溃代码单元是否包含缺陷;然后针对包含缺陷的各个历史崩溃代码单元,获得由该各个历史崩溃代码单元所对应特征向量组成的特征向量矩阵,构成训练集,并进入步骤004;
步骤004.应用训练集,针对预设分类器进行训练,获得经过训练的分类器,并进入步骤005;
步骤005.针对各个目标崩溃栈数据,获得各个目标崩溃栈数据分别所对应的各个目标崩溃代码单元,构成所有目标崩溃栈数据所对应的目标崩溃代码单元集合,并进入步骤006;
步骤006.分别针对目标崩溃代码单元集合中的各个目标崩溃代码单元,获得目标崩溃代码单元的各个预设特征指标的特征值;然后分别针对各个目标崩溃代码单元,将目标崩溃代码单元转化为其所对应各个预设特征指标的特征值组成的特征向量,获得各个目标崩溃代码单元所分别对应的特征向量,构成目标预测集,并进入步骤007;
步骤007.采用经过训练的分类器,针对目标预测集进行预测,预测各个目标崩溃代码单元是否包含缺陷,分别确定各个目标崩溃栈数据中包含缺陷的各个最终目标崩溃代码单元。
作为本发明的一种优选技术方案:所述步骤007之后还包括如下步骤008:
步骤008.根据历史代码维修记录,针对各个最终目标崩溃代码单元进行评价。
作为本发明的一种优选技术方案:所述步骤008具体包括如下步骤:
步骤00801.针对各个最终目标崩溃代码单元,分别获得最终目标崩溃代码单元的各个预设缺陷倾向指标的指标值xi,并进入步骤00802;其中,1≤i≤I,I为预设缺陷倾向指标的个数;
步骤00802.根据如下公式,针对各个最终目标崩溃代码单元,分别获得各个最终目标崩溃代码单元的缺陷倾向评分Score,并进入步骤00803;
步骤00803.根据各个最终目标崩溃代码单元的缺陷倾向评分Score,针对各个最终目标崩溃代码单元进行排序。
作为本发明的一种优选技术方案:所述预设缺陷倾向指标的个数I=5,所述步骤00701中,根据如下5个预设缺陷倾向指标,及其指标值xi计算公式,针对各个最终目标崩溃代码单元,分别获得最终目标崩溃代码单元的各个预设缺陷倾向指标的指标值xi;
x1表示反向调用距离缺陷倾向指标,用于衡量最终目标崩溃代码单元距离崩溃点的调用距离;Frame表示最终目标崩溃代码单元位于对应目标崩溃栈数据的层数位置,其中,崩溃点所处的层数为0,若最终目标崩溃代码单元未出现在对应目标崩溃栈数据中时,则Frame等于对应目标崩溃栈数据最大层数加1;Dise表示最终目标崩溃代码单元的调用深度;
x2=log(LOC+1)
x2表示最终目标崩溃代码单元单位长度缺陷倾向指标,用于衡量最终目标崩溃代码单元的相对长度,LOC表示最终目标崩溃代码单元包含的代码行总数;
x3表示最终目标崩溃代码单元延续时间缺陷倾向指标,用于衡量最终目标崩溃代码单元同最近一次修复或更新的时间距离;Day表示最终目标崩溃代码单元距离最近一次修复或更新的天数;
x4表示最终目标崩溃代码单元缺陷比率倾向指标,用于衡量最终目标崩溃代码单元在预设分类器中被预测包含缺陷的比率;N表示预设分类器中基分类器的数量;Ndefect表示预设分类器中预测最终目标崩溃代码单元包含缺陷的基分类器的数量;
x5表示最终目标崩溃代码单元历史缺陷比率倾向指标,用于衡量最终目标崩溃代码单元在历史崩溃栈数据中被预测为包含缺陷的比率;No表示涉及到最终目标崩溃代码单元的历史崩溃栈数据的个数;Nodefect表示根据历史代码维修记录确定最终目标崩溃代码单元包含缺陷的目标崩溃栈数据的数量。
作为本发明的一种优选技术方案:所述预设分类器为AdaBoost分类器
作为本发明的一种优选技术方案:所述步骤001中,分别针对各个历史崩溃栈数据,执行如下步骤a01至步骤a03,获得各个历史崩溃栈数据分别所对应的各个历史崩溃代码单元,构成所有历史崩溃栈数据所对应的历史崩溃代码单元集合;
步骤a01.应用调用链分析方法,针对历史崩溃栈数据中涉及到的代码单元进行分析扩展,获得该历史崩溃栈数据所涉及到的全部代码单元,并构建与之相对应的静态调用图,然后进入步骤a02;
步骤a02.应用控制流分析方法,基于软件控制流顺序,删除静态调用图中软件执行不可达的代码单元,并进入步骤a03;
步骤a03.应用反向切片技术,基于软件控制流顺序,删除静态调用图中与该历史崩溃栈数据中崩溃点变量引用无关的代码单元,最后,静态调用图中剩余的代码单元即为该历史崩溃栈数据所对应的各个历史崩溃代码单元。
作为本发明的一种优选技术方案:所述步骤005中,针对各个目标崩溃栈数据,分别执行如下步骤b01至步骤b03,获得各个目标崩溃栈数据分别所对应的各个目标崩溃代码单元,构成所有目标崩溃栈数据所对应的目标崩溃代码单元集合;
步骤b01.应用调用链分析方法,针对目标崩溃栈数据中涉及到的代码单元进行分析扩展,获得该目标崩溃栈数据所涉及到的全部代码单元,并构建与之相对应的静态调用图,然后进入步骤b02;
步骤b02.应用控制流分析方法,基于软件控制流顺序,删除静态调用图中软件执行不可达的代码单元,并进入步骤b03;
步骤b03.应用反向切片技术,基于软件控制流顺序,删除静态调用图中与该目标崩溃栈数据中崩溃点变量引用无关的代码单元,最后,静态调用图中剩余的代码单元即为该目标崩溃栈数据所对应的各个目标崩溃代码单元。
作为本发明的一种优选技术方案:所述步骤002和所述步骤006中各个预设特征指标的特征值分别为调用深度特征指标、代码行数特征指标、可执行代码行数特征指标、声明代码行数特征指标、注释代码行数特征指标、注释比例特征指标、空格比例特征指标、标点比例特征指标、代码路径数特征指标、圈复杂度特征指标、输入变量个数特征指标、输出变量个数特征指标。
本发明所述一种基于崩溃栈数据的软件缺陷代码定位方法采用以上技术方案与现有技术相比,具有以下技术效果:本发明设计的基于崩溃栈数据的软件缺陷代码定位方法,结合历史崩溃栈数据和历史代码维修记录,应用机器学习技术,构建缺陷代码预测模型,预测软件中包含缺陷的各个最终目标崩溃代码单元,从而快速定位软件中包含缺陷的代码单元,并且针对各个最终目标崩溃代码单元进行评价,有效提高软件代码修复的工作效率;并且本发明设计方法简单,适用于不同类型的编程语言,以及不同规模的计算机软件,具有扩展性和适应性,方便应用并行算法,能够快速有效地分析和处理大量的崩溃栈数据,提高软件缺陷定位的效能,可用于中到大型软件***的测试和维护工作。
附图说明
图1是本发明设计基于崩溃栈数据的软件缺陷代码定位方法的总体框架示意图;
图2是本发明设计基于崩溃栈数据的软件缺陷代码定位方法的流程示意图;
图3是软件崩溃栈数据示例;
图4a是本发明设计获得历史崩溃栈数据所对应各个历史崩溃代码单元中实施例的静态调用图;
图4b是本发明设计获得历史崩溃栈数据所对应各个历史崩溃代码单元中实施例的崩溃栈数据示意图;
图4c是本发明设计获得历史崩溃栈数据所对应各个历史崩溃代码单元中实施例的代码单元的深度示意图;
图4d是本发明设计获得历史崩溃栈数据所对应各个历史崩溃代码单元中实施例的源代码示意图。
具体实施方式
下面结合说明书附图针对本发明的具体实施方式作进一步详细的说明。
如图1和图2所示,本发明所设计基于崩溃栈数据的软件缺陷代码定位方法,在实际应用过程当中,包括如下步骤,其中,代码单元指软件程序中的函数、过程或者对象方法。
步骤001.软件开发商在软件***开发和维护过程中会搭建缺陷报告***,其中的维护代码缺陷历史库,包含与每个软件缺陷相关的崩溃栈数据、构件名称、版本号、操作***等;对于已经修复的代码缺陷,还会记录每个崩溃栈数据对应的缺陷代码、代码的修复记录等;因此,首先我们基于缺陷报告***,收集软件***的历史崩溃栈数据和历史代码维修记录。
如图3所示,该示例中软件的崩溃栈数据产生于FireFox浏览器的一次运行时错误(崩溃ID:f2f55573-e2cd-4ce9-92be-b16e72130904);崩溃栈数据由多个层组成,每一层包含一个代码单元名称和对应的源文件位置(文件路径名和代码行号);其中层0代表触发崩溃的代码执行位置。在多数软件***中,例如MicrosoftWindows,崩溃栈数据按照触发点被自动分成不同的组,如此分组是基于“同一个缺陷会在相同的代码位置触发崩溃”情况进行假设的。
然后,分别针对各个历史崩溃栈数据,如图4a-图4d所示,执行如下步骤a01至步骤a03,获得各个历史崩溃栈数据分别所对应的各个历史崩溃代码单元,构成所有历史崩溃栈数据所对应的历史崩溃代码单元集合,并进入步骤002。
步骤a01.应用调用链分析方法,针对历史崩溃栈数据中涉及到的代码单元进行分析扩展,获得该历史崩溃栈数据所涉及到的全部代码单元,并构建与之相对应的静态调用图,然后进入步骤a02;
对于步骤a01来说,如图4a所示,其中结点代表代码单元,边代表调用关系;CU11位置出现崩溃;例如“CU2→CU6”表示代码单元CU2调用了CU6;根据如图4b所示的崩溃栈数据示意图,调用链CU1→CU3→CU12→CU11并没有完全反应崩溃时的调用轨迹,需要基于静态调用图对调用轨迹进行扩展。例如,对于CU1,有两个调用对CU1→CU3和CU1→CU4;由于CU4可能在CU3之前被调用,CU4加入到调用轨迹中;一旦CU4被加入,那么CU9和CU13也被加入到调用轨迹中;同理,通过分析其他代码单元(CU3,CU12和CU11),可以获得完整的调用轨迹。
由于在应用调用链分析方法,针对历史崩溃栈数据中涉及到的代码单元进行分析扩展的过程中,会导致代码单元数量呈指数级增长,需要减少代码单元的检索范围,因此在执行完步骤a01之后,需要进入如下步骤a02。
步骤a02.应用控制流分析方法,基于软件控制流顺序,删除静态调用图中软件执行不可达的代码单元,并进入步骤a03;
基于图4a和图4b所示的实施例,对于步骤a02来说,如图4c所示,分析代码单元CU11,使用基本的扩展方法,CU14,CU15,CU16和CU17都会被包含进去做进一步的扩展;但是,基于软件控制流顺序,分析表明CU14从崩溃点出发是不可达的,因此,删除静态调用图中软件执行不可达的代码单元CU14。
步骤a03.应用反向切片技术,基于软件控制流顺序,删除静态调用图中与该历史崩溃栈数据中崩溃点变量引用无关的代码单元,最后,静态调用图中剩余的代码单元即为该历史崩溃栈数据所对应的各个历史崩溃代码单元。
继续基于图4a、图4b、图4c所示的实施例,对于步骤a03来说,如图4d所示,按照崩溃点,可确定变量s和c同崩溃相关;以这两个变量为起点,通过反向切片技术,可进一步引入变量b;但是CU15没有影响到变量s、c和b,因此可以删除静态调用图中的s、c和b。
步骤002.分别针对历史崩溃代码单元集合中的各个历史崩溃代码单元,获得历史崩溃代码单元的各个预设特征指标的特征值;然后分别针对各个历史崩溃代码单元,将历史崩溃代码单元转化为其所对应各个预设特征指标的特征值组成的特征向量,获得各个历史崩溃代码单元所分别对应的特征向量,并进入步骤003。
其中,各个预设特征指标的特征值分别如下各个特征指标:
(1)调用深度特征指标,一个代码单元的调用深度特征指标表示从崩溃栈数据中出现的任何一个代码单元出发,到达该代码单元的最短调用链长度;如果该代码单元出现在崩溃栈数据中,则调用深度为0;
(2)代码行数特征指标,用于表示代码单元中所包含的代码行数,包括注释;
(3)可执行代码行数特征指标,用于表示代码单元中所包含的可执行代码的行数;
(4)声明代码行数特征指标,用于表示代码单元中用于定义变量和函数的代码行数;
(5)注释代码行数特征指标,用于表示代码单元中用于注释的代码行数;
(6)注释比例特征指标,用于表示代码单元中用于注释的字符个数占总字符个数的比例;
(7)空格比例特征指标,用于表示代码单元中空格符、Tab符、换行符个数占总字符个数的比例;
(8)标点比例特征指标,用于表示代码单元中分号、逗号、斜杠、引号、括弧等标点符号个数占总字符个数的比例;
(9)代码路径数特征指标,用于表示代码单元中可能的简单路径个数,其中简单路径指代码不重复出现,即循环体出现0或1次;
(10)圈复杂度特征指标,用于表示代码单元中分支判定(条件语句和循环语句)的个数再加1;
(11)输入变量个数特征指标,用于表示代码单元中输入参数的个数,以及引用的全局变量个数之和;
(12)输出变量个数特征指标,用于表示代码单元中输出参数的个数,以及修改的全局变量个数之和。
因此,基于上述12个特征指标,分别针对各个历史崩溃代码单元,将历史崩溃代码单元转化为其所对应12个特征指标的特征值组成的特征向量,即每一个历史崩溃代码单元被转化为一个由其对应12个特征指标的特征值组成的特征向量,进而获得各个历史崩溃代码单元所分别对应的特征向量。
步骤003.根据历史代码维修记录,结合各个历史崩溃代码单元所分别对应的特征向量,分别判断各个历史崩溃代码单元是否包含缺陷;然后针对包含缺陷的各个历史崩溃代码单元,获得由该各个历史崩溃代码单元所对应特征向量组成的特征向量矩阵,构成训练集如下表1所示,然后进入步骤004。
表1
其中,n表示所收集历史崩溃栈数据的个数,m表示基于第一个历史崩溃栈数据获得历史崩溃代码单元的个数;BugStack表示历史崩溃栈数据;CU表示历史崩溃代码单元。
步骤004.应用训练集,针对AdaBoost分类器进行训练,获得经过训练的AdaBoost分类器,作为缺陷代码预测模型,并进入步骤005,其中,AdaBoost分类器中基分类器的数量N=100,基分类器采用决策树策略。
步骤005.基于上述步骤a01至步骤a03同样的原理,针对各个目标崩溃栈数据,同样基于上述12个特征指标,分别执行如下步骤b01至步骤b03,获得各个目标崩溃栈数据分别所对应的各个目标崩溃代码单元,构成所有目标崩溃栈数据所对应的目标崩溃代码单元集合,并进入步骤006。
步骤b01.应用调用链分析方法,针对目标崩溃栈数据中涉及到的代码单元进行分析扩展,获得该目标崩溃栈数据所涉及到的全部代码单元,并构建与之相对应的静态调用图,然后进入步骤b02;
步骤b02.应用控制流分析方法,基于软件控制流顺序,删除静态调用图中软件执行不可达的代码单元,并进入步骤b03;
步骤b03.应用反向切片技术,基于软件控制流顺序,删除静态调用图中与该目标崩溃栈数据中崩溃点变量引用无关的代码单元,最后,静态调用图中剩余的代码单元即为该目标崩溃栈数据所对应的各个目标崩溃代码单元。
步骤006.分别针对目标崩溃代码单元集合中的各个目标崩溃代码单元,获得目标崩溃代码单元的各个预设特征指标的特征值;然后分别针对各个目标崩溃代码单元,将目标崩溃代码单元转化为其所对应各个预设特征指标的特征值组成的特征向量,获得各个目标崩溃代码单元所分别对应的特征向量,构成目标预测集,并进入步骤007。
步骤007.采用缺陷代码预测模型,针对目标预测集进行预测,预测各个目标崩溃代码单元是否包含缺陷,分别确定各个目标崩溃栈数据中包含缺陷的各个最终目标崩溃代码单元,然后进入步骤008。
步骤008.根据历史代码维修记录,针对各个最终目标崩溃代码单元进行评价,具体包括如下步骤:
步骤00801.根据如下5个预设缺陷倾向指标,及其指标值xi计算公式,针对各个最终目标崩溃代码单元,分别获得最终目标崩溃代码单元的各个预设缺陷倾向指标的指标值xi,并进入步骤00802;其中,1≤i≤I,I为预设缺陷倾向指标的个数,I=5,即1≤i≤5。
x1表示反向调用距离缺陷倾向指标,用于衡量最终目标崩溃代码单元距离崩溃点的调用距离;Frame表示最终目标崩溃代码单元位于对应目标崩溃栈数据的层数位置,其中,崩溃点所处的层数为0,若最终目标崩溃代码单元未出现在对应目标崩溃栈数据中时,则Frame等于对应目标崩溃栈数据最大层数加1;Dise表示最终目标崩溃代码单元的调用深度,为上述各个预设特征指标之一,即调用深度特征指标。
x2=log(LOC+1)
x2表示最终目标崩溃代码单元单位长度缺陷倾向指标,用于衡量最终目标崩溃代码单元的相对长度,LOC表示最终目标崩溃代码单元包含的代码行总数,为上述各个预设特征指标之一,即代码行数特征指标。
x3表示最终目标崩溃代码单元延续时间缺陷倾向指标,用于衡量最终目标崩溃代码单元同最近一次修复或更新的时间距离;Day表示最终目标崩溃代码单元距离最近一次修复或更新的天数。
x4表示最终目标崩溃代码单元缺陷比率倾向指标,用于衡量最终目标崩溃代码单元在AdaBoost分类器中被预测包含缺陷的比率;N表示AdaBoost分类器中基分类器的数量;Ndefect表示AdaBoost分类器中预测最终目标崩溃代码单元包含缺陷的基分类器的数量。
x5表示最终目标崩溃代码单元历史缺陷比率倾向指标,用于衡量最终目标崩溃代码单元在历史崩溃栈数据中被预测为包含缺陷的比率;No表示涉及到最终目标崩溃代码单元的历史崩溃栈数据的个数;Nodefect表示根据历史代码维修记录确定最终目标崩溃代码单元包含缺陷的目标崩溃栈数据的数量。
步骤00802.根据如下公式,针对各个最终目标崩溃代码单元,分别获得各个最终目标崩溃代码单元的缺陷倾向评分Score,并进入步骤00803。
步骤00803.根据各个最终目标崩溃代码单元的缺陷倾向评分Score,针对各个最终目标崩溃代码单元进行降序排序,并将最终降序排序结果提交给软件开发者和软件维护人员,辅助定位软件中包含缺陷的代码单元。
上述技术方案设计的基于崩溃栈数据的软件缺陷代码定位方法,结合历史崩溃栈数据和历史代码维修记录,应用机器学习技术,构建缺陷代码预测模型,预测软件中包含缺陷的各个最终目标崩溃代码单元,从而快速定位软件中包含缺陷的代码单元,并且针对各个最终目标崩溃代码单元进行评价,有效提高软件代码修复的工作效率;并且本发明设计方法简单,适用于不同类型的编程语言,以及不同规模的计算机软件,具有扩展性和适应性,方便应用并行算法,能够快速有效地分析和处理大量的崩溃栈数据,提高软件缺陷定位的效能,可用于中到大型软件***的测试和维护工作。
上面结合说明书附图针对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。
Claims (8)
1.一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于,包括如下步骤:
步骤001.收集软件***的历史崩溃栈数据和历史代码维修记录,并分别针对各个历史崩溃栈数据,获得历史崩溃栈数据所对应的各个历史崩溃代码单元,构成所有历史崩溃栈数据所对应的历史崩溃代码单元集合,并进入步骤002;
步骤002.分别针对历史崩溃代码单元集合中的各个历史崩溃代码单元,获得历史崩溃代码单元的各个预设特征指标的特征值;然后分别针对各个历史崩溃代码单元,将历史崩溃代码单元转化为其所对应各个预设特征指标的特征值组成的特征向量,获得各个历史崩溃代码单元所分别对应的特征向量,并进入步骤003;
步骤003.根据历史代码维修记录,结合各个历史崩溃代码单元所分别对应的特征向量,分别判断各个历史崩溃代码单元是否包含缺陷;然后针对包含缺陷的各个历史崩溃代码单元,获得由该各个历史崩溃代码单元所对应特征向量组成的特征向量矩阵,构成训练集,并进入步骤004;
步骤004.应用训练集,针对预设分类器进行训练,获得经过训练的分类器,作为缺陷代码预测模型,并进入步骤005;
步骤005.针对各个目标崩溃栈数据,获得各个目标崩溃栈数据分别所对应的各个目标崩溃代码单元,构成所有目标崩溃栈数据所对应的目标崩溃代码单元集合,并进入步骤006;
步骤006.分别针对目标崩溃代码单元集合中的各个目标崩溃代码单元,获得目标崩溃代码单元的各个预设特征指标的特征值;然后分别针对各个目标崩溃代码单元,将目标崩溃代码单元转化为其所对应各个预设特征指标的特征值组成的特征向量,获得各个目标崩溃代码单元所分别对应的特征向量,构成目标预测集,并进入步骤007;
步骤007.采用缺陷代码预测模型,针对目标预测集进行预测,预测各个目标崩溃代码单元是否包含缺陷,分别确定各个目标崩溃栈数据中包含缺陷的各个最终目标崩溃代码单元。
2.根据权利要求1所述一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于:所述步骤007之后还包括如下步骤008:
步骤008.根据历史代码维修记录,针对各个最终目标崩溃代码单元进行评价。
3.根据权利要求2所述一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于:所述步骤008具体包括如下步骤:
步骤00801.针对各个最终目标崩溃代码单元,分别获得最终目标崩溃代码单元的各个预设缺陷倾向指标的指标值xi,并进入步骤00802;其中,1≤i≤I,I为预设缺陷倾向指标的个数;
步骤00802.根据如下公式,针对各个最终目标崩溃代码单元,分别获得各个最终目标崩溃代码单元的缺陷倾向评分Score,并进入步骤00803;
步骤00803.根据各个最终目标崩溃代码单元的缺陷倾向评分Score,针对各个最终目标崩溃代码单元进行排序。
4.根据权利要求3所述一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于:所述预设缺陷倾向指标的个数I=5,所述步骤00701中,根据如下5个预设缺陷倾向指标,及其指标值xi计算公式,针对各个最终目标崩溃代码单元,分别获得最终目标崩溃代码单元的各个预设缺陷倾向指标的指标值xi;
x1表示反向调用距离缺陷倾向指标,用于衡量最终目标崩溃代码单元距离崩溃点的调用距离;Frame表示最终目标崩溃代码单元位于对应目标崩溃栈数据的层数位置,其中,崩溃点所处的层数为0,若最终目标崩溃代码单元未出现在对应目标崩溃栈数据中时,则Frame等于对应目标崩溃栈数据最大层数加1;Dise表示最终目标崩溃代码单元的调用深度;
x2=log(LOC+1)
x2表示最终目标崩溃代码单元单位长度缺陷倾向指标,用于衡量最终目标崩溃代码单元的相对长度,LOC表示最终目标崩溃代码单元包含的代码行总数;
x3表示最终目标崩溃代码单元延续时间缺陷倾向指标,用于衡量最终目标崩溃代码单元同最近一次修复或更新的时间距离;Day表示最终目标崩溃代码单元距离最近一次修复或更新的天数;
x4表示最终目标崩溃代码单元缺陷比率倾向指标,用于衡量最终目标崩溃代码单元在预设分类器中被预测包含缺陷的比率;N表示预设分类器中基分类器的数量;Ndefect表示预设分类器中预测最终目标崩溃代码单元包含缺陷的基分类器的数量;
x5表示最终目标崩溃代码单元历史缺陷比率倾向指标,用于衡量最终目标崩溃代码单元在历史崩溃栈数据中被预测为包含缺陷的比率;No表示涉及到最终目标崩溃代码单元的历史崩溃栈数据的个数;Nodefect表示根据历史代码维修记录确定最终目标崩溃代码单元包含缺陷的目标崩溃栈数据的数量。
5.根据权利要求1或4所述一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于:所述预设分类器为AdaBoost分类器。
6.根据权利要求1所述一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于:所述步骤001中,分别针对各个历史崩溃栈数据,执行如下步骤a01至步骤a03,获得各个历史崩溃栈数据分别所对应的各个历史崩溃代码单元,构成所有历史崩溃栈数据所对应的历史崩溃代码单元集合;
步骤a01.应用调用链分析方法,针对历史崩溃栈数据中涉及到的代码单元进行分析扩展,获得该历史崩溃栈数据所涉及到的全部代码单元,并构建与之相对应的静态调用图,然后进入步骤a02;
步骤a02.应用控制流分析方法,基于软件控制流顺序,删除静态调用图中软件执行不可达的代码单元,并进入步骤a03;
步骤a03.应用反向切片技术,基于软件控制流顺序,删除静态调用图中与该历史崩溃栈数据中崩溃点变量引用无关的代码单元,最后,静态调用图中剩余的代码单元即为该历史崩溃栈数据所对应的各个历史崩溃代码单元。
7.根据权利要求1所述一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于:所述步骤005中,针对各个目标崩溃栈数据,分别执行如下步骤b01至步骤b03,获得各个目标崩溃栈数据分别所对应的各个目标崩溃代码单元,构成所有目标崩溃栈数据所对应的目标崩溃代码单元集合;
步骤b01.应用调用链分析方法,针对目标崩溃栈数据中涉及到的代码单元进行分析扩展,获得该目标崩溃栈数据所涉及到的全部代码单元,并构建与之相对应的静态调用图,然后进入步骤b02;
步骤b02.应用控制流分析方法,基于软件控制流顺序,删除静态调用图中软件执行不可达的代码单元,并进入步骤b03;
步骤b03.应用反向切片技术,基于软件控制流顺序,删除静态调用图中与该目标崩溃栈数据中崩溃点变量引用无关的代码单元,最后,静态调用图中剩余的代码单元即为该目标崩溃栈数据所对应的各个目标崩溃代码单元。
8.根据权利要求1所述一种基于崩溃栈数据的软件缺陷代码定位方法,其特征在于:所述步骤002和所述步骤006中各个预设特征指标的特征值分别为调用深度特征指标、代码行数特征指标、可执行代码行数特征指标、声明代码行数特征指标、注释代码行数特征指标、注释比例特征指标、空格比例特征指标、标点比例特征指标、代码路径数特征指标、圈复杂度特征指标、输入变量个数特征指标、输出变量个数特征指标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510714252.5A CN105224463B (zh) | 2015-10-28 | 2015-10-28 | 一种基于崩溃栈数据的软件缺陷代码定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510714252.5A CN105224463B (zh) | 2015-10-28 | 2015-10-28 | 一种基于崩溃栈数据的软件缺陷代码定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105224463A true CN105224463A (zh) | 2016-01-06 |
CN105224463B CN105224463B (zh) | 2018-02-02 |
Family
ID=54993448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510714252.5A Active CN105224463B (zh) | 2015-10-28 | 2015-10-28 | 一种基于崩溃栈数据的软件缺陷代码定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105224463B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294134A (zh) * | 2016-07-29 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 代码的崩溃定位方法及装置 |
CN106502909A (zh) * | 2016-11-07 | 2017-03-15 | 南京大学 | 一种智能手机应用开发中的代码缺陷预测方法 |
CN107066302A (zh) * | 2017-04-28 | 2017-08-18 | 北京邮电大学 | 缺陷检测方法、装置及服务终端 |
CN109144879A (zh) * | 2018-09-03 | 2019-01-04 | 腾讯科技(深圳)有限公司 | 测试分析方法及装置 |
CN109815152A (zh) * | 2019-01-31 | 2019-05-28 | 科大讯飞股份有限公司 | 程序崩溃类型预测方法及*** |
CN110413509A (zh) * | 2019-06-27 | 2019-11-05 | 武汉大学 | 一种基于测试生成的软件崩溃重现方法及*** |
CN111522676A (zh) * | 2020-04-01 | 2020-08-11 | 五八有限公司 | 一种应用程序的修复方法及装置 |
CN111679971A (zh) * | 2020-05-20 | 2020-09-18 | 北京航空航天大学 | 一种基于Adaboost的软件缺陷预测方法 |
CN112035345A (zh) * | 2020-08-20 | 2020-12-04 | 国家电网有限公司信息通信分公司 | 一种基于代码片段分析的混合深度缺陷预测方法 |
CN117009127A (zh) * | 2023-08-23 | 2023-11-07 | 航电所(成都)科技有限公司 | 火电厂云端***的软件升级方法及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090073051A (ko) * | 2007-12-28 | 2009-07-02 | 충북대학교 산학협력단 | 에스펙 컴포넌트를 이용한 내장형 소프트웨어의 온더플라이테스팅 방법 및 시스템 |
CN103678091A (zh) * | 2013-12-19 | 2014-03-26 | 北京奇虎科技有限公司 | 应用软件崩溃数据的处理方法和装置 |
-
2015
- 2015-10-28 CN CN201510714252.5A patent/CN105224463B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090073051A (ko) * | 2007-12-28 | 2009-07-02 | 충북대학교 산학협력단 | 에스펙 컴포넌트를 이용한 내장형 소프트웨어의 온더플라이테스팅 방법 및 시스템 |
CN103678091A (zh) * | 2013-12-19 | 2014-03-26 | 北京奇虎科技有限公司 | 应用软件崩溃数据的处理方法和装置 |
Non-Patent Citations (2)
Title |
---|
BENOIT BAUDRY 等: "Improving Test Suites for Efficient Fault Localization", 《28TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING》 * |
王新平 等: "基于执行轨迹的软件缺陷定位方法研究", 《计算机科学》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294134A (zh) * | 2016-07-29 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 代码的崩溃定位方法及装置 |
CN106294134B (zh) * | 2016-07-29 | 2018-02-23 | 腾讯科技(深圳)有限公司 | 代码的崩溃定位方法及装置 |
CN106502909A (zh) * | 2016-11-07 | 2017-03-15 | 南京大学 | 一种智能手机应用开发中的代码缺陷预测方法 |
CN106502909B (zh) * | 2016-11-07 | 2019-04-23 | 南京大学 | 一种智能手机应用开发中的代码缺陷预测方法 |
CN107066302A (zh) * | 2017-04-28 | 2017-08-18 | 北京邮电大学 | 缺陷检测方法、装置及服务终端 |
CN107066302B (zh) * | 2017-04-28 | 2019-11-05 | 北京邮电大学 | 缺陷检测方法、装置及服务终端 |
CN109144879A (zh) * | 2018-09-03 | 2019-01-04 | 腾讯科技(深圳)有限公司 | 测试分析方法及装置 |
CN109815152A (zh) * | 2019-01-31 | 2019-05-28 | 科大讯飞股份有限公司 | 程序崩溃类型预测方法及*** |
CN110413509A (zh) * | 2019-06-27 | 2019-11-05 | 武汉大学 | 一种基于测试生成的软件崩溃重现方法及*** |
CN110413509B (zh) * | 2019-06-27 | 2021-08-03 | 武汉大学 | 一种基于测试生成的软件崩溃重现方法及*** |
CN111522676A (zh) * | 2020-04-01 | 2020-08-11 | 五八有限公司 | 一种应用程序的修复方法及装置 |
CN111522676B (zh) * | 2020-04-01 | 2021-10-01 | 五八有限公司 | 一种应用程序的修复方法及装置 |
CN111679971A (zh) * | 2020-05-20 | 2020-09-18 | 北京航空航天大学 | 一种基于Adaboost的软件缺陷预测方法 |
CN111679971B (zh) * | 2020-05-20 | 2021-07-20 | 北京航空航天大学 | 一种基于Adaboost的软件缺陷预测方法 |
CN112035345A (zh) * | 2020-08-20 | 2020-12-04 | 国家电网有限公司信息通信分公司 | 一种基于代码片段分析的混合深度缺陷预测方法 |
CN117009127A (zh) * | 2023-08-23 | 2023-11-07 | 航电所(成都)科技有限公司 | 火电厂云端***的软件升级方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN105224463B (zh) | 2018-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105224463A (zh) | 一种基于崩溃栈数据的软件缺陷代码定位方法 | |
CN101866316B (zh) | 一种基于相对冗余测试集约简的软件缺陷定位方法 | |
CN101231614B (zh) | 一种基于执行轨迹块相似度的软件缺陷定位方法 | |
US20050256788A1 (en) | Apparatus and method for tracking products | |
CN110502361A (zh) | 面向bug报告的细粒度缺陷定位方法 | |
CN107844414A (zh) | 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法 | |
Crippa et al. | A systematic review of BIM usage for life cycle impact assessment | |
CN103294594A (zh) | 一种基于测试的静态分析误报消除方法 | |
CN110515826A (zh) | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 | |
CN106951565B (zh) | 文本分类方法及获得的文本分类器 | |
CN105701013A (zh) | 基于互信息的软件缺陷数据特征选择方法 | |
CN113157564A (zh) | 一种基于特征分布对齐和邻域实例选择的跨项目缺陷预测方法 | |
CN106933572B (zh) | 一种基于llvm中间表示程序切片的度量模型 | |
CN103136103A (zh) | 一种面向错误定位需求的测试用例约简方法 | |
CN108279013B (zh) | 电子地图增量数据的检查纠错方法和装置、以及导航*** | |
CN116523284A (zh) | 基于机器学习的业务操作流程自动化评估方法、*** | |
CN107203469B (zh) | 基于机器学习的编译器测试加速方法 | |
JPH09160949A (ja) | ハードウエアとソフトウエアの混在システムの設計支援方法 | |
CN113377962B (zh) | 一种基于图像识别和自然语言处理的智能过程模拟方法 | |
CN106095663B (zh) | 基于切片模型的程序回归错误定位方法 | |
CN109002723A (zh) | 一种分段式符号执行方法 | |
CN109685453B (zh) | 智能识别工作流有效路径的方法 | |
CN103150254B (zh) | 基于状态依赖概率建模的软件错误定位方法 | |
CN109857675A (zh) | 一种利用语句类型的程序错误定位方法 | |
CN110032319A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |