[发明专利]一种基于动态切片的轻量级错误定位技术实现方法有效
申请号: | 201510050259.1 | 申请日: | 2015-01-30 |
公开(公告)号: | CN104572474B | 公开(公告)日: | 2017-09-29 |
发明(设计)人: | 张迎周;滕庆亚;马凤娇;居友道;徐曼青;高海燕;徐晨晨;闫丽 | 申请(专利权)人: | 南京邮电大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京知识律师事务所32207 | 代理人: | 汪旭东 |
地址: | 210046 江苏省*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 动态 切片 轻量级 错误 定位 技术 实现 方法 | ||
技术领域
本发明涉及一种错误定位的方法,主要从动态切片的过程中提取有用信息,再用轻量级的方法分析,为程序员提供错误语句块的可疑度排序,属于软件测试领域。
背景技术
软件调试需要程序员进行大量的人机交互。故障定位是调试过程中最为耗时和费力的活动之一,它通过审查源程序语义和结构,结合分析程序的执行过程及结果,辅助开发人员找到软件故障位置。研究人员提出了一系列自动化的故障定位方法,这些方法可分为静态方法和动态方法。静态方法利用程序的依赖关系、类型约束等信息来分析程序中的可能故障点;动态方法则通过测试程序,跟踪程序的执行轨迹和覆盖信息来进行故障定位。高效地定位软件故障可减轻程序员手工排查程序语句的工作量,提升调试速度和效率。
错误定位的2个阶段:1、找出值得被怀疑的语句2、从这些语句中再确定是否真正是错误语句。由第一阶段:高怀疑度语句需要先于低怀疑度语句被检查。由第二阶段:我们假定只要被程序员检查的有怀疑的语句都能找出其中的错误。错误定位方法繁多,但是归根结底可以分为3种:
1、基于行为特征对比的方法。2、基础程序状态修改的方法。3、基于程序依赖关系的方法。
程序行为特征,也被称为程序频谱(program spectra),是程序执行特征的统计信息。
基础程序状态修改的方法通常在程序执行时,获得并修改程序的状态,然后观察修改后的测试结果(成功/失败),进而找出对测试结果有影响的语句。
基于程序依赖关系的方法,例如符号执行,与执行实际的目标程序不同它仅依赖程序的源代码,以符号代替具体变量的值作为程序的输入数据。这种方法侧重于静态分析。而切片等方法则侧重于使用程序的动态依赖关系给出值得怀疑的语句的集合,这个集合除了包含错误语句外,还提供了一个供程序员理解的调试上下文。但通常这类集合也会包含一些冗余的语句,需要使用一些技术来化简集合。
发明内容
技术问题:本发明的目的是提供一种基于动态切片的轻量级错误定位技术实现方法,目前现有的错误定位技术主要从静态、动态和统计这3个方面单独分析,错位定位效率往往不能达到实际的要求。本发明利用程序切片中的动态切片方法,在取得程序切片之后先进行初步的切片分析,然后将结果送给轻量级错误定位模型,进行最后一步的统计分析,最后得出可疑度语句块的排名,并且同时保证了高精度和低误判率。
技术方案:本发明结合约束求解器,动态生成测试用例,再对程序进行动态切片和断点分析,利用切片后的结果,进行可疑度排序,最终提高错误定位的效率。
该发明由5个模块组成,其中,最顶层是测试用例生成模块,主要负责测试用例的自动化生成。中间是程序状态修改模块,主要负责动态的改变谓词的结果,以产生值得进行切片的关键谓词。其次是断点分析模块、切片分析模块和可疑度统计模块。其中,断点分析模块主要负责分析程序崩溃的情况,对无法正常执行结束的程序进行分析,决定了这个发明的健壮性。切片分析模块主要是对依赖图进行动态切片,切片之后的结果以执行了程序哪几行的形式反馈给用户,用户根据切片结果,对其进行初步分析。可疑度统计模块主要负责计算每条可疑语句块的可疑度。
有益效果:本发明在对源程序进行切片时,并非漫无目的的寻找切片兴趣点,而是,通过先寻找程序中存在的谓词,对其结果进行强制改变,从而使程序的执行结果发生变化,从而产生关键谓词,再对关键谓词进行切片,大大减少了切片的工作量。其次,本发明对程序不包含谓词的情况也作了详细的讨论,并提出了一种2分断点算法,精确的计算出程序崩溃时的切片语句,从而使得本发明适用于所有的程序。
精度高:基于程序频谱的轻量级错误定位方法,往往不考虑程序执行的动态依赖关系,所以导致了最后的可疑度语句块过于庞大。本发明优先对源程序进行切片,将有依赖关系包括控制依赖和数据依赖的语句块筛选了出来,然后再进行轻量级分析的时候就不会产生太多的语句块。
附图说明
图1是本发明方案的总体实施流程,包括5大模块,测试用例生成模块,程序状态修改模块,断点分析模块,切片分析模块和可疑度分析模块。
图2是本发明的测试用例生成模块,利用约束求解器生成测试用例并对其进行分类,最后送入程序状态修改模块。
图3是本发明的程序状态修改模块,主要工作是进行谓词分析和将部分没有谓词的程序送入断点分析模块。
图4是本发明的断点分析模块,此模块负责处理程序崩溃的情况。
图5是本发明的切片分析模块,负责生成源程序的切片结果,切片结果为执行过哪些和被切语句有关的语句。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京邮电大学,未经南京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510050259.1/2.html,转载请声明来源钻瓜专利网。