2022-7-29 程序自动修复方法在状态机修复里的应用探讨

Abstract

探索了程序自动修复方法在状态机修复里的应用,尝试借鉴,解决生成修复措施的核心问题。
分析了此类方法在普通程序中可行,却在TAP规则状态机里不可行的原因。
针对该原因,提出了一种从状态机层面、Solution Space角度思考的方法。
同时从二分查找里找到一种减少状态空间的方法。





一、缺陷定位

1.1 普通程序的缺陷定位

利用CEX修复网络缺陷,程序的任意地方、predicate都有可能是可疑的,

-------------
  | |-----------
  | |-----------
  |---------------

因为不好确定是哪个predicate导致的错误

1.2 状态机的缺陷定位

AutoTap默认了在前一状态triggers the bug,即缺陷在前一状态
状态机不同的是suspicious statements先对固定,数量不大而不会生成大量操作





二、补丁生成

一篇程序自动修复综述+两篇基于人工模板修复。
Solution Space对程序自动修复的影响

2.1 普通程序中的solution space

solution语料库 组成 patch,patch组成solution space

solution space中包括缺陷的修复方法。S = C ∪I ∪X (correct patches、 不可信 ones、 可信 but incorrect ones)其来源于某部分原有的或扩展的程序,原有或扩展的程序中可能出现错误代码的正确处理。

基于启发式的方法通过利用历史代码、本程序相似代码或变异代码得到语料,通过组合语料尽可能推理整个solution space,以此找到修复方法。利用CEX修复网络缺陷应该属于这类。

基于人工模板的方法,通过静态分析data and control dependences等详细语料信息,使得修复方法更adequate。


2.2 TAP规则的状态机中的solution space

solution space 来源于当前构建的状态机,状态机中如果包含所有状态,那么Solution Space有解,如羊狼过河。
这和之前利用历史代码、本程序相似代码的思想类似。

!( ((goat = cabbage | goat = wolf)->man = goat) U (man & cabbage & goat & wolf) )

如果状态机不足,这种利用相似代码的思想就会无法生成解决方法。因为很可能是没出现过的状态。 例子如下:

反例的思想,
[state] should [always] be active  G(state),比如冰箱要一直打开
返回一条off的
[state] should [never] be active ¬F(state)
返回一条一直on的,但是可能是正常的,且是在当前TAP语境下的,
如果不反悔,说明当前状态机没有,即有问题
S =  C ∪I ∪X  I就是正常的路径

一种思路是完善状态机。另一种思路就是交给外部处理如AutoTap





三、细化Solution Space

3.1 扩展

by including more correct patches and less incorrect ones from the entire solution space S = L × O(整个状态机)

3.1.1 加入由property的生成的初始规则

3.1.2 light > 500改为变量light > config_value理论上存在一条路径为全局最终解

light > 500改为变量light > config_value理论上存在一条路径为全局最终解。因为修改后的被应用到下一次状态中了,有迭代的感觉,但反例不一定是该条路径,导致生成的只适用于该反例

而且把建模加入下一轮,也保证了全局性。

3.1.3 基于人工修复模板加入每轮建模,也保证了全局性。相当于验证patch的正确性

修复方法会 introduce new bugs

引起状态机状态变化的是因为trigger触发的action和自然环境的变化。可以根据缺陷的root cause事先生成一些模板
基于人工修复模板:从现有规则中根据action是否存在潜在冲突,提取trigger中的语义并组合为模板
问题:单条TAP规则 并且 a single action to redirect (Action Breaking是两条)
physical channel建模时也会考虑,所以一举两得

利用变异。朝着预定方向变化,fitness function,扩展Solution Space,同时有个

3.2 Reduce Solution Space

一篇符号执行综述+AFL源码分析的变异部分文章。通过符号执行reduce solution space,二分查找。

the solution space L×O is thus reduced to a subset L × O= C ∪ I ∪ X ,

二分查找的思路: 先取中间,根据结果去哪一半,然后再取中间。数也是有序的,最合适的配置值就是我们要搜索的,其特点是false和true





四、前后模型对比

还是两个模型,只是反例模型变为了扩展模型
仍要用CEX,但是CEX和原来一样就和AutoTap没差别。CEX里有修复措施,人为去比去确认





问题

问题:创新点?raining的怎么改,目前偏向于修改而不是新增
问题:多action

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q1uTruth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值