免费智能真题库 > 历年试卷 > 系统分析师 > 2018年上半年 系统分析师 上午试卷 综合知识
  第31题      
  知识点:   结构化设计   结构化设计   结构设计   模块结构设计   输入和输出   系统模块结构设计
  关键词:   模块        章/节:   软件工程基础知识       

 
系统模块结构设计中,一个模块应具备的要素包括输入和输出、处理功能、(31)和(32)。
 
 
  A.  外部数据
 
  B.  内部数据
 
  C.  链接数据
 
  D.  数据格式
 
 
 

 
  第30题    2022年上半年  
   37%
工作流参考模型(Workflow Reference Model,WRM)包含6个基本模块,分别是(29)、工作流引擎、流程定义工具、(30)、调用应用..
  第33题    2022年上半年  
   21%
结构化设计 (Structured Design, SD)是一种面向数据流的方法,可进一步细分为(33)两个阶段,它根据(34)和系统结构准则,将..
  第29题    2020年下半年  
   46%
工作流管理系统(Workflow Management System, WflVIS)通过(27)创建工作流并管理其执行。它运行在一个或多个工作流引擎上,这些..
 
  第32题    2018年上半年  
   45%
系统模块结构设计中,一个模块应具备的要素包括输入和输出、处理功能、(31)和(32)。
  第1题    2020年下半年  
   49%
系统结构化分析模型包括数据模型、功能模型和行为模型,这些模型的核心是()。
  第34题    2020年下半年  
   54%
结构化设计(Structured Design,SD)是一种面向数据流的系统设计方法,它以(32) 等文档为基础,是一个(33)、逐步求精和模块化的..
   知识点讲解    
   · 结构化设计    · 结构化设计    · 结构设计    · 模块结构设计    · 输入和输出    · 系统模块结构设计
 
       结构化设计
        结构化设计包括体系结构设计、接口设计、数据设计和过程设计等任务。它是一种面向数据流的设计方法,是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的过程。
        在结构化方法中,模块化是一个很重要的概念,它是指将一个待开发的软件分解成为若干个小的简单部分——模块。每个模块可以独立地开发、测试。这是一种复杂问题的“分而治之”原则,其目的是使程序的结构清晰、易于测试与修改。
        具体来说,模块是指执行某一特定任务的数据结构和程序代码。通常将模块的接口和功能定义为其外部特性,将模块的局部数据和实现该模块的程序代码称为内部特性。在模块设计时,最重要的原则就是实现信息隐蔽和模块独立。模块通常具有连续性,也就意味着作用于系统的小变动将导致行为上的小变化,同时规模说明的小变动也将影响到小部分模块。
               抽象化
               对软件进行模块设计的时候,可以有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言描述问题的解法。而在较低的抽象层次上,则宜采用过程化的方法。抽象化包括对过程的抽象、对数据的抽象和对控制的抽象。
               (1)过程抽象。在软件工程过程中,从系统定义到实现,每进展一步都可以看做是对软件解决方案的抽象化过程的一次细化。在从概要设计到详细设计的过程中,抽象化的层次逐渐降低,当产生源程序时到达最低的抽象层次。
               (2)数据抽象。数据抽象与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。
               (3)控制抽象。控制抽象可以包含一个程序控制机制而无须规定其内部细节。
               自顶向下,逐步求精
               将软件的体系结构按自顶向下的方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个体系的结构。最初的说明只是概念性地描述了系统的功能或信息,但并未提供有关功能的内部实现机制或有关信息的内部结构的任何信息。设计人员对初始说明仔细推敲,进行功能细化或信息细化,给出实现的细节,划分出若干成分。然后再对这些成分,施行同样的细化工作。随着细化工作的逐步展开,设计人员就能得到越来越多的细节。
               信息隐蔽
               信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,并且尽可能少地暴露其内部的处理过程。通常会将困难的决策、可能修改的决策、数据结构的内部连接,以及对它们所做的操作细节、内部特征码、与计算机硬件有关的细节等隐蔽起来。
               通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性,它也是现代软件设计的一个关键性原则。
               模块独立
               模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。保持模块的高度独立性,也是在设计时的一个很重要的原则。通常用耦合(模块之间联系的紧密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量,我们的目标是“高内聚、低耦合”。
               模块的内聚类型通常可以分为7种,根据内聚度从高到低的排序如下表所示。
               
               模块的内聚类型
               模块的耦合类型通常也分为7种,根据耦合度从低到高排序如下表所示。
               
               模块的耦合类型
               除了满足以上两大基本原则之外,通常在模块分解时还需要注意:保持模块的大小适中;尽可能减少调用的深度;直接调用该模块的次数应该尽量多,但调用其他模块的次数则不宜过多;保证模块是单入口、单出口的;模块的作用域应该在模块之内;功能应该是可预测的。
 
       结构化设计
        SD方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。它通常与SA方法衔接起来使用,以数据流图为基础得到软件的模块结构。SD方法尤其适用于变换型结构和事务型结构的目标系统。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。
        SD方法的步骤如下:
        (1)评审和细化数据流图。
        (2)确定数据流图的类型。
        (3)把数据流图映射到软件模块结构上,设计出模块结构的上层。
        (4)基于数据流图逐步分解高层模块,设计中下层模块。
        (5)对模块结构进行优化,得到更为合理的软件结构。
        (6)描述模块接口。
        SD方法的设计原则是:
        (1)使每个模块执行一个功能(坚持功能性内聚)。
        (2)每个模块使用过程语句(或函数方式等)调用其他模块。
        (3)模块间传送的参数作为数据使用。
        (4)模块间共用的信息(如参数等)尽量少。
 
       结构设计
        多媒体课件的结构规定了教学软件中各部分教学内容的相互关系及呈现的形式,它反映了教学软件的主要框架及其教学功能,多媒体课件的系统结构大多采用非线性的超媒体结构,在此基础上形成了以下四种组织结构方式。
        ①线性结构:学生顺序地接收信息,从当前帧到下一帧,是一个事先设置好的序列。
        ②树状结构:学生沿着一个树状分支展开学习活动,该树状结构按教学内容的自然逻辑形成。
        ③网状结构:多媒体课件的网状结构是超文本结构,学生可在内容单元之间自由航行,没有预设路径的约束。
        ④复合结构:学生可以在一定范围内自由地航行,但同时受主流信息的线性引导和分层逻辑组织的影响。
 
       模块结构设计
               模块独立性
               (1)模块化。
               模块化是将系统化分为若干模块的工作。模块化设计可以使整个系统设计简单,结构清晰,可维护性增强。模块化设计的目标是:每个模块完成一个相对独立的特定功能;模块之间的结构简单。简而言之就是要保证模块之间的独立性,提高每个模块的独立程度。
               (2)模块独立性的度量。
               功能独立而且和其他模块之间没有过多相互作用和信息传递的模块被称为独立的模块。模块的独立程度可有两个定性标准度量:聚合(cohesion)和耦合(coupling)。聚合衡量模块内部各元素结合的紧密程度。耦合度量不同模块间互相依赖的程度。
               .聚合,聚合度量模块内部各元素的关系,即其紧凑程度,表现在模块内部各元素为了执行处理功能而组合在一起的程度。模块的聚合有7种不同的类型,其中前三种聚合属于弱聚合。
               .偶然聚合,如果模块所要完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系,我们就称之为偶然聚合。例如,设计模块A、B、C均具有相同的部分代码α,则把α抽出作为一个单独的公用模块,如下图所示,这种聚合便被称为偶然聚合。
               
               偶然聚合
               .逻辑聚合,如果一个模块内部的各个组成部分在逻辑上具有相似的处理动作,但是功能上、用途上却彼此无关,则被称为逻辑聚合。
               .时间聚合,时间聚合又称为经典内聚。如果一个模块内部的各个组成部分所包含的处理动作必须在同一时间内执行,则被称为时间聚合。
               .过程聚合,模块内部各个组成部分所要完成的动作虽然彼此间没什么关系,但是必须以特定的次序(控制流)执行,这种情况属于过程聚合。
               .通信聚合,如果一个模块的各个组成部分所完成的动作都使用了同一个输入数据或产生同一输出数据,则被称为通信聚合。
               .顺序聚合,对于一个模块内部的各个组成部分,如果前一部分处理动作的最后输出是后一部分处理动作的输入,则被称为顺序聚合。例如,模块A由两部分组成,一部分为编辑,另一部分为输出。编辑部分将其输出数据作为输出部分的输入,模块A即为顺序聚合模块。如下图所示。
               
               顺序聚合
               .功能聚合,如果一个模块内部各个组成部分全部属于一个整体,并执行同一功能,且各部分对实现该功能都必不可少,则称该模块为功能聚合模块。
               将以上各种类型的模块聚合方式从耦合程度、可修改性、可读性和通用性4个角度进行一下比较,可以得到下表。
               
               聚合特性比较
               在进行模块设计中,应当尽可能提高模块的聚合程度,使每个模块执行单一的功能,以降低模块间的联系,争取获得较高的模块独立性。尤其应该追求模块的功能聚合,如果可能,要将非功能性聚合的模块转化为功能聚合的模块。
               .耦合,耦合用于度量系统内不同模块之间的互联程度。耦合强弱取决于模块间连接形式及接口的复杂程度。模块之间的耦合程度直接影响系统的可读性、可维护性及可靠性。在系统设计中应改进可能追求松散耦合的系统,因为模块连接越简单,错误传播的可能性就会越大,而且在这样的系统中测试、维护任何一个模块并不需要对其他模块有很多了解。模块之间的连接形式有数据耦合、控制耦合、公共耦合和内容耦合4种类型。
               .数据耦合,如果两个模块彼此间通过数据参数(不是控制参数、共公数据结构或外部变量)交换信息,那么这种耦合就是数据耦合。例如,A模块向子模块A1、 A2传递的是数据信息,构成了数据耦合,如下图所示。
               
               数据耦合
               .控制耦合,如果两个模块彼此间传递的信息中有控制信息,那么,这种耦合被称为控制耦合。控制耦合与数据耦合很相似,只是传递参数中一个仅有数据,另一个还包含了控制信息。控制耦合可以通过适当的方式加以避免,如模块的再分解。例如,模块A与子模块A1、A2之间传递的既有数据信息又有控制信息则构成了控制耦合,如下图所示。
               
               控制耦合
               .公共耦合,若两个模块之间通过一个公共的数据区域传递信息,则被称为公共耦合或公共数据域耦合。公共数据域实际上就是多个模块公用数据的区域。公共耦合是一种不好的连接形式,尤其当一个公共数据区域被多个模块共同使用时,模块数越多,则其耦合的复杂度越大。这会给数据的保护、维护等带来很大的困难。例如,模块A、A2.1、Y1共用公共数据区内的元素,尽管A与Y1没有联系,但是它们之间存在着公共耦合,如下图所示。
               
               公共耦合
               .内容耦合,如果一个模块需要涉及另一个模块的内部信息时,则这种耦合成为内容耦合。例如,一个模块访问另一个模块的内部数据;一个模块调用另一个模块的部分程序代码等情况。
               对这4种类型的耦合的优劣对比可以总结在下表中。
               
               4种耦合的优劣对比
               总之,聚合和耦合是相辅相成的两个设计原则,是进行模块设计的有力工具,模块内的高聚合往往意味模块之间的松耦合。要想提高模块内部的聚合性,必须减少模块之间的联系。
               功能模块设计原则
               提高聚合程度,降低模块之间的耦合程度是模块设计应该遵循的最重要的两个原则。但除此之外,系统模块设计的过程中,还应该考虑其他方面的一些要求,遵循如下以下原则。
               (1)系统分解有层次。
               首先从系统的整体出发,根据系统的目标以功能划分模块。各个模块即互相配合,又各自具有独立功能,共同实现整个系统的目标。然后,对每个子模块在进一步逐层向下分解,直至分解到最小的模块为止。
               (2)适宜地系统深度和宽度比例。
               系统深度是指系统结构中的控制层次。宽度表示控制的总分布,即统一层次的模块总数的最大值。系统的深度和宽度之间往往有一个较为适宜的比例。深度过大说明系统划分过细,宽度过大可能会导致系统管理难度的加大。
               (3)模块大小适中。
               模块的大小一般使用模块中所包含的语句的数量多少来衡量。有这样一个参考数字,即模块的语句行数在50行~100行为最好,最多不超过500行。
               (4)适度控制模块的扇入扇出。
               模块的扇入指模块直接上级模块的个数,模块的直属下级模块个数即为模块的扇出。模块的扇入数一般来说越大越好,说明该模块的通用性较强。对扇出而言,过大可能导致系统控制和协调比较困难,过小则可能说明该模块本身规模过大。经验证明,扇出的个数最好是3或4,一般不要超过7,如下图所示,模块A的扇出系数为3,模块F的扇入系数为2。
               
               模块的扇入、扇出
               (5)较小的数据冗余。
               如果模块分解不当,会造成大量的数据冗余,这可能引起相关数据分布在不同的模块中,大量原始数据需要调用,大量的中间结果需要保存和传递,以及大量计算工作将要重复进行的情况,可能会降低系统的工作效率。
               数据流图到模块结构图的变换
               结构化系统设计方法与结构化系统分析有着密切的联系。系统分析阶段,用结构化分析方法获得用DFD等工具描述的系统说明书。设计阶段则以DFD为基础设计系统的模块结构。本节讨论如何从数据流程图导出初始结构图。
               数据流程图有两种典型的结构:变换型(transform)结构和事务型(transaction)结构。对这两种结构,可以分别通过变换分折方法和事务分析方法导出标准形式的结构图。采用这些方法时,都是先设计结构图的顶端主模块,然后自顶向下逐步细化,最后得到满足数据流程图要求的系统结构。
               (1)变换分析。
               变换结构是一种线性结构。它可以明显地分成逻辑输入、主加工和逻辑输出。下图(a)是一个典型的例子。变换分析(Transform Analysis)过程可以分为三步:找出逻辑输入、主加工和逻辑输出;设计顶层模块和第一层模块;设计中、下层模块。下面分别进行讨论。
               ①找出系统的逻辑输入、主加工和逻辑输出。
               如果设计人员经验丰富,又熟悉系统说明书,则很容易确定系统的主加工。例如,几股数据流的汇合处往往就是系统的主加工。若一时不能确定哪是主加工,可以用下面的方法先确定哪些数据流是逻辑输入,哪些数据流是逻辑输出。
               从物理输入端开始,一步步向系统的中间移动,直至这样一个数据流:它已不能再被看作系统的输入,则它的前一个数据流就是系统的逻辑输入。在下图(a)中,从“原始数据”这个数据流开始向中间移动,逐个分析数据流,发现数据流“P3→P4”不能再被理解为系统的输入了。因此,数据流“P2→P3”是逻辑输入。
               同理,从物理输出端开始,逆数据流方向往中间移动,可以确定系统的逻辑输出。介于逻辑输入和逻辑输出之间的加工就是主加工。下图(a)中的处理框P3就是主加工。
               当然,实际的数据流程图往往比这个例子复杂,输入、输出数据流都可能有多个。这时,需要对每个输入、输出数据流进行分析,确定相应的逻辑输入、逻辑输出。处于这些逻辑输入、逻辑输出之间的处理框就是主加工。主加工可能包括数据流程图中的多个处理框。
               
               变换分析
               
               (续)
               从上面的分析过程可以看出,逻辑输入、逻辑输出的划分涉及对数据流的理解。各人的理解不同,结果就有差异,但一般出入不会太大。
               ②设计顶层模块和第一层模块
               找到主加工之后,遵照“自顶向下,逐步加细”的原则,设计各层的模块。每创建一个模块,必须确定该模块的外部特征:模块的功能、与其他模块的界面(调用时传送的信息)。为每个模块起一个名字,这个名字应当恰如其分地反映出这个模块的功能。
               系统的主加工就是系统的顶层模块,其功能就是整个系统的功能。
               第一层模块按输入、变换、输出等分支来处理:为每一个逻辑输入设计一个输入模块,其功能是为顶层模块提供相应的数据;为每一个逻辑输出设计一个输出模块,它的功能即是输出顶层模块的输出信息;为主加工设计一个变换模块,它的功能就是将逻辑输入变换成逻辑输出。第一层模块与顶层模块之间传送的数据应该同数据流程图相对应。
               上图(a)有一个逻辑输入,一个逻辑输出。所以对应结构图第一层模块共三个,即宽度为3,如上图所示。
               ③设计中、下层模块
               对输入、变换、输出模块逐个分解,便可得到初始结构图。
               输入模块要为系统提供逻辑输入,一般要进行变换,先确定实现最后变换的变换模块。这个变换模块显然又需要某些输入,对每个这样的输入,对应一个新的输入模块。用类似方法依次分解下去,直到最终的物理输入为止。
               对输出模块的分解与上面的办法相似。
               对变换模块的分解,目前还没有与上面类似的方法。此时,需要研究数据流程图中相应加工的组成情况。
               (2)事务分析。
               下图是事务型结构的例子。这种结构中,某个加工将它的输入分离成一串平行的数据流,分别执行后面的某些加工。对于这种类型的数据流程图,可以通过事务分析得到相应的结构图。
               
               事务型结构
               事务分析也是按“自顶向下,逐步细化”的原则进行的。先设计主模块,其功能就是整个系统的功能。下面有一个“分析模块”和“调度模块”。前者分析事务的类型,后者根据不同的类型调用相应的下层模块。这样得到与上图相应的结构图,如下图所示。这里作用范围可能在控制范围之外,从而产生控制耦合。对于不太复杂的系统,可以通过采用逐模块判别事务类型来解决这一问题。对于复杂的问题。还得分开设模块。
               
               事务分析
               前面讨论了变换分析、事务分析。但实际应用中并非这么典型。这两种分析方法往往交替使用。数据流图的某一个局部可能是变换型,另一个局部可能是事务型,如此等等。这时,一般以变换分析为主,辅以事务分析。各个系统有不同的特点,初始结构图的设计方法也不同。凡是满足系统说明书要求的结构图都可以作为初始结构图。这里称之为初始结构图,是因为数据流图并没有完全反映出用户的要求(如查询要求、控制流),因此,按数据流图导出的结构图还要参照说明、查询分析等文档进行调整。
 
       输入和输出
        输入和输出信息是与用户的使用直接相关的。输入和输出的方式及格式应当尽可能方便用户的使用。因此,在软件需求分析阶段和设计阶段,就应基本确定输入和输出的风格。系统能否被用户接受,有时就取决于输入和输出的风格。
        不论是批处理的输入输出方式,还是交互式的输入输出方式,在设计和程序编码时都应考虑下列原则:
        (1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性。
        (2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息。
        (3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式。
        (4)输入数据时,应允许使用自由格式输入。
        (5)应允许缺省值。
        (6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。
        (7)在以交互式输入输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息。
        (8)当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求的一致性。
        (9)给所有的输出加注解,并设计输出报表格式。
        输入输出风格还受到许多其他因素的影响。如输入输出设备(例如终端的类型,图形设备,数字化转换设备等)、用户的熟练程度以及通信环境等。
        Wasserman为“用户软件工程及交互系统的设计”提供了一组指导性原则,可供软件设计和编程参考。
        (1)把计算机系统的内部特性隐蔽起来不让用户看到。
        (2)有完备的输入出错检查和出错恢复措施,在程序执行过程中尽量排除由于用户的原因而造成程序出错的可能性。
        (3)如果用户的请求有了结果,应随时通知用户。
        (4)充分利用联机帮助手段,对于不熟练的用户,提供对话式服务;对于熟练的用户,提供较高级的系统服务,改善输入输出的能力。
        (5)使输入格式和操作要求与用户的技术水平相适应。对于不熟练的用户,充分利用菜单系统逐步引导用户操作;对于熟练的用户,允许绕过菜单,直接使用命令方式进行操作。
        (6)按照输出设备的速度设计信息输出过程。
        (7)区别不同类型的用户,分别进行设计和编码。
        (8)保持始终如一的响应时间。
        (9)在出现错误时应尽量减少用户的额外工作。
        在交互式系统中,这些要求应成为软件需求的一部分,并通过设计和编码,在用户和系统之间建立良好的通信接口。
 
       系统模块结构设计
        1)模块的概念
        模块是组成系统的基本单位,它的特点是可以组合、分解和更换。系统中的任何一个处理功能都可以看成是一个模块。根据功能具体化程度的不同,模块可以分为逻辑模块和物理模块。在系统逻辑模型中定义的处理功能可视为逻辑模块。物理模块是逻辑模块的具体化,可以是一个计算机程序、子程序或若干条程序语句,也可以是人工过程的某项具体工作。
        一个模块应具备以下4个要素。
        (1)输入和输出。模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那里取得输入,进行加工后再把输出返回给调用者。
        (2)处理功能。指模块把输入转换成输出所做的工作。
        (3)内部数据。指仅供该模块本身引用的数据。
        (4)程序代码。指用来实现模块功能的程序。
        前两个要素是模块外部特性,反映了模块的外貌。后两个要素是模块的内部特性。在结构化设计中,主要考虑的是模块的外部特性,对其内部特性只做必要了解,具体的实现将在系统实施阶段完成。
        2)模块结构图
        为了保证系统设计工作的顺利进行,结构设计应遵循以下原则。
        (1)所划分的模块其内部的凝聚性要强,模块之间的联系要少,即模块具有较强的独立性。
        (2)模块之间的连接只能存在上下级之间的调用关系,不能有同级之间的横向联系。
        (3)整个系统呈树状结构,不允许网状结构或交叉调用关系出现。
        (4)所有模块(包括后继IPO图)都必须严格地分类编码并建立归档文件。
        模块结构图主要关心的是模块的外部属性,即上下级模块、同级模块之间的数据传递和调用关系,并不关心模块的内部。
        模块结构图是结构化设计中描述系统结构的图形工具。作为一种文档,它必须严格地定义模块的名字、功能和接口,同时还应当在模块结构图上反映出结构化设计的思想。
   题号导航      2018年上半年 系统分析师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第31题    在手机中做本题