版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 概要设计,目 录,3.1 概要设计的任务 3.2 设计过程 3.3 设计原理 3.4 描绘软件结构图的图形工具 3.5 启发规则 3.6 面向数据流的设计方法,3.1 概要设计的任务,(一)概要设计的任务 (二)概要设计说明书的主要内容,3.1 概要设计基本任务,1.设计软件系统结构: 采用某种设计方法,将一个复杂的系统按功能划分成模块。 确定每个模块的功能。 确定模块之间的调用关系。 确定模块之间的接口,即模块之间传递的信息。 评价模块结构的质量.,2.数据结构设计: 采用“逐步细化”的方法,如采用数据字典描述逐步细化。设计有效的数据结构(如队列,线性表,链表等),大大简化软件模块处
2、理过程的设计。 3.数据库的设计: 概念设计;逻辑设计;物理设计,3.编写概要设计文档: 概要设计说明书。 数据库设计说明书:主要给出所使用的DBMS简介、数据库的概念模型、逻辑设计、结果。 用户手册:对需求分析阶段编写的用户手册进行补充。 修订测试计划,对测试策略、方法、步骤提出明确要求。 4.评审。,目 录,3.1 概要设计的任务 3.2 设计过程 3.3 设计原理 3.4 描绘软件结构图的图形工具 3.5 启发规则 3.6 面向数据流的设计方法,3.2 概要设计的过程,图a 将分析模型转换为软件设计,目 录,3.1 概要设计的任务 3.2 设计过程 3.3 设计原理 3.4 描绘软件结构
3、图的图形工具 3.5 启发规则 3.6 面向数据流的设计方法,3.3 设计原理,(一) 模块化 (二) 抽象与逐步求精 (三) 信息隐蔽 (四) 模块独立性,(一) 模块化,1.软件结构的定义 是软件模块之间关系的表示,它决定了整个系 统的结构,也确定了系统的质量。 2.软件结构的单元 模块(Module)程序对象有名字的集合,3.模块定义 是指具有相对独立性的,由数据说明、执行语句等程序对象构成的集合。程序中的每个模块都需要单独命名,通过名字可实现对指定模块的访问。在高级语言中,模块具体表现为函数、子程序、过程等。一个模块具有输入/输出(接口)、功能、内部数据和程序代码四个特征。 4.模块化
4、定义 是指将把软件系统划分为若干个模块的过程,每个模块完成一个特定的功能。划分模块对于解决大型复杂的问题是非常必要的,可以大大降低解决问题的难度。,降低软件复杂性的证明,令:C(X)表示问题 X 的复杂度函数; E(X)解决问题 X 所需工作量的复杂度函数; 假设:有问题 P1,P2 ; 其中:C(P1) C(P2);显然:E(P1) E(P2) 由经验可知: C(P1+P2) C(P1)+ C(P2) 于是:E(P1+P2) E(P1)+ E(P2),模块数量的确定,适当增加模块数目,减小设计复杂度,返回,(二)抽象,抽象是人类在解决复杂问题过程中使用的思维工具,即抽出事物本质的共同的特性而
5、暂不考虑它的细节 软件系统进行模块设计时,可有不同的抽象层次。 在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。 在较低的抽象层次上,则采用过程化的方法。 结构化程序中自顶向下、逐步求精的模块划分思想正是人类思维中运用抽象方法解决复杂问题的体现。此外,在程序设计中运用抽象的方法还能够提高代码的可重用性。,(三)、信息隐蔽,信息隐蔽:在设计和确定模块时,使得一个模块包含的信息对于不需要这些信息的其它模块来说是不能访问的 也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。 信息隐蔽的目的主要是为了提高模块的独立性,减少将一个模块中的错误扩散到其他
6、模块的机会。,(四) 模块独立性,定义 开发具有独立功能而且和其他模块之间没有过多的相 互作用的模块。 产生原因 模块化、抽象、信息隐藏和局部化概念的直接结果。 模块独立性的重要性 有效的模块化(即具有独立的模块)的软件比较容易 开发. 独立的模块比较容易测试和维护。 衡量标准 高内聚、低耦合,1.耦合性,是对软件系统结构中,各模块间相互联系紧密程度的一种度量。 设计目标:低耦合 分类 非直接耦合、数据耦合、控制耦合 特征耦合、公共环境耦合、内容耦合,无直接耦合,两个模块没有直接关系,模块独立性最强。 如下图;模块1和模块2、模块3和模块4直接属于无直接耦合,数据耦合,属松散耦合。一模块访问另
7、一模块时,通过数据参数交换输入、输出信息。,数据耦合 一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来传递交换输入、输出信息的(“传值”)。,main() int x, y; printf(x+y= %d,sum(x,y); /*主函数与sum函数之间即为数据耦合关系*/,特征耦合,两个模块通过传递数据结构加以联系,或都与一个数据结构有关系, 则称这两个模块间存在特征耦合。 当被调用的模块可以使用的数据多于它确实需要的数据时,导致数据访问可能失控,给计算机犯罪提供机会。 特征耦合示例,“住户情况”是一个数据结构,图中模块都与此数据结构有关。 “
8、计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合。,特征耦合示例:,解决特征耦合-修改为数据耦合,控制耦合,调用模块向被调用模块传递的信息控制了被调用模块的内部逻辑。,控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。 解决方法: 将被调用模块内的判定上移到调用模块中进行 被调用模块分解成若干单一功能模块,改控制耦合为数据耦合举例,公共环境耦合,公共环境耦合:一组模块引用同一个公用数据区。 公共数据区指: 全局数据结构 共享通讯区 内存公共覆盖区等 示例:模块A、B、C间存在 错综复杂的联系,公共环境耦合的缺点,软件可理
9、解性降低 诊断错误困难 软件可维护性差 软件可靠性差,内容耦合,模块间耦合强度,耦合强度依赖的因素,一模块对另一模块的引用 一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度,降低耦合度的设计原则,根据问题特点,选择合适的耦合类型 尽量使用数据耦合,少用控制耦合和特征耦合,限制公共耦合的范围,完全不用内容耦合。 降低模块接口的复杂性 减少每个模块的参数个数;尽量使用标准过程调用方式,少用直接引用的方式;传送的信息以标准、直接的方式提供。 把模块的通信信息放在缓冲区中,2.内聚性,指一个模块内部各个元素彼此结合的紧密程度的度量 若一个模块内各元素(语句之间、程序
10、段之间)联系的越紧密,则它的内聚性就越高 设计目标:高内聚 分类 低内聚:偶然内聚 逻辑内聚 时间内聚 中内聚:过程内聚 通信内聚 高内聚:顺序内聚 功能内聚,偶然内聚,模块内各组成成份在功能上是互不相关的。 示例:模块M中三个语句没有任何联系,逻辑内聚,逻辑内聚:把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。 示例:增强了耦合程度(控制耦合),不易修改,效率低。,时间内聚,模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。 示例: 初始化系统模块 系统结束模块 紧急故障处理模块等,过程内聚,模块内各处理成分相关,且必须以特定次序
11、执行。 示例:,通信内聚,指模块内所有处理元素都在同一个数据结构上操作 或指模块内各部分使用相同的输入数据,或产生相同的输出结果。 示例:,顺序内聚(信息内聚),模块完成多个功能,各功能都在同一数据结构上操作,每一功能有唯一入口。 示例:,功能内聚,模块仅包括为完成某个功能所必须的所有成分。 模块所有成分共同完成一个功能,缺一不可 内聚性最强,总结:耦合、内聚与模块独立性关系,耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。 但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。 设计要求:低耦合,高内聚,目 录,3.1 概要设计的任务 3.2 设计过程 3.3 设计
12、原理 3.4 描绘软件结构图的图形工具 3.5 启发规则 3.6 面向数据流的设计方法,3.4 描绘软件结构图的图形工具,(一)软件结构图 (二)层次图,基本符号 方框:模块,框内注明模块的名字或主要功能 箭头(或直线):模块的调用关系。 注意: 调用次序为上层调用下层; 同层按照数据传递关系确定; 一般从左到右执行,执行过程即按照数据流向进行。,(一)软件结构图,软件结构衡量指标,软件结构图的四类模块,结构图中模块的调用关系和接口,选择调用,循环调用,(二)层次图和HIPO图,描述软件的层次结构。 层次图中,一个方框代表一个模块,方 框间的连线表示调用关系。 (注意和描述数据结构的层次方框图
13、的区别) HIPO图=层次图+IPO图 层次图 + 输入 / 处理 /输出图 (H图) (IPO图) (Hierachy Input Process Output),1. 层次图(H图),带编号的层次图(H图),正文加工系统,输入 1.0,输出 2.0,编辑 3.0,加标题 4.0,存储 5.0,检索 6.0,编目录 7.0,添加 3.1,删除 3.2,插入 3.3,修改 3.4,合并 3.5,列表 3.6,2. HIPO图,H图中每一方框(模块)均有一张IPO图对应航线调度系统HIPO图举例 H图:,传统的IPO图举例,改进的IPO图格式,目 录,3.1 概要设计的任务 3.2 设计过程 3
14、.3 设计原理 3.4 描绘软件结构图的图形工具 3.5 启发规则 3.6 面向数据流的设计方法,3.5 启发规则,设计的优化启发式规则,1.改进软件结构提高模块独立性,完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。 目标: 模块的分解、合并力求降低耦合,提高内聚。,举例:请提高下列模块间的独立性,2.模块规模、大小应该适中,模块过大:可理解程度下降 模块过小:开销大于有效操作,系统接口复杂 在考虑模块的独立性同时,为了增加可理解性,模块的大小最好在50-150条
15、语句左右,可以用1-2页打印纸打印,便于人们阅读与研究。 将系统“分而治之”,降低了问题的复杂性 使软件结构清晰,易于测试和维护,3. 深度、宽度、扇入、扇出合理,目标:避免高扇出,争取高扇入 基本方法:增加中间层,如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。,举例:下列模块结构图是否合适,优化后的模块结构图,- 增加中间层降低扇出,4. 模块的作用域应在控制域之内,定义 控制域:结构方面的特点,包括模块及其所有下属模块。 作用域:判断所涉及到的模块,是从功能特点考虑。 原则: 当作用范围为控制范围的子集时,才能获得弱耦合;
16、判定模块和受其影响的模块应该尽量靠近。,举 例,练习:判断下列模块结构图是否合理?,图a.作用域在控制域之外 图b.作用域在控制域之内,正确实现 图c.理想的作用域和控制域,练习:如何消除下列模块结构图中的不合理,方案1:,方案2:,5.力争降低模块接口的复杂程度,模块接口应具备传递简单,易于对功能模块的理解 模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。 接口复杂或不一致(即看起来传递的数据之间没有联系),是紧联结或低聚合的征兆,应该重新分析这个模块的独立性。,6.设计单入口、单出口模块,防止模块间内容耦合的出现 这条启发式规则警告软件工程师不要使模块间出现内容耦合。当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。,7.模块功能应该可以预测,只要输入的数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全生产年终检测讲解
- 生物工程专业女生就业指南
- 德国机器人工程师就业前景
- 道路客运调度员岗前工作考核试卷含答案
- 主管护师职业发展规划路径
- 紫胶热滤工岗前技术知识考核试卷含答案
- 瓦斯泵工安全专项模拟考核试卷含答案
- 地震勘探工岗前实操操作考核试卷含答案
- 轧钢成品工岗位晋升测试考核试卷含答案
- 磁头制造工岗前实操能力考核试卷含答案
- 四川能投发展股份有限公司所属公司2026年员工公开招聘考试参考题库及答案详解
- 药品车间质量奖惩制度
- 沪教版(五四学制)2026年数学七年级下册期末测试卷(含答案解析)
- 三级安全教育切割作业测试试题附答案
- 老挝用工合同范本
- 检察院安全生产工作制度
- 2026云南昆明巫家坝建设发展有限责任公司校园招聘15人备考题库及答案详解(网校专用)
- 2026云南曲靖国金资本运营集团有限公司招聘3人笔试历年常考点试题专练附带答案详解
- 《小学数学教学设计》小学教育专业全套教学课件
- 2025-2026学年黑龙江省齐齐哈尔市建华区八年级(上)期末英语试卷(含答案)
- 冠心病诊疗指南(2025版)
评论
0/150
提交评论