第7章系统设计_第1页
第7章系统设计_第2页
第7章系统设计_第3页
第7章系统设计_第4页
第7章系统设计_第5页
已阅读5页,还剩198页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章系统设计 7 1系统设计的任务要求7 2结构化设计的基本概念7 3从数据流图导出结构图7 4代码设计7 5输出设计7 6输入设计 7 7人机对话设计7 8计算机处理过程的设计7 9计算机系统的选择7 10系统设计说明书习题7 7 1系统设计的任务要求 系统分析阶段要回答的中心问题是系统 做什么 即明确系统的功能 这个阶段的成果是系统的逻辑模型 系统设计要回答的中心问题是系统 怎么做 即如何实现系统说明书规定的系统功能 这一阶段 要根据实际的技术条件 经济条件和社会条件 确定系统的实施方案 即确定系统的物理模型 根据一个逻辑模型 可以提出多个物理模型 我们怎样评价 选择这些物理模型呢 面向管理的信息系统 其优劣程度取决于它为管理工作提供信息服务的质量 具体讲 我们可以从以下六个方面来衡量 1 信息系统的功能这当然是最根本的一条 它包括系统是否解决了用户希望解决的问题 是否有较强的数据校验功能 能否进行所需要的运算 能否提供符合用户需要的信息输出等等 2 系统的效率这是与时间有关的指标 例如 联机处理系统的响应时间 即从发出要求到得到应答信号的时间 又如批处理系统的处理速度 即处理单个业务的平均时间等 在实时录入 成批处理的事务处理系统中 常用处理能力 标准时间内处理的业务个数 来表示系统的工作效率 影响系统效率的因素很多 包括系统的硬件及其组织结构 人机接口设计是否合理 计算机处理过程的设计质量等等 这里强调的是整个系统的效率 而不是某一部分的效率 例如 商场的收款系统 衡量其效率的标准是顾客等待时间的长短 它包括人的操作时间和计算机的运算时间 一般来讲 计算机的运算时间比人操作的时间要少得多 因此 人机界面设计是否便于操作 操作人员是否熟练 是这类系统至关重要的因素 3 系统的可靠性系统的可靠性 指系统在运行过程中抵御各种干扰 保证系统正常工作的能力 它包括检查错误 纠正错误的能力及系统一旦发生故障后重新恢复 重新启动的能力 系统在运行过程中难免会遇到各种干扰 这些干扰有人为的 如病毒 无意的错误操作等 有自然的 如地震 火灾 突然停电等 提高系统的可靠性也有种种途径 例如可以选择可靠性较高的设备 采用硬件结构冗余设计 如双机结构 设置故障检测 恢复处理及各种安全措施等 4 系统的工作质量系统的工作质量指系统提供的信息的准确程度 使用的方便性 输出表格的实用性和清晰性等 很明显 系统的工作质量直接影响系统的使用效果 因此 必须引起注意 同样 这里讲的工作质量是整个系统的工作质量 而不是某个部分的质量 管理信息系统是一个人机系统 除了程序正确之外 还要保证输入计算机的数据是正确无误的 即使输入是正确的 计算结果显示在屏幕上也是正确的 但人还可能看错 如把 3 看成 8 这就要求设计人员在各个环节 如输入设计 输出设计 代码设计 人机接口设计等环节都要精心设计 设计时既要考虑应用的要求 还要考虑使用者的能力与心理的反应 5 系统的可变更性系统的可变更性是指修改和维护系统的难易程度 系统实施过程中 需要测试 修改 系统交付使用之后 也会发现某些错误或不足之处 另外 随着系统环境的变化 用户会对系统提出某些新的要求 因此 系统的修改是否方便直接关系到系统生存期的长短 一个可变更性好的系统 维护相对容易 生命周期就长 6 系统的经济性系统的经济性是指系统收益与支出之比 这是确定设计方案的一个重要因素 系统的效率 服务质量 可靠性 可变更性 经济性等指标是相互联系又彼此制约的 在一定程度上是相互矛盾的 例如 为了提高系统的可靠性 就要采取一些校验和控制措施 系统的效率就要受到一定的影响 但从另一个角度看 由于系统可靠性的提高 抗干扰能力强了 系统能不间断运行 中断时间的减少又提高了系统的效率 某些系统对可靠性要求很高 需要选取可靠性高的设备 甚至采用双机结构 这样系统成本要大幅度增加 经济性下降 再如 为了增强系统的可变更性 采用模块化结构 系统的效率也会有所降低 这种彼此制约的关系说明 在系统设计时 应根据系统的具体情况有所侧重 对于可靠性要求高的系统 如涉及财务及某些高度机密的信息 首先要保证系统可靠 不惜增加成本 在一定程度上可降低效率 对于实时性要求高的系统 如飞机订票系统 首先保证效率 不妨增加一些存储空间的开销 但是 从系统开发的角度看 系统的可变更性是首先应考虑的因素 这是因为 无论对系统研制过程还是今后的运行 它都有直接的影响 据统计 在系统的整体生命周期中 各种经费开销所占比例如下 研制占20 其中 分析与设计35 编写程序15 调试50 维护占80 这里的维护包括排除开发阶段的错误 适应环境变化增加新的功能等工作 由此可见 修改系统的经费开销占了整个经费的90 20 50 80 如果系统的可变更性好 就可以大大节约人力 财力 延长系统生命期 事实上 一个信息系统不管事先怎样精心设计 系统投入运行后 总会进行某些修改或补充 这可能是经过一段时间后 发现某些地方效率还可以提高 或者还要增加某些可靠性措施 或者还要增加某些新的功能 或者对工作质量提出新的要求等等 如果可变更性好 就比较容易满足这些要求 总而言之 可变更性好的系统 效率不高可以提高效率 质量不好可以改进质量 可靠性差可以加强可靠性 反之 可变更性差 修改不如重做 系统寿命自然就短 7 1 1系统设计的目标从上面的分析可以看出 系统设计必须从保证系统的变更性入手 设计出一个易于理解 容易维护的系统 为了分析具备什么特点的系统易于修改 必须先找出修改一个系统的困难来自何处 对系统的修改 往往是对某一个模块或某个子系统的细节作一些变动 或者对子系统的组合关系作某些变动 更常见的是修改某一局部的数据结构或执行语句 这种修改的本身并不困难 困难在于找出需要修改的地方和这一修改对其他部分的影响 我们知道 系统各个部分之间存在控制 调用 数据交换等种种联系 对某一局部的修改 可能直接或间接地影响到系统的其他部分 对A的修改波及B 而对B的修改又可以影响到C E 人们把这种影响形象地叫做 水波效应 因此对系统某一个局部的修改 必须十分小心地追踪这一修改所波及的各个部分 这是系统难于修改的主要原因 为了使系统容易修改和容易理解 需要注意以下几个问题 1 把系统划分为这样一些部分 其中每一部分的功能简单明确 内容简明易懂 易于修改 我们把这样的部分称为模块 2 系统分成模块的工作按层次进行 首先 把整个系统看成一个模块 然后按功能分解成若干个第一层模块 这些模块互相配合 共同完成整个系统的功能 按功能再分解第一层的各个模块 依次下去 直到每个模块都十分简单 3 每一个模块应尽可能独立 即应尽可能减少模块间的调用关系和数据交换关系 当然 系统中的模块不可能与其他模块没有联系 只是要求这种联系尽可能少 4 模块间的关系要阐明 这样 在修改时可以追踪和控制 总之 一个易于修改的系统应该由一些相对独立 功能单一的模块按照层次结构组成 这些模块之间不必要的联系都已去掉 而且它们的功能及相互关系都已阐明 这就是结构化设计的基本思想 7 1 2系统设计的内容系统设计阶段的任务是提出实施方案 该方案是这个阶段工作成果的体现 这个方案以书面的正式文件 系统设计说明书提出 它被批准后将成为系统实现阶段的工作依据 系统设计的基本任务大体上可以分为两个方面 1 总体设计 概要设计 总体设计把总任务分解成许多基本的 具体的任务 这些具体任务合理地组织起来构成总任务 总体设计的基本任务是 1 将系统划分成模块 2 决定每个模块的功能 3 决定模块的调用关系 4 决定模块的界面 即模块间信息的传递 总体设计是系统开发过程中关键的一步 系统的质量及一些整体特性基本上是由这一步决定的 系统越大 总体设计的影响越大 认为各个局部都很好 组合起来就一定好的想法是不实际的 我们知道 整体大于部分之和 2 详细设计详细设计为各个具体任务选择适当的技术手段和处理方法 它包括 1 代码设计 2 数据库设计 3 输入设计 4 输出设计 5 人机对话设计 6 处理过程设计 7 2结构化设计的基本概念 7 2 1模块模块 module 一词使用很广泛 通常是指用一个名字就可以调用的一段程序语句 可以将它理解为类似 子程序 的概念 例如PASCAL程序设计中的函数 过程 FORTRAN程序设计中的函数和子程序 图7 1模块的表示方法 模块具有输入和输出 逻辑功能 运行程序 内部数据程序代码四种属性 模块的输入 输出是模块与外部的信息交换 一个模块从它的调用者那里获得输入 把产生的结果再传递给调用者 模块的逻辑功能是指它能做什么事 它是如何把输入转换成输出的 输入 逻辑功能 输出构成一个模块的外部特性 内部数据和程序代码则是模块的内部特性 是看不见的 模块用程序代码完成它的逻辑功能 内部数据是仅供该模块本身引用的数据 在总体设计阶段 我们主要关心模块的外部特性 模块的内部属性是以后要解决的问题 模块用长方形表示 模块的名字写在长方形内 如图7 1所示 模块的名字由一个动词和一个作宾语的名词表示 模块的名字应恰如其分地表达这一个模块的功能 7 2 2结构图结构化设计采用结构图 structuredchart 描述系统的模块结构及模块间的联系 图7 2是结构图的一个例子 图7 2结构图示例 结构图中的主要成分有 1 模块 用长方形表示 2 调用 用从一个模块指向另一模块的箭头表示前一个模块调用后一个模块 箭尾的菱形表示有条件地调用 弧形箭头表示循环调用 3 数据 用带圆圈的小箭头表示从一个模块传递给另一个模块的数据 4 控制信息 用带小黑点的小箭头表示一个模块传送给另一个模块的控制信息 结构图的层数称为深度 一个层次上的模块总数称为宽度 深度和宽度反映了系统的大小和复杂程度 结构图是系统设计阶段最主要的表达和交流工具 这种图应当简明易懂 既要便于设计人员表达自己的设想 又要便于编写程序的人员了解实现要求 还要便于和管理人员商讨 模块结构图可以由数据流图转换而来 但是 结构图与数据流图有着本质的差别 数据流图着眼于数据流 反映系统的逻辑功能 即系统 做什么 结构图着眼于控制 反映系统的物理模型 即怎样逐步实现系统的总功能 从时间上来说 数据流图在前 控制结构图在后 数据流图是绘制结构图的依据 总体设计阶段的任务 就是要对数据流图规定的功能 设计一套实现办法 因此 绘制结构图的过程就是完成这个任务的过程 结构图也不同于程序框图 flowchart 后者说明程序的步骤 即先做什么 再做什么 结构图描述各模块的 责任 responsibility 如一个公司的组织机构图 就用来描述各个部门的隶属关系与职能 7 2 3模块间的联系结构化设计的基本思想 就是把系统设计成由相对独立 功能单一的模块组成的层次结构 为了衡量模块的相对独立性 提出了模块间的耦合 coupling 与模块的内聚 cohesion 这两个概念 它们从不同侧面反映了模块的独立性 耦合反映模块之间连接的紧密程度 而内聚指一个模块内各元素彼此结合的紧密程度 如果所有模块的内聚都很强 模块之间的耦合自然就低 模块的独立性就强 反之亦然 为了进一步说明这两个概念 我们先看一段小程序 Beginn 0 total 0 0 read value WHILEvalue 0 0DOBeginn n 1total total value readln value End average total n writeln n average End 我们用箭头表示各程序行之间的联系 这种联系往往是程序的某个部分 这里是程序行 引用其他地方定义的数据时产生的 即程序中几个地方都引用了存储器中的同一位置 在一个大的程序中 这种联系是非常多的 因此把一个系统分解成许多模块时 分法不同 模块间的联系程度就不同 我们希望模块内联系越紧越好 模块间联系越少越好 耦合 内聚这两个概念从不同的角度反映这种联系 7 2 4模块间的耦合耦合是影响系统复杂程度的一个重要因素 若为了理解模块A 需要对模块B有所了解 则A B之间就有联系 如果需要对B的理解越多 则A B的连接就越紧密 我们就说它们耦合越紧 若程序员要修改紧耦合中的一个模块 很可能不得不修改另一个模块 因此 模块间的耦合程度对系统的可维护性 可靠性有强烈的影响 影响模块间耦合程度的因素有三个 联系方式 模块间通过什么方式联系 图7 3影响耦合的因素 来往信息的作用 模块间来往信息作什么用 数量 模块间来往信息的多少 这三个因素可用三维坐标表示 如图7 3所示 离坐标原点越远 耦合程度越高 下面分别讨论 1 联系方式如图7 3所示 联系方式有两种 直接引用 和 用过程语句调用 直接引用是指一个模块直接存取另一个模块的某些信息 例如全程变量 FORTRAN的COMMON量 C语言的EXTERNAL量 或共享的通信区等 这种耦合也称为公共环境耦合 commonenvironmentcoupling 这种耦合的复杂性随耦合的模块个数的增加而显著上升 降低这种耦合程度的办法是局部化 也就是把一个公共区分成许多子区 使每个子区上耦合的模块数减少 如图7 4所示 图7 4用局部化方法降低耦合程度 用过程语句调用 是通过模块的名字调用整个模块 一个模块只有一个入口 所有数据往来都以参数形式显式出现 采用这种联接方式 模块间耦合程度比较低 当然 两个模块共享数据很多时 参数传递也不方便 2 往来信息的作用模块间的往来信息可以作数据用 也可以作控制信息用 若两个模块间传递的信息只作数据用 即一个模块提供的输出数据作另一个模块的输入数据 则这种耦合称为数据耦合 datacoupling 这种耦合当然是需要的 如果两个模块间传递的信息作控制用 这种耦合称为控制耦合 controcoupling 图7 5 a 中 模块A将参数 平均 最高 传递给模块B 模块B按这个参数的值是 平均 还是 最高 去取相应成绩回送到A 这里的参数 平均 最高 实际上是一个开关量 尽管它本身可能是数据形式 控制模块B如何工作 这就是控制耦合 图7 5控制耦合 控制耦合给理解和修改带来不便 第一 需要理解开关量 第二 模块 要设开关量 还要记住开关值是 平均 还是 最高 以便数据从模块 返回后作相应处理 其实 在系统设计中这种耦合是可以避免的 在这个例子中 只要将图7 5 a 改为图7 5 b 所示的形式就行了 图 b 中模块 根据需要调用模块B1或B2 3 往来信息的数量很明显 模块间传递的信息量越大 它们之间的耦合程度越高 因为正是这种传递关系造成了模块间的联系 一个模块只需了解它确实需要使用的数据 对其他数据的存在最好完全不知道 总之 结构化设计要求模块间的耦合程度尽可能小 为此应遵循以下原则 用过程语句调用其他模块 模块间的参数作数据用 模块间的参数尽可能少 在用高级语言编程序时 只要注意消除开关量 减少共用变量 就可以大大降低模块间的耦合程度 7 2 5模块的内聚模块的内聚反映模块内部联系的紧密程度 如果一个模块内部相关性很高 都是为了同一个功能 我们就说它的内聚程度高 模块的内聚可以分为七类 下面分别介绍 1 偶然内聚 coincidentacohesion 如图7 6所示 模块P Q R S都有某些共同的操作 为了节约空间 减少程序量 可把这些共同的操作抽出来 组成一个模块 实际上这些语句间没有什么联系 这种联系就是偶然型的 在计算机内存小的时代 人们强调缩短程序长度 往往会引起这种情况 这种偶然性内聚的模块不便于修改 例如 若模块 要将 B A 改为 E A 时 就不能直接改T 因为这一修改可能不适合其他模块 图7 6偶然内聚 2 逻辑内聚 logicacohesion 将几个逻辑上相似的功能放在一个模块中 模块内联系就是逻辑型内聚 如图7 5 a 中的模块 取平均成绩或最高成绩 就属这一类 它把 取平均成绩 和 取最高成绩 这两个相似的功能放在一起组成一个模块 这个模块的程序流程图如图7 7所示 它需要模块 传递一个开关量 根据开关量判定执行哪一个分支 这样做的优点是节约空间 缺点是修改困难 如果现在不仅要知道最高成绩是多少 而且还要打印出获得最高成绩的学生姓名 这一修改就很难适应 取平均成绩 的要求 图7 7逻辑内聚 3 时间内聚 temporacohesion 这是指与时间有关的联系 即把需要有限时间间隔内处理的成分放在同一模块内 例如一些初始化模块 这种模块的内聚程度比前两种稍高一些 但仍是一种低的内聚 4 步骤内聚 proceduracohesion 模块内的元素属于同一个公共步骤单元 则称该内聚为步骤内聚 图7 8 a 是程序SIMPRO的流程图 虚线框给出划分模块的一个方案 这样划分模块得到的结构图如图7 8 b 所示 模块PERP属时间内聚 模块PLANLOOP和TYPDECID都属于步骤内聚 前者的元素即主循环 后者的元素是主循环内的一个判定过程 图7 8步骤内聚 步骤内聚模块的内聚程度比时间内聚模块高 例如 PLANLOOP内各元素不仅满足时间内聚的条件 而且还有附加的步骤上的依赖关系 但步骤内聚的内聚程度仍不算高 往往导致模块间有相当紧的耦合 在SIMPRO程序中 生产情况模拟算法的处理元素同时出现在PLANLOOP和TYPDECID中 可以想象这两个模块会有较紧的耦合 当需要模拟修改时 可能需要同时研究这两个模块 5 通信内聚 communicationacohesion 通信内聚是指模块内的成分引用共同的数据 如图7 9中的两个模块都属于这一类 模块A的两个部分都是对 购货单 的处理 而模块B的两个部分都是对数据存储D的处理 根据数据流图容易判断一个模块是不是通信内聚 通信内聚的聚合程度已经算高了 找不到更高的内聚结构时 这种结构是完全可以接受的 图7 9通信内聚 6 顺序内聚 sequentiacohesion 顺序内聚是指模块中某个成分的输出是另一模块的输入 图7 10中的两个模块都属这一类 图7 10顺序内聚 与通信内聚相比 顺序内聚的内聚程度更高 因为不论从数据的角度还是从执行的顺序来看 模块内各成分的关系都更紧密 但是与功能内聚相比 通信内聚的内聚程度要低 如图7 11所示 若把ABCDE分割为ABCD E两个模块 或者ABC DE两个模块 又或者A BC DE三个模块 根据定义这些模块都是顺序内聚 但这样分割破坏了功能的完整性 若将它分割成AB CDE两个模块 才是最好的分割 这时每个模块包含一个完整的功能 图7 11功能内聚 7 功能内聚 functionacohesion 若一个模块包括并且仅包括完成一个具体任务所需要的所有成分 则这个模块是功能内聚的 这种模块的聚合程度是最高的 结构化设计的目标就是获得这种模块 判断一个模块是否为功能内聚的简单有效的办法是 从调用者的角度看 用一个短语简单明确地描述这个模块做什么 不是怎么做 分析这个短语判断这个模块是完成一个具体任务 还是多个任务 或者做一些彼此无关的杂事 如果是完成一个具体任务 则这个模块是功能内聚的 功能内聚模块的好处是界面清晰 容易理解 由于一个模块一个功能 因而复用性好 耦合和内聚的概念是Stevens等人提出的 按他们的观点 给上述七种内聚评分如下 功能内聚10分 顺序内聚9分 通信内聚7分 步骤内聚5分 时间内聚3分 逻辑内聚1分 偶然内聚0分 7 2 6作用范围与控制范围程序中的每个判断都会产生这样的结果 根据此判断的结果 某些处理执行了 而另外一些没有执行 也就是说 有些处理的执行受判断的影响 由此引出判断的作用范围 或称影响范围 这一概念 一个判断的作用范围是所有这样的模块的集合 这些模块内含有依赖于这个判断结果的处理 图7 12作用范围与控制范围 图7 12中 模块A有条件地调用模块B和C 说明在模块A中调用B C的语句受判断 是工人还是干部 结果的影响 因此 模块 属于这个判断的作用范围 当然 模块B C也属于这个判断的作用范围 一个模块的控制范围是指它本身及其所有下属模块的集合 这里所说的下属模块包括直接下属模块及下属模块的下属模块 图7 12中 模块 的控制范围是集合 A B C D 判断的作用范围和模块的控制范围 直接影响系统模块的复杂性和可修改性 结构化设计要求 对于任何一个判断 其作用范围应该是这个判断所在模块的控制范围的一个子集 换言之 所有受判断影响的模块应该从属于做出判断的那个模块 图7 12所示的情况满足这一要求 在这个例子中 是工人还是干部 这个判断可能在模块 或者在 的上级模块做出 但不论是哪种情况 从这个局部看 都满足结构化设计要求 若该判断就在模块 做出 则更理想 在这种情况下 判断的作用范围仅是做出判断的模块及其直接下属模块的集合 在图7 13中 用 标志判断所在的模块 灰色的模块表示它是判断的作用范围内的模块 图7 13 a 的情况是作用范围越出控制范围 这样模块 需把判断结果传给y y再传给A 判断结果是控制信息 这样便产生控制耦合 或者在模块 重新判断 这也有不便之处 修改判断时 两处都要修改 图7 13 b 作了改进 此时作用范围没越出控制范围 但判断点太高 同样造成控制耦合 图7 13 c 作了改善 图7 13 d 是最理想的情况 它将不在控制范围内但在作用范围内的模块 移到控制范围内 成为模块B的直接下属 图7 13判断的位置 7 2 7模块的扇入与扇出模块的扇出是指模块的直接下属模块的个数 如图7 14所示 图7 14中 模块平均的扇出数是2 一般认为 设计得好的系统平均扇出数是3或4 图7 14模块的扇出 一个模块的扇出数过大或过小都不理想 过大比过小更不好 一般认为扇出的上限不应超过7 扇出过大意味着管理模块过于复杂 需要控制和协调过多的下级 解决的办法是适当增加中间层次 一个模块的扇入是指调用它的上级模块的个数 扇入越大 表示该模块被越多的上级模块共享 这当然是我们所希望的 但是不能为了获得高扇入而不惜代价 例如把彼此无关的功能凑在一起构成一个模块 虽然扇入数高了 但这样的模块的内聚程度必然低 这是我们应避免的 设计得好的系统 上层模块有较高的扇出 下层模块有较高的扇入 其结构图像清真寺的塔 上尖 中间宽 下面小 7 2 8病人监护系统实例我们通过下面的实例 说明前面介绍的一些概念在总体设计中的应用 并说明系统设计中应注意的其他一些问题 实例 通过病床专用设备对病人进行监护 这些设备可以测量病人的若干指标 如体温 脉博 血压等等 每经过一定的时间间隔 监护系统从监护设备读入这些数据 并存入数据库中 医生为每个病人指定各种指标的安全范围 若发现某个指标超出安全范围 或某个监护部件有故障 则向护理站发出通报 指标超出安全范围时报告病人号 部件有故障时则报告床号 1 初始结构图根据上述要求 某个经验不足的设计员做出了该系统的初始结构图 如图7 15所示 图中 PN是病人号 FS是各指标数据 EOF是标志已查过最后一个病人 EF是标志设备故障 BN是床位号 SR是安全范围 FS2是标志指标是否合理 USF是标志指标不安全 各模块的功能如下 图7 15初始结构图 1 采集数据 模块 向主模块传送病人的有关数据 PN FS EOF EF 为此 它调用两个模块 判定下一个病人 和 读取数据 2 检查数据 模块 检查数据是否在合理范围内 是否在安全范围内 判定病人是否安全 它分别调用三个模块完成 3 处理数据 模块 把病人有关数据记入数据库中 若病人处于不安全范围则通知医护人员 若设备有故障则通知维修人员 它分别调用三个模块完成这些功能 2 结构图的改进初始结构图有很多需要改进的地方 1 通报不安全因素 可由主模块直接调用 主模块具备调用这一模块的参数 而且USF这个参数也只是调用这个模块时才使用 2 同理 写数据库 模块也可由主模块直接调用 3 经过 1 2 的改进后 处理数据 这一模块只调用 通报设备故障 这一个模块 事实上 处理数据 这一模块除了起 管道 作用 即把上层模块的信息传递给下层模块之外 没有什么实质性的工作 因而本身也可合并到主模块去 由主模块调用 通报设备故障 作了上述变动后 结构图的顶层与第一层如图7 16所示 图7 16消除 管道 模块 4 前面提到通报设备故障时应通报床位号而不应是病人号 床位号BN可由 采集数据 模块传给主模块 再由主模块传递给 通报设备故障 但这样做增加了模块间的联系 解决这个问题的另一个途径是由 采集数据 模块直接调用 通报设备故障 模块 同时 设备故障或测得的指标不合理 都应通知维修站 所以在通知维修站之前 还要调用 检查不合理范围 模块 这样 也简化了 检查数据 模块的界面 作了这些变动之后 结构图如图7 17所示 5 若使 读取数据 模块包括由病人号查床位号的功能 则 判定下一个病人 模块的界面可以简化 不用传递BN 床位号 考虑到 读取数据 模块的篇幅可能过大 可以抽出一个模块 由PN查BN 供它调用 这样 结构图的有关部分如图7 18所示 图7 17改进的结构图 1 在此之前 读取数据 模块是根据床位号读数据 作了这个改动之后 则是根据病人号读数据 因此 该模块的名字改为 采集病人数据 更好 在这个模块中 隐含一段根据床位号从监护设备读入相应因素的程序 这段程序对设备维修人员可能有用 他们关心的主要是设备情况 而不是某个病床上是否有人 这个病人是谁 因此 把这段程序抽出来单独成一个模块更好 名字为 从床号读数据 则图7 18改写为图7 19 图7 18简化模块界面 图7 19增加公用模块 6 若由 检查数据 模块直接调用 通报不安全因素 则可减少模块间的联系 不用传递USF 这时 检查数据 的名字改为 报告不安全因素 更为恰当 结构图的有关部份如图7 20所示 图7 20减少模块间的联系 7 从床号读数据 调用 通报设备故障 可能发生这种情况 在某设备维修期间 这个程序可能重复报告该设备故障 这令人生厌 若改由它的上级模块调用 会更灵活 这有典型意义 若一个模块检测错误后 一方面要报告错误信息 一方面又要向上层报告信息 这时由它的上层模块决定是否报告错误信息更灵活 更清楚 见图7 21 8 考虑到无论是通报设备故障 还是通报不安全因素 都要打印一些信息 因此可以再抽出一个 写一行 模块给护理站 供两个模块调用 考虑到 通报不安全因素 模块可能比较大 则抽出一个模块 生成一行不安全因素 经过上面这些改进后的结构图如图7 21所示 图7 21改进的结构图 2 在这个例子中 用到以下一些技巧 减少模块间的联系 其中用得最多的是减少传递的参数 尤其注意减少控制信息的传递 消除重复功能 消除 管道性 模块 考虑将来可能发生的变化 控制模块的大小 一般认为一个模块在50 100个语句为宜 过大的模块可按功能分解出下级模块 过小的模块可适当合并 尽可能从整个结构图出发考虑 初始结构图中不满足系统说明书的地方 在改进过程中完善 7 3从数据流图导出结构图 结构化系统设计方法与结构化系统分析有着密切的联系 在系统分析阶段 我们用结构化分析方法获得用DFD等工具描述的系统说明书 设计阶段 我们则以DFD为基础设计系统的模块结构 本节讨论如何从数据流图导出初始结构图 数据流图有两种典型的结构 变换型 transform 结构和事务型 transaction 结构 这两种结构可以分别通过变换分析和事务分析方法导出标准形式的结构图 这些方法都是先设计结构图的顶端主模块 然后自顶向下逐步细化 得到满足数据流图要求的系统结构 7 3 1变换分析变换结构是一种线性结构 它明显地分成逻辑输入 主加工和逻辑输出三部分 图7 22 a 是一个典型的例子 变换分析 transformanalysis 过程可以分为三步 图7 22变换分析 找出主加工 逻辑输入和逻辑输出部分 设计顶层模块和第一层模块 设计中 下层模块 下面分别讨论 1 找出系统的逻辑输入 主加工和逻辑输出部分如果设计人员经验丰富 又熟悉系统说明书 则容易确定系统的主加工部分 例如 几股数据流的汇合处往往就是系统的主加工部分 若一时不能确定哪是主加工部分 可以用下面的方法先确定哪些数据流是逻辑输入 哪些数据流是逻辑输出 从物理输入端开始 一步步向系统的中间移动 直至分析到这样一个数据流 它已不能再被看作系统的输入 则它的前一个数据流就是系统的逻辑输入 在图7 22 a 中 从 原始数据 这一数据流开始向中间移动 逐个分析数据流 发现数据流 P3 P4 不能再被理解为系统的输入了 因此 数据流 P2 P3 是逻辑输入 同理 从物理输出端开始 逆数据流方向向中间移动 可以确定系统的逻辑输出 介于逻辑输入 逻辑输出之间的加工就是主加工 图7 22 a 中的处理框P3就是主加工 当然 实际的数据流图往往比这个例子复杂 输入 输出数据流都可能有多个 这时 需要对每个输入 输出数据流逐个进行分析 确定相应的逻辑输入 逻辑输出 处于这些逻辑输入 逻辑输出之间的处理框就是主加工 主加工可能包括数据流图中的多个处理框 从上面的分析过程可以看出 逻辑输入 逻辑输出的划分涉及对数据流的理解 各人的理解不同 结果就有差异 但一般出入不会太大 2 设计顶层模块和第一层模块找到主加工之后 遵照 自顶向下 逐步加细 的原则 设计各层的模块 每创建一个模块必须确定该模块的外部特征 模块的功能及与其他模块的界面 调用时传送的信息 为每个模块起一个名字 这个名字应当恰如其分地反映出这个模块的功能 系统的主加工就是系统的顶层模块 其功能就是整个系统的功能 第一层模块按输入 变换 输出等分支来处理 为每一个逻辑输入设计一个输入模块 其功能是为顶层模块提供相应的数据 为每一个逻辑输出设计一个输出模块 它的功能是输出顶层模块的输出信息 为主加工设计一个变换模块 它的功能就是将逻辑输入变换成逻辑输出 第一层模块与顶层模块之间传送的数据应该同数据流图相对应 图7 22 a 有一个逻辑输入 一个逻辑输出 所以对应的结构图第一层模块共三个 即宽度为3 如图7 22 b 所示 3 设计中 下层模块对输入 变换 输出模块逐个分解 便可得到初始结构图 输入模块为系统提供逻辑输入 一般要进行变换 先确定实现最后变换的变换模块 这个变换模块显然又需要某些输入 对每个这样的输入 对应一个新的输入模块 用类似方法依次分解下去 直到最终的物理输入为止 对输出模块的分解与上面的方法相似 对变换模块的分解 目前还没有像上面那样的归纳出的方法 我们只能通过研究数据流图中相应加工的组成情况 应用7 2节介绍的耦合 内聚等概念 得到好的分解 与图7 22 a 相应的结构图如图7 22 b 所示 回顾一下7 2 8节 病人监护系统 这个例子 有助于我们理解这里介绍的方法 这个系统的数据流图如图7 23所示 图7 23病人监护系统数据流图 合理数据 可以看作是这个系统的逻辑输入 也是系统的逻辑输出 因此 这个系统没有主加工 由此设计出系统结构图的顶层模块和第一层模块 如图7 24所示 进一步分析便可得到如图7 21所示的结构图 由此可见由数据流图出发 采用变换分析的方法得到的结构图比采用直观理解的方法得到的结构图 图7 15 要好得多 图7 24病人监护系统结构图 7 3 2事务分析图7 25是事务型结构的例子 在这种结构中 某个加工将它的输入分离成一串平行的数据流 然后分别执行后面的某些加工 对于这种类型的数据流图 可以通过事务分析 transactionAnalysis 得到相应的结构图 事务分析也是按 自顶向下 逐步细化 的原则进行的 先设计主模块 其功能就是整个系统的功能 下面有一个 分析模块 和 调度模块 前者分析事务的类型 后者根据不同的类型调用相应的下层模块 这样得到与图7 25相应的结构图 如图7 26所示 这里作用范围可能在控制范围之外 从而产生控制耦合 对于不太复杂的系统 可以通过在主模块判别事务类型来解决这一问题 对于复杂的问题 还得分开设模块 图7 25事务型结构 图7 26事务分析 前面我们分别讨论了变换分析和事务分析 在实际应用中 这两种分析方法往往交替使用 数据流图的某一个局部可能是变换型 另一个局部可能是事务型 如此等等 这时 一般以变换分析为主 辅之以事务分析 各个系统有不同的特点 初始结构图的设计方法也不同 凡是满足系统说明书要求的结构图都可以作为初始结构图 这里称之为初始结构图 是因为数据流图并没有完全反映出用户的要求 如查询要求 控制流等 因此 按数据流图导出的结构图还要参照小说明 查询分析等文档进行调整 7 3 3数据流图层次的转换数据流图是分层次的 当我们对某一层数据流图进行变换分析或事务分析得出相应的模块结构图之后 还必须转换它下一层的数据流图 如图7 27所示 如果处理框P1 4对应模块M32 则P1 4进一步分解的处理框应转换成M32的下层模块 作为一个练习 建议读者根据上一章给出的 学习成绩管理 的数据流图 画出对应的初始结构图 并根据这两节的内容 优化你的初始结构图 图7 27数据流图的层次与模块结构 7 4代码设计 7 4 1代码的作用代码是用来表征客观事物的一个或一组有序的符号 它应易于计算机和人识别与处理 代码也简称为 码 编码就是用数字或字母代表事物 编码的历史可以追溯到古代 从古代常用来传递信息的烟信号直到现代的电传打字机 没有代码是难以想象的 这个问题过去不太受重视 今天却成了信息技术的中心问题之一 成为现代化管理的重要基础 通过编码 建立统一的经济信息语言 有利于提高通用化水平 使资源共享 达到统一化 有利于采用集中化措施以节约人力 加快处理速度 有利于检索方法的统一 下面具体介绍代码的功能 1 鉴别功能这是代码最基本的特性 任何代码都必须具备这种基本特性 在一个信息分类编码标准中 一个代码只能惟一地标识一个分类对象 而一个分类对象只能有一个惟一的代码 2 分类当按分类对象的属性 如工艺 材料 用途等 分类 并分别赋予不同的类别代码时 代码又可以作为分类对象类别的标识 这是利用计算机进行分类统计的基础 3 排序当按分类对象产生的时间 所占空间或其他方面的顺序关系分类 并赋予不同的代码时 代码又可以作为区别分类对象排序的标识 4 专用含义当客观需要采用一些专用符号时 代码可提供一定的专门含义 如数学运算的程序 分类对象的技术参数 性能指标等 7 4 2代码的种类代码的种类如图7 28所示 图中列出了最基本的代码 实际应用中 常常根据需要采用两种或两种以上基本代码的组合 下面介绍几种最常用的代码 图7 28代码的种类 1 顺序码按图7 28的分类 顺序码是一种无实义代码 这种代码只作为分类对象的惟一标识 只代替对象名称 而不提供对象的任何其他信息 顺序码是一种最简单 最常用的代码 这种代码是将顺序的自然数或字母赋予分类对象 例如 人的性别代码 GB2261 80 规定 1为男性 2为女性 顺序码的优点是代码简短 使用方便 易于管理 易添加 对分类对象无任何特殊规定 缺点是代码本身没有给出对象的任何其他信息 通常非系统化的分类对象常采用顺序码 2 矩阵码矩阵码是一种逻辑码 所谓逻辑码 是按照一定的逻辑规则或者程序算法编写的代码 矩阵码就是建立在两维空间x y坐标基础上的代码 代码的值是通过坐标的数值构成的 3 自检码自检码由代码本体部分和一个附加码组成 附加码用来检查代码的录入和转录过程中是否有差错 附加码也叫校验码 它和代码本体部分有某种惟一的关系 它是通过一定的数学算法得到的 关于代码校验方法在后面的7 4 4节介绍 4 系列顺序码系列顺序码是排序码的一种 排序码是把对象按预先选择的某种顺序排列 分别赋予代码 系列顺序码是一种特殊的顺序码 它将顺序代码分为若干段并与分类对象的分段一一对应 给分类对象赋予一定的顺序代码 例如 国务院各部 委 局及其他机构名称代码 GB4657 84 采用的就是系列顺序码 用三位数字表示一个机构 第一位数字表示类别标识 第二 三位数字表示该机构在此类别中的数字代码 如300 399为国务院各部代码 700 799为全国性人民团体代码 这种代码的优点是能表示一定的信息属性 易于添加 缺点是空码较多时 不便于机器处理 不适用于复杂的分类体系 5 层次码层次码是按分类对象的从属层次关系作为排列顺序的一种代码 代码分为若干层 并与对象的分类层次对应 代码左端为高位层次代码 右端为低位层次代码 每个层次的代码可采用顺序码或系列顺序码 例如 国民经济行业分类和代码 GB4754 84 采用三层的层次码 第一 二 三层代码分别代表大类 中类 小类 其结构如下 层次码有着广泛的应用 其优点是能明确标出对象的类别 有严格的隶属关系 代码结构简单 容量大 便于机器汇总 但是 当层次较多时 其弹性较差 7 4 3代码的类型代码的类型指代码符号的表示形式 一般有数字型 字母型 数字字母混合型 数字型代码是用一个或多个阿拉伯数字表示的代码 这种代码结构简单 使用方便 也便于排序 易于推广 这是目前各国普遍采用的一种形式 如前面提到的 人的性别代码 国民经济行业分类和代码 等国家标准都是采用数字码 这种代码的缺点是对象特征的描述不直观 字母型代码是用一个或多个字母表示的代码 例如 铁道部制定的火车站站名字母缩写码 BJ代表北京 HB代表哈尔滨 这种码的优点是便于记忆 人们有使用习惯 另外 与同样长度的数字码相比 这种代码容量大得多 一位数字最多可表示10个类目 而一位字母可表示26个类目 其缺点是不便于机器处理 特别是编码对象多 更改频繁时 常会出现重复和冲突 因此 字母型代码常用于分类对象较少的情况 混合型代码是由数字 字母 专用符号组成的代码 这种代码基本上兼有前两种代码的优点 但是代码组成形式复杂 计算机输入不便 录入效率低 错误率高 综上所述 三种类型的代码各有所长 各有所短 使用时应根据使用者的要求 信息量的多少 信息交换的频度 使用者的习惯等各方面综合考虑 选用合适的代码类型 7 4 4代码校验方法代码是数据的重要组成部分 它的正确性将直接影响系统的质量 当人们抄写 录入时 发生错误的可能性很大 如抄写错 把1234写成1235 移位错 把1234记为1243 隔位移位错 把1234记为1432 等等 因此 为了验证输入代码的正确性 就要在代码本体的基础上 再外加校验码 使它成为代码的一个组成部分 这就是前面介绍的自检码 校验码是根据事先规定好的数学方法及代码本体计算出来的 当自检码输入计算机后 计算机按照同样的数学方法 根据代码本体进行计算 将结果与校验位比较 检验输入的代码是否正确 校验码的生成过程如下 1 对代码本体的每一位加权求和 设代码本体为C1C2 Cn 权因子为P1P2 Pn 加权求和得 S CiPi其中 权因子可取自然数1 2 3 几何级数2 4 8 16 32 质数2 3 5 7 11 2 以模除和得余数 R SmodM其中 R表示余数 表示模数 可取M 10 11等 3 模减去余数得校验位 Cn 1 M R例如 代码本体为123456 权为173173 模为10 则S 1 1 2 7 3 3 4 1 5 7 6 3 81 R 81mod10 1 校验位为 10 1 9 所以自检码为1234569 其中9为校验位 当自检码C1C2 CnCn 1 其中Cn 1为校验位 输入计算机后 对C1C2 Cn分别乘以原来的权 Cn 1乘以 把它们相加后所得的和被模除 若余数为零 则该代码一般说来是正确的 否则输入有错 在这种方法中 权和模可以有多种取法 表7 1列出了一些权和模的检错率 表7 1不同权和模的检错率 7 4 5代码设计的原则下面列出代码设计必须遵循的基本原则 1 惟一性一个对象可能有多个名称 也可按不同的方式对它进行描述 但在一个编码体系中 一个对象只能赋予它一个惟一的代码 2 合理性代码结构与相应的分类体系相对应 3 可扩充性应留有充分的余地 以备将来不断扩充的需要 4 简单性结构尽可能简单 尽可能短 以减少各种差错 5 适用性代码尽可能反映对象的特点 以助记忆 便于填写 6 规范性国家有关编码标准是代码设计的重要依据 已有标准的必须遵循 在一个代码体系中 代码结构 类型 编写格式必须统一 7 系统性有一定的分组规划 从而在整个系统中具有通用性 7 4 6代码设计的步骤代码设计可按下列步骤进行 1 确定代码对象 2 考查是否已有标准代码 如果国家标准局或某个部门对某些事物已规定了标准代码 那么应遵循这些标准代码 如果没有标准代码 那么代码设计时要参考国际标准化组织 其他国家 其他部门 其他单位的编码标准 设计出便于今后标准化的代码 3 根据实际情况和代码的使用范围 使用时间 选择代码的种类与类型 4 考虑检错功能 5 编写代码表 代码编好后 要编制代码表 对代码作详细说明 通知有关部门 组织学习 以便正确使用 7 5输出设计 输出设计的重要性是显而易见的 管理信息系统只有通过输出才能为用户服务 信息系统能否为用户提供准确 及时 适用的信息是评价信息系统优劣的标准之一 因此 必须十分重视输出设计 从系统开发的角度看 输出决定输入 即输入信息只有根据输出要求才能确定 输出设计包括以下几方面的内容 1 确定输出内容用户是输出信息的主要使用者 因此 设计输出内容时首先要确定用户在使用信息方面的要求 包括使用目的 输出速度 频率 数量 安全性要求等 根据用户要求 设计输出信息的内容 它包括 信息形式 表格 图形 文字 输出项目及数据结构 数据类型 位数及取值范围 数据的生成途径 完整性及一致性的考虑等 2 选择输出设备与介质常用的输出设备有显示终端 打印机 磁带机 磁盘机 绘图仪 缩微胶卷输出器 多媒体设备等 输出介质有纸张 磁带 磁盘 缩微胶卷 光盘 多媒体介质等 这些设备和介质各有特点 应根据用户对输出信息的要求 结合现有设备和资金条件选择 3 确定输出格式提供给人的信息都要进行格式设计 输出格式要满足使用者的要求和习惯 达到格式清晰 美观 易于阅读和理解的目的 报表是最常用的一种输出形式 报表的格式因用途不同而有差异 但一般由三部分组成 表头 表体和表尾 表头部分主要是标题 表体部分是整个表格的实体 反映表格的内容 表尾是一些补充说明或脚注 报表的输出 根据需要可采用不同的形式 对于单个用户一次性使用的表格 因为没有保留价值 可以在显示终端上输出 对于多个用户需要多次使用的表格 可打印输出 打印输出的报表 要考虑时间划分 装订等问题 需要长期保留的输出报表 可采用磁盘文件形式输出 以便存储 报表的格式要与现行系统流行的表格尽量一致 尤其是各级统计部门统一制定的报表不得更改 如果要更改现行表格 必须由系统设计员 分析员共同讨论 拿出更改的充分理由 与管理人员协商 并要得到有关部门的批准 7 6输入设计 7 6 1输入设计的原则 输入的是垃圾 输出的必然是垃圾 输入设计的目标是保证向系统输入正确的数据 在此前提下 应尽量做到输入方法简单 迅速 经济 方便 下面列出输入设计应遵循的原则 1 最小量原则这是指在保证满足处理要求的前提下使输入量最小 输入量越小 出错机会越少 花费时间越少 数据一致性越好 2 简单性原则输入的准备 输入过程应尽量容易 以减少错误的发生 3 早检验原则对输入数据的检验尽量接近原数据发生点 使错误能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论