一种基于有限状态机的程序错误检测方法及系统技术方案

技术编号:13142683 阅读:93 留言:0更新日期:2016-04-07 02:56
本发明专利技术公开了一种基于有限状态机的程序错误检测方法及系统,该方法包括以下步骤:S1、获取有限状态机和待检测程序,从待检测程序中提取待检测的函数调用序列集合;S2、从待检测集合中获取单个待检测的函数调用序列,求解有限状态机中与该待检测序列距离最短的函数调用序列;S3、比较待检测序列和距离最短序列进行错误检测与定位;S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案;S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。本发明专利技术没有协议转换造成的开销和精度损失,能够准确的定位到程序错误的产生点,具有较高的定位精度,并且能够自动生成错误修复方案。

【技术实现步骤摘要】

本专利技术涉及程序验证领域,尤其涉及一种基于有限状态机的程序错误检测方法及 系统。
技术介绍
API使用协议是说明库函数之间调用顺序的一种程序约束,其经常在库函数发布 文档中被遗漏,进而使得软件开发人员因错误的API使用方式造成各种软件错误,例如:调 用java.util. Stack类的peek()函数之前,必须先调用push()函数,否则程序会因为空栈而 抛出EmptyStackException异常;又比如调用java .util · Iteration类的next 〇函数之前, 应该先调用hasNextO,否则会导致NoSuchElementException异常。据统计,Eclipse错误仓 库中至少包含115个与函数调用缺失相关的软件错误。不仅如此,根据API使用协议还能够 检测出对象未正确初始化以及资源泄露等类型的错误。 当前,自动获得API使用协议的主要方法是从大量的API函数调用序列中,采用序 列数据挖掘方法归纳出函数调用的序列模式。其中,采用有限状态机描述挖掘的函数调用 序列模式是一种主流方式。其原理是:将函数调用序列看作是语言的句子,将API使用协议 看作是能够用有限状态机描述的语法,则从函数调用序列集合归纳出API使用协议的挖掘 问题转换为了已知句子集合,推理出能够产生这些句子的语法的语法推理问题。自动挖掘 API使用协议的主要目的之一是:根据获得的API使用协议进行程序错误检测。当前,基于有 限状态机形式的API使用协议进行程序错误检测的方法主要有以下两种:1、将有限状态机 形式的API使用协议转换为其它程序错误检测工具接受的形式进行错误检测,如:二元时序 约束<P,q>的形式或者谓词约束的形式;2、直接基于有限状态机,采用语言验证的方式:假 设A为一个有限状态机形式的API使用协议,方法首先从待检测程序P中提取函数调用序列 集合Q。对于任意的函数调用序列q£Q,如果q能够被A接受并终止于有限状态机的终止状 态,则q为正确的函数调用序列;否则,其中包含有错误且第一个不能正确匹配的函数调用 为错误产生点。 上述方法主要存在以下不足:1、当有限状态机形式的API使用协议高度复杂时,将 其转换为完全等价的其它形式是一项耗时且具有挑战性的工作;2、基于语言验证的方法虽 然不需要进行形式转换,但是其在某些情况下不能准确的定位到程序错误产生点。如图1所 示的有限状态机形式的API使用协议为例,给定包含有错误的函数调用序列〈 FileOutputStream( ),write〇, close〇,write(),write(),write 〇, close 〇>,上述语言 验证的方法将报告第四个函数调用writeO处有错误并且认为其后的函数调用均为非法的 函数调用,因为此时有限状态机已经到达终止状态。然而,该函数调用序列中的真实错误是 不应该在三号位置调用函数closeO。虽然三号位置和四号位置相邻,但是这两个函数调用 可能分布于两个不同的函数内部或者两个不同的代码文件。这种不精确的错误定位,给软 件开发人员带来了极大的困扰,降低了软件开发的效率;3、现有方法不能自动给出程序错 误修复方案。
技术实现思路
本专利技术要解决的技术问题在于针对现有技术中难以转换复杂情况下的有限状态 机形式的API使用协议,且错误定位不精确的缺陷,提供一种错误定位精确,且能自动修复 错误的基于有限状态机的程序错误检测方法及系统。 本专利技术解决其技术问题所采用的技术方案是: 本专利技术提供一种基于有限状态机的程序错误检测方法,包括以下步骤: S1、获取有限状态机和待检测程序,从待检测程序中提取待检测的函数调用序列 集合,记作待检测集合; S2、从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解有限 状态机中与该待检测序列距离最短的函数调用序列,记作距离最短序列; S3、比较待检测序列和距离最短序列进行错误检测与定位,若两者相同,则待检测 序列为正确的函数调用序列;否则,待检测序列中含有错误的函数调用,此时以最少的编辑 操作将待检测序列转换为距离最短序列; S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案, 包括:错误的函数调用名称、错误产生的位置; S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。 进一步地,本专利技术的步骤S1中的有限状态机为API使用协议库,该有限状态机由人 为给出,或采用自动化方法从程序中获得。 进一步地,本专利技术的步骤S1中待检测程序的提供形式包括:程序源代码、可执行程 序或其它能够提取出函数调用序列的程序。 进一步地,本专利技术的步骤S2中使用编辑距离作为求解最短距离时的度量。进一步地,本专利技术的步骤S3中检测到的程序错误包括:对象未正确初始化、资源泄 露和API函数调用缺失。 本专利技术提供一种基于有限状态机的程序错误检测系统,包括: 程序分析器单元,用于获取有限状态机和待检测程序,从待检测程序中提取待检 测的函数调用序列集合,记作待检测集合; API使用协议库单元,用于为系统提供有限状态机描述的API使用协议,用户可以 向协议库中添加自定义的协议,有限状态机的状态或迀移表示函数调用; 正确函数调用序列求解器单元,用于从待检测集合中获取单个待检测的函数调用 序列,记作待检测序列,求解有限状态机中与该待检测序列距离最短的函数调用序列,记作 距离最短序列; 函数调用序列比较器单元,用于比较待检测序列和距离最短序列进行错误检测与 定位,若两者相同,则待检测序列为正确的函数调用序列;否则,待检测序列中含有错误的 函数调用,此时以最少的编辑操作将待检测序列转换为距离最短序列; 程序错误报告器单元,用于对程序错误及修复方法进行格式化输出。 进一步地,本专利技术的所述程序分析器单元包括程序静态分析器、程序动态分析器 和二者结合的混合程序分析器。 本专利技术产生的有益效果是:本专利技术的基于有限状态机的程序错误检测方法,通过 直接以有限状态机形式的API使用协议作为输入,没有协议转换造成的开销和精度损失;进 而在有限状态机中求解得到距离最近的函数调用序列,与其比较找到错误发生的位置和修 复方案,该方法能够准确的定位到程序错误的产生点,具有较高的定位精度;并且能够自动 生成错误修复方案。【附图说明】下面将结合附图及实施例对本专利技术作进一步说明,附图中: 图1是本专利技术实施例的现有技术中有限状态机形式的API使用协议; 图2是本专利技术实施例的基于有限状态机的程序错误检测方法的流程图; 图3是本专利技术实施例的基于有限状态机的程序错误检测方法的具体操作步骤流程 图; 图4是本专利技术实施例的基于有限状态机的程序错误检测系当前第1页1 2 3 本文档来自技高网
...
一种基于有限状态机的程序错误检测方法及系统

【技术保护点】
一种基于有限状态机的程序错误检测方法,其特征在于,包括以下步骤:S1、获取有限状态机和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;S2、从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解有限状态机中与该待检测序列距离最短的函数调用序列,记作距离最短序列;S3、比较待检测序列和距离最短序列进行错误检测与定位,若两者相同,则待检测序列为正确的函数调用序列;否则,待检测序列中含有错误的函数调用,此时以最少的编辑操作将待检测序列转换为距离最短序列;S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案,包括:错误的函数调用名称、错误产生的位置;S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈灯魏巍张彦铎李晓林李迅周华兵朱锐卢涛彭丽
申请(专利权)人:武汉工程大学
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1