Pair Programming(结对编程)

**

Pair Programming(结对编程)

**

  1. 定义:

Pair Programming是一个编程模式(Programming pattern)。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试例子,一起编码,一起单元测试,一起整合测试(Integration Test),一起写文档等。基本上所有的开发环节都一齐肩并肩地,平等地,互补地进行开发工作。

  1. 角色如下:

Driver The one who types
Navigator The one who watches the back
角色可以互换的

  1. 为什么要Pair Programming?

企业管理层次:
Pairs更有效的交流,相互学习和传递经验
Pair Programming具备更高的效费比(cost-effective)
Pair Programming能更好的处理人员流动
开发层次:
Pairs能提供更好的设计质量和代码质量
Pairs更强的问题解决能力
开发人员自身:
Pairs一起工作能带来更多的信心
Pairs一起工作能带来更高的满足感(程序员,用户和管理层)

  1. 为什么要Pair Programming 不间断的Code Review?

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。

  1. 为什么要Pair Programming 编程方式?

• 避免cow boy式的编程
• 好代码的衡量标准:可读性和可维护性
• 硬件设备价格的下降和速度的提升,使得代码效率不是考虑的重点(对大多数的商业应用)。对大部分的商业项目来说,更主要的顾虑是成本。而成本中人工占最大的比例。好的代码可以减少修改的成本。
• Pair Programming的互相督促可以提高代码的可读性。

  1. 为什么要Pair Programming Teamwork?

• Pair是一个最小单位的Team,而任何人都是工作在这样一个Team中。Developer的言行都会影响到其他的Developer( Partner),也受到其他Developer的影响。
• Pair Programming避免了“我的Code”,使得代码的责任不属于某个人,而是属于一个Pair和整个Team,从而做到Collective Code Ownership,也避免个人英雄主义。
迫使程序员必须频繁的交流,增进知识经验的交流(Cross-Training)。

  1. 为什么要Pair Programming 以人为本?

• 同伴的潜在压力( 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

  1. 如何Pair Programming?

• 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一起加班

  1. 没有Pair Programming就没有XP

• Pair Programming是XP所有的Practices中最被争议和被认为是最难接受。
• Pair Programming是获得XP最大价值的关键。
• 没有Pair Programming,无法实现有效的Continuous Code Review,代码质量下降。
• 没有Peer Pressure,流程的执行很容易出现偏差。
• 没有Pair Programming,Communication很容易弱化,进而影响Team work。
• Pair Programming象XP流程中的粘合剂,把各个环节连接起来实现最大的价值。

  1. XP Without Pair Programming?

这是引进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的网路延迟
• 工作时段的约定

  1. Pair Programming和Solo Programming的比较

• Pair Programming能用较少的时间生产更高质量的代码。
• Pair Programming的学生们认为自己比一个人的时候更勤奋和更聪明的工作,因为不想让自己的partner失望。
• Pair Programming的学生认为自己比一个人的时候更专著,紧凑和有纪律的工作,而且是持续的(因为来自Partner的Pair-Pressure)。而独立工作的学生也可以专著和紧凑的工作,但往往不持续。
• Pair Programming的学生对自己的工作更有信心和成就感。
• Pair Programming的学生觉得工作很愉快,很愿意很partner一起工作。
• 在紧张时间安排和繁重的工作压力下,独自工作的学生很容易蜕变为没有纪律的Programmer。

你可能感兴趣的:(软件方法与过程)