众所周知,在敏捷开发世界里,结对编程给我们带来许多在一般的软件工程中所无法解决的问题的好处,如花费大约一半的时间就能编写
出质量更高的代码等等。但结对编程并不是万灵的,它在一定的情况下才能给我们带来这些好处,而在另一些情况下,它就会失效、行不能。
下面就举一个例子来看看结对编程失效的情况。
因为结对编程需要两个人不断进行的沟通与做决定,所以如果不能沟通或者做不了决定的话,结对编程就行不通了。
打个比方说,小许为了赶工期,弄得非常紧张,但他的项目经理坚持让他去配合小王。这样小许就很不情愿的去跟小王搭档。他让小王把
代码给他看看。尽管他觉得DataAccesser这个类很不合适,但他一心在想着他的项目的截止日期。他说道:“哦!去掉这个类,太花时间了。你简
单把它改名成DBTable吧。”小王说:“不行!现在整个系统的结构全部集中在数据库上,再这样下去系统会崩掉的。我们一定要解决这个结构
!所以项目经理让你过来帮我的……”之后,小王在写代码的时候,小许根本没认真看。他一点建议都没给。
上面这种情况,就是属于不能沟通的情况。小许不愿意跟小王结对编程(小许自己本身就有很急的任务),他们表面上是搭档的,事实上
根就本没有。
因为两人之间没有共同的目标(比如,改进系统的结构)。如果人没有共同的目标,那他们就没有沟通的欲望。
但这并不是无法沟通的唯一原因。比如,如果一个搭档比较情绪化,不喜欢跟人交流,那就无法沟通了。当小王
和小许在写testDeleteAll这个方法的时候,小王建议用“t”来代替“abc”作表名。如果小许这样回答:“abc就行了,我写了好几年的测试
,都是用这种数据的。你懂什么?你才刚毕业好不好?我在编程的时候,你还在幼儿园呢。” 在交流的方式上,沟通可能也会有问题。如果一
个搭档缺乏信心,他什么意见都不敢提。小王跟小许在一起
写DBTable的时候,正确的情况下,小王问小许为什么要在写DBTable类之前写一个失败的测试。可是如果小王被小许的经验和能力震住了,一
个问题也不敢提?那系统开发过程中,就得不到小王任何有意义的建议了。
缺乏自信只是不提意见的一个原因。另一个原因看起来就很傻了。当小王还给小许解释DataAccesser类里
面的deleteAll方法中有关级联删除的代码时,如果小许觉得不懂这些代码是一件很蠢的事情,然后就不细看,也不提问题直接跳过去,那会怎
么样?小许对系统了解就不够多,也就给不了重构的什么好建议了。
总结了一下,以下是造成结对编程无法正常工作的一些情况:
1、不情愿的配合
2、拒绝别人的意见,甚至攻击对方。
3、小心翼翼有意见不敢提。
4、怕别人觉得自己笨不敢问问题。
5、如果这些问题真的发生了呢?不过这个跟管理以及个人性格更有关系,最好的方式就是不让他们结对,或者
让他们跟别的人结对。