软件工程复习资料第4、5章

作者名:不详 来源:网友提供 06年6月8日

 

第4章
在软件需求分析阶段,已经搞清楚了软件“做什么”的问题,并把这些需求通过规格说明书描述了出来,这也是目标系统的逻辑模型。进入了设计阶段,要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反映在“设计规格说明”文档中,软件设计是一个把软件需求转换为软件表示的过程,最初这种表示只是描述了软件的总的体系结构,称为软件概要设计或结构设计。然后对结构进一步细分,称为详细设计或过程设计。
概要设计的基本任务:
1设计软件系统结构(简称软件结构)――采用某种设计方法,将一个复杂的系统按功能划分成模块;确定每个模块的功能;确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。
软件结构设计是以模块为基础的,在需求分析阶段,已经把系统分解为层次结构。设计阶段,以需求分析的结果为依据,从实现的角度进一步划分为模块,并组成模块的层次结构。
2数据结构及数据库设计
数据库的设计指数据存储文件的设计(概念设计、逻辑设计、物理设计)
数据库的“概念设计”、“逻辑设计”分别对应于系统开发中的“需求分析”与“概要设计”,而数据库的“物理设计”与模块的“详细设计”相对应。
3编写概要设计文档(概要设计说明书、数据库设计说明书、用户手册、修订测试计划,对测试策略、方法、步骤提出明确要求。)
4评审:对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等等都一一进行评审。
模块的基本属性:接口指模块的输入与输出;功能指模块实现什么功能;逻辑描述内部如何实现要求的功能及所需的数据;状态指该模块的运行环境,即模块的调用与被调用关系。
功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。
模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分为若干模块的过程。模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
开发一个大而复杂的软件系统,将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本,提高软件生产率,这就是模块化的依据。
抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。
通过抽象,可以确定组成软件的过程实体。通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。信息隐蔽指在设计和确定模块时,使得一个模块内部包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。
模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。
耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
无直接耦合 数据耦合 标记耦合 控制耦合 公共耦合 内容耦合(低――高)
1无直接耦合
2数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递。
3标记耦合指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址。
4控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。
5公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合。
公共耦合的复杂程序随耦合模块的个数增加而增加。
6内容耦合:这是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。
内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
偶然内聚 逻辑内聚 时间内聚 通信内聚 顺序内聚 功能内聚(低――高)
1偶然内聚指一个模块内的各处理元素之间没有任何联系。
2逻辑内聚指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
3时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
4通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
5顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
6功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
软件结构图主要内容有:模块、模块的控制关系、模块间的信息传递、两个附加符号
结构图的形态特征:深度指结构图控制的层次;宽度指一层中最大的模块个数;扇出指一个模块直接下属模块的个数;扇入指一个模块直接上属模块的个数。
如果若干模块之间耦合强度过高,每个模块内功能不复杂,可将它们合并,以减少信息的传递和公共区的引用。若有多个相关模块,应对它们的功能进行分析,消去重复功能。
一个模块的作用范围应在其控制范围这内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。
一个模块的作用范围指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。
要把数据流图(DFD)转换成软件结构,首先必须研究DFD的类型,一般可分为变换型和事务型两类。
变换型DFD是由输入、变换(或称处理)和输出三部分组成。
变换型数据处理的工作过程一般分为三步:取得数据、变换数据和给出数据,这三步体现了变换型DFD的基本思想。变换是系统的主加工,变换输入端的数据流为系统的逻辑输入,输出端为逻辑输出。而直接从外部设备输入数据称为物理输入,反之称为物理输出。
若某个加工将它的输入流分离成许多发散的数据流,形成许多加工路径,并根据输入的值选择其中一个路径来执行,这种特征的DFD称为事务型的数据流图,这个加工称为事务处理中心。
基于iDEF0图的设计也是结构化设计技术之一,它以系统的功能模型和信息结构为基础设计系统的软件结构。
HIPO图是表示软件系统结构的工具。它既可以描述软件总的模块层次结构-H图(层次图),又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况-IPO图。

第5章
详细设计是软件设计的第二阶段,主要确定每个模块具体执行过程,故也称“过程设计”
详细设计的基本任务:为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计,即确定数据库的物理结构;其他设计(代码设计、输入输出格式设计、人机对话设计、编写详细设计说明书、评审)
处理过程设计中采用的典型方法是结构化程序设计(SP)方法。详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易读。结构化程序设计是实现该目标的关键技术之一,它指导人们用良好的思想方法开发易于理解、易于验证的程序。
结构化程序设计方法的基本要点是:
1采用自顶向下、逐步求精的程序设计方法
2使用三种基本控制结构构造程序
任何程序都可由顺序、选择、重复三种基本控制结构构造。这三种基本结构的共同点是单入口、单出口。
3主程序员组的组织形式。
详细描述处理过程常用三种工具:图形、表格和语言。
程序流程图又称为程序框图,都应由三种基本控制结构顺序组合和完整嵌套而成,不能有相互交叉的情况,这样的流程图是结构化的流程图。
PAD图指问题分析图,它是一种自左往右展开的二维树型结构。控制流程为自上而下、从左到右的执行。由机器自动通过走树的办法生成相应的源代码,大大提高了软件的生产率。
过程设计语言(PDL),也称程序描述语言,又称伪码。它是一种用于描述模块算法设计和处理细节的语言。伪码的结构一般分为内外两层,外层语法应符合一般程序设计语言常用的语法规则,而内层语法则用一些简单的句子、短语和通用的数学符号,来描述程序应执行的功能,具有严格的关键字外层语法,用于定义控制结构、数据结构和模块接口,而它表示实际操作和条件的内层语语法又是灵活自由的,使用自然语言的词汇。
JACKSON方法是面向数据结构的设计方法,70年代中期出了“面向数据结构”的设计方法,其中有代表性的是由英国M.JACKSON提出的JACKSON方法和由法国人J.WARNIER提出的WARNIER方法。
JACKSON在JSP的基础上扩展成了一种系统的开发方法,简称JSD。JSD主要以活动事件为中心,通过由一串活动顺序组合构成的进程,建立系统模型,最后实现该模型。JSP方法定义了一组以数据结构为指导的映射过程,它根据输入、输出的数据结构,按一定的规则映射成软件的过程描述,即程序结构,而不是软件的体系结构,因此该方法适用于详细设计阶段。
JACKSON方法提供了自己的描述工具――-JACKSON结构图。无论数据结构还是程序结构,都限于三种基本结构(顺序结构、选择结构、重复结构)及它们的组合。
JACKSON结构图的特点:
1能对结构进行自顶向下分解,因此可以表示层次结构。
2结构易读,形象直观。
3既能表示数据结构也能表示程序结构,且表示的是组成关系。
JSP方法一般通过以下五个步骤来完成设计:
1分析并确定输入数据和输出数据的逻辑结构,并用JACKson结构图表示这些数据结构。
2找出输入数据结构和输出数据结构中有对应关系的数据单元。“对应关系”指这些数据单元在数据内容上、数量上和顺序上有直接的因果关系,对于重复的数据单元,重复的次序和次数都相同才有对应关系。
3按一定的规则由输入、输出的数据结构导出程序结构
4列出基本操作与条件,并把它们分配到程序结构图的适当位置。
5用伪码写出程序。