没有合适的资源?快使用搜索试试~ 我知道了~
软件影响13(2022)100323原始软件出版物Clone-Writer:一个使用代码克隆开发代码的有效编辑器MuhammadHammada,Mr.Muhammad,ÖnderBaburb,a,HamidAbdulBasitc,MarkvandenBrandaa荷兰埃因霍温理工大学b荷兰瓦赫宁根大学研究中心c沙特阿拉伯苏丹王子大学A R T I C L E I N F O关键词:代码克隆代码编辑器代码完成自动化工具A B标准“代码完成”是代码编辑器的一个重要功能。这样的编辑器通常根据到目前为止编写的代码提供关于下一个可能的固定长度的代码令牌的建议。代码克隆(类似的代码片段)在快速开发中起着重要作用,但传统上被忽视为代码完成的一部分。为了方便代码克隆重用,我们提出了一个自动化的软件开发工具,称为克隆作家。 该工具通过在迄今为止编写的代码的基础上推荐代码克隆来帮助快速开发代码。此外,开发人员可以基于编写为源代码术语或自然语言的搜索查询来执行代码克隆搜索。该工具还包含支持代码完成的不同可视化功能。我们通过考虑可视化方法的分类框架以及用户目标和信息需求来评估我们的工具。代码元数据当前代码版本v1.0用于此代码版本的代码/存储库的永久链接https://github.com/SoftwareImpacts/SIMPAC-2022-70可复制胶囊法律代码许可证MIT使用的代码版本控制系统例如svn,git,mercurial等。如果没有,也不要软件代码使用的语言、工具和服务python、flask、CodeMirror(JavaScript库)、JetBeans PyCharm Community Edition编译要求、操作环境和依赖项windows、python和flask如果可用,请链接到开发人员文档/手册https://www.win.tue.nl/~mhammad/Clone-Writer/UserGuideCloneWriter.pdf问题支持电子邮件m. tue.nl1. 动机和意义软件在社会中发挥着核心作用,每天都在影响着数十亿人的生活。软件开发人员经常重复使用存储库中的源代码来开发软件,因为它节省了开发时间和精力。软件开发人员在编写新代码时面临的挑战之一是找出如何实现某个功能(例如,如何实现快速排序)[1]。这些功能或代码片段的实现可能已经被其他开发人员实现,并且可以重用,而不是从头开始编写代码片段可以帮助开发人员理解其他人如何处理类似的问题[2],并可以作为编写∗通讯作者。电子邮件地址:tue.nl(M. Hammad)。https://doi.org/10.1016/j.simpa.2022.100323新方案[3]。这些片段可以加速开发过程[4]并提高产品质量[5]。一个工作的代码片段可以被认为是学习和实用的重用。一个理想的工作代码片段应该是简洁、完整、独立的,并且易于理解和重用。代码克隆可以被认为是理想的代码片段,因为它们比新开发更稳定,风险更小[6,7]。开发人员经常需要搜索这些代码克隆来改进他们的代码[1],以解决软件工程挑战,例如软件多样化[8],软件修复[9],甚至自动化接收日期:2022年5月20日;接收日期:2022年5月20日;接受日期:2022年5月22日2665-9638/©2022作者。由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表软件影响杂志 首页:www.journals.elsevier.com/software-impactsM. Hammad,2004巴布尔,H.A.Basit等人软件影响13(2022)1003232软件移植[10]。为了应对这些挑战,“代码补全”是最有效和最常用的功能 集成开发环境(IDE)[11]。对于代码完成,已经引入了几种技术。[12]中提出的方法通过分析上下文信息和方法调用之间的关联关系来改进API方法调用完成。在[11]中,作者提出了一个用于代码完成的模块化神经框架,专注于API完成。但是,它们都不支持将代码克隆用作代码建议的一部分。代码克隆通常代表重复的功能,并且是在探索性或快速开发中重用的候选者[6,7]。为了重用代码克隆作为代码完成任务的一部分,我们做出了两方面的贡献:(1)引入Clone-Writer,1它通过提供代码克隆方面的建议来帮助开发人员快速编写代码;(2)基于“代码完成”任务评估工具功能2. 软件描述Clone-Writer利用BigCloneBench和IJaDataset[13]建议。这些建议是在编写代码时基于用户上下文生成的,或者在搜索代码克隆时基于提供搜索查询生成的Clone-Writer是一个概念验证工具,可以在任何Web浏览器中工作。它是在flask中开发的,flask是一个用python编写的微型web框架。我们使用html和java-script来开发用户界面,以便在任何web浏览器中显示。业务逻辑是用python语言开发的,它与以文本文件格式存储的搜索语料库进行交互。它使用CodeMirror 2(一个java脚本库)来开发编辑器的功能,例如java代码的语法突出显示,将单个代码标记预测为列表,格式化代码以及显示代码行号。2.1. 软件构架Clone-Writer 利 用 我 们 之 前 提 出 的 方 法 Deep- Clone [6] , Clone-Advisor [7]和Clone-Seeker [14]。DeepClone介绍了一种语言模型,用于根据用户上下文(到目前为止编写的代码)从预测的代码令牌中生成克隆方法。由于语言模型的限制,这些生成的克隆方法与真正的克隆方法存在差异,包含各种语法或逻辑错误。Clone-Advisor通过推荐与生成的克隆方法紧密匹配的真实克隆方法来改进DeepClone的方法。Clone-Seeker根据编写为源代码术语或自然语言的搜索查询执行代码克隆搜索。图1显示了Clone-Writer工具的模块化、基于组件的体系结构。典型的工作流程如下:首先,开发人员有两个选项来获得代码完成任务的推荐克隆,或者基于用户上下文(图中的标签1)。2(a))在主程序中编写代码时代码编辑器,或者通过提供搜索查询来搜索搜索窗口(标签4)。如果开发人员希望在主代码编辑器中根据用户上下文推荐克隆,我们调用Clone-Advisor模块(标签1)。在这个模块中,我们首先对用户上下文应用预处理步骤,并将其传递给我们的DeepClone模型以生成克隆方法。然后,我们将生成的克隆方法传递给搜索引擎,从搜索语料库中获得k-最接近匹配的真实克隆方法(标记6为推荐克隆)。k值可以在配置设置中定义(标签3)。默认情况下,其值为5。 开发人员还可以根据搜索查询获得推荐的克隆,无论是自然语言文本还是源代码术语。在这种情况下,我们调用克隆-搜索模块(标签4),它使用注释策略,如1工具演示视频https://www.win.tue.nl/~mhammad/Clone-Writer/CloneWriterVideo.mp4.2 代码镜像java-script库。https://codemirror.net/由开发人员定义的基线、自动和手动(有关不同注释策略的详细信息,请参见[14])。在这个模块中,我们对搜索查询应用预处理步骤,并将其传递给搜索引擎以找到k个最接近的匹配real clone方法(标签6)。一旦生成了推荐的克隆,开发人员就可以使用可视化支持(标签7)对它们进行分析。 其中之一是迷你代码编辑器(小鼠)的k集,其中提供了推荐的克隆(标签3,图3)。2(a))。推荐的克隆方法已根据TF-IDF分数进行了排名,该分数通过进度显示条形图(pbv)。开发人员可以使用代码检查视图(civ)并排(图3(a))或一次以统一表示(图3(a))检查推荐克隆的成对共性和差异。3(b))。 同样,开发人员可以了解通过标签云视图(tcv),通过可视化一组标识符名称,如方法,变量和类型名称(图1),4(b))。大小表示这些单词的频率,其中每个标识符用唯一的颜色表示。此外,开发人员可以通过点图(dp)可视化所有推荐克隆的TF-IDF评分方面的成对相似性(图2)。4(a))。点图有助于显示列项和行项所列的建议克隆之间的克隆关系。在对推荐的克隆进行分析后,开发人员可以选择在主代码编辑器(mace)中使用它们进行swift开发。2.2. 软件功能接下来,我们将从两个方面描述Clone-Writer为开发代码提供的功能,例如推荐和可视化:推荐1. Clone-Writer将标记从光标点带到上一个20个标记作为主代码编辑器中的输入(用户上下文),并生成推荐的克隆。2. 它根据自然语言文本或代码作为查询来搜索和推荐代码克隆。它提供了三种不同类型的搜索,这是基于克隆搜索方法中引入的注释策略,即基线,自动和手动。3. 它根据用户输入生成建议,作为单代码令牌的列表。想象力。1. Clone-Writer根据配置设置中设置的k值生成k个2. 它包括一种机制,允许开发人员格式化主代码编辑器和迷你代码编辑器中提到的代码。3. 它允许开发人员将代码克隆从迷你代码编辑器拖放到主代码编辑器。同样,它也方便开发人员从迷你代码编辑器复制粘贴代码克隆主代码编辑器。4. 它显示推荐克隆的相似性百分比(以TF-IDF分数表示),无论是使用DeepClone模型生成的克隆方法,还是通过进度条视图使用搜索查询。5. 它允许开发人员通过两种类型的代码检查视图(例如并排和统一表示)比较两个推荐的克隆。6. 为了获得代码克隆的语义,它允许开发人员通过标记云视图查看选定代码克隆中使用的标识符的重要性。7. 它通过点图显示推荐克隆之间的TF-IDF评分的M. Hammad,2004巴布尔,H.A.Basit等人软件影响13(2022)10032333. 说明性实例Fig. 1. Clone-Writer架构图。方法,用较大的字体表示最频繁的标识符。图2(a)示出了显示用于“计算素因子”功能的推荐克隆的说明性示例。Clone-Writer显示了它的用户界面,由三个主要部分组成:(1)开发人员可以在主代码编辑器中编写代码(图中的标签)。2(a) 1);(2)开发人员可以使用工具栏选项(标签2)来执行不同的任务,例如主代码编辑器的代码格式化、基于用户上下文推荐克隆、基于作为自然语言项或代码标记的所提供的搜索查询来搜索克隆、以及基于代码检查视图(侧)来比较克隆通过side和single模式)和dotplot;(3)开发人员可以在一组迷你代码编辑器的右侧(标签3)获得推荐的克隆。开发人员可以通过代码检查视图选择两个迷你代码编辑器来比较推荐的克隆方法。图2(b)呈现了k值的配置设置,其指示Clone-Writer推荐k个最相似的克隆方法,同时预测克隆或搜索克隆作为自然语言术语或代码标记。图3(a)通过代码检查视图呈现并排比较 从迷你代码编辑器中选择两个克隆方法。类似地,当开发人员从“视图类型”下拉列表中选择绿色用于显示添加的令牌,红色用于显示删除的令牌。图4(a)呈现了显示每个推荐克隆(R1至R5)的成对比较的点图,其中每个细胞颜色强度表示TF-IDF评分值。较高的TF-IDF分数意味着较高的颜色强度,反之亦然。图4(b)给出了一个标签云视图,帮助开发人员识别克隆最后图5提供了一个搜索窗口,允许开发人员根据自然语言文本或代码标记搜索代码克隆。类似地,开发人员需要从[14]中介绍的下拉列表中选择注释策略,例如基线,自动和手动。4. 影响衡量各种性能方面。当前的IDE通常根据下一个可能的固定长度的代码标记提供建议基于用户上下文。Clone-Writer是第一个工具,它利用代码克隆的建议,以满足代码完成任务。这些建议是在编写代码时基于用户上下文生成的,或者在搜索代码克隆时基于提供搜索查询生成的。Clone-Writer是建立在使用各种建议的方法,如DeepClone [6],Clone-Advisor [7]和Clone-Seeker [14],这些方法之前已经在各个方面进行了严格的评估。因此,我们可以推断这些方法的结论克隆作家工具。我们在之前的评估中已经得出结论[6],DeepClone模型不仅帮助开发人员快速编码,而且还提供了 一个完整方法的一组连贯的代码标记。同样,我们还得出结论,克隆顾问是DeepClone的一种改进方法,可以产生自然的输出,并产生高度准确的结果[7]。最后,Clone-Seeker还可以根据编写为源代码术语或自然语言的搜索查询生成有希望的搜索结果[14]。因此,基于这些结论性陈述,我们可以声称我们的克隆作者工具推荐了一个完整的克隆M. Hammad,2004巴布尔,H.A.Basit等人软件影响13(2022)1003234图二、 Clone-Writer工具主屏幕和设置的概述。图三. 代码检查视图。基于用户上下文的方法主体,通过产生自然和高度准确的克隆建议来帮助软件的快速开发。根据分类框架进行评价。 为了评估我们的工具可以在多大程度上满足代码完成任务,我们利用我们以前在分类框架上的工作[15框架分类关于软件开发任务的可视化--所谓的该框架帮助开发人员了解何时以及如何使用给定的可视化技术来实现已知的软件开发任务。作为用户的目标。M. Hammad,2004巴布尔,H.A.Basit等人软件影响13(2022)1003235见图4。 点图和标记云视图。图五. 克隆探索者。M. Hammad,2004巴布尔,H.A.Basit等人软件影响13(2022)1003236表1满足代码完成任务所需的信息需求列表,支持by set组of visualizations可视化.符号描述可视化竞合利益提交人声明,他们没有已知的竞争性财务利益或个人关系,可能会出现N5克隆片段有多大?克隆体中包含哪些类型的句法结构N9克隆类的实例之间有什么区别?N11克隆对于特定任务civ , mace ,miceciv,mace , miceciv,dpPBV影响本文报道的工作致谢作者要感谢沙特阿拉伯苏丹王子大学,沙特阿拉伯的支持。附录A. 补充数据手头?N34克隆或克隆类背后的高级抽象/概念是什么?TCV与本文相关的补充材料可以在网上找到在https://doi.org/10.1016/j.simpa.2022.100323。引用[1]K. Kim,D. Kim,T.F. Bissyandé,E. 崔湖,澳-地 Li,J. Klein,Y.L. Traon,FaCoY:a我们确定了代码完成任务所需的信息需求,如N5、N8、N9、N11和N34(详见表1)。为了支持这些信息需求,我们开发了一套可视化工具,如(主和迷你)代码编辑器,代码检查视图,标记云视图,进度条视图和点图,以支持代码完成任务。(Main和迷你)代码编辑器和代码检查视图帮助开发人员查看建议的克隆的大小和行号(N5)以及克隆中包含的语法构造的简单细节(N8)。代码检查视图和点图还可以让开发人员看到推荐克隆(N9)之间的共性和差异。进度条视图允许开发人员查看推荐克隆的排名(N11)。标签云视图帮助开发人员快速掌握推荐克隆的语义(N34)。 基于此评估,我们得出结论,我们的工具支持用户的目标,代码完成重用代码克隆。挑战和未来方向。克隆作家工具可以通过几种方式进行探索:“该工具是否提高了开发人员在现实世界中完成任务的生产力?”,''对于这种真实情况,开发人员的生产力会提高多少?'', “克隆代码真的有多大帮助?”,“真正的开发人员如何将代码克隆视为代码完成任务的一部分?”,“利用其他克隆人的网络有什么影响”?以及这些未来的挑战将有助于通过考虑代码克隆的更广泛的视角,在真实的开发人员环境中评估我们的方法的有效性和实用性。5. 结论在本文中,我们提出了克隆作家,一个工具,旨在提高生产力的开发人员推荐的代码克隆的水平,完成代码完成任务的方法。 作为进一步的工作,我们打算开发和评估一个插件的克隆-作家在现实世界的设置,它可以直接集成在内部现有的IDE。最后,我们计划探索其他克隆数据集、克隆类型及其粒度级别的影响。code-to-code search engine , in : Proceedings of the 40th InternationalConferenceon Software Engineering,2018,pp. 946-957[2]X.霞湖,加-地鲍氏D.罗,附言。Kochhar,A.E.哈桑Z。 Xing,开发人员在网络上搜索什 么 ?恩皮尔软件。Eng. 22(6)(2017)3149[3]R.P. Buse , W. Weimer , Synthesizing API usage examples , in : 201234thInternational会议对软件工程、ICSE,IEEE,2012年,pp.782-792。[4]D.曼德兰湖许河,巴西-地博迪克湾Kimelman,Jungloid采矿:帮助导航API丛林,ACM Sigplan Not。40(6)(2005)48[5]M.R. 玛丽 S. Thummalapenta, T. 谢先生, 改善 软件 质量 通过代码搜索和挖掘,在:2009年ICSE研讨会搜索驱动的开发-用户,基础设施,工具和评估,IEEE,2009年,pp. 33比36[6]M. Hammad,2004巴布尔,H.A.巴西特湾Van Den Brand,DeepClone:建模克隆以生成代码预测,在:软件和软件重用国际会议,施普林格,2020年,pp。135-151[7]M. Hammad , 2004 巴 布 尔 , H.A. 巴 西 特 湾 van den Brand , Clone-advisor :Recommendingcodetokensandclonemethodswithdeeplearningandinformationretrieval,PeerJ Comput. Sci. 7(2021)e737。[8]B. Baudry,S.阿列湾Monperrus,定制的源代码转换,以合成计算上多样化的程序变体,在:2014年 软件测试和分析国际研讨会论文集,2014年,pp。149比159[9]Y. Ke,K.T.斯托利角 勒古 Brun,Repairing programs with semanticcode search(t),in:201530thIEEE/ACMInternationalConferenceonAutomatedSoftware Engineering,ASE,IEEE,2015,pp. 295-306.[10] E.T. Barr,M. Harman,Y. Jia,中国茶条A. Marginean,J. Petke,自动化软件移植,在:2015年软件测试和分析国际研讨会论文集,2015年,pp. 257-269。[11] A. Svyatkovskiy,S. Lee,A. Hadjitofi,M. 作者:J.V. Allamanis,快速和内存高效的神经代码完成,在:2021年IEEE/ACM第18届国际采矿软件库会议,MSR,IEEE,2021页。329-340[12] M. Asaduzzaman,C.K. Roy,K.A. 施耐德D. Hou,CSCC:Simple,efficient,context sensitive code completion , in : 2014 IEEE International ConferenceonSoftware Maintenance and Evolution,IEEE,2014,pp. 71比80[13] J.Svajlenko , C.K. Roy , Bigcloneeval : A clone detection toolevaluation frameworkwith bigclonebench , in : 2016 IEEE InternationalConference on SoftwareMaintenance and Evolution,ICSME,IEEE,2016,pp.596-600.[14] M. Hammad , 2004巴 布 尔 , H.A. 巴 西 特 湾Van den Brand , Clone-seeker:Effectivecodeclone search using annotations,IEEE Access(2022)。[15] H.A.巴西特湾Hammad,S.亚尔扎贝克河Koschke,关于克隆我们需要知道什么?从用户目标中获取信息需求,见:2015年IEEE第9届软件克隆国际研讨会,IWSC,IEEE,2015年,pp. 51比57[16] H.A.巴西特湾哈马德河Koschke,克隆数据的目标导向可视化调查,在:2015年IEEE第三届软件可视化工作会议,VISSOFT,IEEE,2015年,pp. 46比55[17] M. Hammad,H.A. Basit,S. 亚尔扎贝克河 Koschke,克隆可视化的系统映射研究,Comp. Sci. Rev. 37(2020)100266.[18] 单位巴布尔湖Cleophas,M. van den Brand,Metamodel clone detectionwithSAMOS,J. Comput. Lang.51(2019)57[19] M. Hammad,H.A. Basit,S.亚尔扎贝克河Koschke,克隆的可视化,在:K。井上河,巴西-地C.K.(编),代码克隆分析,Springer,新加坡,2021年。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功