软件工程考核知识点第4章软件概要设计.docx
《软件工程考核知识点第4章软件概要设计.docx》由会员分享,可在线阅读,更多相关《软件工程考核知识点第4章软件概要设计.docx(15页珍藏版)》请在冰豆网上搜索。
软件工程考核知识点第4章软件概要设计
软件工程考核知识点-第4章-软件概要设计
4.1软件概要设计的基本任务
在软件需求分析阶段,已经搞清楚了软件“做什么”的问题,并把这些需求通过规格说明书描述了出来,这也是目标系统的逻辑模型。
进入了设计阶段,要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中,所以软件设计是一个把软件需求转换为软件表示的过程,最初这种表示只是描述了软件的总的体系结构,称为软件概要设计或结构设计。
4.1.1基本任务
1.设计软件系统结构(简称软件结构)
为了实现目标系统,最终必须设计出组成这个系统的所有程序和数据库(文件),对于程序,则首先进行结构设计,具体为:
(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。
(2)确定每个模块的功能。
(3)确定模块之间的调用关系。
(4)确定模块之间的接口,即模块之间传递的信息。
(5)评价模块结构的质量。
根据以上内容,软件结构的设计是以模块为基础的,在需求分析阶段,已经把系统分成层次结构。
设计阶段,以需求分析的结果为依据,从实现的角度进一步划分为模块,并组成模块的层次结构。
软件结构的设计是概要设计关键的一步,直接影响到下一阶段详细设计与编码的工作软件系统的质量及一些整体特性都在软件结构的设计中决定。
2.数据结构及数据库设计
对于大型数据处理的软件系统,除了控制结构的模块设计外,数据结构与数据库设计也是很重要的。
(1)数据结构的设计
逐步细化的方法也适用于数据结构的设计。
在需求分析阶段,已通过数据字典对数据的组成、操作约束、数据之间的关系等方面进行了描述,确定了数据的结构特性,在概要设计阶段要加以细化,详细设计阶段则规定具体的实现细节。
在概要设计阶段,宜使用抽象的数据类型。
(2)数据库的设计
数据库的设计指数据存储文件的设计,主要进行以下几方面设计:
①概念设计。
在数据分析的基础上,采用自底向上的方法从用户角度进行视图设计,一般用ER模型来表示数据模型,这是一个概念模型。
②逻辑设计。
ER模型或IDEFlx模型是独立于数据库管理系统(DBMS)的,要结合具体的DBMS特征来建立数据库的逻辑结构,对于关系型的DBMS来说将概念结构转换为数据模式、子模式并进行规范,要给出数据结构的定义,即定义所含的数据项、类型、长度及它们之间的层次或相互关系的表格等等。
③物理设计。
对于不同的DBMS,物理环境不同,提供的存储结构与存取方法各不相同。
物理设计就是设计数据模式的一些物理细节,如数据项存储要求、存取方式、索引的建立。
3.编写概要设计文档
文档主要有:
(1)概要设计说明书。
(2)数据库设计说明书,主要给出所使用的DBMS简介、数据库的概念模型、逻辑设计、结果。
(3)用户手册,对需求分析阶段编写的用户手册进行补充。
(4)修订测试计划,对测试策略、方法、步骤提出明确要求。
4.评审
对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等等都一一进行评审。
4.1.2软件概要设计说明书的主要内容
概要设计说明书是概要设计阶段结束时提交的技术文档,按国标GB8576-88的“计算机软件产品开发文件编制指南”规定,软件设计文档可分为“概要设计说明书”、“详细设计说明书”、“数据库设计说明书”。
4.2软件设计的基本原理
软件设计中最重要的一个问题就是软件质量问题,用什么标准对软件设计的技术进行衡量呢?
本节介绍几种基本原理。
4.2.1模块化
何为模块?
模块在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素,如高级语言中的过程、函数、子程序等等。
模块是可组合、分解和更新的单元。
模块有以下基本属性:
接口:
指模块的输入与输出。
功能:
指模块实现什么功能。
逻辑:
描述内部如何实现要求的功能及所需的数据。
状态:
该模块的运行环境,即模块的调用与被调用关系。
功能、状态与接口反映模块的外在特性,逻辑反映它的内在特性。
模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。
模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
例如,设问题x,表示它的复杂性函数为C(x),解决它所需的工作量函数为E(x)。
对于问题P1和P2,如果C(P1)>C(P2)即Pl比P2复杂,
那么E(P1)>E(P2)即问题越复杂,所需要的工作量越大。
根据解决一般问题的经验,规律是:
C(P1十P2)>C(P1)十C(P2)
即一个问题由两个问题组合而成的复杂度大于分别考虑每个问题的复杂度之和。
这样可以推出:
E(Pl十P2)>E(P1)十E(P2)
由此可知,开发一个大而复杂的软件系统,将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本,提高软件生产率,但是模块划分越多,块内的工作量减少,模块之间接口的工作量增加了,如图4—l所示。
因此在划分模块时,应减少接口的代价,提高模块的独立性。
4.2.2抽象
抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同性而暂不考虑它的细节,不考虑其他因素。
抽象的概念被广泛应用于计算机软件领域,在软件工程学中更是如此。
软件工程过程中的每一步都可以看作是对软件解决方法的抽象层次的一次细化。
4.2.3信息隐蔽
通过抽象,可以确定组成软件的过程实体。
通过信息隐蔽,可以定义和实现对模块的过程细节和局数据结构的存取限制。
信息隐蔽指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。
4.2.4模块独立性
为了降低软件系统的复杂性,提高可理解性、可维护性,必须把系统划分成为多个模块,模块不能任意划分,应尽量保持其独立性。
模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。
如何衡量软件的独立性呢?
根据模块的外部特征和内部特征,提出了两个定性的度量标准--耦合性和内聚性。
1.耦合性
也称快间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量。
模块之间系越紧密,其耦合性就越强,模块的独立性则越差。
模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
模块的耦合性有以下几种类型,分为:
(1)无直接耦合
指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。
因此模块间耦合性最弱,模块独立性最高。
(2)数据耦合
指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。
(3)标记耦合
指两个模块传递的是数据结构,如:
高级语言中的数组名、记录名、文件名等这些名字即为标记,其实传递的是这个数据结构的地址。
(4)控制耦合
指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某些功能。
(5)公共耦合
指通过一个公共数据环境相互作用的那些模块间的耦合。
公共数据环境可以是全程变量或数据结构、共享的通信区、内存的公共覆盖区及任何存储介质上的文件、物理设备等。
(6)内容耦合
这是最高程度的耦合,也是最差的耦合。
当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部,这种模块之间的耦合为内容耦合,这种情况往往出现在汇编程序设计中。
2内聚性
又称块内联系,指模块的功能强度的度量。
若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高,内聚性有以下几种类型:
(1)偶然内聚
指一个模块内的各处理元素之间没有任何联系。
(2)逻辑内聚
指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
(3)时间内聚
把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
(4)通信内聚
指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输人数据或者产生相同的输出数据。
(5)顺序内聚
指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。
(6)功能内聚
这是最强的内聚;指模块内所有元素共同完成一个功能,缺一不可。
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
.3软件结构优化准则
4.3.1软件结构图
软件结构图是系统的模块层次结构,反映了整个系统的功能实现,即将来程序的控制层次体系。
对于一个“问题”,可用不同的软件结构来解决,不同的设计方法和不同的划分和组织,得出不同的软件结构。
结构图的注主要内容是:
(1)模块:
模块用方框表示,并用名字标识该模块,名字应体现该模块的功能。
(2)模块的控制关系:
两个模块间用单向箭头(或直线)连接表示它们的控制关系,如图4-2
(3)模块间的信息传递:
模块问还经常用带注释的短箭头表示模块调用过程中来回传递的信息。
有时箭头尾部带空心圆的表示传递的是数据,带实心圆的表示传递的是控制信息,如图4-2
(4)两个附加符号:
表示模块有选择地调用或循环调用。
如图4-3
(5)结构图的形态特征:
①深度:
指结构图控制的层次,也是模块的层数,如图4—4,结构图的深度为5。
②宽度:
指一层中最大的模块个数,如图4—4宽度为8。
③扇出:
指一个模块直接下属模块的个数,如图4—4,模块M的扇出为3。
④扇入:
指一个模块直接上属模块的个数,如图4—4,模块T的扇人为4。
(6)画结构图应注意的事项
①同名字的模块在结构图中仅出现一次。
②调用关系只能从上到下。
③不严格表示模块的调用次序,习惯上从左到右。
有时为了减少连线的交叉,适当地调整同一层模块左右位置,以保持结构图的清晰性。
4.3.2软件结构设计优化准则
(1)划分模块时,尽量做到高内聚,低耦合,保持模块相对独立性,并以此原则优化初始的软件结构。
(2)一个模块的作用范围应在其控制范围之内,且判定所在的模块应与其影响的模块在层次上尽量靠近。
一个模块的作用范围指该模块内一个判定影响的所有模块的集合。
一个模块的控制范围是指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。
(3)软件结构的深度、宽度、扇入、扇出应适当。
(4)模块的大小应适中。
(5)模块的接口要简单、清晰、含义明确,便于理解,易于实现、测试与维护。
4.4面向数据流的设计方法
面向数据流的设计是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构,因此“又称结构化设计(StructuredDesign,简称SD)。
该方法由美国IBM公司L.Constantine和E.Yourdon等人于1974年提出,与结构化分析(SA)衔接,构成了完整的结构化分析与设计技术,是目前使用最广泛的软件设计方法之一。
4.4.1数据流的类型
要把数据流图(DFD)转化为软件结构,首先必须研究DFD的类型。
各种软件系统,不论DFD如何庞大和复杂,一般可分为变换型和事务型。
1变换型数据流图
变换型的DFD是由输入、变换和输出组成,如图4-6
变换型数据处理的工作过程一般分为三步:
取得数据、变换数据和给出数据,这三步体现了变换型DFD的基本思想。
变换是系统的主加工,变换输入端的数据流为系统的逻辑输入,输出端为逻辑输出。
2事务型的数据流图
若某个加工将它的输入流分离成许多发散的数据流,形成许多加工路径,并根据输入的值选择其中一条路径来执行,这种特征的DFD称为事务型的数据流图,这个加工称为事务处理中心。
如图4-7
4.4.2设计过程
面向数据流设计方法的过程如下:
(1)精化DFD。
指把DFD转换成软件结构图前,设计人员要仔细地研究分析DFD并参照数据字典,认真理解其中的有关元素,检查有无遗漏或不合理之处,进行必要的修改。
(2)确定DFD类型,如果是变换型,确定变换中心和逻辑输入、逻辑输出的界线,映射为变换结构的顶层和第一层;如果是事务型,确定事务中心和加工路径,映射为事务结构的顶层和第一层。
(3)分解上层模块,设计中下层模块结构。
(4)根据优化准则对软件结构求精。
(5)描述模块功能、接口及全局数据结构。
(6)复查,如果有错,转向
(2)修改完善,否则进入详细设计。
4.4.3变换分析设计
(1)确定DFD中的变换中心、逻辑输入和逻辑输出。
(2)设计软件结构的顶层和第一层——变换结构。
变换中心确定以后,就相当于决定了主模块的位置,这就是软件结构的顶层。
其主要功能是主要完成所有模块的控制,它的名字应该是系统名称,以体现完成整个系统的功能。
主要模块确定后,设计软件结构的第一层。
第一层一般至少有三种功能的模块:
输入、输出和变换模块。
(3)设计中、下层模块。
对第一层的输入、输出、变换模块自顶向下逐层分解。
①输入模块下属的设计。
输入模块的功能是向它的调用模块提供数据,所以必须有数据来源。
每个输入模块可以设计成两个下属模块:
一个接收,一个转换,用类似的方法一直分解下去,直到物理输入端。
②输出模块下属模块的设计。
输出模块的功能是将它的调用模块产生的数据送出。
这样每个输出模块可以设计成两个下属模块:
一个转换,一个发送,直到物理输出端。
③变换模块下属模块的设计。
④设计的优化。
以上步骤设计出的软件结构仅仅是初始结构,还必须根据设计准则对初始结构精细和改进。
总之,软件结构的求精,带来很大的经验性。
一般往往形成DFD中的加工和SC中的模块之间是一对以的映射关系然后修改。
4.4.4事务分析设计
对于具有事务型特征的DFD,则采用事务分析的设计方法。
如图4-8
(1)确定DFD中事务中心和加工路径。
(2)设计软件结构的顶层和第一层——事务结构。
①接收分支:
负责接收数据,它的设计与变换型DFD的输入部分设计方法相同。
②发送分支:
通常包含一个调度模块,它控制管理所有的下层的事务处理模块。
当事务类型不多时,调度模块可与主模块合并。
(3)事务结构中、下层模块的设计、优化等工作同变换结构。
4.4.5实例:
将3.3.3实例——销售管理系统的数据流图转化为软件结构
分析该系统的0层图,它有四个主要功能:
订货处理、进货处理、缺货处理和销售统计,这四个处理可平行工作,因此从整体上分析可按事务类型数据流图来设计,根据功能来选择四个处理中的一个。
4.5基于IDEF0图的设计方法
基于IDEF0图的设计也是结构化设计技术之一,它以系统的功能模型和信息结构为基础设计系统的软件结构。
由于IDEF0图自顶向下逐层对系统进行分解,并且对系统的每一功能的输入、输出、约束、机制都进行了全面的描述。
因此,在系统概要设计时,一般按照IDEF0图的分解层次,逐层将其转换成软件结构图。
对于某一层的IDEF0图按以下方法转换:
(1)找出该IDEF0图的父图,搞清父图、子图之间的输入输出、控制关系。
(2)以父图的活动为上层模块,子图中的活动为下层模块,画出系统的单层结构图。
(3)根据IDEF0图各个活动的输入、输出数据,控制信息及数据库的结构,数据项定义等,确定模块的接口。
(4)综合所有层次的结构图,得到系统初始的软件结构图。
(5)根据软件结构的优化准则进行精化。
4.6表示软件结构的另一种图形工具——HIPO图
HIPO图(HierarchyPlusInput/Processing/Output)图是美国IBM公司70年代发展起来的表示软件系统结构的工具。
它既可以描述软件总的模块层次结构--H图(层次图),又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况--IPO图。
HIPO图以模块分解的层次性以及模块内部输入、处理、输出三大基本部分为基础建立的。
它是表示软件系统结构的工具。
HIPO图以模块分解的层次性以及模块内部输入、处理、输出三大基本部分为基础建立的。
1.HIPO图的H图
用于描述软件的层次结构,矩形框表示一个模块,矩形框之间的直线表示模块之间的调用关系,同结构图一样未指明调用顺序。
如图4-10为销售管理系统的层次图。
2.IPO图
H图只说明了软件系统由那些模块组成及其控制层次结构,并未说明模块间的信息传递及模块内部的处理。
因此对一些重要模块还必须根据数据流图、数据字典及H图绘制具体的IPO图,如图4-11
一、名词解释
1.软件设计 2.模块化 3.信息隐蔽
4.模块独立性 5.耦合性 6.内聚性
7.模块的控制范围 8.模块的作用范围 9.软件结构
二、填空题
1.软件设计阶段产生的最重要的文档是______。
2.软件结构是以______为基础而组成的一种控制层次结构。
3.反映软件结构的基本形态特征是______。
4.一个模块把数值作为参数送给另一个模块,这种耦合方式称为______。
5.两个模块通过全程变量相互作用,这种耦合方式称为______。
6.将与同一张年报表有关的所有程序段组成一个模块,该模块的内聚性为______。
7.一个模块的作用范围指______的集合。
8.一个模块的控制范围指______的集合。
9.结构化设计以______为基础映射成软件结构。
10.为了防止软件概要设计的错误传播到开发的后续阶段,在概要设计文档完成以后,要进行______。
三、选择题
1.结构化设计方法在软件开发中,用于( )。
A.测试用例设计 B.软件概要设计 C.程序设计 D.软件详细设计
2.软件结构使用的图形工具,一般采用( )图。
A.DFD B.PAD C.SC D.ER
3.软件结构图中,模块框之间若有直线连接,表示它们之间存在着( )关系。
A.调用 B.组成 C.链接 D.顺序执行
4.在软件概要设计中,不使用的图形工具是( )图。
A.SC B.IPO C.IDEF0 D.PAD
5.划分模块时,一个模块的( )。
A.作用范围应在其控制范围之内 B.控制范围应在其作用范围之内
C.作用范围与控制范围互不包含 D.作用范围与控制范围不受任何限制
6.属于软件设计的基本原理是( )。
A.数据流分析设计 B.变换流分析设计
C.事务流分析设计 D.模块化
7.变换流的DFD由三部分组成,不属于其中一部分的是( )。
A.事务中心 B.变换中心 C.输入流 D.输出流
8.软件设计阶段一般又可分为( )。
A.逻辑设计与功能设计 B.概要设计与详细设计
C.概念设计与物理设计 D.模型设计与程序设计
9.好的软件结构应该是( )。
A.高耦合、高内聚 B.低耦合、高内聚
C.高耦合、低内聚 D.低耦合、低内聚
10.结构图中,不是其主要成分的是( )。
A.模块 B.模块间传递的数据
C.模块内部数据 D.模块的控制关系
四、简答题
1.什么是软件概要设计,该阶段的基本任务是什么?
2.软件设计的基本原理包括哪些内容?
3.模块的耦合性、内聚性包括哪些种类?
各表示什么含义?
4.简述软件结构优化准则。
5.变换分析设计与事务分析设计有什么区别?
简述其设计步骤。
五、应用题
将第3章3.3节应用题中第1题的DFD转换成软件结构图。
参考答案
二、填空题
1.软件概要设计说明书
2.模块
3.深度、宽度、扇入、扇出
4.数据耦合
5.公共耦合
6.通信内聚
7.受该模块内一个判定影响的所有模块
8.模块本身以及其所有下属模块
9.数据流图
10.软件评审
三、选择题
1.B. 2.C. 3.A. 4.D. 5.A.
6.D. 7.A. 8.B. 9.B. 10.C.
五、应用题