[发明专利]基于切片模型的程序回归错误定位方法有效
申请号: | 201610368555.0 | 申请日: | 2016-05-26 |
公开(公告)号: | CN106095663B | 公开(公告)日: | 2017-06-27 |
发明(设计)人: | 刘烃;陈泽华;王海军;郑庆华;管晓宏;朱海萍 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西安通大专利代理有限责任公司61200 | 代理人: | 陆万寿 |
地址: | 710049 陕*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 切片 模型 程序 回归 错误 定位 方法 | ||
技术领域
本发明涉及可信软件及软件测试领域,特别涉及一种程序中回归错误的定位方法。
背景技术
软件测试是用来保证软件质量的基本手段,并且也是软件开发过程中最耗费人力和物力的过程。经验表明,在软件更新的过程中经常会引入回归错误,因此进行回归测试是非常有必要的。即便现在有许多技术使得回归测试的过程变得自动化,但是回归测试仅仅只是软件测试过程中的第一步。而更加重要和富有挑战性的任务是找到导致程序执行失败的程序修改,并且提供这些修改为什么会导致程序执行失败的上下文环境。然而,该过程并不简单。首先,随着程序变得越来越复杂,回归错误总是出现在特定的环境或配置之中。第二,由于时间和人力的限制,通常只能获得一个测试案例。该测试案例在旧版本程序中能够成功执行,而在新版本程序中执行失败。第三,程序执行失败的精确上下文环境是很难获得的。只有测试人员能够读懂程序执行失败的上下文环境,他们才能够依据这些信息精确的修复错误。
近年来,许多关于回归错误测试的技术被提出,例如ADD(Augmented Delta Debugging)和AFTER(Automated Fault Explanation for Regression testing)。ADD通过结合覆盖分析和Delta调试来自动化的隔离导致程序执行失败的修改。然而,ADD并不分析程序的语义,因此定位的错位可能仅仅只是避免了程序执行失败而并非真正的错误。AFTER利用基于Delta调试的动态分析以及基于符号分析的语义分析来定位回归错误。AFTER的主要问题是它的可延展性。众所周知,符号分析是一个开销巨大的过程,因此它很难被应用于大规模程序。即使这些技术能够自动化的定位导致程序执行失败的程序修改,却很少被实际应用,因为他们不能提供导致程序执行失败的上下文环境。在现有的技术当中,一个普遍接受的假设是测试者能够很容易的理解程序为什么执行失败。事实上,对程序执行失败原因的理解并不简单,因此现有技术对修复回归错误的帮助是很少的。
因此,一个实用的回归错误定位技术不仅需要精确定位导致错误的修改,还要能提供该修改导致程序执行失败的上下文环境。
发明内容
本发明的目的在于提出一种基于切片模型的程序回归错误定位方法,通过对两个版本程序进行切片分析,输出导致程序回归错误的程序行为切片,解决程序测试中回归错误定位的问题。
为了实现上述目的,本发明采用如下技术方案:
基于切片模型的程序回归错误定位方法,包括如下步骤:
S1)、根据输入的两个版本待测程序,计算出两个版本程序源代码的不同之处,根据源代码的不同对两个版本程序的源码重排,使得相同的代码有相同的行号,不同的代码与空行对应;
S2)、用两个经过代码重排后的程序执行会导致修改版本程序执行失败的测试案例,并提取两个版本程序的执行轨迹、语句包含的变量值以及语句的依赖关系;
S3)、将执行轨迹组织成树形结构,树的每个节点是一个函数执行序列;调用轨迹函数体语句对应方法,对步骤S2)中提取到的两版本程序的执行轨迹进行对应;
S4)、根据源代码的不同、轨迹对应结果以及语句包含的变量值,将轨迹中的语句分为四类:修改导致不同的语句、流不同的语句、值不同的语句以及一致的语句;
S5)、以新版本程序执行失败点为起点开始对回归错误的产生进行切片分析,将失败点语句加入切片分析队列;
S6)、判断切片分析队列是否为空,若为空则跳转至步骤S9),否则跳转至步骤S7);
S7)、取出切片分析队列首端语句,并判断首端语句是否需要进行切片分析,若不需进行分析则跳转至步骤S6),否则跳转至步骤S8);
S8)、将当前分析语句加入回归错误切片,并根据步骤S4)中语句分类将其需要进行切片分析的依赖语句及对应语句加入切片分析队列;
S9)、输出回归错误切片。
本发明的进一步改进在于,所述步骤S1)中代码重排的过程包括以下步骤:
S101)、根据两个版本程序的源代码,计算出两个版本程序源码的不同;
S102)、根据计算出的两个版本程序源代码的不同之处,将两个版本程序源代码中的每条语句分为两类:完全相同的语句、修改的语句;
S103)、在不改变程序语句执行顺序的基础上,使完全相同的语句具有相同的行号,修改的语句与空行对应;
S104)、输出代码重排之后的两个版本待测程序源码作为新的待测程序。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610368555.0/2.html,转载请声明来源钻瓜专利网。