英语原文共 14 页,剩余内容已隐藏,支付完成后下载完整资料
Android开发的代码推荐:它是如何工作的,还有什么可以改进的呢?
Junwei WU1,2, Liwei SHEN1,2*, Wunan GUO1,2 amp; Wenyun ZHAO1,2
School of Computer Science, Fudan University, Shanghai 200433, China;
2Shanghai Key Laboratory of Data Science, Fudan University, Shanghai 200433, China
Received January 7, 2017; accepted March 29, 2017; published online July 28, 2017
摘要:安卓应用程序是基于框架开发的而且是基于模式的。对于安卓开发者来说,他们可以通过代码推荐来帮助他们确保高的开发效率和质量。现有的研究工作提出了多种方法和工具,以不同的方式支持这种代码推荐。但是,如何在安卓开发中进行代码推荐,还有哪些可以进一步改进的更好呢?支持安卓开发的技术还没有得到明确。了解现实,我们进行了定性的研究,利用现行的推荐规范的技术和工具,在整理的文件中进行报告。这次是第一次基于三种多维框架的收集工作。本文回顾了在满足特定开发需求时在Android开发中采用推荐的全面图像。在此基础上,我们从两个方面给出了代码推荐的可能改进。首先,提出了一系列改进建议,以提高代码推荐技术的能力。其次,提出了一个可定制的工具框架,以方便代码推荐工具和工具框架的设计能够更容易的集成推荐功能。
关键词:安卓,代码推荐,代码搜索,代码建议,代码完成,代码生成
正文:
1.简介
安卓作为最流行的移动平台,已经吸引了大量的开发者来构建生态系统的各种应用。然而,随着移动应用程序开发中的人口增长,开发人员的平均经验水平正在下降。由于开发Android应用程序的特定的框架及其特性始终是基于模式的,新手开发人员尤其需要IDE(集成开发环境)对实现诸如程序结构和API(应用程序编程接口)等特定功能的各种支持。
代码推荐是现代IDE通常提供的最受欢迎的功能之一。 它通过为其任务提供建议来帮助开发人员提高编程效率,例如接下来调用哪种API方法,或者可以参考哪些样本代码。除了IDE功能之外,研究人员还提出了多种推荐方法和原型工具。但是代码推荐时间哦如何在Android开发中发挥作用,还有哪些可以进一步改进以更好地支持Android开发还尚未明确。
为了理解实际情况并为Android开发中的代码推荐工作提供全面的形象,我们对主要文献中报告的当前代码推荐技术和工具进行了定性评估。从文献中收集的工作首先根据多维框架分为三类,然后根据具体的推荐要求进行评审。审查结果表明,目前的代码推荐技术能够在不同程度上达到推荐要求,但仍需要改进。因此,我们从两方面进一步提出代码推荐的可能改进。首先,提出了一系列改进建议,其中总结了几个未来的研究方向,以减轻缺陷并提高当前代码推荐技术的能力。其次,为了促进未来代码推荐工具的设计和开发,我们提出了一个可定制的工具框架,其中涵盖了各种代码推荐功能。因此,Toolsmith可以根据特定需求定制框架,从而获得工具架构。
本文主要从引入可定制工具框架的角度扩展了我们早期的工作。 该框架旨在丰富针对Android开发的代码推荐的改进建议。
本文的贡献归纳为以下三个方面。
bull;首先,我们为最先进的技术和工具提供多维代码推荐分类框架。
bull;其次,我们进行定性研究,并总结推荐技术对一系列需求情景的益处和不足。
bull;第三,我们提出了一个可定制的工具框架,以便于设计未来的代码推荐工具。
本文的其余部分安排如下。 第2部分介绍了多维分类框架和文献中报告的代码推荐技术和工具的分类。 第3节介绍了定性评估,其过程包括提取代码推荐要求和评估机制以满足要求。 第4部分介绍了最先进的代码推荐技术的可能改进和研究方向,第5部分给出了可定制的工具框架,以便于设计未来的推荐工具。 最后,第6节给出了结论以及未来的工作。
2概述
代码搜索,代码建议,代码完成和代码生成被用作现有文献或工具中的相关术语。 我们采用这些术语作为紧密相关的关键词来收集主要软件工程会议和期刊中的一系列出版物。 在本节中,首先提出了一个多维分类框架,用于表征所收集出版物的机制。此外,从推荐场景的角度,相关技术和工具进一步分为三类。
2.1多维分类框架
该框架如图1所示。它由六个维度组成,每个维度都说明推荐机制的特定功能。
(1)范围。参数,方法,API使用和片段是不同粒度的作用域,可以通过推荐机制推导出来。
(2)目的。该维度表明该建议在通过时的目标。四个目标被定义。搜索有助于通过构建用户预期的查询语句来获取相关的编程助手资源。建议通过考虑编程环境,为用户提供涵盖示例代码和设计解决方案的编码建议。完成使得能够识别用户的打字行为并且填写完整的节目元素,特别是当他不确定元素的名称时。另一方面,通过分析编程上下文,可以帮助构建一个或一组程序语句并将其填充到他们所需的位置。
(3)背景。 该维度指示为了得出准确的推荐结果而收集和分析的工件。 查询,语句,方法体,类正文和项目工件是五个定义的上下文组。 第一组上下文表示查询语句,开发人员通过它查找编程建议。 陈述总是以自然语言或句子模板形成。 剩下的组对应于不同粒度的工件,它们可以是单个代码语句,甚至是整个项目的工件。 特别是,除了程序代码之外,Android项目工件还包括特定于Android的资源,例如布局和清单文件。
(4)技术。此维度的不同底层技术可能会导致可比较的推荐质量。我们只是从文献中解释常用的技术。静态信息是基于编程语言语法和静态类型系统给出推荐结果的技术之一。启发式规则是通过基于当前上下文计算预定义规则来推导出建议的技术。数据挖掘和机器学习是流行的技术,以从大规模的资源(例如在线网络知识库)中挖掘重新出现的编程模式。基于所收集的知识,他们能够在类似的编程环境中提供合适的模式。除了上述技术之外,还存在其他技术在代码推荐中显示其有效性。我们将这些技术分类在其他类别中。协同过滤,手工资源收集和传统的静态和动态程序分析是文献中采用的典型技术。
(5)相关资源。 这个维度意味着推荐结果的来源,即推荐被合成的资源范围。 我们确定了三类依赖资源,即语法,组织资源和网络资源。 语法表示编程语言的静态类型系统。 对象实例的可用API方法可以在语言级别派生。 组织资源包括组织实施的所有项目的工件,而Web资源则指示GitHub等在线存储库。
(6)互动。 维度表示需要建议时的用户交互模式。 我们根据推荐的触发时间确定两类交互。 用户反馈模式是一种主动交互模式,用户通过键入特定字符或单击特定按钮来触发推荐。 相反,从用户的角度来看,即时推荐是被动模式。 在这种情况下,一旦机制决定通过不断分析用户的编程上下文来决定触发推荐,用户被动地提供建议。
2.2推荐类别
分类框架的维度表明了建立推荐机制的重要因素。 在这些因素中,有些对最终用户是可见的,包括范围,目标,依赖资源和交互。 这些因素区分相应的工具,以便Android开发人员可以轻松识别和选择合适的工具。 其他的是潜在的技术和背景,区分推荐质量,但可能不被开发人员清楚地理解。 在本文中,从Android开发人员如何预测推荐以及他们如何采用推荐的角度,我们定义了以下三个类别。
bull;代码搜索。 搜索是一种特殊类型的推荐,因为它可以独立于IDE的编程环境来执行。 现在,几乎所有开发人员都习惯于在公共代码库(例如GitHub)或在线搜索引擎(例如Google)中提交查询。 此外,现代IDE中还有搜索引擎嵌入式插件,有助于加速搜索过程。
bull;基本建议。 该类别提供了所有现代IDE都配备的基本推荐功能。 这些功能得到了所有开发人员的认可,并且开发人员可以通过在对象实例后键入#39;dot#39;来快速完成API方法。 在这种情况下,用户通常会阅读列表中列出的推荐结果并决定遵循哪些内容。 在技术方面,基本推荐机制主要依赖于Android应用的静态信息。
bull;高级建议。 其余的建议机制分为这一类。 与基本建议不同,高级推荐机制采用先进技术而非静态信息。 采用诸如数据挖掘和机器学习等技术来计算和推导大规模资源的建议通常优于基本建议。 因此,这些机制可以满足代码完成和代码生成的目标。
根据类别定义,我们收集的文献中的方法和工具已分配在表1中。
在列出的机制中,存在有助于Android编程推荐的方法或工具。 例如,ParamHarver可以从Android应用程序中提取参数,并且参数值可以作为类似程序语句中的建议提供给用户。 Raychev等人提出的方法将大量Android应用程序的方法调用序列索引为统计语言模型。 然后相应的机制采用语言模型来预测和生成有孔程序的最可能的调用序列。 引入DroidAssist来推荐基于隐马尔可夫模型的Android API使用。 该方法能够建议下一个方法调用以及更合适的方法序列。 另外,他们还提出了另一种方法来从字节代码训练API使用的统计生成模型。 代码完成系统可以依赖模型来派生可能的方法调用。
3定性审查
本节介绍定性审查的过程。 受邀请的工程师进行了评估,以评估三个建议类别对一组典型推荐要求的有效性。
3.1建议要求
推荐要求在Android开发人员可能需要完成其任务的情况下进行解释。四种情景可以作为基本预测或复杂情况来说明
要求。
R1:即时建议和完成。当开发人员不知道参数或API方法的名称来完成一个句子,甚至不知道在下一步中编码的情况时,就会出现这种情况。例如,当开发人员需要决定他正在调用的方法的适当实际参数时,可以快速推荐预先声明的变量或常量。另外,当开发人员想要决定随后应该调用哪个对象的方法时,需要推荐符合上下文的可用方法或预测方法。
R2:程序参考。开发人员可能希望获得他们可以参考的程序代码或片段,以实现功能特性。要求的一个场景是学习特定API的使用。在这种情况下,可以遵循使用模式,即API的方法调用序列。此外,包含API方法调用的示例代码也可以被模仿。另一个场景是学习如何从一组Android应用程序实现涉及不同API方法的功能。这些方法调用组成了可以推荐给开发人员的编程约定。
R3:第三方图书馆推荐。开发人员通常会使用第三方库来实现除官方Android SDK之外的更具吸引力功能的应用程序,并且他们通常会花很多时间寻找预期的库并学习如何使用它们。这些库是由可从公共存储库获得的活跃开发者提供的。在这种需求场景中,根据上下文和期望自动推荐第三方库是非常需要的。
R4:与SDK版本相关的API建议。随着Android SDK的快速发展,不可避免地存在已更改,不推荐和新引入的API。不保证向后兼容性支持的API由于其不稳定性通常很难使用,并且API分支更改可能会进一步在客户端代码中引入错误[23,24]。在这个推荐要求场景中,当指定Android SDK版本时,开发人员会收到有关要使用的适当API的通知,在这种情况下,可以保证向后兼容性,同时可以避免API使用错误。
3.2审查过程
审查过程被设计为半正式会议,该会议取决于利益相关方,以针对不同的推荐方案对不同的代码推荐技术进行综合评估。评价结果由星星评分。三颗星是满分,这意味着完全满足针对特定要求的建议。相反,没有明星表示对建议的不满或该机制的采用毫无意义。根据这一原则,我们邀请了8名来自两家协作软件公司的初级到高级的工程师参加审查会议。所有的工程师都有在Android Studio或Eclipse ADT上开发Android应用程序的经验。会议分四个阶段进行。首先,我们向工程师介绍了四项选定的要求。其次,我们向工程师解释了代码建议类别,包括典型的技术和工具。在每个类别中,可以通过简单的推荐演示来说明可以下载和安装工具的一些技术。其他人在理论层面进行了解释,并且预期的推荐结果是重点。第三,每位工程师被邀请分别针对推荐要求对每个推荐类别进行评分。随着明星的得分,他还被要求提供给出分数的原因。例如,如果推荐机制被认为部分满足要求,他可以给出一个可能无法通过特定推荐技术解决的例子的二星评分。第四,我们收集了所有的分数并综合了最终的评论结果。在这个阶段,如果推荐类别的评估结果不同,开发商给出的建议理由进行审查和讨论。为了避免无尽的争论,当工程师在十分钟内未能达成协议时,我们将六名工程师给出的分数作为最终决定。 如果没有得分符合标准,则将最低分作为最终分数。
3.3审核结果
表2说明了针对四项要求的综合定性审查结果。对于第一个推荐要求,由于推荐结果的粒度太小,不值得从工程师的角度进行搜索,因此来自代码搜索类别的机制被认为是无意义的。同意的基本建议是为工程师提供最基本的支持。当工程师需要完成一个句子时,可以立即列出根据静态类型系统可以传输或调用的参数或方法。例如,IDE等IDE可以通过匹配可用变量和所需形式参数之间的参数类型来提供参数。先进的建议被认为是完全满意的。这一类别的机制旨在从大量现有应用中学习,以收集可供开发人员使用的可重用知识。工程师相信,与主流IDE的机制相比,他们可以帮助减少推荐列表的大小。
对于程序参考的推荐要求,代码搜索和高级推荐被认为具有良好的支持,而基本推荐被认定为不适用。诸如DroidAssist之类的高级推荐机制可以从现有应用程序中提取API使用模式,因此被认为非常适用于API学习场景。代码搜索允许工程师构建查询以相对获取参考程序。尽管搜索结果可能是多样的并且需要进一步滤除,但该类别在提供广泛的结果方面具有优势。例如,Thung等人提出了一种方法来推荐API方法,比较请求的纹理描述和学习API方法的纹理描述。此外,DeepAPI被设计为为
全文共12408字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[11901],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。