`

跌跌撞撞地敏捷之路——怀念那段结对的日子

阅读更多

现在,如果有人问我要不要在项目中实施结对编程,我会第一个站出来大声地说:“坚决要实施结对”。

这个项目初次尝试走敏捷,从一开始对敏捷的不了解,团队成员的点滴摸索,到中间的渐入佳境,到最后的打回类CMM的原点,这种在一个项目中“大起大落”的经历使我倍加爱上敏捷,倍加怀念结对走过的日子。

项目启动初期,没有尝试结对编程,还是走CMM的老路子,一个人分配一个任务,然后各自拿着领到的任务,开始“孤零零”地在自己的电脑前埋头苦干:造代码、做测试、改问题,还好是项目初期,大家心情都比较轻松,不觉得枯燥无味,不觉得累,就这样走过了敏捷的摸索阶段。

到了第二个迭代,由于有了前期的摸索、经验教训,大家知道如何划分story、task,知道一个task必须控制在一两天就能完成的范围内,然后就有人提出尝试结对编程的想法,就这样揣着“先尝试下,不行再按老路子走”的策略开始走上了结对的路子。不试不知道,一试整个团队都爱上了这种开发模式。

和很多XP书上介绍的一样,两个人一台电脑,两个人一起讨论实现的细节,然后就编码,一个人在敲键盘,一个人在旁边“盯”着。负责“盯人”的人发现敲出的代码有问题,就立即指出来并讨论,然后“盯人”的操作鼠标选中有问题的代码,敲键盘的开始改选中的代码,有时“盯人”的人直接夺过鼠标键盘直接操刀写代码。敲码人在编码过程中,盯人的人也有时间去进一步思考细节,如边界情况是否处理了等,当然敲码人也经常会在敲码过程中提出疑问。就这样两个人边编码,边讨论,一起解决问题,质量提高了,整个过程大家也很愉悦,因为不再是“孤零零”一个了。结对也让人更加高效,更加专注,没有了经常间歇性的查看邮件的功夫。

实施结对,结合合理的task周期的制定,更能提高团队成员的战斗力,因为每天或每两天就能有一个任务、功能完成,这使得大家每天都很有成就感,大家都喜欢上了这样的韵律与节奏。

虽然中间实施结对使团队的效率高了很多,但由于在前期摸索过程中欠了一些“债”(一些本该在前面完成却没有完成的工作),感觉有点“一着错,满盘皆错”的感觉,这些债一点点的拖到了后面几个迭代中,外加对测试工作投入的不充分等等因素,项目到了后面一两个迭代,不再实施结对,又走回了单兵作战的路子,大家又是“孤零零”的作战单位,我自己觉得效率低了不少,编码过程中由于没有人“盯”,经常出现一些低级的问题,而且也没有了那种一两天就能完成一个任务,有功能出的节奏,所以现在我深深地怀念那些结对的日子。

我倡导项目中自始至终都实施结对,不管是编码、还是解决问题,我认为都可以结对,两个人的智慧绝对比一个人的大,考虑的问题绝对比一个人全面。从我们这个项目的实施中看,结对绝对不会是效率的瓶颈,结对只会提高效率、提高质量。而且通过结对,可以提高团队的技能,在结对的过程中,结对双方可以互相学习、分享设计、编码经验。

不过,结对的过程也要注意配合方式,否则就有可能会出现“怠工”的现象,尤其是那种对系统中原有功能进行扩展或者改造,且结对的两个人中有一个人对该功能比较熟悉,而另一个没有接触过该功能的情况,这时如果光顾实现的话,那么熟悉的人就会在电脑面前猛敲代码,另一个人在旁边只能干瞪眼,这样子就失去了结对的意义了。在这种情况下,实施结对的过程更应该注重“互动”,可以由熟悉该功能的人先讲解下该功能的已有实现以及后面打算如何进行扩展、改造,双方订下实施方案后,由不熟悉该功能的另一个人来编写测试用例(UT),这样可以增加它对该功能的了解,然后由熟悉该功能的人来实施编码,最后由写测试用例的人来跑测试代码,通过这种方式,一来达到完成任务的目的,二来也培养了可以维护该功能的后备人员,一举两得。

 

 

 

13
2
分享到:
评论
12 楼 airlink 2009-12-07  
“敏捷就是对程序员进行最深程度的压榨” 这个观点令人毛骨悚然。不如改为:

“敏捷就是对程序员的效率进行最深程度的挖掘”

虽然客观上是一件事儿,但主观愿望不一样,感受不一样,体验也不一样。

11 楼 Hotpepper 2009-06-27  
“敏捷就是对程序员进行最深程度的压榨”
我不太赞同这样的说法哦。如果你赞同这种说法,那么其它所有用于提高效率、提高质量的流程你应该也不会认可的,你应该先问问自己是否喜欢开发这个工作,或者喜欢现在所处的公司?
^_^
10 楼 不是流氓 2009-06-27  
正在进行着结对,结对能带来的就是解决困难问题的速度提升很多;
敏捷:记得某人曾经对我说过“敏捷就是对程序员进行最深程度的压榨”
不知道LZ认同不认同这个说法?
9 楼 xieye 2009-06-27  
hanjiangit 写道
by5739 写道
对于那些有人看着就真的写不出代码的人...你打算怎么弄?我还真遇到过这种人.......

确实  这个真的很难  结对的人一定要心诚 而且技术实在不能差太远。。。


既然这样,那就找心诚而且技术差不太远的同事 共事不是一件很愉快的事情吗?
8 楼 hanjiangit 2009-06-26  
by5739 写道
对于那些有人看着就真的写不出代码的人...你打算怎么弄?我还真遇到过这种人.......

确实  这个真的很难  结对的人一定要心诚 而且技术实在不能差太远。。。
7 楼 myseo 2009-06-26  
LZ的团队确实不错
不过结队的前提条件是团队成员的性格相符合,不然很难开展。
没听过一个中国人是一条龙,三个中国人一盘沙吗?
6 楼 Hotpepper 2009-06-25  
结对,并不单单只是两个人在一起把代码写完而已,抛开我说的效率提升不说,我目前体会最深的还有两点:
1)结对可以拉升项目组整体的战斗力,通过合理的搭配,最好是高低搭配,比如技能强的和技能稍差的,业务能力强的和业务能力差的搭配,通过这种搭配方式,搭配的双方在开发过程中可以互相学习,互相讨论,从而提高项目组成员的能力水平。如果在多个项目组中,甚至同一个项目中的不同迭代中,呼唤结对的人员,时间长了,这种能力提升的效果就会更强;
2)通过结对,可以为项目组培养模块后备人员。在对旧模块进行功能改造或者扩展时,可以让一个熟悉该模块的人和一个不熟悉该模块的人进行结对,不过在结对过程中不能只是为了完成任务而由熟悉该模块的人狂造代码,如果这样就失去了结对的意义,而应该象我上面说的,进行互动,熟悉该模块的人要把另一个人培养起来。通过这种方式既可以完成任务,也可以培养模块后备人员,而且可以把一些熟悉系统的人释放出去去开发新功能。

以上两点,对于项目管理人员来说应该是很有吸引力,目前我们的项目组就这样实施着,效果也还可以。

对于上面有人说,“那些有人看着就真的写不出代码的人”,如果真的有这种人在项目中,对于项目管理人员来说,不管是不是结对都是一样的效果,既然他写不出代码,而又得把他用起来,那么为什么不考虑让他去“打打杂”,比如说搭集成环境、写测试用例,做测试等等。具体问题,要具体解决,不要拿着些极端的事来否决一个“新生”事物。

引用
我很不喜欢两个人一起写代码,记东西必须要脑,手一起行动.才能记得更快.

如果个人能力很强,又不喜欢和别人分享的人,只好例外安排了,不过,在一个项目中不提倡个人英雄主义,一个项目是要靠所有团队成员的共同努力才能成功的,既然个人能力强,为什么不能Open点,把自己的知识贡献出来呢?个人再强,也不可能把自己把一个产品开发出来呀。

从长远来看,结对绝对不会效率的瓶颈。不过,结对肯定是要讲究技巧的,另外,也要求大家要Open点,在实施过程中,对问题有疑问等,应该Open点,实时指出,藏着耶着,只会让问题沉淀下去,只会提高后期维护的工作量。
5 楼 flyfan 2009-06-25  
写代码还有人看着……心寒
4 楼 swen00 2009-06-25  
没尝试过,但持怀疑态度...
3 楼 by5739 2009-06-23  
对于那些有人看着就真的写不出代码的人...你打算怎么弄?我还真遇到过这种人.......
2 楼 1314520ln 2009-06-22  
那是你自己工作的效率有问题,单元测试你自己不会用吗


我很不喜欢两个人一起写代码,记东西必须要脑,手一起行动.才能记得更快.
1 楼 langyu 2009-06-22  
大学时有过这样的经历,很有感触。
盯人的那个人,一直在思考整个逻辑,写代码的只关注实现。写一会就换人,所以两个人对整体逻辑和实际有共同的认识,编程是非常开心的。

相关推荐

    结对编程——敏捷开发.pdf

    "结对编程——敏捷开发" 结对编程(Pair Programming)是敏捷开发(Agile Development)中的一种实践方法,它是指两名开发者坐在一起,共享一台电脑,共同编写代码的过程。 结对编程的优点: 1. 提高代码质量:...

    敏捷软件开发——下载

    敏捷软件开发是一种以灵活性和快速响应变化为核心理念的开发方法论,旨在应对现代软件项目中常见的需求不确定性与频繁变更。敏捷开发强调通过迭代和增量的方式交付软件,以确保软件始终能满足客户的需求。这种方法...

    敏捷软件开发——原则、模式与实践

    这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。  ·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。  ·使用真实案例讲解如何用极限编程来...

    ThoughtWorks文集II——敏捷实践的秘密

    "ThoughtWorks文集II——敏捷实践的秘密"是该公司分享其在敏捷开发领域的深入理解和实践经验的集合,旨在帮助读者深入了解如何有效地实施敏捷方法并从中获益。 在敏捷开发的世界里,核心理念是迭代和增量式开发,...

    “青蓝工程”师徒结对——徒弟发言稿.pdf

    在教育领域,"青蓝工程"是一个非常重要的师徒结对项目,旨在通过资深教师的指导,帮助新入职的教师快速提升教育教学...通过这样的师徒结对,我们可以快速融入教育行业,更好地实现自我价值,为我国的教育事业贡献力量。

    敏捷建模:极限编程和统一过程的有效实践———— 好东西!

    《敏捷建模:极限编程和统一过程的有效实践》是一本深入探讨敏捷开发方法的书籍,主要聚焦于极限编程(XP)和统一过程(RUP)这两种广泛应用的敏捷框架。在这个快速变化的IT行业中,敏捷方法论已经成为软件开发的...

    4、手拉手,共进步——红绿领巾友谊中队结对仪式整理.pdf

    4、手拉手,共进步——红绿领巾友谊中队结对仪式整理.pdf

    《敏捷软件开发》源代码

    《敏捷软件开发——原则、模式与实践》是软件工程领域一本经典的著作,它深入探讨了敏捷方法论在软件开发中的应用。源代码是书中理论与实践相结合的重要载体,提供了具体的实现示例,帮助读者更好地理解和掌握敏捷...

    《敏捷教练之路》演讲PPT

    这展示了一条从传统的开发工作到成为敏捷教练的成长之路。 9. 敏捷实践的扩大和影响 徐毅在演讲中也提到了如何扩大影响力,比如鼓励开放式沟通、建设专业的团队、推动持续集成和ATDD等实践,并成为社区的积极分子。...

    敏捷方法 敏捷方法 敏捷方法

    敏捷方法在Ruby On Rails项目中的应用 一、敏捷方法概述 敏捷方法是一种基于迭代和增量式的开发方法论,强调团队...在BOSCO系统的开发过程中,敏捷方法和结对编程发挥了重要作用,帮助我们成功地开发了BOSCO系统。

    论文研究-结对编程开发人员之间若干关系问题的探讨 .pdf

    结对编程在敏捷开发中并不是强制性的,但它可以帮助团队更好地适应变化,通过两个人的紧密协作提升软件质量。在实践中,结对编程的好处已经被许多实践者所认可,尽管它也面临一些批评和争议。无论如何,结对编程都是...

    敏捷开发知识体系.pdf

    敏捷宣言是敏捷开发的基石,其四个价值观——个体和互动高于流程和工具,工作的软件高于详尽的文档,客户合作高于合同谈判,响应变化高于遵循计划——体现了敏捷的核心思想。这些价值观并非排斥右侧的元素,而是强调...

    web 开发敏捷 之道 pdf 带书签高清

    《Web开发敏捷之道》这本书是IT行业中关于敏捷开发方法在Web开发领域的深度探讨。敏捷开发是一种以人为本、迭代、增量的软件开发方法论,强调快速响应变化,提高开发效率和产品质量。书中涵盖了敏捷开发的核心理念、...

    信息管理系统的设计与实现——信息查询结对、用户管理模块.doc

    总结来说,这个信息管理系统设计与实现项目是一个综合性的信息系统,它有效地整合了数据管理、用户交互和后台处理等多个方面,为教育慈善活动提供了高效、可靠的信息化支持。通过 Delphi 和 SQL Server 的结合,实现...

    敏捷开发官方文档

    在敏捷环境中,持续集成是关键实践,它要求开发人员频繁地将代码集成到主分支,配合自动化测试确保每次集成的质量。自动化测试包括单元测试、集成测试和验收测试,有助于快速发现并修复问题,提高软件质量。 5. ...

    XP实践结对编程demo

    在"XP实践结对编程demo"中,我们可以看到两个关键的目录——`src`和`test`。`src`目录通常包含项目的主要源代码,而`test`目录则用于存放测试代码。在XP实践中,测试驱动开发(TDD, Test-Driven Development)是另一...

    JAVA敏捷开发电子书

    Scrum是目前最流行的敏捷开发框架之一。它围绕三个核心角色——产品负责人、开发团队和Scrum Master展开。产品负责人负责维护产品的待办事项列表(Product Backlog),确保团队对需求的理解清晰;开发团队是自我组织...

Global site tag (gtag.js) - Google Analytics