第11章 软件工程

发布于:2024-05-09 ⋅ 阅读:(22) ⋅ 点赞:(0)

这里写目录标题

  • 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软件工具

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

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