首页 > 范文大全 > 正文

XP结对编程探究

开篇:润墨网以专业的文秘视角,为您筛选了一篇XP结对编程探究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:结对编程(Pair Programming)是极限编程(Extreme Programming,简称xp)的十二个实践之一。它指的是两个软件开发人员共用一台计算机,其中一个人负责具体细节工作,而另一个人关注整体,但这两个人的角色可以随时互换。这是一种轻量、高效、低风险、柔性、可预测、科学而充满乐趣的软件开发方式。结对编程可改进设计质量、减少程序缺陷、降低人员风险、提高技术技能和团队合作精神。

关键词:软件工程;敏捷方法;极限编程;结对编程

中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)24-7058-02

Research of Pair Programming Based on Extreme Programming

LI Yun-chao

(South-Central University For Nationalities, Wuhan 430074, China)

Abstract: Pair programming (Pair Programming) is the Extreme Programming (Extreme Programming, referred to as XP), one of the 12 practice. It means that two software developers share a computer, a person responsible for one of the specific details of the work, and the other concerned with the overall, they can swap roles any time. This is a lightweight, high efficiency, low-risk, flexible, predictable, scientific and fun way of software development. Pair Programming can bring economic profit, improve design quality, reduce defects, decrease staffing risk, enhance technical skills and improve team communications.

Key words: software engineering; agile methods; extreme programming; pair programming

目前,我国软件行业还处在初级阶段,传统的软件工程技术很难在中小软件公司中发挥作用,然而极限编程(Extreme Programming,简称XP)技术的出现,使中小软件公司的软件开发有了新的突破。XP是一个轻量级的、灵巧的软件开发方法,同时它也是一个非常严谨和周密的方法。

XP中非常重要的实践之一是结对编程(Pair-Programming)。指的是两位程序员并肩坐在同一台电脑前,共同探讨设计方案、共同设计算法、共同编写程序代码、共同完成各种测试。简单地说就是两个人坐在同一台计算机前面,一个称为驾驶者(Driver),负责代码的键入;另外一个称为领航员(Navigator),负责其他工作,包括随时观察驾驶员的工作情况,发现并纠正其操作性和策略性失误等。

1 结对编程分析

1.1 结对编程优点分析

1.1.1 减少风险

风险会使大多数团队停滞不前,减少风险的最佳方法是确保团队中的每个人都完全熟悉系统的所有部件以及对系统的所有变更。因此,技术讲解和设计文档很有用,但对于大多数快节奏的项目,它们并不能很好且迅速地传播知识。研究表明传播知识最有效的方法是让知道代码的人与不知道代码的人一起解决问题。

1.1.2 使团队生产效率更高

1+1>2。首先,一个人的编程,平均很难实现1>80%×1的工作效力。但是在和同伴一起工作时,必须保持思维一直高度集中,所以平均都可以达到1>80%×1的个人效力,一个人有了想法,首先要表达出来,让自己的同伴理解,经过深刻的讨论,一致认可之后才开始编写代码。编写代码时至少有一个人一直在复查代码,使得出错几率就降低,减少了bug的产生,对代码的质量起关键作用。另外,由于两个人的思想汇集,能创造了很多新编程算法或结构重用等。

1.1.3 Pair 可以打造出最佳的合作团队

通过结对,团队可以在最短的时间内完成磨合。Pair很好的促进了团队的沟通交流,经常一起合作Pair的员工,彼此了解、熟悉,很多都是工作和生活上的好友。在这样的团队里,大家很乐意互相协助,一起分享知识、分享快乐,打造出最佳的合作团队。

1.2 结对编程遇到的问题分析

1.2.1 由于人员的变动,来了新成员

在这种情况下,前期确实会对其搭档产生一定的影响,但是磨刀不误砍柴工,通过结队编程,可以最快的使新成员进入状态,通过后期的高效工作完全可以弥补前期的消极影响。

1.2.2 后面坐着的人跟不上写代码的人的思路,或不习惯写代码人的代码风格

结队编程不仅仅是一起写代码,在写代码之前更需要一起对需求进行探讨, 一起讨论设计方案,达成共识之后再一起写测试用例,一起编码,一起测试。但在开发过程中要严格遵循事先定好的代码规范。这样才能实现XP强调的“代码共同拥有”。

1.2.3“我的搭档太差劲”等因盲目自大导致的问题

这是一个极其严重的问题,整个团队的心理状态和团结精神都处于极大的危险之中。而最好的解决办法就是安排那位“自大狂”与几位公认的好搭档合作,让他感受一下结对编程技术的价值和高效率,使他能由此认识到结对编程的好处,以便以后全身心地投入到工作中。

1.2.4“我的搭档太聪明”等因盲目自卑而导致的问题

这种自卑问题相当容易被发现。此时可以让那位缺乏自信心的成员担任驾驶员角色,因为驾驶员必须全力集中在手里的工作上,这样可以让那位缺乏自信心的成员更主动一些,并安排一位个人技能良好的团队成员做这种人的领航员,领航员可以赞扬驾驶员的每一个好主意和每一个好做法,有助于帮助他树立自信心。

1.2.5 什么情况下结对编程行不通

1) 造成结对编程无法正常工作的一些情况:

2) 不情愿的配合;

3) 拒绝别人的意见,甚至攻击对方;

4) 小心翼翼有意见不敢提;

5) 怕别人觉得自己笨不敢问问题;

当然这些问题跟管理以及个人性格有关系,最好的方式就是不让他们结对,或者让他们跟别的人结对。

1.2.6 Pair团队做同一工作的效率问题

表1为来自某印度技术公司的项目统计数据。

1.3 结对编程的几条准则

1.3.1 用编码规范来支持结对编程

如果两个人整天把时间浪费在争论代码风格的问题上,那么结对编程就不可能发挥它的威力,应该尝试对风格进行标准化。

1.3.2 不要让结对编程变成旁观

不掌握键盘的那个人应该主动参与到编程当中,他应该分析代码,提前思考接下来的代码应该做些什么,对设计进行评估,并对如何测试代码做出计划。

1.3.3 有规律地对结对人员和分配的工作任务进行轮换

结对编程的好处在于能够让不同的人熟悉系统的不同部分,有规律地进行轮换有助于知识的互相转播―有些专家建议尽可能经常进行人员轮换,甚至每天进行。

1.3.4 鼓励双方跟上对方的步伐

要是其中一个人相对走得太快的话,那就会大大限制了其结对搭档的作用,速度太快的人需要放慢步伐。否则这对组合应当被拆开,然后和其他人重新组合。

1.3.5 搭档间在设计、方向、技术等发面意见不合发生冲突

此时尽量由领航员把引起冲突的问题记在一张卡片上,过一会(如半小时后)再重新探讨,这样做可以暂不干扰驾驶员的思路,如果两位搭档间的意见始终不能统一,把问题上交给团队的队长/教练/经理去评判。

2 结对编程方案改进

1) 编程三人组。一个人守护键盘,一个人守着“黑板”,最后一个人则代表用户在“大声地思考着”。2) 两位搭档来自不同的学科。编程搭档不必非得由两位代码开发人员组成。3) 尽量给驾驶员留时间去发现和纠正他自己的错误,尽量适应自己的搭档。4) 避免新手组合。用专家―中级程序员、专家―新手组合方式,两个人中至少一个人有结对经验。5) 项目开发过程中要营造一个可以能畅所欲言、和谐平等、相对民主的开发环境,一种相互交流、相互研究、共享代码、共享知识的氛围,创建一种共同成长、开放共享的学习型组织。

3 结对编程实践

如表2,表3所示:

1) 需求分析中,需求调研和需求分析进行轮流交换,轮流交换至少是三个以上的人进行互换,而不是两两互换;2) 概要设计中,需求分析到概要设计也进行轮流交换;3) 详细设计中,概要设计到详细设计再进行一次轮流交换;4) 编码实施启动后,详细设计到编码的交换采用两两交换,这个时候最好不要再采用轮流交换。

参考文献:

[1] Williams L,Kessler R.Pair Programming Illuminated[M].北京:机械工业出版社,2004.

[2] Marchesi M,Succi G,Wells D,et al.Extreme Programming Perspectives[M].北京:电子工业出版社,2004.

[3] 白慧冬.交换编程――结对编程的延伸实践[J].程序员,2006(12):78-81.

[4] 谢国波,刘竹松,陈平华.结对编程在计算机专业学生编程实践的应用[J].广东工业大学学报:社会科学版,2008,8(B07):65-66.