基于概念传播的软件项目代码注释生成方法.pdf
《基于概念传播的软件项目代码注释生成方法.pdf》由会员分享,可在线阅读,更多相关《基于概念传播的软件项目代码注释生成方法.pdf(18页珍藏版)》请在咨信网上搜索。
1、基于概念传播的软件项目代码注释生成方法*潘兴禄1,2,刘陈晓1,2,王敏1,2,邹艳珍1,2,王涛3,谢冰1,21(高可信软件技术教育部重点实验室(北京大学),北京100871)2(北京大学计算机学院,北京100871)3(国防科技大学计算机学院,湖南长沙410073)通信作者:邹艳珍,E-mail:摘要:软件代码注释生成是软件工程领域近期研究的一个重要问题.目前很多研究工作已经在包含大量对的开源数据集上取得了较好效果.但在企业应用中,待注释的代码往往是一个软件项目库,其必须首先决策在哪些代码行上生成注释更好,而且待注释的代码片段大小、粒度各不相同,需要研究提出一种注释决策和生成一体化的、抗噪
2、音的代码注释生成方法.针对这个问题,提出一个面向软件项目的代码自动注释生成方法 CoComment.所提方法能够自动抽取软件项目文档中的领域基本概念,并基于代码解析与文本匹配进行概念传播和扩展.在此基础上,通过定位概念相关的代码行/段进行自动注释决策,最终利用模板融合概念和上下文生成具有高可读性的自然语言代码注释.目前 CoComment 已经在 3 个企业软件项目、超过 4.6 万条人工代码注释数据上进行了对比试验.结果表明,所提方法不仅能够有效地进行代码注释决策,其注释内容与现有方法相比也能够提供更多有益于理解代码的信息,从而为软件项目代码的注释决策和注释生成问题提供了一种一体化的解决方案
3、.关键词:代码注释;软件项目;注释决策;注释生成;概念传播中图法分类号:TP311中文引用格式:潘兴禄,刘陈晓,王敏,邹艳珍,王涛,谢冰.基于概念传播的软件项目代码注释生成方法.软件学报,2023,34(9):41144131.http:/ Comment Generation Based on Concept Propagation for Software ProjectsPANXing-Lu1,2,LIUChen-Xiao1,2,WANGMin1,2,ZOUYan-Zhen1,2,WANGTao3,XIEBing1,21(KeyLaboratoryofHighConfidenceSoft
4、wareTechnologies(PekingUniversity),MinistryofEducation,Beijing100871,China)2(SchoolofComputerScience,PekingUniversity,Beijing100871,China)3(CollegeofComputerScienceandTechnology,NationalUniversityofDefenseTechnology,Changsha410073,China)Abstract:Commentgenerationforsoftwarecodeshasbeenanimportantres
5、earchtaskinthefieldofsoftwareengineeringinthepastfewyears.Severalresearcheffortshaveachievedimpressiveresultsontheopen-sourcedatasetsthatcontaincopiouspairs.In the practice of software enterprises,however,the codes to be commented usually belong to a software project library,and itshould be decided
6、first on which code lines the comment generation can achieve better performance;moreover,the code snippets to becommentedhavedifferentlengthsandgranularity.Thus,acodecommentgenerationmethodisrequired,whichcanintegratecommentingdecisionsandcommentgenerationandisresistanttonoise.Tothisend,CoComment,as
7、oftwareproject-orientedcodecommentgenerationapproach,is proposed in this study.This approach can automatically extract domain-specific basic concepts from software project*基金项目:国家自然科学基金(61972006)潘兴禄和刘陈晓为共同第一作者.收稿时间:2021-05-13;修改时间:2021-09-13;采用时间:2021-12-21;jos 在线出版时间:2022-03-24CNKI 网络首发时间:2023-02-2
8、3软件学报ISSN1000-9825,CODENRUXUEWE-mail:Journal of Software,2023,34(9):41144131doi:10.13328/ki.jos.006637http:/中国科学院软件研究所版权所有.Tel:+86-10-62562563documents and then uses code parsing and text matching to propagate and expand these concepts.On this basis,automatic codecommenting decisions are made by loc
9、ating code lines or segments related to these concepts,and corresponding natural languagecomments with high readability are generated upon the fusion of concepts and contexts with templates.Comparative experiments areconductedonthreeenterprisesoftwareprojectscontainingmorethan46000manuallyannotatedc
10、odecomments.Theexperimentalresultsdemonstratetheproposedapproachcaneffectivelymakecodecommentingdecisionsandgeneratemorehelpfulcodecommentscomparedwithexistingmethods,whichprovidesanintegratedsolutiontocodecommentingdecisionsandcommentgenerationforsoftwareprojects.Key words:codecomment;softwareproje
11、ct;commentdecision;commentgeneration;conceptpropagation代码注释是辅助编程人员阅读和理解源代码的有效手段之一13.由于人工编写与维护注释的工作量大、难度高4,5,近年来代码注释自动生成技术研究发展迅速,已有许多工作在开源数据集上取得了较好的效果.典型的,Iyer 等人6从 StackOverflow 问答网站上爬取了 66015 条对并通过深度学习模型进行训练,提出了自动生成 C#代码片段注释的方法;Hu 等人7从 GitHub 上 9714 个开源项目中爬取了 588108 条对,并给出了一种基于深度学习的方法代码自动注释的方法等.然而我
12、们在研究中发现,在这些验证数据集中,所提供的对都经过有效的筛选和整理.其代码片段可能来源于不同的软件项目,但主要为函数级别,其注释多用于说明函数的功能以及使用约束等.但如果函数体内部的代码较长、行数较多,需要为代码中的一行或多行关键代码添加注释(行注释)时,现有工作仍然面临注释决策困难8、注释结果可读性较差9等问题.在企业中,一个重要的应用场景是需要对一个软件项目库的代码生成注释,即软件项目代码注释.在软件项目的代码中,不仅包含不同粒度的文件、类以及函数等,而且同一粒度的实体,譬如函数,还存在大小不同、实现逻辑复杂多样的问题.与此同时,随着代码长度的增加,行注释的数量和比例也越来越大8.表 1
13、 展示了开源软件项目 ApacheLucene(https:/lucene.apache.org/)代码中目前的注释情况.可以看到,在 2150 行的函数体中,包含行级别注释的函数比例约为 58.3%;而在 51100 行的函数体中,包含行级别注释的函数比例已经达到 80.8%.因此,软件项目代码注释不仅要解决类、方法级别的代码的注释问题,还必须做出更好的注释决策,解决代码行级别的注释问题.对比开放数据集上的工作,进行注释决策和注释生成的难度都大大提高了.表1开源软件 ApacheLucene 的行代码注释情况分析函数体的代码行数行注释数量(行)110112021505110010120020
14、15005000261543780166723925721831754639122186122574004789913003752153681031210419882388320115115515191191063211388425207115805593080556572630907564991010003538121011200185185921702150005398926251+00006282Sum27351534139961244375978针对上述问题,本文提出一种面向软件项目库的代码注释生成方法 CoComment.其基本思想是从软件项目库文档中自动抽取领域核心概念,并通过代码
15、解析与文本匹配对这些基本概念进行传播和扩展,形成理解该软件库的领域概念集;在此基础上,定位这些领域概念相关的代码行/段,融合概念和模板生成具有高可读性的自然语言代码注释.对比现有工作,本文的主要贡献如下.潘兴禄等:基于概念传播的软件项目代码注释生成方法4115(1)首次研究软件项目代码的注释生成问题,提出一种基于领域概念抽取和传播的软件项目代码注释决策方法.该方法不需要收集整理大量的学习样本,具有更好的领域适应性.(2)提出一种基于概念传播的软件项目代码注释生成方法.该方法融合概念和上下文,可为概念相关的代码行/段生成具有高可读性的自然语言注释语句,与现有方法生成的注释内容相比具有更好的信息收
16、益.(3)对本文方法进行对比试验并开源了第 1 个软件项目代码注释数据集.本文方法的早期版本参与中国 CCF组织的“绿色联盟开源代码标注大赛”并荣获二等奖.针对比赛公布的 3 个开源软件项目库,本文获取所有 4.6 万条人工标注结果,并通过对比实验验证本文方法在软件项目代码注释决策、注释生成上的有效性和可用性.本文第 1 节介绍本文的动机和面临的主要技术挑战.第 2 节具体介绍本文所提出软件项目代码注释生成方法.第 3 节与人工标注数据的对比实验并讨论.第 4 节介绍相关工作.第 5 节总结全文并展望未来工作.1 动机与挑战2020 年 8 月,中国绿色计算产业联盟举办了第 3 届全国高校绿色
17、计算大赛(https:/ 3 个开源项目(openEuler、MindSpore、openGauss)软件项目代码中选择一个进行人工标注.共有 101 支队伍、335 人参加了竞赛,持续时间达 3 个月.针对每个项目,参赛人员可通过 Codepedia(http:/ 项目待标注的 Replication 模块中有 668 个函数、35970 行代码,平均每个函数有超过 50 行代码.组委会最后为 openGauss 项目评定出了一等奖 4 名,二等奖 7 名.后文表 2 介绍了这些项目的标注情况.由于此前这 3 个项目并没有对外开源,参与者们对它们并不熟悉.为了方便参与者阅读和理解软件项目代码
18、,在每个项目的代码仓库中,还包含少量的相关文档.以 openGauss 项目为例,其相关文档包括一个安装指南、一个编译指南、开发指南、术语表以及技术白皮书,均以 markdown 格式存档.图 1 展示了 openGauss 项目中 Replication模块下一个代码片段.该片段描述了函数 save_xlogloc 的实现,关键词 xlog 是理解这段代码的关键所在.阅读openGauss 的 Glossary.md 文档可知,xlog 的含义是:“Atransactionlog.Alogicalnodecanhaveonlyone.xlogfile.”由此可见,参赛者如果能够有效获得并阐明
19、这些领域知识概念,就可能提供高质量的代码注释.同时,这个函数还调用了若干其他函数,除了 strncmp,strncpy_s 等库函数外,还包括 securec_check 等自定义函数.了解这些函数的作用和功能,对理解 save_xlogloc 函数也非常重要.图1openGauss 软件项目 basebackup.cpp 文件中的一个代码片段基于上述分析,本文拟研究提出一种面向软件项目库的代码注释生成方法并参加绿色联盟代码标注大赛.其基本思想是从软件项目库文档中自动抽取领域概念,通过定位概念相关的代码行/段进行注释决策,最终融合概念和模板生成具有高可读性的自然语言代码注释.但在此过程中,需要
20、解决以下几个关键技术挑战.(1)如果文档中能抽取的概念有限怎么办?一般来说,软件项目库在开发过程中会整理相关概念形成一个术语表.但是,这些概念往往都是非常基础、核心的,数量比较少.如果要阅读和理解代码并进行有效的注释,还必须对这些基本概念进行有效的扩展、传播,以识别更多的领域概念,形成一个扩充的完善的概念集.(2)如何基于领域概念进行注释决策?由于开发者不可能也不需要为每个函数甚至每行代码都生成注释,自动注释决策就成为软件项目代码注释生成的关键问题.现有工作中的开放数据集大多是已经筛选处理好的函数,不需要考虑注释决策;少量的注释决策研究方法8,10基本采用机器学习的策略,并不能与后期的注释生成
21、工作很好4116软件学报2023 年第 34 卷第 9 期地衔接起来.因此,如何利用领域概念定位到应该注释的位置,是本文需要解决的关键问题.(3)如何融合概念生成高质量的代码注释?由于软件库待注释的代码段位置不同,长度不同,一方面难以抽取大量用于统计学习的对,另一方面学习模型很难适应到不同的软件项目代码上,使得软件项目代码注释必须摒弃现有的机器学习思路,寻找一种新的注释生成途径.考虑到项目文档中的概念解释具有很高的可读性,正确性也有相当的保证,将概念融入到注释点相应的代码段生成注释是一种可行的策略.但是,注释点的代码情况千差万别,概念的解释有长有短,如何针对概念和注释点的不同情况形成高效的融合
22、策略仍是一个关键挑战.2 软件项目代码注释生成方法本文研究提出了一种基于概念传播的软件项目代码注释生成方法 CoComment.如图 2 所示,该方法可分为概念提取和传播、注释决策与生成两个阶段,共有 4 个主要部分.Project codeConcept location&comment decisionCommentgeneration Project documents(Markdown)Concept extractionEvery concept has a name andsome related explain sentences.Document analysis andNat
23、ural Language processCode parsing andstatistical analysisMethod definition ormethod invocationFusing concept withdifferent templatesDomain concept SetPropagatingCommented code图2基于概念传播的软件项目代码注释生成方法框架概念提取:以软件项目库的官方文档作为数据源,根据文档类型(本文实验主要是 markdown 格式的文档)的特性,设计相应的启发式规则,提取文档中出现的概念,形成对,得到软件的基础概念集合.概念传播:对软件
24、项目代码进行解析并构建抽象语法树,抽取出所有的方法/函数体.然后,采用迭代扩充的思路,将基础概念集作为种子进行传播演化:(1)根据基础概念集,结合驼峰切词法对代码中函数名及其参数等进行切词;(2)将概念与切词后的词序列进行对齐,统计分析发现新的对,并加入概念集中;(3)重复上述过程,直到没有新增概念为止,得到软件项目代码的扩展概念集.注释决策:基于扩展概念集定位所有相关的代码行,综合考虑代码行的类型和相关概念的数量进行注释决策.具体包括两种情况:当概念出现在方法/函数定义中,为该函数生成相应的函数级别注释;当概念出现在函数调用处,则结合上下文为相关代码段生成相应的行级别注释.注释生成:针对每个
25、注释点,具体分析其相关概念的解释语句的情况,设计不同的概念融入模板,在注释点处生成融入概念解释的自然语言注释,并根据代码上下文情况对注释内容进行进一步调整.2.1 概念提取软件项目文档中往往会解释该软件的一些基本概念.以 openGauss 项目为例,许多关于 openGauss 领域的概念词散布在项目的安装指南、编译指南、开发指南、术语表中,并以不同方式呈现.典型的,在术语表中逐项列出,在其余文档中则大多以标题、加粗、特殊字体等形式出现.在概念提取阶段,本文以上述文档作为数据源,针对文档半结构化的特性设计相应的启发式规则对概念的名称以及对应的解释语句进行提取.具体地,首先对术语表中每一项的概
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 概念 传播 软件 项目 代码 注释 生成 方法
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【自信****多点】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【自信****多点】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。