第11章 软件工程

news2024/11/17 12:32: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.coloradmin.cn/o/1642930.html

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

相关文章

噪声嵌入提升语言模型微调性能

在自然语言处理(NLP)的快速发展中,大模型(LLMs)的微调技术一直是研究的热点。最近,一篇名为《NEFTUNE: NOISY EMBEDDINGS IMPROVE INSTRUCTION FINETUNING》的论文提出了一种新颖的方法,通过在训…

每日一题2:获取DataFrame的大小

在Python中,pandas库是一个非常流行的数据处理库,它提供了DataFrame这一数据结构来高效地处理表格化的数据。如果想查看一个DataFrame的行数和列数,可以使用.shape来实现。 一、基本用法 当你有一个名为df的DataFrame时,只需调用…

rust使用Atomic创建全局变量和使用

Mutex用起来简单,但是无法并发读,RwLock可以并发读,但是使用场景较为受限且性能不够,那么有没有一种全能性选手呢? 欢迎我们的Atomic闪亮登场。 从 Rust1.34 版本后,就正式支持原子类型。原子指的是一系列…

USP技术提升大语言模型的零样本学习能力

大语言模型(LLMs)在零样本和少样本学习能力上取得了显著进展,这通常通过上下文学习(in-context learning, ICL)和提示(prompting)来实现。然而,零样本性能通常较弱,因为缺…

c#Excel:2.写入Excel表 3.读取Excel表

--写入Excel表-- 该例首先从数据库aq中读取学生信息表staq(参考数据库章节),然后将学生信息表中的数据写入Excel表格中 (1)在OfficeOperator类库项目的ExcelOperator类中定义索引器,用于获取Excel表格中的单元格,代码…

QT:QT窗口(一)

文章目录 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项添加分割线 工具栏创建工具栏设置停靠位置创建工具栏的同时指定停靠位置使用QToolBar类提供的setAllowedAreas函数来设置停靠位置 设置浮动属性设置移动属性 状态栏状态栏的创建在状态栏中显示实时消息在状态栏中显示永久…

Meta Llama 3 使用 Hugging Face 和 PyTorch 优化 CPU 推理

原文地址:meta-llama-3-optimized-cpu-inference-with-hugging-face-and-pytorch 了解在 CPU 上部署 Meta* Llama 3 时如何减少模型延迟 2024 年 4 月 19 日 万众期待的 Meta 第三代 Llama 发布了,我想确保你知道如何以最佳方式部署这个最先进的&…

深入学习Redis(1):Redis内存模型

Redis的五个对象类型 字符串,哈希,列表,集合,有序集合 本节有关redis的内存模型 1.估算redis的内存使用情况 目前内存的价格比较的高,如果对于redis的内存使用情况能够进行计算,就可以选用合适的设备进…

Docker高频使用命令

一、Docker常用命令总结 1.镜像命令管理 指令描述ls列出镜像build构建镜像来自Dockerfilehoistory查看历史镜像inspect显示一个或多个镜像的详细信息pull从镜像仓库拉取镜像push推送一个镜像仓库rm移除一个或多个镜像prune一处未使用的镜像,没有被标记或被任何容器…

上位机图像处理和嵌入式模块部署(树莓派4b和qt应用全屏占有)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 我们都知道,嵌入式应用一般都是为了某一个特定应用而存在的。也就是说,和pc不同,这个嵌入式板子一般都是为了解…

Java之LinkedHashMap

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。…

【数学建模】矩阵微分方程

一、说明 我相信你们中的许多人都熟悉微分方程,或者至少知道它们。微分方程是数学中最重要的概念之一,也许最著名的微分方程是布莱克-斯科尔斯方程,它控制着任何股票价格。 ​​ 股票价格的布莱克-斯科尔斯模型 微分方程可以由数学中的许多…

正在载入qrc文件 指定的qrc文件无法找到。您想更新这个文件的位置么?

打开Qt的ui文件&#xff0c;弹出提示框 如果需要用到qrc文件&#xff0c;选择Yes&#xff0c;再选择qrc文件所在的位置&#xff1b;如果不需要qrc文件&#xff0c;可以选择No&#xff0c;然后用普通文本编辑器打开&#xff0c;将“ <resources> <include location&q…

去哪儿网机票服务请求体bella值逆向

作者声明&#xff1a;文章仅供学习交流与参考&#xff01;严禁用于任何商业与非法用途&#xff01;否则由此产生的一切后果均与作者无关&#xff01;如有侵权&#xff0c;请联系作者本人进行删除&#xff01; 一、加密定位 直接全局搜索bella&#xff0c;在可疑的地方下断&…

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…

数据结构学习/复习7--栈的实现/括号匹配/队列的实现/两个队列实现栈

一、栈 1.概念及性质 2.栈的实现(top0版) 注意事项&#xff1a;top也可初始为-1,代码需要调整 二、栈练习 1.括号匹配 三、队列 1.概念及性质 2.队列的实现 四、队列练习 1.两个队列实现栈

2024年 Java 面试八股文——SpringBoot篇

目录 1. 什么是 Spring Boot&#xff1f; 2. 为什么要用SpringBoot 3. SpringBoot与SpringCloud 区别 4. Spring Boot 有哪些优点&#xff1f; 5. Spring Boot 的核心注解是哪个&#xff1f;它主要由哪几个注解组成的&#xff1f; 6. Spring Boot 支持哪些日志框架&#…

10个使用NumPy就可以进行的图像处理步骤

图像处理是一种数学计算。数字图像由称为像素的彩色小点组成。每个像素由红、绿、蓝(RGB)三个独立的颜色组成。每个像素中的主色由每个RGB分量的数值决定。 本文将介绍10个使用使用NumPy就可以进行的图像处理步骤&#xff0c;虽然有更强大的图像处理库&#xff0c;但是这些简单…

数据结构-二叉树结尾+排序

一、二叉树结尾 1、如何判断一棵树是完全二叉树。 我们可以使用层序遍历的思路&#xff0c;利用一个队列&#xff0c;去完成层序遍历&#xff0c;但是这里会有些许的不同&#xff0c;我们需要让空也进队列。如果队列里到最后只剩下空那么这棵树就是完全二叉树。具体的实现如下…

【Flask 系统教程 2】路由的使用

Flask 是一个轻量级的 Python Web 框架&#xff0c;其简洁的设计使得构建 Web 应用变得轻而易举。其中&#xff0c;路由是 Flask 中至关重要的一部分&#xff0c;它定义了 URL 与视图函数之间的映射关系&#xff0c;决定了用户请求的处理方式。在本文中&#xff0c;我们将深入探…