[部分从 移山之道 节选而来]
最早的结对编程 (Pair Programming)
结对编程随着敏捷开发思想的兴起而广为人知, 然而这种实践早已有之。 在 1987年, Intuit 公司 (当时只是一个刚刚创业的个人财务管理软件公司)向顾客宣布在 4 月份提供新版本的软件 (4月15日是美国 税的截止日期)。 但到了 3 月份的时候, 公司仅有的两个技术人员发现项目还是大大落后于预期, 于是这两人在 3 月的最后一个周末开展了疯狂的,不得已的结对编程活动:
http://www.amazon.com/Inside-Intuit-Microsoft-Revolutionized-Industry/dp/1591391369/ref=sr_1_1e=UTF8&qid=1322317678&sr=8-1#reader_1591391369
结对编程
有人要问,既然代码复审能发现这么多问题,有这么好的效果,如果我们每时每刻都处在代码复审的状态,那不是很好么实上,极限编程(Extreme Programming – XP)正是这一思想的体现——为什么不把一些卓有成效的开发方法用到极致(Extreme)nbsp; 结对编程就是一个例子。
在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。
结对编程不是程序开发者独到的发明,在现实生活中,也存在着类似的搭档关系(Partnership):
越野赛车(驾驶,领航员)
驾驶飞机(驾驶,副驾驶)
战斗机的编组(长机,僚机)
提示:这些任务都有共同点:在高速度中完成任务,任务有较高的技术要求,任务失败的代价很高。
结对编程中的角色
结对编程中有两个角色:
(a)驾驶员(Driver)是控制键盘输入的人。
(b)领航员(Navigator)起到领航、提醒的作用。
同学们杂曰——
1)编程从来就是一个人的活动。学校里这么教的,我们一直以来也是这么做的。两个人本来可以去做两个模块,现在一个模块两个人写是不是一种浪费(这可是两份工资哦)/span>
2)我习惯一个人写程序,不喜欢被人盯着工作,这样我不自在,无法工作。
3)身旁的这个家伙老是问问题,他/她不会看书么都无法专心工作了。
4)会不会出现,“我只领航,不用敲键盘,多爽……”的情况/span>
5)有些公司规定所有的任务都要结对编程, 结果大家都走形式, 滥竽充数的人也在结对编程的过程中得过且过
……
为什么要结对编程/span>
每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。具体地说,结对编程有如下的好处:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。
不间断地复审
开发中的复审主要包括:设计复审、代码复审、测试计划复审、文档复审。
这些复审可以在伙伴之间进行,也可以在团队内部进行。结对编程和传统开发过程的复审有什么区别呢/span>
(1)传统意义上的伙伴复审,即程序员之间的互相复审,有以下的问题:
a. 复审人缺乏对程序的深入了解,降低了复审的效果;
b. 不能持久、定时地进行复审;
c. 对需求和设计的不了解导致无法实现全面有效的复审。
(2)团队复审是指多于两人的团队就某一程序实体进行的复审,团队复审的缺点在于:
a. 什么时候开会做复审可能一个团队天天开会。要找到一个所有人都能出席的时间,并不容易;
b. 牵涉的人员众多,理解程度不一,复审的速度和效果不能得到有效的平衡——太快则有人不懂,太慢则浪费许多人的时间;
c. 正是由于成本问题,无法对所有的设计和代码进行深入的复审;
d. 由于人员众多,有面子问题。
在结对编程中,任何一段代码都至少被两双眼睛看过,两个脑袋思考过。代码被不断地复审,这样可以避免牛仔式的编程。同时,结对编程避免了“我的代码”还是“他的代码”的问题,使得代码的责任不属于某个人,而是属于两个人,进而属于整个团队,这样能够帮助建立集体拥有代码的意识,在一定程度上避免了个人英雄主义。
结对编程的过程也是一个互相督促的过程,每个人的一举一动都在别人的视线之内,所有的想法都要受到对方的评价。由于这种督促的压力,使得程序员更认真地工作。结对编程“迫使”程序员必须频繁地交流,而且要提高自己的技术能力以免被别人小看。
但是要注意,每个人每天的高效率工作时段不超过3~4个小时。结对编程中驾驶员和领航员的互换可以让程序员轮流工作,从而避免出现过度思考而导致观察力和判断力下降。
什么样的人适合结对编程/span>
Extreme Programming对实施的程序员提出了更高的要求。这种要求不是技术水平,也不是学历水平或工作经验。这种要求是对一个人的心智、道德修养的更高要求。结对编程中,编码不再是私人的工作,而是一种公开的“表演”。程序员的代码、工作方式、技术水平都变得公开和透明,这也许是有些同学不喜欢这一方式的原因。
如何结对编程/span>
(1)驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
(2)领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖程度;是否需要和如何重构;帮助驾驶员解决具体的技术问题。
(3)驾驶员和领航员不断轮换角色,不宜连续工作超过一小时。领航员要控制时间。
(4)主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。没有“我的代码”、“你的代码”或“她的代码”,只有“我们的代码”。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!