软件开发模型汇总

news2024/11/20 0:41:37

1. 软件模型

在计算机刚刚诞生的年代,计算机是一种只有天才才能掌握的工具。人们对计算机的认知仅仅停留在程序的层面上,所谓的软件开发就是这些能够掌握计算机的天才们写的一些只能计算的二进制序列而已。但是随着技术的发展,软件的复杂度不断地提高,人们进入了大规模软件开发时代。[这时,人们发现,软件系统已经变得非常复杂,需要遵循一定的开发方法才能成功,称这些模式化的开发方法为开发模型]

当谈论软件开发模型时,我们指的是一种组织和管理软件开发过程的框架或方法。不同的软件开发模型提供了不同的方法来规划、设计、实施和测试软件项目。

软件模型存在以下几种:

  1. 瀑布模型
  2. 演化模型
  3. 螺旋模型
  4. 增量模型
  5. 敏捷模型
  6. 融合模型(DevOps)

2. 各类软件模型展开

[不知三军之权而图三军之任] [具体问题具体分析] [结合自身实际情况,实事求是]

2.1. 瀑布模型

顾名思义,瀑布模型就如同瀑布一样,从一个特定的阶段流向下一个阶段。

瀑布模型分为:瀑布模型和瀑布V模型

2.1.1. 瀑布模型

瀑布模型认为,软件开发是[一个阶段化的精确的过程],就像要造一艘航空母舰,首先需要知道航空母舰的具体参数(长、宽、高、排水量、航速等)。在这些参数的技术上需要对航空母舰进行设计,设计包括总体设计和详细设计。只有[设计的一清二楚的图纸,才能交付施工,制造出航空母舰的各个部分],否则制造出来的零件肯定拼装不到一起去。[制造完毕之后,要把这些零件一个一个的拼装起来,拼装成发动机、船舱等部分],并检查这些部分是否符合设计标准,[这就是集成测试]。最后将各个部分组合在一起,造出来一艘巨大的航母,[最后对这艘航空母舰进行检查、下水以及编队航行],这就是[系统测试和验收测试]。

而这个过程到软件开发的过程中便是:需求分析、总体设计、详细设计、编码、调试、集成测试和系统测试。如图:

在这里插入图片描述

在上图中,每一个阶段都有回到上一阶段的反馈线,这指的是,在软件开发中当在后续阶段发生缺陷的时候,可以把这个缺陷反馈到上一阶段进行修正。

从上图,我们可以看出瀑布模型的一个重要特点:

  • [软件开发的阶段划分是明确的,一个阶段到下一个阶段有明显的界限]。[当每个阶段结束后,都会有固定的文档或源程序流入下一阶段]。
    • 在需求分析阶段结束后,需要明确的描述软件需求的文档。
    • 总体设计结束后,需要有描述软件的总体结构的文档。
    • 详细设计结束后,需要有可以用来编码的详细设计文档
    • 而编码阶段结束后,代码本身被作为文档流入到下一阶段。
      因此[也称瀑布模型是面向文档的软件开发模型]

当软件需求明确、稳定时,可以采用瀑布模型按部就班的开发软件,当软件需求不明确或者变动剧烈时,瀑布模型中往往要到测试阶段才能暴露出需求的缺陷,造成后期修改困难,代价高昂,难以控制开发的窘境。

2.1.2. 瀑布V模型

瀑布V模型是瀑布模型的一种变体。随着对瀑布模型的应用,人们发现,缺陷是无法避免的,任何一个阶段都会在软件中引入隐患,而最后的测试也不能证明软件没有缺陷,只能是争取在交付之前发现更多的缺陷。测试成为软件开发中非常重要的环节,测试的质量直接影响到软件的质量。

在这里插入图片描述

整个瀑布模型在[编码与测试]打了一个对折,形成了一个对称的V字。瀑布V模型同标准瀑布模型一样,在进行完[需求分析]就将进入[总体设计]阶段,但是除总体设计外,需求分析还有一条虚线指向的系统测试。这指的是,需求分析的结果将作为系统测试的标准,即需求分析阶段也将产生同软件需求一致的系统测试用力;同时软件产品是否符合最初的需求将在系统测试阶段得到验证。依此类推,[总体设计对应了集成测试],[详细设计对应了单元测试]

瀑布V模型除了保持了瀑布模型的[阶段式文档驱动的特点],而且更强调了[软件产品的验证工作]。

2.1.3. 瀑布模型的缺点

虽然是经典的开发模型,但瀑布模型中存在一些难以克服的缺陷,即使在改进的瀑布V模型中还是存在。

首先,在瀑布模型中,需求分析阶段是一切活动的基础,设计、实现和验证活动都是从需求分析阶段的结果导出的。[一旦]需求分析的结果不完全正确,存在偏差,那么后续的活动只能放大这个偏差,在错误的道路上越走越远。[事实上],由于用户和开发者的立场、经验、知识域都不相同,不同的人对同一件事务的表述也不同,这就导致了需求分析的结果几乎不可能精确、完整的描述整个软件系统。[所以]瀑布模型的后期的维护工作相当繁重,而这些维护工作大多都是修正正在需求分析阶段引入的缺陷

其次,[瀑布模型难以适应变化]。在瀑布模型中精确的定义每一个阶段的活动和活动结果,而每一阶段都紧密依赖于上一阶段的结果。如果在软件后期出现了需求的变化,整个系统又需要从头开始的流程走一遍。

第三,使用瀑布模型意味着当所有阶段都结束才能最终的交付软件产品,所以提出需求后只能开始很长一段时间之后才能看到成果,才能发现软件产品究竟能不能满足客户的需求。

第四,文档驱动型的瀑布模型除了制造软件之外还将产生一大堆的文档,大部分的文档对客户没有任何意义,但完成这些对客户没有意义的文档却需要花费大量的人力。所以也称瀑布模型是一个重载模型

2.1.4. 瀑布模型适合知道什么样的项目,这样的项目有什么特点?

瀑布模型适用于具有相对稳定、明确、预定义需求的项目,尤其是小规模项目和对变更要求不频繁的项目。以下是适合使用瀑布模型的项目类型:

  1. 小规模项目:瀑布模型适用于小规模项目,因为项目的规模相对较小,开发流程可以按照线性的阶段顺序进行。

  2. 清晰的需求:如果项目的需求在项目开始时已经相对明确、详细定义,那么瀑布模型可以更好地控制开发过程,因为不会频繁改变需求。

  3. 低变更率:瀑布模型适合对变更要求不敏感的项目。一旦开发进入某个阶段,就不会频繁地改变已经确定的需求和设计。

  4. 稳定的技术环境:如果项目所涉及的技术和工具在整个开发过程中保持相对稳定,瀑布模型可以更好地应用。

  5. 有限的人力资源:在瀑布模型下,每个阶段都在前一个阶段完成后开始,这意味着团队在一个阶段完成后可以重新部署到下一个阶段。

  6. 较低的风险容忍度:对于那些风险较高或者风险管理不是主要焦点的项目,瀑布模型可能更合适,因为它强调阶段之间的严格控制和计划。

  7. 传统和正式项目:在一些传统、正式的项目环境中,瀑布模型可能更符合规定的流程和标准。

总之,瀑布模型适用于那些需要在项目开始时就明确定义需求、有稳定的开发环境、不频繁变更需求并且风险容忍度较低的项目。然而,[随着软件开发趋向更灵活的方法,瀑布模型在某些情况下可能不太适用,因为它缺乏适应性和对变更的容忍度。]

2.1.5. 举例说明一些项目

  1. 像一开始举例说明的航空母舰系统,该类系统从立项之初,明确了航母所拥有的特性,一般不会在定性之后,对航母的特征有非常剧烈的变化(特殊情况除外:[政治、经济等等])
  2. 部分项目形成产品线,需要从产品线中拿出版本实现特定区域、特定环节的项目。
  3. 人员较少、开发内容较少的项目

2.2. 演化模型

演化模型其主要思想为:[人们很难一次性的完全地理解用户的需求,设计出完美的架构,开发出可用的系统],这是由于[人的认知本身就是一个过程,这个过程是渐进的、不断深化的],对于复杂问题,“做两次”肯定能够做的更好。[那么],对于软件开发这个复杂而且与人的认知过程紧密相关的事情也应该是一个渐进的过程。

[一般的],一个演化模型可以看作若干次瀑布模型的迭代,当完成瀑布模型之后,重新进入下一次迭代周期,软件在这样的迭代过程中得以演化、完善。

[演化模型可以演变为螺旋模型、增量模型和原型法开发]

2.3. 螺旋模型

螺旋模型是将瀑布模型和演化模型结合起来,不仅体现了两个模型的优点,而且还强调了其他模型均忽略了的风险分析。螺旋模型的每一周期都包括[需求定义]、[风险分析]、[工程实现]和[评审]4个阶段,由这4个阶段进行迭代,软件开发每迭代一次,软件开发就前进一个层次。

在这里插入图片描述

螺旋模型基本做法是在“瀑布模型”的每一个开发阶段前,引入一个[非常严格的风险识别、分线分析和风险控制]。它将软件项目分解成一个个小项目,每个小项目都标识一个或多个主要风险,直到所有的风险因素都被确定。

螺旋模型强调[风险分析],使得开发人员和用户对每个演化层出现的每个风险均有所了解,继而做出应有的反应。因此,[螺旋模型特别适用于庞大而复杂、具有高风险的系统,对于这些系统,风险是开发不可忽视的、潜在的不利因素,它可能在不同程度上损害软件开发过程,影响软件产品的质量]。减小软件风险的目标是在造成危害之前,及时对风险进行识别、分析,决定采取何种对策,进而消除或减少风险的损害。

与瀑布模型相比,螺旋模型[支持用户需求的动态变化],[为用户参与软件开发的所有关键决策提供了方便],[有助于提高目标软件的适应能力],[为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发风险]。

2.3.1. 螺旋模型的缺点

  1. 采用螺旋模型,需要具有相当丰富的风险评估经验和专业知识。在风险较大的项目中,如果没有及时的标识风险,势必造成重大损失。
  2. 过多的迭代次数会增加开发成本,延迟提交时间。

2.4. 增量模型

演化模型的另一种形式是增量模型。在系统的技术架构成熟、风险较低的时候,可以采用增量的方式进行系统开发,这样可以提前进行集成测试和系统测试,缩短初始版本的发布周期,提高系统对用户的可见度。

对于增量模型,通常有两种策略。一种增量发布的方法,即首先做好系统的分析和设计工作,然后将系统划分为若干不同的版本,每一个版本都是一个完整的版本,后一个版本以前一个版本为基础进行开发,扩充前一个版本的功能。在这种策略中,第一个版本往往是系统的核心功能,可以满足用户基本的需求,随着增量发布,系统的功能逐步的丰富起来、完善起来。用户在很短的时间内就可以得到系统的初始版本并试用。试用的问题可以很快的反馈到后续开发中,从而降低了系统的风险。

  1. 每一个版本都是一个[完整的版本]。虽然最初的几个增量不能完全的实现用户需求,但这些版本都是完整的,可用的。
  2. 版本间的增量要均匀,这一点很重要。如果第一个版本要一个月,下一个版本要六个月,这种不均匀的分配会降低增量发布的意义,需要重新调整。

另一种策略是原型法。同增量发布不同,原型法的每一次迭代都经过一个完整的生命周期。当用户需求很不明确或技术架构中存在很多不可知因素的时候,可以采用原型法。在初始的原型中,针对一般性的用户需求进行快速的实现,并不考虑算法的合理性或系统的稳定性。这个原型的主要目的是为了获得精确的用户需求,或验证架构的可用性。一般情况下,会在后面的开发中抛弃这个原型,重新实现完整的系统。

2.5. 敏捷模型/敏捷方法

2001年2月,在美国的犹他州,17位“无政府主义”共同发布了《敏捷软件开发宣言》,在宣言中指出。

  • [尽早地、持续的]向客户交付有价值的软件对开发人员来说是重要的。
  • [拥抱变化],即使在开发的后期。敏捷过程能够驾驭变化,保持客户的竞争力。
  • 经常交付可工作的软件,从几周到几个月,范围越小越好。
  • 在整个项目中,业务人员和开发者紧密合作。
  • 围绕士气高昂的团队进行开发,为团队成员提供适宜的环节,满足他们的需要,并给予足够的信任。
  • 在团队中,最有效率的也是效果最好的沟通方式是[面对面交流]。
  • 可以工作的软件是进度首要的度量方式。
  • 可持续的开发。投资人、开发团队和用户应该保持固定的节奏。
  • 不断追求[优秀的技术和良好的设计]有助于提高minjiex。
  • 要简单,尽可能减少工作量。[减少工作量的艺术]是非常重要的。
  • 最好的架构、需求和设计都来自于一个[自我组织]的团队。
  • 团队要[定期的总结]如何能够更有效率,然后相应的[自我调整]。

敏捷方法族中目前包含11中开发方法

  • AD(Agile Database Techniques,敏捷数据技术)
  • AM(Agile Modeling,敏捷建模)
  • ASD(Adaptive Software Development,自适应软件开发)
  • Crystal(水晶方法)
  • FDD(Feature Driven Development,特征驱动开发)
  • DSDM(Dynamic Systems Development Method,动态系统开发方法)
  • LSD(Lean Software Development,精益软件开发)
  • Scrum。
  • TDD(Test-Driven Design,测试驱动设计)
  • XBreed。
  • XP(eXtreme Programming,极限编程)

2.6. 融合模型(DevOps)

它是将开发(Development)和运维(Operations)融合在一起的一种方法。

DevOps 是一种强调开发团队和运维团队之间协作、沟通和自动化的方法。它的目标是通过将开发和运维过程结合起来,实现更快的交付、更高的质量和更好的协作。DevOps 关注于消除开发和运维之间的壁垒,使软件交付变得更加持续和可预测。

在这里插入图片描述

DevOps 是一种文化理念、工具与实践的结合,目的是更快更可靠地向用户持续交付价值。其中最重要的是文化,文化要求 Dev 和 Ops 团队责任共担,目标一致,也要求整个团队持续学习,抱着成长的心态,Continuously Everything。其次 DevOps 离不开高效的工具集,工具是自动化的基础。最后我们要在各个环节追求最佳实践,不管是工具的使用,还是团队的协作模式,沟通方法上面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/971564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8S:二进制部署K8S(两台master+负载均衡nginx+keepalived)

文章目录 一.常见的K8S部署方式1.Minikube2.Kubeadmin3.二进制安装部署 二.二进制搭建K8S(双台master)1.部署架构规划2.系统初始化配置3.部署 docker引擎4.部署 etcd 集群(1)etcd简介(2)准备签发证书环境(3&#xff09…

CNN详细讲解

CNN(Convolutional Neural Network) 本文主要来讲解卷积神经网络。所讲解的思路借鉴的是李宏毅老师的课程。 CNN,它是专门被用在影像上的。 Image Classification 我们从影像分类开始说起。 我们举例来说,它固定的输入大小是100*100的解析度&#x…

初识Maven(一)命令行操作和idea创建maven工程

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供**构建**和**依赖**管理支持的工具。 构建过程包含的主要的环节:- 清理:删除上一次构建的结果,为下一次构建做好准备 - 编译:Java 源程序编译成 *.class 字节码文件…

服务端请求伪造(SSRF)

文章目录 渗透测试漏洞原理服务端请求伪造1. SSRF 概述1.1 SSRF 场景1.1.1 PHP 实现 1.2 SSRF 原理1.3 SSRF 危害 2. SSRF 攻防2.1 SSRF 利用2.1.1 文件访问2.1.2 端口扫描2.1.3 读取本地文件2.1.4 内网应用指纹识别2.1.5 攻击内网Web应用 2.2 SSRF 经典案例2.2.1 访问页面2.2.…

电脑怎么设置定时关机,2个简单的操作

电脑作为现代生活中不可或缺的工具,我们通常会在工作或娱乐过程中使用它。但有时候,我们可能需要在一段时间后自动关机,例如在下载完成后或在睡觉前。那么电脑怎么设置定时关机呢?为了满足这种需求,电脑提供了多种定时…

2023年铁路行业研究报告

第一章 行业概况 1.1 定义 铁路行业,依照全球行业分类标准(GICS)的划分,被归属为交通运输行业的一部分。该行业主要由提供乘客和货物铁路运输服务的公司构成。铁路行业涵盖各类铁路运输服务,包括城市铁路系统&#x…

32 实验三十二、OCL电路的研究

一、题目 仿真电路如图1所示。利用 Multisim 研究下列问题: (1)负载 R 6 R_6 R6​ 上能获得的最大输出功率; (2)电容 C 1 C_1 C1​、 C 2 C_2 C2​ 的作用; (3)当输入…

QTday5(QT连接TCP通信)

一、Xmind整理&#xff1a; C语言中的通信协议&#xff1a; 二、上课笔记整理&#xff1a; 1.QT中的服务器端的操作&#xff1a; .pro文件&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务…

OpenCV:实现图像的负片

负片 负片是摄影中会经常接触到的一个词语&#xff0c;在最早的胶卷照片冲印中是指经曝光和显影加工后得到的影像。负片操作在很多图像处理软件中也叫反色&#xff0c;其明暗与原图像相反&#xff0c;其色彩则为原图像的补色。例如&#xff0c;颜色值A与颜色值B互为补色&#…

微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽

微信小程序文档 - slots介绍 由上述文档看俩来&#xff0c;微信小程序官方并没有提及动态插槽内容。 uniapp文档 - slots介绍 uni官方也未提及关于动态插槽的内容 在实际使用中&#xff0c;直接通过 <<slot :name"item.xxx" /> 这种形式会报错&#xff…

数据库-多表设计

概述&#xff1a; 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本分为三种&#xff1a; 一对…

信息系统安全运维和管理指南

声明 本文是学习 信息系统安全运维管理指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 安全运维支撑系统 信息系统安全服务台 目的 对信息系统安全事件进行统一监控与处理。 要求 建立一个集中的信息系统运行状态收集、处理、显示及报警的系…

〔021〕Stable Diffusion 之 提示词反推、自动补全、中文输入 篇

✨ 目录 &#x1f388; 反推提示词 / Tagger&#x1f388; 反推提示词 Tagger 使用&#x1f388; 英文提示词自动补全 / Booru tag&#x1f388; 英文提示词自动补全 Booru tag 使用&#x1f388; 中文提示词自动补全 / tagcomplete&#x1f388; 中文提示词自动补全 tagcomple…

AI「反腐」,德国马普所结合 NLP 和 DNN 开发抗蚀合金

内容一览&#xff1a;在被不锈钢包围的世界中&#xff0c;我们可能都快忘记了腐蚀的存在。然而&#xff0c;腐蚀存在于生活中的方方面面。无论是锈迹斑斑的钢钉&#xff0c;老化漏液的电线&#xff0c;还是失去光泽的汽车&#xff0c;这一切的发生都与腐蚀有关。据统计&#xf…

uni-app 之 tabBar 底部切换按钮

uni-app 之 tabBar 底部切换按钮 1693289945724.png {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path": "pages/home/home","style": {"navigatio…

如何打war包,并用war包更新服务器版本

1.打包&#xff0c;我用的maven打包 先执行clean将已经生成的包清除掉 清除完&#xff0c;点package进行打包 控制台输出success&#xff0c;证明打包成功了 文件名.war的后缀就是生成的war包 2.将war包上传致服务器 一般会在war包加上日期版本上传至服务器 解压上传的war…

SpringMVC之入门

目录 1.SpringMVC工作流程 2.SpringMVC核心组件 2.1 DispatcherServlet 2.2 HandlerMapping 2.3 Handler 2.4 HandlerAdapter 2.5 ViewResolver 2.6 View 3.SpringMVC的入门 3.1 添加相关依赖 3.2 创建Spring-mvc.xml 3.3 配置web.xml 3.4 效果演示 4.静态资源处…

uni-app 之 安装uView,安装scss/sass编译

uni-app 之 安装uView&#xff0c;安装scss/sass编译 image.png image.png image.png 点击HBuilder X 顶部&#xff0c;工具&#xff0c;插件安装&#xff0c;安装新插件 image.png image.png 安装成功&#xff01; 注意&#xff0c;一定要先登录才可以安装 image.png 1. 引…

【树形权限】树形列表权限互斥选择、el-tree设置禁用等等

需求&#xff1a;按照权限管理配置的数据权限树展开&#xff1b;点击查看按钮后进入其他指定机构选择弹窗为一树形结构 本文章对项目中出现得关键点进行总结。 一、实现如上树形列表 在 element 官方表格示例中&#xff0c;实现树形表格列表数据渲染&#xff0c;非常简单。只…

Java分别用BIO、NIO实现简单的客户端服务器通信

分别用BIO、NIO实现客户端服务器通信 BIONIONIO演示&#xff08;无Selector&#xff09;NIO演示&#xff08;Selector&#xff09; 前言&#xff1a; Java I/O模型发展以及Netty网络模型的设计思想 BIO Java BIO是Java平台上的BIO&#xff08;Blocking I/O&#xff09;模型&a…