软件设计基础
河北工业大学廊坊分院计算机系
独立性的度量:耦合(Coupling)&内聚(Cohesion)
模块的独立程度可以由两个定性标准度量,这两个 标准分别称为内聚和耦合。耦合衡量不同模块彼此 间互相依赖(连接)的紧密程度;内聚衡量一个模 块内部各个元素彼此结合的紧密程度。以下分别详 细阐述。
河北工业大学廊坊分院计算机系
需求 软件用问 题域约定 的习惯用 语表达
设计 概要设计 过渡到详 细设计时, 抽象级再 一次降低
实现
编码完成 后达到了 抽象的最 低级
河北工业大学廊坊分院计算机系
例7.1 考虑适用于低级CAD的图形软件包
CAD软 用户 抽象3(仅以“创建二维图形任务”为例) 抽象 1: 件任务 界面 PROCEDURE 创建二维图形
1. 输入系数 求一元二次方程 根的模块 2. 求方程的根
3. 打印方程的根
河北工业大学廊坊分院计算机系
七种“内聚模块”的性能比 较
形式 偶然 逻辑 时间 过程 通信 顺序 功能 评价
最坏
可修 改性
最坏
可读性
最坏
黑箱程度
黑箱
通用性
好
最坏
不好 中 中 好
最坏
不好 中 中 好
不好
中 中 中 好
不完全黑
不完全黑 半透明 半透明 透明
好
中 不好 不好 最坏
好
好
好
透明
最坏
河北工业大学廊坊分院计算机系
耦合是对一个软件结构内不同模块之间互连程度的度量。耦 合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点, 以及通过接口的数据。 在软件设计中应该追求尽可能松散耦合的系统。在这样的系统 中可以研究、测试或维护任何一个模块,而不需要对系统的其他模 块有很多了解。此外,由于模块间联系简单,发生在一处的错误传 播到整个系统的可能性就很小。因此,模块间的耦合程度强烈影响 系统的可理解性、可测试性、可靠性和可维护性。 Great deal of Independent dependence
软件工程
教材:主编 曹哲 高诚 中国水利水电出版社
教案:河北工业大学廊坊分院
计算机系 黄南川
河北工业大学廊坊分院计算机系
软 件 设 计:
是后续开发步骤及软件维护工作的基础。 如果没有设计,只能建立一个不稳定的系 统结构
河北工业大学廊坊分院计算机系
软件工程
第 7 章 软 件 设 计 基 础
概 念
基本概念
河北工业大学廊坊分院计算机系
7.1.2 抽象与逐步求精
抽象 过程抽象 数据抽象 把完成一个特定功能的动作序列抽象为 抽出事务的本质特性而暂时不考虑它们 把一个数据对象的定义(或描述)抽象 一个过程名和参数表 的细节。是控制复杂性的基本策略 。 为一个数据类型名
定义 软件系统 被描述为 基于计算 机的大系 统的一个 组成部分
一个模块内各成分为完成一组功能而组合在一 起,它们相互之间即使有关系,也很松散。
有时在写完一个程序之后,发现一 组语句在两处或多处出现,于是把 这些语句作为一个模块以节省内存, 这样就出现了偶然内聚的模块
河北工业大学廊坊分院计算机系
2
逻辑
一个模块完成的诸任务逻辑上相关
例如一个计算全部同学平均分和最高 分的模块。无论计算哪种分数,都要 经过读入全班学生分数,进行计算, 输出计算结果等步骤。实际上除中间 的一步须按不同的方法计算外,前、 后这两步都是相同的。把这两种在逻 辑上相似的功能放在一个模块中,就 可以省去程序中的重复部分。缺点是 执行中要从模块外引入用作判断的开 关键,从而增加了块间的耦合
河北工业大学廊坊分院计算机系
中级内聚度(2个)
4 模块内成分彼此相关,并且必须 过程 按特定的次序执行
enter data
循环体
事务记录
check data
manipulate data
累积销售额
累积订货量
循环传送事务记录 给计算累积模块, 得到累积订货量之 后,也得到了累积 销售量。
计算累积
河北工业大学廊坊分院计算机系
抽象2: REPEAT UNTIL<创建图形任务终止> 该CAD 软件系统配有与绘图员进行可视化通信的图 CAD软件任务; DO WHILE DO WHILE 形界面,能用鼠标代替绘图工具画各种直线和曲线; 用户界面子任务; <出现与数字仪的交互时 > <出现与键盘的交互时> 数字仪接口任务; 创建二维图形子任务; 能完成所有几何计算以及所有截面视图和辅助视图的 键盘接口任务; 判断作图请求; 显示图形子任务; 选择分析或计算; 线:画线任务; 设计。图形设计的结果保存在图形文件中,图形文件 辅助视图:辅助视图任务; 管理图形文件子任务; 圆:画圆任务; 截面视图:截面视图任务; 可以包含几何的、正文的和其他各种补充设计信息。 …… end CAD. ……
这个不等式导致“各个击破”的结论——把复杂的问题分解 成许多容易解决的小问题,原来的问题也就容易解决了。这就是模 块化的根据。 由上面的不等式似乎还能得出下述结论:如果无限地分割软件, 最后为了开发软件而需要的工作量也就小得可以忽略了。事实上, 还有另一个因素在起作用,从而使得上述结论不能成立。 参看上图,当模块数目增加时每个模块的规模将减小,开发单 个模块需要的成本(工作量)确实减少了;但是,随着模块数目增 加,设计模块问接口所需要的工作量也将增加。根据这两个因素, 得出了图中的总成本曲线。每个程序都相应地有一个最适当的模块 数目M,使得系统的开发成本最小。 虽然目前我们还不能精确地决定M的数值,但是在考虑模块化 的时候总成本曲线确实是有用的指南。
I/O、功能,程序、数据
分 治 法:
C(P1+P2)>C(P1)+C(P2) E(P1+P2)>E(P1)+E(P2
软件总成本 理论 模块 属性 例:库存管理系统的模块划分 成本或 信息隐藏 依据 事务接收模块 工作量 内聚度 最小成本 更新库存清单 区域M 耦合度 订货处理 用于接口的成本 生成报表 大小 例:人事管理系统 理想的 每个模块成本之和 O 程序、程序段、子程序 输入职 工档案 职工档案 管理系统
END; 管理图 …… 形文件 END REPETITION; END PROCEDURE.; END; 显示图形 任务
河北工业大学廊坊分院计算机系
创建二 维图形
数据抽象
数据对象:
TYPE drawing IS STRUCTURE DEFINED number IS STRING LENTH(12); geometry DEFINED… notes IS STRING LENTH(256); bom DEFINED… END drawing TYPE; 或
设计 过程
设计 工具
说明 与评审
河北工业大学廊坊分院计算机系
7.1.1 软件设计过程
结构设计 管 技 概要设计 过程设计 完成每一部件的过程化描述 理与术 数据设计 角 角 Text 详细设计 度 度 过程设计 Text 把信息描述转换为实现软件所 数据设计 要求的数据结构 结构设计 确定程序各主要部件之间的关系 根据需求确定软件和数据的总体 将 “概设” 结果进一步精化 详细设计 框架 成算法表示和数据结构 概要设计
5 通信
模块中各成分都将对数据结构的同一区域进行操作, 即如果模块中所有元素都使用同一个输入数据和 (或)产生同一个输出数据,则称为通信内聚。
从文件FILE读出数据
模块A 1. 由数据产生报表一 2. 由数据产生报表二
领书单 开领书单 发票
删除 文件
登记售书 售书登记表 修改
河北工业大学廊坊分院计算机系
河北工业大学廊坊分院计算机系
模块独立性
为什么模块的独立性很重要呢?主要有两条理由:第 一,有效的模块化(即具有独立的模块)的软件比较 容易开发出来。这是由于能够分割功能而且接口可以 简化,当许多人分工合作开发同一个软件时,这个优 点尤其重要。第二,独立的模块比较容易测试相维护。 这是因为相对说来,修改设计和程序需要的工作量比 较小,错误传播范围小,需要扩充功能时能够“插入” 模块。总之,模块独立是好设计的关键,而设计又是 决定软件质量的关键环节。
生成职工档 案报表系统
一个功能、易理解、独立 河北工业大学廊坊分院计算机系
模块总数
有人说,模块化是为了使一个复杂的大型程序能被人的智力 所管理,软件应该具备的唯一属性。如果一个大型程序仅由一个模 块组成,它将很难被入所理解。下面根据人类解决问题的一般规律, 论证上面的结论。 设函数C(x)定义问题x的复杂程度,函数E(x)确定解决 问题x需要的工作量(时间)。对于两个问题Pl和P2,如果 C(P1)>C(P2) 即P1比P2复杂,显然 E(PI)>E(P2) 即问题越复杂,所需的工作量越大。 根据人类解决一般问题的经验,另一个有趣的规律是 C(P1十P2)>C(PI)十C(P2) 也就是说,如果一个问题由Pl和P2两个问题组合而成那么它的复杂 程序大于分别考虑每个问题时的复杂程度之和。 综上所述,得到下面的不等式 E(Pl十P2)>E(PI)十E(P2 ) 河北工业大学廊坊分院计算机系
河北工业大学廊坊分院计算机系
信息隐藏
模块内所含信息对那些不需要这些信息的模块不可
访问,每个模块只完成一个相对独立的特定功能。
应用模块化原理时,自然会产生的一个问题是:“为了得到 最好的一组模块,应该怎样分解软件呢?”信息隐蔽原理指出: 应该这样设计和确定模块,使得一个模块内包含的信息(过程 和数据)对于不需要这些信息的模块来说,是不能访问的。 局部化的概念和信息隐蔽概念是密切相关的。所谓局部化是 指把一些关系密切的软件元素物理地放得彼此靠近。在模块中 使用局部数据元素是局部他的一个例子。显然,局部化有助于 实现信息隐蔽。 “隐蔽”意味着有效的模块化可以通过定义一组独立的模块 而实现,这些独立的模块彼此间仅仅交换那些为了完成系统功 河北工业大学廊坊分院计算机系 能而必须交换的信息。