本文是我阅读以下论文时所作的笔记:
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 的重要性,给人以数据,尤其是软件工程里,经过实践的检验,那样的结论才会让人信服。