3.3 结构化设计方法
【考点1】软件设计的基本概念
(1)软件设计的基础
①软件设计的基本目标
用比较抽象概括的方式确定目标系统如何完成预定的任务,软件设计是确定系统的物理模型。
②软件设计的重要性和地位
a.软件开发阶段占据软件项目开发总成本绝大部分,是在软件开发中形成质量的关键环节;
b.软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径;
c.软件设计作出的决策,最终影响软件实现的成败;
d.设计是软件工程和软件维护的基础。
③从技术观点来看,软件设计包括:
a.结构设计:定义软件系统各主要部件之间的关系;
b.数据设计:将分析时创建的模型转化为数据结构的定义;
c.接口设计:描述软件内部、软件和协作系统之间以及软件与人之间如何通信;
d.过程设计:把系统结构部件转换成软件的过程性描述。
④从工程管理角度来看,软件设计分两步完成:
a.概要设计(结构设计)
将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。
b.详细设计
确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。
(2)软件设计的基本原理
①抽象
②逐步求精和模块化
③信息隐蔽和局部化
④模块独立性
a.耦合性
b.内聚性
(3)结构化设计方法
①含义
结构化设计是采用最佳的可能方法设计系统的各个组成部分以及各成分之间的内部联系的技术。
②基本思想
将软件设计成由相对独立、单一功能的模块组成的结构。
【真题演练】
1软件设计中模块划分应遵循的准则是( )。[2013年3月真题]
A.低内聚低耦合
B.高内聚低耦合
C.低内聚高耦合
D.高内聚高耦合
【答案】B
【解析】软件设计中模块划分应遵循:①高内聚低耦合;②模块大小规模适当;③模块的依赖关系适当等。内聚是一个模块内各个元素彼此结合的紧密程度,要尽量使模块责任单一;耦合是不同模块之间互连程度的度量,要尽量使模块独立。答案选择B选项。
2耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是( )。[2013年3月真题]
A.提高耦合性降低内聚性有利于提高模块的独立性
B.降低耦合性提高内聚性有利于提高模块的独立性
C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D.内聚性是指模块间互相连接的紧密程度
【答案】B
【解析】耦合性是指模块间互相连接的紧密程度,内聚性是指一个模块内部各个元素间彼此结合的紧密程度。提高内聚性、降低耦合性是提高模块独立性的方法。答案选择B选项。
【考点2】概要设计
(1)概要设计的任务
①设计软件系统结构
划分具体过程:
a.采用某种设计方法,将一个复杂的系统按功能划分成模块;
b.确定每个模块的功能;
c.确定模块之间的调用关系;
d.确定模块之问的接口,即模块之间传递的信息;
e.评价模块结构的质量。
②数据结构及数据库设计
a.数据设计的具体任务:
第一,确定输入、输出文件的详细数据结构;
第二,结合算法设计,确定算法所必需的逻辑数据结构及其操作;
第三,确定对逻辑数据结构所必需的那些操作的程序模块,限制和确定各个数据设计决策的影响范围;
第四,需要与操作系统或调度程序接口所必需的控制表进行数据交换时,确定其详细的数据结构和使用规则;
第五,数据的保护性设计:防卫性、一致性、冗余性设计。
b.数据设计中应注意掌握的设计原则:
第一,用于功能和行为的系统分析原则也应用于数据;
第二,应该标识所有的数据结构以及其上的操作;
第三,应当建立数据字典,并用于数据设计和程序设计;
第四,低层的设计决策应该推迟到设计过程的后期;
第五,只有那些需要直接使用数据结构、内部数据的模块才能看到该数据的表示;
第六,应该开发一个由有用的数据结构和应用于其上的操作组成的库;
第七,软件设计和程序设计语言应该支持抽象数据类型的规格说明和实现。
③编写概要设计文档
在概要设计阶段,需要编写的文档有,概要设计说明书、数据库设计说明书、集成测试计划等。
④概要设计文档评审
a.在概要设计中,对设计部分是否完整实现需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性,有效性,各部分之间一致性都要做评审。
b.常用的软件结构设计工具是结构图。
在结构图中,模块用矩形表示,矩形内注明模块的功能和名字,箭头表示模块之间调用关系,带实心圆的箭头表示传递的是控制信息,带空心圆的箭头表示传递的是数据。
c.常用的结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。
d.结构图中常用的术语:
深度:表示控制的层数。
上级模块、从属模块:上、下两层模块a和b,且有a调用b,则a是上级模块,b是从属模块。
宽度:整体控制跨度(最大模块数的层)的表示。
扇入:调用一个给定模块的模块个数。
扇出:一个模块直接调用的其他模块数。
原子模块:树中位于叶子结点的模块。
(2)面向数据流的结构化设计方法
①数据流类型
a.变换型
变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
b.事务型
接收一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元(事务处理中心),然后给出结果。
②面向数据流设计方法的实施要点与设计过程
a.面向数据流的结构设计过程和步骤:
第一,分析、确认数据流图的类型,区分是事务型还是变换型。
第二,说明数据流的边界。
第三,把数据流图映射为程序结构。对于事务流区分事务中心和数据接收通路,将它映射成事务结构。对于变换流,区分输出和输入分支,并将其映射成变换结构。
第四,根据设计准则对产生的结构进行细化和求精。
b.变换型数据流图转换成程序结构图的实施步骤:
第一,确定数据流图是否具有变换特性。一般地说,一个系统中所有的信息流都可以认为是变换流,但是,当遇有明显的事务特性的信息流时,建议采用事务分析方法进行设计。在这时应该观察在整个数据流图中哪种属性占优势,先确定数据流的全局特性。此外还应把具有全局特性的不同特点的局部区域孤立出来,根据这些子数据流的特点作部分的处理。
第二,确定输入流和输出流的边界,划分出输入、变换和输出,独立出变换中心。
第三,进行第一级分解,将变换型映射成软件结构,其中输入数据处理模块协调对所有输入数据的接收;变换中心控制模块管理对内部形式的数据的所有操作;输出数据处理控制模块协调输出信息的产生过程。
第四,按上述步骤(如出现事务流也可按事务流的映射方式)对各个子流进行逐级分解,直至分解到基本功能。
第五,对每个模块写一个简要说明,内容包括该模块的接口描述、模块内部的信息、过程陈述、包括的主要判定点及任务等。
第六,利用软件结构的设计原则对软件结构进一步转化。
c.事务型数据流图转换成程序结构图的实施步骤
事务分析设计步骤与变换分析设计步骤大致类似,主要差别仅在于由数据图到软件结构的映射方法不同,它是将事务中心映射成为软件结构中发送分支的调度模块,将接收通路映射成软件结构的接收分支。
(3)设计的准则
①提高模块独立性;
②模块规模适中;
③深度、宽度、扇出和扇入适当;
好的软件设计结构通常顶层高扇出,中间扇出较少,底层高扇入;
④使模块的作用域在该模块的控制域内;
⑤应减少模块的接口和界面的复杂牲;
⑥设计成单入口、单出口的模块;
⑦设计功能可预测的模块。
【真题演练】
1某系统结构图如下图所示
该系统结构图中最大扇入是( )。[2014年9月真题]
A.n
B.1
C.2
D.3
【答案】C
【解析】扇入是指直接调用该模块的上级模块的个数,扇出指该模块直接调用的下级模块的个数。扇入大表示模块的复用程度高。题干系统中,第2层模块扇入均为1;第3层中3.1模块扇入为2,其余为1,所以最大扇入为2。答案选择C选项。
2某系统总体结构图如下图所示:
该系统总体结构图的深度是( )。[2015年3月真题]
A.7
B.6
C.3
D.2
【答案】C
【解析】这个系统总体结构图是一棵树结构,在树结构中,根结点在第1层,同一层上所有子结点都在下一层。由系统总体结构图可知,这棵树共3层。在树结构中,树的最大层次称为树的深度,故该系统的深度为3。答案选择C选项。
【考点3】详细设计
(1)详细设计的任务
详细设计的任务,是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。
(2)常见的过程设计工具有:
①图形工具:程序流程图,N-S图,PAD图,HIPO图;
②表格工具:判定表;
③语言工具:PDL(伪码)。
(3)程序流程图(程序框图)
①程序流程图是一种传统的、应用广泛的软件过程设计表示工具,具有表达直观、清晰,易于学习掌握,且独立与任何一种程序设计语言的特点。
构成程序流程图的最基本图符及含义如图3-1所示。
图3-1 程序流程图的基本图符
②程序流程图的5种控制结构:
a.顺序型:几个连续的加工步骤依次排列构成;
b.选择型:由某个逻辑判断式的取值决定选择两个加工中的一个;
c.先判断重复型:先判断循环控制条件是否成立,成立则执行循环体语句;
d.后判断重复型:重复执行某些特定的加工,直到控制条件成立;
e.多分支选择型:列举多种加工情况,根据控制变量的取值,选择执行其中之一。
(4)N-S图
①N-S图的基本图符及表示的5种基本控制结构如图3-2所示。
图3-2 N-S图图符与构成的5种控制结构
②N-S图的特征:
a.每个构件具有明确的功能域;
b.控制转移必须遵守结构化设计要求;
c.易于确定局部数据和(或)全局数据的作用域;
d.易于表达嵌套关系和模块的层次结构。
(5)PAD图
①PAD图的基本图符及表示的5种基本控制结构如图3-3所示。
图3-3 PAD图图符与构成的5种控制结构
②PAD图有以下特征:
a.结构清晰,结构化程度高;
b.易于阅读;
c.最左端的纵线是程序主干线,对应程序的第一层结构;每增加一层PAD图向右扩展一条纵线,故程序的纵线数等于程序层次数;
d.程序执行:从PAD图最左主干线上端结点开始,自上而下、自左向右依次执行,程序终止于最左主干线。
(6)PDL(Procedure Design Language)
①过程设计语言(PDL)也称为结构化的英语和伪码,它是一种混合语言,采用英语的词汇和结构化程序设计语言的语法,类似编程语言。
②用PDL表示的基本控制结构的常用词汇如下:
条件:IF / THEN / ELSE / ENDIF
循环:DO WHILE / ENDDO
循环:REPEAT UNTIL / ENDREPEAT
分支:CASE-OF / WHEN / SELECT / WHEN / SELECT / ENDCASE
③PDL具备以下特征:
a.有为结构化构成元素、数据说明和模块化特征提供的关键词语法;
b.处理部分的描述采用自然语言语法;
c.可以说明简单和复杂的数据结构;
d.支持各种接口描述的子程序定义和调用技术。
【真题演练】
1下面不能作为软件设计工具的是( )。[2014年9月真题]
A.PAD图
B.程序流程图
C.数据流程图(DFD图)
D.总体结构图
【答案】C
【解析】软件设计的常用工具有:①图形工具,包括程序流程图、N-S图、PAD图、HIPO;②表格工具,包括判定表;③语言工具,包括PDL(伪码)。软件结构化设计方法使用的描述方式是系统结构图。C项,数据流程图是在可行性研究阶段用到的而非软件设计中用到的,是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程。答案选择C选项。
2软件详细设计产生的图如下:
该图是( )。[2015年3月真题]
A.N-S图
B.PAD图
C.程序流程图
D.E-R图
【答案】C
【解析】N-S图是由若干基本框图构成的流程图,其特点是没有流程线;PAD图即问题分析图,它是一种由左往右展开的二维树形结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向;E-R图即实体-联系图,用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。答案选择C选项。