Agile Software Development

敏捷编程

  • 首先说点历史,随着软件行业的迅猛发展,软件系统的规模越来越大,复杂程度越来越高,开发周期与开发成本失控的问题愈发严重,同时软件的可靠性也无法保证。为解决这一系列问题,软件行业很自然的求助于传统的工程学、管理学方法。“软件工程学”由此因运而生。
  • 以“瀑布模型”为代表的传统软件开发模型针对软件生命周期的各个阶段提供了一套规范,以期使工程的进展达到预期的目的。核心强调在软件开发活动中, 所有的活动计划, 日程安排, 交付工作都要直接或间接的和需求保持一致,同时强调软件需求必须形成“ 文档”
  • 这种基于计划的生命周期的软件开发方法曾极大地促进了软件行业的发展,但现如今却愈感“有心无力”。为了适应现代的商业环境与之对应的“敏捷编程”的开发方法提了出来。包括诸如“极限编程”、自适应软件开发和功能驱动开发等。

个体和交互 胜过 过程和工具

  • 敏捷开发强调把关注点回归到“”上,其背后的哲学思想可追溯到康德的“人即目的”。同时,主张面对面交流客户参与开发,弥补了缺少文档而产生信息流通不畅问题, 认为开发人员之间、开发人员和客户之间相互协作、相互信任、彼此尊重是保证沟通成功的必要条件。

背后的商业环境现实就是——开发过程中的人力资本的高企

  • 一个典型的项目花在人力上的金钱是花在硬件上的时间的 20 倍, 这意味着一个项目每年要花 20 万美元在程序员身上, 而仅仅花1万美元在电脑设备上。很多聪明的程序员说: “ 我们如此聪明, 发现一种方法可以节省20%的硬件开销” ,然后他们使得源程序大且难懂和难以维护, 他们会说: “ 但是我们节省了20%或者2万美元每年, 很大的节省”。但财务事实告诉我们,如果程序简单而且容易扩展,我们将至少节省10%的人力开销,这将是一笔更大的节省。同时,软件开发的职业本身也决定了数量少但精干的团队的效率与产出大于臃肿、混乱的大团队。敏捷开发一般适用于20-40人、甚至更少。

可以工作的软件 胜过 面面俱到的文档

  • 区别于传统的软件开发模式,客户只有在系统被开发完成以后才能真正去体会它。敏捷编程通过要求不断交付可用的软件,周期越短越好,加强客户的反馈来缩短开发的周期, 同时获得足够的时间来改变功能和获得用户的认同。

背后的商业环境现实就是——“快鱼吃慢鱼”的竞争模式。

  • 区别于工业社会的利用流水线、规模化的生产模式,信息时代更强调对用户需求的快速响应。标准化生产所带来的低成本、高可靠性的特点不能直接保证市场的高份额。相反,对用户需求的细腻把握和快速响应却是以用户为导向的服务型公司的生命线!

客户合作 胜过 合同谈判

  • 敏捷开发要求在项目过程中,业务人员与开发人员必须在一起工作,参与开发,采用高效信息的交互平台以及能够减少歧义沟通和交流的方式进行支持。敏捷方法完成了从重视文本到重视对话,从重视书写到重视理解的转换。

背后的商业环境现实就是——用户无法对其自身需求进行有效描述

  • 最经典的例子莫过于苹果的iPad、iPhone了。在乔布斯没有推出iPhone之前,用户是不知道他们需要智能机,更准确地来说就是无法对智能机的需求进行有效描述的。这也就是为什么诸如诺基亚、摩托罗拉等公司失败的原因之一。他们不是没有市场部门,不是没有进行市场调研、用户需求分析,问题在于一般用户在缺乏相关知识与指导的情况下是无法对自身需求(特别是潜在需求)进行有效描述。这一缺陷在市场竞争随着节奏的加快显得愈发致命!

响应变化 胜过 遵循计划

  • 敏捷开发的口号是拥抱变化,即欢迎对需求提出变更,甚至是在项目开发后期。要善于利用需求变更, 帮助客户获得竞争优势。

背后的商业环境现实就是——试错成本低、执行力要求高

  • 现代社会最重要的特点就是多元化,用所谓的“互联网思维”说就是“去中心化”,具体到个人应该就是 Open mind。这一社会现实反应在软件开发上就是试错成本变得相当较低。但与此同时,快速变化的商业大环境也对执行力提出了高要求,而执行力的关键指标就是对变化的快速响应!

相关推荐