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

下载本文档

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

文档简介

SOFTWARE

ENGINEERINGDesigningtheSystem

whatisdesign什么是设计?DesignisThecreativeprocesstotransformtheproblemintoasolutionThedescriptionofasolutionTwostagesofdesignConceptualDesignTechnicalDesign将问题转化成解决方案的创造性的活动对解决方案的的描述设计的两个阶段概念设计技术设计Conceptualdesign(1)

概念设计TellsthecustomerwhatthesystemwilldoAnswers:WherewillthedatacomefromWhatwillhappentothedatainthesystemWhatwillthesystemlookliketousersWhatchoiceswillbeofferedtousersWhatisthetimingofeventsWhatwillthereportsandscreenslooklike告诉顾客系统将要做什么(概念设计要回答以下问题)数据来自何地?系统中的数据会发生什么情况?系统对用户来说看起来什么样?能向用户提供什么选择?事件的时间安排如何?报告和屏幕看起来是什么样的?Conceptualdesign(2)

概念设计Characteristicsofgoodconceptualdesignincustomerlanguagewithnotechnicaljargondescribessystemfunctionsindependentofimplementationlinkedtorequirements好的概念设计的特征用顾客语言而不是技术术语描述系统的功能独立于实现与需求相关Technicaldesign

技术设计TellstheprogrammerswhatthesystemwilldoIncludes:majorhardwarecomponentsandtheirfunctionhierarchyandfunctionofsoftwarecomponentsdatastructuresdataflow告诉程序员系统将做什么(包括对以下条目的描述)主要硬件组件和功能软件组件的层次和功能数据结构数据流技术设计主要任务编写技术设计说明书:确定每个模块的算法,用工具表达算法的过程,写出模块的详细过程性描述。确定每一模块的数据结构。确定模块接口细节。技术(详细)设计是编码的先导。概念设计和技术设计概念和技术设计设计文档间的差异另一种分类:

概要设计和详细设计

概要设计将软件需求转化为数据结构和软件的系统结构,即系统的模块划分。详细设计通过对系统的结构表示(每个模块的内部工作)进行细化,得到软件的详细的数据结构和算法。软件概要设计过程

1、设想供选择的方案:需求分析阶段得出的数据流图是总体设计的极好的出发点。设想供选择方案的一种常用的方法是,考虑数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法(例如,组内不同处理的执行时间不相容),余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。软件概要设计过程

2、选取合理的方案:从一系列方案中选取若干个合理的方案,通常至少选取低成本、中等成本和高成本的3种方案。对每个合理的方案分析员都应该准备下列4份资料:

(1)系统流程图

(2)组成系统的物理元素清单

(3)成本/效益分析

(4)实现这个系统的进度计划软件概要设计过程

3、推荐最佳方案:分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划;用户和有关的技术专家应该认真审查分析员所推荐的最佳系统;使用部门负责人进一步审批;进入总体设计过程的下一个重要阶段——结构设计。软件概要设计过程

4、功能分解:对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成:结构设计:确定程序由哪些模块组成,以及这些模块之间的关系;是总体设计阶段的任务;过程设计:确定每个模块的处理过程;是详细设计阶段的任务。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。根据是数据流图。功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。软件概要设计过程

5、设计软件结构:通常程序中的一个模块完成一个适当的子功能。应该把模块组织成良好的层次系统。软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构。软件概要设计过程

6、设计数据库:在需求分析阶段所确定的系统数据需求的基础上,设计数据库。数据结构的设计从某种意义上讲是设计活动中最重要的一个。软件概要设计过程

7、制定测试计划:在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。软件概要设计过程

8、书写文档:

(1)系统说明:主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具(例如PDL语言)简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。

(2)用户手册:根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。

(3)测试计划:包括测试策略,测试方案,预期的测试结果,测试进度计划等等。

(4)详细的实现计划。

(5)数据库设计结果。软件概要设计过程

9、审查和复审:可追溯性、接口、风险、实用性、技术清晰度、可维护性、质量、各种选择方案、限制、其它具体问题。软件详细设计过程

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能的简明易懂。结构程序设计是实现上述目标的关键技术,是详细设计的逻辑基础。Fivewaystocreatedesigns

五种创建设计的方法ModularpositionData-orientedpositionEvent-orientedpositionOutside-indesignObject-orienteddesign模块分解将功能分配给组件面向数据的分解基于外部数据结构面向事件的分解基于系统必须处理的事件和事件改变系统的状态信息由外而内的设计基于系统的用户输入(属黑盒方法)OO设计确定对象的类和它们之间的相互关系Levelsofposition

分解的层次Modularity模块性theresultsofpositionformcompositepartscalledmodulesorcomponents.ModularWheneachactivityofthesystemisperformedbyexactlyonecomponent.Whentheinputsandoutputsofeachcomponentarewell-defined.分解结果形成的组成部分称模块或组件当系统的每一个活动正好由一个组件执行当每个组件的输入输出被明确定义模块化的Threedesignlevels

三种设计层次Architecture():associatessystemcomponentswithcapabilitiesCodedesign():specifiesalgorithmsanddatastructuresforeachcomponentExecutabledesign():lowestlevelofdesign,includingmemoryallocation,dataformats,bitpatterns系统性能与系统组件关联起来为每个组件详细说明算法和数据结构设计的最低级,包括内存分配、数据格式和位组合体系结构代码设计执行设计SoftwareArchitecturalStyle

软件体系结构的风格ThreeaspectsthataStyleinvolvesComponentsConnectorsConstraintsoncombiningcomponents风格包括三方面组件连接器(组件之间的联系)组件组合的限制条件Designstyles

设计风格PipesandfiltersObject-orienteddesignImplicitinvocationLayeringRepositoriesInterpretersProcesscontrolClient-server管道和过滤器OO设计隐含调用分层仓库解释器过程控制客户机/服务器Pipesandfilters

管道和过滤器连接器组件PipesandFiltersPropertiesExplicitrepresentationofinput/outputrelationEasyforreuse,modification(evolution)andsimulationConcurrentexecutingoffiltersLimitationsMoreappropriateforbatchprocessingRequirecorrespondencebetweendatastreamsPotentialduplicateoperationsperformedbyparallelfilters性质I/O关系表示明确复用、修改、模拟容易允许并发执行过滤器局限性更适合批处理(不适合交互式处理)数据流之间需要对应类似过滤器潜在的重复操作执行Object-orienteddesign

OO设计Component=ADTConnector=messagepassingCharacteristicPreservingtheintegrityofdatarepresentation(persistentobjects)Informationhiding(encapsulation)Combiningfunctionswithdata(抽象数据类型)信息传送保证数据表示的完整性信息隐藏(封装)功能与数据结合Implicitinvocation

隐含调用(eventdriven)Connector=eventComponent=eventhandlersOnecomponentannouncesevents,othercomponentshandlestheevent.Registertheproceduretohandletheevent某个组件宣告事件,其他组件处理事件注册程序处理事件Implicitinvocation(2)AdvantagesEasyreuseofcomponentsfromothersystemsEspeciallyusefulforuserinterfacesDrawbacksTheresponsetoaneventisnotcertainDifficultytotestthesystemforallpossiblesequencesofeventsCombineimplicitinvocationwithexplicitinvocation易于复用其他系统组件对用户界面尤其有用不能确定某个事件的响应测试系统很难隐含调用与显式调用相结合Layering分层Component=LayerConnector=proccallorprotocolLayerrelationshipsonelayerhasaccessonlytoadjacentlayersonelayerhasaccesstosomeorallotherlayers层的关系某层只能访问相邻的层某层能访问部分或全部其他层Layering(2)AdvantagesRepresentingdifferentlevelsofabstractionLayersmodificationusuallyaffectsonlythetwoadjacentlayersDrawbacksDifficultyIndefiningthemultiplelevelsofabstractionduringtherequirementstagesPerformanceissue表示不同的抽象层次对层的修改通常只影响相邻的两层需求阶段定义多层抽象很困难性能问题Repositories仓库TwotypesofcomponentsAcentraldatastoreAcollectionofindependentprocessesthatoperateonittostore,retrieve,andupdateinformationConnector=directaccessTwointeractionschemesTraditionaldatabaseInputstreamtriggerprocessexecutionBlackboardCentralstorecontrolsthetriggeringofprocessesComefromtheartificialintelligencecommunity两种组件中心数据存储进行存储、检索和更新信息操作独立过程直接数据存取(随机存取)两种交互方案传统数据库输入流触发过程执行黑板中心存储控制过程触发来自人工智能方面Repositories--blackboardacentraldatastore(blackboard)knowledgesources(agents)changingdata(state)incentraldatastorewilltriggeragentstoreact(respond)e.g.,patternrecognition数据存储中心知识源数据中心状态变换触发代理响应如,模式识别Interpreters

解释器ComponentInterpretationengine,e.g.,processorEnginestate,e.g.,registerProgram,e.g.,programinRAMProgramstate,e.g.,variablesinRAMConnector=directaccessAninterpretertakesastringofcharacters,andconvertsitintoactualcodethatisthenexecuted

Alwaysusedtobuildvirtualmachine解释器读入字符串并将它们转换成可以执行的实际代码.

一般用来构建虚拟机Processcontrol

过程控制Processcontrolsystemarecharacterizednotonlybythetypeofcomponent,butalsobytherelationshipsthatholdamongthem过程控制系统不仅由组件类型,而且由组件之间的关系刻画它的特征Client-server

客户机/服务器ClientRequestanactionoraserviceServerPerformstherequestsAdvantagesMostofdataandcomputationalpowerresideontheserverMultipleviewsofthesamedataDrawbacksMoresophisticatedsecurity,systemsmanagementandapplicationdevelopmentImportantdesignissues

重要的设计问题ModularityandlevelsofabstractionCollaborativedesignDesigningtheuserinterfacemetaphors,mentalmodel,navigationrules,lookandfeelculturalissuesuserpreferencesConcurrencyDesignpatternsandreuse模块性与抽象层次协作设计设计用户界面比喻、智力模型、导航规则、外表与感知文化问题用户爱好并发设计模式与复用ModularityandlevelsofabstractionModularityisacharacteristicofgooddesignModularcomponentsareorganizedinahierarchyastheresultofpositionorabstraction.ComponentsarearrangedinlevelsofabstractionModularityhidesdetailCombiningmodularcomponentswithseverallevelsofabstraction,wegetseveraldifferentviewsofthesystemExampleofabstraction

抽象的例子DOWHILEIisbetween1and(lengthofL)-1:SetLOWtoindexofsmallestvalueinL(I),...,L(lengthofL)InterchangeL(I)andL(LOW)ENDDORearrangeLinnon-decreasingorderCollaborationdesignFourstageindistributeddevelopment1.Aprojectisperformedatasinglesitewithon-sitedevelopersfromforeigncountries.2.On-siteanalystsdeterminethesystem’srequirements.Then,therequirementsareprovidedtooff-sitegroupsofdesignersandprogrammerstocontinuedevelopment.3.Off-sitedevelopersbuildgenericproductsandcomponentsthatareusedworldwide.4.Theoff-sitedevelopersbuildproductsthattakeadvantageoftheirindividualareasofexpertise.DesigningtheUserInterfaceAninterfaceshouldaddressseveralkeyelements:Metaphors:thefundamentalterms,images,andconceptsthatcanberecognizedandlearnedAmentalmodel:theorganizationandrepresentationofdata,functions,tasks,androlesLook:thecharacteristicsofthesystem’sappearancethatconveyinformationtotheuserFeel:theinteractiontechniquesthatprovideanappealingexperiencefortheuserConcurrencySynchronization:isamethodforallowingtwoactivitiestotakeplaceconcurrentlywithouttheirinterferingwithonanother.Mutualexclusion:isapopularwaytosynchronizeprocesses;itmakessurethatwhenoneprocessisaccessingadataelement,nootherprocesscanaffectthatelement.Iftwooperationscanaffectthestateofasharedobject,thentheyshouldbeexecutedusingamutualexclusionscheme.Monitor:isanabstractobjectorcomponentthatcontrolsthemutualexclusionofparticularprocess.Guardian:isataskthatisalwaysrunning;itsonlypurposeistocontrolaccesstoanencapsulatedresource.DesignPatternsanReuseWecantakeadvantageofthecommonalityamongsystems,soweneednotdevelopeach“fromscratch”.Apopularwayofidentifyingthecommonalitiesistolookfordesignpatterns.Thenwecanreusethepatterns,aswellasthecode,tests,anddocumentsrelatedtothem,whenwebuildthenextsimilarsystem.Adesignpatternnames,abstracts,andidentifiesthekeyaspectsofacommondesignstructurethatmakeitusefulforcreatingareusabledesign.Characteristicsofgooddesign

优秀设计的特征ComponentindependenceCouplingCohesionExceptionidentificationandhandlingFaultpreventionandtoleranceActivePassive组件独立性耦合性内聚性例外设计与处理防错和容错主动(检测)被动(检测)Componentindependence

组件独立性组件独立是模块化、抽象、信息隐蔽和局部化的直接结果。含义:一个模块具有独立功能而且和其它模块之间没有过多的相互作用意义:独立的模块容易开发(规模小,接口简单);独立的模块容易测试和维护;有效阻断错误传播(Rippleeffect“涟漪效应”)度量标准:内聚和耦合(由C.Myers,Constantine和Yourdon等人提出)Coupling耦合性定义指块间联系,即程序结构中不同模块之间互连程度耦合强弱取决于组件对另一个组件的引用一个组件传到另一个组件的数据量某个组件控制其他组件的数量模块间接口的复杂程度耦合等级内容耦合:病态连接,一个模块可以直接操作另一个模块的数据(如goto语句的使用)公共耦合:全局结构类型的数据控制耦合:模块间传递的是诸如标记量的控制信息标记耦合:参数传递的是诸如结构类型的数据数据耦合:参数传递的是一般类型的数据非直接耦合:通过上级模块进行联系,无直接关联示例AFlagFlagBf1f2…fn控制耦合

AB进入另一模块内部多入口模块AB模块代码重叠Entry1……Entryn……内容耦合ABCDX传递数据传递数据结构AB为非直接耦合AC为数据耦合AD为标记耦合

ExampleofcommoncouplingGlobal: A1 A2 A3Variables: V1 V2………ChangeV1to0………………IncrementV1

………………V1=V2+A1………ComponentXComponentYComponentZCommondataareaandvariablenamesABCommon公共数据区ABCommon公共数据区松散的公共耦合紧密的公共耦合Cohesion内聚块内联系或模块强度,指模块内各个成分(元素)彼此结合的紧密程度,即模块内部的聚合能力。“理想的模块仅仅做一件事”。内聚等级功能性内聚:一个功能一个模块,块内各成分属于一个整体顺序内聚:模块内各个组成部分都是与一个功能密切相关,并是顺序执行的。一般是一个成份的输出就是下一个成份的输入通讯内聚:模块内的各个成份都使用同一输入数据,或产生同一输出数据,即借公用数据而联系在一起过程内聚:块内成份必须按照特定次序执行时间内聚:因执行时间一样或顺序排列而把几个任务安排一个模块,如把“变量赋初值”、“打开文件”等完成各种初始化任务安排在一个模块逻辑内聚:块内任务间在逻辑上相似或相同,例如求某班的平均分和最高分,因其输入和输出相同而安排在一个模块内完成。偶然内聚:一个模块所完成的几个任务之间关系松散,互不相关。主要是为了避免重复书写而把重复的代码集成到一个模块内。ExamplesofCohesion三个方框组成一个模块,则是过程化模块;前两个方框组成一个模块,则是顺序性模块;如一个方框就是一个模块,则是功能性模块。建立方程组系数矩阵高斯消去法回代示例读文件打印检验结果计算A计算B合并新文件文件加工记录模块通讯内聚A判定参数参数Bf1f2…fn模块B属于逻辑内聚A……STORErec()toN……B……READXFileADD1toz……MSTORErec()toNREADXFileADD1toz……AB偶然性内聚启发式规则提高模块独立性设计规模适中的模块深度、宽度、扇入、扇出适中模块的作用域应该在控制域之内降低接口复杂性设计单入口和单出口的模块设计功能可以预测的模块说明:启发式规则是一种经验规律,对改进设计和提高软件质量具有重要的参考价值,但不要过分拘泥于这些规则。提高模块独立性模块独立性是划分模块的最高准则。高内聚,尽量一个模块一个功能;低耦合,避免“病态连接”;降低接口的复杂程度;综合考虑模块可分解性、模块可组装性、模块可理解性、模块连续性和模块保护(因修改错误而引起的副作用被控制在模块的内部)等。模块化的好处:软件结构清晰,容易设计、阅读和理解;软件容易测试和调试,因而有助于提高软件的可靠性;能够提高软件的可修改性;有助于软件开发工程的组织管理。设计规模适中的模块W.M.Weinberg的研究表明:如果一个模块长度超过30条语句,其可理解性将迅速下降;F.T.Baker:最好控制在50行左右,能够打印在一张纸上。由于模块独立性是最高原则,对于一个设计合理的功能性模块,即使长达千句或小到几行,也是允许的。分解模块不应该降低模块独立性。模块并非越多越好:随着模块数目增加,设计模块间接口所需要的工作量也将增加。深度、宽度、扇入、扇出适中深度:软件结构中控制的层数。一般而言它与系统的复杂度和系统大小直接对应。宽度:软件结构中同一个层次上的模块总数的最大数。扇出:一个模块直接控制(调用)的模块数目。扇出过大说明模块过分复杂;过小也不好,不利于系统平衡分解,3到9为宜。扇入:一个模块的扇入是指直接控制该模块的模块数目。扇入越大说明共享该模块的上级模块越多。整个系统结构呈现“椭圆外型”。ABCDFGHKJIE如图的系统中:深度为4;宽度为5;模块A的扇出为5,扇入为0。模块K的扇出为0;扇入为2。计算实发工资薪金制工资额计时制工资额取得工资数据编外人员工资税收扣款编外人员税款常规扣款编外人员扣款计算实发工资薪金制工资额计时制工资额取得工资数据编外人员工资税收扣款编外人员税款常规扣款编外人员扣款计时工人实发资额薪金工人实发资额编外人员实发资额应避免“扁平”的结构:…应避免的结构应追求“椭圆”的结构:应追求的结构模块的作用域应该在控制域之内控制域:控制范围,是包括模块本身以及所有下属模块(直接调用模块和间接调用模块)的集合。模块D的控制域为D,G,H,I,J,K。作用域:作用范围,它是一个与条件判定相联系的概念。是受该模块内一个判定影响的所有模块的集合。如果模块D中有一个条件判定仅仅影响到模块G和H,其作用域为G,H,I,J,K,作用域在控制域内。如D的判定影响到E,通常需要在D中为判定结果设置一个标记,并把这个标记通过上级模块A传递给E,导致控制耦合。两种改进方法:判定上移和在作用域但不在控制域的模块下移。TOPACDGEBTOPACDGEB:表示判定所在位置:表示判定影响的模块DTOPACGEB:表示判定所在位置:表示判定影响的模块TOPADGBCE降低模块间接口复杂性尽量少使用goto语句,避免病态连接和内容耦合。注意全局变量的使用,控制外部耦合和公共耦合的使用。将数据结构的传递改成数据传递,例如:求一元二次方程根的模块quad_root(table,x)中,利用系数数组table和根数组x进行参数传递。如果将其改为直接的系数和根传递,即quad_root(a,b,c,x1,x2),则标记耦合→数据耦合。设计单入口和单出口的模块符合结构化程序设计的思想应避免病态连接和内容耦合。“一个功能一个模块”→提高软件的可读性和可理解性。有效阻断“涟漪效应(rippleeffect)”→提高软件的可靠性和可维护性。设计功能可以预测的模块“可以预测”——如果一个模块可以当做一个“黑盒子(BlackBox)”,也就是说,只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。功能可以预测的模块:如果一个模块可以当作一个“黑盒子(BlackBox)”来对待,对于该模块的输入数据来说,可以在不考虑其内部处理细节的情况下生成输出数据。模块功能应该可以预测,但不要过分受其局限。

通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流可以分为变换流和事务流。面向数据流的设计方法的基本过程:面向数据流的设计方法研究、分析和审查数据流图;根据数据流图决定问题的类型;由数据流图推导出系统的初始结构图;根据启发规则对结构进行细化;修改和补充数据字典;制定测试计划。面向数据流的设计方法精化数据流图区分输入和输出分支区分事务中心和数据接收通路映射成变换结构映射成事务结构用启发式设计规则精化软件结构导出接口描述和全程数据结构详细设计流类型复查事务分析变换分析

变换流:信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。面向数据流的设计方法

变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。

相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、变换中心和输出等三部分组成。面向数据流的设计方法面向数据流的设计方法

事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类信息流被称为事务流,而该处理T称为事务中心,它完成下述任务:接收输入数据(输入数据又称为事务transaction);分析每个事务以确定它的类型;根据事务类型选取一条活动通路。面向数据流的设计方法面向数据流的设计方法

变换分析:把具有变换流特点的数据流图按预先确定的模式映射成软件结构的一系列步骤的总称。第1步复查基本系统模型。复查的目的是确保系统的输入数据和输出数据符合实际。变换分析

第2步复查并精化数据流图。

对需求分析阶段得出的数据流图认真复查,并且在必要时进行精化;

确保数据流图给出了目标系统的正确的逻辑模型;

使数据流图中每个处理都代表一个规模适中相对独立的子功能。

变换分析

第3步确定数据流图具有变换特性还是事务特性。根据数据流图中占优势的属性,确定数据流的全局特性。注意把和全局特性有不同特点的局部区域孤立出来,为以后精化软件结构做准备。第4步确定输入流和输出流的边界,从而孤立出变换中心。变换分析变换分析计算格式化1格式化2格式化3检验编辑初始数据已编辑数据有效数据计算计算预格式化已格式化2值1值2逻辑输入变换中心逻辑输出已格式化1变换分析ABCPWUDEQVRarcuwdepvb变换中心传出部分传入部分

第5步完成“第一级分解(firstlevelfactoring)”。分解就是分配控制的过程。分解出模块:Cm,Ca,Ct,Ce,其中:

Cm:协调下述从属的控制功能;

Ca:输入信息处理控制模块,协调对所有输入数据的接收;

Ct:变换中心控制模块,管理对内部形式的数据的所有操作;

Ce:输出信息处理控制模块,协调输出信息的产生过程。变换分析MCMTMAMEc,ec,eu,wu,wMCME2ME1RPQMA2MA1cec,pperrw,uwu

第6步完成“第二级分解”。即把数据流图中的每个处理映射成软件结构中一个适当的模块。方法是,从变换中心的边界开始沿着输入通路向外移动,把输入通路中每个处理映射成软件结构中Ca控制下的一个低层模块;然后沿输出通路向外移动,把输出通路中每个处理映射成直接或间接受模块Ce控制的一个低层模块;最后把变换中心内的每个处理映射成受Ct控制的一个模块。为每个模块写一个简要说明:变换分析进出该模块的信息(接口描述);模块内部的信息;过程陈述,包括主要判定点及任务等;对约束和特殊特点的简短讨论。变换分析MACBDAEc,ecbaedReadDMAAtoBReadADtoEBtoCGetBGetEGetCc,ecbbcaabdedeMEWVUwuvw,uUtoVMEWriteVPutUWriteWwuuvw,uvMTPQRec,

prw,upc,er

第7步使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。第一次分割得到的软件结构,总可以根据模块独立原理进行精化。为获得尽可能高的内聚、尽可能松散的耦合,应该对初步分割得到的模块进行再分解或合并。

变换分析

上述7个步骤的目的是:开发出软件的整体表示。这种整体表示的意义在于:一旦确定了软件结构就可以把它作为一个整体来复查,从而能够评价和精化软件结构;在这个时期进行修改只需要很少的附加工作,但却能够对软件的质量特别是软件的可维护性产生深远的影响。变换分析变换分析实例一

考虑汽车数字仪表板的设计。假设的仪表板将完成下述功能:

(1)通过模数转换实现传感器和微处理机接口;

(2)在发光二极管面板上显示数据;

(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;

(4)指示加速或减速;

(5)超速警告:如果车速超过55英里/小时,则发出超速警告铃声。在软件需求分析阶段应该对上述每条要求以及系统的其他特点进行全面的分析评价,建立起必要的文档资料,特别是数据流图.变换分析实例一上箭头下箭头显示读旋转信号收集和求平均产生mpg显示读和校核计算gph转换成转/分(rpm)计算mph和超速值计算燃料消耗产生Mph显示发出铃声产生里程显示计算里程确定加速/减速产生加速/减速显示旋转信号sps__sps△sps箭头指示水平线⊕⊕超速值燃烧流rpmrpmmphgphmpgmphmpg显示燃料流传感器信号英里铃声水平线读旋转信号收集和求平均产生mpg显示读和校核计算gph转换成转/分(rpm)计算mph和超速值计算燃料消耗产生mph显示发出铃声产生里程显示计算里程确定加速/件速产生加速/减速显示旋转信号sps__sps△sps箭头指示⊕⊕超速值燃烧流rpmrpmmphgphmpgmphmph显示燃料流传感器信号英里铃声mpg显示有效议程项2格式检查3语法分析4形成议程表16输入5销售模拟6机器模拟10交叉制表9工厂级汇总8生产线模拟12生成报表磁带13产生报表A14产生报表B15产生报表C11输入1输入7输入bcd常数表e*fhig特种机器表jklmnop报表请求*议程表议程项议程数据存储常数有效议程表机器表销售输出机器输出生产线输出制造输出模拟结果报表议程变换分析实例二a----议程表b----议程项c----有效议程项d----议程数据e----存储常数

f----有效议程表g----机器表h----销售输出i----机器输出j----生产线输出k----制造输出l----模拟结果m----报表议程工厂模拟系统取得议程表4销售模拟5机器模拟6生产线模拟8工厂级汇总9输出10模拟结果系统的一级分解取得议程表读入16常数数据取得议程数据形成4议程表取得有效议程项语法分析3读入议程卡片1格式检查2edd,efccdbbcf输出模拟结果交叉制表10制成报表产生报表A13取得报表议程11写报表磁带12产生报表C15产生报表B14h,kh,kllmn,o,pnop工厂模拟系统销售模拟5生产模拟工厂级汇总9生产线模拟8取得机器数据取得特种表7机器模拟6fhfkfi,gi,gjjkfig前面将5、6、8、9四个加工各映射为一个模块,而这里,在6、8、9等模块上面增设了一级“生产模拟”模块与“销售模拟”模块并列,。这一改动,使这个图象显示的层次更清晰。取得议程表读入16常数数据取得议程数据形成4议程表取得有效议程项语法分析3读入议程卡片1格式检查2edd,efccdbbcf工厂模拟系统销售模拟5生产模拟工厂级汇总9生产线模拟8取得机器数据取得特种表7机器模拟6fhfkfi,gi,gjjkfig输出模拟结果交叉制表16制成报表产生报表A13取得报表议程11写报表磁带12产生报表C15产生报表B14h,kh,kllmn,o,pnop

传入分支中的“取得有效议程项”模块接近于假模块(参见模块大小规则),除调用下级模块外没有其它内容,故将它取消,把1、2、3号模块并列为“取得议程数据”模块的调用模块。又鉴于2、3两个模块在内容上比较密切,故将它们合并成一个模块

把传入分支的“形成议程表”模块向上并入“取得议程表”模块,减少调用层次,同时也使后者除调用下级模块外增加一点实质内容。把变换中心的“机器模拟”模块并入它的上级模块“取得机器数据”,并将合并后的模块该名为“机器模拟”。这个更改使结构的含义更清晰,即:在一般情况下,机器模拟将从传入分支取得数据f并变换为i,但如果需要(依赖于判定),也可以直接由系统外取得二次传入数据g.

省去传出分支中的“写报表磁带”模块,把他的三个下属模块直接归“制成报表”模块调用。如果报表B、报表C都是很小的模块,还可以合而为一。工厂模拟系统输出模拟结果生产模拟销售模拟5取得议程表4机器模拟6取得议程数据读入常数数据16生产线模拟8工厂级汇总9交叉制表10制成报表12取得特种表7检查/分析2,3读入议程卡片1取得报表议程11制成报表A13制成报表B,C14,15ffhfh,kkedi,gi,gfjjkh,kllmno,pdg

bb

虽然在任何情况下都可以使用变换分析方法设计软件结构,但是在数据流具有明显的事务特点时,也就是有一个明显的“发射中心”(事务中心)时,还是以采用事务分析方法为宜。事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在于由数据流图到软件结构的映射方法不同:事务分析

由事务流映射成的软件结构包括一个接收分支和一个发送分支;映射接收分支:从事务中心的边界开始,把沿着接收流通路的处理映射成模块;发送分支的结构包含一个调度模块,它控制下层的所有活动模块;把数据流图中的每个活动流通路映射成与它的流特征相对应的结构。事务分析

一个不能工作的“最佳设计”没有任何实际意义。应该在设计的早期阶段尽量对软件结构进行精化。设计优化应该力求做到在有效的模块化的前提下使用最少量的模块,以及在能够满足信息要求的前提下使用最简单的数据结构。设计优化

可以用下述方法对时间起决定性作用的软件进行优化:在不考虑时间因素的前提下开发并精化软件结构;在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率;使用高级程序设计语言编写程序;在软件中孤立出那些大量占用处理机资源的模块;必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。设计优化ExceptionIdentificationandHandling

例外识别和处理TypicalexceptionsFailuretoprovideaserviceProvidingthewrongserviceordataCorruptingdataThreewaysofhandleexceptionsRestoringandretryingRestoringandcorrectingRestoringandreportingDefensivedesigningisnoteasy典型的例外无法提供某种服务提供了错误的服务或数据破坏性的数据三种方法恢复系统+重试恢复系统+改正恢复系统+报告防御性设计不容易!ToCatchExceptions

发现例外UsingchecksumsandcheckdigitsDoublecheckRedundantlinksIncludingbackwardandforwardpointersTimersPreventingdeadlocks校验和与检查数字双重核查冗余链接包括向前和向后的指针定时器防止死锁FaultPreventionand

FaultToleranceActiveFaultDetection.Periodicallycheckforsymptomsoffaults,ortrytoanticipatewhenfailureswilloccur.FaultCorrectionisthesystem’scompensationforafault’spresence.FaultToleranceistheisolationofdamagecausedbyafault,anditisconvenientorevendesirableinmanycircumstances.Techniquesforimprovingdesign改进设计的技术ReducingcomplexityDesignbycontractPrototypingdesignFault-treeanalysis降低复杂度通过合约设计原型化设计错误树分析一、Reducingcomplexity

降低复杂度

Aswecreateourdesigns,wewanttosimplifytheirstructureasmuchaspossiblewithoutchangingthenatureofthesolution.Thissimplificationallowsustounderstandthesolutionmoreeasily.创建设计时,应能尽可能地简化设计结构,同时不改变解决方案的特性。这样的简化让我们更容易地理解解决方案。例如:w=Studenthasagrade-pointaverageofAorB(平均学分A或B)x=studenthascombinedstandardizedtestscoresof1200ormore(标准考试1200分以上)y=studenthasoutstandingmendations(推荐信突出)z=studenthasextracurricularactivities(参加课外活动突出)A1=inviteforearlyadmission邀请尽早入学A2=admitforregularsemester正常学期接收A3=inviteforhonorsprogram邀请加入荣誉程序A4=inviteforregularprogram邀请加入常规程序A5=conditionaladmission有条件接收A6=reject拒绝variablesActionswXYzA1A2A3A4A5A60000×0001×0010××0011××0100××0101××0110××0111××1000××1001××1010××1011××1100××1101××1110××1111××Booleanalgebracanbeusedtodescribetherelationshipbetweentheactionsandthevariables.布尔代数方法可以描述活动和变量之间的关系。A1=wxyz+wxyz=wxyA2=wxyz+wxyz+wxyz+wxyz+wxyz+wxyz+wxyz+wxyz+wxyz+wxyz=xy+wxy+wxA3=wxA4=xy+wx+wxyA5=wxyA6=wxy二、Designbycontract合约设计Meyer(1992)suggestsanapproach,calleddesignbycontracttohelpensurethatdesignmeetsitsspecification.Meyer(1992)提出通过称为合约设计的方法来确认设计是否满足规格说明。Inthisapproach,asoftwaresystemisviewedasasetofcommunicatingcomponentswhoseinteractionisbasedonapreciselydefinedspecificationofwhateachcomponentissupposedtodo.Thesespecifications,calledcontracts,governhowthecomponentistointeractwithothercomponentsandsystems.将软件系统看作是一组通信的组件,组件之间的交互是基于对每个组件要做什么作出准确定义的规格说明。这些规格说明称为合约。它管理组件怎样与其他组件及系统进行交互。Asoftwarecomponentcalledaclient,adoptsastrategytoperformasetoftasks.isexecutedwhentheclientcallsanothercomponent,thesupplier,toperformit.thatis,thereisacontractbetweenthetwocomponents.Eachcontractcovermutualobligations(calledpreconditions),benefits(calledpostconditions),andconsistencyconstraints(callinvariants).Together,thesecontractpropertiesare(calledassertions).某个称为客户的组件采用某种策略执行一组任务。当客户调用另外的称为供应者的组件执行时,才依次完成实际的任务。这时,两个组件之间存在合约关系。每个合约包括相互的责任(前提条件),利益(后续条件)和一致性约束条件(不变量)。这些合约的性质一起称为断言。Forexampleput(x:ELEMENT;key:STRING)is--insertxsothatitwillberetrievablethroughkey.requirecount<=capacity;notkey.emptydo…someinsertionalgorithm…ensurehas(x)Item(key)=x;count=oldcount+1;endFillis--filldamwithwaterRequire{前提}In_valve.open;out_valve.closeddeferred--i.e.,noimplementationEnsure{后续}in_valve.closed;out_valve.closed;is_fullendInvariant{不变量}is_full=(0.95*capacity<=gauge)and(gauge<=1.05*capacity)….三、PrototypingDesign原型化设计Prototypeoftenomitsmanyofthedetailsoffunctionalityandperformancefromtherealsystem,sothatwecanfocusnarrowlyonaparticularsystemaspectandunderstandmoreaboutit.原型通常忽略功能和性能方面的很多细节,因此只能侧重考虑系统的某个特定方面,并更多地理解它。Throw-wayprototype抛弃型原型Evolutionaryprototype进化型原型Thereareseveraltrade-offstobeconsideredwhendecidingwhetheraprototypeisappropriateforyourproject.确定原型是否适合某个项目可以考虑很多折衷方法。四、Fault-treeanalysis错误树分析ItisamethodoriginallydevelopedfortheU.S.Minutemanmissileprogram.Itreasonsaboutthedesign,helpingustoposeitandlookforsituationsthatmightleadtofailure.用于美国民兵导弹的一种程序方法。它用来帮助考虑设计,将其分解,寻找可能导致故障的位置。1、Usingasetofguidewordstohelpusunderstandhowthesystemmightdeviatefromitsintendedbehavior.Tableillustratessomeoftheguidewordsthatmightbeused;youcanselectyourownguidewordsorchecklists,basedontheapplicationdomaininwhichthesystemistowork.

可以使用一组引导词帮助理解系统是如何偏离既定行为的。表中描述了某些可能用到的引导词;可以根据系统将要运行的应用领域,选择引导词或者检查表。

Guideword引导词Interpretation解释noNodataorcontrolsignalwassentorreceived.

没有发送或收到任何数据或控制信号moreThevolumeofdataistoomuchortoofast.数据量太大或者太快了lessThevolumeofdataistoolowortooslow.数据量太小或者太慢了partofThedataorcontrolsignalisplete.数据或控制信号不完全otherthanThedataorcontrolsignalhasanothercomponent.

数据或控制信号有另一个组件earlyThesignalarrivestooearlyfortheclock.对时钟来说信号到的太早了lateThesignalarrivestoolatefortheclock.对时钟来说信号到的太晚了beforeThesignalarrivestooearlyintheexpectedsequence.

信号按照期望的顺序到的太早了afterThesignalarrivestoolateintheexpectedsequence.

信号按照期望的顺序到的太晚了2.Buildingagraphwhosenodesarefailures,eitherofsinglecomponents,systemfunction,ortheentiresystem.thekeyconditioninbuildingthegraphisthateachnoderepresentanindependentevent.

构造一幅图,它的节点表示故障,这些故障可能是单个组件的、系统功能的、或者是整个系统的。构造图的关键条件在于每个节点代表一个独立的事件。TimeoutControlfailsSensorfailsCoolingsystemoverflowsValvestuckinopenpositionFillmoderemainsonorandOncethegraphisconstructed,wecansearchforseveralforseveraltypesofdesignweaknesses一旦图画好了,就可以检查多种类型的设计缺陷:Singlepointsoffailure,wherethe

温馨提示

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

最新文档

评论

0/150

提交评论