课件

2.6 结对编程实践.pdf

结对编程

前面我们讲过代码复审是一种用以确认方案设计和检查代码缺陷的有效手段,那么为什么我们不把这种好的方法用到极致呢?

image.png
结对编程就是把编程和复审进行有机的结合,它是敏捷开发方法中极限编程所大力提倡的一种实践,简单的说就是两名程序员并排坐在一台电脑前一起工作,他们一起分析问题、一起设计程序、一起写测试用例、一起编程实现、一起做单元测试和集成测试、一起写文档,这种方法有助于提升代码的质量、提高开发效率,同时还可以促进团队能力的提升和知识的传播。

image.png
在现实生活中类似的搭档关系比比皆是,例如越野赛车里面的驾驶员和领航员,飞机上的驾驶和副驾驶,战斗机编组里面的长机和僚机,这些任务都有一个共同的特点,就是他们都是在高速度中完成任务,而且任务有比较高的技术要求,任务失败的代价都很高。

image.png
结对编程也有两个角色,一个是驾驶员负责用键盘编写程序,另一个是领航员起到领航和提醒的作用。其中驾驶员的主要任务是对程序进行设计、编写代码并进行单元测试,领航员的任务是检查驾驶员的工作、考虑单元测试的覆盖程度以及代码是否需要修改完善,同时帮助驾驶员解决具体的技术问题比如查询API手册等。在编程过程中两个人的角色是轮流互换的,结对编程不仅仅涉及编程活动,也包括分析、设计、测试等全程活动。

image.png
结对编程需要两个人不断地会话和讨论,驾驶员需要不停地向伙伴解释自己的做法和想法,如果发现自己的伙伴不能够投入就需要及时的沟通,领航员需要时时提出自己的疑问和意见,指出可能存在的问题,因此口渴的指数是核实伙伴交流程度的一个考核标准。

image.png
在结对编程过程中,领航员来控制开发的时间,在合适的时候提出来休息,或者提议交换角色,当然驾驶员感到累的时候也可以主动要求换角色。领航员需要注意的是要给驾驶员一点时间去发现和找到自己的错误,不要让对方觉得你很烦。

常用的资料、规范以及书籍都应该放在手边,这样方便领航员快速的查阅以提供帮助。在结对开始之前双方要协调沟通,互相通告希望对方关注些什么,自己喜欢做什么等。

要主动地参与,任何的一个任务都是共同的责任,没有你的我的这样的代码,只有我们共同的代码。要坚持代码的标淮和流程的规范,要注意倾听伙伴的意见。

image.png
有效的结对编程并不是一天就能做到的,它是一个相互学习、相互磨合的渐进过程,开发人员需要一定的时间来适应这种新的开发模式,刚一开始的时候,结对编程有可能不如单独开发效率高,但是在度过了学习阶段之后,结对编程的开发质量和开发时间,通常会比两个人单独开发有明显的改善。

需要注意的是,并不是所有的项目都适合结对编程,下面的一些情况不适合结对编程:

  • 对于探索阶段的项目,一个人单独钻研更为有效;
  • 在后期维护时如果维护的技术含量不高,只需要做有效的复审就可以;
  • 如果验证测试需要运行很长时间,那么两个人在那儿等结果确实也是浪费时间;
  • 团队成员在多个项目中工作时难以保证足够的结对编程时间,这样成员就经常会需要等待,反而影响效率;
  • 结对编程的关键是如何最大限度地发挥领航员的作用,如果领航的用处不大也就没有必要结对了;
  • 另外也不是所有的人都适合结对编程,像不合格的程序员、不合群的程序员以及抵触结对编程的程序员,都很难适合这种工作方式;