搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 中兴开发者社区 > 结对编程,只有实践过才知道好不好

结对编程,只有实践过才知道好不好

中兴开发者社区 2018-05-16
举报


摘要

结对编程是敏捷开发过程中非常重要的一种实践,其对于提升项目质量、促进知识传递、培养新人及减少项目风险有着非常重要的实际意义。本文讲述的是我们团队在一年的结对编程中所发生的点点滴滴与思考,希望这些经验能给想开展结对编程的团队一些参考。


定义

网上对于结对编程的定义是“两位程序员坐在同一工作台前开发软件”。但是结对编程真的只是两个程序员简单的坐在一起使用一台计算机、一个键盘、一个鼠标这么简单么?


答案当然是否定的。


结对不是共用物品这么简单,而是要达到思维的高度一致性,也就是说让两个不同的思维最终融合到一起书写出最终的一份代码,这份代码比任何一方写出的代码更加优雅、更少的BUG,这才是真正的结对编程。


为什么

关于为什么要推行结对编程有许许多多的理由,同样对于不推行结对编程也有很多的理由。在这里,我们回顾下我们团队第一次在迭代回顾会上对结对编程开展的探讨。当时当SM对团队试点结对编程进行投票时,赞成方以2:1的优势获得试点通过,其它人都选择了观望,既没有投赞成也没有投反对。对于一个10人的团队来说,只有两人明确表示赞成结对编程,这对结对编程的开展是明显不利的。


为什么要开展结对编程呢?


正方:结对编程可以培养新人,使新人快速成长;可以打破壁垒,促进知识的传递;可以促进团队的融洽,培养团队氛围。


反方:喜欢单独思考,不希望被打扰;浪费了不必要的时间,会使得项目进展过慢。


在这种态度不一的形势下,我们团队还是推行了两对以老带新的结对编程模式的试点,在这两对的试点中,由于采用的是以老带新的方式以及是第一次尝试,我们混杂着结对编程和传统编程,也出现了结对编程中的种种弊端,譬如手机哥、疲惫、理解困难等问题。


但是经过这一个迭代的尝试,改变了我们团队成员对于结对的认识和理解。


首先、这次尝试并没有拖慢我们的项目进度;


其次、新人在这种尝试中有着非常大的收获;


第三、减少了很多开发中的低级错误,使低级错误在编写的过程中就提早的被发现和更正;


第四、使团队更加活跃。



如何

如何开展结对编程,结合我们团队的经验来看,结对的方式是非常灵活的,可以采取循序渐进的方式开展,不一定按照教科书上的步骤死扣。


对于不喜欢或者不习惯结对编程的开发人员可以尝试从两者分工合作的方式切入,在合作的过程中尽量编写一些相互有些依赖的代码,促进两人之间的密切合作,当然彼此合作的双方要在合作的过程中,放下自己强势的性格,有问题做到协商或者团队投票解决。


同样这种分工合作的结对方式对于有些故事开始本身就是一种结对的方式,譬如我们团队在开展CIFS移植工作时,由其中一个熟悉的人规划移植文件,然后两人分工开展,这样不仅可以加快开发进度,同样可以帮助不熟悉的一方慢慢切入进来。


对于以老带新,可以采用驾驶员和领航员的结对方式,在故事刚开始的阶段由老手设计方案,搭建代码架构,同时在设计的过程中,给新手进行讲解,使新手对所参与的故事达到快速入门并理解;在故事中期可以采用由新手写代码(驾驶员),老手指导(领航员)的方式,帮助新手深入理解所开发的故事;在故事收尾时,新手应该已经对自己所参与的故事有自己的认识,并且有自己的想法,此时可以交替当驾驶员和领航员。


而对于老手与老手而言,可以采用ping-pong模式,这种模式在我们团队近期参与的项目中体现的尤为突出,这种方式尤其适合于目前推行的TDD开发方式,两人一起设计方案,书写TODOLIST,然后一人书写测试用例,另外一个人书写产品代码,使得用例得以顺利通过;然后再交换进行,可以做到两人劳逸结合。


对于如何结对、如何开展?这和每个人的性格以及处事方式有着比较大的关系,所以结对不一定适合于每一个人,推行结对的过程中,一定要尊重与你结对伙伴的观点,做到沟通及时,有问题及时探讨,对于有争议的点,要用有理有据的观点去说服自己的伙伴。


对于团队的结对,切不可要么不做,要么就全铺开,一定要尊重团队个体成员的意见,最好像我们团队一样由试点到全面铺开。



实践收益

经过多个迭代的实践,结对编程给我们团队带来的变化是有目共睹的,更融洽的团队关系、更高的工作效率、更低的错误泄露率。


结对可以打造非常融洽的团队关系。结对很好的促进了团队成员间的沟通交流,经常一起合作的伙伴,彼此更加了解、熟悉,在这样的团队里,大家很乐意互相协助,一起分享知识,分享快乐。

结对编程,只有实践过才知道好不好


结对是知识传递最好的途径,在我们团队实践的以老带新的结对方式,在实际项目中,新人通过与有经验的同事一起结对,可以更加快速的掌握某一个模块。这种方式新人学到的不仅是一些技术和技巧,更多的是老手思考问题的方式、解决问题的方法。


经过近一年的实践,我们团队成员人人都可以轻松处理业务模块的故障与故事,下图可以看出通过知识传递的过程后,我们团队人人都是业务专家,即使团队人力在减少,但是我们团队解决的故障数仍然比较平稳。

结对编程,只有实践过才知道好不好


结对可以提升工作效率,软件开发不只是一个简单的堆码过程,而是一个发现问题,分析问题,解决问题的过程。在结对编程的过程中,面对问题,两个人先经过深刻的讨论,一致认可之后才开始编写代码。一个人编写代码,另一个则在旁边思考,会为下一步的工作提出建设性的意见,发现了问题可以及时的指正,大大的提高了代码质量,从而把BUG消灭在萌芽阶段。


建议

1、利用导师机制,在新人和导师身上,采用敏捷结对。利用这种结对的紧密合作模式,提升新人对项目的理解,使其快速融入团队;


2、利用特性团队的优势,推广跨模块成员之间的结对,利用这种结对模型,打破跨模块的壁垒,提升团队的整体水平和能力。



结论

结对编程的实施,其实并不困难,它对项目来说,收益远大于弊端。千里之行始于足下,我们缺乏的只是经验,当然经验也只会来源于实践。希望我们的经验能给想开展结对编程的团队一些参考。




版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《结对编程,只有实践过才知道好不好》的版权归原作者「中兴开发者社区」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报