极限编程-结对编程

许多从事软件开发工作的人都听说过结对编程的实践,但是在业界仍然很少采用结对编程,为什么呢?今天我们一起聊聊结对编程。
提起结对编程很多人第一反应是这不适合我们、这不适合我们的国情、司情等等一堆拒绝的理由,但结对编程实际上又是一个很多团队已经不同程度在用的实践,它引起大量争议的原因之一在于他这个名字:给人感觉好像一个人的活现在要两个人干了一样。另外一个原因是它的好处不是立即显而易见的,它需要在中期和长期中会获得更多回报。
09年我作为研发经理带一个研发团队,这期间团队新来的一个研发上手比较慢,团队其他人很有意见,觉得他影响了团队交付。于是我固定每天下班后陪他1-2小时,看着他写代码,有不合理的地方马上指出来。遇到他想不明白的时候直接接过键盘来写出代码给他看,这个过程持续了近两周的时间,这个过程中这位同事取得了非常快的进步,以至于在之后直接接替了我的大部分日常开发工作,我们也成了最好的朋友。
学习敏捷后发现这个过程其实就是结对工作价值的具体体现,只是我们那时没有那么刻意,没有形成机制。可以想象如果把这种实践形成一种文化和习惯对团队整体能力和水平提升、知识传递带来的价值会有多大。
什么是结对编程
结对编程实践可以看做一种代码评审方式:极限编程实践者认为既然代码评审是有意义的,那推到极致就是即时评审,这也是结对编程提出的初衷。结对过程让我们看起来更像一个团队 ,我们在一起解决问题,一起成长。结对是成员之间共享知识,避免形成知识孤岛的最佳方法。很多实践结对编程的团队报告说,结对可以显著减少错误并提高代码和设计质量。
如何实践

结对编程推荐的实践方式是:

两个人共享一台电脑 一个屏幕 一个键盘和鼠标,其中一个人作为”驾驶员“,另一个人作为”领航员“,驾驶员负责操作键盘和鼠标,领航员则眼观六路随时发现问题并提出建议。

还有一种基于TDD的结对方式是一个人写测试代码 另一个人写实现代码让测试通过,这种结对方式有时被称作乒乓。

实际实践过程中可以很灵活,一般也没有明确的角色划分,两个人一起合作,不用事先准备,平等的共享鼠标和键盘。结对过程是非常耗费精力的,一般结对时间很短,以十几分钟或一两个小时居多 ,极少能达到一整天的情况。一般建议资深程序员与初级程序员结对次数应该超过与其他资深程序员的结对次数。具备特殊技能的程序员应该经常与不具备该技能的程序员的一起结对工作。
结对的目标之一是帮助团队传播和交换知识,而不是使知识集中在少数人手里。而且需要注意的是虽然叫结对编程,但是实际上并没有限制,实际操作时很多时候为了解决一个难题可能是更多的人都会参与其中。
现实中许多团队是由程序员自行决定是否结对。在程序员认为必要的时候结对。
结对的成本
很多人反对结对的原因是觉得 浪费了资源,让两个人一起解决同一个问题,那岂不是要花双倍的成本了?事实上即使是两个人去解决同一个问题也不会使解决问题的工作量加倍。它确实付出了一些额外代价,研究表明采用结对编程的团队会比不采用结对编程的团队多耗费15%的成本。换句话说会需要115名程序员来完成不接对时100名程序员的工作。然而我们必须还要考虑到交叉培训对于知识交流和紧密合作的好处,这些收益不容易被量化,但可能会非常重要。

来源:敏捷工坊,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/128453

侵权联系 投诉举报
返回顶部