您的当前位置:首页正文

【软件分析第17讲-学习笔记】程序综合 Program Synthesis

2024-11-07 来源:个人技术集锦

前言

创作开始时间:

如题,学习一下程序综合 Program Synthesis的相关知识。参考:熊英飞老师2018《软件分析》课件。

正文

程序综合

程序综合是软件分析问题。
程序综合作为搜索问题。

目前大多数程序综合技术都只处理表达式,因为可以直接转成约束让SMT求解。

  • 枚举法:按照固定格式搜索
  • 约束求解法:将程序搜索问题整体转成约束求解问题
  • 启发式搜索法:采用启发式搜索
  • 统计法:采用机器学习等方法寻找概率最高的程序

枚举法

按语法依次展开:

  • 自顶向下遍历
  • 自底向上遍历
  • 双向搜索:要求能计算最强后条件或者最弱前条件,通常用于 pipeline 程序或者系统状态固定的程序

判断程序是否等价:

  • 通过 SMT 求解器可以判断,但是编码比较麻烦
  • 通过预定义规则判断

CEGIS:基于反例的优化

约束求解较慢,执行测试较快。将约束求解器返回的反例作为测试输入保存。

优化一:验证的时候首先采用测试验证
优化二:判断等价性的时候首先采用测试的结果判断

约束求解法

将程序综合问题整体转换成约束求解问题,由SMT 求解器求解。

基于构件的程序综合

启发式搜索法

统计法

基于组件的程序综合 Component-Based Synthesis

参考:

先了解Oracle-guided synthesis:

是通过SMT问题,得到反例Counterexample,然后再加入到Specification里面,从而不断强化specification。

看完这个之后再看:

  • 【ICSE 13论文】SemFix: Program repair via semantic analysis

就大概能看懂了。

小结

还是学到了很多的,后续再补充完善。

创作结束时间:2022年11月16日23:42:19

参考文献

显示全文