Dynamically Discovering Likely Program Invariants to Support Program Evolution

该研究专注于动态发现程序不变量,通过执行跟踪推断可能的不变量,以帮助程序员在代码演化过程中保持关键属性。Daikon是一个实现此技术的工具,能够在小型程序中准确和有效地推断不变量,有助于软件的测试和进化。尽管存在可伸缩性问题,但实验表明该方法对于特定程序点的不变量检测是有效的。
摘要由CSDN通过智能技术生成

摘要

明确声明的程序不变量可以帮助程序员识别修改代码时必须保留的程序属性。然而,在实践中,这些不变量通常是隐式的。期望程序员使用不变量对代码进行完全注释的另一种方法是自动从程序本身推断可能的不变量。本研究的重点是从执行跟踪中发现不变量的动态技术。本文报告了三个结果。首先,它描述了动态发现不变量的技术,以及体现这些技术的名为Daikon的实现。其次,报告了Daikon在两套目标计划中的应用。在Gries的程序推导工作中,系统重新发现了预定义的不变量。在缺少显式不变量的C程序中,系统发现了有助于软件演化任务的不变量。这些实验表明,至少对于小程序来说,不变推理是准确和有用的。第三,它分析了可伸缩性问题,如不变检测运行时和准确性,以及测试套件和程序点的功能。

介绍

本研究的重点是不变量的动态发现:该技术是对输入集合执行一个程序,并从捕获的变量轨迹推断不变量。图1显示了Daikon不变检测器的结构。与其他动态方法(如测试和分析)一样,推断不变量的准确性部分取决于测试用例的质量和完整性;额外的测试用例可能会提供新的数据,从中可以推断出更精确的不变量。
在这里插入图片描述
Daikon的Lisp instrumenter(第8节)添加了将变量值写入数据跟踪文件的代码;该代码自动插入程序入口(ENTER)、循环头(loop)和程序出口(exit)。
Daikon推断特定程序点的不变量,如过程入口和出口,以及可选的循环头。插入指令的程序为Daikon每次执行此类程序点提供范围内的变量值。Daikon检查涉及单个变量(保留其值的约束)或多个变量(变量值之间的关系)的不变量。

为了减少对源语言的依赖、简化实现并改进错误检查,Daikon只支持两种形式的数据:标量数(包括字符和布尔值)和标量序列;所有跟踪值都必须转换为以下形式之一。例如,一个ArrayOf树节点(每个节点都有一个左和一个右子节点)将被转换为两个数组:a.left࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值