软件工程课件第4章-_第1页
软件工程课件第4章-_第2页
软件工程课件第4章-_第3页
软件工程课件第4章-_第4页
软件工程课件第4章-_第5页
已阅读5页,还剩147页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

总体设计

总体的基本目的就是回答:“概括地说,系统应该如何实现?”。

总体设计总体的基本目的就是回答:“概括地说,系统应该如何在软件开发时期中,设计阶段是最富有活力、最需要发挥创造精神的阶段。在软件需求分析阶段,已搞清楚了软件“做什么”的问题,并把这些需求通过规格说明书描述了出来,这也是目标系统的逻辑模型。在软件开发时期中,设计阶段是最富有活力、最需

进入了设计阶段,要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中,所以软件设计是一个把软件需求转换为软件表示的过程,最初这种表示只是描述了软件的总体的体系结构,称为软件总体设计或结构设计。然后对结构进一步细化,称为详细设计或结构设计。进入了设计阶段,要把软件“做什么”的逻总体设计4.1总体设计的过程4.2软件设计的概念和原理4.3启发式规则4.4图形工具4.5面向数据流的设计方法4.6小结总体设计

软件设计在开发阶段

中的重要性总体设计要着手实现软件的需求,即要着手解决“怎么做”的问题。基本目的:就是回答“概括地说,系统应该如何实现?”这个问题。软件设计在开发阶段

中的重要性总体设计要着手实现软件的需求

重要任务:设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。重要任务:设计软件的结构,也就是要确定系统中每个程序是由哪4.1总体设计的过程想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构数据库设计制定测试计划书写文档审查和复审

4.1总体设计的过程想供选择的方案软件设计的任务基本任务:1、设计软件系统结构(简称软件结构)为了实现目标系统,最终必须设计出组成这个系统的所有程序和数据库(文件),对于程序,则首先进行结构设计,具体为:软件设计的任务基本任务:结构设计(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。(2)确定每个模块的功能。(3)确定模块之间的调用关系。(4)确定模块之间的接口,即模块之间传递的信息。(5)评价模块结构的质量。结构设计(1)采用某种设计方法,将一个复杂的系统按功能划分成从以上内容看,软件结构的设计是以模块为基础的,在需求分析阶段,已经把系统分解成层次结构。设计阶段,以需求分析的结果为依据,从实现的角度进一步划分为模块,并组成模块的层次结构。从以上内容看,软件结构的设计是以模块为基础的

软件结构的设计是总体设计关键的一步,直接影响到下一阶段详细设计与编码的工作。软件系统的质量及一些整体特性都在软件结构的设计中决定。因此应由经验丰富的软件人员担任,采用一定的设计方法,选取合理设计的方案。软件结构的设计是总体设计关键的一步,直接影2、数据结构及数据库设计对于大型数据处理的软件系统,除了控制结构的模块设计外,数据结构与数据库设计也是重要的。(1)数据结构的设计。逐步细化的方法也适用于数据结构的设计。2、数据结构及数据库设计对于大型数据处理的软(2)数据库设计。指数据存储文件的设计,主要进行以下几方面设计:①概念设计。在数据分析的基础上,采用自底向上的方法从用户角度进行视图设计,一般用ER模型来表示数据模型,这是一个概念模型。②逻辑设计。③物理设计。(2)数据库设计。指数据存储文件的设计,主要进行以下几方面设3.编写总体设计文档主要有:(1)总体设计说明书。(2)数据库设计说明书,主要给出所使用的DBMS简介、数据库的概念模型、逻辑设计、结果。(3)用户手册,对需求分析阶段编写的用户手册进行补充。(4)修订测试计划,对测试策略、方法、步骤提出明确要求。3.编写总体设计文档主要有:(1)总体设计说明书。(2)数据4.评审最后应该对总体设计的结果进行严格的技术审查和复审,这是在所有步骤中必不可少的,但也是最容易忽视的,请大家勿必注意到这一步。4.评审最后应该对总体设计的结果进行严格的技术审查和复审,这4.2软件设计的概念和原理4.2.1模块化4.2.2抽象4.2.3信息隐蔽和局部化4.2.4模块独立

4.2软件设计的概念和原理4.2.1模块化

4.2.1模块(module)化模块:在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素,如高级语言中的过程、函数、子程序等等。在软件的体系结构中,模块是可组合、分解和更换的单元。模块具有以下几种基本属性:接口:指模块的输入与输出。功能:指模块实现什么功能。逻辑:描述内部如何实现要求的功能及所需的数据。4.2.1模块(module)化模块:在程序中是数据说明、状态:该模块的运行环境,即模块的调用与被调用关系。功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。模块化:指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。模块化是软件解决复杂问题所具备的手段,为了说明这一点,可将问题的复杂性和工作量的关系进行推理。状态:该模块的运行环境,即模块的调用与被调用关系。设问题x,表示它的复杂性函数为C(x),解决它所需要的工作量函数为E(x)。对于问题P1和P2,如果C(P1)>C(P2)即P1比P2复杂那么E(P1)>E(P2)即问题越复杂,所需要的工作量越大。根据解决一般问题的经验,规律是:C(P1+P2)>C(P1)+C(P2)即一个问题由两个问题组合而成的复杂度大于分别考虑每个问题的复杂度之和。这样,可推出:E(P1+P2)>E(P1)+E(P2)由此可见,开发一个大而复杂的软件系统,将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本,提高软件生产率,这就是模块化的依据。设问题x,表示它的复杂性函数为C(x),解决它所需要的工作量模块化和软件成本如果无限地分割软件,最后为了开发软件而需要的工作量也就小得可以忽略了?当模块数目增加时每个模块将减小,开发单个模块需要的成本(工作量)确实减小了;但是随着模块数目增加,设计模块间接口所需要的工作量将增加。模块化和软件成本如果无限地分割软件,最后为了开发软件而需要的4.2.2抽象

抽象:是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节,不考虑其它因素。

4.2.2抽象4.2.3信息隐蔽和局部化信息隐蔽:把系统分解为模块时应该遵守的指导思想,在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。4.2.3信息隐蔽和局部化信息隐藏的目的是为了提高模块的独立性,当修改或维护模块时减少把一个模块错误扩散到其它模块中去的机会。信息隐藏的目的是为了提高模块的独立性,当修改或维护模块时减少4.2.4模块独立性(moduleindependence)

模块独立性:概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准。坚持模块的独立性,一般认为是获得良好设计的关键。每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。4.2.4模块独立性(moduleindependence1、耦合性(coupling)也称块间的联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。(1)非直接耦合(NoDirectCoupling)。没有信息传递(2)数据耦合(DataCoupling)。参数:简单变量(3)特征耦合(StampCoupling)。参数:数据结构返回1、耦合性(coupling)返回耦合性(coupling)(4)控制耦合(ControlCoupling)。传递:开关量、标志等(5)外部耦合(ExternalCoupling).访问一个全局量。(6)公共耦合(CommonCoupling)。访问的是全局变量或数据结构等(7)内容耦合(ContentCoupling)。直接调用另一模块的数据或直接转移到另一模块中去。耦合性(coupling)(4)控制耦合(Contr

123456弱耦合中耦合较强耦合强耦合弱 强模块间的耦合

123456弱耦合2、内聚性(cohesion)又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高,内聚性有以下几种类型:2、内聚性(cohesion)(1)偶然性内聚(CoincidentalCohesion):块内各组成成份在功能上是互不相关的。(2)逻辑内聚(LogicalCohesion):通常由若干个逻辑功能相似的成份组成。(3)时间内聚(TemporalCohesion):这类模块所含的成分,是由相同的执行时间将它们联结到一起的。(1)偶然性内聚(CoincidentalCohesion巧合内聚(CoincidentalCohesion)

巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。巧合内聚(CoincidentalCohesion)逻辑内聚(LogicalCohesion)

这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。逻辑内聚(LogicalCohesion)

这种模块把几种时间内聚(ClassicalCohesion)

时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。时间内聚(ClassicalCohesion)

时间内聚又(4)过程性内聚(proceduralcohesion):当一个模块中包含的一组任务必需按照某一特定的次序执行时,就称为过程性模块。(5)通信内聚(CommunicationalCohesion):这类模块的标志是,模块内部的各个成份都使用同一个输入数据,或者产生同一个输出数据。它们借公用数据而联系在一起,故称为通讯性内聚。(4)过程性内聚(proceduralcohesion)过程内聚(ProceduralCohesion)

使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。过程内聚(ProceduralCohesion)通信内聚(CommunicationCohesion)

如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。通信内聚(CommunicationCohesion)

软件工程课件第4章-信息内聚(InformationalCohesion)

这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。信息内聚(InformationalCohesion)软件工程课件第4章-信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的(6)顺序内聚(SequentialCohesion):这类模块中的各组成部分是顺序执行的。在通常情况下,一个处理框的输出就是下一个处理框的输入。(7)功能内聚(FunctionalCohesion):在这类模块中,所有的成份结合在一起,用于完成一个单一的功能。(6)顺序内聚(SequentialCohesion):这功能内聚(FunctionalCohesion)

一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。功能内聚(FunctionalCohesion)

一个模“一个模块,一个功能”,已成为模块化设计的一条准则,也是设计人员争取的目标。“一个模块,一个功能”,已成为模块化设计的一条准则,也是设计1234567低内聚中内聚高内聚

弱强模块内聚1234567返回4.3启发式规则改进软件结构提高模块独立性模块规模应该适中深度、宽度、扇入和扇出都应适当模块的作用域应该在控制域之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测返回4.3启发式规则4.3.1改进软件结构提高模块独立性划分模块时尽量做到高内聚,低耦合,保持模块相对独立性,并以此原则优化初始的软件结构。(1)如果若干模块之间耦合强度过高,每个模块内功能不复杂,可将它们合并,以减少信息的传递和公共区的引用。(2)若有多个相关模块,应对它们的功能进行分析,消去重复功能。4.3.1改进软件结构提高模块独立性划分模块时尽量做到高内聚4.3.2模块规模应该适中在考虑模块的独立性同时,为了增加可理解性,模块的大小最好在50-150条语句左右,可以用1-2页打印纸打印,便于人们阅读与研究。4.3.2模块规模应该适中在考虑模块的独立性同时,为了增加模块的大小要适中

模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50~100左右,保持在一页纸之内,最多不超过500行。模块的大小要适中

模块的大小,可以用模块中所含语句的数量的多4.3.3深度、宽度、扇入和扇出都应适当深度是软件结构设计完成后观察到的情况,能粗略地反映系统的规模和复杂程度,宽度也能反映系统的复杂情况。宽度与模块扇出有关,一个模块的扇出太多,说明本模块过分复杂,缺少中间层。单一功能模块的扇入数大比较好,说明本模块为上层几个模块共享的共用模块,重用率高。但是不能把彼此无关的功能凑在一起形成一个通用的超级模块,虽然它扇入高,但低内聚。因此非单一功能的模块扇入高时应重新分解,以消除控制耦合的情况。软件结构从形态上,总的考虑是顶层扇出数较高一些,中间层扇出数较低一些,底层扇入数较高一些。4.3.3深度、宽度、扇入和扇出都应适当深度是软件结构设计程序的系统结构图程序的系统结构图4.3.4模块的作用域应该在控制域之内一个模块的作用范围应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。

在软件结构中,由于存在着不同事务处理的需要,某一层上的模块会存在着判断处理,这样可能影响其他层的模块处理。为了保证含有判定功能模块的软件设计的质量,引入了模块的作用范围(或称影响范围)与控制范围的概念。

一个模块的作用范围指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。4.3.4模块的作用域应该在控制域之内一个模块的作用范围应在模块的作用范围应在控制范围之内

模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。

模块的作用范围应在控制范围之内软件工程课件第4章-4.3.5力争降低模块接口的复杂程度模块的接口要简单、清晰、含义明确,便于理解,易于实现、测试与维护。4.3.5力争降低模块接口的复杂程度模块的接口要简单、清晰、

4.3.6设计单入口单出口的模块模块间不要出现内容耦合。这也是结构化设计的一个要求。4.3.6设计单入口单出口的模块

4.3.7模块功能应该可以预测只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。带有内部“存储器”的模块的功能可能是不可预测的,因为它的输出可能取决于内部存储器(例如某个标记)的状态。4.3.7模块功能应该可以预测4.4图形工具4.4.1层次图和HIPO图4.4.2结构图4.4图形工具4.4.1层次图和HIPO图4.4.1层次图和HIPO图层次图(SC)用来描绘软件的层次结构。SC图是SD方法在总体设计中使用的主要工具,用来显示软件的组成模块及其调用关系。层次图中的一个矩形代表一个模块,用带箭头的连线表示模块间的调用关系。在调用线的两旁,应标出传入和传出模块的数据流。1、模块2、调用关系3、传入/传出数据流HIPO图(HierarchyPlusInput/Processing/Output)是美国IBM公司70年代发展起来的表示软件系统结构的工具。它既可以描述软件总的模块层次结构――H图,又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况――IPO图。4.4.1层次图和HIPO图层次图(SC)用来描绘软件的层4.4.2结构图SC图是用来显示软件的组成模块及其调用关系。SD方法约定,用矩形来表示模块,用带箭头的连线表示模块间的调用关系。在调用关系的两旁,应标出传入和传出模块的数据流。(1)模块的表示符号下图显示了SC图允许使用的6种模块。其中传入、传出和变换模块用来组成变换结构中的各个相应部分。源模块是不调用其它模块的传入模块,只用于传入部分的始端。漏模块是不调用其它模块的传出模块,仅用于传出部分的末端。控制模块是只调用其它模块,不受其它模块调用的模块。4.4.2结构图SC图是用来显示软件的组成模块及其调用关系A)传入B)

传出C)变换D)源E)

漏F)

控制

(1)简单调用(2)选择调用

(3)循环调用

A)传入结构图结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模块间信息的传递结构图结构图反映程序中模块之间的层次调用关系和联系:它以特定①模块:模块用矩形框表示,并用模块的名字标记它。①模块:模块用矩形框表示,并用模块的名字标记它。②模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。②模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用③模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块③模块间的信息传递:当一个模块调用另一个模块时,调用模块把④在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。④在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调

4.5面向数据流的设计方法4.5.1概念4.5.2变换分析4.5.3事务分析4.5面向数据流的设计方法4.5.1概念返回1、变换流

传入路径:afferentpath变换中心:transformcenter传出路径:efferentpath2、事务流一条接受路径:receptionpath一个事务中心:transactioncenter若干条动作路径:actionpath变换中心事务中心返回1、变换流变换中心事务中心在系统结构图中的模块传入模块─从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。传出模块─从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。在系统结构图中的模块传入模块─从下属模块取得数据,经过某变换模块─它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。协调模块─对所有下属模块进行协调和管理的模块。变换模块─它从上级模块取得数据,进行特定的处理,转换成其4.5.2变换分析变换分析方法由以下四步组成:重画数据流图;区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;进行一级分解,设计上层模块;进行二级分解,设计输入、输出和中心变换部分的中、下层模块。4.5.2变换分析变换分析方法由以下四步组成:变换型系统结构图变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、中心变换和输出等三部分组成。变换型系统结构图变换型数据处理问题的工作过程大致分为三步,即软件工程课件第4章-4.4.3事务分析

在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。4.4.3事务分析

在很多软件应用中,存在某种作业数据流,

4.5.4软件模块结构的改进消除重复功能,改善软件结构

完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。

②局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。4.5.4软件模块结构的改进消除重复功能,改善软件结构

①消除重复功能,改善软件结构

完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。

②局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。消除重复功能,改善软件结构

①完全相似:在结构上完全相似,软件工程课件第4章-总体设计

总体的基本目的就是回答:“概括地说,系统应该如何实现?”。

总体设计总体的基本目的就是回答:“概括地说,系统应该如何在软件开发时期中,设计阶段是最富有活力、最需要发挥创造精神的阶段。在软件需求分析阶段,已搞清楚了软件“做什么”的问题,并把这些需求通过规格说明书描述了出来,这也是目标系统的逻辑模型。在软件开发时期中,设计阶段是最富有活力、最需

进入了设计阶段,要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中,所以软件设计是一个把软件需求转换为软件表示的过程,最初这种表示只是描述了软件的总体的体系结构,称为软件总体设计或结构设计。然后对结构进一步细化,称为详细设计或结构设计。进入了设计阶段,要把软件“做什么”的逻总体设计4.1总体设计的过程4.2软件设计的概念和原理4.3启发式规则4.4图形工具4.5面向数据流的设计方法4.6小结总体设计

软件设计在开发阶段

中的重要性总体设计要着手实现软件的需求,即要着手解决“怎么做”的问题。基本目的:就是回答“概括地说,系统应该如何实现?”这个问题。软件设计在开发阶段

中的重要性总体设计要着手实现软件的需求

重要任务:设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。重要任务:设计软件的结构,也就是要确定系统中每个程序是由哪4.1总体设计的过程想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构数据库设计制定测试计划书写文档审查和复审

4.1总体设计的过程想供选择的方案软件设计的任务基本任务:1、设计软件系统结构(简称软件结构)为了实现目标系统,最终必须设计出组成这个系统的所有程序和数据库(文件),对于程序,则首先进行结构设计,具体为:软件设计的任务基本任务:结构设计(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。(2)确定每个模块的功能。(3)确定模块之间的调用关系。(4)确定模块之间的接口,即模块之间传递的信息。(5)评价模块结构的质量。结构设计(1)采用某种设计方法,将一个复杂的系统按功能划分成从以上内容看,软件结构的设计是以模块为基础的,在需求分析阶段,已经把系统分解成层次结构。设计阶段,以需求分析的结果为依据,从实现的角度进一步划分为模块,并组成模块的层次结构。从以上内容看,软件结构的设计是以模块为基础的

软件结构的设计是总体设计关键的一步,直接影响到下一阶段详细设计与编码的工作。软件系统的质量及一些整体特性都在软件结构的设计中决定。因此应由经验丰富的软件人员担任,采用一定的设计方法,选取合理设计的方案。软件结构的设计是总体设计关键的一步,直接影2、数据结构及数据库设计对于大型数据处理的软件系统,除了控制结构的模块设计外,数据结构与数据库设计也是重要的。(1)数据结构的设计。逐步细化的方法也适用于数据结构的设计。2、数据结构及数据库设计对于大型数据处理的软(2)数据库设计。指数据存储文件的设计,主要进行以下几方面设计:①概念设计。在数据分析的基础上,采用自底向上的方法从用户角度进行视图设计,一般用ER模型来表示数据模型,这是一个概念模型。②逻辑设计。③物理设计。(2)数据库设计。指数据存储文件的设计,主要进行以下几方面设3.编写总体设计文档主要有:(1)总体设计说明书。(2)数据库设计说明书,主要给出所使用的DBMS简介、数据库的概念模型、逻辑设计、结果。(3)用户手册,对需求分析阶段编写的用户手册进行补充。(4)修订测试计划,对测试策略、方法、步骤提出明确要求。3.编写总体设计文档主要有:(1)总体设计说明书。(2)数据4.评审最后应该对总体设计的结果进行严格的技术审查和复审,这是在所有步骤中必不可少的,但也是最容易忽视的,请大家勿必注意到这一步。4.评审最后应该对总体设计的结果进行严格的技术审查和复审,这4.2软件设计的概念和原理4.2.1模块化4.2.2抽象4.2.3信息隐蔽和局部化4.2.4模块独立

4.2软件设计的概念和原理4.2.1模块化

4.2.1模块(module)化模块:在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素,如高级语言中的过程、函数、子程序等等。在软件的体系结构中,模块是可组合、分解和更换的单元。模块具有以下几种基本属性:接口:指模块的输入与输出。功能:指模块实现什么功能。逻辑:描述内部如何实现要求的功能及所需的数据。4.2.1模块(module)化模块:在程序中是数据说明、状态:该模块的运行环境,即模块的调用与被调用关系。功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。模块化:指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。模块化是软件解决复杂问题所具备的手段,为了说明这一点,可将问题的复杂性和工作量的关系进行推理。状态:该模块的运行环境,即模块的调用与被调用关系。设问题x,表示它的复杂性函数为C(x),解决它所需要的工作量函数为E(x)。对于问题P1和P2,如果C(P1)>C(P2)即P1比P2复杂那么E(P1)>E(P2)即问题越复杂,所需要的工作量越大。根据解决一般问题的经验,规律是:C(P1+P2)>C(P1)+C(P2)即一个问题由两个问题组合而成的复杂度大于分别考虑每个问题的复杂度之和。这样,可推出:E(P1+P2)>E(P1)+E(P2)由此可见,开发一个大而复杂的软件系统,将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本,提高软件生产率,这就是模块化的依据。设问题x,表示它的复杂性函数为C(x),解决它所需要的工作量模块化和软件成本如果无限地分割软件,最后为了开发软件而需要的工作量也就小得可以忽略了?当模块数目增加时每个模块将减小,开发单个模块需要的成本(工作量)确实减小了;但是随着模块数目增加,设计模块间接口所需要的工作量将增加。模块化和软件成本如果无限地分割软件,最后为了开发软件而需要的4.2.2抽象

抽象:是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节,不考虑其它因素。

4.2.2抽象4.2.3信息隐蔽和局部化信息隐蔽:把系统分解为模块时应该遵守的指导思想,在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。4.2.3信息隐蔽和局部化信息隐藏的目的是为了提高模块的独立性,当修改或维护模块时减少把一个模块错误扩散到其它模块中去的机会。信息隐藏的目的是为了提高模块的独立性,当修改或维护模块时减少4.2.4模块独立性(moduleindependence)

模块独立性:概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准。坚持模块的独立性,一般认为是获得良好设计的关键。每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。4.2.4模块独立性(moduleindependence1、耦合性(coupling)也称块间的联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。(1)非直接耦合(NoDirectCoupling)。没有信息传递(2)数据耦合(DataCoupling)。参数:简单变量(3)特征耦合(StampCoupling)。参数:数据结构返回1、耦合性(coupling)返回耦合性(coupling)(4)控制耦合(ControlCoupling)。传递:开关量、标志等(5)外部耦合(ExternalCoupling).访问一个全局量。(6)公共耦合(CommonCoupling)。访问的是全局变量或数据结构等(7)内容耦合(ContentCoupling)。直接调用另一模块的数据或直接转移到另一模块中去。耦合性(coupling)(4)控制耦合(Contr

123456弱耦合中耦合较强耦合强耦合弱 强模块间的耦合

123456弱耦合2、内聚性(cohesion)又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高,内聚性有以下几种类型:2、内聚性(cohesion)(1)偶然性内聚(CoincidentalCohesion):块内各组成成份在功能上是互不相关的。(2)逻辑内聚(LogicalCohesion):通常由若干个逻辑功能相似的成份组成。(3)时间内聚(TemporalCohesion):这类模块所含的成分,是由相同的执行时间将它们联结到一起的。(1)偶然性内聚(CoincidentalCohesion巧合内聚(CoincidentalCohesion)

巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。巧合内聚(CoincidentalCohesion)逻辑内聚(LogicalCohesion)

这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。逻辑内聚(LogicalCohesion)

这种模块把几种时间内聚(ClassicalCohesion)

时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。时间内聚(ClassicalCohesion)

时间内聚又(4)过程性内聚(proceduralcohesion):当一个模块中包含的一组任务必需按照某一特定的次序执行时,就称为过程性模块。(5)通信内聚(CommunicationalCohesion):这类模块的标志是,模块内部的各个成份都使用同一个输入数据,或者产生同一个输出数据。它们借公用数据而联系在一起,故称为通讯性内聚。(4)过程性内聚(proceduralcohesion)过程内聚(ProceduralCohesion)

使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。过程内聚(ProceduralCohesion)通信内聚(CommunicationCohesion)

如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。通信内聚(CommunicationCohesion)

软件工程课件第4章-信息内聚(InformationalCohesion)

这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。信息内聚(InformationalCohesion)软件工程课件第4章-信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的(6)顺序内聚(SequentialCohesion):这类模块中的各组成部分是顺序执行的。在通常情况下,一个处理框的输出就是下一个处理框的输入。(7)功能内聚(FunctionalCohesion):在这类模块中,所有的成份结合在一起,用于完成一个单一的功能。(6)顺序内聚(SequentialCohesion):这功能内聚(FunctionalCohesion)

一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。功能内聚(FunctionalCohesion)

一个模“一个模块,一个功能”,已成为模块化设计的一条准则,也是设计人员争取的目标。“一个模块,一个功能”,已成为模块化设计的一条准则,也是设计1234567低内聚中内聚高内聚

弱强模块内聚1234567返回4.3启发式规则改进软件结构提高模块独立性模块规模应该适中深度、宽度、扇入和扇出都应适当模块的作用域应该在控制域之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测返回4.3启发式规则4.3.1改进软件结构提高模块独立性划分模块时尽量做到高内聚,低耦合,保持模块相对独立性,并以此原则优化初始的软件结构。(1)如果若干模块之间耦合强度过高,每个模块内功能不复杂,可将它们合并,以减少信息的传递和公共区的引用。(2)若有多个相关模块,应对它们的功能进行分析,消去重复功能。4.3.1改进软件结构提高模块独立性划分模块时尽量做到高内聚4.3.2模块规模应该适中在考虑模块的独立性同时,为了增加可理解性,模块的大小最好在50-150条语句左右,可以用1-2页打印纸打印,便于人们阅读与研究。4.3.2模块规模应该适中在考虑模块的独立性同时,为了增加模块的大小要适中

模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50~100左右,保持在一页纸之内,最多不超过500行。模块的大小要适中

模块的大小,可以用模块中所含语句的数量的多4.3.3深度、宽度、扇入和扇出都应适当深度是软件结构设计完成后观察到的情况,能粗略地反映系统的规模和复杂程度,宽度也能反映系统的复杂情况。宽度与模块扇出有关,一个模块的扇出太多,说明本模块过分复杂,缺少中间层。单一功能模块的扇入数大比较好,说明本模块为上层几个模块共享的共用模块,重用率高。但是不能把彼此无关的功能凑在一起形成一个通用的超级模块,虽然它扇入高,但低内聚。因此非单一功能的模块扇入高时应重新分解,以消除控制耦合的情况。软件结构从形态上,总的考虑是顶层扇出数较高一些,中间层扇出数较低一些,底层扇入数较高一些。4.3.3深度、宽度、扇入和扇出都应适当深度是软件结构设计程序的系统结构图程序的系统结构图4.3.4模块的作用域应该在控制域之内一个模块的作用范围应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。

在软件结构中,由于存在着不同事务处理的需要,某一层上的模块会存在着判断处理,这样可能影响其他层的模块处理。为了保证含有判定功能模块的软件设计的质量,引入了模块的作用范围(或称影响范围)与控制范围的概念。

一个模块的作用范围指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。4.3.4模块的作用域应该在控制域之内一个模块的作用范围应在模块的作用范围应在控制范围之内

模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。

模块的作用范围应在控制范围之内软件工程课件第4章-4.3.5力争降低模块接口的复杂程度模块的接口要简单、清晰、含义明确,便于理解,易于实现、测试与维护。4.3.5力争降低模块接口的复杂程度模块的接口要简单、清晰、

4.3.6设计单入口单出口的模块模块间不要出现内容耦合。这也是结构化设计的一个要求。4.3.6设计单入口单出口的模块

4.3.7模块功能应该可以预测只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。带有内部“存储器”的模块的功能可能是不可预测的,因为它的输出可能取决于内部存储器(例如某个标记)的状态。4.3.7模块功能应该可以预测4.4图形工具4.4.1层次图和HIPO图4.4.2结构图4.4图形工具4.4.1层次图和HIPO图4.4.1层次图和HIPO图层次图(SC)用来描绘软件的层次结构。SC图是SD方法在总体设计中使用的主要工具,用来显示软件的组成模块及其调用关系。层次图中的一个矩形代表一个模块,用带箭头的连线表示模块间的调用关系。在调用线的两旁,应标出传入和传出模块的数据流。1、模块2、调用关系3、传入/传出数据流HIPO图(HierarchyPlusInput/Processing/Output)是美国IBM公司70年代发展起来的表示软件系统结构的工具。它既可以描述软件总的模块层次结构――H图,又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况――IPO图。4.4.1层次图和HIPO图层次图(SC)用来描绘软件的层4.4.2结构图SC图是用来显示软件的组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论