软件构件 API 在不同版本间的兼容性——读FSE 2012 best paper有感

来源:互联网 发布:jvm垃圾收集算法有哪些 编辑:程序博客网 时间:2024/05/18 03:24
本文是我阅读以下论文时所作的笔记:

Bradley E. Cossette and Robert J. Walker, Seeking the Ground Truth:A Retroactive Study on the Evolution and Migration of Software Libraries

先沾点光,原来这篇文章是由我们卡大(U of Calgary)计算机系的Robert  Walker 教授和他的phd学生Bradley  Cossette共同写的,该paper 获了FSE最佳论文奖。

本项研究是关于软件不同版本的API接口演化的一个经验研究,研究方法就是拿几个开源软件来分析一下,看看它们的接口是如何演化的。他们分析的开源软件包括:Structs, log4j, jDOM.

他们做得比较牛的是,他们用了一个自动化的工具,叫做Clirr,用来查两个发布版本间的API是否可以有Binary incompatibilities(BI)。

这里就要提一提,这个研究利用的巧力了,那就是Binary incompatibility, 这是在 这本书

 Gosling, Joy, Steele, and Bracha, The Java Language Specification, Third Edition, Addison-Wesley, 2005; chapter 13 Binary Compatibility

里明确定义了的,在这个站:http://wiki.eclipse.org/Evolving_Java-based_APIs_2 里 给出一个详细的BI分类列表。

本文做的,就是根据这些BI分类,写了一个自动化的工具,来自动检测两个发布版本间是否有BI. 这是他们文章取巧的地方,也是智能化的地方。

另外,他们的经验研究发现,有近20%的BI是无法找到合适代替的。例如,在第一个版本里有一个方法1:method1(), 演化到第2个版本后,这个方法method1() 已经不存在了,那么为了让我们的旧系统兼容新的API, 就要找到method1()的替代品。Robert的这篇文章发现,有20%
的方法/数据成员,无论用哪种推荐方法(recommendation technique),都是无法找到替代品(replacement)的。

总结:

1. 软件工程的科研还是从比较细的地方入手,例如本文的API在新旧版本的兼容性问题。找到合适的问题,然后做得细致,做得精深。

2. Empirical study 的重要性,给人以数据,尤其是软件工程里,经过实践的检验,那样的结论才会让人信服。
原创粉丝点击