如何选择正确的软件开发模型?

译文
开发 前端
软件开发模型最早在上世纪50年代至60年代引入软件开发社区。在那个时候,将一切都集中起来是一个很好的做法,而编程是必须规划的过程之一。

【51CTO.com快译】软件开发模型最早在上世纪50年代至60年代引入软件开发社区。在那个时候,将一切都集中起来是一个很好的做法,而编程是必须规划的过程之一。

如今,这个过程在日常的项目管理中非常必要,因为如果没有特定的事件流,项目开发可能会非常混乱。因此,从项目规划到发布和维护的任何活动都有一个所有人都需要使用的概念框架。

因此,很多组织表示:

  • 与未定义的软件开发过程作斗争。
  • 缺乏有关项目管理技术的某些知识。
  • 寻求优化和构建开发阶段的方法。
  • 希望加快交付过程。
  • 降低项目风险。
  • 缩短项目时间和过多的成本。

本文将定义软件开发生命周期,概述七个最常用的软件开发模型,并找出它们在项目开发中的差异和好处。此外还将对软件工程中的软件模型进行比较,以帮助组织找到最适合的模型。

为什么需要软件项目开发模型?

每个软件外包公司都有自己的软件开发生命周期(SDLC),它通常包含以下应用程序开发阶段:

  • 需求分析
  • 设计
  • 开发和测试
  • 执行
  • 文档
  • 维护

 

这些阶段标志着软件项目开发的通常过程,从收集客户需求到推出具有全天候支持的成熟产品。很多组织通常更喜欢个性化的工作流程和方法,因此有一些包含这些开发阶段的概念模型。这些模型具有预先编写和建立的关键原则、基本流程和时间表,因此将其称为方法论。

以下是各具特色的七种软件开发模型,它们分别是:

  • 瀑布模型
  • 迭代和增量模型
  • 螺旋模型
  • V型模型
  • 原型模型
  • 敏捷模型
  • DevOps模型

软件开发过程模型的价值在于过程优化,以及作为团队绩效提升的最终因素。每个模型都非常具体,并且组织在实施时应该专注于它们的技术、愿景、使命和节奏。这就是为什么有这么多人来寻求适合其组织的软件开发模型的原因。

根据调研机构Statista公司的调查,全球最常用的软件工程过程模型是DevOps模型,占到36%;紧随其后的是敏捷模型,将近32%;排名第三的是看板(Kanban)模型,全球有13%的IT社区都在使用。

那么,软件开发模型有哪些?当今组织使用的软件工程模型的类型是什么?

什么是软件开发模型以及它们如何工作?

1.瀑布模型

瀑布模型是软件开发领域引入的第一个软件项目开发模型。它也被称为线性模型,因为该模型意味着在进入下一个阶段之前要完成以上所有阶段。因此,该模型逐步地线性运行,不可能与任何阶段重叠。其原理如下图所示:

确实,该模型类似于现实中的瀑布,它有起点和终点,就像水流从悬崖上落下,没有任何中断或改变。

(1)哪些因素有助于选择瀑布方法?

  • 短期项目。
  • 明确、固定且记录良好的要求。
  • 可理解的静态技术。
  • 稳定的产品定义。
  • 各种产品支持资源。
  • 产品负责人参与度低。
  • 严格设定的时间表。
  • 无法更改的固定预算。

而在所有其他情况下,可以选择其他模型来进行项目开发。

瀑布模型的主要优点是该模型在执行的任务及其时间表方面有严格的顺序。由于顺序是固定的,很多任务可以很容易地在软件部门之间进行划分,并监控任务完成情况。客户可能会发现瀑布模型是一种可靠的方法,因为他们会事先了解从开始到结束的整个过程。当然瀑布模型也有一些缺点。例如瀑布模型很难对任务进行修改,这是因为应用程序开发越深入到另一个阶段,就越难返回并更改其概念基础或文档。

(2)瀑布模型的优缺点

2.迭代和增量模型

在迭代和增量模型中,开发从实现几个小需求开始,然后通过多次迭代(增量)增强产品。增强过程以增量(迭代)的方式进行,直到应用程序功能完成并准备部署为止。只开发软件的一小部分是一种明智的方法,因为可以轻松查看已完成的工作,快速确定进一步的要求,并继续实施或对应用程序进行一些更改,然后再继续下一步。无论采用哪种方式,组织都将从这些解决方案中受益,因为每次新的迭代都会带来一个新的、更好的软件版本。

与瀑布模型不同,迭代模型允许一次执行多次迭代并同时接收产品输出。该模型提供的成功关键在于验证软件的版本,并根据要求对其进行测试。这样可以更好地了解团队在项目中所处的位置、产品的功能验证,以及对产品成功的信心。

(1)迭代模型适用于软件开发的哪些地方?

  • 系统要求得到明确定义和充分理解。
  • 随着时间的推移,可能会出现其他要求。
  • 当团队学习新技术并同时处理项目时。
  • 仅在合同规定的特定迭代需要时才使用特定资源。
  • 由于高风险特性,未来业务目标可能会发生变化。

迭代模型的最大优点是它允许在开始开发软件时发现功能和设计的缺陷。在迭代中工作并验证每个开发周期将产生无风险的产品,能够添加或删除功能,以及改变最终产品的成本和时间表。而除了这些优点之外,还应该讨论存在的一些缺点。

(2)迭代模型的优缺点

3.螺旋模型

螺旋模型是迭代模型和瀑布模型的组合。从迭代方法出发,它采用了循环开发方法;而从瀑布方法出发,它借用了一种系统的方法和控制过程的能力。螺旋模型的重点在于风险分析。此外,它还以迭代的方式交付项目,并围绕其中心螺旋形旋转。

螺旋模型分为4个阶段设计。开发中的产品在其迭代过程中都经过这些阶段,在此方法中也称为螺旋。这些阶段包括:

  • 识别
  • 设计
  • 构建
  • 评估(风险分析)

识别是收集业务需求的最佳阶段。这是在一个基本的螺旋中完成的。螺旋模型确定了系统、子系统和单元要求。除了收集需求之外,这个阶段还涉及客户和系统分析师之间的沟通,以了解部署所需的内容。

设计也从概念设计的基本螺旋开始,包括随后的构建设计、模块逻辑设计、物理产品设计和最终设计的螺旋。

构建阶段是在每一个螺旋模型中开发实际软件产品。在基本螺旋中,当概念需要根据其可行性进行评估时,组织应该开发一个POC(概念证明)并尝试获得有价值的客户反馈。

了解所有要求和设计细节后,可以生成一个编号的软件工作模型(构建)版本。客户审查所有构建并提供反馈。

评估(风险分析)是识别、估计和监控技术可行性和管理风险的过程。例如,计划逾期和成本超支。

在客户评估构建之后,下一次迭代就会出现。这将遵循线性方法,以确保客户提供的反馈得到实施。软件开发生命周期(SDLC)实际上包括这些螺旋迭代,直到其最终确定。

(1)什么时候使用螺旋模型?

当需要随着产品的成熟度学习时:

  • 有预算限制,需要预见风险。
  • 有一个中等或高风险的项目需要执行。
  • 有一个长期项目可能会发生变化。
  • 对客户而言,要求不明确。
  • 由于其复杂性,要​​求需要更加明确。
  • 主要产品必须分几个阶段发布才能获得有价值的客户反馈。
  • 希望在软件开发生命周期(SDLC)期间对产品进行重大更改。

基于螺旋模型的适用性,以下来了解其优缺点。该模型的主要优点是可以将元素添加到产品中,以防它们可用或已知。此外,螺旋模型在产品开发的早期阶段就让用户参与进来,这允许接收建设性的反馈。

(2)螺旋模型的优缺点

4.V型模型

V型模型允许按照V形顺序执行项目。该模型的另一个名称是验证和确认模型,因为它基于瀑布模型。然而在软件开发生命周期(SDLC)中,每个开发阶段也包括测试。因此,执行一个阶段,完成之后,再进行测试,然后才能进入下一个阶段,该阶段的结构与前一个阶段相同。

在V型模型中,开发阶段与测试阶段相对应,它们并行进行。这意味着可以在图像的一侧看到验证阶段,在另一侧看到确认阶段。这些方面正在与编码阶段相结合。

根据上图,有4个验证阶段,分别是:

  • 需求分析
  • 系统设计
  • 架构设计
  • 模块设计

验证阶段还包括4个阶段:

  • 单元测试
  • 集成测试
  • 系统测试
  • 验收测试

如上图所示,编码阶段将其他两个阶段结合在一起,形成V形。

V形模型与瀑布模型具有相同的适用性。必须从软件开发生命周期(SDLC)的一开始就明确定义要求,因为返回并进行更改会增加产品开发成本。该模型最适合医疗保健行业。

(1)什么时候使用V型模型?

  • 有明确定义、记录在案且稳定的要求。
  • 使用的技术也很稳定,项目团队对其有充分的了解。
  • 所有要求都非常明确。
  • 该项目是短期的,并不复杂。

V型模型的最大优点是可以在软件开发生命周期(SDLC)中轻松理解、应用和管理它。然而与其相反,当变更即将发生时,该模型缺乏灵活性,并且客户实施这些变更的成本非常高,因为它们会引发额外的开发成本。

(2)V型模型的优缺点

5.原型模型

原型模型是软件应用程序原型的创建,它显示了不完整产品的最小功能的可视化表示。这有助于在开发阶段的早期了解客户需求,并获得有价值的反馈。该模型包括:

  • 确定基本要求
  • 初始原型开发
  • 原型审查
  • 原型修订和增强

如今有不同类型的软件原型,分别是:

  • 快速原型设计——在理解需求的基础上构建系统,更清楚地理解用户需求。
  • 渐进式原型——基于理解的需求开发功能有限的功能原型,并在过程中添加其他需求。
  • 增量原型设计——构建大量功能原型形成一个系统,并将它们组合在一起。
  • 增量原型设计——它是一个具有三个阶段的Web开发领域:HTML中的基本原型、原型服务层、在最终原型中实现和集成。

(1)原型模型何时何地适用?

原型设计适用于具有高水平用户交互的在线软件系统开发。例如:

  • 要求用户填写表格的系统。
  • 需要大量数据处理的软件。

原型模型也有其优点和缺点。当然,它们取决于组织的需求,并在选择这一模型之前加以考虑。

(2)原型模型的优缺点

6.敏捷模型

敏捷模型基于迭代和增量模型,但它更具适应性,并以更快的速度交付工作软件。由于满足了客户的需求并且非常灵活,敏捷模型带来了更高客户满意度。敏捷项目倾向于将生产过程分解为增量构建,或者称之为迭代。每个迭代都有一个1到3周的时间表,包括同时在不同项目领域工作的不同团队。这可以减少生产时间,并降低生产成本。

每次迭代都由相同的过程组成,它们是:

  • 规划
  • 需求分析
  • 设计
  • 编码
  • 单元测试
  • 验收测试

在每次迭代结束时,都会得到提供给客户的产品,以了解应用程序是否是根据客户的要求构建的,并接收有关正在完成的工作的反馈。

敏捷模型分为几种方法,它们都有自己的原则。例如,

  • 软件统一过程(RUP)
  • Scrum
  • 看板(Kanban)
  • ScrumBan
  • 极限编程(XP)
  • ScrumXP
  • 迭代开发
  • 精益软件开发

(1)什么时候使用敏捷模型?

  • 在中小型软件项目中。
  • 生产所需的多种产品。
  • 当需要将开发过程分解为更小的部分时。
  • 当需要软件交付加速时。
  • 当团队需要灵活改变优先级时。
  • 何时需要提高软件质量、生产力和交付的可预测性。
  • 促进降低项目风险,并实现降低成本的可能性。
  • 有效管理项目中的分布式团队。

与其他模型一样,敏捷模型也有优缺点。例如下图。

(2)敏捷模型的优缺点

7.DevOps模型

DevOps模型具有促进自动化和团队协作的独特原则。因此,该模型的主要重点是增强由顺序反馈驱动的团队之间的协作。DevOps模型类似于敏捷模型,但由于DevOps团队成员和管理人员之间的协作重点而有所不同,而敏捷模型则侧重于客户参与。

(1)DevOps模型执行什么任务?

  • 持续集成和交付
  • 微服务
  • 基础设施即代码
  • 监控和记录
  • 沟通与协作

(2)什么时候使用DevOps模型?

  • 在复杂的项目中。
  • 需要质量保证和测试的项目。
  • 包括来自多个部门的大型团队的项目。

DevOps模型也有一些优点和缺点。这取决于组织计划采用此模型的项目以及是否已为艰难的采用曲线做好准备。

(3)DevOps模型的优缺点

最常用的软件开发模型比较

由于全球最常用的软件开发模型是DevOps模型、敏捷模型(Scrum和看板)和)和瀑布模型,以下是对这些软件开发模型比较的研究。

这张表格显示了交付各种模型的所有显著特征。

2020年,62%的团队在为满足组织需求而采用DevOps模型进行开发。然而,采用敏捷模型与DevOps模型也可以降低生产成本,而采用敏捷模型的组织的数量与DevOps模型不相上下。

至于瀑布模型,其成功率为26%。所以如果比较瀑布模型和敏捷模型哪个更好,显然敏捷模型在比较中获胜。

如何选择最适合组织的软件开发生命周期(SDLC)模型?

组织可以通过几个重要步骤来选择正确的软件开发模型:

(1)步骤1:查看所有现有的软件开发模型,以了解哪一种更接近组织的信念和原则以及业务需求。

(2)步骤2:是否首先听取利益相关者的任何需求?组织需要听取每个利益相关者的意见,因为可以对其最终决定产生影响。

(3)步骤3:考虑验收标准,并尝试回答以下问题:

  • 模型是否适合团队的规模和他们的技能?
  • 模型是否适合项目中使用的技术?
  • 模型是否适合客户和利益相关者?
  • 模型是否适合项目规模及其复杂性?
  • 如果选择这种模式,是否存在项目风险?
  • 产品开发过程中是否会有任何变化?
  • 需求是固定的还是灵活的,并且可能在生产过程中出现?

(4)步骤4:确定哪种模型适合意图。

(5)步骤5:根据项目优化模型。

现在已经了解了所有软件开发模型的细微差别,相信组织可以找到提高其性能的模型,并继续进行产品开发。

结语

软件工程模型是一种很好的做法,因为它可以确保产品开发的最佳质量。软件工程模型比较是最有用的工具之一,允许根据组织的需求选择模型。项目活动依赖于规划良好的方案,团队根据该计划工作得越好,软件处理就越好。组织要根据其内部的软件开发生命周期(SDLC)选择其软件模型,需要了解每个模型代表什么,然后定义最适合的模型。如今大部分的开发人员管理和使用DevOps模型、敏模模型(Scrum和看板)和瀑布模型。所有这些模型都根据其流程而不同,但它们的共同点是产品开发的战略方法,因此在输出方面取得了成功。

原文标题:7 Software Development Models: How to Choose the Right One?,作者:Nazar Kvartalnyi

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

责任编辑:华轩 来源: 51CTO
相关推荐

2009-08-12 18:39:01

软件开发的生命周期

2020-05-10 20:05:43

物联网软件开发IOT

2013-05-09 09:26:59

软件开发开发方法

2024-09-23 15:02:40

2020-12-03 15:54:15

软件开发工具

2013-05-29 19:25:14

JATCOPTC软件开发

2024-02-23 11:13:35

2022-03-09 10:18:48

UnixC语言软件

2022-09-07 11:56:53

汽车软件

2009-02-27 14:33:00

服务器软件企业服务器软件

2022-11-29 07:14:56

NLP语言模型

2020-08-17 12:55:38

.NetJava软件开发

2009-02-10 17:11:53

SaaSSaaS开发PaaS

2015-03-02 09:35:07

软件开发

2009-03-04 17:48:05

虚拟化VMware微软

2009-06-26 09:32:09

软件开发

2019-05-07 11:18:51

机器学习人工智能计算机

2012-06-18 09:34:14

2020-06-24 11:21:47

软件开发面试

2017-03-17 08:15:17

敏捷软件开发软件开发
点赞
收藏

51CTO技术栈公众号