[发明专利]一种针对程序中循环问题的自动修复方法有效
申请号: | 201810047683.4 | 申请日: | 2018-01-12 |
公开(公告)号: | CN108228232B | 公开(公告)日: | 2021-04-30 |
发明(设计)人: | 孙小兵;郑轩昂 | 申请(专利权)人: | 扬州大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F8/72;G06F11/36 |
代理公司: | 南京中新达专利代理有限公司 32226 | 代理人: | 孙鸥;朱杰 |
地址: | 225009 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及一种针对程序中循环问题的自动修复方法。本发明将循环分为计次循环和目的循环,对于计次循环通过分析开发者的习惯,逐个尝试特定谓词,寻找特殊常量或变量来纠正循环的次数,对于目的循环则是通过提取程序中循环语句共有的部分作为模板,并按照模板修改要修复的循环语句。本发明克服了过去没有专门针对程序中循环问题进行修复的并实用的自动修复技术或手段。本发明在只需要提供测试用例和错误程序的情况下就可以输出相应的补丁,大大节省了开发者的工作量和工作时间,填补了这一本技术领域内的空白,可以提供更精准的修复需求,将循环语句分为计次循环和目的循环两大类,针对不同类型可以有不同的对应方法,不会出现与循环语句完全不相关的补丁,可以提高对循环语句错误修复的精确度。 | ||
搜索关键词: | 一种 针对 程序 循环 问题 自动 修复 方法 | ||
【主权项】:
1.一种针对程序中循环问题的自动修复方法,其特征在于如下步骤:(1)将循环语句分为两类,一类为计次循环,即程序员知道该语句要循环的次数,一类为目的循环,即该循环语句是为了达到某种结果,程序员并不知道要循环的准确次数;(2)对于计次循环,分析上下文识别程序员的计次习惯:根据末尾循环体是‘++’或者‘‑‑’判定循环格式,若是‘++’,则识别单次表达式通常是赋值为0还是1,若是‘‑‑’,则识别条件表达式谓词中的值通常是0还是1,然后根据习惯将对应的0改为1或1改为0;(3)若步骤二没有修复成功,则将条件表达式中的谓词替换为以下五种谓词之一,这里的谓词包括‘>’、‘>=、‘<’、‘<=、‘!=,且若末尾循环体是‘++’,则不考虑‘>’、‘>=,若末尾循环体是‘‑‑,则不考虑‘<’、‘<=,通过逐个替换测试的方法,依次将原来的谓词修改为上述五种谓词之一,直到获得正确的测试结果,来确定谓词到底要替换为哪一个;(4)若步骤(3)依旧没有成功,则寻找特殊的常量或者变量,包括特殊的数字,const定义的常变量,#define宏定义的值,数组的长度,循环语句内if语句中条件表达式涉及到的值,循环语句前需要输入的值,函数参数值,将他们的关键信息和数值集合成一个候补循环次数空间,用每个数值对应的关键信息和循环语句的中间循环体进行比对,将这些关键信息,根据大小写,拆分为多个词,只要中间循环体出现其中一个词一次,则给这个值记1分,最后根据总分进行排序;设定单次表达式赋值为0,条件表达式的谓词为‘<’,末尾循环体用‘++’,条件表达式的谓词后的值根据排序结果取前五个从高到低依次进行尝试,直到输出正确的测试结果;(5)对于目的循环,利用克隆检测技术,从当前程序中寻找中间循环体与当前要修复的循环语句中的中间循环体相似的循环语句,并摘取它的单次表达式,条件表达式和末尾循环体作为模板;将模板套入到当前循环语句,并识别原来的循环语句上述三个区域中是否有关键信息与中间循环体相同,若有相同部分,则对应的修改当前循环语句上述三个区域对应的关键信息使之与当前循环语句的中间循环体相同。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于扬州大学,未经扬州大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201810047683.4/,转载请声明来源钻瓜专利网。