大规模可视化API用法示例(Visualizing API Usage Examples at Scale)

学习如何正确有效地使用现有的API是软件开发中的一个常见任务,也是一个核心挑战,因为库和API的数量和复杂性正在增加。程序员经常在Q&A论坛中搜索在线代码示例,阅读教程和博客帖子,学习如何使用给定的API。然而,经常对于大量相关的代码示例,用户很难理解它们之间的共性和差异,并深入到具体的细节。我们介绍了一个交互式可视化探索从开源库挖掘的大量代码示例。该可视化通过一个合成代码框架总结了数百个代码示例,其中包含规范调用语句和包含API调用结构的统计分布。

程序员经常搜索代码示例来完成编程任务并学习新的API。个别代码示例可能会出现不安全不可靠、用法过时和理解困难等问题。然而,在实践中,由于时间和注意力有限,开发人员通常只查看少量搜索结果。为了指导用户同时探索大量的代码示例,EXAMPLORE构建了一个代码框架,演示了各种API使用特性,可视化了大量开源项目中每个特征的统计分布,提供一个导航模型,允许用户理解抽象API使用特性和具体实例之间的对应关系。同时探索和可视化大量代码示例,帮助开发人员更好地理解常见的API的使用方法。

在软件工程界,人们越来越关注挖掘Big Code — 大集合开源存储库,来检测潜在的bug或者帮助程序员理解隐含的编程规则。

为了可视化和导航成百上千个代码示例的,论文引入了一个合成代码框架的概念,它在一个视图中总结了各种API使用特性,以便于探索。图1(a)显示了EXAMPLORE界面中的代码框架布局,演示了不同方面的API用法。该框架由以下七个API使用特性组成,这些特征可以与用户感兴趣的焦点API方法调用一起出现:声明、前调用、保护、检查返回值、后调用、异常处理、资源管理。

图1 系统界面

这个框架设计目标是API在Java中的使用。框架的所有组件都是软件工程界认可的Java API设计和使用的标准。换句话说,框架是在设计、教授、研究Java API的领域知识的具体化。

EXAMPLORE旨在帮助程序员理解给定API常见和不常见的使用模式。一个开发人员想学习如何在Java中使用FileInputStream对象。EXAMPLORE展示了从GitHub上挖掘的一百个代码示例,其中包括至少一个调用来构建FileInputStream对象。屏幕的右半部分显示所有被挖掘的代码示例,从短到长排序。可以在每个示例中快速找到FileInputStream构造函数,因为它们都被蓝色高亮显示,与框架中的焦点API部分的头部一样。框架中的每个部分都有不同的标题颜色,用来高亮代码示例中相应的具体代码段,例如初始化声明是红色。这是为了减少解析大量代码的认知负载,并允许用户更容易地识别每个示例代码中不同部分的用途。

EXAMPLORE默认显示框架中每个部分前三个最常用的选项(图1(b)⑦)。通过查看图中保护选项IF部分,用户可以看到其他程序员通常如何保护FileInputStream不接收无效的参数。通过左边的直方图中蓝色的条形,用户可以看到最流行的保护代码通常不会被频繁使用。如果他希望在每个框架部分看到更多或更少的选项,他可以点击“显示更多”或“显示较少”按钮,或者通过点击“显示全部”来探索语料库的尾部(图1(b)②)。

若用户感兴趣的是探索和更好地理解不太常见的FileInputStream构造函数,它采用表示文件名的字符串参数。通过点击stream = new FileInputStream(fileName).旁边的单选按钮。活动过滤器(图1(b)⑤)被更新,屏幕的右边只列出了用字符串构造FileInputStream的代码示例。

框架视图中的特征选项基于用户的选择进行修剪和更新(如图2)。由于FileInputStream构造函数采用字符串参数而不是文件对象,因此声明和初始化文件对象的选项将消失。剩下的共同出现选项的计数受到影响:通过淡粉色条形显示的未过滤的总数不变,但较暗的条形显示了用字符串构造FileInputStream的示例子集的个数。

图2 选择更新

EXAMPLORE通过三个阶段检索和可视化了给定API的数百个用法示例,如图3所示。在数据收集阶段,EXAMPLORE利用现有的API使用挖掘框架爬取了380K GitHub存储库,并检索大量的代码示例,其中至少包括一次对给定API的调用。在后处理阶段,EXAMPLORE分析代码示例,使链式调用规范化以及规范变量名,将所检索的代码示例集化为规范形式,从而用户可以轻松地查看相关API使用特性,而无需处理不同的句法结构和不同的具体变量名称;标记对应于框架中每个API使用特征的代码段,然后提取和规范代码段来填充MangoDB数据库中的每个特征的选项。在可视化阶段,EXAMPLORE呈现代码框架,包括每个特征的规范化选项及其在语料库中的分布,突出显示每个代码示例中的代码段,从中提取规范化选项。用户通过选择特征和特定选项来与可视化交互。

图3 3个阶段

总的来说,代码示例是学习不熟悉API的关键学习资源。当前搜索和浏览代码示例的工具通常会产生大量代码示例,开发人员只有有限的时间和注意力来进行审查。在本文中,介绍了一个合成代码框架的概念,从一组代码示例中总结了各种API的使用特点在一个视图里。EXAMPLORE实例化合成代码框架并加入统计分布,并允许用户从GITHUB库中挖掘具体的代码示例。

评论关闭。