《软件工程第5章总体设计》由会员分享,可在线阅读,更多相关《软件工程第5章总体设计(98页珍藏版)》请在金锄头文库上搜索。
1、2018年9月11日,广东工业大学计算机学院,1,软件工程 Software Engineering,2018/9/11,广东工业大学计算机学院,2,第5章 总体设计,本章内容: 5.1 软件设计的重要性 5.2 设计过程 5.3 软件总体设计 5.4 设计基本原理 5.5 体系结构设计 5.6 结构化设计 5.7 软件结构优化,2018/9/11,广东工业大学计算机学院,3,5.1 软件设计的重要性 软件设计处于软件工程过程的技术核心地位。,2018/9/11,广东工业大学计算机学院,4,在设计中所作的决策将最终影响软件实现的成功与否、也影响软件维护的难易程度。所以,在软件设计过程中的这些决
2、策是开发阶段非常关键的一步。 软件设计的重要性还反映在质量(quality)上。,2018/9/11,广东工业大学计算机学院,5,2018/9/11,广东工业大学计算机学院,6,5.2 设计过程,软件设计是一个把需求转换为软件表达式的过程。 从软件工程的角度讲是分为总体设计和详细设计。总体设计主要是把需求转换为数据结构和软件体系结构,而详细设计主要集中在体系结构表达式的细化,从而产生详细的数据结构和软件的算法表达式。,2018/9/11,广东工业大学计算机学院,7,总体设计和详细设计除了必须有先进的设计技术外,还要有同步的管理技术支持。,2018/9/11,广东工业大学计算机学院,8,软件设计
3、原则: 1)设计应当模块化(modular),也就是说,软件应被逻辑地划分为能完成特定功能和子功能的构件。 (2)设计应形成具有独立功能特征的模块(如子程序或过程)。 (3)设计应使模块之间和与外部环境之间接口的复杂性尽量地减少。,2018/9/11,广东工业大学计算机学院,9,(4)设计应该有一个分层的组织结构,这样人们可对软件各个构件进行理性的控制。 (5)设计应有性质不同的可区分的数据和过程表达式。 (6)设计应利用软件需求分析中得到的信息和可重复的方法。,2018/9/11,广东工业大学计算机学院,10,5.3 软件总体设计,1. 软件系统结构设计 (1)采用某种设计方法,将一个复杂的
4、系统按功能划分成模块。 (2)确定每个模块的功能。 (3)确定模块之间的调用关系。 (4)确定模块之间的接口,即模块之间传递的信息。 (5)评价模块结构的质量。,2018/9/11,广东工业大学计算机学院,11,2. 数据结构及数据库设计 1)数据结构的设计 根据需求分析阶段对系统数据的组成、操作约束和数据之间的关系的描述,确定数据结构特性。,2018/9/11,广东工业大学计算机学院,12,2)数据库的设计 一般的软件系统都有数据的存储,存储要借助数据库技术。数据库的设计是指数据存储文件的设计。设计包括以下三个方面: (1)概念设计。 (2)逻辑设计。 (3)物理设计。,2018/9/11,
5、广东工业大学计算机学院,13,3. 网络系统设计 如果采用的是网络环境,则要进行网络系统的设计。要分析网络负荷与容量,遵照网络系统设计原则,确定网络系统的需求。要进行网络结构设计,选择好网络操作系统,确定网络系统配置,制定网络拓扑结构。,2018/9/11,广东工业大学计算机学院,14,4. 软件总体设计文档 总体设计说明书是总体设计阶段结束时提交的技术文档。按国标GB857688的计算机软件产品开发文件编制指南规定,软件设计文档可分为“总体设计说明书”、“详细设计说明书”和“数据库设计说明书”。这些文档的内容与格式请参考有关资料。,2018/9/11,广东工业大学计算机学院,15,5. 评审
6、 在该阶段,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性、关键的处理及内外部接口定义正确性、有效性以及各部分之间的一致性等,都一一进行评审。,2018/9/11,广东工业大学计算机学院,16,5.4 设计基本原理,软件设计要回答下列问题: (1)使用什么样的准则才能把软件划分成为各个单独的构件? (2)怎样把功能或数据结构的细节从软件概念表达式中分离出来? (3)定义软件设计的技术质量有统一的准则吗?,2018/9/11,广东工业大学计算机学院,17,5.4.1 抽象,抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节,不考虑其他因素
7、。 随着对抽象不同层次的展开,过程抽象(Procedural Abstraction)和数据抽象(Data Abstraction)就建立了。,2018/9/11,广东工业大学计算机学院,18,5.4.2 细化,逐步细化是一种自顶向下的设计策略。程序的体系结构开发是由过程细节层次不断地细化而成的。分层的开发则是以逐步的方式由分解一个宏功能直到获得编程语言语句。 细化实际上是一个详细描述的过程。在高层抽象定义时,从功能说明或信息描述开始,就是说明功能或信息的概念,而不给出功能内部的工作细节或信息的内部结构。细化则是设计者在原始说明的基础上进行详细说明,随着不断的细化(详细说明)给出更多的细节。,
8、2018/9/11,广东工业大学计算机学院,19,5.4.3 模块化,模块具有以下几种基本属性: (1)接口:指模块的输入与输出。 (2)功能:指模块实现什么功能。 (3)逻辑:描述内部如何实现要求的功能及所需的数据。 (4)状态:指该模块的运行环境,即模块的调用与被调用关系。,2018/9/11,广东工业大学计算机学院,20,模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。,2018/9/11,广东工业大学计算机学院,21,问题复杂性与工作量关系 设问题x,表示它的复杂
9、性函数为C(x),解决它所需的工作量函数为E(x)。对于问题P1和P2;如果: C(P1)C(P2) 即P1比P2复杂,那么: E(P1)E(P2) 即问题越复杂,所需要的工作量越大。,2018/9/11,广东工业大学计算机学院,22,根据解决一般问题的经验,规律为: C(P1+P2)C(P1)+C(P2) 即一个问题同问题组合而成的复杂度大于分别考虑每个问题的复杂度之和。这样,可以推出: E(P1+P2)E(P1)+E(P2) 所得结果对于模块化和软件具有重要的意义。那么,从上面所得的不等式是否可以得出这样的结论: 如果把软件无限细分,那么最后开发软件所需要的工作量就小得可以忽略了。但是,事
10、实上,影响软件开发工作量的因素还有许多,2018/9/11,广东工业大学计算机学院,23,模块数目与软件成本,2018/9/11,广东工业大学计算机学院,24,5.4.4 软件体系结构,软件总体设计的主要任务就是软件结构的设计。软件体系结构(software architecture)包含了计算机程序的两个重要特性: (1)过程构件(模块)的层次结构。 (2)数据结构。,2018/9/11,广东工业大学计算机学院,25,结构化演化,2018/9/11,广东工业大学计算机学院,26,不同结构,2018/9/11,广东工业大学计算机学院,27,5.4.5 程序结构,程序结构(program str
11、ucture)给出了程序构件(模块)的组织(通常叫分层),这种组织包含了控制的层次。它们不给出软件的过程方面,如过程的序列、决策的出现或次序,或操作的重复等。,2018/9/11,广东工业大学计算机学院,28,结构专用名词,2018/9/11,广东工业大学计算机学院,29,5.4.6 数据结构,在软件体系结构的表达式中,数据结构与程序结构同样重要。数据结构决定信息的组织、存取方法、结合的程度,以及可选的处理方法。,2018/9/11,广东工业大学计算机学院,30,典型的数据结构,2018/9/11,广东工业大学计算机学院,31,当组织标量项作为一列或连接的组时,就形成一个顺序向量(sequen
12、tial vector)。向量是数据结构中最常用的。可看下面这个C语言程序段的例子: int aa100; procedure ps (int aa;int n;int sum) int i; ,2018/9/11,广东工业大学计算机学院,32,sum=0;for (i=1;i= n ;i+)sum=sum +aai; ; 例子中定义aa为100个标量整数项的顺序向量。在过程ps中标引aa的每个元素的存储,这样数据结构的每个元素都可按定义的顺序引用。,2018/9/11,广东工业大学计算机学院,33,5.4.7 软件过程,软件过程(software procedure),则侧重于每一个单独模块
13、的处理细节研究。过程必须提供精确的事件的顺序、确切的抉择点、重复的操作,以及数据的组织与结构处理规格说明。,2018/9/11,广东工业大学计算机学院,34,一个模块内的过程,2018/9/11,广东工业大学计算机学院,35,过程的分层,2018/9/11,广东工业大学计算机学院,36,5.5 体系结构设计,软件体系结构设计(architectural design)的主要目标是设计一个模块化的程序结构。体系结构设计融合了程序结构和数据结构,接口定义能使数据流经程序。要给出各个模块之间的控制关系。,2018/9/11,广东工业大学计算机学院,37,5.5.1 软件结构图,软件结构图是软件系统的
14、模块层次结构,反映了整个系统的功能实现,即将来程序的控制层次体系。 软件结构往往用树状或网状结构的图形来表示。 1. 模块 用方框表示,并用名字标识该模块,名字应体现该模块的功能。 2. 模块的控制关系 两个模块间用单向箭头或直线连接起来表示它们的控制关系。,2018/9/11,广东工业大学计算机学院,38,3. 模块间的信息传递 模块间还经常用带注释的短箭头表示模块调用过程中来回传递的信息。 模块间的控制关系及信息传递,2018/9/11,广东工业大学计算机学院,39,4. 两个附加符号 表示模块有选择调用或循环调用,2018/9/11,广东工业大学计算机学院,40,5. 结构图的形态特征,
15、2018/9/11,广东工业大学计算机学院,41,结构图的形态特征包括: (1)深度:指结构图控制的层次,即模块的层数。 (2)宽度:指一层中最大的模块个数。 (3)扇出:指一个模块直接下属模块的个数。 (4)扇入:指一个模块直接上属模块的个数。,2018/9/11,广东工业大学计算机学院,42,6. 画结构图应注意的事项 (1)同一名字的模块在结构图中仅出现一次。 (2)调用关系只能从上到下。 (3)不严格表示模块的调用次序,习惯上从左到右。,2018/9/11,广东工业大学计算机学院,43,5.5.2 模块的大小,前面在讨论模块设计的原理时,已经知道一个系统应当由若干个模块构成。其目的是为
16、了降低系统的复杂度。 模块设计的准则不应该是语句的多少,而应当是模块是否是一个独立的功能。,2018/9/11,广东工业大学计算机学院,44,5.5.3 扇出和扇入与深度和宽度,由结构图的形态特征可以知道,一个系统的大小和系统的复杂程度在一定程度上可以用深度和宽度表示。 大量的系统研究表明,认为高层模块应有较高的扇出,低层模块特别是底层模块应有较高的扇入。扇入越大,表示该模块被更多的上级模块共享。多个扇入入口相同,这就避免了程序的重复,因此希望扇入高一点。但过多又可能是把许多不相关的功能硬凑在一起,形成通用模块,这样的模块必然是低聚合的。,2018/9/11,广东工业大学计算机学院,45,扇出实际上是对问题解的分解,2018/9/11,广东工业大学计算机学院,46,2018/9/11,广东工业大学计算机学院,47,5.5.4 模块的耦合,耦合(Coupling)表示软件结构内不同模块彼此之间相互依赖(连接)的紧密程度,是衡量软件模块结构质量好坏的度量,是对模块独立性的直接衡量指标。 耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。,