软件工程
电子教案
王树林




––– Structune Design
一、引言:
又称概要设计 (Preliminary Design)
或结构设计 (Architectural Design)
1,基本任务:
(1) 将系统划分为模块。
(2) 决定每个模块的功能。
(3) 决策模块的调用关系。
(4) 决定模块间的接口。
2,模块,(Module)
指具有独立功能的使名的一段程序语句。
例如,过程、函数、子程序、宏、程序包
和类等。
3,主要内容:
(1) SD方法和描述方法。
(2) 模块划分的质量度量。
(3) 结构优化准则。
(4) 基于 DFD的结构化设计方法。
二、软件工程学的基本原则:
1,模块化,(Modularity)
按一定原则把程序划分为若干个模块。
使每一个模块完成一个子功能。
Th1,问题 X的复杂性 C(X),工作量 E(X)。
如果有问题 P1,P2,
且 C ( P1) > C ( P2)
且 E ( P1) > E ( P2)
Th2,如果 P = ( P1+ P2 ),则:
C ( P) > C ( P1) + C ( P2)
? E( P ) > E ( P1) + E ( P2)
最佳区
开发软件的总工作量
定义模块接口的总工作量
开发模块的总工作量
模块总数



2,抽象,(Abstraction)
就是从一些事物中抽取其本质的共同的
特性,而忽略其非本质的细节的差异。
例,1993,Windows NT
输入 / 输出系统。
3,信息隐藏,(Aiding)
指在设计和确定模块时, 使得一个模块
内包含的信息 (过程和数据 )对于不需要这些
信息的模块来说是不可访问的 。
4,信息局部化,(Localization)
指把一些密切的软件元素,物理地放得
彼此靠近。
5,一致性,(Uniformity)
6,完整性,(Completeness)
7,确定性,(Comfirmability)
三、模块独立性的度量:
1,模块独立性的概念:
(1) 模块完成独立的功能
(2) 符合信息隐藏和信息局部化的原则
(3)模块间关联和依赖程度要尽量小
2,模块独立性的度量之一:耦合性 ––– 外部特征,
指模块间的相互关连。是程序结构中模块相互连
接的测度。
耦合谱系底 高
内容耦合无直接
耦合
数据耦

控制耦
合 公用耦

外部
的印记
耦合
软件模块间相互独立性的度量
耦合
(1) 非直接耦合:指两个模块能彼此独立地工作,
没有直接的关系, 并且之间不
传递任何信息 。
(2) 数据耦合:
带数据调用
A
分配主存




指模块 A带参数调用另一个模块。
(3) 印记耦合:
传送的参数为复合结构
(复合耦合 )
A
求 平 均
学生成绩表
List1
平均成绩表
List1
指模块调用时传递的是存放数据的变量名
或文件名。
(4) 控制耦合:
A
发 奖 牌




A
发 银 牌发 金 牌 发 铜 牌
(5) 外部耦合:计算机与外设有关的模块。
(6) 公共耦合:公用数据区 (公共数据块和全局变量 )。
存在的问题:
?可理解性降低
?可维护性差
?可靠性差
(7) 内容耦合:直接访问模块内部信息,(程序或代码 )
3,模块独立性的度量之二:
(1) 偶然内聚:
模块内各成分之间不存在有意义的联系:
内聚性 ––– 指内部各成分之间的联系。
低 精力分散的 高
功能性偶然性
逻辑性 过程性 顺序性通讯

时序性
用心专一的
A B C D
E MOVE O TO R
READ FILE F
MOVE S TO T
缺点,?可理解性差
?可修改性差,
(2) 逻辑内聚:
指把几个在逻辑上具有相同 (似 )功能
的模块合并,形成一个新模块。
A B C
E F G
A B C
EFG
缺点,?不易修改
?效率不高浪费主存。
(3) 时间内聚:
指在软件运行中有若干动作经常需要
在同一时间段内完成。
(4) 过程内聚:
指一个模块内的各成分是相关的。
初始化
文件结束
哪类事务
计算累积
销售量
计算累积
订货量
读事务记录
事务处理
置初值 统计各配
件的累积
计算累积读事务 记录
程序框图
结构图
(5) 通信内聚:
模块中所有成分都使用相同的输入或
产生相同的输出。
(6) 顺序内聚:
是模块内各成分的执行顺序是以确定的
顺序执行。
读入事务
计算累积值
求总计
求平均
(7) 功能内聚:
指模块内仅包含为完成某个功能所
必须的所有成分。
4,耦合、内聚与模块独立性关系:
两种看法,?同等地位,同样重要。
?高内聚,低耦合。
独立性,?独立
?信息隐藏和局部化
?关联紧
(1) 耦合是直接的主导因素。
(2) 内聚是辅助因素。
例如,Myers 质量度量模型中权重为 7:3。


四、软件结构的优化准则:
1,修改软件结构以提高模块独立性。
2,控制范围与作用范围。 (作用范围应在控制范围内 )
3,模块的规模应适中。 (50~ 150)
4,深度, 宽度, 扇出 和 扇入 应适当。
控制层数 控制分布 直接控制 直接调用
5,设计单入口单出口的模块。
有效模块设计的启发原则
1、评估程序结构的“第一次迭代”以降低耦合
并提高内聚。
2、试图用高扇出使结构最小化;当深度增加时
争取提高扇入。
3、将模块的影响限制在模块的控制范围内。
4、将模块的影响限制在模块的控制范围内。
5、评估模块接口以降低复杂度和冗余并提高一
致性。
有效模块设计的启发原则
6、定义功能可以预测的模块,但要避免
过分限制的模块。
7、力争“受控入口”模块,避免“病态
连接”。
8、根据设计约束和可移植性需求,对软
件进行打包。
五、结构设计中的图形工具:
1,层次图和 HIPO图,(Hierachy Input Process Output)
2,结构图,Yourdon 公司 1974
(1) 主要成分:
?模块:
?数据:
?调用:
不加区分
的信息
数据信息 控制信息
编辑
学生记录

学生记录
学生数据
无此学生
?判断调用
(2) 附加的符号:
?循环调用
(3) 位置调整:
六、面向数据流的设计方法:
1,变换流和事务流:,把输入数据转换为输出数据”
输入 ––– 变换 (处理 ) ––– 输出
(1) 变换流:变换中心
(2) 事务流:事务中心
特点,某个加工只有一个输入数据流,
但具有多个输出流呈放射状。
2,面向数据流设计方法的步骤:
(1) 精化 DFD;
(2) 确认是变换流还是事务流;
(3) 找出变换中心,输入流,输出流;
(4) 将变换流类型的数据流图映射到软件结构;
(5) 找出事务中心和事务接收通路;
(6) 将事务流类型的数据流图映射到软件结构。
设计规约大纲
一、范围
1、系统目标
2、主要软件需求
3、设计约束和限制
二、数据设计
1、数据对象和形成的数据结构
2、文件和数据库结构
( 1)外部文件结构
逻辑结构
设计规约大纲
逻辑记录描述
访问方法
( 2)全局数据
( 3)文件和数据交叉索引
三、体系结构设计
1、数据和控制流复审
2、得出的程序结构
四、接口设计
设计规约大纲
1、人机界面设计
2、人机界面设计规则
3、外部接口设计
( 1)外部数据接口;
( 2)外部系统或设备接口
4、内部接口设计规则
五、过程设计(每个模块)
设计规约大纲
1、处理说明
2、接口描述
3、设计语言描述
4、使用的模块
5、内部设计结构
6、注释 /约束 /限制
六、需求交叉索引
设计规约大纲
七、测试部分
1、测试方针
2、集成策略
3、特殊考虑
八、特殊注解
九、附录