敏捷编程介绍
John Paul Mueller, CIO
2007-03-28

    每个管理者都经历过梦魇般的编程项目。这类项目耗费了两倍于预期的时间,超出了大量的成本预算——可远远还不止这些。当你将偏爱的应用展示给用户,可他们并不喜欢,即便你的公司非常需要这个应用来达到某种目标,例如提高生产能力。
    幸运的是,你不再需要理会这类由旧的迭代软件开发过程所产生的问题;你可以使用敏捷编程来克服这些问题。

什么是使用敏捷编程的商业原因?
什么使敏捷编程与众不同?
使用敏捷编程,我就不需要做大量额外的工作了?
除了在迭代中工作,敏捷编程还有什么不同?
Won't Working Like this Change Our Corporate Culture?
When Should I Avoid Using Agile Programming Techniques?
Is There Just One Kind of Agile Programming?


什么是使用敏捷编程的商业原因?
    商业需要一种方式来降低开发成本、改进软件可靠性、减少开发时间、确保应用程序能够真正为用户服务,而不是违背用户。
    做到这四点,无论对谁,都是一个过高的要求,但是,在众多应用程序编程方案中,敏捷编程技术能够做到这些。
    敏捷在商业上行得通,是因为你能够通过减少开发者在设计和建造应用程序过程中的错误来降低开发成本。此外,敏捷编程技术还能够清除所有开发成本中最昂贵的一个——失败的应用程序。

    然而,甚至一个应用程序已经出厂并且安装在服务器上,可靠性开销仍然可能耗尽其所有的潜在收入。
    大多数公司努力达成的5/9的可靠性,也只是发生在良好设计的应用程序中——为用户提供服务的时间多于“当机”的时间。而敏捷则通过减少每个模块潜在的开发错误数量和提供用于快速定位错误的持续测试来完成这个任务。
    许多公司都指望能够从为开发项目所做的投资中得到快速回报。然而,大部分项目因为公司需要等待开发者完成整个应用程序而受苦多年。
    与等待整个应用程序不同的是,敏捷编程技术可以帮助你当天就使用至少部分应用程序,这意味着你在很大程度上更快地从这个应用程序中受益。总之,你可以免费得到部分应用程序,因为你所节约的开支可以用于剩余应用程序的开发。
    应用程序与用户一同工作或许看上去不像这样至关重要,但是它足以区别一个省钱(或赚钱)的应用程序和一个费钱(或赔钱)的应用程序。
    一个大型服装厂的项目说明了这点。开发者假定获得订单时用户会依靠鼠标在显示屏上选择产品。然而,在这个服装厂新应用程序被安装上生产服务器后,公司意识到一个相当大的工作效率损耗,而不是期望的增益。造成的结果是:员工们仅仅使用键盘。因为将手从键盘移到鼠标来操作这个应用程序,每单将耗费他们宝贵的几分钟。

    敏捷编程通过让用户早期就介入到开发进程中来避免这种情况。如果这个服装厂采用的是这种方法,那么应用程序的第一次迭代就将帮助公司意识到这个期望增益的问题,而不是公司继续花费大量的时间和金钱在程序返工上。


什么使敏捷编程与众不同?
    敏捷编程把一个应用开发项目分解成多个小的组件化的片段。每个片段在很短的时间内,一步一个脚印地添加到应用程序中并表现出官能性的一个完整部分。你可以部署这部分应用程序并且期望人们依据它来完成某种程度的工作,即便从长远来看,这个应用程序不能做你打算让它做的所有事情。
    每个片段是一个持续1到4周的迭代过程。因此,当应用程序中一个特定的片段表现棘手的时候,你将立即获知。这会使你设法立刻解决这个问题,而不是在一大堆bug上编译完所有其他的官能性或者遭遇“这不是用户想要的”之后。
    每次迭代过程就像一个有它自己权利的小型项目。作为一个敏捷项目管理者,你还是需要像平常一样监管计划、需求、设计、编码、测试和各阶段文档,但这只是为了某个特定的应用特征(而不是全部应用程序)。
    打个比方,如果你正在创建一个特殊种类的字处理程序,其中一个迭代或许就是它的拼写检查程序。这个拼写检查程序要添加到字处理程序中,但它影响的只是整个程序的一个方面。在开发者创建这个用于处理拼写的迭代之前,在这个功能没有完成的情况下, 用户照样可以使用这个字处理程序,他们只是不能够对所写内容进行拼写检查。

使用敏捷编程,我就不需要做大量额外的工作了?
    一些人猜想敏捷编程技术需要实现大量额外的工作。然而,事实上,由于在每个组件上周转时间的减短和软件投入使用的加快,它降低了工作量并且使收回投资在相当大的程度上加快。
    事实上,由于开发者能够对这种软件做出快速的反应,管理者经常使用敏捷编程技术来拯救那些有麻烦的项目。例如,敏捷编程的创始人Kent Beck在1986年使用敏捷编程技术拯救了Chrysler Comprehensive Compensation (C3)项目。

除了在迭代中工作,敏捷编程还有什么不同?
    敏捷编程方法的基础是交流。这种方法强调以书面形式的论点进行面对面地交流。换句话说,与其一大群人工作在他们各自不同的工程块上,还不如大家坐在一起,就这些工程块形成一个团结的整体。
    不像别的编程方法,敏捷编程信赖项目组里那些差异非常大的工作在被称作 “临时拘留所”里的成员。一个项目组包括项目经理、设计师、开发人员、测试人员、客户、文档撰写者和参与这次迭代的一些其他人。因为项目块小到每个人都能理解,并且所有这些项目块的负责人都同心协力,所以用尽量少的时间、很小或者不修改就完成项目,通常是可能的。
    然而,敏捷编程中最值得考虑的是开发过程涉及每个人。客户(用户)从一开始就和项目有密切关系,这意味着开发组在“用户将如何与应用程序相互影响以及完成一个特别的任务所需要的步骤”上会做较少的错误假设。这个过程与许多公司常见的“写个规范,然后把它扔到墙边,对它置之不理,直到你在程序演示中被嘲笑”方式有很大不同。


(未完待续)


英文原文ABC: An Introduction to Agile Programming

译者:第一次尝试翻译“长篇”,还未全部完成,先发出来,期待各位的指正!翻译是件苦差事,算是体会了。如果各位在翻译方面,有什么指导性的建议,也欢迎提出,多谢各位!


欢迎大家访问我的个人网站 萌萌的IT人