4 软件设计工程软





4.1 软件设计的概述
一、软件设计的概念
软件设计 是一个把 软件需求 转化
为 软件表示 的过程,也就是把它加
工为在程序细节上非常接近于源程
序的软件表示(描述)。
软件设计就是运用一些基本的设
计概念和各种有效的方法和技术,
把软件需求分析转化为软件表示,
使系统能在机器上实现。






传统软件设计,系统的总体设计
和 过程设计 。 系统设计 的主要任务
是确定软件的体系结构(如系统分
解、模块的划分、模块之间的关系
等); 过程设计 主要任务是确定每
一个功能模块算法和数据结构以及
接口等。
二、软件设计原则
1、基本的设计目标
( 1) 功能 和 性能要全 ;
( 2)具有良好的 可读性 和 可理解性,






以便于代码的生成,以及软件测试
和维护。
( 3)设计应 完整,包括数据、体系
结构、功能、行为、接口等的设计。
2、良好的设计技术指标( P64)
3、设计原则
( 1)设计过程不应该受到, 隧道视
野, 的限制。
( 2)设计应该可以跟踪到分析模型。
( 3)设计不应该每次从头做起。
( 4)软件设计的结构应该尽量模拟






问题域结构。
( 5)设计应该具有 一致性 和 集成
性 。
( 6)设计应该适应变更。
( 7)设计应该具有容错和异常处
理的能力。
( 8)设计不是编码。
( 9)在创建设计时就应该能够评
估系统的质量。
( 10)应该评审设计以减少概念
性的错误。






三、软件设计原理
1、模块化
模块分解的 5条标准:模块可分解
性、模块可组装性、模块可理解性、
模块连续性、模块保护性。
总成本
接口成本
模块成本
模块数







最小成本区






2、分解与抽象
分解是控制软件复杂性的基本手
段。抽象是人类认识复杂问题的思
维工具之一。
3、逐步求精
4、信息隐藏 (Information Hiding)
模块要具有独立性、功能要单一,
与其他模块的数据共享降到最低限
度。这样,可使模块重用性好,易
于测试、组装和维护等。






四、软件设计过程和模型
软件设计的 任务,
软件需求规格说明 - >软件设计文档
需求规格说明包括信息描述、功
能描述、行为描述、其他需求等,
作为设计的输入。设计的输出结果
是数据设计、体系结构设计、接口
设计等。






设计 编码
信息描述
功能描述
行为描述
其他需求
过程设计
体系结构设计
接口设计
数据设计
模块 /构件
软件设计过程






设计模型
需求分
析模型
接口设计 过程设计
体系结构设计 数据设计
软件设计既是过程又是建立模型。
设计模型如下图所示:






4.2 软件体系结构
一、软件体系结构概念
软件体系结构 指软件的整体结构和
这种结构提供系统在概念上的整体性
的方式。
体系结构设计是要建造一个基于计
算机系统所需要的数据和程序构件的
结构,而重点关注的是软件 构件结构,
构件的性质 以及 它们的交互 。
体系结构设计过程,系统结构化,
控制建模, 模块分解 。






体系结构 是一种 表示,它包含系统
的构件和这些构件性质以及构件之间
的关系。
二、体系结构的重要性( P69)
三、系统分解
软件设计的目标之一是导出体系结
构透视图,通常可用 结构图 描述。
系统的体系结构可以考虑两种主要
的组织结构,即,层次组织结构 和 块
状组织结构 。
块状结构 把系统垂直地分解成若干






个相对独立的 低耦合 的子系统,一个
子系统相当于一块,每块提供一种类
型的服务,所以称为块状组织形式。
如下图所示:





















层次结构 把软件系统组织成一个
层次结构的形式,上层在下层的基
础上建立,下层为上层提供必要的
服务。位于同一层的多个软件或者
子系统,具有同等的通用度(通用
性程序),低层的软件比高层的软
件更具有通用性,每一层可以视为
同等通用档次的一组子系统。如下
图所示:






系统层次结构
应用系统
构件系统
中间件
系统软件
硬件系统






四、分布式系统体系结构
分布式系统体系结构一般有如下
几类:
1、客户机/服务器体系结构
客户 1 客户 2 客户 n
宽带网络
服务器 1 服务器 2 服务器 n








2、分布式对象体系结构
系统的基本组件是 对象,它提供一
组 服务,并且对外给出这些服务的 接
口,其他的对象可以调用这些服务。
o1
S(o1)
o2
S(o2)
o3
S(o3)
o4
S(o4)
o5
S(o5)
o6
S(o6)
软件总线(中间件)






五、模块化分解
模块化分解- >软件体系结构。
在 面向对象方法 中,OOA- >OOD
- >系统的体系结构。
在 面向数据流 方法中,可通过对数
据流的分析和设计导出系统的结构图
(变换分析与变换设计、事务分析与
事务设计)
六、功能独立性
1、模块耦合度
模块耦合度 是对软件结构中各个






不同模块之间互相关联程序的度量。
模块耦合度有 7个等级:
( 1)非直接耦合。 弱
( 2) 数据耦合 。
( 3)特征耦合。
( 4)控制耦合。
( 5)外部耦合。
( 6)公共耦合。
( 7)内容耦合。 强
模块设计的 基本原则 是:尽量使用
数据耦合,减少控制耦合,限制外部






耦合和公共耦合,不使用内容耦合。
2、模块聚合度
模块聚合度又称为 模块内聚度,是
指模块内各部分之间的联系(块内联
系),也就是说 模块内各元素结合的
紧密程度 。
模块聚合度有 7个等级:
( 1)偶然性聚合。 弱
( 2)逻辑性聚合。
( 3)时间性聚合。
( 4)过程性聚合。






( 5)通信性聚合。
( 6)顺序性聚合。
( 7) 功能性聚合 。 强
七、由数据流模型导出系统结构
1、变换分析与变换设计
计算最佳解
获得好的输入 输出结果
输入流 变换中心 输出流
变换型数据流
高聚合
低耦合






问题求解
计算最佳解 输出结果
显示结果格式化结果
获得好的输入
读数据 编辑数据
数据输入 数据输出数据变换
变换型的程序结构






2、事务分析与事务设计
T




流 事务中心 一组处理
事务型数据流






事务型程序结构
事务处理
事务 1 事务 2 事务 4
操作 1 操作 2 操作 3 操作 4
细节 1 细节 2 细节 3 细节 4
事务 4事务层
操作层
细节层






1
身份验证


2
数据
查询
用户信息 非法用户
3
数据
添加
4
数据
修改
5
数据
删除
6
数据
合并
合法用户
合法用户
合法用户
合法用户 合法用户
数据库文件
7
数据
输出


输出数据






数据库系统
身份
验证




合法 /非法
合法用户
数据
查询
数据
添加
数据
修改
数据
删除
数据
合并





输出数据
用户信息
取关
键字
关键
字匹

……
数据
输出






4.3 数据设计
一、数据设计
数据设计是把分析模型中的 信息
描述 转换成软件中所需要的 数据结
构 。
数据结构 是单个数据元素之间逻
辑关系的表示。它决定了信息的存
放方式、组织形式、访问方法、组
合程度以及处理的策略等。数据结
构设计直接影响到系统成功与否。






二、数据设计的原则
1、用于软件的 系统方法 也适用于数
据。
2、要确定所有的 数据结构 以及在每
种数据结构上施加的 操作 。
3、应当建立一个 数据字典 并用它来
定义数据和软件的设计。
4、低层数据设计的决策应推迟到设
计过程的后期进行。可将 逐步细化
的方法用于数据设计。
5、数据结构的表示只限于那些必须






直接使用该数据结构内数据的模块知
道。
6、应当建立一个用于存放有效数据
结构及相关操作的 数据库 。
7、软件设计和程序设计语言应当支
持 抽象数据类型 的定义和实现。
三、文件设计与数据库设计
文件设计 是指数据存储文件设计,
它根据使用要求、处理的方式、存储
的信息量、设备条件等确定文件类别、
文件的存储媒体和文件组织方式等,






并且设计文件的记录格式和估算文件
的容量。
文件的设计过程主要有:
( 1)在 概要设计 时进行文件的 逻辑设
计 。
( 2)在 详细设计 时进行文件的 物理设
计 。
数据库设计是指数据存储文件的设
计,它包括 3个方面的内容:
( 1)概念设计。( 2)逻辑设计。
( 3)物理设计。






域名 类型 长度 关键字
合同名 字符型(Alpha) 50 是
合同号 数字型(Number) 20 否
合同甲方 字符型(Char) 20 否
总金额 数字型(Money) 20 否
……, ……, ……, ……,






4.4 用户界面设计
接口设计主要包括 3方面的描述:
( 1)软件构件与构件之间的接口设
计。
( 2)软件内部与协作系统之间的接
口设计。
( 3) 软件与使用者 之间的通信方式。
一、用户界面设计问题
用户界面设计,也可称为 人机界面
设计,是接口设计的一个组成部分。
用户界面设计的设计质量,直接影






响用户对软件产品的评价,也关系到
软件产品的 竞争力,使用 寿命,系统
响应时间、用户帮助设施、出错信息
处理、命令交互方式等。
用户界面设计 主要包括 系统响应时
间, 用户帮助, 出错处理, 命令交互
等 4个问题。
1、系统响应时间
系统响应时间有两个重要属性,即
响应时间的 长度和易变性 。
2、用户帮助设施






常见的帮助设施有 集成式 和 附加
式 两类。
在设计帮助设施时,还要考虑一
系列问题。如:
( 1)帮助的范围。
( 2)帮助的途径。
( 3)帮助信息的显示。
( 4)返回到正常的交互方式。
( 5)帮助信息的构造方式。
3、出错信息处理
系统给出的出错信息或警告信息






应该具有几个特征:
( 1)以用户可以理解的术语描述问
题;
( 2)提供有助于从错误中恢复的建
设性意见;
( 3)指出错误可能导致哪些负面后
果,便于用户检查是否出现问题及
如何改正;
( 4)在显示信息时应该同时发出警
告声,或者用闪烁方式显示信息,
或者用表示出错的明显的颜色显示






信息;
( 5)不可以责怪用户。
4、命令交互
在一般情况下,系统都提供 菜单
和 键盘命令 来调用软件功能。
二、用户界面设计过程
用户界面设计的过程主要有以下
几项活动:
( 1)用户界面分析与建模;
( 2)用户界面设计;
( 3)用户界面实现;






( 4)用户界面评估。
三、界面设计的基本原则
1、一般可交互性
注意以下 10个方面:
( 1)保持界面一致性。
( 2)提供有意义的反馈。
( 3)执行有较大破坏性的动作之
前要求用户确认。
( 4)允许取消绝大多数操作。
( 5)减少在两次操作之间必须记
忆的信息量。






( 6)提高对话、移动和思考的效率。
( 7)允许犯错误。
( 8)按功能对动作分类,并以此设
计屏幕布局。
( 9)提供对工作内容敏感的帮助设
施。
( 10)用简单动词或动词短语作为命
令名。
2、信息显示
用户界面显示的信息应避免不完整、
含糊不清、难于理解。
注意以下 9个方面:
( 1)只显示与当前工作内容有关的
信息。
( 2)避免数据过多或费解让用户烦
恼。
( 3)使用统一的标记、标准的缩写
和可以预见的颜色。
( 4)允许用户保持可视化的语境。
( 5)产生有意义的出错信息。
( 6)使用大小写、缩进和文本分组
以帮助理解。












( 7)使用窗口分隔不同类型的信息。
( 8)使用“模拟”显示方式表示信
息。
( 9)合理划分和高效率地使用显示
屏幕。
3、数据输入
注意以下 8个方面:
( 1)尽量减少用户的输入动作。
( 2)保持信息显示方式和数据输入
方式一致性。
( 3)允许用户自定义输入。






( 4)应该具有灵活多样的交互方式。
( 5)隐藏在当前语境中不可选用的
命令。
( 6)允许用户控制交互过程。
( 7)对所有输入动作都提供帮助。
( 8)消除冗余的输入。
























4.5 过程设计
一、过程设计概述
过程设计也称为 构件设计,有时也
称为 详细设计 或者 算法设计 。
过程设计确定每一个构件的内部特
征,即模块内部的 数据结构和算法细
节 。
传统的过程设计方法使用了 3种基
本控制结构来构成程序,即 顺序型结
构, 选择型结构, 循环型结构 。












过程设计的主要活动有:
( 1)确定每一个模块使用的 数据结
构 ;
( 2)为每一个模块确定采用的 算法,
选择某种适当的 工具 表达算法的过
程,写出模块的 详细过程描述 ;
( 3)确定模块 接口的细节,包括系
统的外部接口、模块间的接口、数
据输入和输出等;






( 4)确定用户界面;
( 5)其他补充。
二、过程设计常用的描述工具
1、图形描述工具。如:程序流程
图、盒图、问题分析图等。
2、表格描述工具。如:判定表等。
3、语言描述工具。如:伪代码等。






1、程序流程图
程序流程图是用 几何图形, 流线
及 文字说明 来描述模块的执行过程
的 方框图 。
程序流程图的主要元素有,方框
(表示加工任务),菱形 (表示逻
辑条件)和 箭头 (表示控制流)。
特点:程序流程图 直观, 形象,
易于理解 。但箭头的使用易导致逻
辑上的 混乱 。






A
B A B
exp TF
顺序结构 选择结构 循环结构
A
exp
TF






课堂练习:
某模块有两个输入 a和 b,一个
输出 c,当满足条件 (a>0)and(b<2)
时,c=a+b,否则 c=a-b。用所学知
识画出该模块的程序流程图。






2、盒图
盒图又称为 N-S图,其目标是构造
一种不允许破坏结构化程序设计的
图形。
盒图的基本特征是,
( 1) 功能域定义明确,表示清晰;
( 2)不允许随意更改控制;
( 3)局部和全局数据的作用域很容
易确定;
( 4)表示递归算法很方便。






A
B
case exp
V1 V2 … Vn
A1 A2 … An
exp
F T
else then
部分 部分
顺序结构 选择结构
循环结构
循环条件
do-while
部分
Repeat-until
部分
循环条件






课堂练习:
1、某模块有两个输入 a和 b,一
个输出 c,当满足条件 (a>0)and(b<2)
时,c=a+b,否则 c=a-b。用所学知
识画出该模块的 N-S图。
2、某模块有三个输入 a,b和 c,
一个输出 s,当 a=1时,s=b+2c,当
a=2时,s=2b-c,当 a=3时,s=b。用
所学知识画出该模块的 N-S图。






3、问题分析图
问题分析图 PAD(Problem Analysis
Diagram)用二维树形结构来表示程
序的控制流。
问题分析图的主要特点是:
( 1)用 PAD构成元素设计出来的程
序必然是 结构化程序 ;
( 2)问题分析图所描绘的 程序结构
十分 清晰 ;
( 3)问题分析图表示的程序逻辑 易
读、易懂、易记 ;






( 4) PAD是二维树形结构的图形,
程序从图中最左竖线上端的结点开
始执行,自上而下,从左向右 按顺
序执行,遍历所有结点;
( 5)容易将 PAD转换成高级语言源
程序,该转换可由软件自动完成,
有利于 提高软件可靠性和软件生产 ;
( 6)既可用于表示程序逻辑,也可
用于描绘数据结构;
( 7) PAD的元素支持自顶向下、逐
步求精方法的使用。






A
B
P A P AB
A1
A2
An
..
.
选择结构
until P A
顺序结构
循环结构
while P A
= 1
= 2
= n






输入框 输出框 处理框
重复框(先判
定,再重复)
重复框(先执行,
后判定,再重复)
选择框
子程序框

定义框






课堂练习:
1、某模块有两个输入 a和 b,一
个输出 c,当满足条件 (a>0)and(b<2)
时,c=a+b,否则 c=a-b。用所学知
识画出该模块的 PAD。
2、某模块有三个输入 a,b和 c,
一个输出 s,当 a=1时,s=b+2c,当
a=2时,s=2b-c,当 a=3时,s=b。用
所学知识画出该模块的 PAD。






4、判定表
判定表可以把 复杂的条件组合 和
应执行动作 的对应关系描述清楚。
动作 1
动作 2
动作 3
条件 1
动作
条件 2
条件 3
条件 规则1 2 3 4 5
T T
T
T T
T
F
F
F
F
F
F F
F
T

√ √








课堂练习:
1、某校的课酬计算方案为:
?基本课酬为每节课 10元 ;
?班级人数超过 60人,增加基本课酬的 10% ;
?班级人数超过 80人,增加基本课酬的 20% ;
?如果教师为副教授,增加基本课酬的 10% ;
?教授,增加基本课酬的 20% ;
?助教,不增加课酬 ;
?见习助教,减少基本课酬的 10%。
用判定表,表达上述计算方案。
1 2 3 4 5 6 7 8 9 1
0
1
1
1
2
人数 <=60 T T T T
人数 >60 T T T T
人数 >80 T T T T
教授 T T T
副教授 T T T
助教 T T T
见习助教 T T T
基本课酬 √ √ √ √ √ √ √ √ √ √ √ √
课酬增 10% √ √ √ √ √
课酬增 20% √ √ √ √ √ √ √
课酬减 10% √ √ √






5、判定树
判定树是 判定表的图形表示形式 。
它的表达形式清晰,简单易懂,容易
掌握和使用。
功能
条件 1
条件 2
条件 3
条件 4
条件 5
条件 6
操作 1
操作 2
操作 3
操作 4






课堂练习:
1、某校的课酬计算方案为:
?基本课酬为每节课 10元 ;
?班级人数超过 60人,增加基本课酬的 10% ;
?班级人数超过 80人,增加基本课酬的 20% ;
?如果教师为副教授,增加基本课酬的 10% ;
?教授,增加基本课酬的 20% ;
?助教,不增加课酬 ;
?见习助教,减少基本课酬的 10%。
用判定树,表达上述计算方案。






6、过程设计语言
过程设计语言 PDL(Procedure design
language)又称为 结构化的语言 或 伪代
码,它采用一种结构化编程语言与另
一种语言词汇的混合形式。
IF<条件 >
一条或数条语句
ELSEIF<条件 >
一条或数条语句

ELSE
一条或数条语句
ENDIF






课堂练习:
1、某校的课酬计算方案为:
?基本课酬为每节课 10元 ;
?班级人数超过 60人,增加基本课酬的 10% ;
?班级人数超过 80人,增加基本课酬的 20% ;
?如果教师为副教授,增加基本课酬的 10% ;
?教授,增加基本课酬的 20% ;
?助教,不增加课酬 ;
?见习助教,减少基本课酬的 10%。
用伪代码,表达上述计算方案。






4.6 软件重用技术(略,自修)
4.7 软件设计模式(略,自修)