CN105608006B - 一种基于概率模型的程序错误检测方法及系统 - Google Patents

一种基于概率模型的程序错误检测方法及系统 Download PDF

Info

Publication number
CN105608006B
CN105608006B CN201510982321.0A CN201510982321A CN105608006B CN 105608006 B CN105608006 B CN 105608006B CN 201510982321 A CN201510982321 A CN 201510982321A CN 105608006 B CN105608006 B CN 105608006B
Authority
CN
China
Prior art keywords
detected
sequence
calling sequence
function calling
function
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.)
Expired - Fee Related
Application number
CN201510982321.0A
Other languages
English (en)
Other versions
CN105608006A (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.)
Wuhan Institute of Technology
Original Assignee
Wuhan Institute of Technology
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 Wuhan Institute of Technology filed Critical Wuhan Institute of Technology
Priority to CN201510982321.0A priority Critical patent/CN105608006B/zh
Publication of CN105608006A publication Critical patent/CN105608006A/zh
Application granted granted Critical
Publication of CN105608006B publication Critical patent/CN105608006B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于概率模型的程序错误检测方法及系统,该方法包括以下步骤:S1、获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合;S2、获取单个待检测的函数调用序列,求解最相似的函数调用序列集合,并计算联合概率;S3、根据相似集合对该待检测序列进行检测并生成修复方案;S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案;S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。本发明无需处理概率模型转换到确定性模型时的阈值选择问题,能够快速的检测程序中的错误,且检测准确率高。

Description

一种基于概率模型的程序错误检测方法及系统
技术领域
本发明涉及程序验证领域,尤其涉及一种基于概率模型的程序错误检测方法及系统。
背景技术
API使用协议是说明库函数之间调用顺序的一种程序约束,其经常在库函数发布文档中被遗漏,进而使得软件开发人员因错误的API使用方式造成各种软件错误,例如:调用java.util.Stack类的peek()函数之前,必须先调用push()函数,否则程序会因为空栈而抛出EmptyStackException异常;又比如调用java.util.Iteration类的next()函数之前,应该先调用hasNext(),否则会导致NoSuchElementException异常。据统计,Eclipse错误仓库中至少包含115个与函数调用缺失相关的软件错误。不仅如此,根据API使用协议还能够检测出对象未正确初始化以及资源泄露等类型的错误。
当前,自动获得API使用协议的主要方法是从大量的API函数调用序列中,采用序列数据挖掘方法归纳出函数调用的序列模式。其中,采用概率模型进行API使用协议挖掘的方法具有广泛应用的前景。其原理是:采用程序静态分析或动态分析技术从客户端程序中提取大量的函数调用序列,然后从函数调用序列中归纳出采用概率自动机或马尔科夫模型等概率模型表示的API使用协议。与有限自动机等确定性模型相比,概率模型具有固有的抗噪能力,有望获得更高准确度的API使用协议。API使用协议的一个主要应用领域是程序错误检测。当前,基于概率模型API使用协议进行程序验证的主要方法是将概率模型转换为有限自动机等确定性模型,然后采用相应的方法进行错误检测。该方法存在的主要问题是选择理想的概率阈值将概率模型转换为确定性模型是一项困难的工作。不合适的概率阈值会损失API使用协议的精度,从而降低程序错误检测的准确性。
发明内容
本发明要解决的技术问题在于针对现有技术中程序错误检测中概率阈值难以确定的缺陷,提供一种无需确定概率阈值,且检测准确率高的基于概率模型的程序错误检测方法及系统。
本发明解决其技术问题所采用的技术方案是:
本发明提供一种基于概率模型的程序错误检测方法,包括以下步骤:
S1、获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;
S2、从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解概率模型中与该待检测序列最相似的函数调用序列集合,记作相似集合;并计算相似集合中各函数调用序列在概率模型中的联合概率;
S3、根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;
S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案,包括:错误的函数调用名称、错误产生的位置;
S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。
进一步地,本发明的步骤S1中的概率模型为API使用协议库,该概率模型由人为给出,或采用自动化方法从程序中获得。
进一步地,本发明的步骤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之间的距离。
进一步地,本发明的步骤S2中计算联合概率的方法具体为:
对于任意的函数调用序列p∈函数调用序列集合P,根据概率模型计算p的联合概率,联合概率为函数调用序列在概率模型中所对应路径上的概率的乘积;根据该联合概率对P中所有的函数调用序列按照从大到小进行排序。
进一步地,本发明的步骤S3中对待检测序列进行检测和修复的具体方法为:
按照联合概率从大到小依次获取函数调用序列集合P中函数调用序列p,比较函数调用序列p和待检测序列q,若二者相同,则q为正确的函数调用序列;否则,其中包含有错误;以最少的编辑操作将q转换为p,实施操作的位置和方法即为错误产生点和修复方案。
本发明提供一种基于概率模型的程序错误检测系统,包括:
程序分析器单元,用于获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;
API使用协议库单元,用于为系统提供概率模型描述的API使用协议,用户可以向协议库中添加自定义的协议,概率模型的状态或迁移表示函数调用;
最相似函数调用序列集合求解器单元,用于从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解概率模型中与该待检测序列最相似的函数调用序列集合,记作相似集合;并计算相似集合中各函数调用序列在概率模型中的联合概率;
序列错误检测器单元,用于根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;
程序错误报告器单元,用于对程序错误及修复方法进行格式化输出。
进一步地,本发明的所述程序分析器单元包括程序静态分析器、程序动态分析器和二者结合的混合程序分析器。
进一步地,本发明的所述最相似函数调用序列集合求解器单元求解的方法具体为:
根据概率模型A和待检测序列q求解函数调用序列集合P,使得任意的函数调用序列p∈P,满足下列条件:
a、设A*为去掉概率模型A中的概率后获得的确定性模型;
b、函数调用序列p能够由A*产生;
c、设p'为由A*产生的任一函数调用序列,则有δ(p,q)≤δ(p′,q),其中δ(p,q)表示函数调用序列p和q之间的距离。
本发明产生的有益效果是:本发明的基于概率模型的程序错误检测方法,直接以概率模型描述的API使用协议作为输入,无需处理概率模型转换到确定性模型时的阈值选择问题;对于每一条待检测的函数调用序列输出一组错误报告,错误报告按照概率模型的联合概率进行降序排列,进一步提高了软件开发人员定位及解决程序错误的效率;本方法能够快速的检测程序中的错误,且检测准确率高。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例的基于概率模型的程序错误检测方法的流程图;
图2是本发明实施例的基于概率模型的程序错误检测方法的工作流程的具体步骤;
图3是本发明实施例的基于概率模型的程序错误检测系统的结构框图;
图4是本发明实施例的基于概率模型的程序错误检测系统的一个实施例的结构框图;
图5是本发明实施例的基于概率模型的程序错误检测系统的概率自动机转换为自动机的原理图;
图6是本发明实施例的基于概率模型的程序错误检测系统的递归算法问题分解示意图(一);
图7是本发明实施例的基于概率模型的程序错误检测系统的递归算法问题分解示意图(二);
图8是本发明实施例的基于概率模型的程序错误检测系统的序列错误检测器单元工作流程图;
图9是本发明实施例的基于概率模型的程序错误检测系统的另一个实施例的结构框图;
图10是本发明实施例的基于概率模型的程序错误检测系统的具有终止概率的马尔科夫模型转换为自动机的原理图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明实施例的基于概率模型的程序错误检测方法,包括以下步骤:
S1、获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;
概率模型用于描述API使用协议,其状态或迁移表示函数调用。概率模型可以人为给出,也可以采用数据挖掘或其它自动化方法从程序中获得;
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之间的距离。
计算联合概率的方法具体为:
对于任意的函数调用序列p∈函数调用序列集合P,根据概率模型计算p的联合概率,联合概率为函数调用序列在概率模型中所对应路径上的概率的乘积;根据该联合概率对P中所有的函数调用序列按照从大到小进行排序。
S3、根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;
对待检测序列进行检测和修复的具体方法为:
按照联合概率从大到小依次获取函数调用序列集合P中函数调用序列p,比较函数调用序列p和待检测序列q,若二者相同,则q为正确的函数调用序列;否则,其中包含有错误;以最少的编辑操作将q转换为p,实施操作的位置和方法即为错误产生点和修复方案。
S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案,包括:错误的函数调用名称、错误产生的位置;
S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。
如图2所示,本发明实施例的基于概率模型的程序错误检测方法工作流程的具体步骤为:
S1:从待检测程序中提取函数调用序列集合Q。所述待检测程序可以采用程序源代码、可执行程序等多种形式提供;所述方法可以为程序静态分析或动态分析方法;
S2:判断函数调用序列集合Q中的函数调用序列是否已经全部验证完毕。若验证完毕,转至S8;否则,转至S3;
S3:获取Q中的一个函数调用序列q;
S4:求解概率模型A中与函数调用序列q最相似的函数调用序列集合P,计算P中各函数调用序列在概率模型A中的联合概率,根据所述联合概率对P进行降序排列;
S5:参考上述函数调用序列集合P对q进行错误检测并生成修复方案。P中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;
S6:若函数调用序列q中包含错误,则转至S7;否则,转至S2;
S7:记录各函数调用序列中检测到的错误信息及修复方案,包括:错误的函数调用名称、错误产生的位置等;
S8:当函数调用序列集合Q中所有函数调用序列检测完毕后,输出程序错误报告。
如图3所示,本发明实施例的基于概率模型的程序错误检测系统,用于实现本发明实施例的基于概率模型的程序错误检测方法,包括:
程序分析器单元,用于获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;程序分析器单元包括程序静态分析器、程序动态分析器和二者结合的混合程序分析器。
API使用协议库单元,用于为系统提供概率模型描述的API使用协议,用户可以向协议库中添加自定义的协议,概率模型的状态或迁移表示函数调用;
最相似函数调用序列集合求解器单元,用于从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解概率模型中与该待检测序列最相似的函数调用序列集合,记作相似集合;并计算相似集合中各函数调用序列在概率模型中的联合概率;
序列错误检测器单元,用于根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;
程序错误报告器单元,用于对程序错误及修复方法进行格式化输出。
如图4所示,本发明的另一个实施例中,概率模型的程序错误检测系统包括:
程序静态分析器单元,采用程序静态分析的方法从程序代码中提取函数调用序列集合Q;
API使用协议库单元,其由采用概率自动机描述的API使用协议构成,用户可以向协议库中添加自定义的协议,所述概率自动机采用迁移表示函数调用,迁移上标注有转移概率。除转移概率外,所述概率自动机还包含初始概率和终止概率;
最相似函数调用序列集合求解器单元,该单元以概率自动机描述的API使用协议A和待检测的函数调用序列q作为输入,求解最相似函数调用序列集合P并根据联合概率对P进行降序排列;
序列错误检测器单元,该单元顺序从上述函数调用序列集合P中获取最相似函数调用序列p。以p为参考发现上述待检测函数调用序列q中的错误并给出修复方法;
程序错误报告器单元,该单元用于对程序错误及修复方法进行格式化输出。
该实施例的方法输入为源代码形式的待检测程序,输出为错误检测报告及修复方案。待检测程序可以为能够被成功编译的完整程序,也可以为部分程序。
本实施例的最相似函数调用序列集合求解器单元根据概率自动机A求解与待检测的函数调用序列q最相似的函数调用序列集合P的方法如下:
步骤一、如图5所示,将概率自动机A转换为自动机A*,具体为去掉概率自动机中的概率,初始概率大于0的状态作为初始状态,终止概率大于0的状态作为终止状态;
步骤二、P为自动机A*所能产生的所有函数调用序列中与q距离最短的函数调用序列所构成的集合,即p'为A*产生的任一函数调用序列,有δ(p,q)≤δ(p′,q),其中δ(p,q)表示函数调用序列p和q之间的距离;
步骤三、计算函数调用序列在概率自动机A中的联合概率,根据联合概率对集合P中的元素进行降序排列,所述联合概率为p在概率自动机A中对应路径上各概率的乘积。如图5所示的概率自动机,函数调用序列<FileOutputStream,write,write,close>的联合概率为:
pri(S1)×prt(FileOutputStream)×prt(write)×prt(write)×prt(close)×prf(S3)
=1.0×1.0×0.4×0.4×0.6×1.0
=0.096
其中pri(S)表示概率自动机中状态S的初始概率,prt(m)表示概率自动机中函数调用m的转移概率,prf(S)表示概率自动机中状态S的终止概率。上述函数调用均省略了参数列表。
上述步骤二所述距离δ为编辑距离,包含插入、删除和替换操作,其代价函数定义如下:
其中,m1、m2为API函数,Λ表示空函数,γ(m1→m2)为编辑操作的代价函数,m1→m2表示一个编辑操作,当m1=Λ时表示插入操作;当m2=Λ表示删除操作;当m1≠Λ且m2≠Λ表示替换操作。
基于所述编辑距离,上述步骤二采用一种递归算法求解自动机A*与待检测函数调用序列q之间具有最小编辑距离的函数调用序列集合P。初始情况下,令当前状态为自动机A*的初始状态,当前位置为待检测函数调用序列q的起始位置。算法采用深度优先遍历策略进行搜索,将当前状态出发的迁移与当前位置的函数调用进行匹配。匹配过程中,考虑插入、删除和替换函数调用的操作。当当前状态和当前位置匹配完成后,令当前状态为当前状态的下一个状态,当前位置为当前位置的下一个位置,从而形成一个具有相同性质的子问题。子问题采用上述相同的方法递归的进行匹配。算法进行匹配过程中,记录采用的编辑操作并计算编辑距离。算法选择编辑距离最小的子问题的解作为算法输出。子问题求解过程在以下三种情况之一时停止:
(1)自动机仅包含终止状态;
(2)待检测函数调用序列为空序列;
(3)d>max(||A*||,||q||),其中d为匹配过程当前已产生的累积编辑距离;||A*||为自动机A*所包含的状态的数量;||q||为待检测函数调用序列q所包含的函数调用的数量。该停止条件的引入是为了使算法在求解循环子问题时能够正常终止。
如图6、图7所示,述递归算法问题分解示意图,其中图6为自动机,m4m5m10为待检测函数调用序列,图7展示了在自动机初始状态S2时,为了匹配起始函数调用m4所作出的问题分解。如图7所示,算法考虑了编辑操作Λ→m4、Λ→m5、m4→m4、m4→m4、m4→Λ并分解出了5个子问题。后续问题分解过程与该过程雷同。
如图8所示,为上述序列错误检测器单元工作流程,包括:
S1:获取序列错误检测器单元的输入,即最相似函数调用序列集合P和待检测函数调用序列q;
S2:若已经遍历上述集合P中的所有元素则转至S8,反之转到S3;
S3:按照联合概率从大到小获取上述集合P中的下一个元素p;
S4:若上述函数调用序列p与q相同则转至S9,反之转至S5;
S5:采用最短的编辑操作序列S将上述函数调用序列q转换为p,所述的编辑操作包括插入、删除和替换函数调用,所述的操作序列S采用字符串编辑距离的动态规划方法进行求解;
S6:根据上述编辑操作序列S生成错误报告r,所述报告r包含错误产生点和错误修复方法。其中错误产生点为序列S中各编辑操作实施的位置,错误修复方法以编辑操作序列S作为输入,参考下表自动生成:
S7:将上述错误报告r顺序添加到队列R;
S8:输出错误报告队列R;
S9:工作流程结束。
如图9所示,本发明的另一个实施例中,基于概率模型的程序错误检测系统,包括:
测试用例生成器单元:自动生成测试用例驱动待检测程序运行;
程序动态分析器单元:采用动态插桩方法对待检测程序进行插桩并收集程序执行轨迹(即函数调用序列);
API使用协议库单元,其由采用具有终止概率的马尔科夫模型(简称MCF)描述的API使用协议构成,用户可以向协议库中添加自定义的协议,所述的MCF采用状态表示函数调用,包含初始概率、转移概率和终止概率。该MCF定义如下:
具有终止概率的扩展马尔可夫模型(简称MCF)M是一个四元组(Q,τ,π,γ),其中Q是状态集合,τ:Q×Q→[0,1]是转移概率函数,π:Q→[0,1]是初始状态上的一个概率分布,γ:Q→[0,1]是终止状态上的一个概率分布。概率函数π,γ和τ分别满足条件:q∈Qπ(q)=1,∑q∈Qγ(q)=1,∑q'∈Qτ(q,q')≤1。
最相似函数调用序列集合求解器单元,该单元以MCF描述的API使用协议A和待检测的函数调用序列q作为输入,求解最相似函数调用序列集合P并根据联合概率对P进行降序排列。该单元工作方法与实施例一类似,均由三个步骤构成:
步骤一、如图10所示,将MCF模型A转换为自动机A*,具体为去掉MCF中的概率,初始概率大于0的状态作为初始状态,终止概率大于0的状态作为终止状态;
步骤二、求解上述自动机A*所能产生的所有函数调用序列中与上述待检测函数调用序列q距离最短的函数调用序列所构成的集合,该集合即为最相似函数调用序列集合P。距离为编辑距离,其定义与上一个实施例中相同,在此不作详细说明;求解方法可参考上一个实施例获得,不同的是所述自动机A*采用状态表示函数调用,而非状态迁移;
步骤三、该步骤与上一个实施例相同,在此不作详细说明。
序列错误检测器单元,该单元顺序从上述函数调用序列集合P中获取最相似函数调用序列p。以p为参考发现上述待检测函数调用序列q中的错误并给出修复方法。该单元工作方法与实施例一相同,在此不作详细说明;
程序错误报告器单元,该单元用于对程序错误及修复方案进行格式化输出。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (3)

1.一种基于概率模型的程序错误检测方法,其特征在于,包括以下步骤:
S1、获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;概率模型为API使用协议库,该概率模型由人为给出,或采用自动化方法从程序中获得;
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之间的距离;
计算联合概率的方法具体为:
对于任意的函数调用序列p∈函数调用序列集合P,根据概率模型计算p的联合概率,联合概率为函数调用序列在概率模型中所对应路径上的概率的乘积;根据该联合概率对P中所有的函数调用序列按照从大到小进行排序;
S3、根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;
对待检测序列进行检测和修复的具体方法为:
按照联合概率从大到小依次获取函数调用序列集合P中函数调用序列p,比较函数调用序列p和待检测序列q,若二者相同,则q为正确的函数调用序列;否则,其中包含有错误;以最少的编辑操作将q转换为p,实施操作的位置和方法即为错误产生点和修复方案;
S4、完成该待检测序列的检测和修复后,记录检测到的各个错误信息及修复方案,包括:错误的函数调用名称、错误产生的位置;
S5、对待检测集合中的所有待检测序列检测完毕后,输出程序错误报告。
2.一种基于概率模型的程序错误检测系统,其特征在于,包括:
程序分析器单元,用于获取概率模型和待检测程序,从待检测程序中提取待检测的函数调用序列集合,记作待检测集合;概率模型为API使用协议库,该概率模型由人为给出,或采用自动化方法从程序中获得;
API使用协议库单元,用于为系统提供概率模型描述的API使用协议,用户可以向协议库中添加自定义的协议,概率模型的状态或迁移表示函数调用;
最相似函数调用序列集合求解器单元,用于从待检测集合中获取单个待检测的函数调用序列,记作待检测序列,求解概率模型中与该待检测序列最相似的函数调用序列集合,记作相似集合;并计算相似集合中各函数调用序列在概率模型中的联合概率;
最相似函数调用序列集合求解器单元求解的方法具体为:
根据概率模型A和待检测序列q求解函数调用序列集合P,使得任意的函数调用序列p∈P,满足下列条件:
a、设A*为去掉概率模型A中的概率后获得的确定性模型;
b、函数调用序列p能够由A*产生;
c、设p'为由A*产生的任一函数调用序列,则有δ(p,q)≤δ(p′,q),其中δ(p,q)表示函数调用序列p和q之间的距离;
计算联合概率的方法具体为:
对于任意的函数调用序列p∈函数调用序列集合P,根据概率模型计算p的联合概率,联合概率为函数调用序列在概率模型中所对应路径上的概率的乘积;根据该联合概率对P中所有的函数调用序列按照从大到小进行排序;
序列错误检测器单元,用于根据相似集合对该待检测序列进行检测并生成修复方案,相似集合中每一条函数调用序列对应一个错误报告,所有错误报告构成一个错误报告组,组内错误报告按照函数调用序列的联合概率降序排列;
对待检测序列进行检测和修复的具体方法为:
按照联合概率从大到小依次获取函数调用序列集合P中函数调用序列p,比较函数调用序列p和待检测序列q,若二者相同,则q为正确的函数调用序列;否则,其中包含有错误;以最少的编辑操作将q转换为p,实施操作的位置和方法即为错误产生点和修复方案;
程序错误报告器单元,用于对程序错误及修复方法进行格式化输出。
3.根据权利要求2所述的基于概率模型的程序错误检测系统,其特征在于,所述程序分析器单元包括程序静态分析器、程序动态分析器和二者结合的混合程序分析器。
CN201510982321.0A 2015-12-22 2015-12-22 一种基于概率模型的程序错误检测方法及系统 Expired - Fee Related CN105608006B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510982321.0A CN105608006B (zh) 2015-12-22 2015-12-22 一种基于概率模型的程序错误检测方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510982321.0A CN105608006B (zh) 2015-12-22 2015-12-22 一种基于概率模型的程序错误检测方法及系统

Publications (2)

Publication Number Publication Date
CN105608006A CN105608006A (zh) 2016-05-25
CN105608006B true CN105608006B (zh) 2018-06-08

Family

ID=55987958

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510982321.0A Expired - Fee Related CN105608006B (zh) 2015-12-22 2015-12-22 一种基于概率模型的程序错误检测方法及系统

Country Status (1)

Country Link
CN (1) CN105608006B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112162745B (zh) * 2020-10-29 2022-06-21 中国人民解放军国防科技大学 一种基于api使用概率模型的程序合成方法
CN114722946B (zh) * 2022-04-12 2022-12-20 中国人民解放军国防科技大学 基于概率模型检测的无人机异步行动与协同策略合成方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法
CN101930401A (zh) * 2010-09-20 2010-12-29 南京大学 一种基于检测对象的软件漏洞模型检测方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7065534B2 (en) * 2004-06-23 2006-06-20 Microsoft Corporation Anomaly detection in data perspectives
DE102013224378A1 (de) * 2013-09-18 2015-03-19 Rohde & Schwarz Gmbh & Co. Kg Automatisierte Auswertung von Testprotokollen im Telekommunikationsbereich

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法
CN101930401A (zh) * 2010-09-20 2010-12-29 南京大学 一种基于检测对象的软件漏洞模型检测方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
"Fault Localization With Nearest Neighbor Queries";Renieris,Resis;《Proceedings of the 18th IEEE International Conference on Automated Software Engineering (ASE’03)》;20031231;第1页到第10页 *
"基于抽象语法树的代码静态自动测试方法研究";高传平等;《北京化工大学学报》;20071231;第34卷;第25页到第29页 *
"基于程序特征谱整数溢出错误定位技术研究";惠战伟等;《计算机学报》;20121030;第35卷(第10期);第2204页到第2214页 *
"结合用例约简与联合依赖概率建模的错误定位";苏小红等;《软件学报》;20140731;第25卷(第7期);第1492页到第1504页 *

Also Published As

Publication number Publication date
CN105608006A (zh) 2016-05-25

Similar Documents

Publication Publication Date Title
Irawan et al. System Testing using Black Box Testing Equivalence Partitioning (Case Study at Garbage Bank Management Information System on Karya Sentosa)
CN106528424B (zh) 基于后台系统服务或接口的测试方法和测试平台
CN102402481B (zh) 异步程序代码的模糊测试
Walkinshaw et al. Inferring finite-state models with temporal constraints
CN109947646A (zh) 接口测试方法、装置、计算机设备和存储介质
US9251046B2 (en) Method and system for generating and processing black box test cases
US8312440B2 (en) Method, computer program product, and hardware product for providing program individuality analysis for source code programs
CN108108297A (zh) 自动化测试的方法和装置
CN107861876A (zh) 测试方法、装置、计算机设备及可读存储介质
CN104965999B (zh) 一种中短基因片段测序的分析拼接方法及设备
CN103678124B (zh) 基于持续集成环境的视频监控平台自动测试方法及装置
Walkinshaw et al. Automated comparison of state-based software models in terms of their language and structure
CN110088744A (zh) 一种数据库维护方法及其系统
CN112306855A (zh) 接口自动化测试方法、装置、终端和存储介质
CN108874649A (zh) 自动化测试脚本的生成方法、装置及其计算机设备
CN108446224B (zh) 移动端上应用程序的性能分析方法、存储介质
CN105608006B (zh) 一种基于概率模型的程序错误检测方法及系统
CN109558328A (zh) 一种代码覆盖率的测试方法、系统、装置及可读存储介质
CN105468530B (zh) 一种基于有限状态机的程序错误检测方法及系统
CN108897678B (zh) 静态代码检测方法和静态代码检测系统、存储设备
CN108334441A (zh) 一种软件开发工具包的自动化测试方法和系统
CN113900926A (zh) 一种测试用例的批量测试方法、系统及介质
CN107562619B (zh) 一种基于神经元模型的自动遍历控件方法及终端
CN107678975A (zh) 一种软件故障检测方法及装置
CN116820996A (zh) 基于人工智能的集成测试用例自动生成方法和装置

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

Granted publication date: 20180608