交换编程――极限编程的延伸实践

点赞:5576 浏览:18381 近期更新时间:2024-04-14 作者:网友分享原创网站原创

摘 要结对编程是一种编程组队方法,在这种方法中要求两个程序员使用一台电脑在一起工作完成同一个任务.在软件开发中关于结对编程的价值正在进行着争论.目前在这个领域大量的知识都是离散的和无条理的.回顾这些可以看到绝大多数这方面的实验研究都是在大学环境中进行的.几乎没有在真实软件开发项目中详细审查下的结对编程被已存在的系统化实验研究过.因此,检测设目前仍然没有纯粹的经验验证这种优势的存在.

由于结对编程在表象上给人以浪费一个开发人员的感觉,所以,在很多软件企业中,很难得到推广实施.在本文的报告中,我们给出了一种有别于结对编程和传统的单人编程的团队组织形式,这种形式融合了结对编程促进团队内相互交流的好处,保持了团队的稳定性,同时采用了传统单人编程的形式,不给人以浪费人力的感觉.

关 键 词极限编程,结对编程,交换编程,UML,TSP

中图分类号TP391.41文献标识码A

eXchangeProgramming――XP’sExtendPractice

BaiHuidong1YuanPeijiang2

1(IndependentSoftwareConsultant,BeijingCyworldNetworkTechnologyCo.Ltd.,China)

2(SchoolofMechanicalEngineeringandAutomation,BeihangUniversity,100191,China)

【Abstract】Pairprogrammingisaprogrammingtechniqueinwhichtwoprogrammersuseoneputertoworktogetheronthesametask.Thereisanongoingdebateoverthevalueofpairprogramminginsoftwaredevelopment.Thecurrentbodyofknowledgeinthisareaisscatteredandunanized.Reviewshowsthatmostoftheresultshebeenobtainedfromexperimentalstudiesinuniversitysettings.Few,ifany,empiricalstudiesexist,wherepairprogramminghasbeensystematicallyunderscrutinyinrealsoftwaredevelopmentprojects.Thus,itsproposedbenefitsremaincurrentlywithoutsolidempiricalevidence.

Becauseitfeelslikeoneprogrammeriswastedinpairprogramming,insoftwarepaniesitcan’tberecognized.Reportedinthispaper,weadviceanewteamstructureform.Itbinestheadvantagesofbothpairprogrammingandsoloprogramming,promotingmunicationinteammembers,keepingteam’sstability,andlesan-day’swasting.

【Keywords】eXtremeProgramming,PairProgramming,ExchangeProgramming,UML,TSP

0引言

在传统的开发过程中,往往是一个人从一个模块的需求调研开始,然后作分析、设计、编码、单元测试,接着才会交给第二个人(专职测试人员)进行其他测试项目.这样的开发过程会因为开发人员的变动而对项目的进展产生较大的影响,所以在软件工程的一些实践中就有项目中编码人员的重要性远比项目经理大的认识,为了改变这种状态,软件工程的研究人员进行了大量的工作,其中有人提出了极限编程的12个核心实践.在极限编程中关于团队组织模型的一个核心实践就是结对编程方式,但是对于开发人员人手严重不足的项目中,很多软件企业是不认可这种组织方式的,他们认为这会浪费很多的人力,一加一不能大于二.

结对编程是极限编程12个核心实践之一[1,2,3].在结对编程中,要求两个程序员使用一台显示器,一套键盘鼠标来完成所有分配给他们的任务.结对编程的支持者声明结对编程的开发方式与传统的编程方式相比有很强的优势,这包括更高的团队开发效率和更高的软件开发质量.在XP的宣传中提到,两个人结对在一段时间以后可以使得开发效率超过单人编程,同时质量也会得到提高[6,7].同样,在2006年敏捷中国开发者大会上,著名软件工程大师MartinFowler作为首席科学家的公司ThoughtWorks的总经理SidPinney先生也提到了这个问题,他作出如下解释:当两个人结对时间超过三个月以后,效率会超过两个人单独编程的效率!这里,三个月这个时间不是真实确凿的时间分界线,它只是一个模糊的大概的时间范畴,如果两个技术人员配合得好,也许只需要两个多月,如果配合不好,也许需要四五个月,或者更长的时间等.

但是,在本文的实践过程中发现,几乎没有软件企业因为XP这样的宣传而采用结对编程的方式进行软件开发.除了ThoughtWorks,Google等少数公司外,几乎所有的公司都仍然采用传统的单人编程的方式进行软件开发.

在所能查阅到的所有关于结对编程优劣势分析和数据采集的文献资料共计173篇,其中以结对编程为主要研究目标的有71篇论文,在这些论文中提到的试验研究的对象大部分是在校学生[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28].只有不到十分之一的论文是关于专业程序员进行结对编程的实验[6,30,31],而这部分关于专业程序员实践结对编程的论文也并没有讨论结对编程开发效率是否真的能够达到两个同等水平的专业程序员单人编程的开发效率.几乎所有的论文的对比数据基础都是基于结对编程的两人组和单人编程的一人组之间进行的,这样的数据无疑并不能让软件企业信服这种开发方法所具有的优势.

同时还查阅到一些论文在实践的基础上提出了相反的观点,如HannaHulkko&PekkaAbrahamsson的研究就认为结对编程在与单人编程对比的时候并不能始终保持高效率和高质量.他们在文中写道:”TheyindicatethatpairProgrammingmaynotnecessarilyprovideasextensivequalitybenefitsassuggestedinliterature,andontheotherhand,doesnotresultinconsistentlysuperiorproductivitywhenparedtoSoloProgramming”[31].


基于这样的实践和研究,本文认为,在与结对编程和单人编程的对比上,交换编程具有其特殊的优势.

1相关工作

由于交换编程属于全新的概念,交换编程也属于结对编程与单人编程结合的产物,所以这里主要用它与结对编程进行对比,所能够查阅到的所有文献都是关于结对编程的.

北卡罗琳娜州立大学的几个研究人员从2002到2005年间[26]进行了一系列的试验并发表了多篇结对编程论文[11,13,16,18,19,20,21,24,26,28].在他们的试验中全部采用的都是在校大学生,有1350名从大一到大四的学生参与了这一系列试验.他们分别从课堂教学和学校软件实践方面进行了关于性别差异、团队构建、布鲁克斯法则、个性特点,学习类型,技能水平,对个体编程的认同度,工作道德规范,或者时间管理偏爱等基于教学考虑的方面进行了结对编程试验,并得到了一些结对编程的支持性数据和观点.

UniversityofSannio的GerardoCanfora,AnielloCimitile,CorradoAaronVisaggio等人对学习了一些编程课程的学生进行了结对试验,验证了个体经验和技能对结对编程过程中知识构建的益处[14].

MatthiasM.M¨uller和FrankPadberg进行了一系列的结对编程试验,他们在一篇论文[7]中认为,通过使用了一系列的度量方法来理解、模型化分析、评估结对编程在软件开发中的效果.在增加了人工成本的基础上,结对编程相对于传统开发过程更侧重于提高团队产量和代码质量.

FrankPadberg和MatthiasM.M¨uller的另一篇论文[15]中得到了这样的试验结论:结对编程的效率提高比例与结对编程的个人的程序开发经验无关,而是和结对编程过程中的个人感觉有关.他们认为结对编程过程中结对程序员感觉越愉快他们的开发效率提高得就越多,这篇文章也从同样的角度验证了北卡罗琳娜州立大学2006年发表的关于ExaminingtheCompatibilityofStudentPairProgrammers[26]文中提到的“个性特点,学习类型,技能水平,对个体编程的认同度,工作道德规范,或者时间管理偏爱”的结对观点,认为如果不考虑这些因素,结对的效果就无法体现出来.

但是,HannaHulkko和PekkaAbrahamsson的一篇论文[31]的试验中引入了企业中有经验的软件开发人员.在这个试验中,他们认为:“回顾这些可以看到绝大多数这方面的实验研究都是在大学环境中进行的.几乎没有在真实软件开发项目中详细审查下的结对编程被已存在的系统化实验研究过.因此,检测设目前仍然没有纯粹的经验验证这种优势的存在.”据此和他们的试验结果,文中提出了针对结对编程的反面观点:“我们的经验发现表明:提供了与结对编程所声明的优势对比的结果.他们显示出:结对编程也许不像相关文献中建议的扩展的质量好处一样的必要,并且另一方面,当与单独编程进行比较的时候,这些结果并不能证明结对编程可以一直保持较高的生产率.”

2方法定义

与结对编程类似,交换编程也是一个非常简单和直观的概念:

两位或者多位程序员轮流开发同一个软件系统的同一个模块的不同阶段的任务.

交换编程的方式更合适的说法应该是交换开发,这种方式不仅仅可以应用于软件项目,也适合其他研究开发型项目.相对而言,这更是一种更容易被人们接受的方法,在前文大家已经看到了它在实际项目中的事实,这里先分析一下它与结对编程的不同之处:

,它仍然采用传统的一人一机的开发方式,如图2;结对编程是两人一机,如图3.

,它在每个迭代间进行多人交换或者两两交换,结对编程没有交换的概念.

它与传统的编程方式之间的差别是在每个迭代间进行多人交换或者两两交换,而传统编程没有交换的概念.

这里说明一下两个概念:

轮流交换:三个以上的程序员之间相互交换所开发的工件,不仅限于三个.例如:A1的开发内容交给A2做下一阶段开发,A2的交给A3做下一阶段开发,等,An的交给A1做下一阶段开发.这种方式称为轮流.如图4,图5,图6.

交换编程中的操作与其他过程有较大的差异,根据经验,建议在软件工程实施的各个阶段按照如下的方式进行:

,需求工程中,需求调研和需求分析进行轮流交换;

,概要设计(分析模型)开发中,需求分析到概要设计进行轮流交换;

,详细设计(设计模型)开发中,概要设计到详细设计进行轮流交换;

,编码实施启动后,详细设计到编码的交换采用两两交换.

在全程建模的开发方法下的交换编程应用方式如下图:

在编码以前全部采用轮流交换的目的就是为了让更多的人了解项目进展的全部内容,有利于增加团队内的交流,使更多的人对项目所开发的内容熟悉,并能让他们提出自己的观点,也有利于使更多的人从更多的角度来研究某个系统模块所需要实现的功能和用户需要解决的实际问题,不会因为某个人的定式思维而出现理解偏差,从而造成对需求的理解不到位.

详细设计到编码的交换采用两两交换,这是因为前期需求已经基本上都稳定下来了,这时候不需要对用户需求进行更多方面的理解,只需要进行实施并进行纯粹的编码工作即可.此时做轮流交换已经不存在任何意义,相反只能影响开发进度.

3优劣分析

关于结对编程,很多公司对其也有一些常见顾虑,如图10,图11,图12所示:

上表的十四项内容分别从团队稳定性,技术水平,开发周期,团队人员等四个方面对这四种团队内人员组成方式进行了分析.从上面可以看到交换编程对几乎所有的这些项目都有其明显的优势,总体上看,交换编程无论在管理层面还是在团队组织层面或者是在项目变化上都优于单人编程和结对编程.

4试验结果

2002年4月在上海进行的一个ERP项目中实际采用了结对编程的方式来进行部分模块的开发.两个各自独立完成了一个模块开发的程序员携手进行第三个模块开发时采用了结对编程的方式.两个人只用了四天时间,就完成了这个新的模块(其模块难度与前面完成的模块开发难度相同)的全部功能,并且这个模块开发完成后几乎是一次性通过了全部测试.相对于此前做的功能模块来说,时间仅有其他模块开发时间的十分之一.

但由于结对编程会让人感觉到资源被浪费了一半,在2002年10月开始的一个中国电信MSS项目中,项目组提出进行结对编程的时候被管理层拒绝.那如何才能借鉴结对编程的优势,并能降低这种表面的浪费,而又能让大家交流起来,同时能提高团队的稳定性呢?

4.1项目基本情况

这是电信MSS项目的核心业务系统部分,包括了规划、可研、设计、施工、试运行、验收、财务、合同等多个重要环节和多个部门的业务.这个项目在最初评估的开发周期就是第一个版本在五个月内完成,整个项目至少要做上一年以上,而最后的实际情况是,这个项目随着不断的升级和调整一直开发了三年多.

可以对比的数据是:2003初到2004年10月间SAP基于自有的ERP系统给中国电信提供了完成同样功能的一套产品来替代这个团队所开发的这个产品,SAP也向中国电信承诺了要针对中国电信的行业企业特点进行写作开发,但是在2004年底推广应用前被宣布试验失败,延期推广.这个对比数据主要是为了证明这个业务系统的复杂度和规模都是相当巨大的,但是,在国外企业实施失败的情况下,国内一个小团队的开发却完成了南方电信11个省公司版本和电信集团公司版本的全部开发,2年内没有发生开发人员辞职的事情,由此可见,交换编程的开发方式带来的团队开发效率和稳定性都是比较好的.


4.2团队组成情况

当时团队开发人员数量为11个,人员技能较为均衡,没有经验和开发水平远远超出其他人的技术人员.最初的开发团队是十一个人,后来扩展到二十三个人,其中三个有五年以上开发经验,两个三年开发经验,另外的六个人技术水平相对较低只有一年多的实际项目开发经验.对于团队人数少于20人的开发团队,企业一般不会允许采用结对编程的方式进行开发,因为这类项目大部分都存在时间紧,任务量大,承接项目的公司规模较小等特点.当然,对于类似微软,Google,ThoughtWorks,AutoDesk等对资源占用不敏感的产品开发公司中超过4人的团队就可以考虑进行结对编程..

4.3项目实施过程

由于开发团队中没有经验和开发水平远远超出其他人的技术人员存在,因此技术方案的论证过程都是在全体组员的共同讨论中制定下来的.因此在权衡了整个项目的实际情况后,团队经过讨论后决定在完成需求工作后,第二阶段设计模型的开发所有开发人员轮流交换来做.

在设计模型开发完成后,开发人员再次进行了轮流交换.两次交换完成后,保证了每一个模块都有至少两个人对其十分熟悉,一方面不会因为人员的变动造成团队的不稳定,另一方面保证每一个模块的开发人员都能找到人进行讨论,从而增加了团队内的沟通,方便了协调工作的进行.

因此在那个团队的开发过程中,经常是大呼小叫,无论走到哪里,都是十分热闹的场景.在LarryL.Constantine’sThePeoplewarePapers[4]一书中的第十二章的“工作和游戏”一节中也有着类似的描述.LarryL.Constantine认为这是创造性团队应该具有的表现形式,这也符合Brooks[5]的胶冻团队的一个特征.

由于当时没有进行实际数据的度量对比,本文也无法从量化的数据上来说明问题,只能通过一些具体的事实来进行说明和验证:当时这个团队在七个月内满足了南方11家省级电信公司和中国电信集团公司的基本业务需求.从2003年4月到2003年12月期间,基本完成了该系统在这些省公司和集团公司等12个相对独立版本的二次写作开发任务.

5总结

综上所述,交换编程的应用方式是有其适用环境的,并且具有较为明显的优势.交换编程的适应性较强,这里分为团队状况和项目情况两个部分进行说明:

团队状况:交换编程适用于人数超过两个人的开发团队,因为交换一次至少也需要两个开发人员.人数较多的团队也可以应用交换编程的方式,来进行项目开发.要求团队内有一两个具有两三年以上开发经验的成员,这是对于软件项目的最基本要求.

项目情况:项目规模不限,开发周期的适应性也较强,对于任何类型的项目都可以适用.

21;,

[10]MatthiasM.Muller,WalterETichy,“CaseStudy:ExtremeProgramminginaUniversityEnvironment”,IEEE,2001

[11]LaurieWilliams,RichardUpchurch,“EXTREMEPROGRAMMINGFORSOFTWAREENGINEERINGEDUCATION”,31’stASEEAEEEFrontiersinEducationConference,2001

[12]JenniferBevan,LindaWerner,CharlieMcDowell,“GuidelineortheUseofPairProgramminginaFreshmanProgrammingClass”,Proceedingsofthe15thConferenceonSoftwareEngineeringEducationandTraining(CSEET’02),2002

[13]CharlieMcDowell,LindaWerner,HeatherE.Bullock,JulianFernald,“TheImpactofPairProgrammingonStudentPerformance,PerceptionandPersistence”,Proceedingsofthe25thInternationalConferenceonSoftwareEngineering(ICSE’03),2003

[14]GerardoCanfora,AnielloCimitile,CorradoAaronVisaggio,“Workinginpairsasameanordesignknowledgebuilding:anempiricalstudy”,Proceedingsofthe12thIEEEInternationalWorkshoponProgramComprehension(IWPC’04),2004


[15]MatthiasM.M¨uller&FrankPadberg,“AnEmpiricalStudyabouttheFeelgoodFactorinPairProgramming”,Proceedingsofthe10thInternationalSymposiumonSoftwareMetrics(METRICS’04),2004


[16]LaurieWilliams,AnujaShukla,AnnieI.Antón,“AnInitialExplorationoftheRelationshipBetweenPairProgrammingandBrooks’Law”,ProceedingsoftheAgileDevelopmentConference(ADC’04),2004

[17]HiyamAl-Kilidar,PeterParkin,AybükeAurum,RossJeffery,“EvaluationOfEffectsOfPairWorkOnQualityOfDesigns”,Proceedingsofthe2005AustralianSoftwareEngineeringConference(ASWEC’05),2005

[18]Chih-weiHo,KelliSlaten,LaurieWilliams,andSarahBerenson,“WorkinProgress-UnexpectedStudentOutefromCollaborativeAgileSoftwareDevelopmentPracticesandPairedProgramminginaSoftwareEngineeringCourse”,34thASEE/IEEEFrontiersinEducationConference,15-16,October2023,2004

[19]NehaKatira,LaurieWilliams,JasonOsborne,“TowardsIncreasingtheCompatibilityofStudentPairProgrammers”,ICSE'05,625-626,May15-21,2005.

[20]KelliM.Slaten,MariaDroujkova,SarahB.Berenson,LaurieWilliams,LucasLayman,“UndergraduateStudentPerceptionsofPairProgrammingandAgileSoftwareMethodologies:VerifyingaModelofSocialInteraction”,ProceedingsoftheAgileDevelopmentConference(ADC’05),2005

[21]LucasLayman,LaurieWilliams,JasonOsborne,SarahBerenson,KelliSlaten,andMladenVouk,“HowandWhyCollaborativeSoftwareDevelopmentImpactstheSoftwareEngineeringCourse”,35thASEE/IEEEFrontiersinEducationConference,9-14,October1922,2005.

[22]ShaochunXu,VáclRajlich,“PairProgramminginGraduateSoftwareEngineeringCourseProjects”,35thASEE/IEEEFrontiersinEducationConference,7-12,October1922,2005.

[23]TerenceC.Ahern,“WorkinProgress-EffectofInstructionalDesignandPairProgrammingonStudentPerformanceinanIntroductoryProgrammingCourse”,35thASEE/IEEEFrontiersinEducationConference,11-12,October19-22,2005.

[24]LucasLayman,“ChangingStudents’Perceptions:AnAnalysisoftheSupplementaryBenefitsofCollaborativeSoftwareDevelopment”,Proceedingsofthe19thConferenceonSoftwareEngineeringEducation&Training(CSEET’06),2006

[25]ShaochunXu,VaclRajlich,“EmpiricalValidationofTest-DrivenPairProgramminginGameDevelopment”,Proceedingsofthe5thIEEE/ACISInternationalConferenceonComputerandInformationScienceand1stIEEE/ACISInternationalWorkshoponComponent-BasedSoftwareEngineering,SoftwareArchitectureandReuse(ICIS-COMSAR’06),2006

[26]LaurieWilliams,LucasLayman,JasonOsborne,NehaKatira,“ExaminingtheCompatibilityofStudentPairProgrammers”,ProceedingsofAGILE2006Conference(AGILE'06),2006

[27]JariVanhanen&CasperLassenius,“EffectsofPairProgrammingattheDevelopmentTeamLevel:AnExperiment”,2005IEEE,2005

[28]LaurieWilliams,“DebunkingtheNerdStereotypewithPairProgramming”,Computer,83-85,May2006


[29]KimManLui&KeithC.C.Chan,“ACognitiveModelforSoloProgrammingandPairProgramming”,ProceedingsoftheThirdIEEEInternationalConferenceonCognitiveInformatics(ICCI’04),2004

[30]JosephChao&GulgunesAtli,“CriticalPersonalityTraitsinSuccesulPairProgramming”,ProceedingsofAGILE2006Conference(AGILE'06),2006

[31]HannaHulkko&PekkaAbrahamsson,“AMultipleCaseStudyontheImpactofPairProgrammingonProductQuality”,ICSE’05,495-504,May1521,2005.

作者简介:

白慧冬,1976年生,工学学士,独立软件咨询师,现就职于北京赛我时代网络科技有限公司,任职技术总监.在国内软件企业工作12年,主要研究方向为软件开发方法论和软件工程过程论,02年在RUP的基础上总结提出全程建模方法论,2004年在电子工业出版社出版《软件工程之全程建模实现》第一版,2010年10月在机械工业出版社出版了《软件工程之全程建模实现》第二版,为电信,军队,和国内中小软件企业提供过软件技术咨询和培训怎么写作.

BaiHuidong,bornin1976,HegothisengineeringbachelordegreefromShenyangUniversityofTechnology.HeiscurrentlyanindependentSoftwareConsultantwith8yearssoftwaredevelopmentexperiences.Hiscurrentresearchinterestsincludesoftwaredevelopmentmethodandsoftwareengineeringprocessing.In2002,heputforwardthefullprocesodelingmethodbasedUML.In2004,hepublishedthebook“theWholeModelingprocessofsoftwareengineer”

交换编程――极限编程的延伸实践参考属性评定
有关论文范文主题研究: 关于软件工程的论文范例 大学生适用: 高校大学论文、本科论文
相关参考文献下载数量: 56 写作解决问题: 怎么写
毕业论文开题报告: 论文模板、论文题目 职称论文适用: 技师论文、初级职称
所属大学生专业类别: 怎么写 论文题目推荐度: 优质选题

袁培江,1974年,博士,硕士生导师,主要研究方向是机器人,软件工程和机器视觉,已发表文章30余篇.

peijiangyuan,bornin1974,PhD,Hisresearchinterestsincluderobotics,softwareengineeringandputervision.Hehaspublishedmorethan30papersinInternationaljournalsandconferences.