第四章 软件设计概述2014简化版
第4章软件设计PPT课件

规分律别二考:虑如每果个一问个 题问时题的复Q分杂别程由度P之1和和P。2组成而成,那么它的复杂程度大于
由工此作可量以之得和出。,解决问题Q需要的工作量大于分别解决问题P1和P2需要的
C(P1 + P2)>C(P1)+C(P2) 也就是说,如果一个问题由和两个问题组合而成,那么它的复杂程序大 于分别考虑每个问题时的复杂程度之和。
-
14
第4章 软件设计
模块化的依据
规大律于一解:决如问果题问P2需题要P1的的复工杂作性量大。于问题P2 ,则解决问题P1需要的工作量
C(P1)>C(P2)
显然
E(P1)>E(P2)
这个不等式导致“各个击破”的结论——把复杂的问题分解成许多容易
解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。
ⅱ 数据库设计说明书:给出所使用数据库简介、数据模式设计、物 理设计等。
ⅲ 用户手册:对需求分析阶段编写的初步用户手册进行审定; ⅳ 制定初步的测试计划:对测试的策略方法和步骤,提出明确要求。
-
10
第4章 软件设计
4.1.2 软件设计的任务
⑺ 概要设计评审
在完成前几项工作后,就应组织对概要设计进行评审,其内容为: ⅰ 可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是
否覆盖了所有已确定的软件需求,软件的每一成分是否可追溯到某一项 需求。 ⅱ 接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接 口是否已经明确定义,模块的作用范围是否在其控制范围之内。 ⅲ 风险:即确认该软件设计在现有的技术条件下和预防范围内是否能按时 实现。 ⅳ 实用性:即确认该软件设计对于需求的解决方案是否实用。 ⅴ 技术清晰度:即确认该软件是否以一种易于翻译成代码的形式表达。 ⅵ 可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未 来的维护。 ⅶ 质量:即确认该软件设计是否表现出良好的质量特征。 ⅷ 各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什 么。 ⅸ 限制:评估对该软件的限制是否现实,是否于需求一致。 ⅹ 其它具体问题:对文档、可测试性、设计过程等进行评估。
软件工程教学课件第4章概要设计

(2)将数据流图映射成事务型的结构图
接收模块
主控模块
发送模块
动作路径1 控制模块
动作路径2 控制模块
…
动作路径n 控制模块
图4-20 事务型的结构图
(3)分解每条动作路径所对应的结构图
①接收模块的分解 ②动作路径控制模块的分解
4.分层数据流图的映射
对于分层数据流图,0层图常常反映了系统由哪 些子系统组成,此时可先将0层图映射成图4-21 的结构图。0层图每个加工的数据流图子图可映 射成以相应模块为根模块的结构子图。如果数据 流图子图中的加工还可分解成一张子图,则再将 其映射成以相应模块为根模块的结构子图,一次 一层一层分解下去,可得到最终的初始结构图。 如果初始结构图太大,也可以将它组织成分层的 结构图。
K
L
M
F
G
IБайду номын сангаас
H
N
O
P
Q
J 宽度
R
扇入
图4-11 结构图的相关概念
4.3 结构化设计方法概述
4.3.1 启发式设计策略 4.3.2 结构化设计的步骤 4.3.3 数据流图到软件体系结构的映 射
4.3.1 启发式设计策略
1.改造程序结构图,降低耦合度,提高内聚度 2.避免高扇出,并随着深度的增加,力求高扇入 3. 模块的影响范围应限制在该模块的控制范围内 4. 降低模块接口的复杂程度和冗余程度,提高一 致性 5. 模块的功能应是可预测的,避免对模块施加过 多的限制 6. 尽可能设计单入口和单出口的模块
弱
图4-3 耦合的种类
4.2 结构化分析方法
4.2.1 层次图 4.2.2 HIPO图 4.2.3 结构图
4.2.1 层次图
软件工程—第4章软件设计概述_lyh(1)

• 时间内聚:必须在同一时间执行,并无功能逻辑的成分合在一起
• 过程内聚:过程顺序相关的功能成分合在一起
• 通讯内聚:需要对相同的外部数据进行操作的成分合在一起
• 顺序内聚:一个内部成分的输出是另一个内部成分的输入,将它们合起来
• 功能内聚:只完成单一的功能
高
2. 模块独立性的度量之一:内聚性
一个模块内部各成分之间相互关联的强度 设计目标:高内聚(一模块的所有成分都直接参 与并且对于完成同一功能来说都是最基本的)
• 控制耦合:接收模块的动作依赖于控制信号
• 标记耦合:两个模块接口的参数包含相同的内部结构
低
• 数据耦合:仅是模块之间的数据传递
•非直接耦合:模块之间没有消息传递
内聚----模块内部各成分之间的关联程度
• 偶然内聚:各成分之间并没有关系,只是把分散在多处的功能合在一起
低
• 逻辑内聚:仅仅是逻辑功能相关成分合在一起
一组模块引用同一个公用数据区(也称全局数据区、 公共数据环境)。
1.分解
C(p1)>C(p2) 则 E(p1)>E(p2)
其中: p1和p2是两个问题
C(p1+p2)> C(p1) +C(p2)
试验发现
C(x)是由x问题决定的复杂性
E(p1+p2)> E(p1) +E(p2)
E(x)是解决x问题所需要的工作量
"各个击破"理论
模块划分得越小成本越低 ,但是
集成成本却随着模块划分得越小 成本越高。
2. 软件设计的问题
工具 — 如何描述软件的总体结构 方法 — 用什么方法从问题结构导出软件结构 评估准则 — 什么样的软件结构是“最优的”
第04章软件设计01基础精品PPT课件

面向构件设计
▪ 识别可选的构件
▪ 设计软件架构以容纳这些构件
基于体系架构的设计
▪ 重点关注构成系统的组件及组件连接方式,考 虑系统高层特性的实现
面向方面的(AOP)设计
▪ 使系统的功能需求、非功能需求、平台特性等 诸多不同的关注点相互独立,实现更好 的块 化,来构建出易于理解、易于扩展、高复用性、 高质量的软件系统。
▪ 确定输入,输出文件的数据结构 ▪ 确定算法所必需的逻辑数据结构及其操作 ▪ 确定对逻辑数据结构所必需的程序模块 ▪ 限制和确定各个数据设计决策的影响范围 ▪ 确定其详细的数据结构和使用规则 ▪ 数据的完整性、安全性、一致性、冗余性设计
衡量该目标的准则:
▪ 设计实现所有包含在分析模型中的明示需求, 并且必须满足客户希望的所有潜在需求
▪ 软件实体有明显的层次结构,利于软件元素间 控制。
▪ 软件实体应该是模块化的,模块具有独立功能。 ▪ 软件实体与环境的界面清晰。 ▪ 设计规格说明清晰、简洁、完整和无二义性。 ▪ 设计结果易于扩充和适应变化
软件设计的任务
规划阶段
▪ 设想供选择的方案 ▪ 选择合理的方案 ▪ 推荐最佳方案
设计阶段
▪ 制定规范 ▪ 软件系统的结构设计 ▪ 处理方式设计 ▪ 数据结构设计 ▪ 可靠性设计 ▪ 编写概要设计阶段的文档 ▪ 制定测试计划 ▪ 概要设计评审 ▪ 详细设计
规划阶段的任务
1. 设想供选择的方案 任务:
软件设计的任务(cont.)
3 处理方式设计
▪ 确定为实现系统的功能需求所必需的算法 ▪ 评估算法的性能 ▪ 确定为满足系统的性能需求所必需的算法和模
块间的控制方式
▪ 周转时间 ▪ 响应时间 ▪ 吞吐量 ▪ 精度
软件工程第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数据存放服务的设计数据存放服务的设计服务的算法设计与一般的软件算法的设计并无不同只是服务的算法设计与一般的软件算法的设计并无不同只是在设计过程中可能需要添加一些内部类和内部操作增加在设计过程中可能需要添加一些内部类和内部操作增加的新类主要用来存放在算法执行过程中所得出的某些中间的新类主要用来存放在算法执行过程中所得出的某些中间结果
软件工程第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软件工程中,靠分解来划分类和对象。
第四章软件概要设计
第四章软件概要设计第四章软件概要设计在软件需求分析阶段,已经搞清楚了软件“做什么”的问题,并把这些需求通过规格说明书描述了出来,这也是目标系统的逻辑模型。
进入了设计阶段,要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中,所以软件设计是一个把软件需求转换为软件表示的过程,而概要设计(又称结构设计)就是软件设计最初形成的一个表示(这里的表示是一个名词),它描述了软件的总的体系结构。
简单地说软件概要设计就是设计出软件的总体结构框架。
而后对结构的进一步细化的设计就是软件的详细设计或过程设计。
本章所学内容主要就是软件的概要设计内容。
4.1 软件概要设计的基本任务4.1.1 基本任务1. 设计软件系统结构(简称软件结构)为了实现目标系统,最终必须设计出组成这个系统的所有程序和数据库(文件),对于程序,则首先进行结构设计,具体为:(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。
(2)确定每个模块的功能。
(3)确定模块之间的调用关系。
(4)确定模块之间的接口,即模块之间传递的信息。
(5)评价模块结构的质量。
根据以上内容,软件结构的设计是以模块为基础的,在需求分析阶段,已经把系统分成层次结构。
设计阶段,以需求分析的结果为依据,从实现的角度进一步划分为模块,并组成模块的层次结构。
软件结构的设计是概要设计关键的一步,直接影响到下一阶段详细设计与编码的工作软件系统的质量及一些整体特性都在软件结构的设计中决定。
2.数据结构及数据库设计对于大型数据处理的软件系统,除了控制结构的模块设计外,数据结构与数据库设计也是很重要的。
(1)数据结构的设计逐步细化的方法也适用于数据结构的设计。
在需求分析阶段,已通过数据字典对数据的组成、操作约束、数据之间的关系等方面进行了描述,确定了数据的结构特性,在概要设计阶段要加以细化,详细设计阶段则规定具体的实现细节。
软件设计概要设计
顾客交互子系统旳程序构造雏形
(环节六)启发式设计策略优化初始SC图
▪ 使用启发式设计策略,精化所得程序构造
雏形——初始SC图,改良软件质量。
▪ 这一环节与变换分析法相同。
2.4混合构造
▪ 一种大型系统经常是变换型构造和事务型旳混合构造,为
了导出初始SC图,必须同步使用变换映射和事务映射
▪ 下例中,总体是一种变换构造,但是输入途径输入是事务
1.概要设计工具
▪ 层次图和HIPO图 ▪ 构造图
层次图
▪ 层次图用来描绘软件旳层次构造旳图
形工具。 正文加工系统
输入 输出 编辑 加标题 存储 检索 编目录 格式化
添加 删除 插入 修改 合并 列表
IPO图
▪ 层次图中旳每一种模块,均可用一张IPO图来描述。
IPO 图由输入、处理和输出三个框构成,需要时 还能够增长一种数据文件框。IPO图在需求分析阶 段主要用来描述系统旳主要算法。
▪ 在上例中,可能旳修改有:
▪ 输入构造中旳模块"转换成rpm"和"搜集sps"能
够合并;
▪ 模块"拟定加速/减速"能够放在模块"计算mph"
下面,以降低耦合;
▪ 模块"显示加速/减速"能够放在模块"显示mph"
下面。
精化后旳软件构造
模块阐明
▪程序构造旳模块名隐含模块功能,必须为每
个模块写一种简要旳处理阐明,
2.面对数据流旳设计——SD法
▪ 需求阶段对数据流进行分析,生成DFD和
DD
▪ 以此为基础,将DFD经过SD法软件构造。
面对数据流旳设计措施根据数据流图旳特征 定义变换流和事务流两种“映射”,这两种 映射能机械地将数据流图转换为程序构造。
软件工程第4章 软件设计
软件工程第4章软件设计在软件工程的领域中,软件设计是一个至关重要的阶段。
它就像是为一座即将拔地而起的大楼绘制详细的蓝图,决定了软件的架构、功能模块的划分以及它们之间的交互方式。
这一阶段的工作质量直接影响着软件的质量、可维护性和可扩展性。
软件设计的首要任务是明确软件的需求。
这意味着要对用户的期望和业务需求有清晰的理解。
只有这样,才能确保设计出来的软件能够真正满足用户的需求,解决实际的问题。
在这个过程中,开发团队需要与用户、业务分析师等进行充分的沟通,收集各种信息,梳理出软件需要实现的功能、性能要求、安全标准以及用户界面的特点等。
接下来,就是架构设计。
这是软件设计的核心部分,它决定了软件的整体结构和框架。
一个好的架构应该具备高内聚、低耦合的特点。
高内聚意味着一个模块内部的元素紧密相关,共同完成一个特定的功能;低耦合则表示不同模块之间的依赖关系尽量少,这样当一个模块发生变化时,对其他模块的影响最小。
比如,在一个电子商务网站中,用户管理模块、商品管理模块和订单管理模块就应该是低耦合的,它们各自负责自己的业务逻辑,相互之间的干扰较小。
在进行架构设计时,还需要考虑软件的可扩展性。
随着业务的发展和用户需求的变化,软件需要能够方便地进行功能的增加和修改。
这就要求在设计时预留一定的扩展接口和灵活性。
比如,采用微服务架构,将一个大型的应用拆分成多个小型的服务,每个服务可以独立开发、部署和扩展,这样就大大提高了软件的适应性。
模块设计也是软件设计中不可或缺的一部分。
在确定了软件的架构之后,需要将其划分为一个个功能明确的模块。
每个模块都应该有清晰的职责和边界,模块之间通过定义良好的接口进行通信。
比如,在一个在线学习平台中,课程管理模块负责课程的创建、更新和删除,而学习记录模块则负责记录学生的学习进度和成绩,它们通过特定的接口进行数据的交互。
在软件设计中,数据结构和算法的选择也非常关键。
合适的数据结构可以提高数据的存储和访问效率,而优秀的算法则可以提高软件的运行性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例 过程化内聚模块
例 通信内聚模块
(c)高级内聚度
(6)顺序性内聚(Sequential Cohesion)
模块内的各处理成份均与同一功能相关 且这些处理必须顺序执行,则称顺序内聚。
(7)功能性内聚(Functional Cohesion)
返回
例: 逻辑性内聚模块
模块A
参数选择(平均/最高)
读入分数
平均/最高?
计算平均分 输出结果
计算最高分
返回
(b)中级内聚度
(4)过程性内聚(Procedural Cohesion)
模块具有过程性内聚度指,模块内成分彼此相 关,并且必须按特定的次序执行;
(5)通信性内聚(Communicational Cohesion)
3) 信息隐藏
4)软件复用
4.3模块化设计(module design)
4.3.1模块化 4.3.2分解(decomposition) 4.3.3模块独立性(module independence) 4.3.4
自顶向下(top—down design) 自底向上(bottom—up design)
结构化软件设计 面向对象的软件设计
4.1 软件设计的阶段和任务
两阶段四任务:
概要设计(总体设计根据需求确定软件和数据总体框架
详细设计(4.过程设计详细设计每个模块的算法和数据结构)
详细设ห้องสมุดไป่ตู้文档
1.总体结构设计(体系结构 设计) 2.数据设计 概要设计文档 3.接口设计
4.2软件设计的基本概念
3.1
3.2
“Worker” modules
4.3.2模块独立性
module independence 模块独立性——模块分解所必须遵循的准则! 内涵:
设计软件结构时,使每个模块具有一个相对独立的子 功能 且与其他模块没有过多联系
模块独立性的度量
内聚(cohesion)——模块内部各成分之间的联系 耦合(coupling)——模块与其它模块间的联系
P1
P2
将一个复杂问题分解为几个小问题,减少问题复杂度
问题的复杂度: C (P1+P2)>C (P1)+C (P2) 解题需要的工作量:E (P1+P2)>E (P1)+E (P2) 无限制的分解问题,工作量是否越来越小?
软 件 开 发 工 作 量 总成本
最小成本区 M
接口成本
模块成本 模块数
1) 模块(module)与构件(component)
模块:定义输入、输出和特性的程序实体 构件:可重复使用的软件组件
2) 抽象(abstract)与细化(refinement)
抽象:分层次考虑和处理问题(数据和过程) 细化:从高到低的逐步分解过程
对其它模块隐藏模块内部的数据和过程 一个模块内部(信息数据和过程)对于不需要了解这些信息的模 块来说,是不能访问的 只有为了完成软件的总体功能而必须在模块间交换的信息,才容 许在模块间交换 充分利用已有的现成构件,不必一切从头开始 Design with reuse, design for reuse
解决:权衡——合理分解模块!
分解分为两个方向
水平分解(Horizontal partitioning) 垂直分解(Vertical partitioning)
水平分解
主控模块
Decision-making modules
模块 1
模块 2
模块 3
垂 直 分 解
1.1
1.2
1.3
2.1
2.2
第四章
软件设计概述
4.1 软件设计的任务 4.2软件设计的基本原理概念 4.3模块化设计 4.3.1分解和模块化 4.3.2模块独立性 内聚 耦合
需求分析:对目标系统的数据、功能和行为建模
设计:把分析阶段的需求说明转换成设计文档。 根据设计结果可进行下一步的编制代码工作了 将需求->软件的表现形式 输出文档:软件设计文档 两种主流设计方法:
(7)内容耦合(Content Coupling)
一个模块使用另 一模块内部的数据或控制信息;一 个模块直接转移到另一模块内部等等。GOTO语句
设计软件时应尽量使用数据耦合 , 减少控制耦合 , 限制外部环境耦合和公共数据耦合,杜绝内容耦合。
例:公共耦合
A
L
B
C
N
D
弱
非直接 耦合 数据 耦合 特征 耦合 控制 耦合 外部 耦合
强
公共 耦合 内容 耦合
弱耦合
中耦合
较强耦合
强耦合
(a)弱耦合
(1)非直接耦合(Nodirect Coupling)
两模块中任一个都不依赖对方能独立工作 , 这 类耦合度最低。
(2)数据耦合(Data Coupling)
两模块通过参数交换信息,信息仅限于数据。
模块的独立性高
高内聚,低耦合——块内联系强 块间联系弱
(一)内聚
内聚度:模块内部各成分彼此结合的紧密程度。
内聚度按其高低程度可分为七级,内聚度越高越好。
弱 强
时间性 内聚 过程性 内聚 通信性 内聚 顺序性 内聚 功能性 内聚
偶然性 内聚
逻辑性 内聚
低内聚
中内聚
高内聚
(a)低级内聚度
4.3.1模块module
模块化:
把大型软件划分成一个个小的,相对独立又互相关联 的模块 每个模块完成一个子功能,这些模块集成起来就是构 成一个整体
模块:
一个由编辑元素限定的,拥有明确定义的输入,输出 特生的程序实体
分解 模块化
4.3.2分解Partitioning
启发:
模块内所有成分形成一个整体,完成单个功能。 模块各成分紧密联系,不可分割! 如:求平方根
设计软件时 , 应识别内聚度的高低,并通过修改设计 尽可能提高模块内聚度,从而获得较高的模块独立性 高内聚,低耦合,一个模块,一个功能!
(二)耦合 coupling
耦合度:软件结构中模块间关联程度的一种度量。 耦合的强弱取决于模块间接口的复杂性、进入或调用模块 的位置以及通过界面传送数据的多少等。
(3)特征耦合(Stamp Coupling)。
两模块交换的参数是数据结构
例:弱耦合
模块1
非直接 耦合
模块2
数据耦合
特征耦合(参数表 传递数据结构)
模块4
模块3
(2)中耦合
(3)控制耦合(Control Coupling)
传递的信息含有控制信息。控制耦合通常会增 加系统的复杂性 , 适当分解模块可望消除控制 A 耦合
3) 时间性内聚(Temporal Cohesion)
模块包含的诸任务必须在同一时间段内执行,如 一个初始化模块,终止模块
下一级
例:偶然性内聚模块
A
… Read a; b=b+1; …
B
… Read a; b=b+1; … M Read a; b=b+1;
C
… Read a; b=b+1; …
Flag
flag
计算平均分 输出结果 计算最高分
B
(c)强耦合
(5)外部耦合(External Coupling)
当若干模块同一个全局变量 外部耦合尽管需要,但应限制在少数几个模块上。
(6)公共耦合(Common Coupling)
若干模块访问统一公共数据环境 全局数据环境中(可能含有全局变量、公用区、内存 公共复盖区、任何存储介质上的文件、物理设备等)。 例
1) 偶然性内聚(Coincidental Cohesion)。
模块内各成分为完成一组功能而组合在一起 , 它 们相互之间即使有关系,也很松散。例
2) 逻辑性内聚(Logical Cohesion)
把几种相关的或功能相似的成分组成一个模块 每次调用时,由传送给模块的判定参数来确定模 块应执行那种功能 例