软件工程与计算总结(二十二)软件开发过程模型

news2024/11/15 15:46:25

(自顶向下,逐层细化) 

目录

一.软件开发的典型阶段

1.需求工程

2.软件设计

3.软件构造

4.软件测试

5.软件交付

6.软件维护

二.软件生命周期模型

三.软件过程模型

四.构建-修复模型

五.瀑布模型

六.增量迭代模型

七.演化模型

八.原型模型

九.螺旋模型

十.Rational统一过程

十一.敏捷过程


一.软件开发的典型阶段

1.需求工程

目标:建立能够妥善解决用户问题的软件系统解决方案,简单地说就是定义“软件系统要完成哪些功能

任务:需求开发(包括需求获取、分析、规格说明、验证)和需求管理(持续进行,直到软件生命周期终结)

软件开发人员:软件需求工程师and软件需求分析师

需求开发的两个阶段:

  • 系统需求开发:为了获得整个系统的期望目标(即完成业务需求处理),包括软件系统和硬件系统(软件系统通常会承担主要的需求)
  • 软件需求开发:以承载的系统需求为出发点,建立软件系统解决方案,使其满足系统需求

常见建模方法与技术:结构化分析方法(DFD和ER图),面向对象分析方法(用例图描述系统功能,概念类图描述系统静态结构,顺序图)

关注点:首要是理解现实,次要是建立高质量的软件系统~

主要制品:需求分析模型and软件需求规格说明文档~

2.软件设计

目标:使用各种抽象软件实体建立系统的结构,搭建系统的实现框架

开发人员:软件设计师

划分为以下3个类:

  • 体系结构设计:系统的高层设计,将软件系统划分为不同的子系统和模块
  • 软件详细设计:在高层设计的基础上,使用模块、过程、类等软件抽象实体完成各个子系统内部的细粒度设计
  • 人机交互设计:建立用户之间的交互机制,使得系统具有量化的易用性

(前两者均存在面向对象方法和结构化方法两种实现途径)

3.软件构造

目标:构建软件

开发人员:程序员——编程实现和构造高质量软件产品

主要任务:编程、测试与调试等子活动

主要制品:源代码和可执行程序

4.软件测试

目标:保证软件产品的质量

主要划分为3个层次:

  • 单元测试:验证一个系统构造单元内部的实现质量
  • 集成测试:验证系统各个构建单元和部件按照要求进行集成的质量
  • 系统测试:验证系统产品符合用户级客户要求的质量

主要任务:测试计划、测试执行和测试报告

主要制品:测试用过的高质量软件产品和测试报告

5.软件交付

目标:将软件产品交付给用户和客户

主要任务:部署、用户培训、文档支持等

关注:交付的有效性,让客户和用户真正掌握软件产品,能够顺利地使用软件产品完成工作任务

重视点:项目总结和项目评价

6.软件维护

目标:保障用户从接收产品到软件生命终结之间的正常使用

任务:完善性维护、适应性维护、修正性维护and预防性维护

(可由开发人员进行,也可以由专门的维护人员进行)

关注点:软件系统如何在效益和质量的总和平衡下演化


分享一张详细归纳的好图:

二.软件生命周期模型

每个阶段都有明确的典型输入/输出、主要活动和执行人、各个阶段形成明确、连续的顺序过程

(特定软件系统的生命周期简要描述了该系统的开发活动历史,而一个软件生命周期模型则描述了新的软件系统该如何开发)

三.软件过程模型

与简略的软件生命周期模型不同,软件过程模型进一步详细说明各个阶段的任务、活动、对象及其组织、控制过程,可以被看做是网络化的活动组织

因为要在整体上遵守软件生命周期的约束,所以不同的软件生命周期模型展开以后是不同的软件过程模型~

四.构建-修复模型

1.背景与动机:最早也是最自然产生软件的开发模型,完全依靠开发人员的个人能力进行开发

2.描述:依靠个人分享和理解直接构造软件的第一个版本,提交给用户使用;发现缺陷后就直接修改代码修改缺陷,直到全部完成后进行交付,然后进入维护阶段

3.特点

  • 没有对开发工作进行规范和组织,随着难度提升开发活动会超出个人的控制模型
  • 没有分析需求的真实性,给软件开发带来很大危险
  • 没有考虑软件结构的质量
  • 没有考虑测试和程序的可维护性,且没有任何文档——维护工作十分困难

4.常用情况

  • 软件规模很小(几百行程序)
  • 对软件质量要求不高
  • 只关注开发活动,对后期维护的要求不高,甚至不需要进行维护

五.瀑布模型

1.背景与动机:将软件开发活动划分为不同的阶段,并且保证每一个阶段工作的正确性和有效性~

2.描述:自上而下,相互衔接,从一个阶段到另一个阶段的有序的转换序列~

虽然像瀑布流水逐级而下,瀑布模型允许活动出现反复和迭代~

3.特点

明显优势:为开发活动定义了清晰的阶段划分,这让开发者能够以关注点分离的方式更好地进行那些复杂的软件项目的开发活动~

局限性:

  • 对文档的过高期望
  • 对开发活动的线性顺序假设
  • 客户、用户参与不够
  • 里程碑粒度过粗

4.常用情况

  • 需求非常成熟稳定,没有不确定的内容
  • 所需的技术成熟
  • 复杂度适中

六.增量迭代模型

1.背景与动机:实际开发中绝大多数复杂系统都是需要迭代完成的~

2.描述:在项目开始时,通过系统需求开发和核心体系结构设计活动完成项目队前景和范围的界定,然后再将后续开发活动组织为多个迭代、并行的瀑布式开发活动~

比较显著的要求是,需要在项目早期就确定项目的目标和范围,因此项目需求要比较稳定和成熟~

3.特点:

优点:

  • 更加符合软件开发的实践情况,具有更好地适用性~
  • 并行开发可以帮助缩短软件产品的开发时间~
  • 加强用户反馈,降低开发风险~

缺点:

  • 需要软件有开放式的体系结构,以便于不断加入构件
  • 很难再项目开始就确定前景和范围

4.常用情况:实践中广泛应用

七.演化模型

1.背景与动机

和增量相同,都采用迭代式;不同点在于演化模型主要用在需求变更频繁或者不确定性较多的领域

2.描述

将软件开发活动组织为多个迭代、并行的瀑布式开发活动——主要任务是澄清和明确系统的核心需求,建立和交付核心系统~

对需求的反馈是演化模型进行迭代预测、开发活动组织和控制的主要依据,因此它也是“需求驱动

3.特点

优点:

  • 具有更好地适用性,尤其是其演化式迭代安排能够适用于需要频繁变更需求的软件系统~
  • 并行开发可以缩短软件产品的开发时间~
  • 渐进交付可以加强用户反馈,降低开发风险~

缺点:

  • 无法在项目早期阶段确定项目范围,所以项目的整体计划、进度调查,尤其是商务协商事宜无法准确把握
  • 后续迭代开发活动式在前导迭代的基础上进行修改和扩展的,这容易让后续迭代忽略分析与设计工作,蜕变为构建修复方式

4.常用情况

不稳定领域的大规模软件系统

八.原型模型

1.背景与动机

简单的说,原型产生于真正产品构建之前,一种情况是,它被扩展之后成为真正的产品,另一种情况是,它模拟真正产品但不会出现在真正产品之中,而在真正产品中出现的是比原型质量更好地改进和替代~(第一种称为演化式原型,第二种称为抛弃式原型

(基本特征不是注重演化式而是注重抛弃式原型)

2.描述

将需求开发活动展开为抛弃式原型开发的迭代,充分利用抛弃式原型解决新颖领域的需求不确定问题~

3.特点

优点:

  • 对原型方法的使用加强了与客户、用户的交流,可以让最终产品取得更好地满意度
  • 适用于存在大量不确定性的领域

缺点:

  • 原型方法能够解决风险,但是自身也能带来新的风险,例如原型方法成本太高
  • 实践中,很多项目负责人不舍得抛弃“抛弃式原型”,导致降低产品质量

4.常用情况:存在这大量不确定性的新颖领域进行开发活动组织

九.螺旋模型

1.背景与动机

解决软件开发的越来越高的风险~

基本思想:尽早解决比较高的风险(尽量早发现)

2.描述

基于风险驱动,完全按照风险解决的方式组织软件开发活动~

风险解决的基本思路是:

确定目标、解决方案和约束——评估方案,发现风险——寻找解决风险方法——解决风险方案~

3.特点:

优点:可以降低风险,减少项目因风险造成的损失

缺点:

  • 风险解决需要使用原型手段,也就会存在原型带来的风险(与原型相同)
  • 模型过于复杂,不利于管理者依据其组织软件开发活动

4.常用情况

在高风险的大规模软件系统开发中有着较多的应用

十.Rational统一过程

1.背景与动机

多种过程模型方法互不相容,各有自己的优点和最佳实践方法,又都有自己的局限性;为了减少过程模型方法上选择的困难,同时由充分吸收和利用各种过程模型方法下的最佳实践方法,Rational公司提出了统一过程(RUP)——总结和借鉴传统的各种有效经验,建立最佳实践方法的集合,并提供有效的过程定制手段~

2.描述

模型概述:横轴以时间来组织,是过程展开的生命周期特征,体现开发过程的动态结构;纵轴以内容来组织,是自然的逻辑活动,体现开发过程的静态结构

核心实践方法:

  • 迭代式开发:过去被反复证明的最佳实践方法
  • 管理需求:重视需求工程中除了需求开发之外的需求管理活动
  • 使用基于组件的体系结构:它帮助建立一个可维护、易开发、易复用的软件体系结构
  • 可视化建模:利用UMl进行建模
  • 验证软件质量:尽早和持续地开发验证,以尽早发现缺陷,降低风险和成本
  • 控制软件变更:适应90年代以后需求变更越来越重要的事实

3.特点

优点:

  • 有一套软件工程工具的支持,这可以帮助RUP有效地实施
  • 根据其定制机制不同,可以用于小型或者大型项目的开发
  • 吸收和借鉴了传统的最佳实践方法,能够保证软件开发过程的组织是基本有效合理的

缺点:

  • 没有考虑过交付之后的软件维护问题
  • 裁剪和配置的工作不是一个简单的任务

4.常用情况:RUP是重量级过程,能够胜任大型软件团队开发大型项目时的活动组织

十一.敏捷过程(Agile)

1.背景与动机

传统的软件过程模型过于强调纪律,忽视了个人能力,尤其是过度强调计划、文档和工具~

人们开始总结实践中的经验和最佳实践方法,尝试建立轻量级的过程方法

2.描述

思想与原则

敏捷练满宣言所声明的价值观:

  • 个体和互动:高于流程和工具
  • 工作的软件:高于详尽的文档
  • 客户合作:高于合同谈判
  • 响应变化:高于遵循计划

极限编程:极限利用简单、有效地方法解决问题

3.特点

方法众多,各有特点也各有缺点

4.常用情况

适用于快速变化或者时间压力较大的项目~

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

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

相关文章

Leetcode 第 361 场周赛题解

Leetcode 第 361 场周赛题解 Leetcode 第 361 场周赛题解题目1:2843. 统计对称整数的数目思路代码复杂度分析 题目2:生成特殊数字的最少操作思路代码复杂度分析 题目3:统计趣味子数组的数目思路代码复杂度分析 题目4:边权重均等查…

Git简洁安装方式和使用方式【附安装包资源,Git基础操作,如拉取项目、上传代码、拉取代码】

软件安装包 项目版本管理软件 Git windows版本安装包 安装步骤 双击按照包之后,直接next 安装位置尽量不要选择C盘,如果只有C盘,可以尝试分盘,如果C盘已经很小了,那就没办法了 选择完安装位置之后,直…

网络编程:事件模型关于epoll 边缘触发与水平触发的理解

文章目录 EPOLL事件有两种模型:ET模式LT模式运行区别边缘触发的实际使用代码如下 EPOLL事件有两种模型: Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据。 Level Triggered (LT) 水平触发只要有数据都会触发。 (…

【USRP】软件无线电基础篇:长波、中波、短波

一、频率和波长 类型频率波长长波30~300千赫(KHz)10~1千米中波300~3000千赫(KHz)10~1百米短波3~30兆赫(MHz)100~10米 二、传输距离 …

SystemVerilog Assertions应用指南 Chapter 11.5SVA检验器的时序窗口

11.5SVA检验器的时序窗口 到目前为止,带延迟的例子使用的都是固定的正延迟。在下面几个例子中,我们将讨论几种不同的描述延迟的方法属性p12检查布尔表达式“a&&b”在任何给定的时钟上升沿为真。如果表达式为真,那么在接下去的1-~3周期内,信号“c”应该至少在一个时钟周…

蓝桥杯每日一题2023.10.20

题目描述 等差数列 - 蓝桥云课 (lanqiao.cn) 知识点&#xff1a; 排序找出最大公约数则为公差 项数: n (第n项值-首项) / 公差 1。 n (an-a1) / d1 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; int a[N], n; int gcd…

高复杂度,斐波那契数列

n大的时候&#xff0c;值会很大

java中的容器(集合),HashMap底层原理,ArrayList、LinkedList、Vector区别,hashMap加载因子0.75原因

一、java中的容器 集合主要分为Collection和Map两大接口&#xff1b;Collection集合的子接口有List、Set&#xff1b;List集合的实现类有ArrayList底层是数组、LinkedList底层是双向非循环列表、Vector&#xff1b;Set集合的实现类有HashSet、TreeSet&#xff1b;Map集合的实现…

IoT 物联网共享充电桩场景中设备资产定位和地理围栏开发实践

基于经纬度的设备资产定位和地理围栏在物联网场景中应用广泛 01 物联网 GEO 场景架构方案 首先&#xff0c;IoT 终端设备通过卫星定位模块获取当前经纬度&#xff1b;然后&#xff0c;将坐标信息实时上报到物联网平台&#xff1b;最后&#xff0c;存储到 Redis GEO 数据库中。 …

Golang实现逻辑编排解释引擎

作者&#xff1a;井卓 文章简介&#xff1a; 逻辑编排提供一站式集成平台&#xff0c;简化了在集成接口、应用和服务时&#xff0c;所涉及的业务逻辑和流程。本文会介绍如何通过ChatGPT学习Golang、以及表达式解释器的实现和Golang解析引擎的基本设计架构。 Golang实现逻辑编…

openHarmony UI开发

常用组件和布局方式 组件 ArkUI有丰富的内置组件&#xff0c;包括文本、按钮、图片、进度条、输入框、单选框、多选框等。和布局一样&#xff0c;我们也可以将基础组件组合起来&#xff0c;形成自定义组件。 按钮&#xff1a; Button(Ok, { type: ButtonType.Normal, stateEf…

Git 安装和基础命令、IDEA 基础操作

目录 总结命令&#xff1a;1、安装&#xff1a;1、安装2、配置环境变量&#xff1a; 2、Git操作&#xff1a;1、初始化&#xff1a;1、姓名邮箱&#xff1a;2、初始化仓库&#xff1a;3、工作区和暂存区分析 2、提交文件3、查看版本库状态4、安装小乌龟git不显示图标 5、查看提…

Redis常用配置详解

目录 一、Redis查看当前配置命令二、Redis基本配置三、RDB全量持久化配置&#xff08;默认开启&#xff09;四、AOF增量持久化配置五、Redis key过期监听配置六、Redis内存淘汰策略七、总结 一、Redis查看当前配置命令 # Redis查看当前全部配置信息 127.0.0.1:6379> CONFIG…

微信小程序之会议OA首页数据交互,会议状态,会议人数转换,会议室交互,WXS的使用

前言&#xff1a; 本篇博客使用结合了SpringMVC&#xff0c;mybatis&#xff0c;maven&#xff0c;小程序&#xff0c;如果不熟悉使用可以翻看我之前的博客&#xff0c;以便大家可以更好的学习&#xff01;&#xff01;&#xff01; 一&#xff0c;会议OA首页数据的后台交互 这…

18、监测数据采集物联网应用开发步骤(12.3)

阶段性源码下载 监测数据采集物联网应用开发步骤(12.2) 前端web UI开发 demo 核心代码文件&#xff1a; web/index.html web/index.js web/js/common.js web/init.dlls Web/init.js 程序运行之后在浏览器敲入如下内容访问数据接口&#xff1a; http://localhost:9000…

五大经典智能算法实现机器人路径规划,包含简单路径与复杂路径,详细对比实验...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期文章采用五大经典的智能优化算法&#xff0c;对机器人路径进行规划。 五大经典算法分别是&#xff1a;粒子群算法(PSO)&#xff0c;遗传算法(GA)&#xff0c;差分进化算法(DE…

马赫数相关函数

1 函数 k是常数&#xff0c;Ma是变量 2应用程序 点击上方资源下载 3 计算 3.1 c语言 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h>#define k 1.4 // k为常数// 定义的函数 double T(double Ma) {return pow((1 (k - 1) / 2 * Ma …

npm或pnpm终端执行失败问题

问题描述&#xff1a; npm或pnpm终端执行失败问题&#xff1a;有时候在编译器中通过包管理工具进行某些命令操作时&#xff0c;会提示如下报错 pnpm : 无法加载文件 E:\1AllLearnSource\nvm\node\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;…

使用imx 8m 测试matter协议功能

参考网址&#xff1a; https://github.com/nxp-imx/meta-matter 请使用Ubuntu-20.04。18.04python版本太老 注意repo会出现此报错&#xff0c;可以无视&#xff1a; git checkout imx_matter_2023_q3 这一步在这个目录下操作 项目交流、学习、开发&#xff0c;欢迎私信。

【大数据】Kafka 数据存储

Kafka 数据存储 1.文件目录2.日志分段3.日志索引3.1 偏移量索引3.2 时间戳索引 4.日志清理4.1 日志删除4.1.1 基于时间4.1.2 基于日志大小4.1.3 基于日志起始偏移量 4.2 日志压缩 1.文件目录 Kafka 中的消息是存储在磁盘上的&#xff0c;一个分区副本对应一个 日志&#xff08…