读书笔记:软件工程(4) - 软件过程模型:瀑布模型

news/2024/5/18 22:06:35/文章来源:https://blog.csdn.net/chen1083376511/article/details/127138488

软件过程模型

为了改变软件开发的混乱状况,使软件开发更加有序。

瀑布模型

又称为经典生命周期,它提出了一个系统的,顺序的软件开发方法,从用户需求规格说明开始,通过策划,建模,构建和部署的过程,最终提供完整的软件支持。这种模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后、相互衔接的固定次序,恰如奔流不息拾级而下的瀑布。

图1.1所示的是按照传统的瀑布模型生存周期的各阶段出现的顺序,大致介绍了它的全过程。

图2.1所示为传统的瀑布模型。

如图2-1所示:(另一本书内容)

按照传统的瀑布模型来开发软件,有如下几个特点。

(1)阶段的顺序性和依赖性

这个特点有两重含义:

  • 必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
  • 前一阶段的输出文档就是后一阶段的输入文档。因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。

但是,万一在生命周期某一阶段发现了问题,很可能需要追溯到在它之前的一些阶段,必要时还要修改前面已经完成的文档。然而,在生命周期后期改正早期阶段造成的问题,需要付出很高的代价。这就好像水已经从瀑布顶部流泻到底部,再想使它返回到高处需要付出很大能量一样。

(2)推迟实现的观点

对于中、大规模软件项目来说,往往是编码工作开始得越早,最终完成开发工作所需要的时间就越长。这是因为前一阶段工作做得不够扎实,有缺陷,在这种情况下过早地考虑编写程序,常常造成大量返工,有时甚至给开发人员带来灾难性的后果,造成无法弥补的局面。

瀑布模型在编码之前是分析阶段和设计阶段。这两个阶段的任务是考虑目标系统的逻辑模型,不涉及软件的物理实现。

(3)质量保证的观点

软件工程的重要目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的各个阶段都应该坚持以下两点重要的做法。

  • 每一个阶段都必须完成所规定的相应文档,没有交出合格文档就是没有完成该阶段的任务。完整、准确地规范文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。
  • 每一个阶段结束之前都必须对已完成的文档进行评审,以便尽早发现问题,纠正错误。从图1.2可以看出,越是早期阶段犯下的错误,暴露出来的时间就越晚,排除故障改正错误所需付出的代价就越高。因此,及时审查是保证软件质量降低软件开发成本的重要措施。

(4)存在的问题

按照瀑布模型来开发软件,只有当分析员能够做出准确的需求分析时,才能得到预期的正确结果。它是一种理想的线性开发模式,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。

优点:

1.可强迫开发人员采用规范的方法(如结构化技术);

2.严格地规定了每个阶段必须提交的文档;

3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

缺点:

  1. 各个阶段的划分完全固定,阶段之间产生大量的文档,增加了开发工作量;
  2. 由于开发过程是线性的,用户只有在整个过程结束时,才能看到开发成果;
  3. 开发过程中间,很难响应用户的变更要求;
  4. 早期的错误,也要等到开发后期的测试阶段才能发现,这样会产生严重的后果。

瀑布模型仅适合于在软件需求比较明确、开发技术比较成熟、工程管理比较严格的场合下使用。

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

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

相关文章

Easyx基本使用(三)

Easyx基本使用&#xff08;三&#xff09; ——绘制简单图形 1. 绘制点&#xff08;putpixel&#xff09; void putpixel(int x,int y,COLORREF color );x&#xff1a;点的x坐标y&#xff1a;点的y坐标color&#xff1a;点的颜色返回值&#xff1a;无 #include <easyx.h…

程序员的数学课15 递归:如何计算汉诺塔问题的移动步数?

递归是重要的程序开发思想&#xff0c;比如程序源代码缩进、树形数据结构、XML 语法、快速排序法等都有递归的影子。 那么&#xff0c;递归思维的本质到底是什么呢&#xff1f;递归的理念看似隐讳&#xff0c;实则非常清晰明了。 为了让你由浅入深地理解它&#xff0c;这一讲…

paddle 训练模型的保持和载入

模型保持中的常见问题 &#xff0c;查看官网 模型保存常见问题-使用文档-PaddlePaddle深度学习平台 一、保存载入体系简介 模型保存与载入 一、保存载入体系简介 1.1 基础API保存载入体系 飞桨框架2.1对模型与参数的保存与载入相关接口进行了梳理&#xff1a;对于训练调优场景…

2023秋招nlp笔试题-太初

单选题 浮点数的表示范围和精度取决于 浮点数的取值范围由阶码的位数决定,而浮点数的精度由尾数的位数决定 响应中断请求的条件是 A.外设提出中断; B.外设工作完成和系统允许时; C.外设工作完成和中断标记触发器为“1”时; D.CPU提出中断。 计算器浮点运算速度为85.0167PF…

Day30_路由的props配置

提出问题&#xff1a; Detail是如何得到别传给他的参数&#xff0c;以及如何简化写法。 第一种写法的props 对象式 使用的很少&#xff0c;传递的是死数据 1.index.js组件里面 2.在detail组件里面 3效果图&#xff1a; 第二种写法props 布尔值 仅限于params参数传递…

心理学考研难度 分析

全国招收心理学院校排名 高等教育评价专业机构软科发布了“2020软科中国最好学科排名”&#xff0c;心理学院校有55所上榜&#xff0c;排名前10%依次为北京师范大学、北京大学、华南师范大学、西南大学、华东师范大学、华中师范大学、上海交通大学、浙江大学、陕西师范大学、上…

内存对齐对性能的影响

计算字节数 在 Go 语言中&#xff0c;可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。 package mainimport ("fmt""unsafe" )type Args struct {num1 intnum2 int }type Flag struct {num1 int16num2 int32 }func main() {fmt.Println…

浅析axios原理与使用(包括axios的优雅写法与res的解构赋值)

目录前言一&#xff0c;什么是axios二&#xff0c;axios的基本使用2.1 不含参的axios调用2.2 含参数的axios调用三&#xff0c;axios的原理&#xff08;拦截器&#xff09;3.1 客户端与服务器之间的交互原理&#xff08;复习可略过&#xff09;3.2 浅析axios原理四&#xff0c;…

西瓜书研读——第三章 线性模型: 线性判别分析 LDA

西瓜书研读系列&#xff1a; 西瓜书研读——第三章 线性模型&#xff1a;一元线性回归 西瓜书研读——第三章 线性模型&#xff1a;多元线性回归 西瓜书研读——第三章 线性模型&#xff1a;线性几率回归&#xff08;逻辑回归&#xff09; 主要教材为西瓜书&#xff0c;结合…

K8s存储与GlusterFS实战

一、存储概述 1、共享存储机制概述 Kubernetes对于有状态的容器应用或者对数据需要持久化的应用&#xff0c;不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷&#xff0c;而且需要更加可靠的存储来保存应用产生的重要数据&#xff0c;以便容器应用在重建之后…

常见的垃圾回收机制

如何工作在某些 Java 虚拟机中,堆的实现截然不同:它更像一个传送带,每分配一个新对象,它就向前移动一格。 这意味着对象存储空间的分配速度特别快。Java 的"堆指针"只是简单地移动到尚未分配的区域,所以它的效率与 C++ 在栈上分配空间的效率相当垃圾回收器工作时…

将Springbooot项目部署到云服务器上运行

将Springbooot项目部署到云服务器上运行一、项目打包二、将结果jar文件上传服务器三、授予jar文件权限&#xff0c;并运行四、运行失败可能原因一、项目打包 File->Project Structure Project Settings -> Artifacts -> 点击 号 -> JAR -> From modules with d…

Linux-常见命令(三)

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接收失败&#xff0c;但我不能接收放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 find指令&…

2022-2023-1 20221318 《计算机基础和程序设计》第五周学习总结

作业信息 这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP 作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03 作业目标 学习《计算机科学概论》的第6章 《程序设计》第4章 作业正文 https://i.cnblogs.com/posts/edit;postId=1673…

JavaScript:DOM

目录 一、DOM介绍 1、节点和节点的关系 2、获取页面中的元素可以使用以下几种方式 3、鼠标点击事件 4、访问节点 5、获取元素的样式 一、DOM介绍 DOM&#xff1a;Document Object Model&#xff08;文档对象模型&#xff09; DOM是W3C组织推荐的处理可扩展标记语言的标…

数据结构线性表

目录 2.1 线性表的基本概念 2.2 线性表的顺序表示 2.3 线性表的链式表示 2.3.1 单链表 2.3.2 循环单链表 2.3.3 双向链表 2.3.4 双向循环链表 2.3.5 静态链表 牢固掌握线性表在两种存储结构下的各种基本操作&#xff0c;牢记各种算法思想 2.1 线性表的基本概念 Def&a…

Linux 学习 -- 容器技术

Linux 学习 – 容器技术 容器基础概述容器部署 一、容器基础概述 容器(Container) : 定义&#xff1a;指的是针对应用所需的运行环境资源&#xff08;依赖库/目录/网络/用户……等&#xff09;进行整体封装的技术。 特点&#xff1a;封装好的镜像相比虚拟机的粒度要更细&…

类与对象(十八)----super关键字

super关键字 super代表父类的引用&#xff0c;可以用于访问父类的属性&#xff0c;方法&#xff0c;构造器。 super使用 使用super访问父类的属性&#xff1a;权限内的才可以访问。使用语法----super.属性名 public class A {public int n1 12;protected int n2 12;int n…

程序员的数学课10 信息熵:事件的不确定性如何计算?

你好&#xff0c;欢迎来到第 10 课时——信息熵&#xff1a;事件的不确定性如何计算&#xff1f; 从加乘法则开始&#xff0c;我们基于事情的不确定性出发&#xff0c;尝试计算事情发生的可能性。然而&#xff0c;对于事件与事件之间的不确定性如何相比和衡量&#xff0c;单独…

iOS 16 中 SwiftUI 防止弹出的 sheet 视图被下滑关闭(dismiss)的新解决方案

功能需求 在SwiftUI中,我们往往需要只通过代码控制 sheet 弹出视图的关闭(dismiss),而禁止用户手动下滑关闭弹出的视图。 如上图所示,在 iOS 16 中 App 弹出的 sheet 视图只允许点击按钮关闭(dismiss),而用户无法通过下滑来关闭它。 我们之前在 SwiftUI禁止用户关闭s…