本文是个人总结摘记,部分文字摘自其他大神博文等,如有雷同,未列参考文献,请见谅;
结对编程的开发速度通常小于简单地将一个人的开发速度乘以2,但它依然能创造价值:知识的共享,代码质量的提高,缺陷率的降低。
定义
- Pair就是两个人同时工作在同一个 Story 上,一起讨论 Story 的解决方案,并编写代码实现功能,一个人敲键盘,一个人看屏幕,穿插着进行。Pair 的小伙伴在快速敲击键盘的时候会伴随一些交流,并时不时停下来讨论说笑片刻,亦或是在欣赏一下自己漂亮的代码。
形式
- 搭档的选择上,两个人的技能和经验最好是相当的,这样就不至于一个人成为被教育的对象,而另一个人成为键霸。
- 有新人加入时,需要一个经验较丰富的老人 Pair,最好是有良好 Coach 技能的老人,老人尽量只提供思路启发,并让新人多思考和动手实现。
- 经验相当的 Pair 时,可以一起讨论解决方案,并达成一致,然后一个人写测试,另一个人编写代码通过测试,两人同时保持 focus。
- 定期更换 Pair,粒度可以控制在以一个 Story 完成为节点。大一点的 Story 可以 keep 住一个人不动,另一个人进行更换。
- 遇到技术阻碍时,分头并行寻找解决方案,并最终一起决定采取什么方案。
- 当两个人对实现细节的优劣拿捏不定时,邀请团队经验丰富的老人做出建议参考。
好处
- Pair 将本来可以并行工作的两个人聚焦在一件事情上,表面上是在降低生产力,实际上它确实是有一定的成本的。而这种付出并不会打水漂,最明显的好处是能够最大化知识的共享(尤其是更换 pair 的场景下), 包括业务知识的共享、技术方案共享、解决问题思路的共享,这一点尤其体现在团队有新人融入的时候,通过 Pair 能够快速带领新人成长起来,提高整个团队的战斗力。
- 另一方面可以提高代码质量,Pair 实际上是两个人一直在不停的做 Code Review ,两个人的思维碰撞能够避免很多代码小聪明和不好的编码习惯。
- 有些时候,项目进度的紧张,Pair 并不会这么理想的被落实,团队可以进行灵活的调整。如果 Pair 的时间减少了,可以通过加长 Code Review 的时间来做一些弥补。