第11章 软件工程

这里写目录标题

  • 1.软件过程
    • 1.1能力成熟度模型(CMM)
    • 1.2能力成熟度模型集成(CMMI)
    • 1.3瀑布模型(线性顺序)
    • 1.4增量模型
    • 1.5演化模型
      • 1.5.1原型模型
      • 1.5.2螺旋模型
    • 1.6喷泉模型
    • 1.7统一过程(UP)模型
  • 2.敏捷方法
  • 3.系统设计
  • 4.系统测试
    • 4.1单元测试(模块测试)
    • 4.2集成测试
    • 4.3黑盒测试(功能测试)
    • 4.4MaCabe算法
    • 4.5白盒测试(结构测试)
    • 4.6伪代码
  • 5.系统维护
    • 5.2软件文档(只好不坏)
    • 5.3系统维护的内容
    • 5.4系统软件质量属性
  • 6.软件项目估算
  • 7.进度安排
    • 7.1Gantt图(甘特图)
    • 7.2PERT图(有向图)
    • 7.3项目活动图
  • 8.软件配置管理
  • 9.风险管理
  • 10.软件质量模型
  • 10软件
    • 10.1软件评审
    • 10.2软件容错技术
    • 10.3软件工具

1.软件过程

软件工程三要素:方法,工具,工程

1.1能力成熟度模型(CMM)

1.初始级:软件过程杂乱无章,没有明确定义的步骤,英雄式核心人物

2.可重复级:建立了基本的项目管理过程和实践来跟踪项目费用,进度,功能特性

3.已定义级:过程文档化,标准化

4.已管理级:软件过程和产品质量

5.优化级:加强了定量分析,通过过程质量反馈,新观念,新技术的反馈

1.2能力成熟度模型集成(CMMI)

1.阶段式模型
初始的:不可预测或缺乏控制
已管理的:为项目服务
已定义的:为组织服务
定量管理的:已度量和控制
优化的:集中于过程改进

2.连续式模型
过程域能力等级(CL)0-5:
未完成(CL0):未执行,未得到
已执行(CL1):输入转输出
已管理(CL2):已管理的过程的制度化
已定义(CL3):已定义的过程的制度化
定量管理(CL4):已定量管理的过程的制度化
优化(CL5):改进

1.3瀑布模型(线性顺序)

以项目的阶段评审,文档控制为手段
适合于软件需求明确的软件项目

优点:容易理解,管理成本低,强调开发的阶段性早期计划及需求调查和产品测试
在这里插入图片描述
在这里插入图片描述

1.4增量模型

原型实现的迭代特征
客户对每个增量的使用和评估都做为下一个增量的新特征和功能,不断重复直至完善产品

优点:第一个交付版本所需的成本和时间较少
所承担的风险不大,减少用户需求的变更运行增量投资,仅对1个或2个投资在这里插入图片描述

1.5演化模型

需求经常发生变化,严格的交付时间
适合对软件需求缺乏认知

1.5.1原型模型

用户需求不清,经常变化,系统规模不大
在这里插入图片描述

1.5.2螺旋模型

增加了风险分析,适合复杂的大型软件
开发成本高
在这里插入图片描述

1.6喷泉模型

以用户需求为动力,以对象作为驱动
适合面向对象开发
开发过程具有迭代性和无间隙性
允许个开发活动交叉,迭代的进行

优点:提高软件的开发效率,节省开发时间
在这里插入图片描述

1.7统一过程(UP)模型

4个技术阶段:
初始阶段:生命周期目标
精华阶段:生命周期架构
构建阶段:初始运作功能
移交阶段:产品分布
典型代表RUP

2.敏捷方法

尽可能早地,持续地对有价值的软件的交付
每种方法基于一套原则

1.极限编程(XP)
由价值观,原则,实践,行为组成

4大价值观:沟通,简单性,反馈,勇气

12个最佳实践:计划游戏,小型发布,隐喻,简单设计,测试先行,重构,结对编程,集体代码所有制,持续集成,每周工作40个小时,现场客户,编码标准

2.水晶法
每一个不同的项目都需要一套不同的策略,约定和方法论
具体问题具体分析

3.并列征求法
使用迭代方法,把每30天一次的迭代称为冲刺

4.自适应软件开发(ASD):6个基本原则

5.敏捷统一工程(AUP)
大型连续,小型迭代
采用经典的UP阶段性活动
活动:建模,实现,测试,部署,配置及项目管理,环境管理

3.系统设计

1.概要设计(划分模块)
①设计软件系统总体结构(关键):
确定每个模块的功能,模块之间的调用关系,
模块之间的接口(模块之间传递的信息)
②数据结构及数据库设计
③编写概要设计文档
④评审

2.详细设计(算法设计)

4.系统测试

系统测试是保证系统质量和可靠性的关键步骤

意义:是为了发现错误而执行程序的过程
成功的测试是发现了尚未发现的错误

目的:希望以最少的人力和时间发现错误

基本原则:
1.应尽早并不断的进行测试
2.测试工作应避免由软件开发人员承担
3.不仅要确认输入数据,还要与逾期结果比较
4.要输入合理和不合理的条件
5.要检验程序做了该做的和不该做的事
6.严格按照测试计划进行,避免测试的随意性
7.妥善保存测试计划,测试用例
8.测试例子都是精心设计的,复用性高
9.测试目标来自于需求分析阶段

4.1单元测试(模块测试)

在模块编写完成且无编译错误后进行
一般为白盒测试

特征:
1.模块接口
2.局部设计结构
3.重要的执行路径
4.出错处理
5.边界条件

单元测试过程:
驱动模块:接受测试例子的数据,将数据送到测试模块,输出测试结果
桩模块
在这里插入图片描述

4.2集成测试

1.自顶向下集成测试
抽象→具体
不用编写驱动模块,要编写桩模块

2.自底向上集成测试
具体→抽象
不用编写桩模块,要编写驱动模块

3.回归测试:一旦发生变更就重新测试

4.冒烟测试

4.3黑盒测试(功能测试)

测试方法分为静态测试和动态测试
动态测试:黑盒测试,百盒测试

不关心程序内部结构,测试软件外部特性

技术:
等价类划分:有效等价类(符合条件),无效等价类(不符合条件),同时考虑
边界值分析:输入边界值判断
错误推测
因果图

4.4MaCabe算法

环路复杂度=有向弧数-结点数+2
环路复杂度=闭合区域+1

4.5白盒测试(结构测试)

根据程序的内部结构和逻辑来设计测试用例
对程序的路径和过程进行测试

技术:
逻辑覆盖:6种
①语句覆盖:每个语句至少执行一次
②判定覆盖:真值和假值都要执行一次(结果)
③条件覆盖:每个判断的真假都执行一次(中)
④判定/条件覆盖
⑤条件组合覆盖:判断中条件的各种组合
⑥路径覆盖:所有可能的路径
循环覆盖
基本路径测试

4.6伪代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.系统维护

系统可维护性评价指标:
可理解性,可测试性,可修改性

5.2软件文档(只好不坏)

文档是软件可维护性的重要因素
根据系统文档维护,用户文档测试

开发阶段保证软件具有可维护性

编写高质量的文档可以提高软件开发的质量

文档也是软件产品的一部分,没有文档的软件就不能称为软件

文档编制有重大意义和相当大的工作量

5.3系统维护的内容

1.硬件维护
2.软件维护
①正确性维护:改正开发阶段已存在但测试阶段未发现的错误
②适应性维护:为适应某种情况而做的修改
③完善性维护:扩充功能,完善性能的修改
④预防性维护:为了适应未来变化
3.数据维护

5.4系统软件质量属性

可靠性:一个系统对于给定的时间间隔内,在给定条件下无效运作的概率
MTTF/(1+MTTF)
MTTF:平均无故障时间

可用性:在给定时间点上,一个系统能够按照规格说明正确运作的概率
MTBF/(1+MTBF)
MTBF:平均失效间隔时间

可维护性:给定的使用条件下,在规定的时间间隔内,使用规定的过程和资源完成维护活动的概率1/(1+MTTR)
MTTR:平均修复时间

主程序员路径:n-1条
沟通路径:(n(n-1))/2条

6.软件项目估算

1.COCOMO估算模型
基本:静态单变量模型
中级:静态多遍历模型
详细

2.COCOMOII模型

3个阶段性模型:
①应用组装模型
②早期设计阶段模型
③体系结构阶段模型

规模估算选择:对象点,功能点,代码行

7.进度安排

7.1Gantt图(甘特图)

能清晰描述每个任务的开始,结束时间,进展情况,任务之间的并行性
不能反映任务间的依赖关系,难以确定关键所在,不能反映计划中有潜力的部分
在这里插入图片描述

7.2PERT图(有向图)

可以表示依赖,不能表示并行
箭头表示任务,数字表示完成该任务所需时间

只有当指向当前结点的所有任务完成后,结点所表示的事件才能出现,才能执行任务

开始结点的最早时刻:0
最早时刻:前→后max,
最迟时刻:后→前min
松弛时间=最迟时间-最早时间
关键路径:松弛时间为0的路径
在这里插入图片描述

7.3项目活动图

在这里插入图片描述

8.软件配置管理

目标:变更标识,变更控制,版本控制,确保变更正确的实现,变更报告

内容:1.版本管理,配置支持,变更支持,过程支持,团队支持,变化报告,审计支持
2.软件配置标识,变更管理版本控制,系统建立,配置审核,配置状态报告

配置数据库:开发库,受控库,产品库

9.风险管理

软件风险的特性:不确定性,损失

类型:
项目风险
技术风险
商业风险

1.风险识别
2.风险预测(风险估计)
两个方面:概率,后果
风险显露度=概率后果,ER=PC
3.风险评估:风险参照水准

10.软件质量模型

ISO/IEC 9126软件质量模型
Mc Call软件质量模型

1.功能性
适应性:适合
准确性:正确或相符的结果
互用性:交互
依从性:服从规定
安全性
2.可靠性
成熟性
容错性
易恢复性
3.易使用性
易理解性
易学性
易操作性
4.效率
时间特性:响应和处理时间,吞吐量
资源特性
5.可维护性
易分析性
易改变性
稳定性
易测试性:确认经修改软件
6.可移植性
适应性
易安装性
一致性
易替换性
在这里插入图片描述

10软件

10.1软件评审

质量:用户满意度
设计质量:设计的规格说明书符合用户的要求
程序质量:程序按照设计规格说明所规定的情况正确执行

1.设计质量的评审内容
①评价软件的规格说明是否合乎用户的需求
②评审可靠性,能否避免一些异常
③评审保密措施实现情况,是否对系统使用资格进行检查
④评审操作特性实施情况,恰当性
⑤评审性能实现情况,是否达到所规定性能的目标值
⑥是否具有可修改性,可扩充性,可互换性,可移植性,可测试性,复用性

2.程序质量的评审内容
模块结构:处理模块,数据模块
控制流结构
数据流结构
模块结构与功能结构之间的对应关系

正式技术评审的目标:发现软件中的错误

10.2软件容错技术

实现容错的主要手段:冗余
1.结构冗余:静态,动态,结构
2.信息冗余
3.时间冗余
4.冗余附加技术
屏蔽软件错误的容错系统
冗余备份程序的存储及调用
实现错误检测和错误恢复的程序
实现容错软件所需的固化程序

10.3软件工具

软件开发工具:需求分析工具,设计工具,编码与排错工具,测试工具

软件维护工具:版本控制工具,文档分析工具,开放信息库工具,逆向工程工具(静态,动态),再工程工具

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

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

相关文章

论文辅助笔记:Tempo之modules/prompt.py

1 get_prompt_param_cls 2 get_prompt_value 3 Prompt 类 3.1 _init_weights 3.2 forward

一、RocketMQ基本概述与部署

RocketMQ基本概述与安装 一、概述1.MQ概述1.1 用途1.2 常见MQ产品1.3 MQ常用的协议 2.RocketMQ概述2.1 发展历程 二、相关概念1.基本概念1.1 消息(Message)1.2 主题(Topic)1.3 标签(Tag)1.4 队列&#xff0…

gige工业相机突破(一,准备资源)

gige相机能不能绕开相机生产商提供的sdk,而直接取到像? 两种办法,第一,gige vision2.0说明书,第二,genicam 首先你会去干什么事? 好几年,我都没有突破,老虎吃天&#x…

产品AB测试设计

因为vue2项目升级到vue3经历分享1,vue2项目升级到vue3经历分享2,前端系统升级,界面操作也发生改变,为了将影响降到最低,是不能轻易让所有用户使用新系统的。原系统使用好好的,如果新界面用户不喜欢&#xf…

2024/5/5 英语每日一段

Meanwhile, in a twist, Tesla this month settled a high-profile case in Northern California that claimed Autopilot played a role in the fatal crash of an Apple engineer, Walter Huang. The company’s decision to settle with Huang’s family—along with a ruli…

如何打包Apk适配32和64位

一个表格了解lib下的文件夹 .so文件描述armeabi-v7a第七代及以上的ARM处理器,2011年以后生产的大部分Android设备都使用。arm64-v8a第8代、64位ARM处理器,很少设备,三星GalaxyS6是其中之一。armeabi第5代、第6代的ARM处理器,早期…

Mysql报错红温集锦(一)(ipynb配置、pymysql登录、密码带@、to_sql如何加速、触发器SIGNAL阻止插入数据)

一、jupyter notebook无法使用%sql来添加sql代码 可能原因: 1、没装jupyter和notebook库、没装ipython-sql库 pip install jupyter notebook ipython-sql 另外如果是vscode的话还需要安装一些相关的插件 2、没load_ext %load_ext sql 3、没正确的登录到mysql…

Git-flow分支管理与Aone-flow分支管理对比

Git-flow分支管理与Aone-flow分支管理对比 git-flow分支管理: master: 主分支,主要用来版本发布。 hotfix:线上 bug 紧急修复用到的临时分支。这个分支用来修复主线master的BUG release(预发布分支):rel…

深入理解网络原理2----UDP协议

文章目录 前言一、UDP协议协议段格式(简图)校验和 二、UDP与TCP 前言 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完成业务,就有了⽹络互连。 一、UDP协议 协…

基于matlab GUI的Alpha shapes边缘提取

1、程序介绍 本程序是基于matlab语言,使用alpha shapes算法实现点云边缘提取。算法具体原理参考博客:基于alpha shapes的边缘点提取(matlab)-CSDN博客。该程序包括3个按钮:加载点云、边缘点提取、保存。其中&#xff0…

A Bug‘s Life (并查集)

//新生训练 #include <iostream> #include <algorithm> using namespace std; const int N 5000; int p[N], sz[N]; int n, m; int find(int x) {if (p[x] ! x)p[x] find(p[x]);return p[x]; } int main() {int T;scanf("%d", &T);for (int k 1; …

c#学习基础1

一、复杂数据类型 1&#xff09;概述 2&#xff09;枚举 1.基本概念 枚举是一个比较特别的存在&#xff0c;它是一个被命名的整形常量的集合&#xff0c;一般用它来表示状态&#xff0c;类型等 1.1申明枚举和申明枚举变量 1.2申明枚举语法 2.在哪里申明枚举 3.枚举的使用 4…

13_Scala面向对象编程_伴生对象

文章目录 1.伴生对象1.1 scala的一个性质&#xff0c;scala文件中的类都是公共的&#xff1b;1.2 scala使用object关键字也可以声明对象&#xff1b; 3.关于伴生对象和类4.权限修饰符&#xff0c;scala仅有private;5.伴生对象可以访问伴生类中的私有属性&#xff1b;6.案例7.伴…

五一假期告别人山人海,AI绘画让你的照片更美!

快乐总是短暂的&#xff0c;五一假期结束了&#xff0c;想必大家都拍了不少好看的照片&#xff0c;但是景点也经常是人山人海&#xff0c;照片中不免会出现其它不相干的人或物&#xff0c;以前想抹除这些人或物得找专业的美工或者图像处理专家P掉才行&#xff0c;现在AI绘画来了…

【Redis】Redis命令(一)

1.基本命令 1.1.切换DB 默认使用的是 0 号 DB&#xff0c;可以通过 select db 索引来切换 DB 1.2.查看 key 数量 dbsize 命令可以查看当前数据库中 key 的数量 1.3.删除当前库中数据 flushdb 命令仅仅删除的是当前数据库中的数据&#xff0c;不影响其它库 1.4.删除所有库中数据…

用Python做多项Logit模型

看到网上有一些用 python 做多项 Logit 模型的讲解&#xff0c;大多是使用 scikit-learn 库。这里要介绍的是如何使用 statsmodels 库来做多项 Logit 模型。 题外话&#xff0c;有人会问&#xff0c;statsmodels 和 scikit-learn 两个库有什么区别&#xff1f;为什么你非要用 …

SQL 基础 | JOIN 操作介绍

在SQL中&#xff0c;JOIN是一种强大的功能&#xff0c;用于将两个或多个表中的行结合起来&#xff0c;基于相关的列之间的关系。 JOIN操作通常用在SELECT语句中&#xff0c;以便从多个表中检索数据。 以下是几种基本的JOIN类型以及它们的用法&#xff1a; INNER JOIN&#xff1…

数据结构===树

文章目录 概要概念相关概念 有哪些常用的树小结 概要 树是一种新的数据结构&#xff0c;不同于数组&#xff0c;链表。就像大自然中的树&#xff0c;看下这个数据结构&#xff0c;很有意思&#xff0c;有一个主干&#xff0c;然后还有很多树叉&#xff0c;即支干。不错&#xf…

数据结构练习题---环形链表详解

链表成环&#xff0c;在力扣中有这样的两道题目 https://leetcode.cn/problems/linked-list-cycle/ https://leetcode.cn/problems/linked-list-cycle-ii/description/ 这道题的经典解法是利用快慢指针&#xff0c;如果链表是一个环形链表&#xff0c;那么快指针(fast)和慢指…

求矩阵对角线元素之和(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int sum 0;int a[3][3] { 0 };//获取数组a的值&#xff1b;printf(&qu…
最新文章