一种基于动态切片的轻量级错误定位技术实现方法

文档序号:8258354阅读:565来源:国知局
一种基于动态切片的轻量级错误定位技术实现方法
【技术领域】
[0001] 本发明涉及一种错误定位的方法,主要从动态切片的过程中提取有用信息,再用 轻量级的方法分析,为程序员提供错误语句块的可疑度排序,属于软件测试领域。
【背景技术】
[0002] 软件调试需要程序员进行大量的人机交互。故障定位是调试过程中最为耗时和费 力的活动之一,它通过审查源程序语义和结构,结合分析程序的执行过程及结果,辅助开发 人员找到软件故障位置。研宄人员提出了一系列自动化的故障定位方法,这些方法可分为 静态方法和动态方法。静态方法利用程序的依赖关系、类型约束等信息来分析程序中的可 能故障点;动态方法则通过测试程序,跟踪程序的执行轨迹和覆盖信息来进行故障定位。高 效地定位软件故障可减轻程序员手工排查程序语句的工作量,提升调试速度和效率。
[0003] 错误定位的2个阶段:1、找出值得被怀疑的语句2、从这些语句中再确定是否真正 是错误语句。由第一阶段:高怀疑度语句需要先于低怀疑度语句被检查。由第二阶段:我们 假定只要被程序员检查的有怀疑的语句都能找出其中的错误。错误定位方法繁多,但是归 根结底可以分为3种:
[0004] 1、基于行为特征对比的方法。2、基础程序状态修改的方法。3、基于程序依赖关系 的方法。
[0005] 程序行为特征,也被称为程序频谱(program spectra),是程序执行特征的统计信 息。
[0006] 基础程序状态修改的方法通常在程序执行时,获得并修改程序的状态,然后观察 修改后的测试结果(成功/失败),进而找出对测试结果有影响的语句。
[0007] 基于程序依赖关系的方法,例如符号执行,与执行实际的目标程序不同它仅依赖 程序的源代码,以符号代替具体变量的值作为程序的输入数据。这种方法侧重于静态分析。 而切片等方法则侧重于使用程序的动态依赖关系给出值得怀疑的语句的集合,这个集合除 了包含错误语句外,还提供了一个供程序员理解的调试上下文。但通常这类集合也会包含 一些冗余的语句,需要使用一些技术来化简集合。

【发明内容】

[0008] 技术问题:本发明的目的是提供一种基于动态切片的轻量级错误定位技术实现方 法,目前现有的错误定位技术主要从静态、动态和统计这3个方面单独分析,错位定位效率 往往不能达到实际的要求。本发明利用程序切片中的动态切片方法,在取得程序切片之后 先进行初步的切片分析,然后将结果送给轻量级错误定位模型,进行最后一步的统计分析, 最后得出可疑度语句块的排名,并且同时保证了高精度和低误判率。
[0009] 技术方案:本发明结合约束求解器,动态生成测试用例,再对程序进行动态切片和 断点分析,利用切片后的结果,进行可疑度排序,最终提高错误定位的效率。
[0010] 该发明由5个模块组成,其中,最顶层是测试用例生成模块,主要负责测试用例的 自动化生成。中间是程序状态修改模块,主要负责动态的改变谓词的结果,以产生值得进行 切片的关键谓词。其次是断点分析模块、切片分析模块和可疑度统计模块。其中,断点分析 模块主要负责分析程序崩溃的情况,对无法正常执行结束的程序进行分析,决定了这个发 明的健壮性。切片分析模块主要是对依赖图进行动态切片,切片之后的结果以执行了程序 哪几行的形式反馈给用户,用户根据切片结果,对其进行初步分析。可疑度统计模块主要负 责计算每条可疑语句块的可疑度。
[0011] 有益效果:本发明在对源程序进行切片时,并非漫无目的的寻找切片兴趣点,而 是,通过先寻找程序中存在的谓词,对其结果进行强制改变,从而使程序的执行结果发生变 化,从而产生关键谓词,再对关键谓词进行切片,大大减少了切片的工作量。其次,本发明对 程序不包含谓词的情况也作了详细的讨论,并提出了一种2分断点算法,精确的计算出程 序崩溃时的切片语句,从而使得本发明适用于所有的程序。
[0012] 精度高:基于程序频谱的轻量级错误定位方法,往往不考虑程序执行的动态依赖 关系,所以导致了最后的可疑度语句块过于庞大。本发明优先对源程序进行切片,将有依赖 关系包括控制依赖和数据依赖的语句块筛选了出来,然后再进行轻量级分析的时候就不会 产生太多的语句块。
【附图说明】
[0013] 图1是本发明方案的总体实施流程,包括5大模块,测试用例生成模块,程序状态 修改模块,断点分析模块,切片分析模块和可疑度分析模块。
[0014] 图2是本发明的测试用例生成模块,利用约束求解器生成测试用例并对其进行分 类,最后送入程序状态修改模块。
[0015]图3是本发明的程序状态修改模块,主要工作是进行谓词分析和将部分没有谓词 的程序送入断点分析模块。
[0016]图4是本发明的断点分析模块,此模块负责处理程序崩溃的情况。
[0017] 图5是本发明的切片分析模块,负责生成源程序的切片结果,切片结果为执行过 哪些和被切语句有关的语句。
[0018]图6是本发明的可疑度分析模块,主要负责计算所有具有可疑度的语句的具体的 可疑度,此可疑度将直接辅助程序员进行错误定位。
【具体实施方式】
[0019] 1.程序状态修改
[0020] 1. 1、有谓词情况
[0021] (1)读取源程序,每次读取一行,用正则表达式进行谓词匹配,并记录匹配到的谓 词。若程序无谓词,则跳转到步骤1.2。
[0022] (2)修改谓词的取值。修改后有两种情况:第一种,修改谓词后程序的执行状态没 发生改变,此时继续查找下一个谓词;第二种,程序的执行状态发生改变,这时记录下使得 程序状态发生改变的谓词,取得所有谓词后,执行步骤2。
[0023] 1. 2、无谓词情况:对于错误的测试用例,程序的结果有两种,第一种是产生错误的 输出结果,第二是程序无法正常执行结束,中途崩溃报告异常。
[0024] (1)对于第一种,直接从错误的输出结果的变量开始进行后向切片,得到影响该变 量的语句块。
[0025] (2)对于第二种,使用二分法设置断点,其基本算法是:
【主权项】
1. 一种基于动态切片的轻量级错误定位方法,其特征在于该方法由5个模块组成,其 中, 最顶层是测试用例生成模块,主要负责测试用例的自动化生成。 第二层是程序状态修改模块,主要负责动态地改变谓词的结果,以产生值得进行切片 的关键谓词。 其余模块分别是断点分析模块、切片分析模块和可疑度统计模块;其中,断点分析模块 主要负责分析程序崩溃的情况,对内存泄漏和堆栈溢出情况下无法正常执行结束的程序进 行分析;切片分析模块主要是对依赖图进行动态切片,切片之后的结果以执行了程序哪几 行的形式反馈给用户,用户根据切片结果,对其进行初步分析;可疑度统计模块主要负责计 算每条可疑语句块的可疑度。 在对源程序进行切片时,并非漫无目的的寻找切片兴趣点,而是,通过先寻找程序中存 在的谓词,对其结果进行强制改变,从而使程序的执行结果发生变化,产生关键谓词,再对 关键谓词进行切片,其次,针对程序不包含谓词的情况提出了一种二分断点算法,精确的计 算出程序崩溃的时候的切片语句,该方法的具体步骤如下:
1.程序状态修改 1. 1、有谓词情况 1) 读取源程序,每次读取一行,用正则表达式进行谓词匹配,并记录匹配到的谓词,若 程序无谓词,则跳转到步骤1. 2 ; 2) 修改谓词的取值,修改后有两种情况:第一种,修改谓词后程序的执行状态没发生 改变,此时继续查找下一个谓词;第二种,程序的执行状态发生改变,这时记录下使得程序 状态发生改变的谓词,取得所有谓词后,执行步骤2 ; 1. 2、无谓词情况:对于错误的测试用例,程序的结果有两种,第一种是产生错误的输出 结果,第二种是程序无法正常执行结束,中途程序报错并崩溃直接退出执行,报告异常; 1) 对于第一种,直接从错误的输出结果的变量开始进行后向切片,得到影响该变量的 语句块; 2) 对于第二种,使用二分法设置断点; 3) 在得到程序执行结束后的最后记录的断点和此断点的前一个记录的断点之后,取两 者之间的最小值,在最小的断点之后插入一条程序强制停止执行的语句,然后再对其进行 切片; 4) 得到程序的切片结果之后,将其加上1. 2. 3步骤得到的两个断点之间的所有语句, 并记录为新的切片结果,送入下一个模块分析; 2、 切片分析: 1) 运行源程序产生源程序的src.be文件; 2) 产生每个基本块的追踪代码; 3) 链接动态库产生可执行exe文件; 4) 运行后缀名为.trace,exe的可执行文件,产生切片结果; 5) 对错误的测试用例的切片结果取交集Uf; 6) 对成功的测试用例的切片结果取交集Us; 7) 取叫和UJ勺交集Uf+s;再计算UFn=Uf-Uf+s; 8)将Uf+S中的语句设其可疑度为0;将(UF1)U(UF2) ? ? *U(UFn)=叫中的语句设其可 疑度为最高100%,可疑度最高的语句将被优先检查,剩下的未被检查的语句uf,=Uf-叫将 被送到可疑度分析模块进行下一步分析; 3、 可疑度分析: 1) 可疑度分析矩阵第一列为Uf,的所有语句,这些语句都是切片处理后的语句,相比较 和直接使用统计分析的方法有很大的简化度; 2) 可疑度分析矩阵第一行为所有执行的测试用例; 3) 可疑度分析矩阵的每个元素为执行这个测试用例的时候是否执行过这条语句,1为 执行,〇为未执行; 4) 对于每个测试用例的每条语句,计算执行了这个语句的失败和成功的测试用例的个 数,f和s; 5)计算f和s占总失败测试用例的个数的比值fail%和占总成功测试用例的比值 success%; 6) 最后计算每条语句的可疑度,公式如下:
4、 错误定位 根据每条语句的可疑度,由高到低,分别检查每条语句,检查到错误语句后记录下出错 语句。
【专利摘要】本发明是一种基于动态切片的轻量级错误定位方法,最顶层是测试用例生成模块,主要负责测试用例的自动化生成。第二层是程序状态修改模块,主要负责动态地改变谓词的结果,以产生值得进行切片的关键谓词。其余模块分别是断点分析模块、切片分析模块和可疑度统计模块;其中,断点分析模块主要负责分析程序崩溃的情况,对内存泄漏和堆栈溢出情况下无法正常执行结束的程序进行分析;切片分析模块主要是对依赖图进行动态切片,切片之后的结果以执行了程序哪几行的形式反馈给用户,用户根据切片结果,对其进行初步分析;可疑度统计模块主要负责计算每条可疑语句块的可疑度。大大减少了切片的工作量。精确的计算出程序崩溃时候的切片语句。
【IPC分类】G06F11-36
【公开号】CN104572474
【申请号】CN201510050259
【发明人】张迎周, 滕庆亚, 马凤娇, 居友道, 徐曼青, 高海燕, 徐晨晨, 闫丽
【申请人】南京邮电大学
【公开日】2015年4月29日
【申请日】2015年1月30日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1