第4章 总体设计_结构化软件设计_概要设计4-2
软件工程第4章 软件设计

5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。应 该把模块组织成良好的层次系统,顶层模块调用它 的下层模块以实现程序的完整功能,每个下层模块 再调用更下层的模块,从而完成程序的一个子功能, 最下层的模块完成最具体的功能。
6. 设计数据库 对于需要使用数据库的那些应用系统,软件工程师 应该在需求分析阶段所确定的系统数据需求的基础 上,进一步设计数据库。
高内聚也有两类:如果一个模块内的处理元素和同 一个功能密切相关,而且这些处理必须顺序执行 (通常一个处理元素的输出数据作为下一个处理元 素的输入数据),则称为顺序内聚。根据数据流图 划分模块时,通常得到顺序内聚的模块,这种模块 彼此间的连接往往比较简单。如果模块内所有处理 元素属于一个整体,完成一个单一的功能,则称为 功能内聚。功能内聚是最高程度的内聚。
(2) 用户手册根据总体设计阶段的结果,修改更正 在需求分析阶段产生的初步的用户手册。
(3) 测试计划包括测试策略,测试方案,预期的测 试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果
9. 审查和复审 最后应该对总体设计的结果进行严格的技术审查, 在技术审查通过之后再由使用部门的负责人从管理 角度进行复审。
为什么模块的独立性很重要呢?主要有两条理由: 第一,有效的模块化(即具有独立的模块)的软件比 较容易开发出来。这是由于能够分割功能而且接口 可以简化,便于多人分工合作开发同一个软件。
第二,独立的模块比较容易测试和维护。这是因为 相对说来,修改设计和程序需要的工作量比较小, 错误传播范围小,需要扩充功能时能够“插入”模块。
(2)详细设计。详细设计阶段的根本目标是确定 应该怎样具体地实现所要求的系统,也就是说,经 过这个阶段的设计工作,应该得出对目标系统的精 确描述,从而在编码阶段可以把这个描述直接翻译 成用某种程序设计语言书写的程序。 详细设计阶段的任务还不是具体地编写程序,而是 要设计出程序的“蓝图”,结果基本上决定了最终 的程序代码的质量。
软件工程 第四章 概要设计

第4章
4.4 模块的独立性
15
4.4.1 耦合性(Coupling)
5.外部耦合 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为 外部耦合。 6.公共耦合
若一组模块都访问同一全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据
4
4.2.1 概要设计的任务
概要设计的基本任务是: (1)设计软件系统结构; (2)数据结构及数据库设计; (3)编写概要设计文档;
(4)评审概要设计文档。
第4章
4.2 概要设计的任务与步骤
5
4.2.2 概要设计的步骤
概要设计的一般步骤如下: 1.选定体系结构 2.确定设计方案 3.设计软件结构
4.数据结构及数据库设计
(2)一个模块不通过正常入口而直接转入到另一个模块的内部;
(3)两个模块有一部分代码重叠(该部分代码具有一定的独立功能); (4)一个模块有多个入口。
第4章
4.4 模块的独立性
17
4.4.2 内聚性(Cohesion)
一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只
完成一个功能,模块设计的目标之一是尽可能高内聚。
第4章
4.4 模块的独立性
21
4.4.2 内聚性(Cohesion)
5.通信内聚
指模块内所有处理功能都通过公用数据而发生关系。即模块内各个组成部分都使用相同的 输入数据或产生相同的输出结果。
第4章
4.4 模块的独立性
22
4.4.2 内聚性(Cohesion)
《软件工程实用教程》第4章_结构化软件设计

《软件工程实用教程》第4章_结构化软件设计《软件工程实用教程》第 4 章:结构化软件设计在软件工程领域,结构化软件设计是构建可靠、高效软件系统的关键环节。
它为软件的开发提供了一种清晰、有条理的方法,有助于提高软件的质量、可维护性和可扩展性。
结构化软件设计的核心思想是将一个复杂的软件系统分解为若干个相对独立、功能明确的模块,并通过清晰的接口定义这些模块之间的关系。
这种分解和模块化的方法使得软件开发过程更加可控,也便于团队成员之间的分工协作。
在进行结构化软件设计时,首先要明确软件系统的需求。
这包括对系统功能、性能、安全性等方面的要求。
只有充分理解了需求,才能为后续的设计工作奠定坚实的基础。
模块划分是结构化软件设计的重要步骤。
一个好的模块应该具有高内聚、低耦合的特点。
高内聚意味着模块内部的元素紧密相关,共同完成一个特定的功能;低耦合则表示模块之间的相互依赖程度较低,这样当一个模块发生变化时,对其他模块的影响最小化。
例如,在一个学生管理系统中,可以将学生信息管理、课程管理、成绩管理等划分为不同的模块,每个模块专注于自己的核心业务。
在模块划分的基础上,需要定义模块之间的接口。
接口就像是模块之间的“桥梁”,规定了模块之间传递数据和控制信息的方式。
清晰、简洁的接口设计能够提高模块之间的通信效率,减少错误的发生。
比如,在上述学生管理系统中,学生信息管理模块和成绩管理模块之间的接口可以定义为学生的学号,通过学号来传递学生的相关信息。
结构化软件设计还注重控制结构的设计。
常见的控制结构包括顺序结构、选择结构和循环结构。
合理地运用这些控制结构,可以使软件的流程更加清晰、逻辑更加严密。
以一个简单的登录功能为例,首先需要输入用户名和密码,然后进行验证,如果验证成功则进入系统,否则提示错误信息。
这就是一个典型的顺序和选择结构的组合。
另外,数据结构的设计也是不容忽视的一部分。
选择合适的数据结构可以提高数据的存储和访问效率。
比如,对于频繁查找和插入操作的数据,可以使用二叉搜索树或哈希表等数据结构。
软件工程第4章总体设计课件

(6) 逻辑内聚(Logical Cohesion)
• 把几种相关功能(逻辑上相似的功能)组合 在一模块内,每次调用由传给模块的参数确 定执行哪种功能。
S
X
Y
Z
W
A
B
C
D
S
X
Y
Z
W
2020/7/8
ABCD
(7) 巧合内聚(Coincidental Cohesion)
• 当模块内各部分之 间没有联系,或者 即使有联系,这种 联也很松散,则称 这种模块为巧合内 聚模块,它是内聚 程度最低的模块。
模块独立性
弱
(1) 非直接耦合
两个模块没有直接关系(模块1和模块2), 模块独立性最强。
模块1
模块3
2020/7/8
模块4
模块2
(2) 数据耦合
一模块调用另一 模块时,被调用 模块的输入、输 出都是简单的数 据(若干参数)。
属松散耦合。
开发票
单价 数量
金额
计算水费
2020/7/8
(3) 标记耦合(特征耦合)
(7) 内容耦合
A
B
A B
Entry1 ……
Entry2 ……
一模块直接 访问另一模 块的内部信 息 (程序代 码或数据)
不
模
块 代 码 重 叠
正 常
多
转
入
入
口
另 一 模
模 块
块
最不好的耦合形式!
2020/7/8
以上给出了 7种耦合类型,这只是从耦合的机制上所 做的分类,按耦合的强弱程度的排列只是相对的关系 。但它给设计人员在设计程序结构时提供了一决策准 则。实际上,开始时两个模块之间的耦合不只是一种 类型,而是多种类型的混合。这就要求设计人员按照 实际情况进行分析、比较和分析,逐步加以改进,以 提高模块的独立性。
软件工程导论第四章 概要设计

模式4:共享数据模式
共享数据系统以一个或多个数据库 / 数据仓库为中心进行 组织,其它部件可以从中读写存储的数据。共享数据系统还 提供并发访问、容错处理、访问权限控制等功能。 典型的共享数据系统包括: a. 数据库 b. 知识库 c. 源代码控制程序
模式5:信息系统模式
现代信息系统平台模式,主要考虑B/S模式。 B/S模式的三层:表示层(presentation),业务 层(business),和数据存储层(data access) 。 B/S模式的优点: a. 架构简化了客户端。它无需象C/S模式那样在 不同的客户机上安装不同的客户应用程序,而只需安 装通用的浏览器软件。 b. 简化了系统的开发和维护。 c. 使用户的操作变得更简单。 d. 特别适用于网上信息发布 。
第四章 概要设计
•4.1软件体系结构 •4.2概要设计任务与步骤 •4.3软件设计的基本概念 •4.4面向数据流的设计方法 •4.5面向数据结构的分析设计方法 •4.6概要设计文档评审
概要设计
一是要覆盖《需求规格说明书》的全部内容, 二是要作为指导详细设计的依据。
概要设计注重于宏观上和框架上的设计,它是软 件系统的总体结构设计、全局数据库(包括数据结 构)设计、外部接口设计、功能部件分配设计、部 件之间的接口设计。 概要设计又称为架构设计。 • 用于描述系统最顶的结构和组织形式,标识出软 件的各个组成部分。
2.子系统和模块的区别 (1)一个子系统独立一个构成系统,不依赖 于其他子系统提供的服务。 (2)一个模块通常是一个能提供一个或多个 服务的系统组件。 3.体系结构设计的结果 体系结构设计过程的结果是一个体系结构 的设计文档。
4.1软件体系结构 4.1.1概述
4.体系结构模型 (1)静态结构模型 将子系统或组件作为一个个独立的单元来开发 (2)动态过程模型 给出系统在运行时的过程组成。它与静态模型不 同。 (3)接口模型 定义每个子系统从他们的公共接口能得到的服务。 (4)关系模型 关系模型给出子系统间的数据流的关系。
《结构化软件设计》课件

结构化软件设计的基本原则
模块化
将软件系统划分为相互独立而又相互关联的模 块,方便开发和维护。
层次化
将软件系统分成多个层次,每个层次负责不同 的功能,方便团队合作和软件升级。
抽象化
将复杂的细节抽象成简单的概念,提高代码的 可读性和可维护性。
分解
将大问题分解为多个小问题,便Hale Waihona Puke 解决和测试。结构化程序设计
结构化设计的工具和技术
数据流图(DFD)
用来描述软件系统中数据的流动,包括数据流、进 程和数据存储等元素。
结构化语言(Pascal、C、C++)
使用结构化语言编写结构化的程序,包括变量、数 据类型、函数和过程等。
结构化设计的优点和缺点
优点
易于维护、易于修改、易于理解和推广。
缺点
对设计师和编程人员的能力要求较高,需要较长的设计时间。
总结
结构化软件设计的重要性
结构化软件设计有助于提高软件 系统的可维护性和可扩展性,确 保软件系统的稳定运行。
学习结构化软件设计的意义
学习结构化软件设计可以培养系 统思维和逻辑思维能力,提高软 件设计和开发的水平。
实践中应用结构化软件设 计的难点
实践中,需要根据具体项目需求 灵活应用结构化软件设计原则和 技术,并解决遇到的挑战。
1 软件设计的三个基本要素
数据、过程、逻辑
2 控制结构
顺序结构、选择结构、循环结构
结构化程序设计实例
1
求解方程组的程序设计
通过结构化软件设计,可以编写一个简单而高效的程序来求解复杂的方程组。
2
...
更多结构化程序设计实例,应用广泛且有重要意义。
3
...
软件工程第4章概要设计
通常,通信内聚模块是通过数据流图来定义的。
5.通信内聚(2)
6.功能内聚
一个模块中各个部分都是完成某一具体功能 必不可少的组成部分 或者说该模块中所有部分都是为了完成一项 具体功能而协同工作,紧密联系,不可分割 的 软件结构中应多使用功能内聚类型的模块
内聚类型汇总
5.标记耦合
如果一组模块通过参数表传递信息 这个参数是: 数据结构 字符串 记录 不是简单变量
标记耦合举例 计算水电费
住户情况
计算水费
水费
住户情况
电费
计算电费
“住户情况”是一个数据结构,图中模块都 与此数据结构有关. “计算水费”和“计算电费”本无关,由于 引用了此数据结构产生依赖关系,它们之间 也是标记偶合.
4.2.2 软件结构风格与策略
1.软件结构风格取决于 程序的模块结构表明了程序各个模块的 组织情况,是软件的过程表示 数据的结构表明各个数据之间的关系和 各个数据元素的约束,是软件的信息表 示
2.软件结构的独立性风格
(1).独立性 软件系统中每个模块只涉及软件要求的 具体的子功能, 而和软件系统中其它的 模块的接口是简单的 一个模块和其它模块的独立程度是评价 一个模块设计好坏的重要度量尺度。
例如初始化模块和终止模块。
4.过程内聚
一个模块内部的处理成分是相关的,而且这些处 理必须以特定的次序执行
函数A 函数B 函数C
例如,把流程结构中的循环部分、判定部分、计 算部分分成一个模块,这三个任务组成的模块是 过程内聚模块。
5.通信内聚
如果一个模块内各功能部分都使用了相同的输入数 据,或产生了相同的输出数据,则称之为通信内聚 模块。
概要设计
未加工的设计材料,如构件、解决方案和知 识; 收敛(convergence):设计者从设计材料中选择 和组合合适元素,以满足设计目标。这是一 个不断删除的过程。
过程 设计
接口设计
数据 字典
体系结构设计
状态转换图
数据设计
控制规格说明
分析模型转变成软件设计示意图
4.1.2系统构成 体系结构的三个标准模型 : 1.容器模型:适合于数据是由一个子系统产生而 由其他子系统使用的情形。 2.客户机/服务器模型:是一个分布式系统模型, 数据和处理过程可分配在多个处理器之中。 3.抽象机模型:有时叫做分层模型,是用来建立 子系统的接口模型。
3.信息隐藏(Information Hiding)原理:软件开发 过程中设计和确定模块时,应使模块内所包含的 信息(数据和过程)对于不需要这些信息的模块来 说,是不能访问的(隐蔽模块的实现细节)。 4.局部化原理:把模块内关系密切的软件元素物 理地放得彼此靠近些。 作用: a.提高系统安全性; b.软件结构更清晰。
3.深度、宽度、扇出和扇入都应适当 深度:表示软件结构中控制的层数,能大体上反 映一个系统的大小和复杂程度。 宽度 : 软件结构内同一个层次上模块总数的最 大值。一般地说,宽度越大,系统越复杂。 扇出:模块直接控制的模块数目.扇出过大, 需 要控制和协调过多的下级模块. 扇入 : 直接调用某个模块的模块个数。在提高 模块共享性的同时,不能违背独立性原则。 结论:顶层扇出高,中间扇出小,底层扇入高。
模块化 抽象 逐步求精 信息隐藏和局部化 模块独立(耦合和类聚)
4.3.1.模块化与模块独立 1)模块(Module)是由边界元素限定的相邻的程序 元素的序列,且有一个总体标识符来代表它(如过 程、函数、子程序名等),是构成程序的基本构件. 2)模块化(Modularity)即把程序划分成若干个相 对独立的模块,每个模块完成一定功能,集成起来 形成一个整体,完成系统的功能。软件体系结构 (Software Architecture, SA)体现了模块化。SA 包括构件(模块)的层次结构、构件间的交互方式 和构件的数据结构等。
软件概要设计
第4章软件概要设计学习本章,我们要考虑以下几个问题:软件概要设计指的是什么软件概要设计要做的事情是什么用什么来评价软件设计的技术质量软件结构优化的准则是什么如何进行软件概要设计以上问题就是本章所要讨论的内容;一、软件概要设计指的是什么我们知道,软件设计是把一个软件需求转换为软件表示的过程,而概要设计又称结构设计就是软件设计最初形成的一个表示这里的表示是一个名词,它描述了软件的总的体系结构;简单地说软件概要设计就是设计出软件的总体结构框架;而后对结构的进一步细化的设计就是软件的详细设计或过程设计;本章所学内容主要就是软件的概要设计内容;二、软件概要设计的基本任务软件概要设计阶段要做的事情是什么呢总的来看有四个方面:它们是1、设计软件系统结构软件结构2、数据结构及数据库设计3、编写概要设计文档4、评审在需求分析阶段,已经把系统分解成层次结构,而在概要设计阶段,需要进一步分解,划分为模块以及模块的层次结构;划分的具体过程是:1采用某种设计方法,将一个复杂的系统按功能划分成模块;2确定每个模块的功能;3确定模块之间的调用关系;4确定模块之间的接口,即模块之间传递的信息;5评价模块结构的质量;对于大型数据处理的软件系统,还要对数据结构及数据库进行设计;在概要设计阶段,还要编写概要设计文档,我们初学者有一个不是很好的做法,就是在编程序时,往往不注意文档的编写,导致以后软件修改和升级很不方便,用户使用时也得不到帮助;所以应该在软件设计的每个阶段编写相应文档,在概要设计阶段,主要有以下文档需要编写:1概要设计说明书;2数据库设计说明书;3用户手册,4修订测试计划;最后一个任务就是评审,在概要设计中,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等都要进行评审,以免在以后的设计中发现大的问题而返工;以上就是软件概要设计的四个基本任务,总结一下用八个字表示:两类结构文档评审;两类结构就是指软件结构和数据结构及数据库设计在了解了软件概要设计的基本任务之后,我们来看看软件设计的基本原理,也就是用于衡量软件设计的技术质量的一些标准;三、软件设计的基本原理1、模块化模块就是指在程序中的数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素;如高级语言中的过程,函数、子程序等;每个模块可以完成一个特定的子功能,各个模块可以按一定方法组装起来成为一个整体;从而实现整个系统的功能;模块化就是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程;为了解决复杂的问题,在软件设计中就必须把整个问题进行分解来降低复杂性,这样就可以减少开发工作量并降低开发成本和提高软件生产率;但是划分模块并不是越多越好,因为这会增加模块之间接口的工作量;所以划分模块的层次和数量应该避免过多或过少;2、抽象抽象这个词本身也比较抽象,老师要小明用抽象和具体造一个句子,可是他不懂,就问妈妈,什么是抽象,什么是具体妈妈告诉他:抽象就是看不见摸不着的,具体就是看得见摸得着的;小明懂了,很快造好了一个句子,是这样的:今天我很早起床,看见具体的妈妈在炒具体的菜,我打开窗户,抽象的新鲜空气呼地一下跑进来,真舒服啊;呵呵,事实上,抽象并不是这么简单的意思,它是一种思维工具,就是把事物本质的共同特性抽出来而不考虑其他细节,比如说我们可以把把男人女人老人小孩的共同本质特性抽出来之后形成一个概念"人",这个概念就是抽象的结果;在软件工程中就是这样,在每个阶段中,抽象的层次逐步降低,在软件结构设计中的模块分层也是由抽象到具体的分析和构造出来的;比如上一层的模块所进行的加工是一个抽象的操作"销售统计",分解到最后一层,就可能是具体"打印报表"的操作了;3、信息隐蔽信息隐蔽的意思就是指,在设计和确定模块时,使得一个模块内包含的信息过程或数据,对于不需要这些信息的其他模块来说是不能访问的;举个例子吧,假设我是程序中的一个模块,机是另一个模块,我在使用机时,对机的控制是通过几个按键来确定的,输入的数据是我的语音,输出的数据是对方的语音,而这些输入、输出的数据变换以及控制在机内部是怎么实现的我不需要知道,同时也不能加以直接控制,这样,如果机坏了,修复或更换后对我的使用是没有任何影响的;所以说,机这个模块的信息隐蔽是十分完善的;在软件设计中,模块的划分也要采取措施使它实现信息隐蔽;4、模块独立性模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单;这个概念就是上面说的三个基本原理的直接产物,在概要设计过程中,就是要求设计出具有良好模块独立性的软件结构;那么如何来衡量软件的模块独立性呢这里有两个定性的度量标准;1耦合性:就是指模块之间的联系紧密程度;模块之间联系越紧密,其耦合性越强,独立性就越差;模块的耦合性从低到高可分为以下几种类型:假设某人为一模块无直接耦合比如陌生人之间的联系数据耦合比如去售货员与顾客之间的联系标记耦合比如两个人下棋控制耦合领导和下属之间的联系公共耦合比如图书馆的所有借书者之间的联系内容耦合比如小两口之间的联系在软件设计中,提高模块的独立性,建立模块间尽可能松散的系统,是模块化设计的目标;为了降低模块间的耦合度,可以采取以下措施:1在耦合方式上降低模块间接口的复杂性;2在传递信息类型上尽量采用数据耦合,避免使用控制耦合,慎用或有控制地使用公共耦合;在实践中要根据实际情况综合考虑;2、内聚性内聚性是指模块内部各个元素彼此结合的紧密程度;根据内聚性的从低到高可分为以下六种类型:偶然内聚:指一个模块内的各处理元素之间没有任何联系;公共汽车内的人群逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能;警察局里的警察时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块;交响乐团的演奏员通信内聚:指模块内所有处理元素都在同一个数据结构上的操作;或者指各处理使用相同的输入数据或者产生相同的输出数据;建筑工地上的工人顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能的元素的输出就是下一功能元素的输入;我们可以想像纺织厂中从纺纱到织布的各个操作形成的一个模块,就是一种顺序内聚功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可,模块已不可再分;就如两个人演狮子舞,要完成狮子形象的再现,两个人缺一不可.耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚,低耦合,提高模块的独立性;在内聚性与耦合性发生矛盾的时候,最好优先考虑耦合性,也就是先保证耦合性低一些;四、软件结构的优化准则首先应学会用图形表示软件结构,软件结构图反映了整个系统的功能实现,即将来编好程序中的控制层次体系;软件结构往往用树状或网状结构的图形来表示;请大家对照课本的解释来看软件结构图包括哪些内容;我们已经知道了软件概要设计的主要任务就是软件结构的设计,为了提高设计的质量,可以根据下面的设计优化准则进行优化:在这些准则中,都是针对模块及模块间关系来提出的;1、模块的划分:要做到高内聚,低耦合,保持相对独立性;2、模块的控制:模块的作用范围要在他的控制范围内,判定所在的模块应与受其影响的模块在层次上尽量靠近3、形成的结构;软件结构的深度、宽度、扇出、扇入要适当4、模块的大小:要适中;5、模块的接口:模块的接口要简单、清晰、含义明确,便于理解、易于实现、测试与维护;五、概要设计的设计方法;一面向数据流的设计方法这是需要我们熟练掌握的方法面向数据流的设计方法是以需求阶段产生的数据流图为基础,按一定的步骤映射成软件结构,因此又称为结构化设计StructuredDesignSD;这是目前使用最广泛的软件设计方法之一,应该熟练掌握它;1、首先要研究数据流图DFD的类型,无论何种软件系统,DFD一般都可分为变换型和事务型两类;课本第51页先来看变换型数据流图,顾名思义,变换就是把输入的数据处理后变成另外的数据输出,所以变换型数据的工作过程就是三步:取得数据、变换数据和输出数据;在图4-6中,可以看到两股数据流经过交换中心变成一股数据流进行输出;虚线为标出的流界;再来看事务型数据流图,所谓事务也是一个处理,但不是数据变换,而是将输入数据流分离成许多发散的数据流,形成许多加工路径,并根据值选择其中一个路径来执行;举个例子,好比有一个邮件分发中心,把收进的邮件根据其发送地址进行分流,有的用飞机邮送,有的用汽车来运输等等;在大型软件系统中的DFD数据流图中,这两种类型特征都有可能存在;2、SD方法设计过程1精化DFD;2确定DFD类型并进行相应的映射;3分解上层模块,设计中下层模块结构4根据优化准则对软件结构求精;5描述模块功能、接口及全局数据结构6复查,如果有错则转向2修改完善,否则进入详细设计;下面我们通过例子来说明变换分析设计和事务分析设计方法;3、变换分析设计以课本53页图4-8为例说明变换分析设计;根据面向数据流的设计方法,第一步是精化DFD,也就是研究分析这个数据流图,我们可以看到图中从A到H的数据流向和加工,图形比较简单;第二步是确定DFD类型并确定加工中心,在这里已经说明为本图为变换型,在实际分析中应该根据每个相关操作来确定其类型;在图中,我们可以直观地看到中间几股数据流的汇合处是系统的变换中心;也可以通过双向寻找法来确定,左边是物理输入端,从f1沿着单向路径一直到f3,后面的f4是从C流出的,同时C还有f5流出,则可见f4,f5不能再看作是系统的输入,因此可确定f4,f5前一个数据流f3就是系统的逻辑输入,同样,我们从右边的物理输出端往左边沿数据流的反向寻找,可以发现f4,f6不能看作是整个系统的输出,因此可以确定f7,f8是逻辑输出端,然后在这两个分界处添上虚线,这样,DFD 的三部份就确定了;第三步设计软件结构的顶层和第一层,根据变换中心可以对应得到主模块的位置,就可以画出顶层模块即主模块,在实际应用中,这个模块的名字就是系统的名字,如销售管理系统等;然后在这个模块下方根据划分好的三个部分画出三个功能模块,即输入、变换和输出模块,就是图中的getf3,将f3变换成f7和f8模块,putf7及putf8模块,注意,这里应当为每个输入和输出设计一个模块;然后将这些模块与顶层模块用连线连上表示所属控制;画上相应的数据传送箭头;第四步分解上层模块,设计中下层模块;根据上面的方法,分解输入模块,图中的getf3模块的功能是向主模块提供数据,而在DFD中可以看到f3是数据流f2经过B操作后流出的,因此这里有两个部分,就是接收f2数据,再通过B转换流出;所以在getf3模块下画出两个子模块getf2和B操作模块;就这样一一分解,可以画出所有的输入和输出子模块,直到物理输入和输出为止;对于变换中心的下属模块,根据数据流和变换操作,以每个基本加工建立一个功能模块,可以画出CDE三个子模块;整个过程并不复杂,画好后根据实际情况对软件结构进行优化,也就是进行必要的合并或分解;以求设计出高内聚低耦合的模块组成的、具有良好特性的软件结构;4、事务分析设计,可以参见图4-9为例;其设计方法大同小异,首先确定DFD类型,这里已指明是事务型,然后找出DFD中的事务中心和加式路径;当DFD中时不要弄错,然后在分解子模块时在调度模块上加一个菱形符号表示判断处理;5、综合型数据流图与分层数据流图映射成软件结构的设计有了上面的基础,对综合型的数据流图也可以一一分开来进行设计了;6、设计后的处理,在软件结构形成之后,我们知道,概要设计的基本任务还有文档的编写,在这个阶段就是要编写一些文档,包括:1为每个模块写一份处理说明2为每个模块提供一份接口说明3数据结构说明4给出设计约束或限制5进行概要评审6设计优化;本节介绍的设计方法是本章的重点,要求熟练掌握;二基于IDEF0图的设计方法三表示软件结构图的另一种图形工具--HIPO图;HIPO图清晰易读,主要用于编写概要设计文档中的说明;本章小结:根据上面的学习,我们可以知道,软件概要设计的四个主要任务,知道评价软件结构设计质量的原理和两个标准即软件模块的耦合性及内聚性,根据这些原理提出了软件结构设计的优化准则,并且详细学习了软件结构的面向数据流图的设计方法;。
结构化软件设计
本章学习内容: 本章学习内容: 1.了解概要设计的任务与过程 2.掌握结构化设计技术的基本原理与准则 3.掌握面向数据流分析的设计方法 4.了解面向数据的设计方法 5.掌握数据库设计原则和步骤 6.了解常用的详细设计工具 7.了解概要设计说明书的基本内容
第4 章 结构化软件设计
4.1.1 概要设计的任务
(1)建立目标系统的总体结构 ( 2) 给出每个功能模块的功能描述 , ) 给出每个功能模块的功能描述, 数据接口描述和调用关系, 数据接口描述和调用关系 , 规定设 计限制, 外部文件及全局数据定义。 计限制 , 外部文件及全局数据定义 。 (3)设计数据库及数据结构 (4)编写文档
第4 章 结构化软件设计
4.2.2 常见的软件体系架构风格 1.数据流风格 管道/ 管道/过滤器风格的软件体系结构
第4 章 结构化软件设计
管道/过滤器风格的软件体系架构的优点 管道 过滤器风格的软件体系架构的优点 使得软构件具有良好的隐蔽性和高内聚性、 使得软构件具有良好的隐蔽性和高内聚性、低耦 合度的特点; 合度的特点; 允许设计者将整个系统的输入/输出行为看成是 允许设计者将整个系统的输入 输出行为看成是 多个过滤器的行为的简单合成; 多个过滤器的行为的简单合成; 支持软件复用, 支持软件复用,如果任何两个过滤器达成了在它 们之间交流的数据格式, 们之间交流的数据格式,这两个过滤器就可被连 接起来; 接起来; 维护这种系统和增强系统其功能很简单, 维护这种系统和增强系统其功能很简单,新的过 滤器可以添加到现有系统中来, 滤器可以添加到现有系统中来,旧的过滤器可以 被改进的过滤器替换掉; 被改进的过滤器替换掉;
第4 章 结构化软件设计
3.信息隐蔽 信息隐藏是指在设计和确定模块时, 信息隐藏是指在设计和确定模块时, 应使一个模块内包含的信息( 应使一个模块内包含的信息 ( 过程和 数据) 数据 ) 对于不需要这些信息的模块来 说是不可访问的。 说是不可访问的。 信息局部化是指将一些关系密切的 成份,设计时放得彼此靠近。 成份,设计时放得彼此靠近。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中继系统 网络层
数据链路层 物理层 物
数据链路层 物理层 理 介 质
优点:支持增量式开发。 缺点:系统构成,性能保证较困难。
五、控制摸型 考虑子系统之间的控制流。控制方式分为: 1.集中式控制
主程序
传感器进程
传动装置进程
系统控制器
程序1 程序2 程序3
程序11
程序12
程序31
1.2 软件体系结构
1 层次体系结构
OSI七层模型
会话层 应用层 表示层
传输层
网络层
数据链路层
物理层
图4-1
2 C/S结构
图4-2
3 B/S 结构
图4-3
4 B/S和C/S比较 1. C/S的优点 (1)能充分发挥客户端PC的处理能力,很多工作可以在客户 端处理后再提交给服务器。对应的优点就是客户端响应 速度快。 (2)可以减轻服务器端压力,如果用户的需求特别复杂,用 C/S。 2. C/S的缺点: (1)只适用于局域网。而随着互联网的飞速发展,移动办公和 分布式办公越来越普及,这需要我们的系统具有扩展性 。这种方式远程访问需要专门的技术,同时要对系统进 行专门的设计来处理分布式的数据。 (2)客户端需要安装专用的客户端软件。系统软件升级时,每 一台客户机 需要重新安装,其维护和升级成本非常高。
第一级是数据库管理结点(database management node)。 第二级或中间级是“商业逻辑结点” (business logic node),是指具体应用中实施的 程序逻辑和法则。 第三级是用户界面级,强调高效、方便易用的用户界面。
ClientA
服 务 器 ClientB ClientC
模块之间的相互影响小,当一个模块出错时,
由于模块之间的联系小,其他模块受到的错误波及
也小,从而提高了系统的可靠性。
(3 ) 系统易于测试和维护。
模块的独立程度可以由两个定性标准衡量, 即模块间的耦合性和模块的内聚性。 耦合性(不同模块): 衡量不同模块彼此间互相连接的紧密程度; 内聚性(一个模块): 衡量一个模块内部各个元素彼此结合的紧密程度
程序32
计算进程
用户界面
故障处理器
控制的调用—返回模型
实时系统的集中式模型
2.事件驱动系统 —由外部产生的事件来驱动系统
分为:
广播模型
中断驱动的模型
3.3 模块分解
软件设计是软件开发过程的重要阶段,对保证 软件系统的质量起着关键作用。但是如何保证软件 设计的质量呢?有以下经过长期考验的设计准则:
1.软件结构的准则
1. 两层客户机/服务器模型 Two Tier Client/Server Architectural Model
客户1 客户2 客户N 请求 网络 请求
结果
服务器1
服务器2
两层Client/Server结构
服务器M
C/S的工作模式是一种远程过程调用(RPC,Remote Procedure Call)模式,允许客户端和服务器端有不同的 软硬平台。
C/S结构是一种分布式模型,采用发请求、得结果 的模式: 客户机 向服务器发出请求(数据请求、网页请求、文件 传输请求等等), 服务器 响应请求,进行相应的操作,将结果回传给客 户机,客户机再将格式化后的结果呈现给用户。
C/S结构的应用都由三个相对独立的逻辑部分组成:
用户界面 应用逻辑
数据访问
三种逻辑之间的关系
picture server digitised photograp hs
hypertext server hypertext web
电影图片库的系统的体系结构
完整的应用包含三个相对独立的逻辑部分,而两层 的C/S结构只有两个端应用。应用逻辑应该映射到哪一端 上呢? 三种情况:
C/S应用1
客户端 用户界面 逻辑应用
2. 模块化准则
3.软件独立性准则 这些设计准则直接影响到体系结构的设计过 程的主要活动——系统分解和模块分解。
2 概要设计原则
2.1 结构化设计原则
1.模块化。 模块一般具有如下三个属性(功能、逻辑、状态): (1)功能:指该模块实现什么功能,解决什么需求。该模 块本身的功能与它所调用的所有子模块功能之合。 (2)逻辑:即描述模块内部如何做,即模块内部的执行过 程。
• 模块之间具有较高的独立性是设计软件系统的一 个关键,其重要性主要体现在以下几个方面 : 系统容易开发、可靠性高、易于测试和维护
2.2 模块独立性
(1) 系统容易开发;
由于模块之间接口简单, 当许多人分工合作 开发同一个软件时, 可以简化合作者之间的协调 工作,提高系统开发的效率。
(2)系统可靠性高;
软件工程
E-mail:xu201@
一、设计的概述(结构化DFD 、面向对象) 二、设计模型 三、结构化设计方法 四、面向对象设计方法 五、案例分析
chapter__3
2
第4章总体设计_结构化软件设计
1 概要设计综述 1.1 概要设计的内容 结构化概要设计的步骤如下: (1)确定体系结构(层次、C/S、B/S); (2)进行模块划分; (3)确定系统接口; (4)制定设计规范; (5)确定用户主界面; (6)确定主要的算法; (7)异常处理设计; (8)书写概要设计说明书
“对象(Object)”——提供服务的系统组件(System Component)。
每个对象在逻辑上是平等的,它们可以互相为对方提 供所需的服务。 提供服务的对象就是服务器,而提出服务请求的对象 就是客户。
O1 S(O1)
O2 … S(O2) 软件总线(ORB) 分布式对象结构
On S(On)
“软件总线(Software Bus)”的中间件(Middleware) 即对象请求代理(Object Request Broker,简称ORB) 分布式对象结构具有很好的开放性和透明性,用 户可以非常方便地在总线上添加、更新或删除组件对 象。
例:Two Tier Client/Server Architectural Model
client1 client2 client3 client4
Wide-bandwidth netwok
Catalogue server
catalogue
video server Film clip files
2. B/S的优点 (1)可以在任何地方进行操作而不用安装任何专门的软件。只
要有一台能上网的电脑就能使用,客户端零维护。 (2)B/S架构的软件对一个稍微大一点单位来说,系统管理人员 不需要在几百甚至上千部电脑之间来回奔跑,只需要管理服 务器就行了,所有的客户端只是浏览器,根本不需要做任何 的维护。 (3) B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这 是C/S无法作到的. 与操作系统平台关系最小. B/S架构的软件系统的扩展非常容易,只要能上网,系统管 理员分配一个用户名和密码,还可以在线申请等。
在模块设计时要尽量做到六个字: “高内聚低耦合”。
• •
•
在进行物理模型设计时就遵循这两条原则: (1)一个模块内部各个元素之间的联系越紧密越好,即 要使模块具有较高的内聚性。 (2)各个模块之间的信息联系要尽可能地减少,即模块 的耦合性要尽可能的低。
耦合是对一个软件结构内各个模块之间相互关联的度量。 模块间耦合的强弱取决于模块间接口的复杂程度、调用模 块的方式以及通过模块间接口的信息。
流行的ORB技术标准有: 1.CORBA(Common Object Request Broker Architecture) 公共对象请求代理体系结构。由对象管理组织OMG (Object Management Group)提出的应用软件体系结 构和对象技术规范。
(Distributed
ClientD
第三级
business logic node(商业逻辑结点)
客 户 机
Security
(安全)
Event
(事件)
Search
(搜索)
第二级
Database management node
(数据库管理结点)
第一级
在多层模型中,中间层会用到应用服务,包括事务服 务、消息服务等等。常见的事务服务器有Microsoft Transaction Server,消息服务器有Microsoft Message Queue。
客户端 用户界面
应用服务器1 应用服务器n
应用逻辑
…
服务器 数据访问
应用逻辑
网 络 多层应用模型
三、分布式对象结构(Distributed Objects Architecture) 在C/S模型中,客户和服务器在服务/请求上的差别, 在一定程度上限制了系统的灵活性和可扩展性。
采用分布式对象结构 :
一、仓库模型(The repository model) 各子系统共享中央数据库中的数据—共享容器模型 各子系统有自己的数据库,子系统之间通过消息传 递实现数据交换。
设计编辑器 设计转换器 代码生成器 程序编辑器
项目存储
设计分析器
报告生成器
集成CASE工具集的体系结构
适宜命令控制系统、CAD系统
仓库模型的主要优缺点: 优点: 1.共享大数据量的有效方法。 2.子系统不必关心其它的子系统如何使用它所产生的数 据。 3.易于将新子系统集成,若新子系统也采用相同规范 。
•
3.2 模块结构图
模块名
模块:用矩形框表示,并用模块的名字标记。 调用关系:箭头从调用模块指被调用模块。 被调用模块执行完成后,控制又返回到调用模块。 模块间的数据传递:用尾端带有空心圆的短箭头表示数据信息。 模块间的控制信息传递:用尾端带有实心圆短箭头表示控制信息。