第三章 软件工程模型和方法
第三章 软件工程模型和方法
文章目录
- 第三章 软件工程模型和方法
- 1.模型
- 2.软件建模方法(了解)
- 3.结构化方法
- 3.1 结构化分析
- 3.2 数据流图DFD(Data Flow Diagram)
- 3.3 数据字典DD(Data Dictionary)
- 3.4 加工说明定义
- 3.5 状态转换图STD(State Transition Diagram)
- 3.6 实体-联系图ERD
- 3.7 结构图SC(Structure Chart)
- 3.8 结构化概要设计
- 3.9 优化软件结构设计的指导规则——启发式设计策略
- 3.10 结构化详细设计
- 4. 面向对象方法
软件工程最核心的技术是 软件建模
1.模型
模型是对客观世界的简化,是对事物或系统的一种抽象描述。
模型有多个视图
软件工程的三种模型:
计算无关模型(CIM)->平台无关模型(PIM)->平台相关模型(PSM)
业务模型 分析模型 设计模型 代码实现模型
系统工程 需求 设计 编码实现
------------------------------------------------------测试----------------------------------------------------------------
测试模型
2.软件建模方法(了解)
3.结构化方法
基于模块化思想,采用“自顶向下,逐步求精”的技术,将系统化分为结构化分析、结构化设计和结构化编程
其中结构化编程是指采用顺序、选择和重复三种基本控制结构构造程序,避免使用goto语言。
- 核心:数据和处理
- 手段:自顶向下,逐步求精、模块化。(分解、抽象)
- 常用的建模工具:
- 需求建模:DFD(数据流图)、DD(数据字典)、ERD(实体关系图)、STD(状态图)
- 设计建模:
- 结构图(SC)
- 流程图、N-S图、PAD图、伪代码
数据流图和数据字典共同构成系统的功能逻辑模型。
3.1 结构化分析
结构化分析先把整个系统表示为一张环境总图,标出系统边界以及所有的输入和输出,然后由顶向下对系统进行细化,每细化一次,就把一些复杂的功能分解成较简单的功能,并增加细节描述,直至所有的功能都足够简单,不需要再继续细化为止。
结构化分析的输出是结构化分析模型
结构化分析模型包括
- 数据流图DFD
- 实体-关系图ERD
- 状态转换图STD
- 数据字典DD
3.2 数据流图DFD(Data Flow Diagram)
数据流图的主要作用是指明系统中数据是如何流动和变换的,并描述使数据流进行变换的功能。
核心要素:
元素 | 符号 | 说明 |
---|---|---|
外部实体 | 矩形 | 指系统之外的数据源或数据终点(如用户、其他系统),代表数据的源头或归宿。 |
数据流 | 带箭头的线段 | 表示数据在系统中的流动方向,箭头上标注数据名称(如 “订单信息”“查询请求”)。 |
处理过程 | 圆形 / 圆角矩形 | 又称 “加工”,表示对数据的处理功能(如 “计算总价”“验证用户信息”)。 |
数据存储 | 两条平行横线/缺边矩形 | 表示数据的存储节点(如数据库、文件),用于暂存或持久化数据(如 “用户表”“订单文件”)。 |
符号表示
- 圆框代表加工(动作)
- 箭头 —> 代表数据流向,数据名称表在箭头边上
- 方框表示数据的源(发送数据)和宿(接收数据),即与系统打交道的人或外界系统。
- 双杠(或单杠)表示数据文件或数据库
数据流图分层建模,先画出顶层图,在画0层、1层…直至足够详细。(每次对“加工”分解)
以销售系统为例:
顶层图(通常只包含一个加工)
0层图
1层图
注意:子图的输入数据流和输出数据流必须与父图的输入数据流和输出数据流保持一致。
以此类推,如果“加工”还能分解,还可以获得2层图,如果每个“加工”不能分解,则称为底层图。
分解过程如下抽象:
顶层图通常有且只有一个加工,而外部实体数量没有要求,但不论多少个外部实体,都只有一个加工。
外部实体的数量取决于系统需要与多少个外部对象交互,例如:
- 1 个外部实体:系统仅与单一对象交互(如内部工具系统与 “管理员” 交互);
- 2 个外部实体:常见于简单系统(如 “用户” 和 “数据库”);
- ≥3 个外部实体:复杂系统可能涉及多个对象(如电商系统与 “用户”“商家”“物流公司”“支付平台” 交互)。
分解过程中一个加工可以分解为至少两个(>=2)加工。
随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)。
顶层图又叫基本数据流图,分层图又叫功能级数据流图。
维度 | 基本数据流图(顶层图) | 功能级数据流图(分层图) |
---|---|---|
抽象层级 | 最高层(全局视角) | 中低层(逐步细化的功能视角) |
加工数量 | 固定为 1 个(系统整体) | ≥2 个(拆分后的子功能模块) |
是否包含内部细节 | 否(仅描述外部交互) | 是(描述加工分解、数据存储、内部数据流) |
数据存储 | 无 | 可选(用于表示数据暂存或持久化) |
作用 | 定义系统边界,明确输入输出关系 | 描述系统功能结构,细化数据处理逻辑 |
典型用途 | 与用户确认系统范围 | 指导开发人员设计模块和流程 |
顶层图:
0层图
3.3 数据字典DD(Data Dictionary)
数据字典是关于数据的信息的集合,也就是对数据流图中所包含的元素的定义的集合。(最低一层DFD包含系统的全部数据和加工说明)
数据字典的内容:
- 数据流(外部实体):表明系统中数据的逻辑流向,可以是数据项或数据结构。
- 数据流分量(数据基本项):是组成数据流和数据存储的最小单位项,不可再分。
- 数据存储(数据库、文件):数据流的暂停或永久保存的地方。
- 加工(处理):仅对数据流程图(DFD)中最底层的处理逻辑加以说明。
源点和终点是为了帮助理解系统和外界接口而列入的,不在系统之内,故一般不在字典中说明。
符 号 | 名 称 | 举 例 |
---|---|---|
= | 定义为 | x=… 表示x由…组成 |
+ | 与 | a+b 表示a和b |
[…,…] | 或 | [a,b]表示a或b |
[…│…] | 或 | [a│b] 表示a或b |
{…} | 重复 | {a} 表示a重复0或多次 |
{…}上n下m | 重复 | {a}上3下8 表示a重复3到8次 |
(…) | 可选 | (a) 表示a重复0或1次 |
″…″ | 基本数据元素 | ″a″ 表a是基本数据 |
例如:成绩清单 = 准考证号 + 考试科目 + { 试题号 + 试题分 }上1下5 + 总分
表示 成绩清单由 准考证号 与 考试科目 与 试题号和总分重复1~5次 与 总分 组成
3.4 加工说明定义
加工说明是对DFD中每个加工所做的说明,由输入数据、输出数据和加工逻辑组成。
加工说明通常用结构化语言、判定表或判定树、IPO图(Intput-Process-Output chart)等来描述。
3.5 状态转换图STD(State Transition Diagram)
状态转换图,简称状态图,用于指明系统在外部事件的作用下将会如何动作。
表明了系统的各种状态以及各种状态间的变迁,从而构成行为模型的基础,关于软件控制方面的附加信息则包含在控制说明中。
用圆角矩形表示状态,每个状态包括状态名和活动(没有活动可以不写)
线条表示状态的转变,箭头上标注**事件(触发条件)**和动作(可选)。
3.6 实体-联系图ERD
3.7 结构图SC(Structure Chart)
基本成分:模块、调用和数据
矩形框表示模块,带箭头的连线表示模块间的调用关系。
例:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
3.8 结构化概要设计
任务:把用数据流图DFD表示的分析模型转换为以结构图SC表示的设计模型。
数据流图(DFD)在 结构化设计(SD) 阶段中,根据数据流特性对系统分为变换型结构和事务型结构两种。
-
变换型结构 (由输入、变换和输出三部分组成)
- 变换型数据流图,基本呈线性形状的结构,由输入、变换、输出三部分组成,变换是系统地变换中心。
- 核心特征:数据流呈现 “线性” 流动,无明显的事务分支,系统主要功能是对输入数据进行加工变换。
-
事务型结构(由至少一条输入路径、一个事务中心与若干条动作路径组成)
- 事务型数据流图,数据项沿着输入同路到达一个处理T,T根据输入数据的类型在若干动作序列中选出一个来执行。处理T称为事务中心。
- 核心特征:数据流呈现 “辐射状” 流动,一个输入触发多个可能的处理分支。
结构化设计方法:把数据流图映射为软件结构图,信息流的类型决定了映射的方法。
对于以上两种类型的DFD,结构化设计方法分别采用两种映射方法——变换映射和事务映射,来把DFD转换成初始SC。
-
变换映射
-
确定逻辑输入和逻辑输出的边界,找出变换中心。
-
设计软件结构的顶层和第一层
位于软件结构最顶层的主模块协调下述从属的控制功能:
- 输入模块:协调对所有输入数据的接受;
- 变换中心:管理对内部形式的数据的所有操作;
- 输出模块:协调输出信息的产生过程。
-
设计中下层模块
-
对初始结构图优化
-
-
事务映射
-
确定事务中心、输入流和活动路径
-
设计软件结构的顶层和第一层
由事务流映射成的软件结构包括一个接收分支和一个发送分支。
-
设计事务结构的中下层
- 从事务中心的边界开始,把沿着接收流通路的处理映射成模块;
- 发送分支的结构包含一个调度模块,它控制下层的所有活动模块;然后把数据流图中的每个活动流通路都映射成与它的流特征相对应的结构。
-
对初始的事务结构优化工作同变换结构
-
3.9 优化软件结构设计的指导规则——启发式设计策略
- 降低模块耦合度,提高内聚度
- 模块结构的深度、宽度、扇出和扇入应适当;扇入高则上级模块多,能够增加模块的利用率;扇出低则表示下级模块少,可以减少模块调用和控制的复杂度。
- 模块的作用范围应该在控制范围内;
- 模块接口设计要简单,以便降低复杂程度和冗余度;
- 设计功能可预测并能得到验证的模块;
- 适当划分模块规模,以保持其独立性。
以上介绍的软件结构设计准则是人们经过长期的软件开发实践总结出来的,但是这些准则不是设计的目标,也不是在设计时必须普遍遵循的原理。因此在实际应用时,应根据系统的大小、难易程度加以灵活应用。
3.10 结构化详细设计
描述每个模块执行过程的工具叫详细设计工具,可以分为图形、表格和语言三类。
- 图形工具:包括传统的程序流程图、盒图和问题分析图(PAD)等;
- 表格工具:包括判定表、判定树(适合于表达复杂条件的组合)。
- 语言工具:过程设计语言(PDL伪代码)等;
表示复杂条件组合的判定表、判定树:
例:若年交易额4万元以上,且最近3个月无欠款的顾客,可享受10%的折扣;若近3个月有欠款,是本公司5年以上老顾客,可享受5%的折扣;若不是老顾客,只有2%的折扣;年订货量不足4万元者无折扣。
4. 面向对象方法
略