没有合适的资源?快使用搜索试试~ 我知道了~
博士TheSISUnI verSITÉ PolytechnI qUE HaU tS-DE-flance从INSA Hau tS-DE-flance学科:计算机科学由Bruno Gavis Mateus提出并辩护2021年3月26日,瓦朗谢讷博士学校:Sciences Pour研究团队,实验室:Département工业和人类自动化控制,机械工程和计算机科学实验室(LAMIH UMRCNRS 8201)使用Kotlin陪审团委员会主席- 卡西亚·马里奥·德·奥利维拉。法国高等理工大学教授评论家- Guilherme HORTA TRAVASSOS。里约热内卢联邦大学教授- 雅克·克莱因。卢森堡大学教授考官- Dalila Tamzalit。南特大学副教授主管- 克里斯托夫·科尔斯基法国高等理工大学教授联合主管- 马蒂亚斯·马丁内斯法国高等理工大学副教授CO lOP hON博士论文题为八分音符UnI verSITÉ PolytechnI qUE Ha utS-DE-flranceet l专业:InformatiqueBruno Gavis MATEUS的演讲和支持2021年3月26日,巴伦西亚博士学校:Sciences PourEquipe de recherche,Escheratoire:Département工业和人类自动化控制,机械工程和计算机科学实验室(LAMIH UMRCNRS 8201)Vers un décampement陪审团陪审团主席- 卡西亚·马里奥·德·奥利维拉。在法国高等理工大学进修报告员- Guilherme HORTA TRAVASSOS。巴西里约热内卢联邦大学- 雅克·克莱因。卢森堡大学讲师考试- Dalila Tamzalit。南特大学的会议主持人Directeur de thèse- 克里斯托夫·科尔斯基法国高等理工大学讲师共同赞助者- 马蒂亚斯·马丁内斯mcf à法国高等综合理工大学和法国国家科学院既不认可也不谴责作者关键词:Android开发,Kotlin,采用,进化,迁移,机器学习Mots clés:开发Android,Kotlin,adoption,演化,迁移,自动化编程本论文是在Département工业和人类自动化控制,机械工程和计算机科学实验室(LAMIH UMR CNRS 8201)上法兰西勒蒙胡伊理工Valenciennes Cedex 9教育的根是苦的,但果实是甜的。亚里士多德XIII摘要近年来,谷歌的Android在其官方商店中拥有超过300万个应用程序,主导了全球移动操作系统市场。尽管取得了这一成功,但谷歌仍在继续改进其操作系统和工具包,以简化应用程序开发。2017年,Google宣布Kotlin为官方Android编程语言。最近,在Google I/O 2019期间,Google宣布Android成为“Kotlin-first”,这意味着新的API,库和文档将针对Kotlin,最终Java和Kotlin将成为创建新Android应用程序的首选语言。Kotlin是一种在Java虚拟机(JVM)上运行的编程语言,它与Java完全互操作,因为这两种语言都编译为JVM字节码。 由于这一特性,Android开发人员不需要将现有应用程序迁移到Kotlin即可开始在这些应用程序中使用Kotlin。此外,Kotlin提供了一种不同的方法来编写应用程序,因为它结合了面向对象和函数特性。因此,我们假设开发人员采用Kotlin可能会影响Android应用程序开发的不同方面。然而,在第一次宣布一年后,文献中没有关于Kotlin的研究。在这篇论文中,我们进行了一系列的实证研究来解决这些不足,并更好地理解使用Kotlin创建高质量的Android应用程序。首先,我们进行了一项研究来衡量Kotlin的采用程度我们的研究结果显示,11%的Android应用程序采用了Kotlin。然后,我们分析了Kotlin的采用如何在代码气味方面影响Android应用程序的质量。我们发现,在最初用Java编写的Android应用程序中引入Kotlin,根据所考虑的代码气味,质量分数从50%上升到我们分析了Kotlin引入的功能(如Smart cast)的使用演变,以及Kotlin代码量如何随着应用程序的演变而变化我们发现,在应用程序的发展过程中,功能实例的数量往往会增加。最后,我们重点讨论了Android应用程序从Java到Kotlin的迁移 我们发现,最初用Java编写的开源应用程序中有25%已经完全迁移到Kotlin,而19%的迁移是在几个版本中逐步完成的,这要归功于Java和Kotlin之间的互操作性。 这种迁移活动具有挑战性,因为:a)迁移后必须对每个迁移的代码片段进行详尽的测试,以确保其保留预期的行为; b)项目可能很大,由几个要迁移的候选文件组成。在这篇论文中,我们提出了一种支持迁移的方法,它建议,给定一个用Java编写的应用程序版本,最终,在Kotlin中,迁移最方便的文件。 我们通过应用两种不同的机器学习技术:分类和学习排名来评估我们的方法的可行性。我们的研究结果表明,这两种技术的表现都略优于随机方法。然而,我们的方法是第一个提出使用机器学习来推荐文件级迁移的方法。因此,我们的结果为未来的工作定义了一个基线由于从Java迁移到Kotlin可能会对应用程序的维护产生积极影响,而且迁移既耗时又具有挑战性,因此开发人员可以使用我们的方法来选择首先要迁移的文件。最后,我们讨论了我们的结果所开启的几个研究视角,这些视角可以改善使用Kotlin创建高质量Android应用程序的体验。关键词:Android开发,Kotlin,采用,进化,迁移,机器学习XIV简历今年以来,谷歌的安卓系统在全球范围内占据了300万个应用程序的主导地位成功之后,谷歌继续致力于开发系统,并开发了一些工具包,以促进应用程序的开发在2017年,谷歌宣布Kotlin为Android或Office编程语言。再加上提醒,pendant le Google I/O 2019,Google a annoncé qu 'Androiddevenait'Kotlin-first',cequisignifiequedenouvellesAPI,bibliothèquesetdocumentationsciblerontenprioritéKotlin,etéventuellementJavaetKotlin,commelangagepréférépourcréerdenouvellesapplicationsAndroid.Kotlin est un langage de programmation qui由于这种特性的原因,Android的开发人员不需要将现有的应用程序迁移到Kotlin,以便在这些应用程序中使用Kotlin。此外,Kotlin提出了一种将面向对象的功能与面向功能相结合的应用程序的方法。因此,我们假设Android应用程序的开发人员采用Kotlin可能会对Android应用程序的开发产生影响不过,在这部电影首映之后,他还没有对科特林文学进行过任何研究在这方面,我们提出了一系列的经验研究,以弥补缺陷,并在Kotlin的帮助下更好地理解Android的高质量应用程序。在这之前,我们要做一个真正的研究来测量Kotlin的采用程度Nos resultats ont montré que 11% desapplications Android étudiées avaient adopté Kotlin.Ensuite , nous avons analyséNous avonsconstaté que我们分析了Kotlin引入的功能的演变,并对Kotlin应用程序的演变中代码的数量变化进行了评论。 我们始终认为,职能实例的名称将随着应用程序的演变而不断增加。恩,我们的注意力集中在应用程序从Java到Kotlin的迁移上。 我们认为25%的Java开源应用程序初始化完成了Kotlin的迁移,而19%的应用程序迁移是渐进的,在多个版本中,Java和Kotlin之间的互操作性很好。这一移徙活动包括:(a)移徙后对各种移徙代码进行了详尽的测试,以确保移徙者能够履行义务;(b)一个可能规范的项目,由移徙者的多个候选人档案组成在这方面,我们提出了一个负责迁移的方法,该方法提出了一个在Java和Kotlin上运行的应用程序的版本,这些文件都是迁移的实践。我们重视我们应用两种自动分类技术的可行性:分类和按范围分类。我们得出的结论是,两种技术都超过了其他方法。然而,我们的想法是首次提出利用机器学习来重新调整fichiers的迁移 因此,我们的结果为今后的工作确定了一个参考基础。 由于Java到Kotlin的迁移可能会对应用程序的维护产生积极的影响,而且迁移时间较长,因此可以使用我们的方法来选择迁移的文件。Enfin,nous discutons de plusieurs perspectives de recherche ouvertes par nosresultats qui peuvent améliventMots clés:开发Android,Kotlin,adoption,演化,迁移,自动化编程致谢在此,我想对所有为实现本论文做出贡献的人们表示感谢。首先,我要感谢西尔万·勒孔特,给了我这个机会来进行这项博士工作。 特别感谢我的共同主管马蒂亚斯·马丁内斯,感谢你们每天几个小时的会议,感谢你们提出的许多建议和讨论,帮助我完成了这项工作。我也要感谢你的精神支持,帮助我克服了博士学位。挑战 我真的很感谢你的所有努力,使这三年对我来说是一个愉快的经历。我从你身上学到了很多 我也要感谢我的导师克里斯托夫·科尔斯基,他在最后一轮比赛中发挥了重要作用。谢谢你的好意和接受这个挑战。你的经验给了我信心。 除了我的导师和共同导师,我还要感谢我 的论 文 委 员 会 成 员 : Guilherme Horta Travassos , Jacques Klein , DalilaTamzalit和KáthiaMarçal de Oliveira,感谢他们的时间和反馈。我谨向LAMIH团队的现任和前任成员表示谢谢你在午餐时的有趣谈话,慷慨的锅,还有医生的日记 我非常感谢上法兰西大区的财政支持,使这项研究成为可能。最后但并非最不重要的是,感谢我的家人和朋友,他们在我的生活中给了我精神和情感上的支持。XV十六致谢内容摘要十三简历xiv鸣谢.十五目录xvii表19飞行员列表xxi1 介绍11.1背景。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..11.2问题。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..21.2.1 问题1:缺乏关于采用Kotlin的知识。. . . .21.2.2 问题2-影响Android应用程序的质量。. . . . .31.2.3 问题3-Kotlin代码的演变。. . . . . . . . . . . . . . . ..31.2.4 问题4:将应用程序从Java迁移到Kotlin。. . . . . . . ..31.3论文贡献. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..41.3.1 贡献1-关于采用Kotlin的研究。. . . . . . . .41.3.2 贡献2-展示采用Kotlin对质量的影响Android应用程序。. . . . . . . . . . . . . . . . . . . . . . . . . ..41.3.3 贡献3-Kotlin代码在Android应用程序中的演变。41.3.4 贡献4-帮助迁移Android应用程序的方法51.4概述。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..52 艺术72.1Kotlin。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..72.1.1Kotlin的历史. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..72.1.2使用Kotlin进行Android开发。. . . . . . . . . . . . . . . . . . ..82.1.3关于Kotlin的文献. . . . . . . . . . . . . . . . . . . . . . . . . ..102.1.4摘要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..112.2Android应用程序的质量。. . . . . . . . . . . . . . . . . . . . . . . ..122.2.1 识别移动应用程序中的代码气味。. . . . . . . . . . .122.2.2 随着时间的推移分析代码气味。. . . . . . . . . . . . . . . . . . . ..142.2.3 编程语言对代码气味的影响。142.2.4 Android应用程序上的Evolution模式。. . . . . . . . . . . . . ..15XVII2.2.5摘要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..162.3软件维护和演化。. . . . . . . . . . . . . . . . . . . . . . .162.3.1 编程语言进化。. . . . . . . . . . . . . . . . . . . ..172.3.2 编程语言迁移。. . . . . . . . . . . . . . . . . . . ..182.3.3总结。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..202.4机器学习在软件工程中的应用. . . . . . . . . . . . . ..202.4.1 软件工程分类法。. . . . . . . . . . . . ..202.4.2 学习排序法在软件工程。. . . . . . . . . . . .252.4.3摘要。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..272.5结论。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..273 衡量Android开发人员情况293.1Kotlin的采用研究。. . . . . . . . . . . . . . . . . . . . . . . . ..303.1.1寻找基于Kotlin的Android应用程序。. . . . . . . . . . . ..303.1.2分析方法。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..323.1.3结果。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..353.2Kotlin代码在Android应用程序中的比例. . . . . . . .363.2.1 研究中分析的应用。. . . . . . . . . . . . . . . . . . ..373.2.2分析方法。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..373.2.3结果。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..383.3有效性的威胁. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..383.3.1内部。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..393.3.2外部。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..393.4总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..394 测量和比较用Kotlin41编写的Android应用程序的质量4.1研究设计。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..424.1.1刀具选择。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..424.1.2代码气味选择。. . . . . . . . . . . . . . . . . . . . . . . . . . . ..434.2比较基于Kotlin和基于Java的Android应用程序的质量。454.2.1 研究中分析的应用。. . . . . . . . . . . . . . . . . . ..454.2.2分析方法。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..454.2.3结果。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..464.3衡量引入Kotlin对质量的影响。. . . . . . . . ..504.3.1 研究中分析的应用。. . . . . . . . . . . . . . . . . . ..504.3.2定义质量模型。. . . . . . . . . . . . . . . . . . . . . . . . ..504.3.3训练质量模型。. . . . . . . . . . . . . . . . . . . . . . . . ..514.3.4分析方法。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..514.3.5结果. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..534.4有效性威胁。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..564.4.1内部。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..564.4.2外部。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..564.5总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..575 分析Android应用程序5.1分析Android应用程序的代码演变。. . . . . . . . . . . ..605.1.1 研究中分析的应用。. . . . . . . . . . . . . . . . . . ..605.1.2代码演变趋势。. . . . . . . . . . . . . . . . . . . . . . . . . . ..605.1.3分析方法。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..62目录195.1.4结果。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..635.1.5有效性威胁. . . . . . . . . . . . . . . . . . . . . . . . . . . . ..665.2Kotlin特性的使用和演变。. . . . . . . . . . . . . . . . . ..665.2.1研究设计。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..675.2.2 采用Kotlin特性。. . . . . . . . . . . . . . . . . . . . ..705.2.3 Kotlin特性的介绍。. . . . . . . . . . . . . . . . . . . .745.2.4 Kotlin特性的使用演变。. . . . . . . . . . . . . . . . . ..755.2.5讨论。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..815.2.6有效性威胁。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .825.3总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..836 应用机器学习协助Android应用6.1研究设计。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..886.1.1方法。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..886.1.2研究中分析的项目。. . . . . . . . . . . . . . . . . . . . . ..916.1.3特征提取。. . . . . . . . . . . . . . . . . . . . . . . . . . . . ..926.2研究问题9.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..956.2.1模型训练。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..956.2.2评价。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..966.2.3结果。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..976.3研究问题10.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .986.3.1模型训练。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..996.3.2评价。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..996.3.3结果............................................................................................................................................. 1006.4讨论1016.5有效性的威胁1026.5.1 结构效度1026.5.2 内部效度1026.5.3 外部有效性1026.6摘要1037 结论和展望1057.1捐款摘要. 1057.2短期展望1067.2.1 Kotlin的坏习惯和代码气味1067.2.2 基于Kotlin的Android应用程序的功耗1067.2.3 用于辅助迁移的特征工程1067.3长期展望1077.3.1 迁移测试生成1077.3.2 用于迁移的自动软件重构1077.3.3 使用Kotlin107进行跨平台开发7.4最后的话108Bibliography参考书目109A出版物131发布时间:131提交:131B Kotlin fleatures133B.1类型推断133B.2Lambda表达式和匿名函数B.3内联函数135B.4零安全135B.5当表达式136B.6默认参数136B.7命名参数137B.8智能铸件137B.9数据类139B.10 范围表达式139B.11 扩展功能139B.12 字符串模板139B.13 代表团140B.14 解构声明140B.15 运算符重载140B.16 单身142B.17 伴随对象142B.18 中缀函数143B.19 尾递归函数143B.20 密封型143B.21 类型别名144B.22 协程145B.23 第145号合同B.24 内联类145
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功