202110111235 - 软件工程笔记
1. 概述
1.1 开发只占冰山一角
1.2 计算机科学、数学,工程,管理
1.3 软件开发的本质:实现问题域中的概念和处理逻辑 到 运行平台的概念和处理逻辑的映射。
系统建模
需求 -> 设计 -> 实现
1.4 软件工程的目标:
- 生产具有正确性、可用性、以及开销合宜的产品。
1.5 软件工程的活动:
需求:定义问题,给出系统模型
- 需求获取,跟用户、领域专家沟通
- 需求定义,给出系统功能正确的陈述。通常采用自然语言、use case图
- 需求规约,系统需求规格说明
- 需求验证,验证需求陈述和需求规约的一致性、完整性、可跟踪性。
设计:在需求分析的基础上,给出系统的软件设计方案。
- 总体设计
- 建立整个软件体系结构,包括子系统/模块以及相关层次的说明、每一模块的接口定义
- 结构类型:层次模块体系结构、C/S
- 详细设计
- 根据总体设计,给出每一模块的详细描述,即数据结构和实现算法
实现:把设计结果转换为可执行代码
确认:贯穿整个开发过程
支持:修改和完善,纠错/适应
2. 软件过程
2.1 软件过程
开发逻辑,是获取正确软件的关键
- 软件开发有哪些活动?即要做哪些映射
- 应如何正确组织开发活动,形成求解软件的逻辑?
软件开发方法学:结构化方法、面向对象方法、面向数据结构方法、维也纳开发方法
过程是活动的集合,活动是任务的集合,任务是把输入转换成输出的操作。
2.2 软件生存周期过程
按承担软件开发工作的主体,分三类:
基本过程
- 获取、供应、开发、运行、维护
- 开发过程包括13个活动
- 过程的实施准备
- 系统需求分析(软硬件、人)
- 系统结构设计
- 软件需求分析(一致性、二义性)
- 软件体系结构设计
- 软件详细设计
- 软件编码和测试
- 软件集成
- 软件合格测试
- 系统集成
- 系统合格测试
- 软件安装
- 软件验收支持
支持过程
- 文档过程
- 配置管理过程
- 质量保证过程
- 验证过程
- 确认过程
- 联合评审过程
- 审计过程
- 问题解决过程
组织过程
- 管理过程
- 基础设施过程
- 改进过程
- 人力资源过程
- 资产管理过程
- 复用程序管理过程
- 领域软件工程过程
软件开发模型 = 软件生存周期模型
- 瀑布模型
- 每个阶段的工作产品,可提交的产品
- 增量模型
- 适用:最初的需求是明确,确定的。不断迭代
- 演化模型
- 适用:最初需求不明确。初版用户反馈
- 喷泉模型
- 需求分析和系统设计融合较多
3. 需求
需求的基本性质:
- 必要性:是要求的吗?
- 无歧义性:只能用一种方式解释
- 可测的:可以进行测试吗?
- 可跟踪的:可以从一个开发阶段到另一个开发阶段进行跟踪
- 可测量的,可量化
需求分类:
- 功能
功能需求规约了系统或系统构建必须执行的功能。
(1)关于该功能输入的所有假定,或为了验证该功能输入,有关监测的假定;
(2)功能内的任一次序,这一次序是与外部相关的;
(3)对异常条件的响应,包括所有内外部产生的错误;
(4)需求的时序优先程度;
(5)功能之间的互斥规则;
(6)系统内部状态的假定;
(7)为了该功能的执行,所需要的输入和输出次序;
(8)用于转换或内部计算的公式。 - 性能
- 外部接口
- 设计约束:限制了系统或构建的设计方案
- 质量属性
软件需求规约SRS:
格式:
1. 引言
1.1 目的
1.2 范围
1.3 定义,缩略语
1.4 参考文献
1.5 概述(即项目范围)
2. 总体描述
2.1 产品概述
2.2 产品功能
2.3 用户特性
2.4 约束
2.5 假设和依赖
3. 特定需求(核心)
附录
索引
4. 结构化分析方法
模型:就一定目的而言,从某种角度,给出物理系统抽象的描述。主要是边界,及内部关系。
就软件需求分析而言,即:系统化地使用问题域属于,给出该问题的模型(即“系统必须做什么”的一个估算)
需求分析的目标:
对需求陈述进行分析,解决其中的歧义、不一致等问题,以系统化的形式表达用户的需求,即给出问题的形式化或半形式化的描述(称为系统的概念模型,或系统的需求规约或需求规格说明)。作为开发人员和客户间技术契约的基础,并作为而后开发活动的一个基本输入。
结构化分析模型:
(1)基本术语
数据流、加工、数据存储、数据源、数据潭
数据流、数据存储 -- 描述数据抽象
加工 -- 描述过程/功能的抽象,表达系统内涵
数据源、数据潭 -- 描述系统边界抽象,表达系统外延
(2)模型表达工具
数据流图(DFD图) -- 表达系统功能模型的工具
数据字典 -- 定义数据流和数据存储
加工小说明 -- 判定表或判定树
描述加工做什么,即加工逻辑,也包括执行条件、优先级、执行频率、出错处理等。
【1】结构化自然语言
if 20 < 订票量
then 订票折扣为10%
else 订票折扣为5%
【2】判定表
【3】判定树
(3)结构化分析过程
【1】建立系统的功能模型
首先:建立系统环境图(顶层数据流图),确定系统边界
继之:自顶向下,逐步求精,建立系统的层次数据流图
【2】建立数据字典
定义数据流、数据存储、数据项
【3】给出加工小说明
例:
(4) 需遵循的约定
加工 -- 其标识使用领域术语,采用动宾结构;必须有输入和输出
数据流 -- 其标识使用领域术语,采用名词或名词短语
(5)《XX系统需求规格说明书》
1. 引言
1.1 编写目的
说明编写本需求规格说明书的目的
1.2 背景说明
(1)给出待开发的软件产品的名称
(2)说明本项目的提出者、开发者及用户
(3)说明该软件产品将做什么,如有必要,说明不做什么
1.3 术语定义
1.4 参考文献
2. 概述
2.1 功能概述
叙述待开发软件产品将完成的主要功能。
2.2 约束
叙述对系统设计产生影响的限制条件,并对下一节中所述的某些特殊需求提供理由,如管理模式、硬件限制、安全等。
3. 数据流图与数据字典与加工说明
3.1 数据流图
3.1.1 数据流图1
(1)画出该数据流图
(2)加工说明
(3)数据流说明
3.2 数据字典
3.2.1 文件说明
3.2.2 数据项说明
4. 接口
4.1 用户接口
4.2 硬件接口
4.3 软件接口
5. 性能需求
5.1 精度
逐项说明对各项输入数据和输出数据达到的精度
5.2 时间特征
定量说明本软件的时间特征,如响应时间、更新处理时间、数据传输、转换时间、计算时间等。
5.3 灵活性
说明本软件所具有的灵活性,即当用户需求有某些变化(如操作方式、运行环境、时间特征等),本软件的适应能力。
6. 属性
6.1 可使用性
规定某些需求,如检验点、恢复方式和重启动性,以确定软件可使用。
6.2 保密性
规定保护软件的要素
6.3 可维护性
6.4 可移植性
7. 其他需求
7.1 数据库
7.2 操作
7.3 故障及处理
5. 结构化设计方法
设计:一种软件开发活动,定义实现需求规约所需要的软件结构。
设计目标:依据需求规约,在一个抽象层上建立系统软件模型,包括软件体系结构(数据和程序结构),以及详细的处理算法,产生设计规格说明书。
结构化设计分:
- 总体设计:确定系统的整体模块结构,需要的软件模块以及这些模块之间的调用关系。+
- 体系结构设计(MSD):定义软件模块及模块间关系,从分析模型(DFD图)导出。
- 接口设计
- 外部接口设计:依据分析模型中的顶层数据流图。包括用户界面,与其他软硬件的接口
- 内部接口设计:系统内部各元素间的接口
- 数据设计:根据数据字典确定软件涉及的文件系统的结构及数据库的表结构
- 详细设计:详细描述模块。
结构化设计方法
(1)总体设计阶段(将DFD转为MSD)
【1】引入两个术语:模块、调用
【2】引入模块结构图(MSD)
分两步:
DFD转为初始MSD,分类:
变换型DFD
变换设计步骤:
设计准备:复审语境,符合实际
确定边界:输入、变换、输出的边界,确定系统的逻辑输入和逻辑输出
第一级分解:主模块、输入模块、变换模块、输出模块
第二级分解:
事务型DFD
初始DSD转为可供详细设计的DSD
模块和模块化 (高内聚低耦合)
接口:由其他模块访问的对象
实现:私有量、、过程描述、源程序代码
耦合类型
内容耦合:一个模块直接访问或修改另一模块的数据
公共耦合:两个模块共同引用一个全局数据项
控制耦合:一个模块向另一模块发送控制信号
记耦合:
数据耦合:模块通过参数传递基类型的数据
内聚类型
s
三个阶段:
初始设计:根据穿越边界的数据流初步确定系统与外部的接口
精化设计:”高内聚低耦合“,精化DSD,并设计全局数据结构和每一模块的接口
设计复审
启发式规则
7 +- 2
接口设计
数据设计
详细设计工具
伪码
程序流程图(程序框图)
PAD图
N-S图
判定表/判定树
软件设计规约
概要设计规约
详细设计规约
6. 面向对象设计
OOA
OOD
OOP
UML
需求获取层:USE CASE图
需求分析层:类图、交互图
设计层:类图、交互图
实现:
表达客观事物的术语: 八个类目
类和对象:类图
接口
协作:交互图
用况:
主动类:至少一个进程或线程
构件:
制品:打包
节点:
控制复杂性的术语:包
表达关系的术语:
关联
泛化
实现
依赖