卡内基梅隆大学 | MARBLE:挖掘样板代码以识别API可用性问题

原文标题:MARBLE: Mining for Boilerplate Code to Identify API Usability Problems
原文作者:Daye Nam, Amber Horvath, Andrew Macvean, Brad Myers, Bogdan Vasilescu
原文链接:https://cmustrudel.github.io/papers/ase19marble.pdf
发表会议:ASE 2019
笔记作者:0kka@安全学术圈
主编:黄诚@安全学术圈

1、研究介绍

设计易用的API对于开发人员的生产力和软件质量至关重要,但是如何设计易用的API也非常困难。由于缺乏一种大规模自动化方法来挖掘API的可用性数据,因此很难预测API的易用性障碍和真实世界使用情况。

本文重点了讨论API使用中的样板代码(Boilerplate Code),因为从一些API设计者的视角,样板代码的存在通常反映了API的具有较差的可用性。样板代码通常具有很大的重复性,通常被认为是一种冗余而又不得不写的代码,可以通过元编程等高级机制来减少对样板代码的需求。

作者针对样板代码这一问题开展了研究,总的来说包括四个方面:1)样板代码挖掘问题;2)样板代码的标识性特点;3)样板代码自动化挖掘算法;4)针对13个Java库的观察研究。

2、研究内容

2.1 认识样板代码

作者通过进行文献收集、问卷调查以及收集论坛问题和代码仓库commit作为原始材料。在这些材料的基础上作者从三个方面开展了对样板代码的研究:1)样板代码背后的设计机理;2)样板代码的存在原因;3)开发者们如何应对样板代码。

作者最终归纳了样板代码的四个特点:

  • Undesirable:模板代码通常带有主观的负面评价,并且将简单的实现方式复杂化;
  • High frequency:样板代码通常在不同的上下文中多次出现,其高频属性意味着样板代码示例应该在常见的 API 代码示例中找到;
  • Localized:这些模板代码的例子都是在单个方法或类内部紧密地排列,这使得它们更容易被识别;
  • Little structural variation:样板代码实例通常以相似的形式出现,没有明显的结构变化。因为这些代码通常被频繁地复制粘贴,并且没有进行大的修改。

而对于样板代码存在的原因,作者则借用了代码克隆[1]中的类似概念,包括开发策略、维护效益、克服底层限制以及意外克隆。

通过对commit中的样板代码进行分析,作者发现大部分减少模板代码的方法是引入新的辅助函数或类。

2.2、样板代码挖掘

作者使用了开源的API序列挖掘工具PAM[2]对选定的13种常用API的使用模式,具体而言PAM首先对每个源代码文件进行解析,并从每个方法种提取目标API的调用序列,然后使用深度优先遍历抽象语法树的方法进行解析,同时记录每个API调用在不同方法中的频率信息,以通过期望最大算法来构建概率模型(对应样板代码的High frequency这一特点),以识别常见的API调用序列。

仅关注API的使用模式则忽略了代码中的结构信息,因此作者对包含对应API行为模式的文件首先进行文件级的抽象语法树构建(对应了样板代码的Localized这一特点),然后通过分解方法级语法子树进一步缩小样板代码的范围。

而第三步作者则通过样板代码的第三个特点(Little structural variation)来对其进行挖掘,对于包含相同API行为模式的文件首先计算了二者间的树相似度。

然后作者利用相似度构建了一个有权图,通过 Louvain 社区发现算法对具有高度相似性的样板代码进行检测。

3、个人思考

本文通过对分析样板代码的问题以小见大,在挖掘方法中充分利用了的样板代码的各种特点,层层递进。本文仅对Java生态中的样板代码进行了分析,此后还可以应用于其他语言生态。

论文作者信息

  • 论文作者:Daye Nam
  • 作者介绍:卡内基梅隆大学博士生,研究方向涉及软件工程、人工智能和人机交互的交叉领域,旨在改进API的可用性。
  • 个人主页:https://dayenam.com/

参考文献

[1] ROY ChanchalK, CORDY JamesR. A Survey on Software Clone Detection Research[J]. 2007.

[2] Fowkes J, Sutton C. Parameter-Free Probabilistic API Mining Across GitHub[C]//Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. 2016: 254-265.

安全学术圈招募队友-ing 
有兴趣加入学术圈的请联系 secdr#qq.com

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐