转载自CodeWisdom
CodeWisdom(http://bigcode.fudan.edu.cn)是复旦大学软件工程实验室(www.se.fudan.edu.cn)开发的代码大数据与智能化软件开发研究成果展示与服务平台。该平台在GitHub等开源软件社区的软件代码及软件开发历史,StackOverflow等软件开发问答网站的问答知识,以及API文档等互联网软件开发资源基础上,利用程序分析、深度学习、自然语言处理、知识图谱、数据挖掘等技术,充分发掘代码大数据中所蕴含的知识,通过检索、推荐、问答、可视化等多种手段提供智能化软件开发支持。
CodeWisdom平台目前提供代码推荐、API知识图谱、API排行榜、代码差异理解、代码克隆检索五个方面的智能化服务。欢迎大家进行试用并提供反馈意见。我们将不断改进和丰富CodeWisdom平台的功能,并根据反馈意见进行调整。
基于深度学习的API
使用代码生成式推荐
背景:开发者经常依赖于各种API来完成开发任务。然而,可用的API数量十分庞大,使用方式也非常复杂,这些都使得开发者经常要花费很多时间确定符合需要的API及其使用方法。现有的IDE所提供的代码推荐功能仅能按照使用频率、名称匹配等信息在开发者指定的API包或类的基础上提供API类和方法提示,无法在开发者未知所需要的API时给出有用的推荐。
我们的工作
01
我们在大量Java代码基础上利用深度学习训练所得到的代码预测模型能够根据已有的代码上下文给出语句级的API使用代码推荐。
主要特点包括:
生成模型考虑了代码的控制结构等程序特性并可利用上下文中已有代码
展开全文
能够生成较完整的语句,包括API类或对象、方法以及相应的调用参数
能够生成所需要的控制结构
(如if、while等)
目前代码预测模型支持JDK中的API使用代码推荐。
平台展示
02
编程助手界面
本平台以Web编程助手的形式提供API使用代码生成式推荐服务(如图所示)。用户在提供一个不完整的Java程序(仅包含单个方法)后,可以通过将光标置于需要推荐的位置上并点击Recommend按钮(或按control+Enter快捷键)的方式获得代码推荐。所推荐的Top-10代码行选项将显示在右边,点击选择一个选项后相应的语句将被填充到相应的位置上。此后,用户可以将光标置于下一行并继续请求代码推荐。Web编程助手的详细使用方法可以参照网页上How-to-use说明。
API知识图谱与自动问答
背景:与API相关的语法声明、功能描述、使用方式、约束、问题处理方式等知识广泛存在于API文档及教程、开发问答网站(如StackOverflow)中的问答讨论以及开源社区(如GitHub)中的API使用代码中。此外,掌握API及其使用方式还需要理解大量与计算机和编程相关的背景知识(如进程、线程、JSON、网络等)。对于开发者而言,从各种知识来源获取所需的API知识并形成整体性的理解是相当困难的。
我们的工作
01
我们从API文档、GitHub、StackOverflow、通用知识图谱等多个异构知识来源进行了知识抽取,获得了大量API实体(如API库、类、方法等)、API描述信息(如功能、使用指南等)以及相关的背景知识(如相关的计算机和编程概念),并对其进行了广泛的融合和关联,最终形成了API知识图谱。目前初步构建的API知识图谱覆盖了JDK和Android框架API。
平台展示
02
API数据可视化
本平台为用户提供了基于关键字的知识搜索以及基于链接图和百科页面的知识浏览(如图所示)。在此基础上,平台还提供了初步的API知识自动问答能力。未来我们还将进一步完善API知识图谱内容并提升其中的知识质量,同时提供更加丰富的API知识服务及相应的访问接口。
API排行榜
背景:第三方库和框架通常以API的方式提供给开发人员使用,从而提高软件开发的效率和软件系统的质量。然而,在实践中,即使对于非常有经验的开发人员,学习和使用API是一件非常困难的事情,导致开发人员经常误用API,引起未知的软件行为或者软件缺陷(包括功能缺陷、性能缺陷、安全缺陷、兼容性问题等)。
我们的工作
01
从大量JAVA开源项目的代码和演化历史中通过AST分析和代码变更分析抽取API的使用信息、以及使用出错信息
统计API的使用次数和项目个数、以及使用出错次数和项目个数
未来我们还将进一步自动化抽取API出错的模式,在开源项目中大规模检测API误用的软件缺陷。
平台展示
02
API排行榜
API排行榜展示了特定主题相关的API的使用排行榜以及使用出错排行榜,
并提供了这些相关JDK API的使用趋势图。API排行榜能够为开发者在选择JDK API时提供一定的帮助(例如选择最流行的API,同时警惕最容易出错的API),从而避免API的误用。目前的API排行榜支持JDK API。
代码差异理解
背景:分析和理解代码变更对于许多软件工程任务(如代码审查、代码合并、回归测试等)至关重要。然而,目前的代码差异分析方法所生成的代码差异粒度太细,也不考虑代码差异之间的关联关系,导致难以理解代码变更的内容。
我们的工作
01
通过目前的代码差异分析方法生成一次代码变更在抽象语法树上的细粒度代码差异(如增加抽象语法树上的一个结点)
通过局部聚合和归纳把相邻的、关联的代码差异生成高层的、粗粒度的代码差异(如增加一个条件判断的代码块)
分析这些高层的代码差异之间的关联关系(如三个新增的条件判断代码块是一样的)
未来我们还将进一步分析第三方库和框架API版本间的代码差异,检测兼容性问题。
平台展示
02
代码变更理解
本平台为用户提供了基于Github 项目某次Commit代码的分析工具。用户在输入URL后,可浏览代码差异理解工具呈现的代码差异块及其文字总结。并且提供了差异块之前的关联关系引导,促进理解代码变化的上下文。代码差异理解可以被应用于各种软件维护任务中,例如能够辅助开发者理解一次代码变更的内容,提高代码评审的效率。
代码克隆检测和演化谱系
背景:代码克隆检测帮助用户查找感兴趣的代码在哪些开源项目里面出现过,并且可以查到这些代码在开源项目历史上的演化情况。开源项目中的这些代码的演化历史,以及与之相关的代码修改和缺陷等信息,能够帮助用户理解所查询的代码可能会存在什么样的问题,进而为用户提供修改代码的参考。
我们的工作
01
该工具将所找到克隆根据所在项目和版本进行梳理,利用大规模的代码索引技术,我们将海量开源代码在方法级别上进行了处理。后续,我们还将进一步支持更细粒度的代码克隆检测、来源分析以及演化分析,利用大数据处理框架,提升克隆检测的效果和效率。
主要特点包括:
可以实现在上亿个方法中快速找到相似的方法体
使用户了解这些相似的重复方法在相应项目历史上是如何演化的,为用户构建和展示代码克隆的演化谱系。
平台展示
02
方法克隆搜索界面
本平台为用户提供在大代码库中寻找相似代码(克隆代码)以及观察克隆代码如何演化。目前我们支持搜索整个方法体。我们正在准备项目内的克隆,届时,用户可以在code base上浏览整个项目内的克隆。
排版|CodeWisdom
文案|CodeWisdom
专注智能化软件开发,欢迎关注我们