二级公共基础知识教程第3章下 |
|
www.nanhushi.com 佚名 不详 |
3.3 结构化设计方法 一、软件设计的基本概念 1、 软件设计的基础 软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。 软件设计的重要性和地位概括为以下几点: ① 软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件开发中形成质量的关键五一节; ② 软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的惟一途径; ③ 软件设计作出的决策,最终影响软件实现的成败; ④ 设计是软件工程和软件维护的基础。 从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。其中,结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。 从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。 软件设计的一般过程是:软件设计是一个迭代的过程;先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。 2、 软件设计的基本原理 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。 (1)抽象 抽象是一种思维工具,就是把事物本质的共同特性提取出来而不考虑其他细节。软件设计中考虑模块化解决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步聊低。在软件概要设计中的模块分层也是由抽象到具体逐步分析和构造出来的。 (2)模块化 模块化是指把一个待开发的软件分解成若干个小的简单的部分。如高级语言中的过程、函数、子程序等。每个模块可以完成一个特定的子功能,各个模块可以按一定的方法组装起来成为一个整体,从而实现整个系统的功能 .模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。 为了解决复杂的问题,在软件设计中必须把整个问题进行分解来降低复杂性,这样就可以减少开发工作量并降低开发成本和提高软件生产率。但是划分模块并不是越多越好,因为这会增加模块之间接口的工作量,所以划分模块层次和数量应该避免过多或过少。 (3)信息隐蔽 信息隐蔽是指,在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。 (4)模块独立性 模块独立性是指,每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。是评价设计好坏的重要度量标准。衡量软件的模块独立性作用耦合性和内聚性两个定性的度量标准 ○1内聚性:内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。内聚是从功能角度来度量模块内的联系。 内聚有如下的种类,它们之间的内聚性由弱到强排列为: 偶然内聚 逻辑内聚 时间内聚 过程 通信内聚 顺序内聚 功能内聚 内聚性是信息隐蔽和局部化概念的自然扩展。一个模块的内聚性越强则该模块的模块独立性越强。作为软件结构设计的设计原则,要求生一个模块的内部都具有很强的内聚性,它的各个组成部分彼此都密切相关。 ○2耦合性:耦合性是模块间互相连接的紧密程度的度量。 耦合性取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。耦合可以分为下列几种,它们之间的耦合度由高到低排列为: 内容耦合:如一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。 公共耦合:若一组模块都有访问同一全局数据结构,则它之间的耦合称之为公共耦合。 外部耦合:一组模块都访问同一全局简单变量(而不是同一全局数据结构),且不通过参数表传递该全局变量的信息,则称为外部耦合。 控制耦合:若一模块明显地把开头量、名字等信息送入另一模块,控制另一模块的功能,则为控制耦合。 标记耦合:若两个以上的模块都需要其余某一数据结构子结构时,不使用其余全局变量的方式而是用记录传递的方式,即两模块间通过数据结构变换信息,这样的耦合称为标记耦合。 数据耦合:若一个模块访问另一个模块,被访问模块的输入和输出都数据项参数,即两模块间通过数据参数交换信息,则这两个模块为数据耦合。 非直接耦合:若两个模块没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,则称这两个模块为非直接耦合。非直接耦合独立性最强。
耦合性越强,独立性越弱,希望模块之间的耦合表现为非直接耦合方式。但是,由于问题所固有的复杂性和结构化设计的原则,非直接耦合往往是不存在的。 耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有得提高模块的独立性。 3、 结构设计方法 与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各成分之间的内部联系的技术。也就是说,结构设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具体有清楚定义的问题。 结构化设计方法的基本思想是将软件设计成由相对独立、单一功能的模块组成的结构。 二、 概要设计 1、 概要设计的任务 软件概要设计的基本任务是: (1) 设计软件系统结构 在需求分析阶段,已经把系统分解成层次结构,而在概要设计阶段,需要过去时一步分解,划分为模块以及模块的层次结构。划分的具体过程是: ① 采用某种设计方法,将一个复杂的系统按功能划分成模块。 ② 确定每个模块的功能。 ③ 确定模块之间的调用关系。 ④ 确定模块之间的接口,即模块之间传递的信息。 ⑤ 评价模块结构的质量。 (2) 数据结构及数据库设计 数据设计是实现需求定义和规格说明过程中提出的数据对象的逻辑表示。数据设计的具体任务是:确定输入、输出文件的详细数据结构;结合算法设计,确定算法所必需的逻辑数据结构及其操作;确定对逻辑数据结构所必须的那些操作的程序模块,限制和确定各个数据设计决策的影响范围;需要与操作系统或调试程序接口所必需的控制表进行数据交换时,确定其详细的数据结构和使用规则;数据的保护性设计:防卫性、一致性、冗余性设计。 数据设计中应注意掌握以下设计原则: ① 用于功能和行为的系统分析原则也应用于数据。 ② 应该标识所有的数据结构以及其上的操作。 ③ 应当建立数据字典,并用于数据设计和程序设计。 ④ 低层的设计决策应该推迟到设计过程的后期。 ⑤ 只有那些需要直接使用数据结构、内部数据的模块才能看该数据的表示。 ⑥ 应该开发一个由有用的数据结构和应用于其上的操作组成的库。 ⑦ 软件设计和程序设计语言应该支持抽象数据类型的规格说明和实现。 (3) 编定概要设计文档。在概要设计阶段,需要编写的文档有,概要设计说明书、数据库设计说明书、集成测试计划等。 (4) 概要设计文档评审。在概要设计中,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性、各部分之间的一致性等都要进行评审,以免在以后的设计中出现大的问题而返工。 常用的软件结构设计工具是结构图(SC——Structure Chart),也称程序结构图。使用结构图描述软件系统的层次和分块结构关系,它反映了整个系统的功能实现以及模块与模块之间的联系与通讯,是未来程序中的控制层次体系。 结构图是描述软件结构的图形工具。] 模块用一个矩形表示,矩形内注明模块的功能和名字;箭头表示模块间的调用关系。在结构图中还可以用带注释的箭头表示模块调用过程中来回传递的信息。如果希望进一步标明传递的信息是数据还是控制信息则可用带实心圆的箭头表示传递的是控制信息,用带空心圆的箭头表示传递的是数据。 根据结构化设计思想,结构图构成的基本形式 基本形式 顺序形式 重复形式 选择形式 程序结构图的有关术语 深度:表示控制的层数 上级模块、从属模块:上、下两层模块A和B,且有A调用B,则A是上级模块,B是从属模块。 宽度:整体控跨度(最大模块数的层)的表示。 扇入:调用一个给定模块的模块个数。 扇出:一个模块直接调用的其他模块数。 原子模块:树中位于叶子结点的模块。 传入模块:从下属模块取得数据,经处理再将其传送给上级模块。 传出模块:从上级模块取得数据,经处理再将其传送给下必模块。 变换模块:从上级模块取得数据,进行特定的处理,转换成其他形式,再传送给上级模块。 协调模块:对所有下属模块进行协调和管理的模块
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: 二级共公基础知识教程第3章中 下一篇文章: 二级共公基础知识教程课后习题 |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|