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

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

Info

Publication number
CN104572474A
CN104572474A CN201510050259.1A CN201510050259A CN104572474A CN 104572474 A CN104572474 A CN 104572474A CN 201510050259 A CN201510050259 A CN 201510050259A CN 104572474 A CN104572474 A CN 104572474A
Authority
CN
China
Prior art keywords
program
statement
predicate
analysis
module
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
Application number
CN201510050259.1A
Other languages
English (en)
Other versions
CN104572474B (zh
Inventor
张迎周
滕庆亚
马凤娇
居友道
徐曼青
高海燕
徐晨晨
闫丽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Post and Telecommunication University
Original Assignee
Nanjing Post and Telecommunication University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nanjing Post and Telecommunication University filed Critical Nanjing Post and Telecommunication University
Priority to CN201510050259.1A priority Critical patent/CN104572474B/zh
Publication of CN104572474A publication Critical patent/CN104572474A/zh
Application granted granted Critical
Publication of CN104572474B publication Critical patent/CN104572474B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明是一种基于动态切片的轻量级错误定位方法,最顶层是测试用例生成模块,主要负责测试用例的自动化生成。第二层是程序状态修改模块,主要负责动态地改变谓词的结果,以产生值得进行切片的关键谓词。其余模块分别是断点分析模块、切片分析模块和可疑度统计模块;其中,断点分析模块主要负责分析程序崩溃的情况,对内存泄漏和堆栈溢出情况下无法正常执行结束的程序进行分析;切片分析模块主要是对依赖图进行动态切片,切片之后的结果以执行了程序哪几行的形式反馈给用户,用户根据切片结果,对其进行初步分析;可疑度统计模块主要负责计算每条可疑语句块的可疑度。大大减少了切片的工作量。精确的计算出程序崩溃时候的切片语句。

Description

一种基于动态切片的轻量级错误定位技术实现方法
技术领域
本发明涉及一种错误定位的方法,主要从动态切片的过程中提取有用信息,再用轻量级的方法分析,为程序员提供错误语句块的可疑度排序,属于软件测试领域。
背景技术
软件调试需要程序员进行大量的人机交互。故障定位是调试过程中最为耗时和费力的活动之一,它通过审查源程序语义和结构,结合分析程序的执行过程及结果,辅助开发人员找到软件故障位置。研究人员提出了一系列自动化的故障定位方法,这些方法可分为静态方法和动态方法。静态方法利用程序的依赖关系、类型约束等信息来分析程序中的可能故障点;动态方法则通过测试程序,跟踪程序的执行轨迹和覆盖信息来进行故障定位。高效地定位软件故障可减轻程序员手工排查程序语句的工作量,提升调试速度和效率。
错误定位的2个阶段:1、找出值得被怀疑的语句2、从这些语句中再确定是否真正是错误语句。由第一阶段:高怀疑度语句需要先于低怀疑度语句被检查。由第二阶段:我们假定只要被程序员检查的有怀疑的语句都能找出其中的错误。错误定位方法繁多,但是归根结底可以分为3种:
1、基于行为特征对比的方法。2、基础程序状态修改的方法。3、基于程序依赖关系的方法。
程序行为特征,也被称为程序频谱(program spectra),是程序执行特征的统计信息。
基础程序状态修改的方法通常在程序执行时,获得并修改程序的状态,然后观察修改后的测试结果(成功/失败),进而找出对测试结果有影响的语句。
基于程序依赖关系的方法,例如符号执行,与执行实际的目标程序不同它仅依赖程序的源代码,以符号代替具体变量的值作为程序的输入数据。这种方法侧重于静态分析。而切片等方法则侧重于使用程序的动态依赖关系给出值得怀疑的语句的集合,这个集合除了包含错误语句外,还提供了一个供程序员理解的调试上下文。但通常这类集合也会包含一些冗余的语句,需要使用一些技术来化简集合。
发明内容
技术问题:本发明的目的是提供一种基于动态切片的轻量级错误定位技术实现方法,目前现有的错误定位技术主要从静态、动态和统计这3个方面单独分析,错位定位效率往往不能达到实际的要求。本发明利用程序切片中的动态切片方法,在取得程序切片之后先进行初步的切片分析,然后将结果送给轻量级错误定位模型,进行最后一步的统计分析,最后得出可疑度语句块的排名,并且同时保证了高精度和低误判率。
技术方案:本发明结合约束求解器,动态生成测试用例,再对程序进行动态切片和断点分析,利用切片后的结果,进行可疑度排序,最终提高错误定位的效率。
该发明由5个模块组成,其中,最顶层是测试用例生成模块,主要负责测试用例的自动化生成。中间是程序状态修改模块,主要负责动态的改变谓词的结果,以产生值得进行切片的关键谓词。其次是断点分析模块、切片分析模块和可疑度统计模块。其中,断点分析模块主要负责分析程序崩溃的情况,对无法正常执行结束的程序进行分析,决定了这个发明的健壮性。切片分析模块主要是对依赖图进行动态切片,切片之后的结果以执行了程序哪几行的形式反馈给用户,用户根据切片结果,对其进行初步分析。可疑度统计模块主要负责计算每条可疑语句块的可疑度。
有益效果:本发明在对源程序进行切片时,并非漫无目的的寻找切片兴趣点,而是,通过先寻找程序中存在的谓词,对其结果进行强制改变,从而使程序的执行结果发生变化,从而产生关键谓词,再对关键谓词进行切片,大大减少了切片的工作量。其次,本发明对程序不包含谓词的情况也作了详细的讨论,并提出了一种2分断点算法,精确的计算出程序崩溃时的切片语句,从而使得本发明适用于所有的程序。
精度高:基于程序频谱的轻量级错误定位方法,往往不考虑程序执行的动态依赖关系,所以导致了最后的可疑度语句块过于庞大。本发明优先对源程序进行切片,将有依赖关系包括控制依赖和数据依赖的语句块筛选了出来,然后再进行轻量级分析的时候就不会产生太多的语句块。
附图说明
图1是本发明方案的总体实施流程,包括5大模块,测试用例生成模块,程序状态修改模块,断点分析模块,切片分析模块和可疑度分析模块。
图2是本发明的测试用例生成模块,利用约束求解器生成测试用例并对其进行分类,最后送入程序状态修改模块。
图3是本发明的程序状态修改模块,主要工作是进行谓词分析和将部分没有谓词的程序送入断点分析模块。
图4是本发明的断点分析模块,此模块负责处理程序崩溃的情况。
图5是本发明的切片分析模块,负责生成源程序的切片结果,切片结果为执行过哪些和被切语句有关的语句。
图6是本发明的可疑度分析模块,主要负责计算所有具有可疑度的语句的具体的可疑度,此可疑度将直接辅助程序员进行错误定位。
具体实施方式
1.程序状态修改
1.1、有谓词情况
(1)读取源程序,每次读取一行,用正则表达式进行谓词匹配,并记录匹配到的谓词。若程序无谓词,则跳转到步骤1.2。
(2)修改谓词的取值。修改后有两种情况:第一种,修改谓词后程序的执行状态没发生改变,此时继续查找下一个谓词;第二种,程序的执行状态发生改变,这时记录下使得程序状态发生改变的谓词,取得所有谓词后,执行步骤2。
1.2、无谓词情况:对于错误的测试用例,程序的结果有两种,第一种是产生错误的输出结果,第二是程序无法正常执行结束,中途崩溃报告异常。
(1)对于第一种,直接从错误的输出结果的变量开始进行后向切片,得到影响该变量的语句块。
(2)对于第二种,使用二分法设置断点,其基本算法是:
(3)在得到程序的LastBreakpoint(CurrentBreakpoin的前一个记录的断点)和CurrentBreakpoin(程序执行结束后的最后记录的断点)之后,取两者之间的最小值,另其为minBreakpoint,在minBreakpoint之后插入一条程序强制停止执行的语句,然后再对minBreakpoint这条语句进行切片。
(4)得到程序的切片结果之后,将其加上LastBreakpoint和CurrentBreakpoin之间的所有语句,并记录为新的切片结果,送入下一个模块分析。
2、切片分析:
改变谓词后程序的状态也改变则称这个谓词为关键谓词。关键谓词往往与程序错误有密切的关系。进而我们可以对关键谓词切片。
定义:给定程序P、程序点p和变量集V,其切片包含当程序执行到p时,P中所有直接或间接对V中变量有影响的程序片断。其中,<p,V>称作切片标准。简单地说,就是通过对一个程序实行切片获得一个程序切片,该切片包含了可能对位于一个特定程序点的变量的值有影响的全部语句。动态切片可以定义为一个执行历史和一条语句在执行历史中的一次出现。
(1)运行源程序产生源程序的src.bc文件;
(2)产生每个基本块的追踪代码;
(3)链接动态库产生可执行exe文件;
(4)运行后缀名为.trace.exe的可执行文件。产生切片结果;
(5)对错误的测试用例的切片结果取交集Uf
(6)对成功的测试用例的切片结果取交集Us
(7)取Uf和Us的交集Uf+s;再计算UFn=Uf-Uf+s
(8)将Uf+s中的语句设其可疑度为0;将(UF1)U(UF2)···(UFn)=UF中的语句设其可疑度为最高(100%),可疑度最高的语句将被优先检查。剩下的未被检查的语句Uf’=Uf-UF将被送到可疑度分析模块进行下一步分析。
3、可疑度分析:
基于统计的错误定位方法以参数统计方法为主,通过计算成功测试用例总数,失败测试用例总数,测试用例总数,被覆盖的语句和未被覆盖的语句执行的成功测试用例总数和失败测试用例总数,然后根据可疑度计算公式,计算出每条语句的可疑度,从而进行错位定位。得到Uf’后,建立可疑度分析矩阵。
(1)可疑度分析矩阵第一列为Uf’的所有语句,这些语句都是切片处理后的语句,相比较和直接使用统计分析的方法有很大的简化度。
(2)可疑度分析矩阵第一行为所有执行的测试用例。
(3)可疑度分析矩阵的每个元素为执行这个测试用例的时候是否执行过这条语句,1为执行,0为未执行。
(4)对于每个测试用例的每条语句,计算执行了这个语句的失败和成功的测试用例的个数,f和s。
(5)计算f和s占总失败测试用例的个数的比值fail%和占总成功测试用例的比值success%。
(6)最后计算每条语句的可疑度,公式如下:
T ( s ) = fail % fail % + success %
(7)根据可疑度,由高到低,分别检查每条语句,检查到错误就终止。

Claims (1)

1.一种基于动态切片的轻量级错误定位方法,其特征在于该方法由5个模块组成,其中,
最顶层是测试用例生成模块,主要负责测试用例的自动化生成。
第二层是程序状态修改模块,主要负责动态地改变谓词的结果,以产生值得进行切片的关键谓词。
其余模块分别是断点分析模块、切片分析模块和可疑度统计模块;其中,断点分析模块主要负责分析程序崩溃的情况,对内存泄漏和堆栈溢出情况下无法正常执行结束的程序进行分析;切片分析模块主要是对依赖图进行动态切片,切片之后的结果以执行了程序哪几行的形式反馈给用户,用户根据切片结果,对其进行初步分析;可疑度统计模块主要负责计算每条可疑语句块的可疑度。
在对源程序进行切片时,并非漫无目的的寻找切片兴趣点,而是,通过先寻找程序中存在的谓词,对其结果进行强制改变,从而使程序的执行结果发生变化,产生关键谓词,再对关键谓词进行切片,其次,针对程序不包含谓词的情况提出了一种二分断点算法,精确的计算出程序崩溃的时候的切片语句,该方法的具体步骤如下:
1.程序状态修改
1.1、有谓词情况
1)读取源程序,每次读取一行,用正则表达式进行谓词匹配,并记录匹配到的谓词,若程序无谓词,则跳转到步骤1.2;
2)修改谓词的取值,修改后有两种情况:第一种,修改谓词后程序的执行状态没发生改变,此时继续查找下一个谓词;第二种,程序的执行状态发生改变,这时记录下使得程序状态发生改变的谓词,取得所有谓词后,执行步骤2;
1.2、无谓词情况:对于错误的测试用例,程序的结果有两种,第一种是产生错误的输出结果,第二种是程序无法正常执行结束,中途程序报错并崩溃直接退出执行,报告异常;
1)对于第一种,直接从错误的输出结果的变量开始进行后向切片,得到影响该变量的语句块;
2)对于第二种,使用二分法设置断点;
3)在得到程序执行结束后的最后记录的断点和此断点的前一个记录的断点之后,取两者之间的最小值,在最小的断点之后插入一条程序强制停止执行的语句,然后再对其进行切片;
4)得到程序的切片结果之后,将其加上1.2.3步骤得到的两个断点之间的所有语句,并记录为新的切片结果,送入下一个模块分析;
2、切片分析:
1)运行源程序产生源程序的src.bc文件;
2)产生每个基本块的追踪代码;
3)链接动态库产生可执行exe文件;
4)运行后缀名为.trace.exe的可执行文件,产生切片结果;
5)对错误的测试用例的切片结果取交集Uf
6)对成功的测试用例的切片结果取交集Us
7)取Uf和Us的交集Uf+s;再计算UFn=Uf-Uf+s
8)将Uf+s中的语句设其可疑度为0;将(UF1)U(UF2)···U(UFn)=UF中的语句设其可疑度为最高100%,可疑度最高的语句将被优先检查,剩下的未被检查的语句Uf’=Uf-UF将被送到可疑度分析模块进行下一步分析;
3、可疑度分析:
1)可疑度分析矩阵第一列为Uf’的所有语句,这些语句都是切片处理后的语句,相比较和直接使用统计分析的方法有很大的简化度;
2)可疑度分析矩阵第一行为所有执行的测试用例;
3)可疑度分析矩阵的每个元素为执行这个测试用例的时候是否执行过这条语句,1为执行,0为未执行;
4)对于每个测试用例的每条语句,计算执行了这个语句的失败和成功的测试用例的个数,f和s;
5)计算f和s占总失败测试用例的个数的比值fail%和占总成功测试用例的比值success%;
6)最后计算每条语句的可疑度,公式如下:
T ( s ) = fail % fail % + success %
4、错误定位
根据每条语句的可疑度,由高到低,分别检查每条语句,检查到错误语句后记录下出错语句。2 -->
CN201510050259.1A 2015-01-30 2015-01-30 一种基于动态切片的轻量级错误定位技术实现方法 Expired - Fee Related CN104572474B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510050259.1A CN104572474B (zh) 2015-01-30 2015-01-30 一种基于动态切片的轻量级错误定位技术实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510050259.1A CN104572474B (zh) 2015-01-30 2015-01-30 一种基于动态切片的轻量级错误定位技术实现方法

Publications (2)

Publication Number Publication Date
CN104572474A true CN104572474A (zh) 2015-04-29
CN104572474B CN104572474B (zh) 2017-09-29

Family

ID=53088606

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510050259.1A Expired - Fee Related CN104572474B (zh) 2015-01-30 2015-01-30 一种基于动态切片的轻量级错误定位技术实现方法

Country Status (1)

Country Link
CN (1) CN104572474B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107003928A (zh) * 2014-11-26 2017-08-01 微软技术许可有限责任公司 性能异常诊断
CN109815153A (zh) * 2019-02-19 2019-05-28 北京天诚同创电气有限公司 Plc程序及电机启停控制程序的静态切片方法和装置
CN111258901A (zh) * 2020-01-17 2020-06-09 北京科技大学 一种微服务组合程序的故障定位方法及系统
CN107643905B (zh) * 2017-09-13 2021-01-12 扬州大学 一种面向软件版本一致性缺陷的自动修复方法
CN112965894A (zh) * 2021-02-04 2021-06-15 重庆大学 一种基于上下文感知的缺陷定位方法
CN114741302A (zh) * 2022-04-19 2022-07-12 杭州金衡和信息科技有限公司 一种基于变量分离的软件bug定位方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102750223A (zh) * 2012-06-06 2012-10-24 东南大学 一种基于面向对象程序切片谱的错误定位方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102750223A (zh) * 2012-06-06 2012-10-24 东南大学 一种基于面向对象程序切片谱的错误定位方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
XIANGYU ZHANG,NEELAM GUPTA,RAJIV GUPTA: "Locating faulty code by multiple points slicing", 《SOFTWARE PRACTICE & EXPERIENCE》 *
张迎周等: "一种基于程序切片的缓冲区溢出漏洞检测方法", 《2008中国计算机大会》 *
曹鹤玲,姜淑娟,鞠小林: "软件错误定位研究综述", 《计算机科学》 *
辛良,姜淑娟: "基于关键谓词的程序错误定位方法", 《计算机工程》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107003928A (zh) * 2014-11-26 2017-08-01 微软技术许可有限责任公司 性能异常诊断
CN107003928B (zh) * 2014-11-26 2020-03-20 微软技术许可有限责任公司 性能异常诊断
CN107643905B (zh) * 2017-09-13 2021-01-12 扬州大学 一种面向软件版本一致性缺陷的自动修复方法
CN109815153A (zh) * 2019-02-19 2019-05-28 北京天诚同创电气有限公司 Plc程序及电机启停控制程序的静态切片方法和装置
CN109815153B (zh) * 2019-02-19 2024-01-26 北京天诚同创电气有限公司 Plc程序及电机启停控制程序的静态切片方法和装置
CN111258901A (zh) * 2020-01-17 2020-06-09 北京科技大学 一种微服务组合程序的故障定位方法及系统
CN111258901B (zh) * 2020-01-17 2021-03-16 北京科技大学 一种微服务组合程序的故障定位方法及系统
CN112965894A (zh) * 2021-02-04 2021-06-15 重庆大学 一种基于上下文感知的缺陷定位方法
CN112965894B (zh) * 2021-02-04 2023-07-07 重庆大学 一种基于上下文感知的缺陷定位方法
CN114741302A (zh) * 2022-04-19 2022-07-12 杭州金衡和信息科技有限公司 一种基于变量分离的软件bug定位方法及装置

Also Published As

Publication number Publication date
CN104572474B (zh) 2017-09-29

Similar Documents

Publication Publication Date Title
CN110287052B (zh) 一种异常任务的根因任务确定方法及装置
CN104572474A (zh) 一种基于动态切片的轻量级错误定位技术实现方法
US10289532B2 (en) Method and system for providing delta code coverage information
US10678673B2 (en) Software program fault localization
Mao et al. Slice-based statistical fault localization
US9983984B2 (en) Automated modularization of graphical user interface test cases
US8793674B2 (en) Computer-guided holistic optimization of MapReduce applications
US10452515B2 (en) Automated root cause detection using data flow analysis
Zhang et al. Non-parametric statistical fault localization
US20140115565A1 (en) Test similarity detection with method call sequence analysis
US8904352B2 (en) Systems and methods for processing source code during debugging operations
CN107016018B (zh) 数据库索引创建方法及装置
EP3674918B1 (en) Column lineage and metadata propagation
CN102750223B (zh) 一种基于面向对象程序切片谱的错误定位方法
US10761961B2 (en) Identification of software program fault locations
CN110515826A (zh) 一种基于次数频谱与神经网络算法的软件缺陷定位方法
CN105700893A (zh) 基于改进系统依赖图的llvm ir程序切片方法
US20230086361A1 (en) Automatic performance evaluation in continuous integration and continuous delivery pipeline
KR101830936B1 (ko) 데이터베이스와 애플리케이션을 위한 웹기반 성능개선 시스템
US20100131497A1 (en) Method for determining which of a number of test cases should be run during testing
CN103150254B (zh) 基于状态依赖概率建模的软件错误定位方法
Merchant et al. Tool for performance tuning and regression analyses of HPC systems and applications
US20200364137A1 (en) Test case generation apparatus, test case generation method, and computer readable medium
CN113901094B (zh) 一种数据处理方法、装置、设备及存储介质
Chen et al. Proverr: System level statistical fault diagnosis using dependency model

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170929

CF01 Termination of patent right due to non-payment of annual fee