软工大牛Hakjoo Oh及其顶会论文解读

2023-11-26 22:20

本文主要是介绍软工大牛Hakjoo Oh及其顶会论文解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

本文介绍软件工程领域大牛Hakjoo Oh ,并且分析其今年顶会论文“MemFix: Static Analysis-Based Repair of Memory Deallocation Errors for C”

一、论文及作者信息

会议:FSE 2018: ACM SIGSOFT Symposium on the Foundations of Software Engineering
论文名称:MemFix: Static Analysis-Based Repair of Memory Deallocation Errors for C
第一作者:Junhee Lee
大学:Korea University
联系方式:junhee_lee@korea.ac.kr

所有作者:Junhee Lee*, Seongjoon Hong*, and Hakjoo Oh (*contributed equally)

在网上找到了Hakjoo Oh的主页(http://prl.korea.ac.kr/~pronto/home/)
,实在是太强了啊,这个人今年6篇顶会:FSE 2018 一篇,OOPSLA 2018 两篇,ASE 2018 一篇,IJCAI 2018 一篇, ICSE 2018 一篇。

确实是个大神。

这里写图片描述
作者Hakjoo Oh

有时间应该把这个实验室的文章系统的看一遍:
1)MemFix: Static Analysis-Based Repair of Memory Deallocation Errors for C
2)Precise and Scalable Points-to Analysis via Data-Driven Context Tunneling
3)Automatic Diagnosis and Correction of Logical Errors for Functional Programming Assignments
4)Template-Guided Concolic Testing via Online Learning
5)Synthesizing Pattern Programs from Examples
6)Automatically Generating Search Heuristics for Concolic Testing

二、论文内容

Given a buggy program, MemFix aims to repair the program by finding a set of deallocation statements that correctly deallocate all allocated memory objects without causing double-frees and use-after-frees.

We show that finding such a set of deallocation statements is essentially to solve an exact cover problem [13] that can be derived by a static analysis. The static analysis is a variant of type-state analysis [14], which tracks possible deallocation statements for each object. Finding an exact cover is a well-known NP-complete problem, for which we use an off-the-shelf SAT solver. Because MemFix is based on a sound static analysis, the MemFix-generated patches are guaranteed to correctly fx the target error without introducing new
errors that are absent in the original program.

[13] https://en.wikipedia.org/wiki/Exact_cover
[14] Stephen Fink, Eran Yahav, Nurit Dor, G. Ramalingam, and Emmanuel Geay. 2006. Effective Typestate Verifcation in the Presence of Aliasing. In Proceedings of the 2006 International Symposium on Software Testing and Analysis. 133–144.

这个工具比2015年ICSE文章leakfix还要强,强得多。这个好厉害。原文:

We show that these results represent a signifcant advance over the state-of-the-art by comparing MemFix with LeakFix [15], a recently developed tool for fxing memory leaks in C programs.

写作功底也很强,这句话,我写不出来。

[15] Qing Gao, Yingfei Xiong, Yaqing Mi, Lu Zhang, Weikun Yang, Zhaoping Zhou, Bing Xie, and Hong Mei. 2015. Safe Memory-leak Fixing for C Programs. In Proceedings of the 37th International Conference on Software Engineering (ICSE ’15). 459–470.

作者工作做得也太足了吧!妥妥的顶会哇。。。因为他把memfix直接和leakfix在三个benchmark set上做了比较,了不起。

作者的贡献:
1)开发了memfix
2)通过实验,将memfix和leakfix做了比较
3)将工具和benchmark开源,而且自己提取了100个开源程序中的real error。(55-664 行代码,这里我觉得比较奇怪,可以这样提取的吗,这算是人工错误还是现实错误呢?

感觉工作还是很实的,落到实处了,想到以前我的工作,我觉得自己确实不够,还不够。

MemFix works with two key ideas: 1) we use a static analysis that collects patch candidates for each allocated object, and 2) we reduce the problem of fnding a correct patch into an exact cover problem over allocated objects.
1) Static Analysis for Collecting Patch Candidates. 主要使用了静态分析来收集候选补丁。这里使用的分析技术是:a variant of typestate analysis [14].
2) Finding Correct Patches by Solving Exact Cover Problem. We fnd the correct patches by reducing the problem into an exact cover problem as follows. The exact cover problem is NP-complete [13]. We solve the problem by encoding it as boolean satisfability and leveraging an off-the-shelf SAT solver [20].

We implemented a prototype of MemFix on top of Sparrow, which provides a general framework for performing abstract interpretation of C programs. We instantiated the framework with the abstract domain and semantics function described in Section 3. Our focus is on faithfully implementing the analysis and algorithm in Section 3, rather than on optimizing its performance.

整个工具是基于开源软件sparrow做的(主要实现的就是MEMFIX的算法)

在related work中,作者把近年来开发的各种自动修复工具分成两类:special-purpose and general-purpose techniques 。
1)Special-Purpose Program Repair Techniques. MemFix belongs to the family of techniques that focus on fxing specifc classes of errors. Existing techniques aim to automatically fx memory leak [15, 43, 52], buffer overflow [39], integer overflow [7], null pointer exceptions [12], error handling bugs [46], race errors [1], etc. To our knowledge, MemFix is the frst technique that is able to fx memory deallocation errors (i.e., memory-leak, double-free, and use-after-free) in a unifed fashion.

By contrast, MemFix is designed to fx memory deallocation errors in general with a novel algorithm that solves the exact cover problem induced by a static analysis.

2)General-Purpose Program Repair Techniques. The general test-based approaches (e.g., [21–23, 26, 28–31, 40, 49, 50]) to automatic program repair is not adequate for fxing memory deallocation errors. These approaches work with a set of testcases, some of which expose the error in the program, and aim to find a patched program that behaves correctly on all inputs in the test-suite. These techniques can be classifed into generate-andvalidate and semantics-based techniques. Generate-and-validate approaches [21, 26, 28, 49] repeatedly search for candidate patches within a pre-defned search space until a program that can be validated against the test-suite is found. Semantics-based approaches [22, 23, 29–31] use symbolic execution to derive contraints on the correct patch and synthesize the patch by using program synthesis or constraint solving.

三、特点

1)这种顶会的摘要好像都比较短,一般是只有一段,而且开门见山(有时候论文背景,即background,都不说的)

2)竟然看到了CVE,这个值得关注一下。

For example, vulnerabilities CVE-2017-10810, CVE-2017-6353, and CVE-2017-8824 recently found in Linux kernel are due to ML, DF, and UAF, respectively.

此外文中还提到了CWE,不仅局限在CVE。所以这两个都可以关注下。

3)感觉这篇文章比较容易引起评委的兴趣,因为这个introduction写的非常好。

  • 首先,把要解决的问题说清楚了:分成三个类型的error
  • 然后,通过列举现在很出名的开源社区代码:linux,php,git,openssl。对Memory Deallocation Errors的普遍性进行了一个统计,这个好酷啊(从所有commits里面统计,真的我确实想不到)。
  • 然后,还举例了CVE,CWE,这让我不了解这个领域的人,都觉得这个问题很重要,很需要解决,作者确实高明。

4)如果要学习作者的写作风格,我还得看一篇。不然没法确定。(比如是不是每篇文章的introduction都要搞一个小调查小统计,来吸引评委)

5)自己定义的专业术语(工具名称):MEMFIX,是用latex写的,一看就很酷啊。。。
我不能再用word了。

6)作者在OVERVIEW这个章节里面给了图,例子,解释说明。给出一个有double-free error的程序,然后给出人为修复和memfix修复,讲的确实很清楚,没有可以指摘之处。

我不如。

7)作者在memfix用了两个关键技术:static analysis来生成候选补丁,SAT solver来求解正确补丁。其中前者是现有typestate analysis [14] 技术的变体,后者是现成的SAT solver [20]。

这说明了什么???他山之石可以攻玉。我们不一定要发明技术,如果你的想法很好,idea很不错,直接把其他领域或者其他方向的技术拿过来用,解决问题,那就是很酷的。

8)对一些专业术语使用不一样的字体,感觉很讲究。

这里写图片描述
(英文)段落中不一样的字体

9)参考文献基本上都是ICSE,ISSTA,POPL,PLDI这些顶会,还有ICSME等等。感觉使用参考文献也是比较讲究的。
不过这篇文章用的文献似乎不够新,没有18年的,17年的也比较少。16年及以前的比较多。

10)使用表格比较多。也画的挺清楚的,值得学习。

11)还讲了自己的limitation,感觉算是很实诚的了。有必要的时候,确实可以深入分析那些修复失败的benchmark set,找一下原因,也就是自己的limitation。

四、生词收集

vita 履历

Concolic testing: 和符号执行有关的一种测试。专业术语。

deallocation 英[di:ælə’keɪʃən] 美[di:ælə’keɪʃən] n. 存储单元分配;

entrust 英[ɪnˈtrʌst]
美[ɪnˈtrʌst]
vt. 委托,托付;

CWE: Common Weakness Enumeration (CWE) is a list of software weaknesses. https://cwe.mitre.org/ 然而这个网站我现在打不开。

unified 英[‘ju:nɪfaɪd]
美[‘ju:nɪfaɪd]
adj. 统一的; 一元化的; (unify 的过去式和过去分词) ; 统一标准的;
v. 统一; 使联合( unify的过去式和过去分词 ); 使相同; 使一致;

off-the-shelf
英 美 [‘ɔfðə’ʃɛlf]
adj. 现成的;常备的;成品的
adv. 现成地;无需作重大修改地

五、好句摘录

We show that these results represent a signifcant advance over the state-of-the-art by comparing MemFix with LeakFix [15], a recently developed tool for fxing memory leaks in C programs.

All experiments were done on a linux machine with Intel Core i5-4590 and 8GB RAM. 以后做实验都可以加上这一句。




文末诗词


殷勤昨夜三更雨,又得浮生一日凉。
           ——苏轼《鹧鸪天·林断山明竹隐墙》

这篇关于软工大牛Hakjoo Oh及其顶会论文解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426405

相关文章

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringCloud负载均衡spring-cloud-starter-loadbalancer解读

《SpringCloud负载均衡spring-cloud-starter-loadbalancer解读》:本文主要介绍SpringCloud负载均衡spring-cloud-starter-loa... 目录简述主要特点使用负载均衡算法1. 轮询负载均衡策略(Round Robin)2. 随机负载均衡策略(

解读spring.factories文件配置详情

《解读spring.factories文件配置详情》:本文主要介绍解读spring.factories文件配置详情,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用场景作用内部原理机制SPI机制Spring Factories 实现原理用法及配置spring.f

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告: