软件工程课件第4章 软件设计概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2) 逻辑性内聚(Logical Cohesion)

3) 时间性内聚(Temporal Cohesion)

例:偶然性内聚模块
A
… Read a; b=b+1; …
B
… Read a; b=b+1; … Read a; b=b+1;
C
… Read a; b=b+1; …
例: 逻辑性内聚模块
分解分为两个方向
水平分解(Horizontal partitioning) 垂直分解(Vertical partitioning)
水平分解
主控模块
Decision-making modules
模块 1
模块 2
模块 3
垂 直 分 解
1.1
1.2
1.3
2.1
2.2
3.1
3.2
“Worker” modules
当若干模块同一个全局变量 外部耦合尽管需要,但应限制在少数几个模块上。 若干模块访问统一公共数据环境 全局数据环境中(可能含有全局变量、公用区、内存公共复
盖区、任何存储介质上的文件、物理设备等)。例
(6)公共耦合(Common Coupling)
(7)内容耦合(Content Coupling)
调用模块的位置以及通过界面传送数据的多少等。

公共 耦合 内容 耦合
弱耦合
中耦合
较强耦合
强耦合
1.非直接耦合 no direct coupling 2.数据耦合 data coupling 3.特征耦合 stamp coupling 4.控制耦合 control coupling 5.外部耦合 external coupling 6.公共耦合 common coupling 7.内容耦合 content coupling
设计软件结构时,使每个模块具有一个相对独立的子功能 且与其他模块没有过多联系 内聚(cohesion)——模块内部各成分之间的联系 耦合(coupling)——模块与其它模块间的联系 高内聚,低耦合——块内联系强 块间联系弱
(一)内聚

内聚度:模块内部各成分彼此结合的紧密程度。
第四章 软件设计
软件设计概述 概要设计 详细设计
目录
4.1 软件设计的任务 4.2软件设计的基本原理概念 4.3模块化设计
4.3.1分解和模块化 4.3.2模块独立性 (一)内聚 (二耦合
4.4 软件设计基础
4.4.0自顶向下和自底向上设计 4.4.1软件总体结构设计 4.4.2数据结构设计 4.4.3软件过程设计
(a)低级内聚度
1) 偶然性内聚(Coincidental Cohesion)。
模块内各成分为完成一组功能而组合在一起,它们相互 之间即使有关系,也很松散。例 把几种相关的或功能相似的成分组成一个模块 每次调用时,由传送给模块的判定参数来确定模块应 执行那种功能 例 模块包含的诸任务必须在同一时间段内执行,如一个 初始化模块,终止模块
软件规模小时,早期使用,随着软件规模的增长,可能导致较大的重 新设计,整体测试中可嫩在模块接口中发现不一致
自顶向下
顶层开始 逐步分解
优点: 易于修改扩充,整体测试容易通过
自顶向下,逐步求精!
4.4.1软件总体结构设计
software architecture
软件总体结构包括两方面内容: (1)程序结构:
问题的复杂度
问题的复杂度: C (P1+P2)>C (P1)+C (P2) 解题需要的工作量: E (P1+P2)>E (P1)+E (P2) 无限制的分解问题,工作量是否越来越小?
软 件 开 发 工 作 量 总成本
最小成本区 M
接口成本 模块成本 模块数

解决:权衡——合理分解模块!
4.5设计需要处理的问题 4.6设计文档及其复审
设计:把分析阶段的需求说明转换成设计文档。
根据设计结果可进行下一步的编制代码工作了 将需求->软件的表现形式 输出文档:软件设计文档 两种主流设计方法:
需求分析:对目标系统的数据、功能和行为建模
结构化软件设计 面向对象的软件设计
软件的设计阶段是软件开发时期中最富有活力、 最需要发挥创造精神的阶段。
出特生的程序实体
(2)抽象&细化abstraction&refinement
抽象使控制复杂性的基本策略之一 抽象是分层次的,越高层抽象程度越高,越到
细节抽象层次越低 抽象的具体化
•系统定义阶段 •规划与需求分析 •概要设计 •详细设计 •实现 抽 象 逐 步 求 精
软件工程过程的每一步都是对较高一级
详细设计文档
软件设计的任务
总体结构设计
数据结构设计 接口设计
过程设计
按功能划分成模块的层次结构 确定每个模块的功能 确定软件各主要部件之间的关系和模块间的接口
信息模型 软件数据结构 软件内部、外部及与人之间的通信——界面设计
对每一个软件部件的过程化描述
4.2软件设计的基本概念
高层控制模块的变动容易把边界影响传播到低级从
属模块 低级模块却很少向高层控制模块传播边界影响 如:底层模块具体的输入,输出和计算的变更很难影 响到 整体的程序结构
4.3.2模块独立性
module independence
模块独立性——模块分解所必须遵循的准则! 内涵:
模块独立性的度量 模块的独立性高
3) 信息隐藏
4) 软件复用
Design with reuse, design for reuse
(1)模块module
模块化:
把大型软件划分成一个个小的,相对独立又互相关
联的模块 每个模块完成一个子功能,这些模块集成起来就是 构成一个整体
模块:
一个由编辑元素限定的,拥有明确定义的输入,输
读入分数
平均/最高?
计算平均分
计算最高分
输出结果
(b)中级内聚度
(4)过程性内聚(Procedural Cohesion)
并且必须按特定的次序执行;
模块具有过程性内聚度指,模块内成分彼此相关,
模块中各成份都将对数据结构的同一区域进行操作,
以达到通信的目的。
(5)通信性内聚(Communicational Cohesion)
水平分解——功能分解
为系统每个主要功能定义一个分支,称为控制模块
如黄色的模块 最简单的水平分解是分为以下三部分:
优点:
缺点:
Input,data transformation,output
使系统易于测试、维护,扩展 减少边界影响的传播(side effects,内部的修改,对整体
例 过程化内聚模块
例 通信内聚模块
(c)高级内聚度
(6)顺序性内聚(Sequential Cohesion)
模块内的各处理成份均与同一功能相关 且这些处理必须顺序执行,则称顺序内聚。
(7)功能性内聚(Functional Cohesion)
模块内所有成分形成一个整体,完成单个功能。 模块各成分紧密联系,不可分割!

内聚度按其高低程度可分为七级,内聚度越高越好。
弱 强
时间性 内聚 过程性 内聚 通信性 内聚 顺序性 内聚 功能性 内聚
偶然性 内聚
逻辑性 内聚
低内聚
中内聚
高内聚
1.偶然性内聚 2.逻辑性内聚 3.时间性内聚 4.过程性内聚 5.通讯性内聚 6.顺序性内聚 7.功能性内聚
coincidental cohesion logical cohesion temporal cohesion procedural cohesion communicational cohesion sequential cohesion functional cohesion
自顶向下(top—down design) 自底向上(bottom—up design)
背景:
4.3.1分解和模块化 (Partitioning and Modularity)
7 2原理
普通人分辩或记忆同一类信息的不同品种或等级的数量一
般不超过5~9项
启发:
将一个复杂问题分解为较小的几个问题,能够减小
如:求平方根
设计软件时,应识别内聚度的高低,并通过修改设计尽 可能提高模块内聚度,从而获得较高的模块独立性 高内聚,低耦合,一个模块,一个功能!
(二)耦合 coupling
耦合度:软件结构中模块间关联程度的一种度量。 耦合的强弱取决于模块间接口的复杂性、进入或

非直接 耦合 数据 耦合 特征 耦合 控制 耦合 外部 耦合
系统中所有过程性部件(即模块)构成的层次结构 软件总体结构设计的目标是产生一个模块化的程序
结构并明确各模块之间的控制关系,
(2)输入输出数据结构。
通过定义界面,说明程序的输入输出数据流,进一 步协调程序结构和数据结构。
(1)软件总体结构设计-分解
程序结构、数据结构是逐步求精、分而治之的结果。 软件设计从需求定义开始,逐步分层导出程序结构和数据 结构,当需求定义中所述的每个部分最终都能由一个或几个 软件元素实现时,整个求解过程即告结束。
一个模块使用另
一模块内部的数据或控制信息;一个模块 直接转移到另一模块内部等等。GOTO语句
设计软件时应尽量使用数据耦合,减少控制耦合,限 制外部环境耦合和公共数据耦合,杜绝内容耦合。
例:公共耦合






4.4.0自顶向下和自底向上设计
软件设计方法有两种: 由底向上
缺点:
选择关键部分先设计 从局部开始扩展到整个系统
把错误扩散到其他模块
(4)软件复用
充分利用已有的现成构件,不必一切从头开始
Design with reuse, design for reuse
4.3模块化设计(module design)
4.3.1分解(decomposition) 4.3.2模块独立性(module independence) 4.3.3
结构的影响小)
会引起大量的数据通过模块接口传递,因为主要功能彼此
分离,彼此要传递数据 使程序的整体控制复杂一些,在系统需要迅速从一个模块 移动到另一个模块时
垂直分解
控制(决策))和具体工作自顶向下分配 高低模块彼此影响程度
数据处理工作
顶层的模块执行控制功能和一小部分处理 底层的模块象worker一样完成全部的输入、计算和
4.1 软件设计的阶段和任务
从工程管理的角度看分为两阶段, 从技术层面分为四个任务:
概要设计(总体设计):
根据需求确定软件和数据的总体框架
详细设计(过程设计):
过程设计
总体结构设计(体系结构设计) 数据设计. 概要设计文档 接口设计
详细设计每个模块的算法和数据结构..
(1)软件总体结构设计_选择
依据任何一种软件设计方法总能推导出一个软件结构。 模块内聚度和耦合度是判断结构好坏的主要标准 。

(1)软件总体结构设计_描述工具
模块1
非直接 耦合
模块2
数据耦合
特征耦合(参数表 传递数据结构)
模块4
模块3
(2)中耦合
(3)控制耦合(Control Coupling)
传递的信息含有控制信息。控制耦合通常会增加系
统的复杂性,适当分解模块可望消除控制耦合
A
Flag
flag
计算平均分 输出结果 计算最高分
B
(c)强耦合
(5)外部耦合(External Coupling)
(3)信息隐藏information hiding
问题:
原则:——信息隐藏
为了得到最好的一组模块,该如何分解呢? 一个模块内部(信息数据和过程)对于不需要了解
这些信息的模块来说,是不能访问的 只有为了完成软件的总体功能而必须在模块间交换 的信息,才容许在模块间交换
目的:
提高模块的独立性,维护、修改模块时尽可能避免
1) 模块(module)与构件(component)
模块:定义输入、输出和特性的程序实体 构件:可重复使用的软件组件 抽象:分层次考虑和处理问题(数据和过程) 细化:从高到低的逐步分解过程 对其它模块隐藏模块内部的数据和过程
2) 抽象(abstract)与细化(refinement)
(a)弱耦合
(1)非பைடு நூலகம்接耦合(Nodirect Coupling)
合度最低。
两模块中任一个都不依赖对方能独立工作,
这类耦
(2)数据耦合(Data Coupling)
两模块通过参数交换信息,信息仅限于数据。
(3)特征耦合(Stamp Coupling)。
两模块交换的参数是数据结构
例:弱耦合
相关文档
最新文档