下载

5下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 第5章 总体设计 - 张志旺

第5章 总体设计 - 张志旺.ppt

第5章 总体设计 - 张志旺

懿妧嫕
2011-04-19 0人阅读 举报 0 0 暂无简介

简介:本文档为《第5章 总体设计 - 张志旺ppt》,可适用于IT/计算机领域

第章总体设计第章总体设计设计过程设计原理启发规则描绘软件结构的图形工具面向数据流的设计方法作业总体设计的基本目的就是回答“概括地说系统应该如何实现”总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素程序、文件、数据库、人工过程和文档等等。另一项重要任务是设计软件的结构也就是要确定系统中每个程序是由哪些模块组成的以及这些模块相互间的关系。在全局高度上花较少成本从较抽象的层次上分析对比多种可能的系统实现方案和软件结构从中选出最佳方案和最合理的软件结构从而用较低成本开发出较高质量的软件系统。设计过程设计过程总体设计过程通常由两个主要阶段组成:系统设计阶段确定系统的具体实现方案结构设计阶段确定软件结构。典型的总体设计过程包括下述个步骤:设想可供选择的方案选取合理的方案通常至少选取低成本、中等成本和高成本的三种方案。对每个合理的方案分析员都应该准备下列份资料:()系统流程图()组成系统的物理元素清单()成本效益分析()实现这个系统的进度计划。推荐最佳方案功能分解设计软件结构设计数据库制定测试计划书写文档审查和复审设计原理模块化设计原理模块化模块是由边界元素限定的相邻程序元素(例如数据说明可执行的语句)的序列而且有一个总体标识符代表它。模块是构成程序的基本构件。模块化就是把程序划分成独立命名且可独立访问的模块每个模块完成一个子功能把这些模块集成起来构成一个整体可以完成指定的功能满足用户的需求。设函数C(x)定义问题x的复杂程度函数E(x)确定解决问题x需要的工作量(时间)。对于两个问题P和P如果C(P)>C(P)显然E(P)>E(P)根据人类解决一般问题的经验另一个有趣的规律是C(PP)>C(P)C(P)也就是说如果一个问题由P和P两个问题组合而成那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。综上所述得到下面的不等式E(PP)>E(P)E(P)这个不等式导致“各个击破”的结论把复杂的问题分解成许多容易解决的小问题原来的问题也就容易解决了。如果无限地分割软件当模块数目增加时每个模块的规模将减小开发单个模块需要的成本(工作量)确实减少了但是随着模块数目增加设计模块间接口所需要的工作量也将增加。采用模块化原理可以使软件结构清晰不仅容易设计也容易阅读和理解。程序的错误通常局限在有关的模块及它们之间的接口中所以模块化使软件容易测试和调试因而有助于提高软件的可靠性。变动往往只涉及少数几个模块所以模块化能够提高软件的可修改性。模块化也有助于软件开发工程的组织管理一个复杂的大型程序可以由许多程序员分工编写不同的模块并且可以进一步分配技术熟练的程序员编写困难的模块。抽象抽象人们在实践中认识到在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来暂时忽略它们之间的差异这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。考虑对任何问题的模块化解法时可以提出许多抽象的层次。软件工程过程的每一步都是对软件解法的抽象层次的一次精化。逐步求精和模块化的概念与抽象是紧密相关的。逐步求精逐步求精逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”逐步求精之所以如此重要是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(±)个知识块上。逐步求精方法的强大功能在于:它能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上而忽略那些对整体解决方案来说虽然是必要的然而目前还不需要考虑的细节这些细节将留到以后再考虑。求精实际上是细化过程。抽象与求精是一对互补的概念。信息隐藏和局部化信息隐藏和局部化信息隐藏原理:应该这样设计和确定模块使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的。局部化是指把一些关系密切的软件元素物理地放得彼此靠近。在模块中使用局部数据元素是局部化的一个例子。显然局部化有助于实现信息隐藏。模块独立模块独立模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。开发具有独立功能而且和其他模块之间没有过多的相互作用的模块就可以做到模块独立。为什么模块的独立性很重要呢第一有效的模块化(即具有独立的模块)的软件比较容易开发出来。第二独立的模块比较容易测试和维护。总之模块独立是好设计的关键而设计又是决定软件质量的关键环节。模块的独立程度可以由两个定性标准度量:内聚和耦合。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度内聚衡量一个模块内部各个元素彼此结合的紧密程度。以下分别详细阐述。在软件设计中应该追求尽可能松散耦合的系统。模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。如果两个模块彼此间通过参数交换信息而且交换的信息仅仅是数据那么这种耦合称为数据耦合。如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现)则这种耦合称为控制耦合。数据耦合是低耦合。一般说来一个系统内可以只包含数据耦合。控制耦合是中等程度的耦合它增加了系统的复杂程度。控制耦合往往是多余的在把模块适当分解之后通常可以用数据耦合代替它。当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时就出现了特征耦合。当两个或多个模块通过一个公共数据环境相互作用时它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。公共环境耦合的复杂程度随耦合的模块个数而变化当耦合的模块个数增加时复杂程度显著增加。如果只有两个模块有公共环境那么这种耦合有下面两种可能:()一个模块往公共环境送数据另一个模块从公共环境取数据。这是数据耦合的一种形式是比较松散的耦合。()两个模块都既往公共环境送数据又从里面取数据这种耦合比较紧密介于数据耦合和控制耦合之间。如果两个模块共享的数据很多都通过参数传递可能很不方便这时可以利用公共环境耦合。最高程度的耦合是内容耦合。如果出现下列情况之一两个模块间就发生了内容耦合:、模块不通过正常入口而转到另一个模块的内部、两个模块有一部分程序代码重叠(只可能出现在汇编程序中)一个模块有多个入口(这意味着一个模块有几种功能)。应该坚决避免使用内容耦合。总之软件的设计原则:尽量使用数据耦合少用控制耦合和特征耦合限制公共环境耦合的范围完全不用内容耦合。内聚和耦合是密切相关的模块内的高内聚往往意味着模块间的松耦合。低内聚有如下几类:如果一个模块完成一组任务这些任务彼此间即使有关系关系也是很松散的就叫做偶然内聚。如果一个模块完成的任务在逻辑上属于相同或相似的一类则称为逻辑内聚。如果一个模块包含的任务必须在同一段时间内执行就叫时间内聚。中内聚主要有两类:如果一个模块内的处理元素是相关的而且必须以特定次序执行则称为过程内聚。如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据则称为通信内聚。高内聚也有两类:如果一个模块内的处理元素和同一个功能密切相关而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)则称为顺序内聚。如果模块内所有处理元素属于一个整体完成一个单一的功能则称为功能内聚。功能内聚是最高程度的内聚。耦合和内聚的概念是Constantine,Yourdon,Myers和Stevens等人提出来的。按照他们的观点如果给上述七种内聚的优劣评分将得到如下结果:功能内聚分时间内聚分顺序内聚分逻辑内聚分通信内聚分偶然内聚分过程内聚分启发规则启发规则人们在开发计算机软件的长期实践中积累了丰富的经验总结这些经验得出了一些启发式规则。下面介绍几条启发式规则。改进软件结构提高模块独立性模块规模应该适中深度、宽度、扇出和扇入都应适当模块的作用域应该在控制域之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测描绘软件结构的图形工具层次图和HIPO图描绘软件结构的图形工具层次图和HIPO图层次图用来描绘软件的层次结构。层次图的形式和描绘数据结构的层次方框图相同但是表现的内容却完全不同。层次图中的一个矩形框代表一个模块方框间的连线表示调用关系而不像层次方框图那样表示组成关系。下图是层次图的一个例子。正文加工系统的层次图层次图很适于在自顶向下设计软件的过程中使用。HIPO图是美国IBM公司发明的“层次图加输入处理输出图”的英文缩写。为了能使HIPO图具有可追踪性在H图(层次图)里除了最顶层的方框之外每个方框都加了编号。编号规则和数据流图的编号规则相同。带编号的层次图(H图)结构图结构图Yourdon提出的结构图是进行软件结构设计的另一个有力工具。结构图和层次图类似也是描绘软件结构的图形工具图中一个方框代表一个模块框内注明模块的名字或主要功能方框之间的箭头(或直线)表示模块的调用关系。在结构图中通常还用带注释的箭头表示模块调用过程中来回传递的信息。如果希望进一步标明传递的信息是数据还是控制信息则可以利用注释箭头尾部的形状来区分:尾部是空心圆表示传递的是数据实心圆表示传递的是控制信息。下图是结构图的一个例子。图结构图的例子产生最佳解的一般结构面向数据流的设计方法面向数据流的设计方法面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。在软件工程的需求分析阶段信息流是一个关键考虑通常用数据流图描绘信息在系统中加工和流动的情况。面向数据流的设计方法定义了一些不同的“映射”利用这些映射可以把数据流图变换成软件结构。通常所说的结构化设计方法(简称SD方法)也就是基于数据流的设计方法。概念概念面向数据流的设计方法把信息流映射成软件结构信息流的类型决定了映射的方法。信息流有下述两种类型。变换流信息沿输入通路进入系统同时由外部形式变换成内部形式进入系统的信息通过变换中心经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时这种信息流就叫作变换流。变换流事务流当数据流图具有“以事务为中心的”的特征也就是说数据沿输入通路到达一个处理T这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流称为事务流。事务中心完成下述任务:()接收输入数据(输入数据又称为事务)()分析每个事务以确定它的类型()根据事务类型选取一条活动通路。事务流变换分析变换分析变换分析是一系列设计步骤的总称经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。下面通过一个例子说明变换分析的方法。例子我们已经开始进入“智能”产品时代。在这类产品中把软件做在只读存储器中成为设备的一部分从而使设备具有某些“智能”。因此这类产品的设计都包含软件开发的任务。作为面向数据流的设计方法中变换分析的例子考虑汽车数字仪表板的设计。假设的仪表板将完成下述功能:()通过模数转换实现传感器和微处理机接口()在发光二极管面板上显示数据()指示每小时英里数(mph)行驶的里程每加仑油行驶的英里数(mpg)等等()指示加速或减速()超速警告:如果车速超过英里小时则发出超速警告铃声。在软件需求分析阶段应该对上述每条要求以及系统的其他特点进行全面的分析评价建立起必要的文档资料特别是数据流图。设计步骤第步复查基本系统模型。复查的目的是确保系统的输入数据和输出数据符合实际。第步复查并精化数据流图。应该对需求分析阶段得出的数据流图认真复查并且在必要时进行精化。不仅要确保数据流图给出了目标系统的正确的逻辑模型而且应该使数据流图中每个处理都代表一个规模适中相对独立的子功能。第步确定数据流图具有变换特性还是事务特性。一般地说一个系统中的所有信息流都可以认为是变换流但是当遇到有明显事务特性的信息流时建议采用事务分析方法进行设计。在这一步设计人员应该根据数据流图中占优势的属性确定数据流的全局特性。此外还应该把具有和全局特性不同的特点的局部区域孤立出来以后可以按照这些子数据流的特点精化根据全局特性得出的软件结构。第步确定输入流和输出流的边界从而孤立出变换中心。输入流和输出流的边界和对它们的解释有关也就是说不同设计人员可能会在流内选取稍微不同的点作为边界的位置。当然在确定边界时应该仔细认真但是把边界沿着数据流通路移动一个处理框的距离通常对最后的软件结构只有很小的影响。第步完成“第一级分解”。软件结构代表对控制的自顶向下的分配所谓分解就是分配控制的过程。对于变换流的情况数据流图被映射成一个特殊的软件结构这个结构控制输入、变换和输出等信息处理过程。位于软件结构最顶层的控制模块Cm协调下述从属的控制功能:输入信息处理控制模块Ca,协调对所有输入数据的接收变换中心控制模块Ct,管理对内部形式的数据的所有操作输出信息处理控制模块Ce协调输出信息的产生过程。下图意味着一个三叉的控制结构但是对一个大型系统中的复杂数据流可以用两个或多个模块完成上述一个模块的控制功能。应该在能够完成控制功能并且保持好的耦合和内聚特性的前提下尽量使第一级控制中的模块数目取最小值。图第一级分解的方法对于数字仪表板的例子第一级分解得出的结构如下图所示。每个控制模块的名字表明了为它所控制的那些模块的功能。第步完成“第二级分解”。所谓第二级分解就是把数据流图中的每个处理映射成软件结构中一个适当的模块。完成第二级分解的方法是从变换中心的边界开始沿着输入通路向外移动把输入通路中每个处理映射成软件结构中Ca控制下的一个低层模块然后沿输出通路向外移动把输出通路中每个处理映射成直接或间接受模块Ce控制的一个低层模块最后把变换中心内的每个处理映射成受Ct控制的一个模块。下图表示进行第二级分解的普遍途径。第二级分解的方法对于数字仪表板系统的例子第二级分解的结果分别用图和描绘。这张图表示对软件结构的初步设计结果。虽然图中每个模块的名字表明了它的基本功能但是仍然应该为每个模块写一个简要说明描述:未经精化的输入结构对于数字仪表板系统的例子第二级分解的结果分别用如下三幅图来描绘。未经精化的变换结构未经精化的输出结构第步使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。对第一次分割得到的软件结构总可以根据模块独立原理进行精化。为了产生合理的分解得到尽可能高的内聚、尽可能松散的耦合最重要的是为了得到一个易于实现、易于测试和易于维护的软件结构应该对初步分割得到的模块进行再分解或合并。具体到数字仪表板的例子对于从前面的设计步骤得到的软件结构还可以做许多修改。精化后的数字仪表板系统的软件结构事务分析事务分析虽然在任何情况下都可以使用变换分析方法设计软件结构但是在数据流具有明显的事务特点时也就是有一个明显的“发射中心”(事务中心)时还是以采用事务分析方法为宜。事务分析的设计步骤和变换分析的设计步骤大部分相同或类似主要差别仅在于由数据流图到软件结构的映射方法不同。由事务流映射成的软件结构包括一个接收分支和一个发送分支。映射出接收分支结构的方法和变换分析映射出输入结构的方法很相像即从事务中心的边界开始把沿着接收流通路的处理映射成模块。发送分支的结构包含一个调度模块它控制下层的所有活动模块然后把数据流图中的每个活动流通路映射成与它的流特征相对应的结构。下图说明了上述映射过程。事务分析的映射方法设计优化设计优化考虑设计优化问题时应该记住“一个不能工作的‘最佳设计’的价值是值得怀疑的”。应该在设计的早期阶段尽量对软件结构进行精化。可以导出不同的软件结构然后对它们进行评价和比较力求得到“最好”的结果。()在不考虑时间因素的前提下开发并精化软件结构()在详细设计阶段选出最耗费时间的那些模块仔细地设计它们的处理过程(算法)以求提高效率()使用高级程序设计语言编写程序()在软件中孤立出那些大量占用处理机资源的模块()必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码以求提高效率。上述优化方法遵守了一句格言:“先使它能工作然后再使它快起来。”作业作业P

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/59

第5章 总体设计 - 张志旺

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利