软件工程第四章-2(软件设计)
软件工程第4章 软件设计PPT课件

A B
(1)顺 序 型
S F
P T
(4)后 判 定 循 环 (D O -U N T IL )
F
T
P
A
B
(2)选 择 型
F P T S
(3)先 判 定 型 循 环 (W H IL E -D O )
T
P=1
A1
F
T
P=2
A2
F
T
P=n
An
F
(5)多 情 况 选 择 型 (C A S E 型 )
A B
确定事务中心 和加工路径 事
务 分 析 映射成事务结构
“变换”
确定逻辑输入/输 变 出和变换中心 换 分 析
映射成变换结构
用启发式规则 精化软件结构
导出接口描述 和全程数据结构
未通过 复查
通过 详细设计
详细设计的过程中应遵循一下原则。 1.保证模块的逻辑描述要清晰易读、正确可靠。 2.采用结构化程序设计(Structured Programming) 方法,改善控制结构,降低程序的复杂程度,从 而提高程序的可读性、可测试性、可维护性。 3.选择恰当描述工具来描述各模块算法。
题域子系统、人机交互子系统、任务管理子系统和数据管理子 系统4个子系统组成。
任务也称进程,就是执行一系列活动的一段程序。当系统 中有许多并发任务时,需要依照各个行为的协调关系进行 任务划分,所以任务管理主要是对系统各种任务进行选择 和调整的过程。要标识任务管理子系统中的任务。
1.标识事件驱动任务 2.标识时钟驱动任务 3.标识优先任务 4.标识关键任务 5.标识协调任务
设计数据管理子系统设计数据管理子系统11数据存储格式的设计数据存储格式的设计22数据存放服务的设计数据存放服务的设计服务的算法设计与一般的软件算法的设计并无不同只是服务的算法设计与一般的软件算法的设计并无不同只是在设计过程中可能需要添加一些内部类和内部操作增加在设计过程中可能需要添加一些内部类和内部操作增加的新类主要用来存放在算法执行过程中所得出的某些中间的新类主要用来存放在算法执行过程中所得出的某些中间结果
软件工程课件第四章

2020/5/20
信息科学与技术学院
6
制定测试计划
确定对各模块和系统联调的测试方案。 在软件开发的早期阶段考虑测试问题,
能促使软件设计人员在设计时注意提高 软件的可测试性 。
2020/5/20
信息科学与技术学院
7
书写文档
1.系统说明:概要设计说明书 2.用户手册 3.测试计划 4.详细的实现计划 5.数据库设计结果
第一,有效的模块化(即具有独立的模块)的软件比较容 易开发出来。
第二,独立的模块比较容易测试和维护。 模块的独立程度的度量标准:
内聚:衡量一个模块内部各个元素彼此结合的紧密程度; 耦合:衡量不同模块彼此间互相依赖(连接)的紧密程度。
2020/5/20
信息科学与技术学院
19
模块独立 – 耦合
耦合是对一个软件结构内不同模块之间互联程度的度量。 耦合强弱取决于模块之间接口的复杂程度,调用模块的方式, 以及通过接口的数据。实际上,耦合是接口数据对模块独立 性的影响。
2020/5/20
信息科学与技术学院
14
采用模块化的依据
容易被理解。 使问题复杂度降低,容易被实现。
设函数C(x)定义问题x的复杂程度,函数E(x) 确定解决问题x需要的工作量(时间),对于两个问题 p1和p2,如果
C(p1)> C(p2) 则: E(p1)> E(p2) 规律: C(p1+p2)> C(P1) + C(p2) 必有: E(p1+p2)> E(p1)+ E(p2)
如果两个模块中的每一个都能独立地工作而不需要另一个 模块地存在,那么它们彼此完全独立,这意味着模块间无任 何连接,耦合程度最低。但一个软件系统中的模块之间是彼 此协同工作的,不可能所有模块间没有连结。
软件工程第4章 软件设计

5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。应 该把模块组织成良好的层次系统,顶层模块调用它 的下层模块以实现程序的完整功能,每个下层模块 再调用更下层的模块,从而完成程序的一个子功能, 最下层的模块完成最具体的功能。
6. 设计数据库 对于需要使用数据库的那些应用系统,软件工程师 应该在需求分析阶段所确定的系统数据需求的基础 上,进一步设计数据库。
高内聚也有两类:如果一个模块内的处理元素和同 一个功能密切相关,而且这些处理必须顺序执行 (通常一个处理元素的输出数据作为下一个处理元 素的输入数据),则称为顺序内聚。根据数据流图 划分模块时,通常得到顺序内聚的模块,这种模块 彼此间的连接往往比较简单。如果模块内所有处理 元素属于一个整体,完成一个单一的功能,则称为 功能内聚。功能内聚是最高程度的内聚。
(2) 用户手册根据总体设计阶段的结果,修改更正 在需求分析阶段产生的初步的用户手册。
(3) 测试计划包括测试策略,测试方案,预期的测 试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果
9. 审查和复审 最后应该对总体设计的结果进行严格的技术审查, 在技术审查通过之后再由使用部门的负责人从管理 角度进行复审。
为什么模块的独立性很重要呢?主要有两条理由: 第一,有效的模块化(即具有独立的模块)的软件比 较容易开发出来。这是由于能够分割功能而且接口 可以简化,便于多人分工合作开发同一个软件。
第二,独立的模块比较容易测试和维护。这是因为 相对说来,修改设计和程序需要的工作量比较小, 错误传播范围小,需要扩充功能时能够“插入”模块。
(2)详细设计。详细设计阶段的根本目标是确定 应该怎样具体地实现所要求的系统,也就是说,经 过这个阶段的设计工作,应该得出对目标系统的精 确描述,从而在编码阶段可以把这个描述直接翻译 成用某种程序设计语言书写的程序。 详细设计阶段的任务还不是具体地编写程序,而是 要设计出程序的“蓝图”,结果基本上决定了最终 的程序代码的质量。
软件工程第四章软件设计

软件工程第四章软件设计
软件设计与软件需求之间的关系:
数 据
加 工
对 象
体实 关
数 据
规 格
描
系
数据词典 流
说
述
图
图明
状态转换图 控 制 规 格说明
过程设计 接口设计 体系结构设计 数据设计
X2=(-b-sqrt(b2-4ac))/2a
软件工程第四章软件设计
设计时对模块内聚性的选择
➢ “一个模块,一个功能”是模块化设计的一条准则, 也是设计人员争取的目标。
➢ 功能性内聚模块是最理想的。 ➢ 中、高内聚的模块也可使用。 ➢ 低内聚模块的可维护性和可复用性差,设计时应
尽量避免使用。
软件工程第四章软件设计
学生数据
➢ 数据流:在调用关系线的旁边 学号
用命名的箭头表示
无此学生
➢ 选择调用: ➢ 循环调用:
读学生记录
软件工程第四章软件设计
(5)变换分析方法
5.1)划分边界 5.2)第一级分解(建立初始SC框架)
软件工程第四章软件设计
5.3)第二级分解(建立每个分支的下级模型)
传入分支的分解
加工中心的分解
—— 设计是所有后续工作的指南,编码实 现必须以设计为前提和基础。
软件工程第四章软件设计
4.2 软件设计的基本概念和原理
1)模块化
➢ 模块化就是将大型软件按照规定的原则划分解 成一个个较小的、相对独立的但又相互关联的 模块的设计方法。
➢ 将系统分解成模块、对象和构件等组成部分。 在传统的软件工程中用分解来实现模块化设计; 在OO软件工程中,靠分解来划分类和对象。
软件工程PPT课件第4章 软件设计

控制结构(程序结构)
深 度
(模块的 层数)
(一个模块
扇出 直接调用
的模块数)
扇入(块调的用模一块个个给数定)模
宽度
(同一层最大模块数)
例子:扇出
计算 实发工资
煎饼形结构 不可取!
取得 工资数据
计时制 工资额
薪金制 工资额
编外人员 税收 工 资 扣款
编外人员 常规 税 收 扣款
编外人员 扣款
例子:扇出
控制规约
分析模型
过程设计
接口设计 体系结构设计
数据设计
设计模型
将分析模型转换为软件设计
上图中通过数据、功能和行为模型展示的软件 需求被传送给设计阶段,选择其中的设计方 法,设计阶段产生出: 数据设计:将分析时创建的信息域模型变 换成实现软件所需的数据结构。 体系结构设计:定义程序的主要结构元素之 间的关系。 接口设计:描述了软件内部、软件和协作系 统之间的以及软件同人之间如何通信。 过程设计:将程序体系结构元素变换为对软 件构件的过程描述。
模块1
模块2
数据耦合
特征耦合(参数表 传递数据结构)
模块3
模块4
接口复杂性与耦合类型的关系:
直接引用 接口方式 过程调用语句
内容耦合 基本耦合
数据项作参数
接
口 复 接口数据
数据结构,变 量名作参数
杂 的复杂性 性
开关量,起 控制变量作用
I/O
数据耦合 标记耦合 控制耦合 外部耦合
全程变量公用数据区
将标记耦合修改为数据耦合举例
计算水电费
本月 用水量
本月
水费
用电量
电费
计算水费
计算电费
(4) 控制耦合
软件工程 第四章 概要设计

第4章
4.4 模块的独立性
15
4.4.1 耦合性(Coupling)
5.外部耦合 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为 外部耦合。 6.公共耦合
若一组模块都访问同一全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据
4
4.2.1 概要设计的任务
概要设计的基本任务是: (1)设计软件系统结构; (2)数据结构及数据库设计; (3)编写概要设计文档;
(4)评审概要设计文档。
第4章
4.2 概要设计的任务与步骤
5
4.2.2 概要设计的步骤
概要设计的一般步骤如下: 1.选定体系结构 2.确定设计方案 3.设计软件结构
4.数据结构及数据库设计
(2)一个模块不通过正常入口而直接转入到另一个模块的内部;
(3)两个模块有一部分代码重叠(该部分代码具有一定的独立功能); (4)一个模块有多个入口。
第4章
4.4 模块的独立性
17
4.4.2 内聚性(Cohesion)
一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只
完成一个功能,模块设计的目标之一是尽可能高内聚。
第4章
4.4 模块的独立性
21
4.4.2 内聚性(Cohesion)
5.通信内聚
指模块内所有处理功能都通过公用数据而发生关系。即模块内各个组成部分都使用相同的 输入数据或产生相同的输出结果。
第4章
4.4 模块的独立性
22
4.4.2 内聚性(Cohesion)
《软件工程实用教程》第4章_结构化软件设计

《软件工程实用教程》第4章_结构化软件设计《软件工程实用教程》第 4 章:结构化软件设计在软件工程领域,结构化软件设计是构建可靠、高效软件系统的关键环节。
它为软件的开发提供了一种清晰、有条理的方法,有助于提高软件的质量、可维护性和可扩展性。
结构化软件设计的核心思想是将一个复杂的软件系统分解为若干个相对独立、功能明确的模块,并通过清晰的接口定义这些模块之间的关系。
这种分解和模块化的方法使得软件开发过程更加可控,也便于团队成员之间的分工协作。
在进行结构化软件设计时,首先要明确软件系统的需求。
这包括对系统功能、性能、安全性等方面的要求。
只有充分理解了需求,才能为后续的设计工作奠定坚实的基础。
模块划分是结构化软件设计的重要步骤。
一个好的模块应该具有高内聚、低耦合的特点。
高内聚意味着模块内部的元素紧密相关,共同完成一个特定的功能;低耦合则表示模块之间的相互依赖程度较低,这样当一个模块发生变化时,对其他模块的影响最小化。
例如,在一个学生管理系统中,可以将学生信息管理、课程管理、成绩管理等划分为不同的模块,每个模块专注于自己的核心业务。
在模块划分的基础上,需要定义模块之间的接口。
接口就像是模块之间的“桥梁”,规定了模块之间传递数据和控制信息的方式。
清晰、简洁的接口设计能够提高模块之间的通信效率,减少错误的发生。
比如,在上述学生管理系统中,学生信息管理模块和成绩管理模块之间的接口可以定义为学生的学号,通过学号来传递学生的相关信息。
结构化软件设计还注重控制结构的设计。
常见的控制结构包括顺序结构、选择结构和循环结构。
合理地运用这些控制结构,可以使软件的流程更加清晰、逻辑更加严密。
以一个简单的登录功能为例,首先需要输入用户名和密码,然后进行验证,如果验证成功则进入系统,否则提示错误信息。
这就是一个典型的顺序和选择结构的组合。
另外,数据结构的设计也是不容忽视的一部分。
选择合适的数据结构可以提高数据的存储和访问效率。
比如,对于频繁查找和插入操作的数据,可以使用二叉搜索树或哈希表等数据结构。
《软件工程》第4章软件总体设计

《软件工程》第4章软件总体设计软件总体设计是软件工程的一个重要环节,它涉及到软件系统的整体结构和架构的定义,以及软件模块之间的关系和接口的设计。
软件总体设计的目标是确保软件系统能够满足用户需求,并且具有高性能和可扩展性,同时保证系统的可维护性和可测试性。
软件总体设计的过程包括以下几个步骤:1.确定系统的功能需求:根据用户需求和系统分析的结果,定义系统应该具备的功能和特性。
2.划分系统结构:将系统划分为多个模块和子系统,确定各个模块之间的关系和层次结构。
3.定义模块接口:对每个模块定义清晰的接口,包括输入参数、输出参数和功能描述,以便模块之间的协作和集成。
4.设计系统架构:选择合适的架构风格和模式,确定系统的整体结构和组成,包括数据流、控制流和模块之间的通信。
5.设计数据结构和算法:根据系统需求和性能要求,设计合适的数据结构和算法,以满足系统的功能和性能要求。
6.设计系统界面:设计系统与用户和外部系统的界面,包括图形界面、命令行界面和数据交换接口。
7.考虑系统安全性和可靠性:在设计阶段考虑系统的安全性和可靠性需求,设计对应的安全和可靠性机制。
8.进行评审和验证:对软件总体设计进行评审和验证,确保设计的可行性和完整性。
软件总体设计的核心是系统架构设计,系统架构设计要考虑系统的功能需求、性能要求、可扩展性、可维护性、可测试性等因素。
常用的软件架构风格包括层次架构、客户端-服务器架构、分布式架构、面向服务的架构等。
选择合适的架构风格可以提高系统的灵活性和可维护性。
在软件总体设计过程中,还需要考虑到软件的适应性和可移植性。
软件应该能够适应不同平台和操作系统的要求,并能够方便地移植到其他环境中。
为了提高软件的可移植性,可以采用标准化的接口和协议,避免使用具体的硬件和操作系统依赖。
此外,软件总体设计还需要考虑到系统的可维护性和可测试性。
软件系统通常需要进行修改和维护,因此设计时需要考虑到系统的可扩展性和模块之间的解耦。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由事务分 析产生
接受模块
动作调度模块
动作1模块 动作2模块 动作3模块
软件结构图的六种模块类型
• ⑴ 传入模块 从下属模块传入数据X,经处理后返回给上级模块数据流 Y。它传送的数据流叫做逻辑输入数据流。
Y 模块名 X
数据流
控制流
箭头尾部是空心圆表示传递的是数据,否则表示传递的是 控制信息。为了绘图简便本讲义后面暂且全部用普通箭头
DE FJ EH
k 输出K k
L
L
HK
KL 输出L
事务子系统
L
m
m
LM 输出M
混合流设计
订货输入
订货处理
提货发票
读入数据
判别
进货输入
库存修改
进货票据
订单记录
分析统计
生成统计表
映射成
4.5.3 体系结构设计优化
将初始SC根据模块独立性原 则进行优化,对模块进行合并、分 解修改、调整,得到高内聚、低 耦合模块,得到易于实现、易于 测试和易于维护的软件结构,产 生设计文档的最终SC。
事务流设计
查询 事务1
事务2
有效 事务
有效 事务
更新事务
v
存款 取款
更新事务
w
审计信息
事务选择 确定事
事务3
有效 事务
务类型
更新事务
x
事务4
审计 记录
事务5
转账
有效 事务
更新事务
y
映射成
修改密码
有效 事务
更新事务
z
ATM机处理事务主控
分析器
调度器
ATM机系统结构
转账 修改密码
事务选择
查询
存款
取款
审计记录
打包指用来为特定环境组装软件的 技术
4.5.4 层次图和HIPO图
IBM公司发明的HIPO图:
层次图 + 输入 / 处理 /输出图 ( H图 ) (IPO图)
(Hierachy Input Process Output)
1.
层次图(H图)
表示软件的层次结构
正文加工系统
输入 输出 编辑 加标题
存储 检索 编目录
3、变换分析设计方法
步骤:
(1)区分传入、变换中心、 传出部分,在 DFD 上 标明分界线
a A
B
b
变换中心
C
传入 部分
c r P
w
W
传出 部分
d e D E
R p Q u
v U V
从数据流程图的物理输入端开始,向系 统的中间移动,一直到某个数据流不再 被看作是系统的输入为止,这个数据流 的前一个数据流就是系统的逻辑输入。 同理从物理输出端开始,向系统的中间 移动,就可以找到软件的逻辑输出。 在输入部分和输出部分之间的就是中心 变换部分。
(4) 减少高扇出争取高扇入
高扇出的模块结构举例: 计算实发工资
取得 计时 薪金 编外 税收 编外 常规 编外 工资 制工 制工 人员 人员 人员 数据 资额 资额 工资 扣款 税款 扣款 扣款
避免平铺结构
增加中间层降低扇出
计算实发工资
取得工 计时工人 计薪工人 资数据 实发工资 实发工资 编外人员 实发工资
1. 程序流程图
2. 盒图(N-S图) 3. 问题分析图(PAD) 4. 过程设计语言(PDL)(伪码)
5. 判定表
2. 盒图(N-S图)
用方框图代替传统的流程图
描述五种基本控制结构的图形构件
(1) 顺序型
A B C
(2) 选择型(If – then – else)
If – then – else F If – then F
改进软件结构设计的指导原则
(软件结构设计的启发式规则)
(1) 模块功能的完善化
完整的模块应包括三部分:
(1)执行规定功能部分
(2)出错处理部分
(3)需返回给调用者数据时, 返回是否正确结束标志。
(2)消除重复功能
X
Q1
Y
Q2
X
Y
Q’
X
Q1
Y
Q2
C C
重复部分
改进前 Q1、Q2功 能相似
改进方法1: C 将Q1、Q2 改进方法 2 : 合并为Q’ 将 Q1 、 Q2 的公共 不可取
条件
T
条件
T
B
A
A
then –部分
else–部分 then –部分
(3)多分支选择型(CASE型)
条件 值1 值2
....
值n
A1 A2 .... An
(4) WHILE重复型 (5) UNTIL重复型 (后测试循环) (先测试循环)
DO-WHILE P
系统: 模块: 编号:
IPO图
作者: 日期:
被调用: 输入:
调用: 输出:
输入: 局部数据元素:
注释:
§4.6详细设计(过程设计、模块设计)
主要任务:编写详细设计说明书 为此,设计人员应: (1)确定每个模块的算法,用工具 表达算法的过程,写出模块的 详细过程性描述。 (2)确定每一模块的数据结构。 (3)确定模块接口细节。 详细设计是编码的先导。
Q
R
ME2
传入分 支模块
中心加工 分支模块
传出分 支模块
变换分析设计方法步骤
(3)第二级分解(分解SC各分支)
自顶向下分解,设计出每个分支 的中、下层模块
完成第二级分解的方法是,从变换中心
的边界开始沿着输入通路向左移动,把 输入通路中每个处理逻辑映射成软件结 构中MA控制下的一个低层模块; 然后沿输出通路向右移动,把输出通路 中每个处理逻辑映射成直接或间接受模 块ME控制的一个低层模块; 最后把变换中心内的每个处理映射成受 MT控制的一个模块。
4.6.1 结构化程序设计(SP)方法 传统的设计技术和旧观念:
设计的随意性,具有浓厚的个人色彩. 追求程序效率和个人设计技巧
新的设计思想和风格:
清晰第一
使用标准的、规范的控制结构
逐步细化
4.6.2 详细设计的描述方法
详细设计工具: (1) 图形工具 (2) 表格工具 (3) 语言工具
模块调用的表示(续)
⑵ 选择调用
表示判定条件。 A
B
B C D
模块A 中某个判定为真时调用模块B, 为假时不调用。
C
D
模块A 中某个判定为真时调用模块C, 为假时调用模块D。
模块调用的表示 (续)
⑶ 循环调用
A A
B
C
B
C
D
模块A根据内部循环条件,重复调用B、C模块, 直至内部出现满足循环终止条件为止。
计时 税收 薪金 常规 制工 制工 资额 扣款 资额 扣款
编外 编外 编外 人员 人员 人员 工资 税款 扣款
设计良好的软件结构应该是 顶层扇出比较高,中间扇出 较少,底层扇入到高扇入的 公共模块,有点类似于橄榄 过大:可理解程度下降 模块过小:开销大于有效操作 系统接口复杂
航线调度系统HIPO图举例 H 图: 命令监控器
1.0
取得输入 1.1
输入确认 1.2
请求确认 1.3
更新处理 1.4
传统的IPO图举例
输入
读口令请求 口令文件 权限文件
处理
1取得输入 2口令确认 3请求确认 4更新处理
输出
请求记录
权限记录 状态报告
响应
命令监控器(1.0)的IPO图
改进的IPO图格式
事务分析设计方法步骤:
(1)在DFD上确定事务中心、接收部 分和发送部分。 (2)画出SC框架,把DFD上的三部分 分别映射为事务控制模块、接收 模块和动作调度发送模块。 (3)分解细化接收分支和发送分支, 完成初始SC。
接收 路径
总控 调度
A路径
B路径
C路径
A路径
C路径 B路径
事务分析的映射方法
§4.5概要设计(总体设计)
概要设计确定:
软件系统的结构 各模块功能及模块间联系(接口)
表示软件结构的图形工具
结构图(SC,Structured chart) 层次图和HIPO图
4.5.1 面向数据流的设计方法
(结构化设计方法SD,Structured Design)
1. 面向数据流设计方法的基本概念
„„
活动通路
„„
„„
„„
优化数据流图 面向数据流 方法的设计 “事务” “变换” 流类型 过程
区分事务中心 和数据接收路径 区分输入和 输出分支
映射成事务结构
事务分析
映射成变换结构
变换分析
用启发式设计规则优化软件结构
导出接口描述和全程数据结构 复查
详细设计
初始的SC
主模块
由变换分 析产生
输入模块 主加工模块 传出模块
传 入 分 支 的 分 解
c
C
b
c,e MA
e
E
d
B
a
D
A
传 出 分 支 的 分 解
w,u
ME
w
W
u
U
v
V
中心加工分支的分解
MT
e p
Q
c,p
P
r
u,w r
R
下面设计一个“统计输入文件中单词数目”程序。
文件名
读文 件名
文件名
验证 文件名
有效的 文件名
统计 单词数
单词 格式化 格式化 总数 单词数
添加 删除 插入 修改 合并
列表
带编号的层次图(H图)