【技术实现步骤摘要】
本专利技术涉及程序验证领域,尤其涉及一种基于概率模型的程序错误检测方法及系统。
技术介绍
API使用协议是说明库函数之间调用顺序的一种程序约束,其经常在库函数发布文档中被遗漏,进而使得软件开发人员因错误的API使用方式造成各种软件错误,例如:调用java.util.Stack类的peek()函数之前,必须先调用push()函数,否则程序会因为空栈而抛出EmptyStackException异常;又比如调用java.util.Iteration类的next()函数之前,应该先调用hasNext(),否则会导致NoSuchElementException异常。据统计,Eclipse错误仓库中至少包含115个与函数调用缺失相关的软件错误。不仅如此,根据API使用协议还能够检测出对象未正确初始化以及资源泄露等类型的错误。当前,自动获得API使用协议的主要方法是从大量的API函数调用序列中,采用序列数据挖掘方法归纳出函数调用的序列模式。其中,采用概率模型进行API使用协议挖掘的方法具有广泛应用的前景。其原理是:采用程序静态分析或动态分析技术从客户端程序中提取大量的函数调用序列,然后从函数调用序列中归纳出采用概率自动机或马尔科夫模型等概率模型表示的API使用协议。与有限自动机等确定性模型相比,概率模型具有固有的抗噪能力,有望获得更高准确度的API使用协议。API使用协议的一个主要应用领域是程序错误检测。当前,基于概率 ...
【技术保护点】
一种基于概率模型的程序错误检测方法,其特征在于,包括以下步骤:S1、获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;S2、从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解概率模型中与该待检测序列最相似的函数调用序列集合,记作相似集合;并计算相似集合中各函数调用序列在概率模型中的联合概率;S3、根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案,包括:错误的函数调用名称、错误产生的位置;S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。
【技术特征摘要】
1.一种基于概率模型的程序错误检测方法,其特征在于,包括以下步骤:
S1、获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用
序列集合,记作待检测集合;
S2、从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,
求解概率模型中与该待检测序列最相似的函数调用序列集合,记作相似集合;
并计算相似集合中各函数调用序列在概率模型中的联合概率;
S3、根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中
每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,
组内错误报告按照函数调用序列的联合概率降序排列;
S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修
复方案,包括:错误的函数调用名称、错误产生的位置;
S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。
2.根据权利要求1所述的基于概率模型的程序错误检测方法,其特征在
于,步骤S1中的概率模型为API使用协议库,该概率模型由人为给出,或采
用自动化方法从程序中获得。
3.根据权利要求1所述的基于概率模型的程序错误检测方法,其特征在
于,步骤S2中的根据概率模型A验证单个待检测的函数调用序列q的正确性,
其具体方法为:
根据概率模型A和待检测序列q求解函数调用序列集合P,使得任意的函
数调用序列p∈P,满足下列条件:
a、设A*为去掉概率模型A中的概率后获得的确定性模型;
b、函数调用序列p能够由A*产生;
c、设p'为由A*产生的任一函数调用序列,则有δ(p,q)≤δ(p′,q),其中
δ(p,q)表示函数调用序列p和q之间的距离。
4.根据权利要求1所述的基于概率模型的程序错误检测方法,其特征在
于,步骤S2中计算联合概率的方法具体为:
对于任意的函数调用序列p∈函数调用序列集合P,根据概率模型计算p
的联合概率,联合概率为函数调用序列在概率模型中所对应路径上的概率的乘
积;根据该联合概率对P中所有的函数调用序列按照从大到小进行排序。
5.根据权利要求1所述的基于概率模型的程序错误检测方...
【专利技术属性】
技术研发人员:陈灯,魏巍,张彦铎,李晓林,李迅,于宝成,鲁统伟,闵峰,周华兵,朱锐,卢涛,彭丽,
申请(专利权)人:武汉工程大学,
类型:发明
国别省市:湖北;42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。