首页
敏捷是另一颗银弹吗?
——转自吴穹博士

      这个问题其实是一个伪问题,因为大多数软件从业人员都相信没有银弹,但很多时候这一观念需要不断被强化。Ivar就说过,软件行业是一个时尚行业,人们不断将旧的概念包装和组合来创造新的概念。在过去十年中,先是面向对象/UML而后是CMM(I)被当成银弹来出售。据我个人的观察,敏捷有被神化成下一颗银弹的趋势。

      那么什么是敏捷(Agile)呢?虽然敏捷这个概念近来很火爆,但当你向敏捷一个的狂热支持者提出这个问题的时候,那多半会看到一张茫然的脸。所以,我从Wikipedia中找到了下面的定义,我相信其他版本的定义也大同小异:

      (Agile Software Development is a conceptual framework for software development that promotes development iterations, open collaboration, and adaptability throughout the life-cycle of the project.)

      在这个定义中,指出了敏捷的三个要素:迭代开发、坦诚合作和自适应性,下面我们分别对这三个要素进行以下分析。

      我们需要注意,迭代开发并不是一个新的概念,也不是敏捷所特有的。RUP在十年前就在强调迭代开发了。其实,敏捷在迭代方面并没有引入什么新的东西,而且我注意到目前在敏捷语境下已经出现了一些对迭代误用(这一话题在以后的文章里在展开吧)。下面是Wiki里有关敏捷和其他迭代开发方法的异同:

      绝大多数敏捷方法都沿用了迭代和增量式的开发方法,强调在短时间段内构建可以发布的软件。敏捷开发与其他开发模型的不同之处在于:时间段是按周而不是按月进行度量的,工作也以高度协作的方式展开。同样区分于其他模型的是,绝大多数敏捷方法将时间段限制为严格定死的时间盒。 

      (Most agile methods share other iterative and incremental development methods' emphasis on building releasable software in short time periods. Agile development differs from other development models: in this model time periods are measured in weeks rather than months and work is performed in a highly collaborative manner. Most agile methods also differ by treating their time period as a strict timebox.)

     坦诚合作其实才是敏捷的精髓,如Ivar所说,敏捷其实是有关Social Engineering的。敏捷的主要贡献在于他更多地思考了如何去激发开发人员的工作热情,这是在软件工程几十年的发展过程中相对被忽略的领域。如何将敏捷融入到整个软件工程的体系当中,这将是下一篇文章讨论的内容。 

      自适应性其实是一种后退,但是一种明智的、合理的后退。长期以来,人们经常试图将成功应用于建筑、机械等其他领域的项目管理方法强加到软件身上。这些方法往往非常强调可预测性,但由于软件本身的特性,往往给开发过程增加了不必要的成本。正如Walker Royce所说,开发软件其实更象拍电影,所以管理的挑战更大。敏捷提出的自适应性其实是减低了对项目可预测性的不合理要求,解放团队让他们关注与交付客户价值。

      自适应方法关注快速适应不断变化的现实情况。随着项目需求的变化,自适应的团队也会随之而变。自适应团队很难准确预测未来的状况。(来自Wikipeida)

      Adaptive methods focus on adapting quickly to changing realities. When the needs of a project change, an adaptive team changes as well. An adaptive team will have difficulty describing exactly what will happen in the future. (from Wikipedia)

      重温一下敏捷宣言---Agile Manifesto:
  • 人和交互重于过程和工具。
  • 可以工作的软件重于求全责备的文档。
  • 客户合作重于合同谈判。
  • 随时应对变化重于循规蹈矩。
  • Individuals and interactions over processes and tools.
  • Working software over comprehensive documentation.
  • Customer collaboration over contract negotiation.
  • Responding to change over following a plan.
      以下十一条是Agile Manifesto背后的基本原则,其实你可以看到前四条是有关迭代的, 后六条是有关团队合作的,最后一条是有关自适应性的。
  1. 通过快速,持续地交付可用的软件让客户满意。
  2. (按周而不是按月)频繁交付可用的软件。
  3. 可用的软件是首要的进度度量标准。
  4. 欢迎需求变更,即使来的很晚。
  5.  业务人员和开发人员要尽量做到每天在一起紧密工作。
  6. 面对面的谈话是最好的沟通方式,(在同一地点工作)。
  7. 参与项目的人员都应该抱有积极的态度。而且他们也得到信任。
  8.  持续关注技术的卓越程度和良好的设计。
  9. 简单至上。
  10. 构建自组织的团队。
  11. 让团队有规律地适应不断变化的环境。(以上11条来自Wikipedia)
  1. Customer satisfaction by rapid, continuous delivery of useful software.
  2. Working software is delivered frequently (weeks rather than months).
  3. Working software is the principal measure of progress.
  4. Even late changes in requirements are welcomed.
  5. Close, daily cooperation between business people and developers.
  6. Face-to-face conversation is the best form of communication (Co-location).
  7. Projects are built around motivated individuals, who should be trusted.
  8. Continuous attention to technical excellence and good design.
  9. Simplicity.
  10. Self-organizing teams.
  11. Regular adaptation to changing circumstances.(from Wikipedia).
      了解了敏捷之后,我们要如何面对时下火热的敏捷运动呢?首先是不要神化,不要迷信,不要迷失自我。存在即合理,你先有的开发流程和工作方式一定有它的合理性,应渐进地采纳敏捷中一些合适的实践,仔细审视各种工件的合理性和必要性,要防止借敏捷的旗号来偷工减料(尤其是放弃必要的设计和架构工作)。同时,也应该充分利用这次文化运动所产生的变革力量和热情,推动一些最佳实践(如迭代开发),打破一些对软件开发活动不合理的束缚。总之,要弄潮,而不要被潮水裹挟,Be Smart。
 
下一篇 >