Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Repairing Programs With Semantic Code Search

论文下载:https://people.cs.umass.edu/~brun/pubs/pubs/Ke15ase.pdf

  • 解决的问题:自动化修补源码当中的问题代码
  • 背景:人工寻找和修补代码成本高;有大量的开源项目代码可以重用
  • 方法:通过语义相似性从已有代码库中找到正确的代码替代原有项目中的问题代码

SearchRepair——具体方法

  • 样例代码

Fig

  • 测试用例

Fig

  • 待选代码

Fig

  • 将备用代码输入、输出符号表达式化,同时找到问题代码
  • 用一个正确的测试用例结合备用代码的符号表达式,计算可满足性
  • 用更多的测试用例测试正确性

Indexing for Semantic Code Search

  • 将备选代码的输入、输出的语义表达式计算出来
  • 所以例子代码的符号表达式为

Fig
Fig
Fig

Fault Localization

  • 使用Tarantula fault localization technique
  • 通过计算代码语句的“可疑程度”定位可能的错误代码,公式如下

Fig

  • s是语句,total_failed是总共错误的测试数量,failedpassed分别代表执行s错误和正确的测试数量
  • 可疑程度最高语句所在代码块就是即将被修补的代码块

Semantic Search with an Input-Output Profile

  • 用一个正确的测试用例结合备选代码的符号表达式,计算可满足性
  • 因为正确执行的要求更为严格
  • 比如例子中,一个正确测试输入

Fig

  • 穷举变量对应关系

Fig

  • 验证表达式

Fig

Evaluating Patches

  • 用其他所有的测试用例测试以上得到的代码正确性

Evaluation

Fig
* 778个defects来自6个玩具程序 * 测试结果比GenProg差不少 * 备用库的质量是一个可能的原因,比如这里checksum的实验是0,但用了Linux内核代码作为备用库以后就能出来18个,其中17个是特有 Fig
* 正确率说明这里用已有开源代码作为备选库是很有意义的 * (GenProg是文章三作在ICSE’12的工作)