软件生存期和软件过程

软件生存周期

软件生存周期(Software Life Cycle):一个软件项目从问题提出开始,直到软件产品最终退役(废弃不用)为止。

软件生存周期分为三个时期:计划、开发和维护

整个软件生存周期划分为多个相对独立的较小阶段,给每个阶段赋予确定而有限的任务,从而降低了整个软件工程的难度,提高了软件开发生产率

• 目的和实质:

控制开发工作的复杂性,通过有限的确定步骤,把用户需求从抽象的逻辑概念转化为具体的物理实现。

• 软件生存期模型:瀑布模型,演化模型,螺旋模型,喷泉模型。

软件过程

围绕软件开发所进行的一系列活动,早期,人们称软件过程为“软件开发模型”

早期观点:软件生存周期中的阶段和软件过程中的活动是基本一致的。

传统软件过程

一、瀑布模型:

瀑布模型(WaterfallModel)又称流水式过程模型,它将软件开发过程模仿旅游景点的阶梯瀑布,由上向下一个阶梯一个阶梯地倾泻下来,最后进入一个风平浪尽的大湖,这个大湖就是软件企业的产品库。

瀑布模型

基于软件生存周期的线性开发模型

软件生存周期中的阶段和软件过程中的活动是基本一致的。 

瀑布模型:系统的生命周期方法学用瀑布模型来进行模拟。

各阶段间具有顺序性和依赖性

前阶段结束—>后阶段开始。

前阶段输出文档—>后阶段输入文档。

推迟实现的观点:设置系统分析与设计、推迟物理实现。

质量保证的观点:

每个阶段必须完成规定的文档

每个阶段结束前要对文档评审,以便尽早发现问题,改正错误。

传统瀑布模型存在问题

传统的瀑布模型过于理想化

实际项目很少按照该模型给出的顺序进行;

在设计阶段可能发生规格说明文档中的错误。

而设计上的缺陷或错误可能在实现过程中显现出来。

在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。 

不适合需求模糊的系统

开发初始阶段很难彻底弄清软件需求 

用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成; 

二、原型模型:

以某个软件原型为参照模型的开发方法,叫做原型法。在初步需求分析之后,马上向客户展示一个软件产品原型,对客户进行培训,让客户试用,在试用中收集客户意见,修改原型,再让客户试用,反复循环几次,直到客户确认为止。

快速原型模型特点

“逼真”的原型可以使用户迅速作出反馈

循环回溯和迭代:非线性模型

使用快速开发工具

种类

渐进型:对原型补充和修改获得最终系统

抛弃型:原型废弃不用

应防止的偏向

舍不得抛弃,从而影响软件质量

增量模型

先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。系统的总体设计在初始子集设计阶段就应作出设想。

增量

小而可用的软件

第一个增量通常是软件的核心

特点

在前面增量的基础上开发后面的增量

每个增量的开发可用瀑布或快速原型模型

每个增量开发的顺序性和总体的迭代性相结合

增量模型的优点

在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。

整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。

逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。

采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。

使用增量模型的困难

在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。

开发人员既要把软件系统看作整体。又要看成可独立的构件,整体和独立的相互矛盾。

多个构件并行开发,具有拼装集成的风险。

螺旋模型

一个螺旋式周期

计划:确定目标,选择方案,选定完成目标的策略

风险分析:从风险角度分析该策略

建立原型:建立原型来实现本轮螺旋的目标。

评审:评价前一步的结果,计划下一轮的工作


 

优点

对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;

减少过多测试或测试不足;

维护和开发之间无本质区别。

特点

风险驱动

主要适用于内部开发的大规模软件项目

要有具有丰富风险评估专门知识的开发人员,否则风险更大。 

软件演化模型

形式化方法模型

•   形式化方法模型:基于程序变换和验证技术的软件开发

•   转换模型(transformationalmodel)

•   净室模型(cleanroommodel)

转换模型

•   开发过程

•   确定形式化需求规格说明书

•   进行自动的程序变换

•   针对形式化开发记录进行测试

•   特点

•   形式化软件开发方法

•   形式化需求规格说明

•   变换技术

•   程序自动生成技术

•   确保正确

净室模型

•   净室思想

•   在分析和设计阶段消除错误

•   在“洁净”状态下实现软件制作

•   形式化

•   盒结构表示分析和设计

•   正确性验证         

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

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

相关文章

王爽汇编语言第三版实验3

实验任务 将下面的程序保存为t1.asm,将其生成可执行文件t1.exe 用Vscode编写源程序t1.asm 用脚本一键生成可执行文件t1.exe 成功运行 查看资源管理器,成功生成T1.obj与t1.exe文件‘ 用debug跟踪t1.exe的执行过程,写出每一步执行后&#xff…

大模型生图安全疫苗注入——进阶解决方案与系统优化(DataWhale组队学习)

引言 大家好,我是GISer Liu😁,上篇博客中,我们基于DataWhale 2024年10月大模型生图安全疫苗注入赛道的任务,介绍了攻击与防御的基本策略,如通过上下文稀释法、隐喻替换等绕过检测机制,并提出了多…

win10远程桌面打开后,其他主机访问时会报错:发生内部错误;关闭远程桌面,则报无法连接;

win10远程桌面打开后,其他主机访问时会报错:发生内部错误;关闭远程桌面,则报无法连接; 该问题困扰两天,最后这篇文章找到解决方法,成功连上了:https://www.zun.com/zx/yunwei/4798.h…

三维指纹定位,MATLAB编写的代码

文章目录 介绍:三维指纹定位系统产品概述主要特点技术细节适用场景代码 运行结果代码截图与程序结构 介绍:三维指纹定位系统 产品概述 此三维指纹定位系统采用先进的 K N N KNN KNN(K-最近邻)算法,结合四个基站的信号…

Python画笔案例-086 turtle 多线程绘画

1、turtle 多线程绘画 通过 python 的turtle 库 多线程绘画,如下图: 2、实现代码 turtle 库 多线程绘画,以下为实现代码: """多线程绘画.py """ from random import random,randint from turtle import Turtle,Screen from threading

力扣66~70题

题66(简单): python代码: class Solution:def plusOne(self, digits: List[int]) -> List[int]:s_str.join([str(i) for i in digits])nstr(int(s_str)1)n_strlist(n)res[int(i) for i in n_str]return res题67(简…

018_FEA_Structure_Static_in_Matlab三维结构静力学分析

刹车变形分析 本示例展示了如何使用 MATLAB 软件进行刹车变形分析。 这个例子是Matlab官方PDE工具箱的第一个例子,所需要的数据文件都由Matlab提供,包括CAD模型文件。 步骤 1: 导入 CAD 模型 导入 CAD 模型,这里使用的是一个带有孔的支架模…

C# 实操高并发分布式缓存解决方案

1. CAP 原则 CAP 原则也称为布鲁尔定理,由 Eric Brewer 在 2000 年提出,描述了分布式系统中的三个核心属性:一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tol…

OpenCV高级图形用户界面(15)注册一个回调函数来处理鼠标事件的函数setMouseCallback()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为指定的窗口设置鼠标处理器。 setMouseCallback 是 OpenCV 中的一个功能,允许开发者注册一个回调函数来处理鼠标事件。当用户在窗口…

ORACLE 19C安装 RAC报错

1. 问题描述 在Oracle 19C RAC的安装过程中,使用克隆方式在两个节点上部署集群。当第一个节点配置好基础服务后,关机并克隆节点。当尝试在第二个节点上通过页面进行RAC安装时,出现以下错误: [INS-32070] Could not remove the n…

React01 开发环境搭建

React 开发环境搭建 一、创建 React 项目二、项目精简 一、创建 React 项目 执行下述命令创建 react 项目 blu-react-basis npx create-react-app blu-react-basis项目目录结构如下: 执行下述命令启动项目 npm run start启动效果如下: 二、项目精简 …

Vue3:同一项目同一浏览器只允许打开一个标签页

说明: 阻止同一浏览器打开多个项目标签页,防止多标签页重复时间统计累加,适用于基于微信公众号页面或指定浏览器的计时统计等项目活动,计时在线学习时间统计等。 效果: main.js import {createApp} from vue import…

【Linux系统编程】第三十四弹---使用匿名管道构建简易Linux进程池

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、引言 2、进程池的基本概念 3、管道在进程池中的应用 4、进程池的实现 4.1、master类定义 4.2、测试信道 4.3、通过cha…

OpenCV高级图形用户界面(12)用于更改指定窗口的大小函数resizeWindow()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::resizeWindow() 函数用于更改指定窗口的大小。这使得你可以根据需要调整窗口的宽度和高度。 注释 指定的窗口大小是指图像区域的大小。工具栏…

Linux 手撕线程池

前言 线程池 是 池化技术 中很典型的一个,它旨在高效的管理和复用线程资源!在现在的计算机体系中,线程是执行任务(调度)的基本单位。然而,频繁的创建和销毁线程也会带来较大的开销,包括系统资源…

区块链开发入门: 原理、技术与实践

随着区块链技术的迅猛发展,它不仅改变了金融领域,还对供应链、医疗、身份认证等多个行业产生了深远影响。对于想要进入区块链开发领域的初学者而言,了解区块链的基本原理、相关技术以及实际应用场景至关重要。本文将为您提供一份全面的区块链…

网络变压器在PCIe网口应用的案例

PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机总线标准,用于连接计算机主板上的设备,如显卡、网络适配器、存储控制器等。H82422S 网络变压器(Ethernet Transformer),在…

[Git]一文速通

概述 Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等, )在软件开发过程中被广泛使用 Git的作用 代码回溯版本切换多人协作远程备份 通过Git 仓库来存储和管理代码 文件,Git 仓库分为两种: 本地仓库: 开…

循序渐进丨在 MogDB 数据库中实现 Oracle ASH能力

我们都知道,当 Oracle 数据库出现性能故障后,一般会在线上实时诊断数据库性能问题,特别是资源突然打高的场景,这个时候用到ASH的数据,就能很大程度上准确定位问题所在。 Oracle ASH 在 Oracle 数据库中,实…

基于微博评论的自然语言处理情感分析

目录 一、项目概述 二、需要解决的问题 三、数据预处理 1、词汇表构建(vocab_creat.py) 2、数据集加载(load_dataset.py) 四、模型构建(TextRNN.py) 1、嵌入层(Embedding Layer&#xff…