基于CLP的自动软件模型检查
1. 转移关系与错误检查
转移关系 Tm(L, N, D, L′, N ′, D′) 描述了程序 m 正常终止时,前状态 <L, N, D> 和后状态 <L′, N ′, D′> 之间的关系。对于示例程序,转移关系和错误关系分别在对应表格的第2列和第3列展示。例如, Elock 关系表明,如果 L 初始值不为0, lock 操作会出错; Tlock 关系表明,如果 L 初始值为0, lock 操作能正常终止,且在后状态中 L = 1 , N 和 D 保持不变。
我们可以通过CLP查询 Emain(L, N, D) 来检查 main 函数的调用是否会出错。当 L = 1 时,该查询可满足,说明如果锁初始被持有,程序可能出错,检查源代码会发现确实存在此问题。若添加锁初始未被持有的前置条件,即查询 L = 0 ∧ Emain(L, N, D) ,结果仍可满足。分析满足条件的CLP推导可知,其对应的执行轨迹为: main 调用 loop , loop 调用
超级会员免费看
订阅专栏 解锁全文
41

被折叠的 条评论
为什么被折叠?



