来自:Michael Sweeney(AdTech和MarTech专家)
撰写:Kevin嚼薯片(微信:kevinwork)
备注:本文独家发布自金蝶云社区
无论你是制造汽车、设计航天器、还是建造房屋,项目管理的方法都是它们的底层基石,而就像以上提到的这些领域一样,软件开发也需要可靠的项目管理方法。
在软件开发行业中有许多不同的方法——一些是对传统方法的重新运用,另一些采用了相对新的方法。在这个领域中最常用的两种开发方法是“敏捷开发”和传统的“瀑布模型开发”。
大多数采用这两种模式的公司会认为他们所选择的方法在某些方面是有相对优势的,所以当我们在讨论:“哪一种更成功?”之前,我们应该看看他们的主要区别。
敏捷开发
敏捷开发诞生于上世纪90年代初,与这个世代的人有着许多相同的品质:大胆、年轻、灵活多变、永远在寻求新的挑战。这个模式正迅速成为项目管理方法的选择,这主要是因为它关注于优化开发时间和在尽可能短的时间内生成可操作的应用程序。
在软件开发行业中,关于是什么构成敏捷开发一直存在争论。也许最准确的定义可以在最早17位开发实践者创建的文档中找到,该文档被称为《敏捷软件开发宣言》:
- 独立性和交流互动 而不是 程序化和工具的运用。
- 使用工作软件 而不是 使用描述完整的文档。
- 重视用户的合作 而不是 重视合同的谈判。
- 响应变化 而不是 遵循计划。
从上面列出的几点可以看出,敏捷开发的核心是获得尽可能好的结果,而不是遵循严格的预定计划。
敏捷开发的一个共同特征是:“冲刺式项目”——主要项目中的小型项目通常拆分为两到四周的工作量。每个“冲刺式项目”都旨在生成新的功能或优化功能,并集中于应用程序中最重要的部分。这提供了一种前进的感觉,并允许你有回退的空间,因为随着每一次的开发,都需要重新评估产品的状态。
这种逐块的方法允许开发人员预见和响应所有重要问题,并能将项目的状态都反映在开发过程中,例如用户反馈或目标市场的变化。
瀑布模型开发
瀑布模型传统上用于建筑业和制造业,现在已经被应用到软件开发项目中。与敏捷开发的灵活性不同,瀑布模型有其严格的线性原则。项目从第一阶段开始,只有在前一阶段的所有工作都完成后才会进展到下一阶段。
敏捷vs瀑布:项目的成功率和失败率
为了确定敏捷和瀑布方法在众多领域中的成功率和失败率,有过不少的研究,而结果是一致的:
Ambysoft在2013年的项目成功率调查中得出结论:敏捷开发有64%的成功率,而瀑布模型开发只有49%。
左边是敏捷开发,右边是瀑布模型开发
Ambysoft的调查分析了一个项目成功或失败的主要因素时,发现了以下几点:
对比的维度分别为:产品质量、用户价值、投资收益率、时间成本
Standish Group 2015年的CHAOS报告也发现,敏捷开发比瀑布模型开发成功率更高:
- 成功的项目是:满足假定的进度、成本和范围的项目。
- 有风险的项目是:满足以上三个约束中的两个,即没有同时没有满足进度、成本或范围。
- 失败的项目是:指在项目完成之前被取消的项目,或者是已经完成但没有使用的项目。
统计数据清楚地表明,考虑到约束的满足程度,敏捷开发一般比瀑布模型开发交付更成功的项目。普华永道(PWC)在2017年进行的研究也支持了这一观点。该研究还表明,敏捷项目比传统项目成功28%。敏捷开发也很适合与分布式开发团队合作。
上面的资源清楚地表明敏捷开发交付的项目比瀑布模型开发更成功,但是软件开发的哪些领域有助于项目的成功和失败呢?这里有三个主要因素:
1. 软件开发过程
软件开发过程由几个阶段组成。在敏捷开发和瀑布模型开发中,阶段通常是相同的,但涉及不同的方法:
瀑布模型开发
瀑布模型开发被认为是传统的方法。由于模型的线性特性,开发过程的每个阶段都是单独考虑的,因此一个一个地开始和完结。
从理论上讲,这种方法应该能够更快地生成一个软件应用程序,然而,构建应用程序并不是那么简单和直接的。在软件开发中,开始时的一个小的、未被发现的bug,往往会导致整个项目崩溃。
需求分析-架构设计-界面设计-开发-测试和修bug-发布
敏捷开发
敏捷开发中相互关联的开发阶段,允许开发人员和用户更早和更快地访问和测试应用程序的每个部分,并能通过体验再去判断其余部分应该如何进行。这给双方都带来了巨大的好处,因为最终的结果包含了应用程序所需的所有设计元素、特性和功能。
1需求分析-2设计-3开发-4测试-5发布-6用户反馈
2. 应用程序的测试
应用程序要成功,质检测试与写代码同样重要。bug、性能问题和安全缺陷需要在开发过程的早期反复检测和解决,才能使项目继续进行。
敏捷开发
测试和质控会在敏捷开发过程中持续不断。一旦构建了应用程序的一个新的功能,就需要通过一系列测试(例如自动化单元测试)来识别bug和其他不兼容情况。许多团队还选择持续集成方式,这涉及到每天多次将所有开发人员代码副本添加到共享主线中。这确保了所有新功能与应用程序其余部分无缝集成,并有助于产品的整体质量。
瀑布模型开发
瀑布模型开发中的测试阶段是开发过程中完全独立的一部分,通常在构建了整个应用程序之后执行。由于这是第一次进行软件测试,所以充满bug和其他问题是很正常的。这将导致在测试阶段花费更多的时间,而更糟的是,由于用户的问题将推到下一个开发阶段,这个阶段出品的产品可能会被看作是半成品。
3.价值交付
每种方法都有一些缺点,在某些情况下,比较敏捷开发和瀑布模型开发的项目成功可能不再合适。最重要的是,对于如何定义一个成功的项目存在很多争议。对一些人来说,一个成功的项目是一个按时交付并且满足预算限制的项目,而对另一些人来说,它可能更多的是关于它交付了什么价值,以及它提供投资回报的速度。有一件事是确定的:价值交付是项目成功的可靠指标,也是两种开发方法的有形区别。
敏捷开发
敏捷开发就是采用增量的方法来构建软件,它将焦点从软件转移到软件背后的业务价值。敏捷开发使业务更有意义,因为它允许你更快地交付部分价值,以减少项目完全失败的风险。它允许更多的时间进行测试,并对正在开发的功能提供更多的指导。
在采用敏捷开发的原因中,调查的受访者提到了可以加速软件的交付(75%)和增强更改优先级的能力(64%)。
因为价值是以增量的方式交付的,所以产品在早期阶段是可行的。而当瀑布模型开发项目失败时(例如,当预算耗尽或没有达到最后期限时),它只留给你一个不可用的半成品。
敏捷开发项目的成功是用不同的因素来衡量的,但是在最近几年,用户满意度已经上升到了首位。
尽管在敏捷开发项目开发中仍然存在一定程度的风险,但至少开发团队和用户端拥有适当的控制,以在问题出现时处理它们,并对项目的范围和功能进行调整;,从而降低了构建错误产品的可能性。
瀑布模型开发
在瀑布模型开发中,价值交付出现在开发过程的末尾。如果项目超出了商定的预算,那么可能就没有时间和金钱来交付与客户商定的价值。
这并不是说瀑布模型开发是彻头彻尾的坏,它只需要非常仔细的计划和评估,而在开发过程的早期阶段,这对于许多项目来说是不可能的。我们知道,在软件开发中,并不是所有的事情都可以预先完全计划好。最初的假设很可能会改变,或者完全不现实。
3.客户与开发者的关系
开发成功应用程序的另一个关键是客户和开发者关系。没有一个明确的计划,最终的产品可能会与最初的预期有所不同,但这并不一定是坏事。此外,文档可能不够详细,这有时会使新团队成员进入状态的过程更长,更不用说一个项目的时间和成本是无法精确预测的。它们通常被指定为一个范围,这对于客户来说似乎风险更大。
敏捷开发
充分的合作、完全的透明度和强有力的沟通,对应用程序未来的成功至关重要。敏捷开发中强大协作的先决条件鼓励客户和开发者协同工作,并为客户提供更大的参与感和信任感。
瀑布模型开发
当项目的约束已知,并且客户对最终产品有精确、严格的需求时,瀑布模型开发法被证明是有用的,在开发过程中不太可能发生根本的变化。同时,瀑布模型开发中可预测的时间线使得创建项目文档和向客户报告进度变得更容易。
结论
上面对敏捷开发和瀑布模型开发项目成功率的比较,给我们留下了一个重要的结论:敏捷开发正在崛起,因为它保证了更高的成功率,更适合软件开发项目。
然而,还有比更深层次的东西。瀑布模型开发本身并不坏,向敏捷开发的不可阻挡的转变在很大程度上是由现代企业的期望、特定行业的性质以及当今处理项目的方式所决定的。
一些专家声称敏捷开发是一种思考方式,而不是一种真正的方法,它的出现是因为项目管理迫切需要改变。敏捷开发背后没有严格的理论,它是由实实在在的软件实践者创建的,他们分析自己的经验,分析在软件开发项目中什么可行、什么不可行,而形成的行之有效的方法。简而言之:敏捷开发之所以有意义,是因为它有效。
欢迎【关注】我,并给我【点赞】