没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记166(2007)81-91www.elsevier.com/locate/entcs软件从现场来自Squeak维护人员Marcus Denker马库斯·登克尔2,3瑞士伯尔尼大学软件组合小组St'ephaneDucasse1,3,4LISTICUniversit'edeSavoie,法国摘要在过去的几年里,我们积极参与了开源Smalltalk Squeak的维护和改进。社区经常面临这样的问题,即在保持兼容性的同时实现更改。在本文中,我们描述了目前的情况,所面临的社会问题,我们概述了已推出的改进。我们还确定了一些问题继续存在的领域,并提出这些潜在的问题,以解决研究界。保留字:Squeak,开源,维护,软件演化,工具支持1引言在过去的几年里,我们积极参与了Squeak开源项目的开发和维护[13]。我们负责3.7和3.9官方版本,并参与了3.6和3.8版本。在这个活动中,我们遇到了开发人员每天都要面对的典型情况:代码臃肿,缺乏文档,改进代码的愿望和1 电子邮件地址:sduca@univ-savoie.fr2电子邮件:denker@iam.unibe.ch3Denker和Ducasse感谢瑞士国家科学基金会对“软件分解和组合的工具和技术”项目的财政支持2000-067855.02,2002年10月至9月2004年)和项目编号620-066077,9月 2002年8月2006年)。4杜卡斯感谢法国国家研究机构(ANR)对“库克:面向对象的应用程序重新架构2005-2008”项目的财政支持1571-0661 © 2006 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2006.08.00382M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)81为所有开发人员提供不变的基础此外,Squeak还存在一些真正的开源项目的问题:缺乏人力,分布式开发,贡献者分布在多个地点,缺乏长期承诺。在本文中,我们提出了Squeak社区一直面临的问题,并描述了已经引入的改进。此外,我们还勾画了我们希望实施的未来方法。最后,我们分析了开放的问题,并提出这些作为未来的研究课题,可能感兴趣的研究社区对软件演化。一些研究人员分析了软件演化及其挑战,并提出了变化的分类[6,16,17]。还有其他关于开源开发和演变的研究[18]。在本文中,我们想总结一下我们作为开发人员和研究人员维护大型复杂开源环境的经验。首先,我们通过提供一些表征它及其演变的测量来介绍Squeak [13]然后,我们通过描述Squeak社区中的当前力量来阐明Squeak的哲学,并介绍整个开发过程。我们概述了社区一直面临的共同问题,以及从实施和更注重过程的角度采取的改进措施。随后,我们提出了仍然存在的开放性问题。我们回顾性地分析了我们错过的机会,并概述了我们设想的改善情况的方法。2吱吱虽然Squeak的外观可能会误导新手用户,但Squeak是一个非常庞大而复杂的系统,在其最新的公开版本(3.8 Basic)中包含超过1600个类和32,000个方法。Squeak包括对不同应用程序域的支持:• 两个大型图形用户界面框架Morphic和MVC,• 一个IDE,包括一个增量编译器、调试器和几个高级开发工具,• 语言核心和所有支持它的库(简单的和复杂的),包括并发抽象,• 多媒体支持,包括:图像,视频,声音,语音生成,• eToy [1],一个面向儿童的高级脚本编程环境• 各种库,如压缩,加密,网络,XML支持。所有这些代码都是主Squeak发行版的一部分。除此之外,SqueakMap存储库中提供的外部软件包数量也在不断增加(超过600个软件包),这显示了Squeak社区的活力M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)8183释放年类方法LOCtestCase类/测试用例方法引入的功能3.5完整200318114140832265620 /1583.6基础20031338332772467520 /零3.7基础2004154435526261315133/1180测试3.8基础2005165937952281694148 /1426国际化支持3.9beta2006208345842334334220 /2506特质,蒙蒂塞洛,服务,工具-生成器表1整体增长。2.1可衡量的事实表1显示了一些指标,以了解Squeak的规模和增长情况。Squeak社区意识到系统开始包含太多不需要的功能。因此,在Squeak 3.6中,某些功能(如Web浏览器和电子邮件客户端)被外部化。 在Squeak 3.9中,引入了大量的基础设施工作:新的语言功能(Traits)[20],版本控制系统(Monticello),注册机制(Services),UI框架的抽象层(ToolBuilder)。为了理解Squeak的发展动态,我们必须考虑它的开源性质,不仅要分析它的增长,还要分析正在发生的实际变化。实际上,某些操作(添加和删除功能)可能会导致方法和类的数量保持不变。在考虑Squeak的演变时,一个很好的起点是考虑在两个版本之间集成的补丁的大致数量这些补丁的大小和复杂性各不相同,因此数字只能作为所做更改的提示版本3.53.63.73.83.9补丁10240560600n/a表2应用的修补程序数2.2Communities and社区和社区Squeak.org发行版被广泛的不同项目使用。其中一些有自己的开源社区,另一些是封闭的研究或商业项目。在这里,我们列出了基于通用发行版的最重要的项目。斯奎克兰这种分配 的主要重点是 小学教育工作 者。主界面是 Etoy 系统[1]。Squeakland广泛分布于日本和美国。最终用户不直接与Squeak交互,而是与Etoy层交互。代码质量、易于扩展、理清和测试代码并不是开发的主要焦点。小土地。这是一个与Squeakland相似的社区:孩子们年龄较大,该项目直接管理自己的squeak DISK的安装基础84M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)81在西班牙的学校里安装了8万台电脑。SmallLand已经完全本地化为西班牙语:这项工作的最大贡献之一是将Squeak翻译为其他欧洲语言的框架,这一变化影响了大部分代码库。为了支持更好的桌面,对图形用户界面进行了大量修改.他们关心代码质量。海边它是一个用于开发复杂的动态Web应用程序的框架。Seaside结合了面向对象的方法和基于延续的方法[8]。Seaside提供了一种独特的方式,可以在页面上拥有多个控件窗口,每个控件窗口对应这个社区关注库的健壮性和可伸缩性以及工具支持。 系统的设计和易于扩展 这也是他们关注的问题之一。这个社区开发了一个软件包和版本控制系统(Monticello),用于Squeak的最新版本。这使开发人员能够编写高度可重用的组件,并可用于组成复杂的Web应用程序。海滨被许多公司用于商业开发。槌球它是一个3D共享的多用户环境。不同机器上的用户可以使用Croquet一起探索三维空间,进行协作和共享。Croquet使用新的对等模型进行同步,允许系统在不需要中央服务器的情况下运行。调整。Tweak是基于Morphic和EToys的经验教训的UI和脚本系统的下一代实现。调整者关注代码质量,但通常是在基础系统之上或之外构建层。在维护Squeak的过程中,我们了解到有两个主要的驱动力,这导致我们创造了“自我中心综合症”这个短语2.3Squeak开发过程与许多开源项目一样,Squeak社区是一个开源运动,缺乏真正的财政支持或赞助组织。从一开始到3.4版,Squeak主要是由SqueakCentral开发的,这是一个围绕AlanKay的研究小组。从Python 3.4到Python 3.8,开发社区不断壮大,并且在地理上分布着许多开发人员和小团队。一般过程如下:开发人员制作补丁或增强,发送到邮件列表并收集在中央数据库中。然后,负责给定版本的维护人员查看更改并决定是否将其集成到当前版本中。M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)81853常见问题在本节中,我们将详细介绍Squeak社区面临的一些代码级问题。我们意识到这些问题既不是Squeak的特例,也不是Squeak特有的。我们的目标是为专注于软件进化领域的研究人员记录它们。下一节将介绍所作的改进以及对所取得成果的评价。乱码。从历史上看,与任何原始的Smalltalk实现一样,Squeak是作为一个单一的系统开发的。子系统边界不明确的事实(例如通过包系统)导致系统具有许多不必要的(并且通常令人惊讶的)依赖性。例如,编译器依赖于GUI。这些依赖性阻碍了模块化和进化:引入bug的风险很高,因为系统一部分的更改可能会破坏另一个不相关的部分。死代码和原型代码Squeak最初的目的是作为一个原型新想法的环境。很少有资源被花在重构上[11],而且从来没有系统地清理过。通常,实验及其扩展仍保留在系统中,导致死代码和不完整的功能。进化困境与进化困境相比,前面的问题都是次要的。由于Squeak存在多个利益相关者,他们要求它是一个稳定的开发基础。然而,与此同时,这些项目也进行了重构,以改善和修复基本系统,并通过这样做产生不稳定性。因此,进化的困境是保持稳定,同时确保有可能做出改变。前两项是雷曼[14]所说的熵:系统的熵会随着时间的推移而增加,除非执行特定的工作来维持或减少它。困境来自于减少熵会对使用系统的客户端产生影响。4企业级改进解决进化问题的一种方法是使用著名的软件工程技术和面向对象的设计原理。[2]的文件。在本节中,我们将举例说明这些技术对Squeak的好处大多数软件工程改进的一个因此,我们需要改变制度,以促进未来的变化。4.1弃用弃用机制是一种众所周知的技术,它允许逐渐采用新的接口。这个想法是,所有不再需要的公共方法(例如,、86M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)81由于采用了新的、不同的API),因此不会立即删除。相反,添加了对deprecation方法的调用,并向用户指示应该使用另一个方法:每月>>eachWeekDo:aBlockself deprecated:self weeksDo:aBlock此方法通过调用#deprecated:方法在调试模式下引发警告,但允许在生产环境中执行原始方法。在Squeak中,在一个主要版本中保留了被弃用的方法:在3.8的开发中被弃用的方法将在3.9中被删除。版本不推荐使用的方法版本不推荐使用的方法3.61003.8243.71043.955表3不推荐使用的方法数。弃用机制的使用随着时间的推移而减少(表3)。这可能表明以下两种情况之一:可能表明需要一个更好的机制,或者表明系统实际上正在稳定。后续步骤。不可能将整个类标记为已弃用。另一个缺点是,整个机制是非常粗粒度的:进化一直在发生,并不局限于主要版本。弃用并不会在短周期的变化中扩大在未来,作者希望探索如何存储重构我们还想解决类的弃用问题。4.2分而治之:系统正在进行一项大型工程,以使该系统模块化。最新的3.9测试版由49个包组成,不包括测试,平均每个包40个类后续步骤。 模块化不是由高级分析驱动的[21]。 拥有额外的工具支持来分析现有的依赖关系是首要的步4.3登记机制模块化要求将系统划分为单元,以便能够从其实际组件的子集构建。在早期版本的Squeak中,有许多情况下,简单的配置需要更改代码:例如,当添加工具时,构建菜单的代码需要扩展以处理新工具。 社区成功地将条件变换应用于注册[7],即引入了允许注册新服务而不必修改代码的注册机制。这大大减少了不同工具之间的摩擦,并促进了工具的动态加载和卸载。M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)81874.4新抽象SqueakMVC/Morphic之间存在相互依赖性,并且某些功能仅在一个框架中可用。社区采用的解决方案是构建一个抽象层,名为ToolBuilder,表示通用框架元素,并重写工具以使用ToolBuilder框架,该框架封装了所使用的GUI框架。4.5重构近年来进行了许多小的重构,导致迭代改进。支持一些大的重构,例如完全重写网络子系统。当更改没有横切许多包,而是本地化在一个包中时,大型重构是可能的。4.6启用更改:测试在过去的几年里,单元测试已经获得了很多认可,因为它促进了变化[3]。测试支持开发人员更改代码的能力,因为他们可以快速识别由于更改而破坏的代码。Squeak长期以来一直包含SUnit,一个测试框架。然而,开发人员需要时间来认识到测试的重要性,并采用编写单元测试的做法。为了提高对单元测试的认识,Squeak 3.7的发行版不仅包括框架,还包括测试本身。这提高了Squeak开发人员的普遍意识。在上一个版本中,测试覆盖率增加了,3.7中的测试是3.6中的6倍多,在以后的版本中几乎翻了一番(见表4)。版本试验次数版本数量的测试3.51713.813473.60(外包装)3.921573.71124表4试验次数。后续步骤。进行测试是以同步的方式启用更改和记录系统的第一步。下一步是使用测试覆盖工具来评估测试的质量。我们计划使用测试来支持开发,让测试服务器提供关于最新版本状态的持续反馈[4]。5流程改进除了严格的代码级技术改进外,还采用了面向过程的方法。社区开始采用一些流程88M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)81改进,例如更好的工具和真正的bug跟踪。其他有前途的改进,例如自动构建系统,将在未来实施。5.1更好的包装工具Squeak的开发曾经基于变更集:修改或添加的方法和类定义的简单列表。变更集可以保存到文本文件中并发送(即通过电子邮件)。然而,一旦涉及多个开发人员并需要同步,变更集就不能伸缩:解决冲突非常繁琐,集成的周转时间非常长。相比之下,今天的许多开发系统使用复杂的版本控制系统,如CVS[9]。这激发了Seaside周围的商业子社区开发一个名为Monticello的版本控制系统,该系统使用强大的合并算法和服务器SqueakSource,项目可以使用该服务器在分布式设置中管理和存储其代码库SqueakSource和Monticello已经被证明是非常成功的。Squeak- Source拥有超过420个注册项目和480名开发人员。几个子社区开始拥有自己的SqueakSource服务器来管理他们的项目。从3.9的开发周期开始,Squeak使用专用的SqueakSource安装和Monticello来管理完整的squeak代码库。后续步骤。拥有第一类实体的包和更好的工具支持包是可取的。5.2Bug跟踪早期版本的Squeak在开发时没有提供任何bug跟踪。当然,Squeak社区面临着管理bug的问题:用户确实发现了bug,开发人员也发现了修复,其中一些包含在下一个版本中。但是没有控制有多少bug被识别出来,或者监控它们是否被修复,或者实际上Squeak的总体状态是什么。这种情况已经得到了巨大的改善:使用Mantis[15],一个基于Web的bug跟踪系统,已经报告了超过2500个bug。5.3未来改进我们从经验中了解到,我们应该在支持Squeak开发过程的工具上投入更多的时间和我们现在的目标是积极解决这个问题。自动生成工具。目前,合并更改的任务是劳动密集型的,而且非常耗时。目标是利用自动构建系统来消除当前维护人员面临的所有繁琐工作。自动构建系统是一种众所周知的技术,它将成为Squeak开发工具集的一个有价值的补充。与自动测试服务器的集成是构建系统必须解决的另一个M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)8189自动测试运行。除非经常运行测试,否则它们不是很有用。目前执行整个测试套件需要10分钟以上的时间,因此会使开发人员远离运行测试。我们建议使用一个服务器来解决这个问题,该服务器可以自动运行所有测试,至少每天一次,并将测试结果发送给开发人员。这种服务器目前正在开发中。更好的工具。当前的工具代表了Squeak开发过程中的改进,但它们需要进一步改进:例如:,Monticello的响应时间对于大型代码库来说很慢。6语言设计梦想除了参与Squeak的维护和发展,我们主要是语言设计研究人员。我们试图从我们的研究背景中退一步,避免将语言设计中的实验与健壮的、可扩展的解决方案混合在一起。虽然我们怀疑仅仅通过添加几个新的语言特征就可以解决大型系统平滑而快速进化的复杂问题,但我们认为新的语言特征是未来软件进化研究的一个非常有前途的领域:语言如何支持变化和进化?下面是软件演化研究人员面临的挑战列表更好地支持模块化。虽然Squeak现在有一个包机制,但它没有一个真正的模块系统。包只是部署时间和代码管理工件。Squeak包不包含任何可见性的概念(与Java包相反)[5]。评估模块系统如何通过提供范围界定机制来帮助更好地构建系统,将是一件有趣的事情历史作为第一个类的对象。Squeak是一种反应性语言[10]:例如。类和方法都是对象,系统对自己的结构有一个完整的、面向对象的描述,可供自省和修改。我们想了解扩展这种反应模型的成本,以考虑对进化重要的数据:系统的历史应该被表示为第一类实体[12]。有了第一堂课的历史,就有可能提出以下问题:为什么要改变这种方法?当这种方法改变时,还有什么变化?第一次测试是什么时候?哪些变化影响了系统的性能?超越绝望如前所述,弃用并不能真正帮助解决Squeak社区面临的进化问题:问题在于,一些客户可能希望迁移到新版本,但只是对其应用程序的如果我们有系统的完整历史记录,我们真的是否有可能让不同的客户端同时使用90M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)81相同的组件?操作系统允许指定使用哪个库版本。这样的模型是否可以在编程语言的级别上实现,以便多个版本能够共存?7结论Squeak的演变及其多样化的开发人员社区和开放问题(即分散开发,模块化需求)是一项具有挑战性的任务。Squeak社区在过去的几年里取得了很大的进步,例如第一次将系统模块化和增加单元测试。然而,除了Monticello这样的环境增强之外,很少有工具被构建来分析Squeak的代码库。我们已确定需要他们帮助改善系统。此外,在过去的几年里,我们遇到了一些问题,即必须在为现有用户提供稳定性支持的同时引入更改。我们强调这样一个事实,即在今天的编程语言中没有语言支持进化的概念目前的语言只能描述系统的一个版本。范围的变化和允许多个版本,同时保留一个简单的语言是一个开放的挑战,研究界面临的。致谢。我们衷心感谢瑞士国家科学基金会对项目“重铸:面向对象应用程序的演变”(SNF 2000-061655.00/1)和法国ANR对“库克:重新架构面向对象应用程序”的财政支持。作者要感谢所有的Squeak开发人员以及Orla Greevy和Adrian Lienhard对本文早期版本的评论引用[1] B. J.艾伦-康恩和金伯利·罗斯在课堂上的强大思想。观点研究所,2003年。[2] 谢尔曼河阿尔珀特,凯尔布朗,和鲍比伍尔夫。设计模式SmalltalkCompanion艾迪森·韦斯利1998年[3] 肯特·贝克。极限编程:拥抱变化艾迪森·韦斯利2000年[4] 肯特·贝克和马丁·福勒 规划极限编程。 艾迪森·韦斯利2001年[5] Al exandr e Bergel,St'ephaneDucas s e,anddOscarrNier s traz. 在设计过程中,我们将始终保持灵活性。 JournalofUniversal Computer Science,11(10):1613 -1 6 4 4 , 20 0 5 .[6] JimBuckl ey,TomMens,M atthi a s Ze ng er,A wai s Ra s hid,andGunterKnie s el. 这是软件变更的一个例外Journal on Software Maintenance and Evolution:Research and Practice,pages 309[7] Serg e D em eyr,St'ephaneDucas s e,anddOscarNier s traz.Obj ect-Oren g i n e eeringP ater n s. 摩根·考夫曼2002年。[8] 我是说,我是说,我是说。海洋数据库-一个基于Web的应用框架。在ESUG Research Track 2004会议记录中,第231M. Denker,S.Ducasse/Electronic Notes in Theoretical Computer Science 166(2007)8191[9] 卡尔·福格尔和摩西·巴尔 使用CVS进行开源开发。 科里奥利,2001年。[10] Brian Foote和Ralph E.约翰逊Smalltalk-80中的相关设施。在Proceedings OOPSLA[11]马丁·福勒、肯特·贝克、约翰·布兰特、威廉·奥普代克和唐·罗伯茨。 重构:改进现有代码的设计。艾迪森·韦斯利1999年[12] 你是我的朋友。 更新历史记录,以更新和保存电子邮件。 PhDthes is,UniversityofBerne,Berne,November 2005.[13] 丹·英格尔斯,泰德·凯勒,约翰·马洛尼,斯科特·华莱士和艾伦·凯。回到未来:Squeak的故事,一个自己写的实用Smalltalk在Proceedings OOPSLAACM Press,November 1997.[14] 曼尼·雷曼和莱斯·贝拉迪程序演化:软件变更。伦敦学术出版社,1985年。[15] 螳螂 http://www.mantisbt.org/(最后一次访问日期:2006年8月8日)。[16] 作者:John F. Ramil和Michael W.戈弗雷分析大型软件的演变:问题概述。软件维护和演化:研究与实践,16(6):363[17] 汤姆·门斯,米奇尔·韦姆林格,斯蒂芬·杜卡斯,谢尔盖·德梅耶尔,RobertH ir s chfel d,和梅迪·贾扎耶里。软件进化的挑战软件演化原理国际研讨会论文集,2005。[18] Audris Mockus,Roy T Fielding和James D Herbsleb。开源软件开发的两个案例:Apache和Mozilla。ACM Trans. Softw.工程师,Methodol。,11(3):309[19] 奥斯卡·尼尔斯特拉斯和马库斯·丹克。编程语言中的支持软件变更,2004年10月。OOPSLA动态语言复兴研讨会。[20] Nathanae lSchéarli,St'ephaneDucas s e,O s carNier s trasz,anddAndwBlack. 关键词:行为的共同点 。 在 Proceedings ECOOP 2003 ( European Conference on Object-Oriented Programming ) ,LNCS的第2743卷,第248Springer Verlag,2003年7月[21] 丹尼尔·凡森彻。泥饼:泥球中的层。计算机语言,系统结构,30(1-2):5
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功