自从研究生毕业一直在一个施行敏捷开发的团队工作,两年多来一个比较好的开发模式就是结对编程,但是最近一段时间由于项目进度和团队人员变更问题导致没有把这个敏捷实践贯彻下来,希望下半年能把以前总结出来较好的方式继续下去,并以此文简单总结下结对编程的优势。
目前已经有很多互联网公司采用结对的方式编码,网上也有很多资料介绍结对编程的方式,坦白说来,两个人的头脑结合在一起反应更快,也能有更好的成果,比如更高质量的代码,更少的bug。此外,团队精神通过合作得到加强,程序员也改善了时间管理。
结对编程在项目开始时会增加开发成本。结对编程可以显著降低后续成本,因为它减少很多bug的产生。特别是对于复杂的代码,四个人的眼睛明显好于两个人,高质量代码可以更快地投入到运营,以及减少测试反馈周期。如果程序员已经学习过类似的新技术,也可以给其他程序员分享知识,并将建设性的建议纳入常见的任务中。
优秀的开发人员会在开发过程中不断交流关于代码设计和新想法,共同致力于下一步的开发。结对编程开发人员使用两个键盘,两个鼠标,共用一个屏幕和一台电脑。开发者控制并编写代码,扮演飞行员的角色,另一位担任导航员的角色,专注于确保代码是正确的,并考虑改进应用程序的设计,遵循最佳实践。
其实也没有固定的角色分配,以半小时的节奏,角色互相交换。让两位程序员都保持动力和细心。同样,Partner也会随时变化。这将确保大家更饱满的动力。
根据任务决定团队分组是有意义的。谈到知识和技能转化,初级和高级程序员应该共同努力,以获得最佳的学习体验。但是,如果要求代码质量,避免错误或者开发困难的任务,应该是两位高级程序员一起工作,这保证了高效率和低错误率。
如果不是把知识传递到初级阶段程序员,结对者可能无所是从,只能被动接受,从而抑制行动力。
合伙伙伴也要经常动动,主动提出疑问,互相适应。
每天约三到五分钟的短会,所有的开发同事聚集在一起,交流想法,这样可以更好地激励团队。
一起来讨论当前项目的细节。有时候甚至整个团队的整行代码都会被分组讨论,每个员工都有机会进行互相个人接触,这对于团队合作有积极的促进。
在软件开发的早期阶段产品经理也需要参与其中,这让程序员对需求有更好的理解。比如,如果要开发数据分析应用以更好地了解客户的行为,那么程序员被证明可以直接开发更智能的应用程序。开发者的优点是可以不断地给出反馈意见,并就应用的工作方式提出新的想法。
针对结对编程中的bug,开发者应该通过测试驱动开发(TDD)确保所开发的软件确实符合要求。这个过程是基于一个非常短的开发周期不断重复:开发人员首先模拟测试错误的代码,然后再开发一个足以通过测试的代码。最后,修改代码以符合标准。
结对开发绝不是开发中的万能钥匙,如果运用不得当反而适得其反,团队成员对结对编程要有共同的价值观。
如果两个程序员一起工作,每个人都必须自律并遵守团队纪律。从邮件,社交网络或电商购物等处分心,不仅阻碍程序员自己的进步,而且阻碍其合作伙伴的进步。因此,休息和工作应该严格区分,并有明确的时间段。
结对编程结合了两个人的知识来解决问题。如果开发者有一个人首先提出问题的解决方案,合作伙伴就很难开创新的局面。
所以,软件必须定期测试,对新开发的代码微调,直到一切正常。合作伙伴对其它解决方案持开放态度并且不拒绝替代想法,是必要的,也是格局之所在。
工作的建设性须始终处于关注的中心,在保护自己的观点和在错误的时间保持沉默,广泛讨论的结果可能适得其反。
结对编程既耗费精力和精力,开发人员每天工作八小时,工作非常集中,他们的行为直接影响到合作伙伴。因此应该定期休息一下,放松眼睛,也放松大脑。最好连续工作一两个小时后停下手头工作活动下,留着最有精力的时间段解决最困难的工作。
结对编程其中一个好处就是在团队之间共享知识。在开发过程中不断沟通谈话,一起互相学习和反馈,提供建议与解决方案。驾驶员和导航员相互适应,了解对方的思路。如果存在歧义或差异,则应该进行适当的调查,并一起讨论纠正偏离的方法。
结对开发中经常会遇到两个人观点不一致的情况,尤其是两个高级程序员结对时,这时每个人都表达完自己的看法后要放下争执的念头选择最优的方案,如果谁都说服不了彼此,此时就需要引入权威的第三方决策者或者召集其他开发一起讨论,此时若大多数人反对自己的观点,请记住,大家反对是这个解决方法绝对不是反对你这个人。
目前,越来越多的公司寻求最佳的敏捷软件开发机会,结对编程这一方法正在迅速扩散。同时还有其它的工作模式也同样有帮助。需要我们对编程有很好的经验,开发者更加高效,专注,积极主动,软件的质量更高,产品也更加创新。当然,所有的方法论都是指导工作而不是放之四海皆准的银弹,实际开发中不能拘泥于形式,结对开发绝不是所有工作把两个人绑在一起来完成。