[发明专利]一种基于聚类不变式分析的错误定位方法无效
申请号: | 201110413498.0 | 申请日: | 2011-12-13 |
公开(公告)号: | CN102521130A | 公开(公告)日: | 2012-06-27 |
发明(设计)人: | 陈林;吴迪;许蕾;徐宝文 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京天翼专利代理有限责任公司 32112 | 代理人: | 黄明哲 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 不变 分析 错误 定位 方法 | ||
技术领域
本发明属于程序调试技术领域,涉及程序测试结果的收集、程序不变式分析,为一种基于聚类不变式分析的错误定位方法。
背景技术
传统的基于不变式的程序错误定位方法主要包含以下几个步骤:(1)首先运行一批测试用例,收集与程序中变量相关的不变式;(2)然后运行一个新的测试用例,得到这个测试用例运行后的变量信息;(3)将这些变量信息与收集到的不变式信息进行比较,若产生错误,则判定此次执行出错;(4)最后,找到该测试用例运行时在程序中出错的位置,便达到了错误定位的目的。这一方法的主要优点是不需要判断程序执行是否正确,而且能得到与程序执行有关的状态信息。然而,现有的这一类方法所提取的不变式均是针对整个程序执行空间的,效率比较低,而且所得到的不变式粒度较粗,不能很好地反映程序的局部执行状态。
在基于不变式的错误定位方面,主要有S.Hangal和M.S.Lam提出的方法以及B.Pytlik和M.Renieris等人提出的方法。而在程序不变式提取领域成果较为显著的有M.D.Ernst等人做出的DALKON不变式提取工具。
S.Hangal和M.S.Lam进行错误定位的基本方法是,对某个变量a建立不变式1000111101111,其中的每一位表示变量a的一个属性,取1的位表示正常执行中该位所代表的属性始终被保持,取0的位表示正常执行中该位所代表的属性没有被保持。如果有一次执行a的值为0100111101111,第一位不是1,那么显然违背不变式,则可以推测该次执行有错。这里变量的属性可以包括变量a的值是否为常数,是否恒为正值,是否恒为奇数或偶数,变量的最小上限或最大上限是否在每次执行都被保持。他们所提到不变式起初具有较为严格的条件,随着正确测试执行的增加而不断放松。在运行完训练测试集后,对新的测试,如果不变式不能得到满足,就提示程序包含错误。比如,对于一个变量a,它在第一次被赋初始值V,不变式为M。显然,最初M中的每一位都为1。若又遇一条对a进行赋值的指令,a被赋值成为W’,如果不变式被改成M:=这样就放松了不变式的限制条件。使用这样的位记录的方法去记录不变式信息,在空间和时间上都达到了很好的效果。在这一方法里,为方便处理,将所有的基本数据类型都转化成为Integer类型的数据,而放弃了对浮点数类型数据不变式的收集。
使用这种错误定位方法,S.Hangal和M.S.Lam做出了一个对Java程序进行不变式提取及错误定位的DIDUCE系统。该系统可以自动并且快速地对包含错误的Java程序进行错误定位,找到出错的根源。目前此种方法对Java程序的错误定位有比较好的效果,但是尚未实践在其他语言的程序上。
B.Pytlik和M.Renieris等人采用了类似的思想提出了一个基于不变式分析的错误定位方法。与之前所述方法主要的不同是该方法采用了更为复杂的不变式描述形式。在他们提出的方法中,主要考虑变量之间的关系,为变量之间的关系建立不变式。但是,这种不变式的收集更为困难。在效果方面,目前这两种方法还没有有效的比较。
另外,M.D.Ernst等人在程序不变式的收集上取得了比较丰硕的成果,他们已经发布了一个较为成熟的不变式收集工具——DALKON,此工具可以用来收集C,C++,Java,Perl四种语言所写程序中的不变式。而且收集到的不变式信息比较丰富,包括某一变量x是否为常量(x=a),是否恒不为0(x≠0),x的最大下限和最小上限(a≤x≤b),x与其他变量之间的线性关系(y=ax+b),函数赋值(x=fn(y)),包含关系(x∈y),是否被排序(xis sorted)等。这样的不变式信息可以用在错误定位、代码优化等领域。
利用DALKON,Y.Brun和M.D.Ernst两人共同进行了对程序执行使用机器学习算法进行代码潜在错误发现的工作。在机器学习的训练阶段,他们提出了SVM(Support Vector Machine)算法和判决树算法,并建立了错误不变式分类器(Fault Invariant Classifier)的模型。他们发现,这一模型可以准确地对变量正确的属性和错误的属性进行分类并排序。他们所搜集出的程序中变量的错误属性可以帮助程序员去定位错误。
发明内容
本发明所要解决的技术问题是:现有的基于不变式的错误定位方法都是对程序的整个执行空间求不变式,再用该不变式判定错误,得到的不变式粒度较粗,往往不够精确。需要对一个程序的执行空间根据不同的执行场景分为多个部分,分析每个部分各自不同的不变式,用各个场景的不变式来判定一个执行是否存在问题,达到错误定位的目的。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110413498.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:滤波装置、天线开关模组和双模终端
- 下一篇:一种电器掉电延时记忆电路