第六章 结构化开发
1.系统设计的基本原理
1.抽象:用来将复杂的现象简化到可以分析、实验或可理解程度
2.模块化:指将一个待开发的软件分解成若干个小的简单部分--模块,每个模块可独立地开发、测试,最后组装成完整的程序(分而治之),模块大小适中。
3.信息隐蔽原则:定义模块时尽量少的显露其内部的处理,对提高软件的可修改性、可测试性、可移植性有重要作用。
4.模块独立:每个模块相对独立且联系简单,衡量模块独立程度有两个标准:耦合性和内聚性(低耦合高内聚)
耦合:模块之间相对独立、互相连接的紧密程度
耦合取决于:各模块之间接口的复杂程度、调用模块的方式以及接口信息类型等
耦合 | 具体含义 | 耦合性(耦合性越低模块独立性越高) |
---|---|---|
无直接耦合 | 两个模块之间无直接关系 | 低 |
数据耦合 | 两个模块之间有调用关系,传递简单的数据值,相当于值传递 | 1 |
标记耦合 | 两个模块之间传递数据结构 | 2 |
控制耦合 | 当一个模块调用另一个模块时,传递的是控制变量,被调用的模块通过该控制变量的值有选择的执行模块中的某一功能 | 3 |
外部耦合 | 两个模块之间通过软件之外的环境连接 | 4 |
公共耦合 | 两个模块之间通过公共数据环境连接 | 5 |
内容耦合 | 当一个模块直接使用另一个模块的内部数据或通过非正式入口转入另一个模块内部 | 高 |
内聚:模块内各个元素彼此结合的紧密程度
内聚 | 具体含义 | 内聚性 |
---|---|---|
偶然内聚(巧合内聚) | 模块内的各元素之间没有任何联系,不易修改和维护、不易理解、影响模块间的耦合 | 低 |
逻辑内聚 | 模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能 | |
时间内聚 | 把需要同时执行的动作组合在一起形成的模块叫时间内聚模块 | |
过程内聚 | 模块内完成多个任何,这些任务必须按照指定过程执行 | |
通信内聚(信息内聚) | 模块内所有元素都在同一个数据结构上操作,或各元素使用相同的输入数据或产生相同的输出数据 | |
顺序内聚 | 模块内的各个元素都密切相关于同一个功能且必须顺序执行,前一个元素的输出就是下一个元素的输入 | |
功能内聚 | 模块内的所有元素共同作用完成一个功能,缺一不可 | 高 |
2.系统结构设计原则
设计原则 | 具体 |
---|---|
分解-协调原则 | 解决复杂问题的重要原则就是把它分解成多个小问题分别处理,在处理过程中根据系统总体协调各部门的关系 |
自顶向下原则 | 先确定上层模块再确定下层模块 |
信息隐蔽、抽象的原则 | 上层模块只规定下层模块做什么和所属模块间的协调作用不规定怎么做,保证模块的相对独立性和内部结构的合理性,使得模块与模块之间层次分明、易于理解、实施和维护 |
一致性原则 | 保证整个软件设计过程中有统一的规范和标准以及文件模式等 |
明确性原则 | 每个模块必须功能明确、接口明确,消除多重功能和无用接口 |
高内聚低耦合 | 模块之间的耦合尽可能小,内聚尽可能高 |
模块的扇入扇出系数要合理 | 一个模块调用其他模块的个数为扇出系数;一个模块被调用,调用它的个数叫扇入系数。应该尽量减少高扇出结构(3-4合理,>7就不行) |
模块的规模要适当 | 不能太小或太大,太小可能降低模块独立性,造成接口复杂 |
模块的作用范围 | 模块的作用范围应该在其控制范围之内 |
3.系统文档
对文档在系统开发人员、项目管理人员、系统维护人员、系统评价人员以及用户之间的多种作用总结如下:
1.用户与系统分析人员在系统规划阶段和系统分析阶段通过 可行性研究报告、总体规划报告、项目开发计划(系统开发合同和系统方案说明书)进行沟通。
2.系统开发人员与项目管理人员在项目期内通过 系统开发计划(工作任务分解表、PERT图、甘特图、预算分配图)、系统开发月报以及系统开发总结报告 进行沟通。
3.系统测试人员和系统开发人员通过 系统方案说明书、系统开发合同、系统测试说明书、测试计划 进行沟通。系统测试人员再撰写系统测试报告。
4.系统开发人员与用户在系统运行期间通过 用户手册、操作指南 进行沟通。
5.系统开发人员与系统维护人员通过 系统设计说明书、系统总结报告 进行沟通。
6.用户与系统维护人员通过 系统运行报告、维护修改建议 进行沟通。
4.结构化方法(面向数据流的开发方法)
结构化方法的指导思想:自顶向下、逐层分解
基本原则:功能的分解和抽象
是最早出现的开发方法,特别适合于数据处理领域的问题但不适用于解决大规模特别复杂的且难以适应需求变化的项目。
它是以数据流为中心构建软件的分析模型和设计模型,结构化方法的分析结构由一套分层数据流图、一本数据字典、一组小说明(加工逻辑说明)、补充材料 构成。
4.1数据流图(DFD)
1.数据流图中的基本图形元素包括:数据流、加工、数据存储和外部实体。
数据流图中的基本元素 | 具体描述 | 例子(都需要从题目中寻找) |
---|---|---|
数据流 | 表示数据的流向。它可以从一个加工流向另一个加工;从加工流向数据存储(写);从数据存储流向加工(读);从外部实体流向加工(输入);从加工流向外部实体(输出)。 | 数据流的起点或终点必须有一个是加工 |
加工(P1、P2.....) | 输入数据流经过什么处理后变成了输出数据流,一个加工可以有多个输入数据流和输出数据流,但至少有一个输入和输出。有输入没有输出叫黑洞,输入不足以产生输出叫灰洞,没输入有输出叫奇迹。 | 1111 |
数据存储(D1、D2.....) | 数据存储用来存储数据,数据流流入数据存储叫写,数据流从数据存储流出叫读,其实就是存储加工的输出数据和提供加工的输入数据。 | 客户表、订单表、维修记录文件、课表文件、信息表、xxx清单、xxx记录、xxx库...... |
外部实体(E1、E2.....) | 指存在于软件系统之外的人员或组织,它指系统所需数据的发源地(源)和系统所产生的数据的归宿地。(宿) | 当前系统之外的人、物、系统,如:学生、老师、医生、传感器、控制器、车辆、支付系统、库存管理系统.... |
顶层数据流图(父图)一般包含:外部实体和数据流以及系统名称。数据流图必须保持父图和子图平衡还必须保持数据守恒,数据流图用来建立系统的逻辑模型完成分析工作,数据流图作为结构化分析模型接口设计的依据。数据流图建模应遵循自顶向下,从抽象到具体。
数据流一般情况下包括变换型数据流和事物型数据流,不同类型的数据流到程序模块的映射方法不同,一个软件系统往往不仅仅有一种数据流类型。
加工是数据流的一个重要要素,可以用流程图、NS盒图、决策树、决策表描述,其中决策树、决策表适用于表示加工中涉及多个逻辑条件的情况。
4.2数据字典(DD)
1.数据字典是为数据流图中的每个数据流、文件、加工以及组成数据流或文件的数据项做出的说明,其中对加工的描述称为“小说明”或“加工逻辑说明”。
2.数据字典包括4类条目:数据流条目、数据项条目、数据存储条目、基本加工条目。其中数据项是组成数据流和数据存储的最小元素。源点、终点(外部实体)不在系统中所以一般不在字典中说明。
3,常见加工逻辑的描述方法:结构化语言、判定表(决策表)、判定树(决策树),其中结构化语言包括内层和外层,外层用来描述控制结构采用顺序、选择、重复3种。
5.子系统结构设计
子系统结构设计必须考虑以下问题:每个子系统如何划分为多个模块;如何确定子系统间、模块间传送的数据及调用关系;如何评价并改进模块结构的质量;从数据流图导出模块结构图
6.结构化设计
结构化设计主要包括:体系结构设计、数据设计、接口设计、过程设计
结构化设计 | 具体描述 |
---|---|
体系结构设计 | 定义软件的主要结构元素及其关系 |
数据设计 | 基于实体联系图(E-R图)确定软件涉及的文件系统的结构及数据库的表结构 |
接口设计 | 描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口 |
过程设计 | 确定软件各个组成部分内的算法和内部数据结构,并选定某种过程的表达形式来描述各种算法 |
接口设计主要依据:数据流图
7.知识点
1.需求分析阶段的输出包括数据流图、实体联系图(E-R图)、状态迁移图、数据字典
2.结构图的基本成分包括:模块、调用、数据
3.页面设计的3条“黄金原则”:用户操纵控制、减少用户的记忆负担、保持界面一致
4.构造分层DFD时要注意的问题:适当命名、画数据流而不是控制流、避免一个加工有过多数据流、分解尽可能均匀、先考虑确定状态忽略琐碎细节、