`

敏捷开发松结对编程之二计划设计

阅读更多

新人其实很少偷懒,因为一方面正处于入门学习的高峰期,另一方面工作时间不长需要得到企业和团队的认可。可为何他们工作总是不得力呢?

新人的真正问题在于无心办错事和好心办错事。

无心办错事包括没学过某种好的方法、不知道企业已经有某些可用代码或库、不懂业务等种种问题。

好心办错事包括想做一个比领导想想的更好的功能、过度思考了可复用性可维护性等。

这两个问题笔者都经历过(作为新人和老人),“避免”是最好的方法,而不是事后改正,这就需要在设计阶段和计划阶段从技术、管理两个方面来提前预防。

--------------------------

技术:轻量级设计

如果要把一个任务分配给一个“不放心的人”,有两种办法保证成功:师傅把设计做出来交给徒弟做,但是“设计文档”的详细程度很难把握,写少了做不出来,写多了等做出来了很多内容又多余了;师傅徒弟结对编程,但是很占用师傅的时间,尤其是倘若徒弟“实际上”(可惜只有上帝知道)完全可以胜任这个任务。

有两种解决方法。

1. 事前轻量级设计:预想陈述(有点隐喻的意思)

预想陈述是微软很久以前就使用的一种方法,任何人(不只是徒弟)有什么设计,不用写下来因为太费时间了而且还可能被抛弃,而是给大家讲一下。大家会给出评价和意见,以保证其正确性。然后此人就按这种方法去实现了,倘若成功了也被认可了,就简单写下来以供日后参考使用。由于系统已经存在,这个简单写下来的设计可以真的很简单。

在“松结对编程”里边,有两种类似的做法。

一种是师傅把自己的想法告诉徒弟(一般用一个白板,或一张白纸),徒弟提问师傅回答,到差不多为止。

二种相反,徒弟讲给师傅听,师傅师傅质疑和指导,到差不多为止。

两者都不要事先形成永久文档,但都在被证明可行(就是编码完成后)写一个简单文档记录。任何代码之外的能帮助理解当时做法的文字/图片都可以称为文档,没有字数限制。如果能和用户故事放在一起则更好,一个描述做了什么,一个描述怎么做的。

2. 前检查点

就是在某事开始的时候进行临时结对编程。一般发生在某个功能刚开始做的时候,详情会在之后的“日常活动篇”做详细描述。

管理:共同计划(共同估算,扑克牌估算)

预想陈述、前检查点虽然已经很轻量级了,但是如果师傅和徒弟都刚刚对需求(用户故事)有所了解,还给不出很清晰的思路的时候,比如在Scrum计划会上,怎样快速知道徒弟有没有理解需求,有没有大致的实现思路呢?那就是共同估算(扑克牌估算是共同估算的一种最好的实现形式)。

1. 共同估算

共同估算的原理和做法还是很复杂的,这里只简单说说,以后会有文章详细讲述。

共同估算就是师傅和徒弟基于相同的信息(一般是在计划会上听PO讲完故事的时候),一起说出自己认为做完这件事情需要多久。基本原理是:若两个人对某件事情的工期认识是相同的,那么他们的实现方法不分高下,用哪种方法都差不多。

为了防止人云亦云,一般需要采用匿名方法,而扑克牌估算就实现了高效有效的共同匿名估算(另有文章详述)。

2. 验收标准

为了基于相同的目标建立共同估算,也为了防止需求镀金或最终软件不能满足需求,师傅和徒弟要建立对需求的共同理解。

简单方法就是两者(其实是师傅和多个徒弟)一起参加估算会,一起听PO讲解故事。但最好是在此之后,建立一个“文档化”的验收标准。比如在一张故事卡/Excel表里……上写上“需集成;无性能要求……”等最简单的描述(请参考本博客的敏捷开发分类下一片关于验收标准的文章)。

共同估算+验收标准,使得师傅和徒弟(推广为高手和新手)使用大致相同的方法,做大致相同的东西。共同估算既是一个工作的过程,也是一个学习的过程,因为在理解做什么和怎么做的同时,徒弟也向师傅学到了东西。


ref:http://blog.csdn.net/cheny_com/article/details/6581741
分享到:
评论

相关推荐

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

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

    自组织团队与松结对编程 陈勇 2011-09-18

    #### 二、松结对编程的概念及其优势 松结对编程是一种灵活的结对编程方式,它结合了传统结对编程的优点(如代码质量的提升、知识的快速传播等),同时也允许一定的灵活性,以适应不同的项目需求和个人偏好。 **...

    敏捷开发和极限编程

    结对编程,提高代码质量和团队协作;测试驱动开发,先写测试再编写代码,确保功能正确且设计良好;持续集成,频繁合并代码,减少集成风险;集体代码所有权,鼓励团队成员对所有代码负责;编码标准,保持代码一致性;...

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

    虽然结对编程在敏捷开发中并不是一项强制性实践,但其带来的好处已经得到了广泛的认可。它有助于团队更好地适应变化,提升软件开发的质量和效率。当然,结对编程也存在着一些批评和争议。比如,一些人可能会对结对...

    系统分析师-敏捷开发方法

    极限编程是一种敏捷开发方法,它强调面对面的沟通,通过结对编程和 40 小时工作制来提高开发效率和代码的规范度。在本项目中,我们采用极限编程的方法,通过结对编程来提高代码的规范度和正确率,加大了开发效率。...

    敏捷开发极限编程

    #### 二、敏捷开发实践原则 - **持续交付**:敏捷开发强调尽早并持续地交付有价值的产品,以满足客户需求的变化。 - **需求变更的接纳**:即便在开发后期,敏捷团队也应该欢迎需求变更,将其视为创造竞争优势的机会...

    结对编程在Java Web开发课程实践教学中的应用.pdf

    结对编程是一种敏捷软件开发方法,它在Java Web开发课程实践教学中有着重要的应用价值。本文将对结对编程在Java Web开发课程实践教学中的应用进行探讨,并对其效果进行分析。 结对编程的概念源于极限编程(XP),它...

    敏捷开发的艺术

    , 我们真的需要结对编程吗?, 汇报应该详细到什么程度?, 如果无法让客户参与进来该怎么办?, 我们应该编写多少文档?, 何时进行设计和架构?, 作为一名非开发人员,我应如何同敏捷团队一起工作?, 产品的路线在哪里?, QA...

    极限编程与敏捷开发.ppt

    极限编程的实践包括小版本、规划游戏、现场客户、隐喻、简单设计、重构、测试驱动开发、继续集成、结对编程、代码共有、编码标准和40小时工作等。小版本是指为迭代式开发和与客户展现开发的进展,小版本发布是一个可...

    敏捷软件开发:原则、模式与设计

    2003年6月荣获美国《软件开发》第13届震撼(jolt)大奖! 在本书中,享誉全球的软件开发专家和软件...●使用真实案例讲解如何用极限编程来设计、测试、量构和结对编程 ●包含了极具价值的可多次使用的c++和java源代码。

    敏捷软件开发.pdf

    XP是一种敏捷软件开发方法,它在预算和时间限制下,教导开发人员如何利用迭代计划、持续集成、测试驱动开发、重构和结对编程来完成软件项目。 敏捷宣言是敏捷运动的基石,提出了一系列价值和原则。宣言中强调了个体...

    Scrum敏捷开发.pdf

    Scrum是敏捷开发中最流行的实践方式之一,它是一种迭代式增量的软件开发过程,采用时间驱动的Sprint周期来进行管理。 敏捷思想强调涌现式需求,即需求在开发过程中逐渐清晰和完善,反对一成不变的预测性计划。敏捷...

    敏捷软甲开发设计 敏捷软甲开发设计 敏捷软甲开发设计

    3. XP:注重编码和测试实践,如对编程、测试先行、结对编程、持续集成等。 四、敏捷实践 1. 用户故事:以用户为中心的简短描述,代表软件功能或用户需求。 2. 任务板:展示项目状态,帮助团队成员了解任务分配和...

    结对编程软件方法的研究与应用(1).pdf

    结对编程作为一种源自敏捷开发的软件开发实践,已经逐渐成为业界关注的焦点。它涉及到两名程序员共同在一台电脑上工作,一人专注编写代码,另一人则负责审查和提供即时反馈。这种实时的同行评审和合作机制被认为是...

    任务驱动的结对编程在C语言程序设计实践教学中的应用.pdf

    结对编程是敏捷软件开发方法极限编程(XP)中的一项实践,其特点是两名学生共同使用一台电脑,分别担当“驾驶员”和“导航员”的角色,以协作的方式完成编程任务。 在C语言程序设计课程中,任务驱动的结对编程教学...

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

    本书对于极限编程(XP)的讲解深入且易于理解,书中通过实际案例展示了如何使用极限编程进行设计、测试、重构和结对编程。它还包含了大量可重复使用的C++和Java源代码,对使用统一建模语言(UML)和设计模式来解决...

    敏捷开发之实践总结啊

    XP强调编程实践和技术上的卓越,如测试驱动开发(TDD)和结对编程。 3. 用户故事与迭代开发 在敏捷开发中,用户故事是描述用户需求的简短叙述,它帮助团队理解功能的实际价值。每个迭代都会完成一组用户故事,形成...

    结对编程启示录

    结对编程,作为一种创新的软件开发实践,源自敏捷开发的理念,旨在提高代码质量和团队协作效率。"结对编程启示录"这本书深入浅出地探讨了这一主题,为小团队提供了宝贵的资源,帮助他们在有限的人力条件下产出高质量...

Global site tag (gtag.js) - Google Analytics