为什么80%的码农都做不了架构师?>>>   

什么是敏捷开发

传统的软件开发过程中,我们往往会针对特定的用户需求,采用“瀑布模型”,从用户的需求开始一步步进行需求分析、软件设计、软件开发、软件测试以及软件交付与维护。

然而,这样的模型容易出现的问题就是,在需求分析阶段,用户的需求很有可能是不明确的,甚至用户根本不知道自己想要的产品是什么就匆匆同意了供方的“软件需求分析书”或“项目章程”(project charter)。然而过了这个阶段之后,虽然在设计和开发的过程中用户的需求很可能有变更,然而因为使用了这样的流程,为了确保软件开发的时间和资源成本控制,开发方往往不能通过回滚的方式去更改用户需求。

敏捷开发(agile development)就是为了解决用户需求不能变更这一问题。这一方式借鉴了生物学钟细胞周期的思想,采用这种开发方式,通过在瀑布模型的每一个阶段都加入一个或多个小的瀑布模型进行不断“迭代”,用户在软件设计或开发的阶段就可以经过几轮迭代不断完善自身需求并提出修改意见,从而使得所开发的软件能较好地符合用户的需求。这样的开发思想被广泛应用于开发需求不确定的情形下,如各类医用软件、社交软件或商用软件的开发中。

敏捷开发四大原则

强调用户个人需求以及交互体验

相对于传统瀑布模型开发方式中对于工具和过程重要性的强调,敏捷开发侧重于满足和支持用户个人的个性化需求以及用户所需的良好的交互式体验。(Individuals & interactions over processes and tools)因此,在设计和开发的过程中应当多鼓励用户通过“用户故事”(User cases)表达自己的想法并提出自己的个性化需求,从而使得软件工程的需求更加精准。

重视开发可用的软件

传统的瀑布模式中,软件的开发是“一锤子买卖”,即成品只有在最后开发完毕后才会出现,其中间过程只是伴随着(由开发者理解并记录)的各种文档。这样导致的问题就是,如果需求不符合用户要求,整个工程可能都要“推倒重来”,因此是一种巨大的时间(time)和资源(cost)浪费。这种浪费是由于用户的需求界限(scope)不确定造成的,所以我们又把时间、资源和需求界限称为项目管理的“三大限制因素”(The triple constraint)。然而,敏捷开发更强调的是先快速做出可用的成品,而不是需求分析文档、软件设计文档等用户无法使用(也通常根本不会看)的无用的文档。(Working software over comprehensive documentation)这样的好处就是,首先能用的软件很快就能被推出来(理想的情况是在设计阶段可能就有可实际盈利的产品了)。并且,即使用户对于某次“迭代”不满意,“推倒重来”的成本较之于整个项目作废的成本,也明显小了很多。

提倡用户参与开发过程

传统的瀑布模型式的软件开发过程中,用户给开发者交代需求、并且(往往经过“艰难谈判”之后)签订开发合同之后,开发的工作就全部交由开发者了。然而在敏捷开发过程中,开发者们应当提倡用户参与开发的过程(Customer collaboration over contract negotiation)。这样一来用户的需求就可以当场明确下来,二来就事实上大大缩短了由于需求不清造成的开发时间成本问题。

乐于接受需求变化

传统的“瀑布模型”开发方式中,由于“用户需求分析”和“项目开发章程”是开发者与用户签订的最终产品合同,用户和开发者都需要按照这些既定“计划”按部就班,不能在这之后随意做出更改,因此“瀑布模型”是不希望看到用户需求变化的。而敏捷开发的过程则完全相反,用户需求在不断变化中会变得越来越清晰,因此开发者往往也乐见他们提出新的需求变化(Responding to change over following a plan),从而使得产品“用得更好”或“卖得更好”。

何时用敏捷开发

那么,我们应该在什么情况下使用敏捷开发呢?敏捷开发一定比传统瀑布模型好吗? 这也不一定。关键还是取决于用户对于需求是否足够清晰。如果用户一开始就对需求很清晰“我就要这样的东西”,那么采用敏捷开发一次次、一轮轮去确认需求反而增加了用户的工作量(因为敏捷开发是需要用户参与并且收集意见之后进行产品迭代的)。然而在绝大多数情况下,当用户的需求不是很清晰、甚至完全不知道自己需要什么的时候,敏捷开发就不惜为一种可靠的开发方式。

参考资料

  1. 瀑布模型,URL: https://baike.baidu.com/item/%E7%80%91%E5%B8%83%E6%A8%A1%E5%9E%8B/9817778?fr=aladdin
  2. 敏捷开发,URL:https://baike.baidu.com/item/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/5618867?fr=aladdin
  3. Larson & Gray, Project Management The managerial process 7th edition, McGrawHill, 2016

转载于:https://my.oschina.net/Samyan/blog/2877799

“敏捷开发”怎么就“敏捷”了相关推荐

  1. 质量管理14条原则、敏捷开发宣言、敏捷开发十二原则

    一.质量管理大师爱德华·戴明博士经典的质量管理14条原则 1. Create constancy of purpose toward improvement of product and servic ...

  2. 敏捷开发本质 与 敏捷个人本质

  3. Leangoo_多团队,大规模敏捷开发实现过程

    通过敏捷看板来实现需求.迭代(支持燃尽图)和缺陷管理:此类型项目提供了单团队敏捷开发和大规模敏捷模板,适用于Scrum敏捷项目管理及产品研发. 本场景描述的是针对多个Scrum团队/敏捷团队,开发同一 ...

  4. Leangoo团队敏捷开发实现过程

    通过敏捷看板来实现需求.迭代(支持燃尽图)和缺陷管理:此类型项目提供了单团队敏捷开发和大规模敏捷模板,适用于Scrum敏捷项目管理及产品研发. 本场景描述的是针对10以下小型产品研发团队或小型项目的敏 ...

  5. Scrum敏捷开发工具实力推荐

    软件开发的项目经理一枚!大家都知道,一个好的敏捷工具对开发项目可以起到推波助澜.事半功倍的做用! 我们做敏捷开发,如何敏捷?当然敏捷工具的选用也是非常关键的因素,对我们也起着关键的作用! 我来介绍一下 ...

  6. scrum敏捷开发的几款工具

    做敏捷开发,如何敏捷?我们需要一系列成熟的工具帮助我们敏捷.敏捷开发工具的适合以及选用,对开发项目起着关键性的作用. 此篇介绍我们在scrum敏捷开发中发掘的几款工具,方便更多新加入的开发者上手. 1 ...

  7. 创业公司如何实施敏捷开发(转载)

    转载自LANCEYAN.COM 说起敏捷开发,并不是因为敏捷而敏捷.这几年的敏捷开发已经被很多敏捷咨询服务商神话了,这个东西并不是神器,实施了就可以解决所有软件公司的问题,而是要结合自己公司的特点和问 ...

  8. 敏捷开发的角色和职责阐述

    敏捷开发中的PO即Product Owner,产品或业务负责人,即熟悉该产品所有业务相关的逻辑.流程.设置等方面事宜的人员,一般可由产品经理担任,也可由熟悉业务的开发人员担任.如果敏捷团队是在一起办公 ...

  9. 105.敏捷开发模型

    文章目录 1.什么是敏捷开发? 2.敏捷开发宣言 3.站立会议的意义 4.敏捷开发想解决什么问题? 5.如果用敏捷的方式盖房子 6.敏捷开发和瀑布模型的差异 (1)敏捷开发是怎么做需求分析的? (2) ...

  10. 漫画:三分钟了解敏捷开发

    转载自 漫画:三分钟了解敏捷开发 什么是敏捷开发? 敏捷开发(Agile)是一种以人为核心.迭代.循序渐进的开发方法. 在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备 ...

最新文章

  1. 图灵2011年6月书讯【误区】【软件调试修炼之道】即将上市
  2. Silverlight 2 Beta 2发布
  3. 斜挎包长度到哪里合适_济宁百叶窗哪里好
  4. Spark基础:(六)Spark SQL
  5. 成功解决AttributeError: module 'tensorflow' has no attribute 'histogram_summary'
  6. Python-自定义函数-参数
  7. 调用webservice超时问题的解决
  8. 使用Helm将ASP.NET Core应用程序部署到Kubernetes容器集群
  9. 【粉丝投稿】人在职场,说话要小心!
  10. linux系统mysql创建表,Linux系统下手动新建数据库
  11. 研究员发现70个web缓存投毒漏洞,获奖4万美元
  12. BlackBerry刷机教程
  13. 免费的银行联行号查询/接口
  14. nmos和pmos导通条件
  15. 演出经纪人考试大纲、演出经纪人考试资料是什么?
  16. 2014-07-08 hibernate tenancy
  17. 基于Qt的智能车载系统嵌入式项目(正点原子IMX6ULL开发板)
  18. Linux C/C++ 零基础学习编程教程,Linux 系统编程教程
  19. Vue项目webpack打包部署到服务器
  20. Matlab界面语言切换,自由显示中文或英文语言

热门文章

  1. 记账本小程序7天开发记录(第三天)
  2. Deepin下安装搭建latex编写环境
  3. 购物车的简单添加与计算
  4. 使用json把php数据传给js处理
  5. C++ 11 新特性
  6. ecmall挂件开发实例二(转)
  7. 【图文】在windows7 下安装和配置Memcached 64-bit for Windows
  8. QQ空间那年今日 人人过往的今天
  9. 菜鸟涂鸦作品展_No.24
  10. Quartz.NET WinFrom 关闭程序后无法结束进程