软件工程实践教程 第2版 教学课件作者 刘冰第三章 系统设计

举报
资源描述
第第3章章 系统设系统设计计 本章要点本章要点:系统设计概述 系统设计 数据库设计 用户界面设计 基于Rational Rose2003的 UML建模第第3章章 系统设系统设计计 3.1 系统设计的目的和任务 3.2 系统总体设计 3.4 系统详细设计 3.5 经典例题讲解 3.6 应用Visio进行数据库建模 结构化设计的任务结构化设计的任务在设计阶段,我们将集中研究系统的软件实现问题,即在分析模型的基础上形成实现环境下的设计模型。一般情况下,它通常包括系统总体设计和系统详细设计(或对象设计)两个层次。系统设计的目标是划分子系统并使子系统之间是高内聚低耦合的,从而提高软件的可理解性和可维护性。在软件需求分析阶段,已经搞清楚了软件“做什么”的问题,并把这些需求通过规格说明书描述了出来,这也是目标系统的逻辑模型。进入了设计阶段,要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中。结构化设计的任务结构化设计的任务结构化设计方法把系统作为一系列数据流的转换,输入数据被转换为期望的输出值,通过模块化来完成自顶而下实现的文档化,作为一种评价标准在结构化设计中起指导性作用,并以数据流图为基础得到软件的模块结构。结构化设计方法尤其适用于变换型结构和事务型结构的目标系统,在结构化设计过程中从整个程序的结构出发,利用模块结构图,表述程序模块之间的关系。结构化设计工作内容和步骤结构化设计工作内容和步骤结构化总体设计结构化总体设计 系统总体设计是问题求解及建立解答的高级策略。系统总体设计的主要任务是将系统分解成易于管理的子系统,并构造系统的策略,诸如系统运行的软硬件平台、数据管理策略等,最终得到系统的体系结构设计模型。结构化总体设计的过程结构化总体设计的过程 1设想供选择的方案 2选取合理的方案 3推荐最佳方案 为每个合理的方案准备以下的资料:(1)系统流程图;(2)组成系统的物理元素清单;(3)成本/效益分析;(4)实现系统的进度计划。4功能分解 对系统流程图进一步细化,进行功能分解。5设计软件结构 6数据库的设计 7制订测试计划 8书写文档 9审查和复审总体布局总体布局系统的高层结构形式包括(1)系统分解(2)确定并发性(3)处理器及任务分配。(4)数据存储管理(5)全局资源的处理(6)选择软件控制机制(7)人机交互接口设计设计原则设计原则1模块化模块是数据说明、可执行语句等程序对象的集合,包含四种属性:(1)输入/输出一个模块的输入/输出都是指同一个调用者。(2)逻辑功能指模块能够做什么事,表达了模块把输入转换成输出的功能,可以是单纯的输入/输出功能。(3)运行程序指模块如何用程序实现其逻辑功能。(4)内部数据指属于模块自己的数据。设计原则设计原则2抽象 抽取事物最基本的特性和行为,忽略非基本的细节。采用分层次抽象的办法可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。3信息隐蔽信息隐蔽:采用封装技术,将程序模块的实现细节(过程或数据)隐藏起来,对于不需要这些信息的其它模块来说是不能访问的,使模块接口尽量简单。按照信息隐藏的原则,系统中的模块应设计成“黑箱”,模块外部只能使用模块接口说明给出的信息,如操作、数据类型等。设计原则设计原则4模块独立性 模块的耦合 模块的内聚5软件复用6一致性 整个软件系统(包括文档和程序)的各个模块均应使用一致的概念、符号和术语;程序内部接口应保持一致;软件与硬件接口应保持一致;系统规格说明与系统行为应保持一致;实现一致性需要良好的软件设计工具(如数据字典、数据库、文档自动生成与一致性检查工具等)、设计方法和编码风格的支持。总体设计的启发规则总体设计的启发规则 (1)改进软件结构,提高模块独立性设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全局数据的引用,并且降低接口的复杂程度。(2)模块规模应该适中经验表明,一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)。有人从心理学角度研究得知,当一个模块包含的语句数超过30以后,模块的可理解程度迅速下降。过大的模块往往是由于分解不充分引入的,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性。过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。对于过小的模块,特别是当只有一个模块调用它时,通常可以把它合并到上级模块中去。总体设计的启发规则总体设计的启发规则 (3)深度、宽度、扇出和扇入都应适当对于中等规模的程序,其深度约为10左右。如果深度过大,则应考虑结构中的某些模块是否过分简单了。一个模块直接控制的下层模块的个数称为该模块的扇出数。好的系统的平均扇出数通常是34,最多是59。扇出过大时可以适当增加中间层次的控制模块;扇出过小时可以把下级模块进一步分解成若干个子功能模块,或者合并到上级模块中去。当然这种分解或合并不能影响模块的独立性。(4)模块的作用域应该在控制域之内(5)力争降低模块接口的复杂程度总体设计的启发规则总体设计的启发规则 (6)设计单入口单出口的模块 这条启发式规则表明在设计软件结构时不要使模块间出现内容耦合。当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。(7)模块功能应该可以预测如果一个模块只完成一个单独的子功能,则呈现高内聚。但是,如果一个模块任意限制局部数据结构的大小,过分限制在控制流中可以做出的选择或者外部接口的模式,那么这种模块的功能就过分局限,使用范围也就过分狭窄了。在使用过程中将不可避免地需要修改功能过分局限的模块,以提高模块的灵活性,扩大它的使用范围;但是,在使用现场修改软件的代价是很高的。面向数据流的设计方法面向数据流的设计方法 变换流事物流变换分析 事务分析软件模块结构的改进 面向数据流方法的设计过程面向数据流方法的设计过程 变换流变换流 事物流事物流 变换型分析变换型分析 基本变换型问题数据流图及基本变换型问题数据流图及其结构图其结构图变换型问题结构图变换型问题结构图 工资计算系统的一级分解工资计算系统的一级分解完成二级分解后的工资计算系完成二级分解后的工资计算系统软件结构统软件结构 进行了边界划分的事务型数据进行了边界划分的事务型数据流图流图 事务型系统的上层软件结构事务型系统的上层软件结构 完整的事务型软件结构完整的事务型软件结构 混合型问题数据流图及其结构图混合型问题数据流图及其结构图 结构化总体设计的工具结构化总体设计的工具 1系统流程图 2HIPO图系统流程图的符号系统流程图的符号 系统流程图举例系统流程图举例 该系统由人工操作,分为三个部分:报名处理(处理报名、生成报名表、运动项目册)、成绩处理(成绩录入、分类、统计、计算)、成绩发布与奖励(发布所有运动员比赛成绩、给破纪录运动员以及成绩前三名颁奖)。根据运动会委员会的要求,建立计算机管理的运动会信息系统,分析员经过仔细研究,推荐了一个新的系统方案,该系统方案如图所示。在系统流程图的每一个部件上标注了名称,部件之间用信息流向线表示出信息流动的方向。运动会系统流程图运动会系统流程图 HIPOHIPO图图 HIPO(Hierarchy Plus Input/Processing/Output)图是美国IBM公司70年代发展起来的表示软件系统结构的工具。它既可以描述软件总的模块层次结构H图(层次图),又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况IPO图。HIPO图以模块分解的层次性以及模块内部输入、处理、输出三大基本部分为基础建立的。它是表示软件系统结构的工具。HIPO图以模块分解的层次性以及模块内部输入、处理、输出三大基本部分为基础建立的。H H图图IPOIPO表表模块结构设计模块结构设计 1模块化 模块是数据说明、可执行语句等程序对象的集合,包含四种属性:(1)输入/输出一个模块的输入/输出都是指同一个调用者。(2)逻辑功能指模块能够做什么事,表达了模块把输入转换成输出的功能,可以是单纯的输入/输出功能。(3)运行程序指模块如何用程序实现其逻辑功能。(4)内部数据指属于模块自己的数据。模块结构设计模块结构设计 模块化和软件成本的关系 模块结构设计模块结构设计 2模块独立性模块独立性模块独立性是软件系统中每个模块只涉及软件要求的具体子功能,与软件系统中其他的模块的接口是简单的。例如,如果一个模块只具有单一的功能,并且与其他的模块没有太多的联系,则称此模块具有模块独立性。模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。换句话说,这样设计软件结构,会使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。耦合性和内聚性是描述结构图中模块之间及内部的联系的两个定性指标,耦合性指的是模块和模块之间的联系,它描述模块之间的相对独立性;内聚性指的是在模块内部各部分之间的联系,它描述模块功能的相对强度。模块结构设计模块结构设计 模块的耦合模块的耦合 模块结构设计模块结构设计 (1)非直接耦合如果两个模块中的每一个都能独立地 工作而不需要另一个模块的存在,那么它们彼此完全独立,这表明模块间无任何连接,耦合程度最低。但是,在一个软件系统中不可能所有模块之间都没有任何连接,它们之间的联系完全通过对模块的控制和调用来实现。模块结构设计模块结构设计 (2)数据耦合如一个模块访问另一个模块,相互传递的信息以参数形式给出,并且传递的参数完全是数据元素,而不是控制元素,称这种关系为数据耦合。系统中至少必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。模块结构设计模块结构设计 (3)标记耦合假如两个模块都要使用同一个数据结构的一部分,不是采用全程公共数据区共享,而是通过模块接口界面传递数据结构的一部分,这种耦合叫标记耦合。模块结构设计模块结构设计 (4)控制耦合如果一个模块把控制数据传递到另一个模块,对其功能进行控制,即为控制耦合。控制信息可以看作是一个开关量,它传递了一个控制信息或状态的标志。控制信息不同于数据信息,数据信息一般通过处理过程处理被处理的数据,而控制信息则是控制处理过程中的某些参数。控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合往往是多余的,在把模块适当分解之后通常可以用数据耦合代替它。模块结构设计模块结构设计 (5)外部耦合模块受到程序的外部环境约束时,就出现较高程度的耦合。如输入、输出把一个模块耦合到指定的设备、格式以及通信协议上,这就是外部耦合。外部耦合是必要的,但在一个程序结构内应限制在少数模块中。模块结构设计模块结构设计 (6)公共环境耦合两个以上模块共用一个全局数据区时引起的耦合叫公共耦合。在一些高级语言中的公共数据是公共耦合。模块的公共耦合是因为两个或者两个以上模块共同引用了某一公共环境,耦合程度取决于这个公共环境接口的模块个数。在只有两个模块的情况下,公共耦合的耦合程度介于数据耦合和控制耦合之间。由于模块被公用数据结构束缚在一起,对个别模块的修改和再利用必然带来许多不方便。如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用这种耦合。公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。如果只有两个模块有公共环境,那么这种耦合有下述两种可能 模块结构设计模块结构设计 (6)公共环境耦合1)一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的一种比较松散的耦合形式。2)两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共环境耦合。模块结构设计模块结构设计 (7)内容耦合一个模块
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 高等教育 > 大学课件


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号