文档章节

“敏捷开发”怎么就“敏捷”了

SamYjy
 SamYjy
发布于 11/18 17:12
字数 1576
阅读 26
收藏 0

什么是敏捷开发

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

然而,这样的模型容易出现的问题就是,在需求分析阶段,用户的需求很有可能是不明确的,甚至用户根本不知道自己想要的产品是什么就匆匆同意了供方的“软件需求分析书”或“项目章程”(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

© 著作权归作者所有

共有 人打赏支持
SamYjy

SamYjy

粉丝 60
博文 55
码字总数 101820
作品 0
其它
程序员
私信 提问
你大概走了假敏捷:《手绘敏捷宝典》在此,还不来收!

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由薄玉桴发表于云+社区专栏 今天你敏捷了没有?“敏捷”在互联网和软件开发领域从涓涓细流逐渐演变为行业潮流,往小了说是改...

腾讯云+社区
09/21
0
0
敏捷开发一千零一问系列之一:序言及解决问题的心法(无我)

这是敏捷开发一千零一问系列的第一篇。(之一,之二,之三,问题总目录) 也是般若敏捷系列第十篇。(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 做敏捷...

疯狂的艺术家
2012/03/02
0
0
【外刊IT评论】敏捷十年,成效几何?

自从编程界的领袖们发表旨在通过接受需求变更,加强同用户合作,缩短软件提交周期来改善软件开发过程的敏捷软件开发宣言至今已近10年之久了。 敏捷宣言制定2001年2月,当时一群软件开发者聚集...

红薯
2010/11/17
1K
7
敏捷开发一千零一问系列之二:序言及解决问题的心法(无住)

这是敏捷开发一千零一问系列的第二篇。(之一,之二,之三,问题总目录) 也是般若敏捷系列第十一篇。(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 无住...

疯狂的艺术家
2012/03/02
0
0
敏捷开发一千零一问系列之三十:敏捷怎样估算(中)?

方案 方案一:用早期功能点估算法进行报价或早期制定项目计划 这个在之前谈到过很多次了,具体可以参考敏捷开发绩效管理系列的之六、之七。另外在敏捷开发用户故事分类与组织结构(一期) (...

wbf961127
2017/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

windows下让 jar 在后台运行的办法

windows下 运行 java jar 不出现 命令行 窗口 新建一个披处理 run.bat,内容如下 @echo off start javaw -jar xx.jar exit 双击运行即可。...

glen_xu
12分钟前
1
0
jdk1.8 lambda stream 指定的对象属性进行去重

原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。 解决方案: //去重,共同信息保存到bizPledgeSupplierVOs里bizPledgeSupp...

INSISTQIAO
14分钟前
0
0
vue nextTick深入理解---vue性能优化、DOM更新时机、事件循环机制

定义[nextTick、事件循环] nextTick的由来: 由于vue的数据驱动视图更新是异步的,即修改数据的当下,视图不会立即更新,而是等同一事件循环中的所有数据变化完成之后再统一进行视图更新。...

JamesView
22分钟前
1
0
常用汉字编码

GB2312 仅包含大部分的常用简体汉字,但已经不能适应现在的需要; GB13000 由于GB2312的局限性,国家标准化委员会制定了GB13000编码; 但由于当时的硬件和软件都已经支持了GB2312,而GB13000...

晨猫
25分钟前
1
0
纳尼?我的Gradle build编译只要1s

https://juejin.im/post/5c00ec39e51d4555ec0394f6

SuShine
26分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部