[发明专利]一种基于有限状态机的程序错误检测方法及系统在审
申请号: | 201510976002.9 | 申请日: | 2015-12-22 |
公开(公告)号: | CN105468530A | 公开(公告)日: | 2016-04-06 |
发明(设计)人: | 陈灯;魏巍;张彦铎;李晓林;李迅;周华兵;朱锐;卢涛;彭丽 | 申请(专利权)人: | 武汉工程大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 湖北武汉永嘉专利代理有限公司 42102 | 代理人: | 许美红 |
地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 有限状态机 程序 错误 检测 方法 系统 | ||
技术领域
本发明涉及程序验证领域,尤其涉及一种基于有限状态机的程序错误检测方法及系统。
背景技术
API使用协议是说明库函数之间调用顺序的一种程序约束,其经常在库函数发布文档中被遗漏,进而使得软件开发人员因错误的API使用方式造成各种软件错误,例如:调用java.util.Stack类的peek()函数之前,必须先调用push()函数,否则程序会因为空栈而抛出EmptyStackException异常;又比如调用java.util.Iteration类的next()函数之前,应该先调用hasNext(),否则会导致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()>,上述语言验证的方法将报告第四个函数调用write()处有错误并且认为其后的函数调用均为非法的函数调用,因为此时有限状态机已经到达终止状态。然而,该函数调用序列中的真实错误是不应该在三号位置调用函数close()。虽然三号位置和四号位置相邻,但是这两个函数调用可能分布于两个不同的函数内部或者两个不同的代码文件。这种不精确的错误定位,给软件开发人员带来了极大的困扰,降低了软件开发的效率;3、现有方法不能自动给出程序错误修复方案。
发明内容
本发明要解决的技术问题在于针对现有技术中难以转换复杂情况下的有限状态机形式的API使用协议,且错误定位不精确的缺陷,提供一种错误定位精确,且能自动修复错误的基于有限状态机的程序错误检测方法及系统。
本发明解决其技术问题所采用的技术方案是:
本发明提供一种基于有限状态机的程序错误检测方法,包括以下步骤:
S1、获取有限状态机和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;
S2、从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解有限状态机中与该待检测序列距离最短的函数调用序列,记作距离最短序列;
S3、比较待检测序列和距离最短序列进行错误检测与定位,若两者相同,则待检测序列为正确的函数调用序列;否则,待检测序列中含有错误的函数调用,此时以最少的编辑操作将待检测序列转换为距离最短序列;
S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案,包括:错误的函数调用名称、错误产生的位置;
S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。
进一步地,本发明的步骤S1中的有限状态机为API使用协议库,该有限状态机由人为给出,或采用自动化方法从程序中获得。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉工程大学,未经武汉工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510976002.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种挖掘漏洞的方法、装置及电子设备
- 下一篇:基于数据组合的测试方法及装置