软件工程第二章——软件生命周期(仅记录我所认为重要的知识点)

2023-05-16

软件工程第二章——软件生命周期

  • 前言
  • 生命周期组成(顺序)
    • 对应文档
    • 软件过程
      • 活动
      • 动作
      • 任务
    • 软件过程模型
      • CMM能力成熟度模型
      • 瀑布模型
        • 适用场合:
        • 瀑布模型的缺点
      • V模型(瀑布模型的变种)
      • 原型模型
        • 原型构建 and 系统开发
        • 适用场合
        • 优点
        • 缺点
      • 增量模型
        • 增量方式
        • 适用场合
        • 优点
        • 缺点
      • 螺旋模型
        • 优点
        • 缺点
        • 适用场合
      • 喷泉模型
        • 优点
        • 缺点
        • 适用场合
      • 基于构件的开发模型
        • 构件
        • 阶段解读
        • 优点
        • 缺点
        • 适用场合
      • 统一过程模型
        • 实践视角的6条最佳实践
        • 动态视角和静态视角
        • 统一过程的静态结构
        • 统一过程的动态结构
        • 适合场所
    • 敏捷开发过程
        • 优点
        • 缺点
        • 适用场合
    • 选择过程模型
      • 场合建议

前言

视频地址:中国大学MOOC搜索软件工程(电子科技大学)
https://www.bilibili.com/video/BV1YZ4y1x7LX?p=1

生命周期组成(顺序)

  1. 问题定义
  2. 可行性研究
  3. 需求分析
  4. 总体设计
  5. 详细设计
  6. 编码
  7. 测试
  8. 维护

对应文档

  1. 项目计划报告
  2. 可行性研究报告
  3. 需求规格说明书
  4. 总体设计说明书
  5. 详细设计说明书
  6. 源程序
  7. 软件测试报告
  8. 软件维护说明

软件过程

软件过程是在工作产品构建过程中,所需完成的工作活动、动作和任务的集合。

活动

活动主要实现宽泛的目标,与应用领域、项目大小、结果复杂性或者实施软件工程的重要程度没有直接关系。

动作

动作包含了主要工作产品生产过程中的一系列任务。

任务

任务关注小而明确的目标,能够产生实际产品。

软件过程模型

或称:软件开发模型,软件生存周期模型,软件工程范型
是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略

CMM能力成熟度模型

在这里插入图片描述

瀑布模型

1970年提出,规定了各项软件工程活动,以及它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落
是一种线性模型
下层依赖上层
具有阶段间顺序性和依赖性
有推迟实现的观点

是一种使用广泛,以文档为驱动的模型
每个阶段都有与其相关联的里程碑和可交付产品
每个阶段结束前完成文档审查,及早改正错误
在实际应用时应该使用带反馈的瀑布模型
即后一阶段发现前一阶段的错误需要向上反馈修改返回

在这里插入图片描述

适用场合:

用于系统需求明确且稳定、技术成熟、工程管理较严格的场合

瀑布模型的缺点

  1. 增加工作量
  2. 开发风险大
  3. 早期错误发现晚
  4. 不适应需求变化

V模型(瀑布模型的变种)

在这里插入图片描述

原型模型

先部分开发产品,使客户和开发人员能够对计划开发的系统的相关方面进行检查。
目的:

  1. 明确并完善需求,如演示原型
  2. 研究技术选择方案,如技术验证原型

原型构建 and 系统开发

在这里插入图片描述

适用场合

客户定义一个总体目标集,但是他们并不清楚系统的具体输入输出;或开发者不确定算法的效率、软件与操作系统是否兼容以及客户与计算机交互的方式。

优点

  1. 减少需求不明确带来的风险

缺点

  1. 构造原型采用的技术和工具不一定主流
  2. 快速建立起来的系统加上连续的修改可能导致原型质量低下
  3. 设计者在质量和原型中进行折中
  4. 客户意识不到一些质量问题

增量模型

增量:满足用户需求的一个子集,能够完成一定功能、小而可用的软件
和原型模型不同的是增量模型是开发子集不会抛弃,原型是可抛弃,快速构建的

需要开放式结构
若一开始无法确定系统所用功能可以以一个增量为单位逐个进行:需求分析==》设计==》编码==》测试==》交付
增量模型是一种非整体开发的模型,是一种进化式的开发过程
增量模型从部分需求出发,先建立一个不完整的系统,通过测试运行这个系统取得经验和反馈,进一步使系统扩充和完善
如此反复进行,直至软件人员和用户对所设计的软件系统满意为止
增量模型结合了原型模型的基本要素和迭代的特征,采用了基于时间的线性序列,每个线性序列都会输出该软件的一个“增量

在这里插入图片描述

增量方式

在这里插入图片描述

适用场合

适用于软件开发中需求可能发生变化、具有较大风险、或者希望尽早进入市场的项目。

优点

  1. 无需提供完整的需求
  2. 软件能够更早投入市场
  3. 开放式体系结构便于维护
  4. 项目初期无需投入大量人力
  5. 产品逐步交付,能够较好的适应需求变化
  6. 能够看到中间产品进行改进,减少返工,风险低

缺点

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

螺旋模型

结合了瀑布模型和原型模型的特点
开发过程分成若干次迭代,每次迭代代表开发的一个阶段,对应模型中一条环线
每次迭代分成四个方面的活动,对应笛卡尔坐标的四个象限:

  1. 确定本阶段目标,选定实施方案,弄清项目开发的限制条件
  2. 评估所选方案,通过构造原型和风险分析识别和消除风险
  3. 实施软件开发和验证
  4. 评价本阶段的工作成果,提出修正建议,并计划下一阶段工作
    在这里插入图片描述
    在这里插入图片描述

优点

  1. 具有可扩展性和可修改性,提升了目标软件的适应能力,支持用户的需求的动态变化
  2. 原型可看作需求规格说明,易于用户和开发人员理解方便决策
  3. 方便管理人员及时进行决策的调制,减低风险

缺点

  1. 若每次迭代的效率不高,迭代次数多吗,将增加成本和推迟交付时间
  2. 需要非常有风向评估经验和专业知识的人规划管理,开发团队水平需求高

适用场合

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

喷泉模型

喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程

软件开发早期定义对象,整个开发过程充实和扩充对象
各个阶段使用统一的概念和表示方法,生命周期各阶段无缝连接
各个开发步骤多次反复迭代

在这里插入图片描述

优点

喷泉模型的各个阶段没有明显的界限,开发人员可以同步进行开发,可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

缺点

由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,因此不利于项目的管理。
喷泉模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入的各种信息、需求与资料的情况。

适用场合

面向对象开发

基于构件的开发模型

近年来得到广泛应用,改变大型软件开发方式
考虑的焦点是集成,而非实现

构件

  1. 系统中模块化的、可更换的部分
  2. 实现特定的功能
  3. 对实现进行封装,暴露一组接口

例如:动态链接库(.dll),浏览器插件

在这里插入图片描述

阶段解读

第一阶段:需求分析
第二阶段:构件分析(根据需求搜索构件,如果没有完全匹配的构件,则需要修改构件或者修改需求)
第三阶段:系统设计(考虑重用和集成,如果没有可重用的构件,则设计新软件)
第四阶段:开发集成(将构件集成到系统中,开发新软件)

优点

  1. 软件复用思想
  2. 降低开发成本和风险,加快开发速度
  3. 有较高的软件质量

缺点

  1. 模型复杂
  2. 商业构件不能修改,易导致需求变更
  3. 无法完全控制所开发的系统的演化
  4. 项目划分的好坏直接影响项目的结果

适用场合

系统之间有共性的情况

统一过程模型

完整且完美,基于面向对象方法学

从三个视角描述软件开发过程
1.动态视角:随时间变化的各个阶段
2.静态视角:所进行的活动
3.实践视角:可采用的良好实践建议

实践视角的6条最佳实践

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

动态视角和静态视角

在这里插入图片描述

统一过程的静态结构

在这里插入图片描述

统一过程的动态结构

在这里插入图片描述

适合场所

面向对象,具有大团队

敏捷开发过程

  1. 个体交互(个体和交互胜过过程和工具)
  2. 可工作的软件(可工作的软件胜过面面俱到的文档)
  3. 客户合作(客户合作胜过合同谈判)
  4. 响应变化(响应变化胜过遵循计划)

敏捷软件过程是基本原理和开发准则的结合
强调客户满意度和较早的软件增量交付
小但有激情的团队
非正式的方法
最小的软件工程产品
简化整体开发
开发中强调分析和设计的交付
开发者和客户之间积极持续交流

优点

  1. 快速响应变化和不确定性
  2. 可持续开发速度
  3. 适应商业竞争环境下的有限资源和有限时间

缺点

  1. 测试驱动开发可能导致通过测试但非用户期望
  2. 重构而不降低质量困难

适用场合

适用于需求模糊且经常改变的场合,商业竞争环境下的项目

选择过程模型

没有最好的软件过程模型只有最适合软件的软件过程模型
可以进行多模型组合

场合建议

1.前期需求明确的情况下,尽量采用瀑布模型
2.用户无系统使用经验,需求分析人员技能不足的情况下,尽量借助原型模型
3.不确定因素很多,很多东西无法提前计划的情况下,尽量采用增量模型或螺旋模型4.需求不稳定的情况下,尽量采用增量模型
5.资金和成本无法一次到位的情况下,可采用增量模型
6.对于完成多个独立功能开发的情况,可在需求分析阶段就进行功能并行,每个功能内部
都尽量遵循瀑布模型
7.全新系统的开发必须在总体设计完成后再开始增量或并行8.编码人员经验较少的情况下,尽量不要采用敏捷或迭代模型
9.增量、迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付和出口原则

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件工程第二章——软件生命周期(仅记录我所认为重要的知识点) 的相关文章

随机推荐

  • Ubuntu虚拟机使用NAT连接 然后无法上网的情况

    问题描述 xff1a 以下为我的虚拟机的网络适配器配置 xff0c 使用的是NAT模式 正常连接上网络的时候虚拟机右上角会如下图所示 当网络down了以后 xff0c 就不会显示第一个 xff0c 那么这个时候就可以使用以下方法来解决 仅作
  • 【计算机网路】(3)网络层:IP地址组成、分类,子网划分

    目录 IP地址 xff08 32位 xff09 1 1 组成 1 2 分类 1 2 1 A B C三类IP地址的组成 1 2 2 私有地址 记 1 3 子网掩码 1 3 1 示例 求IP地址为192 168 1 0的网络号 1 4 DHCP
  • 【知识图谱】知识图谱入门详细介绍

    知识图谱 入门与介绍 文章目录 知识图谱 入门与介绍1 引言2 概念3 分类4 发展历程5 作用5 1 搜索5 2 问答5 3 辅助大数据分析 6 知识图谱的构建6 1 数据获取6 2 信息 xff08 知识 xff09 抽取6 3 知识融
  • vnc服务器配置—linux

    VNC服务器配置 vnc服务器是个远程控制服务器 需求 xff1a 在linux中装服务器端 xff0c 在windows中装客户端 xff0c 使得可以远程控制linux 首先下载vnc服务器 yum install tigervnc s
  • 18715 出栈序列

    18715 出栈序列 时间限制 1000MS 代码长度限制 10KB 提交次数 0 通过次数 0 题型 编程题 语言 不限定 Description 一种简洁的栈定义方法如下 int st 1000 top 61 0 以top作为栈顶指针
  • Ubuntu 打不开终端

    因为我在做python时做了应该是删除了软连接 xff0c 然后终端就打不开了 在网上寻找多个方法 xff0c 终于找到适合自己的 请注意 xff0c 这里可能会出现其他问题 xff0c 使用时请注意 因为进不去终端 xff0c 所以按ct
  • unity实现切割图片

    我们在找资源时有时候会遇到把一堆图片放进一张图片的情况 xff0c 往往需要将一块块小图片切割出来使用 xff1a 步骤 xff1a xff08 1 xff09 将Sprite Mode设置为Multiple 2 xff09 点击Sprit
  • 使用mybatis实现数据库插入数据

    xff08 1 xff09 在Dao层的实体类接口中添加相应函数 xff08 2 xff09 在相应的 xml文件中加入一个mapper标记 xff08 3 xff09 修改main 函数中的语句 xff0c 关键是修改了sqlId 修改指
  • 计算机图形学(三维观察投影线、视图变换、投影变换)

    一 三维观察流水线 概念 xff1a 将建立的三维场景显示在二维视口的过程称为三维观察流水线 在三维观察流水线中 xff0c 也就是在将三维场景显示在二维视口的过程中 xff0c 需要在不同坐标系下进行不同的操作 xff0c 这些坐标系包括
  • javascript:html嵌入javascript代码的三种方式

    一 概念 javascript是运行在浏览器中的脚本语言 xff0c 运行在浏览器的内存当中 xff0c 不需要程序员手动编译 xff0c 编写玩源代码之后 xff0c 浏览器直接打开解释执行 xff0c 简称JS 二 html嵌入java
  • idea中新建和写一个简单的vue项目

    一 使用ida创建一个vue项目 xff08 默认node js环境已配好 xff0c idea已加vue js插件 xff09 xff08 1 xff09 新建项目 xff08 2 xff09 观察项目目录结构 node modules文
  • css的相对定位和绝对定位

    css标签的相对定位和绝对定位是通过position属性来控制的 xff0c 相对定位和绝对定位不改变元素的大小形状 xff0c 只改变元素的位置 一 position属性的值有以下几种 xff1a static 默认值 xff0c 没有定
  • 个人博客系统(Vue实现)的主页布局设计

    源码地址 xff1a https gitee com cheng xuyuan blogWeb git xff08 请忽略这句 xff09 一 整体布局 上下划分 xff0c 再左右划分 主体代码 xff1a lt el container
  • 绘制Vue主页的列表结构(包括增、删、改、查功能)

    源码地址 xff1a https gitee com cheng xuyuan blogWeb git xff08 请忽略这句 xff09 一 面包屑导航区域设计 xff08 下面划红线的部分 xff09 说明 xff1a el bread
  • pytorch入门10--循环神经网络(RNN)

    补充 xff1a torch randn 函数返回一个张量 xff0c 包含了从正态分布 xff08 均值为0 xff0c 方差为1 xff09 中抽取的一组随机数 张量的形状由参数决定 xff0c 参数个数任意 例如 xff1a torc
  • amixer用法

    1 先看看amixer支持哪些命令 大概有哪些功能 amixer help Usage amixer lt options gt command Available options h help this help c card N sel
  • 常见的UNIX/LINUX命令

    一 文件目录类命令 命令格式 xff1a lt 命令名称 gt 选 项 参数1 参数2 例如 xff1a ls la etc 1 浏览目录命令 xff08 1 xff09 ls list 功能 xff1a 显示目录文件 语法 xff1a l
  • redis介绍4--配置文件、持久化、事务、消息的发布与订阅、集群、哨兵模式、Jedis

    一 redis的配置文件redis conf 1 redis配置文件中关于网络的配置 1 port 指定redis服务所使用的端口 xff0c 默认使用6379 2 bind 配置客户端连接redis服务时 xff0c 所能使用的ip地址
  • Keil uVision5报错error:#5:#include “core_cm3.h“

    也是Keil小白 xff0c 在编译程序的时候出现了问题 xff0c 解决的文章链接po在 这里 xff01 下文为搬运 用Keil vision5编译时出现以下错误 xff1a error 5 cannot open source inp
  • 软件工程第二章——软件生命周期(仅记录我所认为重要的知识点)

    软件工程第二章 软件生命周期 前言生命周期组成 xff08 顺序 xff09 对应文档软件过程活动动作任务 软件过程模型CMM能力成熟度模型瀑布模型适用场合 xff1a 瀑布模型的缺点 V模型 xff08 瀑布模型的变种 xff09 原型模