没有合适的资源?快使用搜索试试~ 我知道了~
里尔大学,科学与技术学院,UFR IEEA计算机科学海岸培训的一部分MADIS里尔海岸学校关于探索的工具无法支持图书馆的更新和更新。(Data支持库更新的基于挖掘的工具他们是于2022年10月28日发布并公开支持为了里尔大学校长办公室(计算机科学)由奥列克桑德尔·扎伊采夫陪审团组成PR居民:奥尔加·库奇纳伦科Professeur,Universit'edeFranch e-Comt e报告员:罗曼·罗伯特·科恩副教授,博岑-博尔扎诺自由大学副教授,布鲁塞尔自由大学他的心是:斯蒂芬·杜卡斯INRIA里尔由T'ese共同撰写:尼古拉斯·安奎蒂尔里尔大学与里尔大学的会议里尔计算机科学、信号和自动化研究中心- UMR 9189 CRISTAL INRIA里尔-北欧i我想感谢我的父母,他们在我的学习过程中鼓励和支持我。和我所有的朋友谁把这变成一个愉快的旅程。我还要感谢Arola软件公司赞助我的博士学位,感谢Inria的RMoD团队在这四年里为我提供了最好的工作环境。特别是感谢我的主管斯蒂芬·杜卡斯和尼古拉斯·安奎蒂尔,感谢他们的指导、智慧和耐心。但最重要的是,我想把这篇论文献给乌克兰武装部队致那些为我们的自由而英勇战斗的士兵和游击队员。医生和志愿者们从战争的第一分钟起就没有停止过他们所有的不懈努力。致我们所有的外国朋友和盟友,感谢他们在我们最黑暗的时刻为我的人民提供的难以置信的支持。致每一个相信我们胜利的人和每一个使我们胜利成为可能的人。光荣归于乌克兰!iii摘要现代软件的特点是高度重复使用外部人工制品。应用程序依赖于多个库和框架,而这些库和框架反过来也可能依赖于其他库和框架。像任何其他软件一样,L-Braries也在不断发展。新版本已发布,通常与以前的版本不兼容。这迫使依赖于这些库的客户端应用程序更新其代码以响应库的演变。对于客户端开发人员来说,更新依赖项可能是一项困难且耗时的任务它涉及重复的操作,需要了解对库所做的更改。可由库开发人员共享或由自动化工具从源代码或提交历史中提取的知识近年来,已经提出了多种方法来挖掘数据或应用机器学习技术,并以规则的形式提取关于库更新的知识。然而,大多数方法只关注客户开发人员,而不考虑库开发人员的专业知识。它们只考虑简单的方法到方法的替换,并且只为静态类型的编程语言设计。在本文中,我们通过五个主要贡献来解决文献中的这一差距:(1)对两家工业公司和一个开源社区的库和客户端开发人员的调查;(2)Pharo中Deprewriter方法和工具的第一个详细文档,其中引入了使用转换规则动态更新客户端代码的演示;(3)通过分析Pharo 8中的源代码和开发人员调查,对Pharo社区如何采用Deprewriter进行了研究;(4)DepMiner -一种基于项目提交历史为Deprewriter推断规则的新方法;(5)将DepMiner推广为一种新的整体方法,以支持库开发人员执行库更新任务。本文报告的研究结果将通过探索库开发者的观点和在早期研究中经常被忽视的动态类型语言的背景,推进自动库更新的领域。关键词: 软件开发、库更新、库迁移、数据挖掘。v摘要现代软件的特征可以是外部工件的高度重用。应用程序依赖于多个库和框架,而这些库和框架又可能依赖于其他库和框架。与任何其他软件一样,库也在不断发展。他们发布新版本,通常与以前的版本不兼容。这会迫使依赖这些库的客户端应用程序更新其代码以响应对于客户端开发人员来说,更新依赖关系可能是一项困难且耗时的任务。它涉及重复的操作,并且需要了解对库所做的更改。这些知识可以由库的开发人员共享,也可以由自动化工具从源代码或交付历史中提取近年来,已经提出了许多方法来挖掘数据或应用机器学习技术,并以规则的形式从库中提取关于更新的知识。但是,这些方法中的大多数只关注客户端应用程序的开发人员,而没有考虑它们只考虑简单的方法到方法的替换,并且只为静态类型编程语言设计在本文中,我们通过五个主要贡献来解决文献中的这一差距:(1)对两家工业公司和(2)首次详细记录了Pharo中的Deprewriter方法和工具,该方法和工具引入了弃用规则,可自动更新客户端代码;(3)通过分析Pharo 8中的源代码和对开发人员的调查,研究了Pharo社区如何采用Deprewriter;以及(4)DepMiner --一种从项目的交付历史中推断Deprewriter规则的新方法;(5)将DepMiner推广为一种新的整体方法,以帮助库开发人员完成更新库的任务。本文报告的研究结果通过探索库开发者的观点和动态类型语言的背景,推进了库自动更新领域,而动态类型语言在以前的研究中经常被忽视。关键词:软件演进、库更新、库迁移、数据挖掘。内容。1引言11.1软件演进和突破性变更。 . . . . . . . . . . ... ...11.2库更新 . . . . . . . . . . . . . . . . . . . . . . . . . ... ...21.3问题。 . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ...21.4贡献 . . . . . . . . . . . . . . . . . . . . . . . . . . ... ...31.5为什么是法老?... . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... 31.6论文结构。 . . . . . . . . . . . . . . . . . . . . ... ...41.7出版物列表 . . . . . . . . . . . . . . . . . . . . . . . ... ...52背景72.1什么是库更新。 . . . . . . . . . . . . . . . . . . . . ... ...72.2掠夺。 . . . . . . . . . . . . . . . . . . . . . . . . . ... ...82.3问题的范围112.4激励性示例123最新技术水平173.1图书馆演变的实证研究173.2代码转换和弃用203.3支持库更新20的工具3.4第二十五章结论4图书馆如何发展:图书馆开发者调查更新274.1导言274.2调查设计284.3人口描述294.4库开发人员调查结果324.5客户开发人员调查结果384.6对有效性的威胁414.7第四十三章结论5第1009章:你是谁?5.1导言455.2问题:替换已弃用的方法调用485.3在行动中重写弃用505.4预写器535.5执行情况585.6可能的替代实施方案60八、内容5.7Pharo 8中失效方法的分析645.8用户调查705.9限制和讨论755.10 第79章第一次见面6DepMiner:帮助库开发人员应对突破性变化6.1导言816.2为什么支持库开发人员?....................................................................836.3DepMiner进近846.4评估876.5我们方法的局限性926.6第93章结论7走向整体方法的步957.1导言957.2不同类型的支持977.3现有方法的不足997.4了解库开发人员1017.5克服DepMiner103的局限性7.6应对突破性变化的整体方法1067.7第一百零八章结论8具有挑战性的库更新问题1098.1导言1098.2案例1:重新分配现有名称1108.3示例2:循环重命名1118.4示例3:修改抽象挂钩1128.5案例4:清理有害物体1158.6框5:当字符串文字用作标识符时8.7第119章第一次见面9结论1219.1摘要1219.2捐款1239.3未来工作124A 坚果壳中的Pharo语法127B摘自Pharo 8129的Deprewriter转换规则参考文献131图列表2.1库更新是更新客户端系统以响应库演进的过程。它有两组参与者:发布库的新版本的库开发人员,以及可能需要根据需要更新其代码的客户端开发人员。正在使用新版本。 . . . . . . . . . . . . . . . . . . . . .82.2日食中的衰变警告。............................................................................104.1由库开发人员开发的软件类型在我们的研究中占有一席之地304.2由客户开发人员开发的软件类型我们研究的一部分314.3你认为你的版本中的突破性变化有很大的影响吗?对客户采取行动?................................................................................334.4您认为客户端开发人员需要多少时间来更新您的库的新版本?................................................................................334.5您引入突破性变更的主要原因是什么?344.6保持向后兼容性对您有多重要? ...354.7鼓励客户更新到最新版本对您来说有多重要最新版本?............................................................................................364.8您的成瘾行为对您的影响有多大?(例如,当您的某个依赖项发布新版本或为旧的下降支持)384.9更新依赖项通常需要多长时间? 三十九4.10 尝试估计您必须处理更新依赖项任务的频率5.1静态分析的局限性。分析器无法静态确定调用日志的内容:与已弃用的方法匹配。495.2重写弃用的两个阶段:声明和执行5.3已弃用的方法:transformWith:595.4方法转换:重写行为的核心5.5Java伪代码显示如何仅通过调用方方法来标识调用方使用现有异常支持。............................................................................635.6使用默认挂接方法的简单挂接和模板情况已弃用。................................................................................................756.1DepMiner工具截图。.......................................................................... 87x图列表7.1在导致突破性更改的提交中挖掘提交的本地子集。......................1047.2帮助库开发人员在发布前识别中断更改并减少其对客户端系统的负面影响的整体方法。 1078.1将现有名称b重新分配给不同的软件工件。在在本例中,a重命名为b,并行地,b重命名为c1 1 0 个8.2当两个软件工件的名称被交换时,循环重命名是一个特别具有挑战性的情况:a被重命名为b,而b被重命名为b。与此同时,b被重命名为112。8.3在v1.0中,库用于提供打算由客户端实现的抽象hookread()。在v2.0中,此钩子被重新命名为readFile()。但是客户端系统仍然为旧的read()方法提供实现。现在客户端-永远不会被调用。..............................................................................1138.4属于图书馆的黄色类和属于图书馆的绿色类是客户。此系统遵循模板方法设计模式-客户端系统应提供库调用的方法的实现。当库中的抽象挂接方法被重命名时,客户端也必须重命名它们的实现。但是,当前的弃用机制不允许用户弃用钩子并通知客户端,因为在这种情况下,它是一个调用客户端方法的库,而不是一个调用客户端方法的库。调用库方法的客户端1148.5要 将 子 变形放置 在 父 变形中 , 客 户 端提供 四 个 参 数 :bottomFraction、rightFraction、bottomushset和rightOff-set。四个都是数字。它们可以表示百分比(在在分数的情况下),或为负数(在偏移的情况下)。..................1168.6这种定位子变形的方法只需要两个参数:分数和偏移量。它们都是矩形,这引入了两个问题:(1)偏移矩形可以具有负边,矩形分数的边是百分比。这两个问题都违反了矩形的性质,并将其从几何对象转换为用于存储和传递的简单数据结构。到处都是数字。..................................................................................117表列表3.1库演变的实证研究有两个标准:它是基于开发者调查,源代码分析,还是两者兼而有之?它是从客户的角度、图书馆的角度还是两者兼而有之? 十八3.2按输入类型分类的相关方法:hist=提交历史记录,2v=源代码的2个版本,doc=文档,L=库,C=迁移的客户端,T=库的单元测试,技术:TS=文本相似性,SS=结构相似性,CD=调用依赖性214.1当更新依赖关系很容易时,是什么让它变得容易?第二列是提到此因素的开发人员数量一个开放式的问题。............................................................................404.2当更新依赖项很难时,是什么让它变得很难? (only至少有2个开发人员提到的因素)。............................................................................415.1Pharo 8中提供六个抑制选择器,以及一个数字发件人。................................................................................................655.2可能需要弃用方法的场景675.3调查:您维护什么样的软件?"..........................................................705.4调查:"您将软件迁移到新版本的频率如何?他的依赖关系?"..................................................................................715.5调查:"你知道Pharo对自动弃用重写的支持吗?自动弃用 重写 是 否 对 您 有 帮助在迁移中?"..........................................................................................715.6您是否编写了自己的自动弃用转换规则来帮助迁移用户?"..........735.7调查:编写重写规则有多容易?".......................................................745.8调查:首选的Deprewriter配置是什么开发商?................................................................................................746.1选定的软件项目896.2从提交历史中挖掘的关联规则906.3开发商接受的推荐弃用数量906.4开发人员接受的缺失规则数量91十二表列表7.1在处理突破性变化时,会出现不同的情况。列区分已删除方法具有或不具有替换的情况,以及替换的自动性。行描述了图书馆的 意 愿 -弃用方法。..........................................................................................1027.2重构我们在分析中考虑的操作以及检测这些操作的条件。在示例中,方法A.m()被替换为方法B.m'()。前两个操作是名称重构,因为它们影响方法的名称或其签名性质;最后三个操作是位置重构, 因 为 它 们 影 响 方 法 的 名 称 或 签 名性 质 。将方法移到其他类别或封装。..........................................................105B.1从Pharo 8中提取的转换规则示例。................................................. 130CHAPTER 1简介内容。1.1软件演进和突破性变更11.2库更新21.3问题21.4贡献31.5为什么是法老?.......................................................................................31.6论文结构41.7出版物列表51.1软件演进和突破性变更现代软件开发的一个重要特征是软件工件的高度重用。软件应用程序依赖于多个外部库和框架,因此它们也可以与微服务组件通信[Baldassarre2005]。为了简单起见,在本文中,我们通常将所有可重用软件称为库,并将管理它们的开发人员称为库开发人员。我们还将引用依赖于给定库的软件,因为它的客户端系统由客户端开发人员管理。为了促进库和它的客户端系统之间的通信,库开发人员定义了一个应用程序编程接口(API)--一组供客户端使用的公共类、方法和字段。 通过在一个非公开的协议中,库开发人员被期望保持API的稳定,客户端开发人员被期望只使用公共API。这是一个通过封装强制的隐式然而,在实践中,双方都经常违反协议。每一个软件都必须进化[Lehman 1996,Demeyer 2002,Mens 2004]。这包括可重用库。在库演进过程中可能发生以下两种类型的更改:2第一章。简介1. 非破坏性更改(向后兼容)-不修改API,因此不影响客户,除非客户开发人员违反合同并使用私有功能。2. 中断更改(向后不兼容)-更改API的某些部分,这可能会中断客户端代码并迫使客户端开发人员更新其系统。库中的中断更改也可以从一个客户端传播到另一个客户端,这称为涟漪效应(Yau 1978)。库中的中断更改可能会导致其客户端系统中的中断更改,从而影响这些客户端中的所有客户端[Robbes 2012a]。1.2库更新更改客户端系统以响应其依赖项之一的中断更改的过程称为库更新。当一个库发布了一个与以前的版本不再兼容的新版本时,就会发生这种情况。在这种情况下,使用旧版本的客户端开发人员可以选择。他们可以继续使用旧版本,但在新功能上遗漏了旧版本,并冒着在某个时候放弃对过时库的支持的风险。他们可以更新系统以使用最新版本。实际上,对于客户端开发人员来说,在存在中断更改的情况下进行库更新可能是困难和耗时的。如果功能被删除,他们需要知道如何替换它。如果API已更改(例如,类被重命名或参数被添加到方法中),他们需要了解如何使用新的API。为了简化这一过程并鼓励他们的客户进行更新,库开发人员尝试通过文档、通信渠道(如在线论坛)或介绍弃用来支持他们。除非立即删除该功能,否则库开发人员会将其标记为已弃用(将被删除),并且只会在将来的某个版本中删除它。这使他们的客户有更多的时间来更新。库和客户端开发人员都可以从自动化工具中受益,这些工具可以指导他们完成库更新过程。实现基于数据挖掘技术的工具,从源代码和提交历史中提取知识,是本文的主要重点。1.3问题在本文中,我们研究了如何通过构建工具在库更新过程中支持库和客户端开发人员具体而言,我们解决了三个问题:1.4. 贡献31. 经验性问题。了解库更新在实践中是如何发生的,以及库和客户端开发人员是如何看待它的。他们面临着什么问题?他们需要什么支持我们将在第4章中讨论这个问题。2. 建模问题。什么是允许人们表达有关如何更新依赖关系的信息并可用于转换源代码的语言?(第五章)。3. 自动化问题。如何根据可用数据(源代码、提交历史记录等)自动化建议转换的过程?(第6章和第7章)。1.4贡献本文的主要贡献是:• 对两家工业公司和一个开源社区的库和客户端开发人员的调查(第4章)• Pharo中Deprewriter方法和工具的第一个详细文档,其中引入了使用转换规则动态更新客户端代码的演示(第5章)。• 通过分析Pharo 8中的源代码和开发人员调查,研究Deprewriter是如何被Pharo社区采用的(第5章)• DepMiner -一种基于项目提交历史来推断Deprewriter规则的新方法(第6章)。• 将DepMiner推广为一种新的整体方法,以支持库开发人员执行库更新任务(第7章)1.5为什么是法老?本文的大部分贡献都是基于Pharo1 [Black 2009] --一种受Smalltalk启发的开源动态类型反射面向对象编程语言它也是一个完全内置的IDE。也就是说,我们的发现并不局限于Pharo,而是可以应用于其他编程语言,如Java、JavaScript或Python。我们专注于Pharo,因为:1https://pharo.org4第一章。简介1. 通过我们的团队,我们可以访问Pharo社区,包括Pharo的核心开发人员和许多最受欢迎的库。2. Pharo提供了从内部分析语言的反射性工具。这使得它很容易查询代码,访问方法调用,提取弃用,重写代码等。对于那些不熟悉Pharo的读者,我们在附录A中提供了对其语法的简短介绍。1.6论文结构论文组织如下:• 在第2章中,我们讨论了库更新的问题,定义了本文的范围和其中使用的术语。我们还提供了几个激励性的例子来说明为什么库更新可能是困难的,以及如何通过工具来支持开发人员。• 在第3章中,我们讨论了最新技术水平。• 在第4章中,我们介绍了我们对两家工业公司和Pharo开源社区的库和客户端开发人员的调查结果。• 在第5章中,我们介绍了代笔人的方法。我们还解释了这种方法是如何在Pharo中实现的,并提供了在其他编程语言中实现它的几种替代方法。我们分析了Pharo 8的源代码,并进行了开发人员调查,以了解Deprewriter是如何被社区采用的。• 在第6章中,我们介绍了DepMiner --一种数据挖掘方法,它从提交历史中自动执行转换规则,并帮助库开发人员处理破坏性的更改。• 在第7章中,我们提出了一种支持库开发人员执行库更新任务的整体方法。这是对上一章中介绍的DepMiner的改进和推广。• 在第8章中,我们讨论了库更新的挑战性场景,它超越了简单的方法到方法的替换。• 在第九章中,我们结束了这篇论文,并讨论了未来的工作。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- StarModAPI: StarMade 模组开发的Java API工具包
- PHP疫情上报管理系统开发与数据库实现详解
- 中秋节特献:明月祝福Flash动画素材
- Java GUI界面RPi-kee_Pilot:RPi-kee专用控制工具
- 电脑端APK信息提取工具APK Messenger功能介绍
- 探索矩阵连乘算法在C++中的应用
- Airflow教程:入门到工作流程创建
- MIP在Matlab中实现黑白图像处理的开源解决方案
- 图像切割感知分组框架:Matlab中的PG-framework实现
- 计算机科学中的经典算法与应用场景解析
- MiniZinc 编译器:高效解决离散优化问题
- MATLAB工具用于测量静态接触角的开源代码解析
- Python网络服务器项目合作指南
- 使用Matlab实现基础水族馆鱼类跟踪的代码解析
- vagga:基于Rust的用户空间容器化开发工具
- PPAP: 多语言支持的PHP邮政地址解析器项目
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功