2.2、软件生命周期模型介绍

软件生命周期模型

  • 1. 传统软件过程模型
    • 1.1 瀑布模型Waterfall model
    • 1.2 V模型
    • 1.3 原型模型(降低需求不明确的风险)
    • 1.4 增量模型(降低需求变化风险)
    • 1.5 螺旋模型
    • 1.6 喷泉模型
  • 2. 现代模型
    • 2.1 基于构件的开发模型
    • 2.2 统一过程RUP:Rational Unified Process
    • 2.3 敏捷开发
      • 极限编程
  • 3. 选择软件过程模型

1. 传统软件过程模型

1.1 瀑布模型Waterfall model

在这里插入图片描述
特点:线性模型、阶段间具有顺序性和依赖性、具有推迟实现的观点。
瀑布模型是一种使用广泛、以文档为驱动的模型,每个阶段都有与之相关联的里程碑和可交付的产品,每个阶段结束前完成文档审查,及早改正错误。

  • 实际使用的都是带反馈的瀑布模型
    在这里插入图片描述
  • 瀑布模型缺点
    1. 增加工作量:各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
    2. 开发风险大:由于开发模型是线性的。用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险。
    3. 早期错误发现晚:早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
    4. 不适应需求变化:不能反映实际的开发方式,软件开发需要迭代;无法适应需求不明确和需求的变化。
      瀑布模型适用于系统需求明确且稳定、技术成熟、工程管理较严格的场合,如军工、航天、医疗。

1.2 V模型

在这里插入图片描述
上层出现问题,则逐级下沉来修复。

1.3 原型模型(降低需求不明确的风险)

原型化模型、快速原型模型。

原型prototype:一个部分开发的产品,是客户和开发人员能够对计划开发的系统的相关方面进行检查。如图书借阅系统:主要界面、智能家居系统:少量室内信息监视和电器控制。

原型化的目的:明确并完善需求,如演示原型;研究技术选择方案,如技术验证原型。

原型结果:抛弃原型;把原型发展成最终产品。
在这里插入图片描述
原型模型的优缺点:

  • 优点:减少需求不明确带来的风险
  • 缺点:构建原型采用的技术和工具不一定主流;快速建立起来的系统加上连续的修改可能导致原型质量低下;设计者在质量和原型中进行折中;客户意识不到一些质量问题。
  • 适用场景:客户定义一个总体目标集,但是他们并不清楚系统的具体输入输出;或开发者不确定算法的效率、软件与操作系统是否兼容以及客户与计算机交互的方式。此时原型模型是很好的选择。

1.4 增量模型(降低需求变化风险)

增量:满足用户需求的一个子集,能够完成一定功能、小而可用的软件。例如文字处理软件:
在这里插入图片描述

  • 增量模型
    在这里插入图片描述
    在这里插入图片描述

  • 增量方式:增加新功能和迭代优化
    在这里插入图片描述

  • 增量模型特点
    增量模型是一种非整体开发的模型,是一种进化式的开发过程。
    增量模型从部分需求出发,先建立一个不完整的系统,通过测试运行这个系统取得经验和反馈,进一步使系统扩充和完善。
    如此反复进行,直至软件人员和用户对所设计的软件系统满足为止。
    增量模型结合了原型模型的基本要素和迭代的特性,采用了基于时间的线性序列,每个线性序列都会输出该软件的一个增量。
    每个增量的开发可用瀑布或快速原型模型。

  • 增量模型优缺点
    优点:

    1. 增量概念的引入,不需要提供完整的需求,只要有一个增量出现,开发就可以进行;
    2. 软件能够更早投入市场;
    3. 在项目的初始阶段不需要投入太多的人力资源;
    4. 开放式体系结构,便于维护;
    5. 产品逐步交付,软件开发能够较好地适应需求的变化;
    6. 能够看见软件中间产品,提出改进意见,减少返工,降低开发风险。

缺点:

  1. 每个增量必须提供一些系统功能,这使得开发者很难根据客户需求给出大小适合的增量;
  2. 软件必须具备开放式体系结构(困难);
  3. 易退化成边做边改的方式,使软件过程控制失去整体性。

1.5 螺旋模型

软件开发的风险:交付的产品用户不满意、产品不能按时交付、开发成本超过预算、产品开发期间关键开发人员离职、产品投入市场前竞争对手发布功能相近价格更低产品……

螺旋模型:把产品活动和风险管理结合起来控制风险。分为4个工作周期:制定计划、风险分析、实施工程、用户评估。
在这里插入图片描述

  • 典型迭代过程:
    在这里插入图片描述
  • 螺旋模型优缺点
    优点:
    1. 螺旋模型强调原型的可扩充性和可修改行,原型的进化贯穿整个软件生存周期,这将有助于目标软件的适应能力,支持用户需求的动态变化;
    2. 原型可看作可执行的需求规格说明,易于为用户和开发人员共同理解,还可作为继续开发的基础,并为用户参与所有关键决策提供看了方便;
    3. 螺旋模型为项目管理人员及时调整管理决策提供了方便,进而可降低开发风险。

缺点:

  1. 如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟交付时间;
  2. 使用该模型需要相当丰富的风险评估经验和专门知识,要求开发队伍水平较高,否则会带来更大风险。

适用场景:适用于需求不明确或者需求可能发生变化的大型复杂的软件系统,支持面对过程。面对对象等多种软件开发方法,是一种具有广阔前景的模型。

1.6 喷泉模型

喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
软件开发早期定义对象,整个开发过程充实和扩充对象。
各个阶段使用统一的概念和表示方法,生命周期各阶段无缝连接。
在这里插入图片描述

  • 优点:喷泉模型的各个阶段没有明显的界限,开发人员可以同步进行开发,可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
  • 缺点:由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,因此不利于项目的管理。喷泉模型要求严格管理文档使得审核的难度加大,尤其是面对可能随时加入的各种信息、需求与资料的情况。

2. 现代模型

2.1 基于构件的开发模型

近年来得到广泛应用,改变大型软件开发方式。考虑的焦点是集成,而非实现。
构件/组件:系统中模块化的、可更换的部分;实现特定的功能;对实现进行封装,暴露一组接口。例如:动态链接库(.dll),浏览器插件
在这里插入图片描述

  1. 需求分析。与其它过程模型相同
  2. 构件分析。根据需求搜索构件;如果没有完全匹配的构件,则需要修改构件或者修改需求
    考虑重用和集成
  3. 系统设计。与其他过程模型不同;考虑重用和集成;如果没有可重用的构件,则设计新软件
  4. 开发集成。将构件集成到系统中;开发新软件。
  • 基于构件的开发模型的优缺点

优点:

  1. 软件复用思想;
  2. 降低开发成本和风险,加快开发进度,提高软件质量。

缺点:

  1. 模型复杂;
  2. 商业软件不能修改,会导致修改需求,进而导致系统不能完全符合客户需求;
  3. 无法完全控制所开发系统的演化;
  4. 项目划分的好坏直接影响项目结果的好坏。

2.2 统一过程RUP:Rational Unified Process

基于面对对象方法学,使用统一建模语言UML(Unified Modeling Language).
特色:用例和风险驱动,以架构为中心,迭代的增量开发过程。适合大团队大项目。
从3个视角描述软件开发过程:

  1. 动态视角:随时间变化的阶段

  2. 静态视角:所进行的活动
    在这里插入图片描述

  3. 实践视角:可采用的良好实践建议
    6条最佳实践:

    1. 迭代式开发:需求变更是不可避免的,每次迭代产生一个可交付版本,用户反馈,减少风险;根据客户的轻重缓急来规划增量,先开发和交付优先级最高的增量;
    2. 管理需求:采用用例分析来捕获需求,由用例驱动设计和实现;对需求及其变更进行管理;
    3. 基于构件体系结构:采用基于构件的体系结构;提高软件复用率;
    4. 可视化建模:使用同一建模语言(UML)对系统进行可视化建模;
    5. 验证软件质量:软件质量评估贯穿整个开发过程的所有活动;全体成员参与;
    6. 控制软件变更:描述如何控制和跟踪软件的变更。
  • 静态结构
    在这里插入图片描述

  • 动态结构
    在这里插入图片描述

2.3 敏捷开发

总体目标:“可能早地、持续地对有价值的软件的交付”使客户满意。
敏捷软件开发宣言:个体交互、可工作软件、客户合作、响应变化。即用户至上原则

敏捷开发方法:

  • 极限编程:eXtreme Programming/XP
  • 自适应软件开发Adaptive Software Development/ASD
  • 并列争球法:Scrum
  • 动态系统开发方法Dynamic System Development Method/DSDM
  • 水晶法:Crystal
  • 特征驱动开发:Feature-DrivenDevelopment/FDD
  • 精益软件开发:Lean Software Development/LSD

敏捷软件过程是基本原理和开发准则的结合。
在这里插入图片描述

极限编程

把好的开发实践运用到极致。
在这里插入图片描述
四大价值观:沟通、简单性、反馈和勇气。
5个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
12个最佳实践:
在这里插入图片描述

  • 极限编程优缺点
    优点:快速响应变化和不确定性;可持续开发速度;适应商业竞争环境下的有限资源和有限时间。
    缺点:测试驱动开发可能导致通过测试但非用户期望;重构而不降低质量困难。
  • 适用场合
    适用于需求模糊且经常改变的场合适合商业竞争环境下的项目。

3. 选择软件过程模型

  • 选择软件过程模型遵循原则:
    1. 软件过程模型是不断发展的
    2. 各种软件过程模型各有优缺点和适用场合,不同软件往往需要不同软件过程模型
    3. 选用时不必拘泥于某种模型
    4. 可组合多种模型
    5. 可根据实际创造新的模型
  • 如何选择软件过程模型
    1. 前期需求明确的情况下,尽量采用瀑布模型
    2. 用户无系统使用经验,需求分析人员技能不足的情况下,尽量借助原型模型
    3. 不确定因素很多,很多东西无法提前计划的情况下,尽量采用增量型或螺旋模型
    4. 需求不稳定的情况下,尽量采用增量模型
    5. 资金和成本无法一次到位的情况下,可采用增量模型
    6. 对于完成多个独立功能开发的情况,可在需求分析阶段就进行功能并行,每个功能内部都尽量遵循瀑布模型
    7. 全新系统的开发必须在总体设计完成后再开始增量或并行
    8. 编码人员经验较少的情况下,尽量不要采用敏捷或迭代模型
    9. 增量、迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付和出口原则
  • 案例
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

推荐程序员好用的浏览器插件

推荐程序员好用的浏览器插件 1. 网页颜色控制:Dark Reader安装效果 2. 前端助手:FeHelper安装效果 3. markdown可视化:Markdown Reader安装效果 4. ES插件:Multi Elasticsearch Heads安装效果 1. 网页颜色控制:Dark Re…

使用Jest进行JavaScript单元测试

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Jest进行JavaScript单元测试 引言 Jest 简介 安装 Jest 创建基本配置 编写测试用例 运行测试 快照测试 模拟函数 代码覆盖率…

白杨SEO:百度在降低个人备案类网站搜索关键词排名和流量?怎样应对?【参考】

很久没有写百度或者网站这块内容了,一是因为做百度网站朋友越来越少,不管是个人还是企业;二是百度上用户搜索与百度给到网站的流量都越来越少。 为什么想到今天又来写这个呢?因为上个月有个朋友来咨询我说网站百度排名全没了&…

Linux——Shell的运行原理和Linux文件权限

Shell的运行原理和Linux文件权限 文章目录 Shell的运行原理和Linux文件权限1. Shell的运行原理(1) Shell是什么(2) 为什么要有Shell(3) Shell的运行原理(4) 解析命令行 2. Linux文件(1) 文件属性(2) 文件类型(3) 文件权限(4) 文件权限的修改(1) chmod(2) chown(3) chgrp (5) um…

linux守护进程与后台进程的区别

守护进程与后台进程有以下区别: 1. 概念与定义 后台进程: 是指在操作系统后台运行的进程,它不与用户直接交互(没有连接到用户的终端)。用户在终端中启动一个程序并让其在后台运行(如通过在命令后加“&…

Jmeter5.X性能测试

Jmeter5.X性能测试 文章目录 Jmeter5.X性能测试一、掌握Http基础协议1.1 浏览器的B/S架构和C/S架构1.2 HyperText Transfer Protocol 超文本传输协议1.3 超文本传输协议Http消息体拆分讲解1.4 HTTP的九种请求方法和响应码介绍1.5 Http请求头/响应头1.6 Http常见请求/响应头cont…

Spring 配置绑定原理分析

Spring 配置绑定原理分析 前言 Spring 应用中存在诸多配置,有的是系统配置,有的命令行启动参数配置,有的是yaml配置,有的是分布式配置中心配置,但对使用者而言总是可以通过ConfigurationProperties将它关联到一个Java…

爬虫下载网页文夹

爬虫下载网页pdf文件 import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin from urllib.parse import urljoin, unquote from tqdm import tqdm # 设置网页的URL base_url "http://119/download/dzz/pdf/"# 创建保存文件的…

数据结构-归并排序笔记

【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 看这个学思路 一 归并排序介绍: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解&#xf…

编译器优化乌龙——记一次死循环不进入问题

记一次死循环不生效问题 看如下代码,本意是我们模拟一次死循环,然后会在中断处理函数中更改waiting的值,更改waiting的值后,跳出死循环。 int waiting 0; while(waiting0){}运行起来发现,程序根本就没有进入这个死循…

构建第一个ArkTs应用

1、新建第一个页面文件。在“Project”窗口,点击“entry > src > main > ets > pages”,打开“Index.ets”文件,进行页面的编写。 2、新建第二个页面文件。在“Project”窗口,打开“entry > src > main > e…

一文搞懂Linux kernel编译步骤

一、前言 什么是Linux的内核编译呢?简单来说,Linux内核编译是一个将内核源代码转换成可在特定的硬件架构上运行的二进制文件的过程。通过编译内核,我们可以根据自己的需求和兴趣对内核进行定制和优化,以满足特定的应用场景。下文…

IDEA构建JavaWeb项目,并通过Tomcat成功运行

目录 一、Tomcat简介 二、Tomcat安装步骤 1.选择分支下载 2.点击下载zip安装包 3.解压到没有中文、空格和特殊字符的目录下 4.双击bin目录下的startup.bat脚本启动Tomcat 5.浏览器访问Tomcat 6.关闭Tomcat服务器 三、Tomcat目录介绍 四、WEB项目的标准结构 五、WEB…

消息通知——公众号、小程序、短信对比

消息通知——公众号、小程序、短信对比 引言 在数字化时代,高效、准确的消息通知对于提升用户体验、增强用户粘性至关重要。本报告将深入分析三种常见的消息通知方式:微信公众号推送、微信小程序推送以及手机短信推送,从实现方式、优缺点及细…

三维测量与建模笔记 - 3.2 直接线性变换法标定DLT

DLT - Direct Linear Transform 上图中,透视成像对应的公式是共线方程,可以参考以下链接: https://zhuanlan.zhihu.com/p/101549821https://zhuanlan.zhihu.com/p/101549821 对于标定来说,需要找到。已知量是。 (u,v)是…

消息队列面试——打破沙锅问到底

消息队列的面试连环炮 前言 你用过消息队列么?说说你们项目里是怎么用消息队列的? 我们有一个订单系统,订单系统会每次下一个新订单的时候,就会发送一条消息到ActiveMQ里面去,后台有一个库存系统,负责获取…

【论文复现】KAN卷积:医学图像分割新前沿

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀知识图谱推理 1. 概述2. 核心创新点3. 模块介绍KANUNext模块 4. 本文主要结构5. 主要代码6. 数据集7. 结果展示8. 参考文献 前言:…

Oracle与SQL Server的语法区别

1)日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…

基于TRIZ理论的便携式光伏手机充电装置创新

随着智能手机功能的日益强大,电量消耗问题也日益凸显,尤其是在户外活动时,电量告急常常让人措手不及。面对这一挑战,基于TRIZ(发明问题解决理论)的创新思维,一款全新的便携式光伏手机充电装置应…

Vue3父传子

1. App.vue - 父组件 咱们先来看左边的 App.vue&#xff0c;它扮演的是“父亲”角色——你可以想象它是一位热心的老爸&#xff0c;手里拿着一条消息&#xff0c;正准备把这条消息送到“儿子”那里。 <script setup> // 这个 setup 就像一个神奇的开关&#xff0c;一开…