18、软件验证中的变量与运行时注解检查

软件验证中的变量与运行时注解检查

1. 模型变量与幽灵变量

1.1 模型变量

模型变量不仅在指定接口行为时很有用,还能在更抽象的层面(通常以更数学化的方式)指定程序的行为。例如,在指定一个使用多个具体变量来编码一个抽象数学值的类时,模型变量就发挥了重要作用。

Decimal 类为例,该类使用 intPart decPart 变量来实现十进制变量,但规范是通过一个表示组合十进制数的值的单一模型变量来给出的。这体现了模型变量能够对状态进行抽象表示,当底层状态发生变化时,模型变量也会隐式地改变,并且这种关系有时可以明确定义为一种转换,有时只能以非构造性的方式给出。

1.2 幽灵变量

幽灵变量是仅用于规范的变量,可以通过在关键字 ghost 之前的赋值或指令在规范中进行更新。幽灵变量通常用于编码关于状态的一些控制信息,常见的用例包括:
- 明确程序控制流的属性;
- 存储关于程序行为的额外信息(如内存使用和执行时间);
- 表明程序遵循某些协议。

1.2.1 跟踪程序流属性

可以使用幽灵变量来跟踪程序流属性,如循环迭代次数。例如,幽灵变量 z 可以跟踪循环中的迭代次数,并用于指定循环迭代次数的边界。

1.2.2 跟踪内存使用

假设我们有一种方法来估计为指针声明保留的内存块,就可以使用幽灵变量 MEM 来跟踪程序声明的总内存大小。这对于检查程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值