
48
Journal of Software 软件学报 Vol.31, No.1, January 2020
storage and evolution management, semantic understanding, and intelligent application, which are essential to meet the various types of
demands of the intelligent software development.
Key words: intelligent software development; knowledge graph; big code
基于知识图谱的智能化软件开发是进一步推动软件行业发展的重大历史机遇.
一. 软件产业日益成为社会经济发展的战略性基础产业.进入 21 世纪以来,信息技术已成为推动国民经
济发展、促进社会生产力提升的强大动力,作为与国民经济和社会发展紧密相关的基础战略型先导
产业,信息产业受到了越来越多国家和地区的重视.得益于政策法规的鼓励和支持,我国软件行业在
“十一五”期间保持快速增长态势,年均收入平均增速高达 30%以上.根据工信部发布的《2017 年软件
业经济运行情况》报告显示,2017 年度中国软件行业共实现业务收入 5.5 万亿,比上年增长 13.9%,成
为经济转型和产业升级的支柱
[1]
;
二. 软件行业发展仍然面临诸多严峻挑战.尽管软件产业正处于蓬勃发展时期,但总体来看,我国软件企
业竞争力仍然较弱.根据普华永道 2016 年度的“全球软件百强企业”报告,全球软件重点企业美国占比
为 75%,而中国仅有一家企业入围.开发成本高昂、生产效率低下、移植运维困难等因素,成为制约我
国软件行业深入发展的主要瓶颈
[2]
;
三. 基于知识图谱的认知智能是突破软件产业发展瓶颈的重大机遇.2012 年谷歌推出知识图谱以来,知识
图谱技术发展迅速,产生了日益广泛的社会、经济效益,成为发展人工智能战略的重要内容.知识图谱
是一种大规模语义网络,表达了实体/概念及其之间的各种语义关系.知识图谱为机器语言认知提供
了丰富的背景知识,使得机器语言认知成为可能
[3]
,进而使得文本自动化处理、智慧搜索、精准推荐、
自然人机交互、深度解释等一系列智能化应用成为可能.知识图谱是认知智能的核心,是软件行业智
能化转型的使能器(enabler);
四. 软件行业大数据使得知识图谱的构建与应用成为可能.代码大数据为知识图谱的构建提供了数据来
源,而基于大数据的算法(如深度神经网络)为知识图谱的自动构建提供了辅助.目前,全球存在许多开
源且高度结构化的平台,例如 GitHub.这些开源平台为大规模代码知识图谱的构建提供了数据源.截
止 2018 年,GitHub 已经集聚了全球 3 100 万开发者、210 万组织以及 9 600 万代码仓库,且每个仓库
都包含高度结构化的信息,如编程语言、代码库名称、代码库描述等
[4]
.
目前,知识图谱已在金融投资、风险控制、科学教育等诸多行业得到了较为广泛的应用.但在软件行业,代
码知识图谱的应用还不多见.但是,知识图谱是认知智能的关键技术,展现出了解决智能化软件开发过程中各种
瓶颈问题的巨大潜力.
代码知识图谱将成为智能化软件开发的利器:首先,知识图谱能够为理解用户意图提供强大的背景知识,支
持知识和事实的逻辑推理,有助于实现语义层面的搜索泛化;其次,基于知识图谱的代码推荐具有较强的可解释
性,帮助用户理解推荐结果,支持推荐规则和流程的优化;最后,知识图谱的引入能够为代码生成提供模板,通过
融合模板和深度生成模型,能够为用户生成满足意图的代码.
例 1:以用户查询“如何将 tex 文件格式转换成 pdf 文件格式”为例,说明代码知识图谱在代码搜索和推荐中
的优势.基于对查询短文本的语义理解和分析,如果现有的知识图谱中有一个实体名为 tex2pdf converter(输入
为 tex 文件格式,输出为 pdf 文件格式),则系统将该实体对应的软件实例返回给用户.如果查询不到满足要求的
代码实体,但是已有的知识图谱中存在如图 1 所示的其他相关代码实体.通过查询 tex 和 pdf 实体,以及两个实体
之间的路径,可以发现 textex2dvi converterdvi2ps converterps2pdf converterpdf 的路径,从而可以同时将
这 3 个 conve
rter 实体及对应的实例推荐给用户.进而,根据已有 3 个 converter 实体的 isA 关系,可以获得具体的
软件包名和具体用法,作为辅助说明信息一并返回给用户.
传统的软件开发主要以人工编程为主,简单的代码自动构造为辅.传统的代码自动构造技术主要有模型驱
动的软件开发
[5]
和基于逻辑规约
[6]
的程序合成这两种方式.传统的人工编程环境相对简单、代码自动纠错困难、
编程接口有限,而代码自动构造技术又存在着模型设计复杂、通用性差以及可扩展性弱的缺陷.现阶段的软件
评论