第五章总体设计.docx
- 文档编号:7162024
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:23
- 大小:719.84KB
第五章总体设计.docx
《第五章总体设计.docx》由会员分享,可在线阅读,更多相关《第五章总体设计.docx(23页珍藏版)》请在冰豆网上搜索。
第五章总体设计
第五章总体设计
一、总体设计概述
1、软件设计概述
一旦软件需求确定之后,就进入开发阶段。
开发阶段由三个互相关联的步骤组成:
设计、实现(编码)和测试。
每个步骤都按某种方式进行信息变换,最后得到有效的计算机软件。
其中“设计”活动是获取高质量、低耗费、易维护软件的一个最重要环节。
可行性分析--Why?
Doornot?
Who?
需求分析--What?
设计--Howdo?
在软件需求分析阶段已经完全弄清楚了软件的各种需求,较好地解决了所开发软件要“做什么”的问题,并已在软件需求规格说明中详尽和充分地阐明了这些需求。
下一步就要着手实现软件的需求,即要着手解决“怎么做”这个软件的问题。
总体设计(概要设计)--将软件需求转化为软件的数据结构和
系统结构,确定各组成成分(子系统或模块)之间的相互关系
设计
详细设计--确定每个模块内部的算法和数据结构,产生描述
各模块处理过程的详细文档。
在技术上,概要设计和详细设计又由若干活动组成,除上述的软件结构设计、数据结构设计和过程设计外,对现代应用软件,还应该包括一个独立的界面设计。
2、总体设计的任务
划分出组成系统的物理元素--程序、文件、数据库、人工过程和文档等等。
但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。
设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
3、总体设计的必要性
可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。
二、总体设计的过程
典型的总体设计过程包含以下两个阶段,共9个步骤:
系统设计阶段,确定系统的物理实现方案
(1)设想供选择的方案
在设想供选择方案时,以需求分析得到的数据流图为出发点,画出自动化边界(回顾),形成不同的实现的物理方案。
P6
(2)选取合理的方案P7
(3)推荐最佳方案P8
结构设计阶段,确定软件的结构
(4)功能分解,从实现的角度细化逻辑模型P10
(5)设计软件结构P11
(6)设计数据库P12
(7)制定测试计划P12
(8)书写文档P13~14
(9)审查和复审P14
三、模块化设计原理
是软件设计过程中应遵循的基本原理和相关概念。
包括:
模块化、抽象、逐步求精、信息隐藏和局部化、模块独立。
1、模块与模块化
模块是软件中可独立命名和编制的部件,每个部件称为一个模块,当把所有模块组装到一起时,便可获得满足问题需要的一个解。
按照模块的定义,过程、函数、子程序和宏等,都可作为模块。
面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。
模块是构成程序的基本构件。
模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能,满足用户的需求。
模块化的依据:
C(P1+P2)>C(P1)+C(P2);E(P1+P2)>E(P1)+E(P2)
C为问题的复杂度,E为解题需要的工作量。
P16
这个不等式导致“各个击破”的结论--把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。
这就是模块化的根据。
模块化与软件成本:
P18~P19
导致一个结论:
应该模块化,但不能过分模块化。
模块间关系:
层次关系、通信关系----软件结构是模块化的和分层次的
层次关系
通信关系
2、抽象与逐步求精
抽象就是抽出事物的本质特性(共性),而暂时不考虑它们的细节。
抽象是人类认识复杂现象和解决复杂问题时使用的思维方法,是控制复杂性的基本策略。
抽象要求人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节。
抽象的特点P22
(1)忽略细节和差异
(2)分层理解问题(3)自顶向下分解模块
逐步求精最初是由NiklausWirth提出的一种自顶向下的设计策略。
按照这种设计策略,程序的体系结构是通过逐步精化处理过程的层次结构而设计出来的。
通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。
软件工程过程的每一步都是对软件解法的抽象层次的一次精化;P23
随着软件开发工程的推进,在软件结构每一层中的模块,表示了对软件抽象层次的一次精化。
抽象与求精是一对互补的概念。
抽象代表有些细节放到更底的层次去考虑;求精代表在设计过程中低层逐步揭示出其高层的细节。
抽象使得设计者能够简要说明过程和数据,同时忽略低层细节;求精则帮助设计者在设计过程中逐步揭示出低层细节。
----在软件设计中,我们在一层的模块中考虑软件设计的一些细节,而将另一部分软件细节放到更底的层次去考虑
3、信息隐藏与局部化
信息隐藏(细节隐藏)
(1)信息隐藏原理指出:
设计和确定模块时,应使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的;
(2)模块对其它模块隐藏模块内部的数据和过程,独立模块间仅仅交换为完成系统功能而必须交换的信息;
(3)提高模块的独立性,减少修改或维护时的影响面
局部化
是指把一些关系密切的软件元素物理地放得彼此靠近。
在模块中使用局部数据元素是局部化的一个例子。
显然,局部化有助于实现信息隐藏。
----软件模块设计时信息隐藏很重要。
4、模块的独立性
模块的独立性是指软件系统中每个模块完成一个相对独立的子功能,并且与其他模块之间关系很简单。
独立的模块
(1)比较容易开发,
(2)比较容易维护。
因此在设计软件结构时,应充分考虑模块的独立性。
模块独立性的衡量指标是耦合和内聚:
耦合(Coupling)
:
是对软件结构内不同模块之间相互关联程度的强弱的度量。
它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口传递。
模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。
在设计软件时应追求尽可能松散耦合的系统。
如果模块间联系较少,错误在模块间传播的可能性也随之变小。
耦合度可以分为若干级别:
(1)非直接耦合--两个模块没有直接关系(如模块1和模块2),每一个都能独立地工作而不需要另一个模块的存在。
非直接耦合两个模块间的独立性最强。
非直接耦合
(2)数据耦合--两个模块彼此间通过参数交换信息,而且交换的信息仅仅是简单的数据。
这属于松散耦合。
(3)标记耦合--两个模块通过传递数据结构参数加以联系(不是简单数据,而是记录、数组等),或都与一个数据结构有关系,则称这两个模块间存在标记偶合。
数据耦合标记耦合
(4)特征耦合--把整个数据结构作为参数传递,而被调用的模块只需要使用其中一部分数据元素。
P37
(5)控制耦合--一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。
控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。
去除模块间控制耦合的方法:
a.将被调用模块内的判定上移到调用模块中进行
b.被调用模块分解成若干单一功能模块
控制耦合公共环境耦合
(6)外部耦合--一组模块都访问同一全局简单变量,而且不是通过参数传递该全局变量的信息。
(7)公共环境耦合--两个或多个模块通过一个公共数据环境相互作用。
公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。
P37-38
公共环境偶合必不可少,但耦合模块的数目应尽量少。
(8)内容耦合--P39
内容耦合
模块化设计原则
以上给出了几种耦合类型,这只是从耦合的机制上所做的分类,按耦合的强弱程度的排列只是相对的关系。
但它给设计人员在设计程序结构时提供了一决策准则。
实际上,开始时两个模块之间的耦合不只是一种类型,而是多种类型的混合。
这就要求设计人员按照实际情况进行分析、比较和分析,逐步加以改进,以提高模块的独立性。
耦合是影响软件复杂程度的一个重要因素。
应该采取下述设计原则:
尽量使用数据耦合,少量使用控制耦合和特征耦合,限制公共环境耦合的范围,完全不允许内容耦合,最终降低模块间接口的复杂性。
内聚(Cohesion):
标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
高内聚:
模块内部完成单一的处理;低内聚:
模块内部各部分关联不紧密,完成分散的多个处理任务;设计时应该力争做到高内聚。
内聚度也可以分为若干级别:
(1)偶然内聚--当模块内各部分之间没有联系,或者即使有联系,这种联也很松散,则称这种模块为偶然内聚模块,它的内聚程度最低。
(2)逻辑内聚--把几种相关功能或逻辑上相似的功能组合在一个模块内,每次调用由传给模块的参数确定执行哪种功能。
(3)时间内聚--一个模块包含若干的任务必须在同一段时间内执行。
例如系统初始化模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块。
(4)过程内聚--一个模块内的处理元素是相关的且仅有控制联系,各处理元素必须以特定次序执行。
(5)通信内聚--模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据。
(6)顺序内聚--一个模块内的处理元素既包含数据联系也包含控制联系,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)。
(7)功能内聚--一个模块中各个部分都是完成某单一功能必不可少的组成部分,或者说该模块中所有部分都是为了完成同一项具体功能而协同工作,紧密联系,不可分割的,则称该模块为功能内聚模块。
功能内聚是最高程度的内聚。
功能内聚信息内聚
信息内聚--这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。
这个模块将根据不同的要求,确定该执行哪一个功能。
由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。
信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。
即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。
设计原则:
设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚很坏,不要使用。
耦合、内聚、模块独立性间的关系:
耦合,描述两个或多个模块之间的相互关联程度;内聚,描述一个模块内部各处理元素之间的互关联程度。
耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。
内聚与耦合密切相关。
同其它模块强耦合的模块意味着它自己是弱内聚的;强内聚模块意味着与其它模块间松散耦合。
所以设计的目标应该是力争高内聚、低耦合。
四、启发式规则(模块化设计的经验)P46~56
五、描绘软件结构的图形工具
1、层次图:
是用来描绘软件层次结构的图形工具。
一个矩形框代表一个模块,方框间的连线表示模块间的调用关系。
(注意它和其他类似工具的区别)
示例:
P58
特点:
图形清晰,能表明软件系统组成的模块关系,可粗略估算程序规模;但无法表明模块间的接口关系。
2、HIPO图:
即层次图+输入/处理/输出图,
由一张H图和一组IPO图组成。
H图,是给每个模块加上编号的层次图。
P60(关于1.0)、59
IPO图,一般采用图3.8(教材P69)形式。
要为H图中的每个模块画一张IPO图。
通常将HIPO图作为软件结构的描绘,列入设计文档。
3、结构图(SC):
描述了软件的模块结构,表示了一个系统的层次分解关系;反映了模块间的联系以及块内联系;反映了模块间的信息传递。
(1)组成元素:
A
方框,内有名称,表示模块;
直线,表示上层模块对下层模块的调用;
尾部带空心圆的箭头,表示按方向传递的数据信息;
尾部带实心圆的箭头,表示按方向传递的控制信息;
表示判定表示循环
(2)示例:
P63
(3)注意:
P66
(4)作用:
描述模块间参数交换情况、评价模块间耦合情况、确定模块间的接口。
结构图一般不列入设计文档,只用于设计阶段检查模块设计的正确性和模块独立性。
六、结构化设计(SD)方法(面向数据流的设计方法)
1、概述
SD是一种面向数据流的设计方法,是目前使用最广泛的一种软件设计方法,它可以和SA相衔接。
它给出了设计软件结构的一种系统化途径,它提出了“高内聚、低偶合”的评价模块结构质量的具体标准。
结构化设计是在模块化、自顶向下逐步细化、结构化程序设计等程序设计技术基础上发展起来的。
其基本思想是将系统设计成由相对独立、功能单一的模块组成的软件结构。
该方法实施的要点是:
(1)首先研究、分析和审查数据流图。
从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。
(2)根据数据流图确定数据处理的类型。
典型的类型有两种:
变换型和事务型。
针对两种不同类型分别进行分析处理。
(3)由数据流图推导出系统的初步的软件结构图。
(4)根据结构化设计的原则,利用一些启发式规则改进初步的软件结构图,直到得到符合要求的结构图为止。
(5)修改和补充数据字典。
(6)制定测试计划。
2、交换流与事物流
变换流事物流
SD方法把信息流(数据流图)映射成软件结构,信息流的类型决定了映射的方法。
DFD中的数据流可分为两类:
变换型数据流、事务型数据流;可转换为相应的软件结构:
变换型结构、事务型结构。
变换流与变换型结构
(1)变换流:
信息沿输入通路流入系统(输入流),同时由外部形式变换成内部形式;进入系统的信息通过变换中心,经加工处理;处理后的数据再沿输出通路变换成外部形式流出系统(输出流)。
(2)变换型结构:
变换流的数据流图基本呈线性特征,明显地分为输入、变换(加工)和输出三部分。
事物流与事务型结构
(1)事物流
一个事务项(输入的数据),经事务中心(处理)触发成一些处理分支。
对于一个特定的事务,只触发一个分支。
事物中心的任务是:
接收输入数据;
分析每个事务以确定它的类型;
根据事务类型在若干条活动通路中选取一条。
(2)事务型结构
事物流的数据流图呈辐射状特征,有一个输入通路、一个事务中心和多个处理、输出通路。
在数据流图中变换流和事务流两种结构往往是并存。
事物型结构混合结构
3、SD的一般步骤
4、在系统结构图中的模块
传入模块--从下属模块取得数据,经过某些处理,再将其传送给上级模块。
它传送的数据流叫做逻辑输入数据流。
传出模块--从上级模块获得数据,进行某些处理,再将其传送给下属模块。
它传送的数据流叫做逻辑输出数据流。
变换模块--它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。
它加工的数据流叫做变换数据流。
协调模块--对所有下属模块进行协调和管理的模块。
5、变换分析----从变换流到变换型结构的映射过程
(1)~(3)P76~77
(4)确定输入流和输出流的边界,从而孤立出变换中心;
(5)完成第一级分解,输入流映射成输入模块,变换部分映射成变换(处理)模块,输出流映射成输出模块;顶层增加主控协调模块;
(6)完成第二级分解,从变换中心的边界开始
,沿输入流外推,先遇到的为上级模块;沿输出流外推,先遇到的为上级模块;变换部分变为水平模块;
第二级分解后的SC图
(7)得到完整的SC图和对应的层次图,变换完成后,对每个模块进行简要的说明。
数据流图
对应的层次图
稍复杂一点的映射例子:
P109-110
模块的说明:
P85-86
(8)根据模块独立性原则和启发式规则,对得到的软件结构进一步优化。
对以上得到的软件结构进行模块分解或组合,让模块尽可能高的内聚、尽可能松散的耦合,最重要的是,要得到一个易于实现、易于测试和易于维护的软件结构。
P110~111图5.16~5.19
6、事物分析----从事物流到事物型结构的映射过程
基本步骤与变换分析相同(前三步相同),只是由数据流图到软件结构的变换方法不同:
第一级分解,输入通路映射为接收模块、事务中心直接变换为调度模块、每个输出通路映射成一个动作模块,另加一个主控模块;输入分支的第二级分解与变换流的方法类似;对输出分支进行第二级分解(每个分支进行下一级的变换分析或事物分析);
第一级分解
第二级分解
书上的例子:
P95
注意:
P96
模块说明:
为每一个模块写一份处理说明(IPO图)、为每一个模块提供一份接口说明、确定全局数据结构和局部数据结构、指出所有的设计约束和限制。
关于分层数据流图转换为软件结构图的方法
*7、设计的优化:
我们努力追求的设计应该是既满足功能和性能的要求,又符合软件设计原理和启发式设计规则。
对软件结构的修改越早越好。
必要时,可以并行地开发若干个软件结构,通过评比,求得“最佳”结果。
结构优化是一个精益求精的过程。
优化过程可以在设计的早期,也还要延续到详细设计乃至编码阶段。
简洁的程序结构容易测试、容易维护,应该使用尽可能少的模块;只要满足信息要求,应该使用尽可能简单的数据结构。
对时间有特殊要求的软件,应根据普遍存在的“百分之二十规则”(即20%的代码占用80%的处理时间,80%的错误出自20%的代码)采用下述对策:
(1)在不考虑时、空耗费的情况下,设计并精化软件结构;
(2)借用CASE工具模拟分析运行时的性能,定位出低效的部分,加以改进;
(3)详细设计时对最耗时的模块,认真地设计它们的处理过程(算法),以便减少时间的开销;
(4)尽量用高级语言编程以利于软件的优化;
(5)对大量占用计算机系统资源的模块必要时用低级语言重新编码,以提高效率。
设计优化的格言----“先让它干起来,再让它快起来”。
七、总体设计需书写的文档
1、总体设计说明
主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,各模块的模块说明(用IPO图或其他工具简要描述的各个模块的算法,模块间的接口关系等,见上面),以及需求、功能和模块三者之间的交叉参照关系等等。
2、用户手册
根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。
3、测试计划
包括测试策略,测试方案,预期的测试结果,测试进度计划等等。
4、详细的实现计划
5、数据库设计结果
文档书写提示:
1引言
1.1简介(对整个设计说明作综述)
1.2编写目的(本设计说明的编写目的与阅读对象)
1.3定义(提供正确理解本设计说明所必须的术语、缩写词和简写的定义)
1.4参考资料(列举编写本设计说明时所参考的资料或其它资源)
2系统概述
2.1软件的功能概述
在此说明本软件包含哪些主要功能模块,并对每个模块的主要功能进行文字说明。
在此引入分析精化的功能级数据流图,作为设计的起点。
2.2系统总体的处理流程,例如:
✧系统启动时激活身份验证模块;
✧通过身份验证后进行相应的系统初始化。
根据系统配置文件将数据库导入,并设置各全局变量;
✧系统进入消息循环状态,通过事件驱动机制激活各功能模块,并在指定模块中运行;
✧各功能模块执行完毕后重新进入消息循环状态;
✧由关闭系统事件激活关闭系统模块,退出系统。
3概要设计结果
3.1软件层次图(H图)
3.2模块分解说明
对H图中的每个模块进行模块说明(卡片形式的IPO图),包括:
模块名称、编号、局部数据、内部处理过程说明、接口设计、设计约束和限制。
3.3出错处理设计
✧出错输出信息:
描述系统可能出现的错误信息。
用表格方式说明各种可能的错误或故障出现时,系统输出的信息、含义及处理方法。
✧出错补救措施:
说明错误或故障出现时,可采用的补救措施,如性能降级、恢复及再启动等。
✧系统恢复设计:
描述当系统出现错误和异常时,如何使系统恢复到正常状态。
3.4安全保密设计
说明软件的哪些地方要设安全保密处理,如何处理(数据备份、密码管理等等)。
3.5模块间的相互依赖关系
说明哪些模块间有相互同步(合作)或互斥的关系。
3.6维护设计
说明为方便维护工作而采取的措施。
4数据库设计结果
根据前期设计结果,设计出数据库,表结构、表间关系;全局数据;数据间的相互依赖和制约关系。
5外部接口设计
5.1硬件平台
用系统流程图描述最终选择的系统物理实现方案(物理模型),用表格形式对物理模型中元素的规格逐一进行说明。
5.2软件环境
说明操作系统平台、数据库及其他软件工具,与其他软件组件的正确连接。
5.3主控用户交互界面
6系统中需求、功能和模块三者之间的交叉参照关系(复审时使用)
……
参考概要设计说明书(GB8567—2006)
八、本阶段工作总结
1、精化数据流图
2、根据数据流图,划分边界,用系统流程图描述系统的物理模型,对模型中的元素逐一进行说明
3、根据数据流图,用变换分析和事务分析的方法,将数据流图转换成软件结构图(层次图或结构图)
4、按照模块化设计的原则、启发式规则等,对得到的软件结构图进行优化
5、用IPO图或其他工具简要描述的各个模块的算法
6、描述模块间的接口关系
7、制定、修改测试计划
本章作业P1141、3-(3)
对自选项目进行总体设计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 总体 设计