第六章总体设计系统分析阶段要回答的中心问题是系统“做什么”,即明确系统功能,这个阶段的成果是得到系统的逻辑模型。系统设计要回答的中心问题是系统“怎么做”,即如何实现系统分析说明书规定的系统功能。系统设计包括总体设计和详细设计两大部分,本章讨论系统总体设计阶段的任务、内容和方法。系统总体设计是要根据系统分析的要求和组织的实际情况来对新系统的总体结构形式和可利用的资源进行大致设计,它是一种宏观、总体上的设计和规划。总体设计的核心任务是完成系统模块结构设计。即在目标系统逻辑模型的基础上,把系统分解为若干功能单一、彼此相对独立的模块,形成系统的模块结构,包括系统模块的组成、模块的功能和模块间的相互关系。本章介绍总体设计任务原则,系统结构设计的方法和工具,数据库设计方法以及有关通信结构规划设计等。6.1系统设计的任务与原则系统设计是在系统分析的基础上,根据系统分析阶段所提出的新系统逻辑模型,建立起新系统物理模型。具体地讲,就是根据新系统逻辑模型所提出的各项功能要求,结合组织的实际情况详细地设计出新系统处理流程和基本结构,并为系统实施阶段的各项工作准备好实施方案和必要的技术资料。6.1.1系统设计的任务在信息系统开发中,突出信息系统特征的业务、管理、决策等因素已经在前续阶段中被消融和解决,到了系统设计阶段,我们将根据系统调查与分析阶段的结果,在已经获准通过的系统说明书的基础上,进行新系统的设计工作。系统设计一般分为总体设计和详细设计两个阶段。初步设计又称初步设计或概要设计,它的主要任务是把系统的功能分解成许多基本的功能模块,确定它们之间的联系,规定它们的功能和处理流程;详细设计的主要任务是在系统初步设计的基础上,将设计方案进一步具体化、条理化和规范化。因此,系统研制人员在系统调查与分析阶段的任务是在逻辑上弄清楚系统“做什么”,在系统设计阶段的任务则是在物理上确定系统“怎么做”,所以系统设计阶段也称为系统的物理设计阶段。具体来说,系统设计的主要任务可以概括如下。1.总体设计(1)模块结构设计1)将系统划分成模块;2)决定每个模块的功能;3)决定模块间的调用关系;4)决定模块间的接口,即模块问数据的传递。(2)系统物理配置方案设计设备配置、通信网络的选择和设计,以及DBMS的选择等。(3)总体数据库设计总体设计是系统开发过程中很关键的一步。系统的质量及一些整体特性基本上是这一步决定的。系统越大,总体设计的影响越大。2.详细设计(1)代码设计完成的主要工作成果是代码编写规则,编码设计和代码维护设计。(2)数据库设计根据数据字典和数据存储要求,确定数据库的结构。(3)输出设计根据用户的要求设计报表或其他类型输出信息的格式。(4)输入设计设计原始单据的输入格式,使其操作简单。(5)人机界面设计从系统角度出发,按照统一、友好、漂亮、简洁、清晰的原则,设计人机界面。(6)处理过程设计对结构图中的每一个处理模块进行处理流程设计。(7)安全保密设计为确保管理信息系统的运行安全和数据保密,提出安全保密设计方案。(8)编写系统设计说明书按照规定的格式,汇总系统设计的成果,完成系统设计说明书的编写,为系统实施提供依据。6.1.2系统设计的原则从逻辑模型到物理模型的设计是一个由抽象到具体的过程,有时没有明确的界限,甚至可能有反复。经过系统设计,设计人员应该能为程序员提供经过评审的完整、清楚、准确、规范的系统设计文档,且对设计规范中不清楚的地方做出解释。系统设计总的原则是保证系统设计目标的实现,并在此基础上使技术资源的运用达到最佳。在进行系统设计过程中,应遵循以下原则。(1)系统性原则系统是作为一个有机整体而存在的。因此,在系统设计中,要从整个系统的角度进行考虑,使系统有统一的信息代码、统一的数据组织方法、统一的设计规范和标准,以提高系统的设计质量。(2)经济性原则经济性原则是指在满足系统要求的前提下,尽可能减少系统的费用支出。一方面,在系统硬件投资上不能盲目追求技术上的先进,而应以满足系统应用需要为前提。另一方面,系统设计应避免不必要的复杂化,各模块应尽可能简洁,以便缩短处理流程,减少处理时间。(3)可靠性原则可靠性既是评价系统设计质量的一个重要指标,又是系统设计的一个基本出发点。只有设计出的系统是安全可靠的,才能在实际中发挥它应有的作用。一个成功的管理信息系统必须具有较高的可靠性,如安全保密性、检错及纠错能力、抗病毒能力、系统恢复能力等。(4)简单性原则在系统达到预定目标、完成规定功能的前提下,应该尽量简单。具体来说,在设计过程中,要设法减少数据输入的次数和数量,提高系统中数据的共享性;要使操作简单化,使用户容易理解操作的步骤和要求,确保用户的主动地位;系统结构清晰合理,易于理解和维护。(5)灵活性原则系统对外界环境的变化要有很强的适应能力,系统容易修改和维护。因此系统设计人员要有一定的预见性,要从通用的角度考虑系统设计。6.2系统结构设计系统结构设计的主要任务是在系统分析的基础上进行功能模块划分。在第三章中已讨论了系统结构化设计的基本思想,本节详细讨论如何根据数据流程图和数据字典,以系统的逻辑功能和数据流关系为基础,借助于一套标准的设计准则和图表工具,通过“自上而下”和“自下而上”的多次反复,把系统分解为若干个大小适当、功能明确、具有一定的独立性且容易实现的模块,从而把复杂系统的设计转变为多个简单模块的设计。由于组成系统的模块基本独立,功能明确,因此使系统模块可进行单独维护和修改,而不会影响系统中的其他模块。由此可见,合理地进行模块的分解和定义,是系统结构设计的主要内容。系统结构设计的基本特点是:用分解的方法简化复杂系统;采用图表表达工具;有一套基本的设计准则;有一组基本的设计策略;有一组评价标准和质量优化技术。6.2.1结构设计的原则1.结构化系统设计结构化系统设计方法是运用一套标准的设计准则和工具,采用模块化的方法进行系统结构设计,将一个信息系统的结构,分解成由许多按层次结构联系的功能结构图,即模块结构图。该方法提出一种用于设计模块结构图的方法,还有一组对模块结构进行评价的标准及进行优化的方法。这种方法是系统设计使用最广的一种设计方法,可与分析阶段的结构化分析方法与实施阶段的结构化程序设计方法前后衔接使用。结构化设计方法的基本思想是使系统模块化,即把一个系统自上而下逐步分解为若干个彼此独立而又有一定联系的组成部分,这些组成部分称为模块。对于任何一个系统都可以按功能逐步由上向下,由抽象到具体,逐层将其分解为一个多层次的、具有相对独立功能的模块所组成的系统。在这一基本思想的指导下,设计人员以系统的逻辑模型为基础,并借助于一套标准的设计准则和图表等工具,逐层地将系统分解成多个大小适当、功能单一、具有一定独立性的模块,把一个复杂的系统转换成易于实现、易于维护的模块化结构系统。结构化设计的工作过程可以分为两步,第一步是根据数据流程图导出系统初始结构图,第二步是对结构图的反复改进过程。因此,系统结构图是结构化设计的主要工具,它不仅可以表示一个系统的层次结构关系,还反映了模块的调用关系和模块之间数据流的传递关系等特性。结构化系统设计具有以下特点:对于一个复杂的系统,用分解的方法予以化简;采用图表表达工具,有一套基本的设计准则,有一组基本的设计策略;有一组评价标准和质量优化技术。2.模块所谓模块(module),是指可以分解、组合及更换的单元,是组成系统、易于处理的基本单位。在管理信息系统中,任何一个处理功能都可以看作一个模块。模块可以理解为能被调用的“子程序”,它具有输入和输出、逻辑功能、运行程序和内部数据四种属性。模块的输入和输出是模块与其外部环境的信息交换,一个模块中的输入来源和输出去向都是同一个调用者;模块的逻辑功能是指它能做什么事,它是如何把输入转换成输出的;运行程序是指它如何用程序实现这种逻辑功能;内部数据是指模块内部产生和引用的数据。输入、逻辑功能、输出构成模块的外部特性,运行程序和内部数据则是模块的内部特性。系统结构设计主要关心模块的外部待性,模块的内部特性是程序设计阶段要解决的问题。模块的大小是一个相对概念,因为模块的分解、组合要视具体的状态环境而定。一个复杂的大系统可以分解为几个大模块,每个大模块又可以分解为多个小模块。在一个系统中,模块都是以层次结构组成的,从逻辑上说,上层模块包括下层模块,最下层是工作模块,执行具体功能。层次结构的优点是严密,管辖范围明确,通讯渠道简单,便于管理,不会产生混乱现象。层次结构如某工厂的组织结构,见图6.1。由于系统的各个模块功能明确,且具有一定的独立性,因此模块可以独立设计和修改,当把一个模块增加到系统中或从系统中去掉时,只是使系统增加或减少了这一模块所具有的功能,而对其他模块没有影响或影响较少。正是由于模块的这种独立性,才能确保系统具有较好的可修改性和可维护性。3.模块的聚合与耦合(1)模块聚合(ModuleCohesion)模块聚合是用来衡量一个模块内部各组成部分间整体统一性的指标,它具体描述一个模块功能专一性的程度。简单地说,理想聚合的模块只完成一件事情。根据模块内部的构成的情况,模块聚合可以划分为七个等级,这七个等级的模块聚合程度具有由强到弱变化的特点。①功能聚合(FunctionalCohesion)。一个模块只完成一个单独的、能够确切定义的功能。它对确定的输入进行处理后,输出确定的结果,如计算机语言中的一个函数,这是一种理想的聚合方式,具有“黑盒”特征,独立性最强,复用性好,使得模块便于修改,便于分块设计。②顺序聚合(SequentialCohesion)。一个模块内部各个组成部分执行几个处理功能,且一个处理功能所产生的输出数据直接成为下一处理功能的输人数据。顺序聚合模块包含了一个线性的、有序的数据转换链,其聚合程度较高。③数据聚合(DataCohesion),也称通讯聚合。一个模块内各个组成部分的处理功能,都使用相同的输入数据或产生相同的输出数据,且其中各个处理功能是无序的。通讯聚合能合理地定义模块功能,结构比较清晰,其聚合程度中等偏上。④过程聚合(PrecedureCohesion)。一个模块内各个组成部分的处理功能各不相同,彼此也没有什么关系,但它们都受同一个控制流支配,决定它们的执行次序,它可能是一个循环体,也可能是一个判断过程,也可能是一个线性的顺序执行步骤。其聚合程度中等,可修改性不高。⑤时间聚合(TemporalCohesion),也称暂时聚合。一个模块内各个组成部分的处理功能和时间有关,即在同一时间内执行,典型的有初始化模块和结束模块。在系统运行时,时间聚合模块的各个处理动作必须在特定的时间限制之内执行完,其聚合程度中等偏下,可修改性较差。⑥逻辑聚合(LogicalCohesion)。一个模块内各个组成部分的处理功能彼此无关,但处理逻辑相似。逻辑聚合模块的调用,常常有一个功能控制开关,根据上层模块的控制信号,在多个逻辑相似的功能中选择执行某一个功能,其聚合程度较差,个别功能的修改很可能会影响到整个模块的变动,所以可修改性差。⑦偶然聚合(CoincidentalCohesion)。一个模块由若干个并不相关的功能偶然地组合在一起。如为了缩短程序长度而将具有部分相同语句段的无关功能组合在一起,则会形成偶然聚合。这种模块内部组织结构的规律性最差,无法确定其功能,其聚合程度最低。在上述七种模块聚合方式中,其聚合程度是依次下降的。由于功能性聚合模块的聚合程度最高,所以在划分模块的过程中,应尽量采用功能性聚合方式。其次根据需要可以适当考虑采用顺序性聚合或数据性聚合方式,但要避免采用偶然性聚合和逻辑性聚合方式,以提高系统的设计质量和增加系统的可修改性。图6.2为模块聚合方式的判断树。在模块设计与分解过程中,有时很难确定模块聚合的方式,事实上也没有必要精确判定其方式,重要的是力争做到设计模块的高聚合,避免模块的低聚合。(2)模块耦合(ModuleCoupling)模块耦合是衡量一个模块与其他模块之间相互作用程度的指标。如果两个模块中的每一个模块无需另一模块的存在而能独立工作,则它们彼此没有联