您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 总结/报告 > 软件开发与应用-第5章 总体设计
软件开发与应用胡俊敏Email:wingoner@126.com2009.2集美大学工商管理学院信息管理与信息系统系第四章回顾概述有穷状态机Petri网Z语言(略)小结本章导读第五章总体设计•设计过程•设计原理•启发规则•描绘软件结构的图形工具•面向数据流的设计方法•小结总体设计总体设计(或概要设计)是系统开发过程中很关键的一步。系统的质量及一些整体特性基本上是这一步决定的。系统越大,总体设计的影响越大。认为各个局部都很好,组合起来就一定好的想法是不实际的。5.1设计过程总体设计通常由两个主要阶段组成:系统设计阶段:确定系统的具体实现方案。结构设计阶段:确定软件结构。典型的总体设计过程包括以下9个步骤:设想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构设计数据库制定测试计划书写文档审查和复审5.1设计过程5.2设计原理-模块化模块化:把程序分解成独立命名且可以独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。模块化可以使软件结构清晰,易设计,易理解;模块化使软件容易测试和调试,提高软件的可靠性;模块化提高软件的可修改性;模块化有助于软件开发工程的组织管理。模块化模块化和软件成本模块数目成本成本/模块接口成本软件总成本最小成本区抽象人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。忽略细节,分层理解问题,自顶向下层层加细。软件工程过程的每一步都是对软件解法的抽象层次的一次精化。抽象的例子例:开发一个CAD软件,实现一个二维绘图系统的全部功能,供低级计算机辅助设计使用。抽象层次I:用问题所处环境的术语来描述这个软件。该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现……。抽象层次II:任务需求的描述。列出“What”而不是“How”。CADSOFTWARETASKS:userinteractiontask;2-Ddrawingcreationtask;graphicsdisplaytask;drawingfilemanagementtask;END抽象层次III:程序过程表示。以2-D绘图生成任务为例:PROCEDURE2-DdrawingcreationREPEATUNTILE(drawingcreationtaskterminates)DOWHILE(digitizerinteractionoccurs)Digitizerinterfacetask;DETERMINEdrawingrequestCASELine:linedrawingtask;Rectangle:rectangledrawingtask;Circle:circledrawingtask;……END;DOWHILE(keyboardinteractionoccurs)keyboardinteractiontask;PROCESSanalysis/computationCASEView:auxiliaryviewtask;Section:crosssectioningtask;……END;……ENDREPETITION;ENDPROCEDURE.逐步求精逐步求精实际上是细化过程。逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(7±2)个知识块上。逐步求精方法的作用在于,能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上,而忽略其它细节。抽象与逐步求精抽象与逐步求精是一对互补的概念。•抽象是通过忽略多余的细节同时强调有关的细节;•求精则帮助设计者在设计过程中逐步揭示出低层细节。信息隐藏和局部化信息隐藏:一个模块内部包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。局部化:把一些关系密切的软件元素物理地放得彼此靠近。局部化有助于实现信息隐藏。模块独立模块独立:每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。模块独立性很重要:•有效的模块化的软件易开发;•独立的模块易测试和维护。系统模块化原理⑴耦合(Coupling)GreatdealofdependenceIndependentHighlycoupledLooselycoupledUncoupledGoal:aslooseaspossible=asindependentaspossible独立性的度量:耦合(Coupling)&内聚(Cohesion)(Yourdon&Constantine,1978)模块化原理例1:A访问C的内部数据或不通过正常入口而转入C的内部。……ABCDA:……………………gotoC1……………………C:……………………C1:…………独立性由弱到强排列为:内容耦合(ContentCoupling):Onemodulemodifiesanother.模块化原理例2:部分代码重叠(常出现在汇编程序中)BA例3:一个模块有多个入口(功能)A:………………………………entry1:………………………………entry2:………………………………Theleastdesirable模块化原理模块化原理公共耦合(Commoncoupling):Dataareaccessiblefromacommondatastore.Global:V1V2A:……………………A1=V1+V2……………………B:……………………V1=B1……………………Global:V1V2A:……………………V1++……………………B:……………………V2=B1+V1……………………问题:公共部分的改动将影响所有调用它的模块;公共部分的数据存取无法控制;复杂程度随耦合模块的个数增加而增加。模块化原理控制耦合(Controlcoupling):Onemodulepassesparameterstocontroltheactivityofanothermodule.ABFlagF2F1Fn…………Flag接口单一,但仍然影响被控模块的内部逻辑。数据耦合(Datacoupling):Onlydataarepassed.Itiseasytotracedataandmakechanges.Themostdesirable.原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合。模块化原理低内聚:巧合内聚(Coincidentalcohesion):Unrelatedfunctions,processes,ordataarefoundinthesamemodule(forconvenience).A:Readinputsfromdiskfromtapefrom……逻辑内聚(Logicalcohesion):Logicallyrelatedfunctionsordataareplacedinthesamemodule.例如:⑵内聚(Cohesion):Theelementsofamodulearedirectedtoperformthesametask.Goal:ascohesiveaspossible.模块化原理时间内聚(Temporalcohesion):Thefunctionsarerelatedonlybythetiminginvolved.例如:系统的初始化问题:不同功能混在一个模块中,有时共用部分编码,使局部功能的修改牵动全局。中内聚:过程内聚(Proceduralcohesion):Functionsaregroupedtogetherinamoduletoensureacertainorderofperformance.例如:enterdatacheckdatamanipulatedata模块化原理通信内聚(Communicationalcohesion):Allthefunctionsinamoduleoperateonorproducethesamedataset.例如:从同一磁带上读取不相干的数据——可能破坏独立性。高内聚:顺序内聚(Sequentialcohesion):Theoutputfromonepartofamoduleistheinputtothenextpart.功能内聚(Functionalcohesion):Everyprocessingelementisessentialtotheperformanceofasinglefunction.5.3启发规则2.模块规模适中:过大不易理解;太小则接口开销过大。注意分解后不应降低模块的独立性。3.适当控制——深度=分层的层数。过大表示分工过细。宽度=同一层上模块数的最大值。过大表示系统复杂度大。1.争取低耦合、高内聚(增加内聚减少耦合)提高模块独立性启发式规划扇出=一个模块直接调用\控制的模块数。3fan-out9AA的扇出AA的扇入扇入=直接调用该模块的模块数在不破坏独立性的前提下,fan-in大的比较好。启发式规划4、作用域在控制域内控制域MACBM的控制域为{M,A,B,C}作用域:M中的一个判定所影响的模块。例如:A:…………if……thengotoB1……………………B:……………………B1:……………………作用域在控制域内A:…………if……thengotoM1……………………M:……………………M1:gotoC1……………………作用域超出了控制域上例中A的作用超出了控制域。改进方法之一,可以把A中的if移到M中;方法之二,可以把C移到A下面。启发式规划5、降低接口的复杂程度:接口复杂可能表明模块的独立性差。6、单出单入,避免内容耦合。7、模块功能可预测——相同输入必产生相同输出。反例:模块中使用全局变量或静态变量,则可能导致不可预测。5.4绘软件结构的图形工具层次图:描绘软件的层次结构;适于在自顶向下设计软件的过程中使用。HIPO图:由IBM公司发起并逐渐完善起来的一种工具。由系统分析阶段产生数据流图,经转换和优化形成系统模块结构图的过程中,产生大量的模块,开发者应为每个模块写一份说明。HIPO图HIPO图中的输入/输出来源或终止与相关模块、文件及系统外部项,并需在数据字典中描述。局部数据项是指本模块内部使用的数据,与系统的其他部分无关,仅有本模块定义、存储和使用。注释是对本模块有关问题做必要的说明。结构图结构图和层次图类似,也是描绘软件结构的图形工具。结构图的基本符号:绘制范例:结构图5.5面向数据流的设计方法目标:给出设计软件结构的一个系统化的途径。设计方法:把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流的类型:变换流和事务流变换流信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。事务流数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。上图中的处理T称为事务中心,它完成下述任务:(1)接收输入数据(输入数据又称为事务);(2)分析每个事务以确定它的类型;(3)根据事务类型选取一条活动通路。面向数据流方法的设计过程精化数据流图映射成事务结构区分事务中心和数据接收通路区分输入和输出分支映射成变换结构用启发式设计规则精化软件结构导出接口描述和全程数据结构详细设计流类型复查事务分析变换分析错误“事务”“变换”正确变换分析找出系统的主加工:通常在数据流图中多股
本文标题:软件开发与应用-第5章 总体设计
链接地址:https://www.777doc.com/doc-3370279 .html