针对事件驱动的Android应用程序开发的API建议外文翻译资料
2021-12-27 22:22:24
英语原文共 18 页
针对事件驱动的Android应用程序开发的API建议
魏兆元 Hoang H. Nguyen 凌晓强 陈玉婷 赵建军 海博宇
上海交通大学计算机科学与工程系
b新加坡管理大学信息系统学院,新加坡
c日本九州大学信息科学与电气工程学院
d中国上海交通大学软件学院背景:软件开发越来越依赖于现有的库。开发人员需要帮助才能找到
合适的库API。尽管已经提出了许多研究来推荐相关的功能性API可以调用实现功能,很少有研究关注正交需求使用事件驱动的编程框架,例如Android框架。除了调用功能API,Android开发人员需要知道根据可能的各种事件在何处放置功能代码在框架内触发。
目的:本文旨在为Android应用程序开发开发一个API推荐引擎可以推荐(1)用于实现功能的功能API和(2)事件回调API要重写以包含功能代码。
方法:我们对从StackOverflow到con的实际Android编程问题进行实证研究坚定了推荐回调的必要性。然后我们构建特定于Android的API数据库以包含相关的基于对代码片段和自然语言的自定义解析,各种功能和API之间的关系处理Android教程和SDK文档中的文本,然后是文本和代码相似性度量适用于推荐相关API。
结果:我们已经评估了我们的原型推荐引擎,名为LibraryGuru,大约有1500个问题。来自StackOverflow的Android编程,并展示了我们推荐的前5名成绩回调和功能API估计可达到精度分别高达43.5%和50.9%,24.6%平均精确度(MAP)得分分别为32.5%,回忆率分别为51.1%和44.0%。
结论:我们得出结论,推荐功能API和回调是重要的,也是可能的对于Android应用程序开发,需要考虑更多数据源的未来工作为开发人员的需求提供更多相关建议。简介如今的软件开发经常需要利用现有的braries。 开发人员,尤其是那些不熟悉开发人员的开发人员环境,通常需要帮助来学习环境的能力熟悉并熟悉环境中提供的API他们根据要求实施功能。 一个宣言nent示例是针对Android应用程序开发的开发人员通常需要遵守特定的框架设置并加以利用Android中的特定API,用于实现其应用程序的功能蒸发散。Android应用程序开发人员不仅需要知道API可以调用以实现我们称之为的各种功能功能API,以及定义的事件回调API由Android管理,可被开发人员覆盖以进行自定义并扩展我们称之为Android框架的默认行为事件回调或简单的回调。 功能API告诉开发人员什么为实现功能而做,而回调则告诉开发人员放置实现代码的位置。 这两种API都很重要无法正确实施功能,特别是对于事件 - 驱动编程框架,例如Android,其中控制流程未明确提出API之间的调用关系或发展 - ERS。为了说明功能API和回调API之间的区别,图1显示了Android应用程序中用于创建an的代码片段火箭发射的确定。代码的主要目的是构造一个Android窗口(通过扩展Android的A ctivity类)。当。。。的时候Android系统执行应用程序,它隐式调用o nCreate,这是Android框架的应用程序生命周期事件之一应用程序所在的框架调用的回调各州。应用程序开发人员无法控制回调的方式被调用,但他们可以定义和控制内部执行的内容回调。在此示例中,onCreate的主体加载火箭图像和火箭运动的一系列快照(通过调用 - f indViewById,s etBackgroundResource和g etBackground),当用户点击火箭图像时,它开始播放用于模拟火箭发射的快照序列(由in-voking rocketAnimation。 s tart)。开发人员需要调用s etOnClickListener告诉框架监视单击操作,但是链接click事件的代码中没有明确的控制流回调函数o点击代码的其他部分。所以,回调(例如,onCreate和onClick)实际上是一种控制反转,控制(即函数的调用)在手中Android框架,而不是应用程序代码;控制功能应用程序代码掌握了各种API。功能API可以被调用以提供特定功能,而回调可以重写以包含任何功能的代码。同时使用回调和适当的功能API是实现所必需的表现良好的Android应用程序。关于推荐相关图书馆的研究很多和开发人员在编写代码时使用的API某些特征要求(例如,[1-4])。一些研究也发现或生成示例代码,告诉开发人员如何使用(即调用)API(例如,[4-12])。但是,据我们所知,这些研究大多数专注于推荐可由开发人员调用的功能APIOPERS。很少有研究关注正交需求可以从编程框架中找到可回复的回调 - 工作,可以被开发人员覆盖。这样的需求可以非常在事件驱动编程中构建应用程序时常见的vironments,例如Android框架。不考虑各种事件回调之间的隐式控制流和调用关系API,推荐的功能API和生成的示例API开发人员可能无法完全理解或重复使用这些用法。基于我们对与An-相关的抽样问题的实证研究从StackOverflow收集的机器人开发(参见第2节),关于3%的问题直接询问依赖的情况回调,而整体约35%的问题和答案涉及除了调用功能API之外,还要覆盖回调。
满足Android的功能API和回调的需求在应用程序开发中,本文提出了API建议适用于Android的引擎,可以推荐(1)功能API实施功能要求和(2)适合的回调 - 能够被覆盖以包含功能代码。因此,我们的目标是解决Android应用程序开发人员的共同需求:我在哪里
应该实现这个功能。我们的API推荐引擎的一个关键组件依赖于发现功能API和回调的描述性内容。实际技术基于Android特定的代码解析文本描述的片段和自然语言处理在公共培训教程和SDK文档中可用Android开发者。1我们的引擎推荐基于的合适API描述和开发人员查询之间的相似性度量在自然语言中,这是一个类似于许多其他研究的想法
信息检索和代码搜索。我们已经实现了推荐引擎的原型,名为LibraryGuru。2我们评估了推荐结果关于收集现实Android开发问题的原型来自StackOverflow。尽管StackOverflow上有很多问题已经得到答案,我们不会使用这些答案来建立de-划线数据库,这样我们就可以展示我们的能力在没有干扰的情况下更清楚地推荐API的技术历史上正确答案的好处。我们的评价大约1500个问题表明我们的原型可以推荐两者具有良好结果的功能API和回调:前5名结果建议合适的回调和相关的功能API可以精度分别达到43.5%和50.9%,24.6%
和32.5%分别用平均精度测量(MAP)得分。虽然我们收集的数据和我们构建的工具本文是针对Android应用程序开发的Java的想法通过发现之间的相关性来促进API推荐功能和回调API和文本描述可能适用于其他事件驱动的编程框架,语言,库和API(例如,在Objective-C和Swift中构建iOS应用程序,构建前端 - 在JavaScript中使用AngularJS结束Web应用程序,或者编写WindowsVisual C 和C#中的应用程序,可以使用该工具进行推荐 如果更换了已处理的API数据库,也可以使用其他库和API 因此。 本文扩展了我们之前的2页ICSE 2018年海报文件 [13],其主要贡献如下:
bull;我们凭经验确定Android应用程序开发人员的需求 用于在开发期间定位合适的回调以覆盖。
bull;我们构建特定于Android的API描述数据库,指示 Android中各种功能和API之间的相关性,所以 我们为功能API和 回调。
bull;我们使用与Android相关的大约1500个问题来评估我们的工具 从StackOverflow收集的编程,并显示我们的技术 - 推荐的API,特别是回调,是承诺的 - ING。 本文的其余部分安排如下。第2节描述了我们的 StackOverflow问题的实证调查并使用考试 鼓励我们的学习。第3节将我们的研究与很多相关联 在代码搜索和推荐领域工作。第4节介绍 我们的技术细节。第5节介绍了我们的评估结果 关于StackOverflow问题并讨论了我们的局限性。 第6节总结了未来的工作。
2.动机
本节基于问题提出了一个简单的实证研究和StackOverflow上的答案,以说明Android应用程序的频率开发人员在功能和回调API推荐方面需要帮助蒸发散。
2.1. 需求
StackOverflow是开发人员提供的讨论平台关于编程技巧和软件工程任务。它允许它用户提问和回答问题。据此,其投票机制用于区分好或坏的问题或答案。用户可以对他们喜欢的帖子进行投票,然后对他们不喜欢的帖子进行投票。此外,标签用于将问题组织到不同的主题中。用户需要为每个问题附加至少一个标记和最多五个标记。对于例如,图2显示了样本问题的投票和标签。这个特点lar问题用“android”,“android-activity”,“parent-child”标记,和“传递数据”;它可能是一个普遍存在的问题,因为它是 - 由122位用户投票,由48位用户主演(如数字所示)在图的左侧)。截至2017年8月,StackOverflow超过了1400万个问题[14]。讨论最多的话题之一是“Android”,超过1个百万问题[15]。在Android问题中,有一些关于“意图”,“旋转器”,“活动”,“数据库”,“存储器”的典型子主题年龄“,”asynctask“,”对话“,”连接“,”位置“等StackOverflow提供用于检索问题和答案的API以JSON格式编码。我们每个查询检索大约60个问题来自StackOverflow遵循API的限制,并重复查询很多次。由于API可能会返回许多相同的问题不同的查询,我们通过唯一的问题ID删除重复的查询。此外,许多问题没有答案或上升票;或者,当有是一个问题的答案,没有人对任何答案进行投票;或者答案没有提到任何Android API。我们过滤掉了这些问题因为他们的答案不够强大,无法用作基本事实评估我们的API推荐引擎生成的结果。最后,收集了具有“Android”标签的1531个问题。我们注意到大约35%(540)的问题有一个或更多包含回调事件名称的答案(例如onClick,doInBackground等)。 在这些问题中,大约有50个明确询问何时或何地实现功能与事件回调有关。我们意识到许多开发人员,特别是新开发人员,往往会问高级问题,而不是描述具体问题。 新的Android程序员很少有足够的经验来理解事件 - Android中的驱动编程风格以及与其任务相关的API,特别是事件回调API。 他们不太可能要求事件电话 - 甚至在实现其功能时也需要它们覆盖一些回调,如十倍之间的差异所暗示的那样上面两组问题(540对50)。 因此,我们意识到这一点推荐必要的事件回调API是其中一个需求开发人员。
2.2.例
为了进一步说明Android应用程序所面临的需求我们在图2中展示了StackOverflow问题的快照第14292398号:3“如何在按下时将数据从第二个活动传递到第一个活动? ”这个题目标题有两个主要部分:第一部分询问函数在活动之间传递数据的合理性;第二部分询问何时需要功能,这与Android中的某些事件有关框架。有了许多API和事件回调,An-droid框架为开发人员提供了实施的灵活性各个方面的两个部分中的每一个,以及这个问题的答案在StackOverflow上确实展示了这种灵活性。对于传递数据的功能,开发人员可以使用Intent类及其API putExtra进行存储数据并使用startActivityForResult API在活动之间发送Intent对象。或者,开发者可以使用SharedPreferences和Editor类来存储数据一个活动,并使用getSharedPreferences API进行检索另一项活动中的数据。对于需要功能的时间/地点的部分,开发人员可以覆盖onBackPressed回调以激活数据集 - ting和传递,并覆盖onCreate,onResume或onActivityResult回调,具体取决于数据的传递方式周围,检索数据。因此我们观察到许多功能的实现在Android应用程序中需要协同使用两种功能甚至,基于偶数驱动框架的API和事件回调API虽然没有明确的控制流程或呼叫关系方法。因此需要推荐用于Android开发的API推荐用于调用的功能API和用于覆盖的回调骑术。我们在本文中的研究旨在实现这一目标。基于我们的原型在评估中使用的类型,我们能够将功能API与适合各种情况的回调,使API推荐对Android应用程序开发人员更有用。特别对于这个问题,我们的原型建议一些相关的功能API和回调正确。表1显示了推荐的功能API和回调及其组合:bull;Intent课程在推荐结果中名列前茅;bull;startActivityForResult API是其前10名sults;bull;onBackPressed和onCreate回调是top-推荐的回调中有2个;bull;onActivityResult跻身前五名;bull;onResume回调排在前10名之列;和bull;onCreate和Intent的组合使用startActivityForResult排名前十。结果表明我们的原型在推荐方面很有前途功能API和回调仅基于Android公共教程和SDK文档,帮助开发人员使用事件驱动的编程框架,无需历史记录解答StackOverflow问题的答案。
3.相关工作
我们的工作涉及大量关于代码搜索和rec-的研究。ommendation。建议可以在期间的各个阶段进行软件开发和维护过程,对变量有用任务(例如,需求可追溯性,功能本地化,开发人员)分配,库推荐,API推荐,代码示例推荐,错误分类等),使用各种数据(例如,来源代码,代码更改历史,文档,论坛,错误数据库,发展背景等)[16]。许多技术和我们的研究也适用于Android开发工
资料编号:[3327]