本文共 4108 字,大约阅读时间需要 13 分钟。
**
Pair Programming(结对编程)
**
Pair Programming是一个编程模式(Programming pattern)。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试例子,一起编码,一起单元测试,一起整合测试(Integration Test),一起写文档等。基本上所有的开发环节都一齐肩并肩地,平等地,互补地进行开发工作。
Driver The one who types
Navigator The one who watches the back 角色可以互换的企业管理层次:
Pairs更有效的交流,相互学习和传递经验 Pair Programming具备更高的效费比(cost-effective) Pair Programming能更好的处理人员流动 开发层次: Pairs能提供更好的设计质量和代码质量 Pairs更强的问题解决能力 开发人员自身: Pairs一起工作能带来更多的信心 Pairs一起工作能带来更高的满足感(程序员,用户和管理层)Code Review的目的是不断的调整设计和编码质量的过程,也是为了及时发现问题和解决问题。避免把风险延后到QA阶段或Production阶段。
1、开发中的Review主要包括: 1) Design Review 2) Code Review 3) Test Review 4) Document Review 传统开发过程的Review的问题: 2.1、 Peer Code Review,即程序员之间的互相Review • 缺乏Design Review • 不能持久,定时Code Review • 对需求和设计的不了解导致无法实现有效的Review 2.2、 Team Code Review • 什么时候开会做Review?不可能Team天天开会 • 无法对所有的设计和Code进行Review • 面子问题 • 效率低 2.3、Pair Programming提供不间断的Design review,Unit Test Review,Code Review,Document Review,避免了效果差的Team Code Review,也比抽查式的Peer Code Review有更好的质量。 2.4、Pair Programming中,结合Collective code ownership和小的Task (Small Engineering Task),代码被不断的Review。• 避免cow boy式的编程
• 好代码的衡量标准:可读性和可维护性 • 硬件设备价格的下降和速度的提升,使得代码效率不是考虑的重点(对大多数的商业应用)。对大部分的商业项目来说,更主要的顾虑是成本。而成本中人工占最大的比例。好的代码可以减少修改的成本。 • Pair Programming的互相督促可以提高代码的可读性。• Pair是一个最小单位的Team,而任何人都是工作在这样一个Team中。Developer的言行都会影响到其他的Developer( Partner),也受到其他Developer的影响。
• Pair Programming避免了“我的Code”,使得代码的责任不属于某个人,而是属于一个Pair和整个Team,从而做到Collective Code Ownership,也避免个人英雄主义。 迫使程序员必须频繁的交流,增进知识经验的交流(Cross-Training)。• 同伴的潜在压力( Peer Pressure )。Pair Programming的过程也是一个互相督促的过程。由于这种督促的压力,使得程序员更认真的工作。
• 每个人每天的有效工作时段不超过3-4个小时。 • Pair Programming中Driver和Navigator的互换可以让程序员轮流工作,从而避免出现过度思考而导致观察力和判断力出现偏差。 • 潜意识的有利竞争。当人在一个团队中工作,总是下意识的努力展现自己的优点。 • 工作及时得到同伴的肯定,自信心和成就感(Self-Satisfaction)增强。 • 觉得工作是一件愉快( Enjoyable )的事情。 人员要求: 对于参与Pair Programming的开发人员提出的要求是:不要太过自负(不能容忍别人的意见),太过自卑(没有主见) Extreme Programming对实施的程序员提出了更高的要求。这种要求不是技术水平,也不是学历水平也不是工作经验。这种要求是对一个人的心智,道德,修养的更高要求。 程序员的四怕: 1) 怕自己看上去傻 2) 怕被认为是没用的 3) 怕自己变的不重要(过时) 4) 怕自己不够好 Pair Programming中,编码不再是私人的工作,而是一种公开的“表演”。程序员的代码,工作方式,技术水平都变得公开和透明。 一个XPer应该具备这样一些基本素质:诚实,公正,开明,勇敢和谦卑!在这些素质的基础之上,才是对技术水平,能力和天分等的要求。具备这些素质才能克服“四怕”,才能成为一个成熟和专业的Developer• Driver – 写设计文档(Class diagram等),进行编码(Unit Test and Business Object)等XP开发流程。
• Navigator – 审阅Driver的文档、Driver对编码等开发流程的执行;考虑Unit Test的覆盖程度;是否需要和如何Refactoring;帮助Driver解决具体的技术问题。 • Driver和Navigator不断轮换角色,不要连续工作超过一小时,每一小时休息15分钟。Navigator要控制开发时间。 • 主动参与 – 虽然每个Engineering Task都有owner,但不能以旁观者的心态来做。这对集体责任感有一定要求。任何一个Task都首先是两个人的责任,也是所有人的责任。没有“我的Code”、”你的Code”或“她的Code”,只有“我们的Code”。 • 只有水平上的差距,没有级别上的差异。一个Pair,尽管可能大家的级别资历不同,但不管在分析,设计或编码,双方都拥有平等的决策权利。 • Pairs之间互换Partner。每个Task都应该和不同的Developer配对。 • 每隔一天,甚至是半天,互换Partners。但Task的owner因该继续留该Task的Pair中。 • 如果Pair中的一人请假,另一人应尽量不要写Production Code。 • Pair一起加班• Pair Programming是XP所有的Practices中最被争议和被认为是最难接受。
• Pair Programming是获得XP最大价值的关键。 • 没有Pair Programming,无法实现有效的Continuous Code Review,代码质量下降。 • 没有Peer Pressure,流程的执行很容易出现偏差。 • 没有Pair Programming,Communication很容易弱化,进而影响Team work。 • Pair Programming象XP流程中的粘合剂,把各个环节连接起来实现最大的价值。这是引进XP时最难被接受的规则。但如果在采用其它XP的惯例和规则时,抛弃Pair Programming,那么会面对以下问题:
• 如何进行有效的Design Review • 如何进行有效的Code Review • 如何保证代码质量 • 如何保证流程的执行 • 如何增进Communication • 如何进行Cross-Training • 如何增强Teamwork Pair Programming和Open Source共性 • 有效的Code Review • Collective code ownership Distributed Pair Programming 分布式的Pair Programming: • 两个Programmers身处不同的物理位置,通过Sharing 软件来实现Pair Programming。需要Sharing软件能提供 桌面共享,文字交谈,语音交谈,甚至是视频交流。 • 目前这种方法还没有被认可,主要出现在学校的关于XP的研究项目中 。 面临的问题: • Internet的网路延迟 • 工作时段的约定• Pair Programming能用较少的时间生产更高质量的代码。
• Pair Programming的学生们认为自己比一个人的时候更勤奋和更聪明的工作,因为不想让自己的partner失望。 • Pair Programming的学生认为自己比一个人的时候更专著,紧凑和有纪律的工作,而且是持续的(因为来自Partner的Pair-Pressure)。而独立工作的学生也可以专著和紧凑的工作,但往往不持续。 • Pair Programming的学生对自己的工作更有信心和成就感。 • Pair Programming的学生觉得工作很愉快,很愿意很partner一起工作。 • 在紧张时间安排和繁重的工作压力下,独自工作的学生很容易蜕变为没有纪律的Programmer。转载地址:http://gitmb.baihongyu.com/