250 likes | 546 Views
第 17 讲 结构化软件设计概念. 主要内容. 一、什么是结构化设计? 二、结构化设计的任务 三、结构化设计的相关概念 四、软件设计的原则 五、影响软件设计的因素. 引言 — 设计人员把分析的结果 设计图纸 程序员拿着设计图纸编写代码. 设计图纸 - 软件结构图. 概要设计. 详细设计. 模块 4 设计. 需求规格说明书. 需求分析成果. 一、什么是结构化设计?. 结构化设计: 依据结构化分析获得的数据流程图、数据字典、 IPO 图, 通过一系列映射,把数据流程图变换为软件结构图; 遵循自顶向下、逐步细化的原则
E N D
主要内容 一、什么是结构化设计? 二、结构化设计的任务 三、结构化设计的相关概念 四、软件设计的原则 五、影响软件设计的因素 2
引言—设计人员把分析的结果设计图纸程序员拿着设计图纸编写代码引言—设计人员把分析的结果设计图纸程序员拿着设计图纸编写代码 设计图纸-软件结构图 概要设计 详细设计 模块4设计 需求规格说明书 需求分析成果 3
一、什么是结构化设计? • 结构化设计: • 依据结构化分析获得的数据流程图、数据字典、IPO图,通过一系列映射,把数据流程图变换为软件结构图; • 遵循自顶向下、逐步细化的原则 • 使软件由一系列相对独立、功能单一的模块构成。 注意:结构化方法也叫做 • 面向数据流的设计 • 面向过程的设计 4
二、结构化设计的4个任务 • 任务一:概要设计任务: • 把系统的功能需求分配给软件结构,形成软件的模块结构图,确定模块间调用关系; • 设计数据结构; • 任务二:详细设计 • 确定模块的算法; • 任务三:编写软件设计文档; • 任务四:设计评审--实现需求分析中确定的功能、性能的需求,设计方案的可行性等。 5
三、软件设计的相关概念 1、模块:一般把用一个名字调用的一段程序称为“模块”。具有三个属性: • 功能:指该模块要完成的任务; • 逻辑:模块内部执行过程; • 状态:使用该模块时的环境和条件。 注意:结构化设计是自顶向下对功能的分解,追求的是每个模块实现一个功能。 6
模块和模块化(续) 2、模块化:把整个系统划分成若干个模块,每个模块完成一个子功能,将多个模块组织起来实现整个系统的功能。 注意: • 结构化设计强调清晰地定义每个模块的功能和其输入/输出参数; • 实现细节隐藏在模块内部; • 与其它模块之间的可以是直接调用关系、间接调用、无关系。 优点:易于实现和维护。 7
3、独立性:软件设计中应该保持模块的独立性原则,反映模块独立性的有两个标准:3、独立性:软件设计中应该保持模块的独立性原则,反映模块独立性的有两个标准: • 内聚:衡量一个模块内部各个元素间彼此关系的紧密程度。 • 耦合:衡量模块间彼此依赖的程度。 8
高耦合 低耦合 无耦合 • 模块间相互关联的程度取决于下面几点: • 一个模块对另一个模块的访问,比如模块A可能要调用模块B来完成一个功能; • 模块间传递的数据量; • 模块间接口的复杂程度。 9
7种耦合的独立性 10
内聚:衡量一个模块内部各个元素间彼此关系的紧密程度内聚:衡量一个模块内部各个元素间彼此关系的紧密程度 7种内聚的独立性 11
4、抽象化 • 抽象: • 所谓抽象就是将事务的相似方面集中和概括起来,暂时忽略它们之间的差异; • 或者说抽出事务的本质特性而暂时不考虑它们的细节。 • 软件模块的设计中运用抽象: • 在最高抽象层次上,用自然语言,配合面向问题的专业术语,概括地描述问题的解法; • 在中间抽象层次上,采用过程化的描述方法; • 在最底层,使用能够直接实现的方式来描述问题的解。 12
不同人员关心不同抽象层次上的内容: • 用户可能只关心较高抽象层次上的系统描述,它反映了系统的主要功能,并且使用自然语言进行描述;以用户易于理解为主。 • 设计人员更既关心系统描述,又关心实现系统的元素布局;因此用模型语言规范地描述系统的用户需求和对开发人员的实现要求。 • 实现人员最关心具体实现,用编程语言描述处理过程。 13
5、信息隐藏 • 核心思想: • 一个模块中所包含的信息,不允许其他不需要这些信息的模块访问。 • 信息隐蔽对模块的过程细节和局部数据结构进行了屏蔽。 • 在设计模块时采取信息隐藏,使得大多数处理细节对软件的其他部分是隐蔽的。在将来修改软件时偶然引入错误所造成的影响就可以局限在一个或几个模块内部,不至于波及到软件其他部分。 14
6、软件结构图 • Yourdon提出软件结构图用于表示软件的结构。 • 方框代表模块 • 框内注明模块的名称,反映主要功能 • 方框之间的箭头线表示模块间的调用关系 • 短箭头线,标注模块之间传递的数据和控制信息。 15
两个辅助符号: • 符号◆表示一个模块有条件地调用另一个模块 • 箭头曲线,表示模块循环调用其下属模块。 图中模块A下加一个箭头曲线,表示控制模块A,循环调用模块B、模块C、模块D。 图中模块A下加一个菱形表示控制模块A,按条件选择调用模块B、模块C、模块D。 16
结构图的形态特征:上层模块调用下层模块,模块自上而下“主宰”,自下而上“从属”。同一层的模块之间并没有这种主从关系。结构图的形态特征:上层模块调用下层模块,模块自上而下“主宰”,自下而上“从属”。同一层的模块之间并没有这种主从关系。 17
结构图的深度:在多层次的结构图中,模块结构的层数称为该结构图的深度。结构图的深度:在多层次的结构图中,模块结构的层数称为该结构图的深度。 • 下面结构图的深度为7; • 结构图的深度在一定意义上反映了程序结构的规模和复杂程度。对于中等规模的程序,结构图的深度约为10左右。对于一个大型程序,深度可以有几十层。 • 结构图的宽度:结构图中模块数最多的那层的模块个数称为结构图的宽度。 • 下图的宽度为6; • 结构图的宽度一般反映了系统的功能点。 18
结构图说明(续) • 模块的扇入和扇出: • 扇出表示一个模块直接调用的其他模块数目。 • 扇入则定义为调用一个给定模块的模块个数。 • 多扇出意味着需要控制和协调许多下属模块。而多扇入的模块通常是公用模块。 • 注意:模块越多,接口的工作量将增加! 20
四、软件设计7条原则 • 1、设计可回溯到需求。软件设计中的每个元素都可以对应到需求,保证设计使用户需要的。 • 2、充分利用已有的模块。一个复杂的软件通常是由一系列模块组成,很多模块可能在以前的系统中已经开发过了,如果这些模块设计得好,具有良好的可复用性,那么在设计新软件时应该尽可能使用已有的模块。 • 3、软件模块之间应该遵循高内聚、低耦合和信息隐藏的设计原则。 • 4、设计应该表现出一致性和规范性。在设计开始之前,设计小组应该定义设计风格和设计规范,保证不同的设计人员设计出风格一致的软件。 21
5、容错性设计。不管多么完善的软件都可能有潜在的问题,所以设计人员应该为软件进行容错性设计,当软件遇到异常数据、事件或操作时,软件不至于彻底崩溃。5、容错性设计。不管多么完善的软件都可能有潜在的问题,所以设计人员应该为软件进行容错性设计,当软件遇到异常数据、事件或操作时,软件不至于彻底崩溃。 • 6、设计的粒度要适当。设计不是编码,即使在详细设计阶段,设计模型的抽象级别也比源代码要高,它涉及的是模块内部的实现算法和数据结构。因此,不要用具体的程序代码取代设计。 • 7、在设计时就要开始评估软件的质量。软件的质量属性需要在设计时考虑如何实现,不要等全部设计结束之后再考虑软件的质量。 22
五、影响设计的因素 • 由多人共同设计一个软件时的协调问题; • 设计人员的设计经验、理解力和喜好的差别; • 一致的设计规范约束; • 设计者的文化背景、信仰、价值观等其他方面的问题,这些都是影响软件设计的因素。 23
本讲重点 • 结构化设计分为概要设计和详细设计; • 结构化设计的核心:将数据流程图转化为软件模块结构图; • 软件设计根本原则:高内聚、低耦合; 24
同学们再见! 谢谢! 25