一双编程的角色讲义.PPT_第1页
一双编程的角色讲义.PPT_第2页
一双编程的角色讲义.PPT_第3页
一双编程的角色讲义.PPT_第4页
一双编程的角色讲义.PPT_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,PairProgramming(成对编程),黄海波&陶万山Withcontributionby劳晖,2,什么是PairProgramming,PairProgramming是一个编程模式(Programmingpattern)。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试例子,一起编码,一起单元测试,一起整合测试(IntegrationTest),一起写文档等。基本上所有的开发环节都一齐肩并肩地,平等地,互补地进行开发工作。其它领域的“PairWorking”:越野赛车驾驶飞机,3,PairProgramming的角色(Role),DriverTheonewhotypesNavigatorTheonewhowatchestheback角色可以互换的,4,疑问:一个程序两个人写是不是一种浪费(可是两份工资,双倍资源哦)?编程从来是一个人的活动。学校里这么教的,一直以来也是做么做的。我不喜欢被人盯着工作,这样我不自在,无法工作。这个笨家伙老是问问题,他/她不会看书么?我都无法专心工作了。另一方面:PairProgramming被很多的大师级程序员推崇;不少大学都展开对PairProgramming的研究,并得到正面的结论;很多尝试过的Developer都开始喜欢PairProgramming。,PairProgramming的疑问,5,PairProgramming和SoloProgramming的比较,一些研究数据:1999年,UniversityofUath.两组学生,一组独自工作,一组PairProgramming。(由助教预先设计和开发了TestCases),6,PairProgramming的历史,1995年,LarryConstantine在他的专栏中第一次提到了在他在P.J.Plaugherssoftwarecompany,Whitesmiths,Ltd观察到一个现象:CollaborativeProgramming“两个程序员一起工作,可以比以往更快的交出完成并经过测试的代码,而且这些代码几乎是没有Bug的。”CollaborativeSoftwareProcess(相对PSP)1996年,KentBeck,WardCunningham和RonJeffries一起提出了ExtremeProgramming(XP),其中吸收了CollaborativeProgramming,并称为PairProgramming。PairProgramming是XP的一个keypractice,也是XP成功的关键。随着XP在世界范围内被采用和练习,PairProgramming开始被接受。,7,为什么要PairProgramming,“TheHumaneyehasanalmostinfinitecapabilityfornotseeingwhatitdoesnotwanttoseeProgrammers,iflefttotheirowndevices,willignorethemostglaringerrorsintheiroutput-errorsthatanyoneelsecanseeinaninstant.”-GeraldWeinberg“Knowledgeiscommonlysociallyconstructedthroughcollaborativeeffortstowardsharedobjectivesorbydialoguesandchallengesbroughtaboutbydifferenceinpersonsperspective”-Salomon“三个臭皮匠,胜过一个诸葛亮”-?,8,为什么要PairProgramming,企业管理层次:Pairs更有效的交流,相互学习和传递经验PairProgramming具备更高的效费比(cost-effective)PairProgramming能更好的处理人员流动开发层次:Pairs能提供更好的设计质量和代码质量Pairs更强的问题解决能力开发人员自身:Pairs一起工作能带来更多的信心Pairs一起工作能带来更高的满足感(程序员,用户和管理层),9,为什么要PairProgramming不间断的CodeReview,CodeReview的目的是不断的调整设计和编码质量的过程,也是为了及时发现问题和解决问题。避免把风险延后到QA阶段或Production阶段。开发中的Review主要包括:1)DesignReview2)CodeReview3)TestReview4)DocumentReview,10,为什么要PairProgramming不间断的CodeReview,1.PeerCodeReview,即程序员之间的互相Review缺乏DesignReview不能持久,定时CodeReview对需求和设计的不了解导致无法实现有效的Review,2.TeamCodeReview什么时候开会做Review?不可能Team天天开会无法对所有的设计和Code进行Review面子问题效率低,传统开发过程的Review(例如印度的InfoSys公司)的问题:,11,为什么要PairProgramming不间断的CodeReview,PairProgramming提供不间断的Designreview,UnitTestReview,CodeReview,DocumentReview,避免了效果差的TeamCodeReview,也比抽查式的PeerCodeReview有更好的质量。(CMMLevel3)PairProgramming中,任何一段代码都至少被两双眼睛看过,两个脑袋思考过。结合Collectivecodeownership和小的Task(SmallEngineeringTask),代码被不断的Review。,12,为什么要PairProgramming编程方式,避免cowboy式的编程好代码的衡量标准:可读性和可维护性硬件设备价格的下降和速度的提升,使得代码效率不是考虑的重点(对大多数的商业应用)。对大部分的商业项目来说,更主要的顾虑是成本。而成本中人工占最大的比例。好的代码可以减少修改的成本。PairProgramming的互相督促可以提高代码的可读性。,13,Pair是一个最小单位的Team,而任何人都是工作在这样一个Team中。Developer的言行都会影响到其他的Developer(Partner),也受到其他Developer的影响。PairProgramming避免了“我的Code”,使得代码的责任不属于某个人,而是属于一个Pair和整个Team,从而做到CollectiveCodeOwnership,也避免个人英雄主义。迫使程序员必须频繁的交流,增进知识经验的交流(Cross-Training)。,为什么要PairProgrammingTeamwork,14,为什么要PairProgramming以人为本,同伴的潜在压力(PeerPressure)。PairProgramming的过程也是一个互相督促的过程。由于这种督促的压力,使得程序员更认真的工作。每个人每天的有效工作时段不超过3-4个小时。PairProgramming中Driver和Navigator的互换可以让程序员轮流工作,从而避免出现过度思考而导致观察力和判断力出现偏差。潜意识的有利竞争。当人在一个团队中工作,总是下意识的努力展现自己的优点。工作及时得到同伴的肯定,自信心和成就感(Self-Satisfaction)增强。觉得工作是一件愉快(Enjoyable)的事情。,15,什么样的人不适合做PairProgramming,太过自负不能容忍别人的意见我总是对的我吃盐多过你吃米,太过自卑没主见没责任心,16,什么样的人适合做PairProgramming,ExtremeProgramming对实施的程序员提出了更高的要求。这种要求不是技术水平,也不是学历水平也不是工作经验。这种要求是对一个人的心智,道德,修养的更高要求。程序员的四怕:1)怕自己看上去傻2)怕被认为是没用的3)怕自己变的不重要(过时)4)怕自己不够好PairProgramming中,编码不再是私人的工作,而是一种公开的“表演”。程序员的代码,工作方式,技术水平都变得公开和透明。,17,XPer的素质,一个XPer应该具备这样一些基本素质:诚实,公正,开明,勇敢和谦卑!在这些素质的基础之上,才是对技术水平,能力和天分等的要求。诚实公正开明勇气谦卑具备这些素质才能克服“四怕”,才能成为一个成熟和专业的Developer。,18,如何PairProgramming,Driver写设计文档(Classdiagram等),进行编码(UnitTestandBusinessObject)等XP开发流程。Navigator审阅Driver的文档、Driver对编码等开发流程的执行;考虑UnitTest的覆盖程度;是否需要和如何Refactoring;帮助Driver解决具体的技术问题。Driver和Navigator不断轮换角色,不要连续工作超过一小时,每一小时休息15分钟。Navigator要控制开发时间。主动参与虽然每个EngineeringTask都有owner,但不能一旁观者的心态来做。任何一个Task都首先是两个人的责任,也是所有人的责任。没有“我的Code”、”你的Code”或“她的Code”,只有“我们的Code”。,19,如何PairProgramming,只有水平上的差距,没有级别上的差异。一个Pair,尽管可能大家的级别资历不同,但不管在分析,设计或编码,双方都拥有平等的决策权利。Pairs之间互换Partner。每个Task都应该和不同的Developer配对。每隔一天,甚至是半天,互换Partners。但Task的owner因该继续留该Task的Pair中。如果Pair中的一人请假,另一人应尽量不要写ProductionCode。Pair一起加班,20,没有PairProgramming就没有XP,PairProgramming是XP所有的Practices中最被争议和被认为是最难接受。PairProgramming是获得XP最大价值的关键。没有PairProgramming,无法实现有效的ContinuousCodeReview,代码质量下降。没有PeerPressure,流程的执行很容易出现偏差。没有PairProgramming,Communication很容易弱化,进而影响Teamwork。PairProgramming象XP流程中的粘合剂,把各个环节连接起来实现最大的价值。,21,XPWithoutPairProgramming?,这是引进XP时最难被接受的规则。但如果在采用其它XP的惯例和规则时,抛弃PairProgramming,那么会面对以下问题:如何进行有效的DesignReview如何进行有效的CodeReview如何保证代码质量如何保证流程的执行如何增进Communication如何进行Cross-Training如何增强Teamwork,22,PairProgramming和OpenSource,OpenSource现象:OpenSourceProject的代码质量比很多的商业软件(项目)都好。和PairProgramming的共性:有效的CodeReviewCollectivecodeownership,23,DistributedPairProgramming,分布式的PairProgramming:两个Programmers身处不同的物理位置,通过Sharing软件来实现PairProgramming。需要Sharing软件能提供桌面共享,文字交谈,语音交谈,甚至是视频交流。目前这种方法还没有被认可,主要出现在学校的关于XP的研究项目中。面临的问题:Internet的网路延迟工作时段的约定,24,PairProgramming和SoloProgramming的比较,虽然PairProgramming的学生在刚开始的阶段比独自工作的学生花在同样Task的时间较多,但很快PairProgramming的学生的时间开始大幅度的下降。而独立工作的学生需要花费比Pairs更多的时间来达到接近的代码质量。,25,PairProgramming和SoloProgramming的比较,比较研究项目后的问卷调查发现:PairProgramming能用较少的时间生产更高质量的代码。PairProgramming的学生们认为自己比一个人的时候更勤奋和更聪明的工作,因为不想让自己的partner失望。PairProgramming的学生认为自己比一个人的时候更专著,紧凑和由纪律的工作,而且是持续的(因为来自Partner的Pair-Pressure)。而独立工作的学生也可以专著和紧凑的工作,但往往不持续。PairProgramming的学生对自己的工作更有信心和成就感。PairProgramming的学生觉得工作很愉快,很愿意很partner一起工作。在紧张时间安排和繁重的工作压力下,独自工作的学生很容易蜕变为没有纪律的Programmer。,26,PairProgramming是个渐进的过程,有效率的PairProgramming不是一天就能做到的。PairProgramming是一个相互学习,相互磨合的一个渐进过程。Developers需要时间来适应这种新的开发模式。刚开始的PairProgramming很可能不比SoloProgr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论