![第4章-总体设计new2017_第1页](http://file4.renrendoc.com/view14/M0A/38/3C/wKhkGWeN6Q2ATbgIAACK53FYfng483.jpg)
![第4章-总体设计new2017_第2页](http://file4.renrendoc.com/view14/M0A/38/3C/wKhkGWeN6Q2ATbgIAACK53FYfng4832.jpg)
![第4章-总体设计new2017_第3页](http://file4.renrendoc.com/view14/M0A/38/3C/wKhkGWeN6Q2ATbgIAACK53FYfng4833.jpg)
![第4章-总体设计new2017_第4页](http://file4.renrendoc.com/view14/M0A/38/3C/wKhkGWeN6Q2ATbgIAACK53FYfng4834.jpg)
![第4章-总体设计new2017_第5页](http://file4.renrendoc.com/view14/M0A/38/3C/wKhkGWeN6Q2ATbgIAACK53FYfng4835.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章总体设计武汉大学计算机学院软件工程
SoftwareEngineering软件生存期维护软件计划需求分析测试软件设计实现(编码)
定义时期开发时期使用和维护时期退役一、软件设计软件设计总体设计什么是好的软件结构的设计软件设计的启发规则软件结构设计面向数据流的设计技术网络的设计软件体系结构简介软件设计的任务
在完成需求分析之后,为了实现软件需求规格书的要求,必须将用户和系统的需求转化为对计算机系统的逻辑定义(即模块结构)。——Howdo?设计说明书(“如何做”)物理模型(“怎样做”)逻辑模型(“做什么”)需求分析——what?“应用各种技术和原理,对设备、过程或系统做出足够详细的描述,使之能够在物理上得以实现”软件设计的任务从工程管理的角度,分为总体设计阶段和详细设计阶段;从技术的角度,分体系结构设计、数据(类)设计、接口设计和过程(构件)设计总体设计的重要性总体设计是软件开发过程中一个非常重要的阶段。它将需求转化为软件的組成組件以及這些組件之間的通訊。。其基本目的就是回答“概括地说,系统应该如何实现目标系统”。如果软件系统没有经过认真细致的总体设计,就直接考虑它的算法或直接编写源程序,这个系统的质量就很难保证。许多软件就是因为结构上的问题,使得它不能满足用户的要求,而且经常发生故障,很难维护。总体设计分两个阶段:系统设计阶段确定系统的具体实现方案。结构设计阶段确定软件结构确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。功能分解设计软件结构设计数据库确定测试计划书写文档审查与复审制定规范设想供选择的方案选择合理的方案推荐最佳的方案功能分解设计软件的结构设计数据结构其它设计确定测试计划书写文档审查与复审二、总体设计步骤制定规范
具有一定规模的软件项目总是需要通过团队形式实施开发,在进入软件开发阶段之初,首先应该先为团队制定在设计时应共同遵守的规范,以便协调和规范团队内各队员的工作。设想并合理选取供选择的方案在总体设计阶段分析员应该考虑各种可能的实现方案,进行效益分析,力求从中选出最佳方案。并且为推荐的方案制定详细的实现计划。技术可行性工程目标和规模用户意见推荐最佳方案最终方案结构设计系统架构设计当用户接受方案后,要为该最佳方案设计系统的基本架构(包括程序、数据和环境),以获得有关系统创建的总体方案。软件结构设计软件结构设计是在系统构架确定以后,对组成系统的各个子系统/构件/程序进行结构设计。
一个问题可以有多种可供选择的结构软件结构设计公共数据结构设计总体设计中还需确定那些被许多模块共同使用的公共数据的构造,如公共变量、数据文件以及数据库中的数据等。安全性设计——指软件不含有可能引起系统损害或人员伤亡的缺陷的能力。(GJB900要求重视软件安全工作)故障处理设计软件系统工作过程中难免出现故障,总体设计需要对各种可能出现的来自于软件、硬件以及网络通信方面的故障作出专门考虑。例如:提供备用设备、设置出错处理模块、设置数据备份模块等。可维护性设计软件系统在投入使用以后必将面临维护,如:改正软件错误、扩充软件功能等。对此,总体设计需要作出专门安排,以方便日后的维护。例如,在软件中设置用于系统检测维护的专用模块,预计今后进行功能扩充的模块,并对这些接口进行专门定义。
编写文档应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种:系统设计说明书用户手册测试计划数据库设计说明书审查与复审最后应该对总体设计的结果进行严格的技术审查,在技术审查之后再由客户从管理角度进行复审。思考?
什么是好的软件?什么是好的设计?三、什么是好的软件
——软件质量评价标准
有效可靠结构清晰开发人员角度:良结构、易测试、易维护、可移植…用户角度:达到需求、界面友好、简单易学文档齐全重用性、开放性尽量简单Thedesignshouldbetraceabletotheanalysismodel.Thedesignshould“minimizetheintellectualdistance”betweenthesoftwareandtheproblemasitexistsintherealworld.Thedesignshouldexhibituniformityandintegration.Thedesignshouldbestructuredtoaccommodatechange.Thedesignshouldbestructuredtodegradegently,evenwhenaberrantdata,events,oroperatingconditionsareencountered.Designisnotcoding,codingisnotdesign.Thedesignshouldbeassessedforqualityasitisbeingcreated,notafterthefact.Thedesignshouldbereviewedtominimizeconceptual(semantic)errors.Whatisagooddesign?结构化分析与结构化设计的关系proceduraldesigncegnturalgndatadesignTHEDESIGNMODELTHEANALYSISMODELinterfadesiarchitecdesiDataobjectdescriptionProcessspecificationControlspecificationE-RDFDSTDDD软件结构
软件的各个组成部分之间的关系的表示,决定了整个系统的结构和质量。问题P同一个问题P的三种不同的软件结构模块“模块”,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性:⑴功能即指该模块实现什么功能,做什么事情规定的功能出错处理返回一个“结束标志”⑵逻辑:描述模块内部如何实现要求的功能和数据。⑶接口:模块的输入输出(4)状态:该模块运行时的环境和条件。模块化(modularity)模块化模块划分,将系统分成若干模块“模块化”的作用容易设计,使软件结构清晰,易于理解;使软件易于测试和调试,提高可靠性;提高可修改性;有助于软件开发工程的组织管理模块化的依据可集体开发,缩短开发周期可以重用;便于维护;降低复杂性:c(x):问题x的复杂程度E(x):解决问题x需要的工作量(时间)对于两个问题P1和P2 if C(P1)>C(P2) then E(P1)>E(P2)根据人们求解问题的经验,有规律:C(P1+P2)>C(P1)+C(P2)
则有E(P1+P2)>E(P1)+E(P2)即“分而治之”有助于复杂问题的求解。如果把软件无限细分,会出现什么样的情况?块的划分与总工作量之间的关系接口成本最小成本区域总成本块成本成本(工作量)模块数M
模块划分的合理性。模块两个定性的标准:内聚和耦合。模块的重要特征
抽象(abstraction)我们在考虑问题时,集中考虑和当前问题有关的方面,而忽略和当前问题无关的方面,这就是抽象。或者说抽象就是抽出事物的本质特性和各类问题的共性,找出联系和相似性,加以概括和提取。处理复杂系统的唯一有效方法。包括过程抽象和数据抽象信息隐藏(informationhiding)数据隐藏、细节隐藏,黑盒子可理解性修改副作用小错误副作用小局部化把一些关系密切的软件元素物理地放得彼此靠近模块独立性例:开发一个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.MagicalNumberSeven,PlusorMinusTwo,SomeLimitsonOurCapacityforProcessingInformation模块的抽象特征抽象1CAD图形软件抽象2CAD图形软件用户界面任务创建二维图形显示图形任务管理图形文件模块化抽象抽象3创建二维图形任务画线任务画圆任务…模块化逐步求精信息隐藏(DavidParnas)
《onthecriteriatobeusedindecomposingsystemsintomodules》如何分解软件、确定模块?信息隐藏模块应当被这样规定和设计,使得一个模块所包含的信息对于其他模块来说应该是隐蔽的。在设计的高层,一个模块有1个或多个秘密;在设计的底层,一个模块只有一个秘密每个模块实现了一个重要决策,而且只有自己知道细节,不同决策之间相互独立修改局部化
——常见的可修改性决策
《missinginaction:informationhiding》Hardwaredependencies;Input&outputformats;Nonstandardlanguagefeatures&libraryroutines;Difficultdesign&implementationareas;Complexdatastructrues;Globalvariables;Constraints&businessrules.模块独立性(Moduleindependence)好设计的关键:
模块分解的目的是每个模块完成一个相对独立的子功能,并且与其它模块间的接口简单。独立性的度量(Yourdon&Constantine,1978)
耦合(Coupling)—块间联系
内聚(Cohesion)—块内联系(1)耦合(Coupling)GreatdealofdependenceIndependent
HighlycoupledLooselycoupledUncoupled
Goal:aslooseaspossible=asindependentaspossible
对一个软件结构内不同模块之间互连程度的度量
零耦合(uncoupling)彼此完全独立,这意味着模块间无任何连接,耦合程度最低Uncoupled
AB数据耦合(DataCoupling)一个模块访问另一个模块时,彼此间通过参数交换信息,而且交换的信息仅仅是数据系统中至少存在这种耦合;
ThemostdesirableABData特征耦合(stampcoupling)一个模块访问另一个模块时,传递的是整个数据结构(地址)。调用模块只需要使用整个数据结构中的一部分数据元素。被调用模块可使用的数据多余它确实需要的数据,将导致对数据的访问失去控制,从而给计算机犯罪提供了机会。把指针作为参数进行传递时,一定要检查该耦合。控制耦合(ControlCoupling)指一个模块调用另一个模块时,传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现)ABFlagF2FnF1…………Flag控制耦合增加了理解与编程及修改的复杂性。控制耦合往往是多余的,把模块适当分解之后通常可以用数据耦合代替它。公共环境耦合(CommonCoupling)两个或多个模块通过一个公共数据环境相互作用Global:V1V2A:……………………A1=V1+V2……………………B:……………………V1=B1……………………Global:V1V2A:……………………V1++……………………B:……………………V2=B1+V1……………………问题:
复杂程度随耦合模块的个数增加而增加
公共部分的数据存取无法控制,计算机犯罪危险
公共部分的改动将影响所有调用它的模块,可维护性差
难于重用,需全局变量清单内容耦合(ContentCoupling)当一个模块直接修改或操作另一个模块的内部信息,被修改模块完全依赖于修改它的模块时,就发生了内容耦合。包括下列情形:一个模块直接访问另一个模块的内部数据一个模块不通过正常入口而转到另一个模块的内部两个模块有一部分程序代码重叠(只可能出现在汇编程序中)一个模块有多个入口(非结构化程序)
Theleastdesirable内容耦合例1. A访问C的内部数据或不通过正常入口而转入C的内部。……ABCDA:……………………gotoC1……………………C:……………………C1:…………内容耦合例2. 部分代码重叠 (常出现在汇 编程序中)BA例3. 一个模块有 多 个入口(功能)A:………………………………entry1:………………………………entry2:………………………………耦合度与软件结构类型耦合度模块独立性软件结构零耦合低高强弱好差数据耦合特征耦合控制耦合公共环境耦合内容耦合原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。思考题ABDCFE132456模块互连图模块接口描述编号输入输出1飞机类型状态标志2飞机零件清单3功能代码4飞机零件清单5零件编号零件制造商6零件编号零件名称
已知模块A、E和F更新同一个数据库,请确定模块之间的耦合类型。(2)内聚(Cohesion)Goal: ascohesiveaspossible!一个模块内各个元素彼此结合的紧密程度
理想内聚的模块只做一件事情模块内的高内聚往往意味着模块间的松耦合内聚更重要!偶然内聚(Coincidentalcohesion)指一个模块内的各处理元素之间没有任何联系。ABABC语句相同可理解性差;模块不可重用;修改副作用。逻辑内聚(LogicalCohesion)指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。XYZABCXYZABCS接口难以理解,造成整体不易理解;完成多个操作的代码互相纠缠在一起,局部功能的修改有时会影响全局,导致严重的维护问题;难以重用。时间内聚(Temporalcohesion)把需要同时执行的动作组合在一起形成的模块为时间内聚模块initialxInitialy时间关系在一定的程度上反应了程序某些实质,所以时间内聚比逻辑内聚好些;模块内操作之间的关系很弱,与其他模块的操作却有很强的关联;这种模块在20世纪80年代的应用程序中使用较多。没有任何复用价值过程内聚(Proceduralcohesion)一个模块包含的一组任务是相关的而且必须按特定次序执行。使用DFD来设计软件,划分模块时,往往是过程内聚模块;比时间内聚好,至少操作之间是过程关联的;完整性不好,仍是弱连接,不太可能重用模块。通信内聚(Communicationalcohesion)指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。特点:模块中各操作紧密相连,比过程内聚好;单个操作无法重用,但是整个模块有时具有很好的重用性该模块把数据和操作都放在一个模块内,可达到信息隐蔽。X从文件file读出数据由数据产生日报表由数据产生单项产品报表顺序内聚(Sequentialcohesion)指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。X输入系数求根打印方程的根在通信内聚的基础上要求模块内的操作顺序执行;它非常接近于问题的结构维护起来不如功能内聚方便,要修改模块中的一个功能,会影响到同一个模块中的其他功能。功能内聚(Functionalcohesion)这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的X求闰年模块可重用;可隔离错误,维护更容易。内聚度与软件结构软件结构模块独立性内聚度内聚评分差好弱强低偶然内聚0分逻辑内聚1分时间内聚3分中过程内聚5分通信内聚7分高顺序内聚9分功能内聚10分设计时识别出低内聚模块,力争做到高内聚!不要低内聚!内聚更重要!1计算雇员年龄并给出生日的模块2按给出的生日计算雇员年龄、退休时间的模块。如果利用所计算的年龄来确定雇员将要退休的时间,是什么内聚;如果分别计算年龄和退休时间,但使用相同生日数据,是什么内聚3打印季度开支报告、月份开支报告和日开支报告。具体打印哪一个,将由传入的控制标志决定。如何提高内聚性?
功能内聚
顺序内聚
通信内聚
逻辑内聚好的软件结构具有层次性,无回路块调用的软件结构。模块的独立性好。…线性型树型半序型非良结构的调整网络结构AB合并循环节点良结构AB模块内部复杂性增加了衡量软件结构设计的准则软件实体有清晰的结构,利于软件元素间控制;软件实体要模块化,模块具有独立功能;软件实体与环境的界面清晰;设计规格说明清晰、简介、完整和无二义性四、软件设计的启发规则1、通过合并和分解,改进软件结构,提高模块独立性模块功能完善化。若两模块含有重复的部分,应设法将重复的功能消去2025年1月20日第四章软件总体设计63×逻辑内聚√√√三、设计的启发规则2、模块规模适中过大不易理解,分解不充分太小则接口开销过大注意分解后不应降低模块的独立性optimalnumber
ofmodules
costof
softwarenumberofmodulesmoduleintegrationcostmoduledevelopmentcost四、设计的启发规则
3、深度、宽度、扇入、扇出适当
深度=软件结构中从顶层模块到最底层模块的层数过大表示分工过细管理模块过分简单,适当合并
宽度
=跨度数的最大值过大表示系统复杂扇出:直接由一个块所控制的块数扇入:直接调用它的上级块数目四、设计的启发规则扇出=模块直接调用或控制的模块数
3fan-out9扇入=直接调用该模块的上级模块数在不破坏独立性的前提下,fan-in大的比较好AA的扇出AA的扇入一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。减少高扇出争取高扇入编外人员工资取得工资数据计时制工资额薪金制工资额编外人员税款编外人员扣款常规扣款税收扣款计算实发工资避免平铺结构增加中间层降低扇出编外人员工资取得工资数据计时制工资额薪金制工资额编外人员税款编外人员扣款常规扣款税收扣款计算实发工资计时工人实发工资计薪工人实发工资编外人员实发工资四、设计的启发规则4、作用域在控制域内控制域(控制范围)模块本身以及所有直接或间接从属于它的模块的集合作用域(影响范围)受该模块内一个判定影响的所有模块的集合SD方法认为:当作用域为控制域的子集时,才能获得较低的块间联系。存在判断调用的模块,所在层次不要与那些属于判断作用范围的模块所在的层次相隔太远----越近越好。MACBABCIfflagThenBElseCM的控制域={M,A,B,C}A的作用域={B,C}作用域在控制域内A:…………if……thengotoB1……………………B:……………………B1:……………………A作用域在控制域内MACBA的控制域={A,B}A:…………if……thengotoM1……………………M:……………………M1:gotoC1……………………A作用域超出了控制域C:……………………C1:……………………模块A中有一条判断调用M的语句,违反了原则A如何修改?判断点上移把A中的if移到M中受影响块下移把C移到A下面71总体设计的原则和概念ABCDEFG模块C中有一条判断调用G的语句,违反了原则B四、设计的启发规则5、降低接口的复杂程度接口尽可能简单,接口复杂可能表明模块的独立性差可理解性好【例】求一元二次方程的根解法1……Vara,b,c,x1,x2:real;Beginread(a,b,c);
P;write(x1,x2)End.ProcedureP;beginend;解法2……TypeTA=array[1..3]ofreal;TB=array[1..2]ofreal;VarA:TA;B:TB;Beginread(A[1],A[2],A[3]);
P(A,B);write(B[1],B[2])End.ProcedureA(A:TA;varB:TB);beginend;解法3……Vara,b,c,x1,x2:real;Beginread(a,b,c);
P(a,b,c,x1,x2);write(x1,x2)End.ProcedureP(a,b,c:real;varx1,x2:real);begin
end;
全局变量,紧耦合!
可读性差!
局部变量,可读性好!四、设计的启发规则6、单出单入,避免内容耦合7、模块功能可预测相同输入必产生相同输出模块中使用全局变量可能导致不可预测A:………………………………entry1:………………………………entry2:………………………………四、设计的启发规则
有重要的参考价值不是设计的目标不是设计时应该普遍遵循的原理软件结构设计方法:
Fourdesignphilosophy分而治之现有的设计案例,对这些案例加以改进谁也没有现成的解决方案,大伙一起creativedesign,协商解决已有产品,在产品上打补丁的设计模块分解的方式
水平划分垂直划分子问题整个问题问题的广度问题的广度问题的广度按深度分而治之问题的深度问题的深度问题的深度按广度分而治之子问题子问题子问题子问题子问题水平划分(HorizontalPartitioning)
按主要功能定义模块结构的各分支顶层控制模块,下层输入、处理、输出三个分支优点:功能分离,并行开发、易修改扩充,代码相对安全缺点:模块接口传递数据多,信息流的整体控制复杂化function1function3function2垂直划分(VerticalPartitioning:Factoring)
自顶向下逐层分布工作顶层模块控制,低层模块实际处理表明每个层次所提供的功能模块优点:降低复杂性、对低层模块的修改不易引起副作用便于将来的维护缺点:不利于团队协作模块分解的过程:业务域分解/问题域分解领域专家,企业战略;系统
子系统业务功能域分解服务,资源;子系统拆分为多个服务技术域分解功能需求和非功能需求,当前IT技术;业务域和业务功能域分解出的元素进行整合在模块分解时,要注意以下几点:低耦合高内聚:“从弱耦合入手,切断联系”层次性:先业务后技术,循序渐进正交原则:相互独立,职责没有重叠抽象原则稳定性原则复用性原则迭代演化
五、面向数据流的结构化设计方法(SD)ProgramArchitectureDataFlowDiagram映射/变换1、软件结构设计中的图形工具层次图(H图)-----系统结构图;------HierarchyHIPO图=H图+IPO图/表结构图------模块联系图;系统结构图
层次图用来描绘软件功能和子功能的层次结构,图中的一个矩形框代表一个模块,方框间的连线表示调用关系而不表示组成关系。正文加工系统输入输出存储检索加标题编辑格式化编目录添加插入删除修改合并列表HIPO图1.HIPO图:H图+IPO图;2.在H图中,除最顶层方框外,在每一个方框内加上一个编号,编号次序依次为:1.0,2.0,…;2.1,2.2,…;3.1,3.2…;3.对于H图中的每一个方框,有一张IPO图描述这个方框所代表模块的处理过程.86软件结构设计带编号的层次图(H图)和H图中每个方框相对应,有一张IPO图描绘这个方框代表的模块的处理过程。HIPO图中的每张IPO图内都应该明显地标出它所描绘的模块在H图中的编号,以便追踪了解这个模块在软件结构中的位置。87
IPO表系统:
作者:.
模块:
日期:.
编号:.
注释:被调用:调用:输入:输出:处理:局部数据元素:调用本模块的模块清单被本模块调用的模块清单本模块使用的局部元素数据流图中的各个处理,也可以简略描述系统的主要算法。88结构图1.结构图是软件结构设计的另一种工具,与层次图类似。用来确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系2.它在层次图的每一个方框内注明的是模块的名字或主要功能。3.方框之间的直线表示模块的调用关系。4.用带注解的箭头表示模块调用过程中传递的信息。【例】产生最佳解得到好输入计算最佳解输出结果读输入编辑输入结果格式化显示结果好输入原始输入原始输入编辑结果解好输入解解格式化的解格式化的解利用层次图和IPO图或DD中的信息可以得到模块调用时传递的信息,即结构图,仅用于检查设计的正确性和模块独立性。结构图一般不入文档。90又称为结构化设计方法;目标:给出设计软件结构的一个系统化途径;作用:该方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。2、基于数据流(SD)的设计方法(1)DF的类型
信息流的类型决定了映射的方法变换流事务流混合型①变换流(TransformFlow)
所有信息流都可归结为变换流InternalrepresentationInformationTransformflowOutgoingflowIncomingflowExternalrepresentationTime变换流参看图形,信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经过加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流具有这些特征时,这种信息流称为变换流。12345678abcdefhgyxz变换型的软件结构图②事务流(TransactionFlow)输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这种“以事务为中心的”的数据流,称为“事务流”。
T称为事务中心接收输入数据;分析每个事务以确定它的类型;根据事务类型选取一条活动通路。……TTransactionrequest…Actionpaths……T=Calloneoftheseveralsubroutinesdependingon
thetypeoftheincomingtransactionrequest.事务型的软件结构图③混合型
两种DFD的混合体(2)面向数据流方法的设计过程“变换”“事务”精化数据流图流类型区分事务中心和数据接收通路区分输入和输出分支映射成事务结构映射成变换结构用启发式设计规则精化软件结构导出接口描述和全程数据结构复查详细设计变换设计事务设计“Getittowork,thenmakeitfast.”DFDSystemHierarchy(3)从DFD导出软件结构图
变换设计事务设计综合设计法①变换设计InternalrepresentationInformationTransformflowOutgoingflowIncomingflowExternalrepresentationTime第一步:确定输入流和输出流的边界
某装配厂有一座存放零件的仓库,仓库中现有的各种零件的数量以及每种零件的库存量临界值等数据记录在库存清单主文件中。当仓库中零件数量有变化时,应该及时修改库存清单主文件,如果哪种零件的库存量少于它的库存量临界值,则应该报告给采购部门以便定货,规定每天向采购部门送一次定货报告。该装配厂使用一台小型计算机处理更新库存清单主文件和产生定货报告的任务。零件库存量的每一次变化称为一个事务,由放在仓库中的CRT终端输入到计算机中;系统中的库存清单程序对事务进行处理,更新存储在磁盘上的库存清单主文件,并且把必要的定货信息写在磁带上。最后,每天由报告生成程序读一次磁带,并且打印出定货报告。一个例子:102订货系统的系统流程图系统流程图103数据流图104数据流图出发设想供选择的物理方案一订货系统数据流图事务随时可能发生,因此处理1.1(“接收事务”)必须是联机的;采购员每天需要一次定货报表,因此处理2(“产生报表”)应该以批量方式进行。可以联机地接收事务并放入队列中更新库存清单、处理定货和产生报表以批量方式进行105数据流图出发设想供选择的物理方案二订货系统数据流图改变自动化边界,把处理1.1,1.2和1.3放在同一个边界内,这个系统将联机地接收事务、更新库存清单和处理定货及输出定货信息;处理2将以批量方式产生定货报表如果把处理1.1和处理1.2放在一个自动化边界内,把处理1.3和处理2放在另一个边界内,意味着什么样的物理系统呢?第二步:进行一级分解Output输入流输出流变换流第三步:进行二级分解方法一:输入模块要向调用它的上级模块提供数据,因而它必须有两个下属模块:一个是接收数据;另一个是把这些数据变换成它的上级模块所需的数据。而接收模块有时输入模块,重复上述工作,循环下去。
输出模块是从调用它的上级模块接收数据,用以输出,因而也应当有两个下属模块:一个是将上级模块提供的数据变换成输出的形式;另一个是将它们输出。
变换中心模块的下层模块没有通用的设计方法,一般应参照数据流图的中心变换部分和功能分解、模块独立性的原则来考虑如何对中心变换模块进行分解。方法二:从变换中心的边界开始沿输入通路向外推移,把输入通路中的每个处理映射为受输入模块控制的一个下层模块;然后沿输出通路向外推移,把输出通路中的每个处理映射为直接或间接接受输出模块控制的一个下层模块。最后把变换中心内的每个处理映射成变换模块控制的一个模块。【例】
汽车数字仪表板的设计功能:①通过模-数转换实现传感器和微处理机接口;②在发光二极管面板上显示数据;③指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;④(箭头)指示加速或减速;⑤如果车速超过55mph,则发出警告铃声。1、确定输入流和输出流的边界燃料流传感器信号SPS旋转信号读旋转信号收集和求平均确定加/减速转换成转/分计算里程计算mph,超速值产生加/减速显示计算燃料消耗计算gph读和校核产生mpg显示产生mph显示发出铃声产生里程显示SPS
SPS箭头指示燃烧流上箭头水平线下箭头rpmrpmgphmphmpgmph超速值英里显示铃声mph显示mpg显示2、第一级分解燃料流传感器信号SPS旋转信号读旋转信号收集和求平均确定加/减速转换成转/分计算里程计算mph,超速值产生加/减速显示计算燃料消耗计算gph读和校核产生mpg显示产生mph显示发出铃声产生里程显示SPS
SPS箭头指示燃烧流上箭头水平线下箭头rpmrpmgphmphmpgmph超速值英里显示铃声mph显示mpg显示数字仪表板控制数据转换控制驱动仪表板接收传感器信号输入控制变换控制输出控制3、第二级分解ADCBMI每个加工映射成受P控制的一个下层模块P由边界向外移动,将每个遇到的加工映射成I控制下的一个低层模块I沿输出通路向外移动,将每个加工映射成直接或间接受O控制的低层模块OCBDA软件结构数字仪表板控制数据转换控制驱动仪表板接收传感器信号计算gph转换成rpm读燃料流收集sps读旋转信号确定加/减速计算mph计算mpg计算里程加/减速显示显示mph显示mpg显示里程发出铃声发光二极管显示转换成rpm求精:高内聚、低耦合!为初步设计的结果中的模块写一份初步的简要说明,包括:内部信息、接口、内容、约束求精系统软件结构数字仪表板控制数据转换控制驱动仪表板接收传感器信号计算gph读燃料流读旋转信号确定加/减速计算mph计算mpg计算里程加/减速显示显示mph显示mpg显示里程发出铃声发光二极管显示转换成rpm模块说明为每个模块附一个简要说明/IPO表进出该模块的信息(接口描述)模块内部的信息过程陈述,包括主要判定点及任务等对约束和特殊特点的简短讨论117通过以上可以看出:在总体设计中(1)将一个给定的DFD转换为初始的模块结构图基本上是一个“机械”的过程,一般体现不了设计人员的创造力;(2)优化设计-将一个初始的模块结构图转换为最终的模块结构图,对设计人员将是一种挑战,其结果将直接影响软件系统开发的质量。②事务设计……TTransactionrequest…Actionpaths……IIITBAC………总控III调度ABC………在汽车的数字仪表板上有一些选择功能,驾驶员可以按功能按钮进行选择。在面板上设置的按钮是:(1)点火,启动汽车。同时还提供一排数字按钮,驾驶员可以设置一个数字密码,只有密码正确汽车才能安全启动;(2)雷达探测。它可以给出障碍物的距离,如果太近了,就发出警告;(3)显示发动机工作状态。如油压、油温、水箱温度等;(4)显示行程,计算信息;(5)清除上一键。【例】
汽车数字仪表板的设计(1)复审并精化数据流图。
(2)确定事务中心,找出输入通路和每条活动路径。(3)设计顶层和第一层模块
(4)设计中下层模块
中下层模块主要是为数据流图中的每个活动路径设计相应的模块。每条活动路径可以看作是下一级的数据流图,可按前面介绍的方法,把它映射成与其流特征相对应的结构。
本例中输入部分比较简单,不需要再分解。我们以2号按钮雷达检查的活动路径为例细化。它可以看成一个变换流,可用变换流的映射方法设计软件模块.③综合设计法对于大型的软件系统,常常把变换分析和事务分析应用到同一个数据流图的不同部分,由此得到的软件结构图是变换型和事务型结构的混合结构。
分层DFD的映射对于一个复杂问题的DFD,往往是分层的。分层的DFD映射成SC图也应该是分层的,这样便于设计,也便于修改。模块说明为每个模块附一个简要说明/IPO表进出该模块的信息(接口描述)模块内部的信息过程陈述,包括主要判定点及任务等对约束和特殊特点的简短讨论练习1:
假设现要开发一个考务处理系统以实现计算机处理考生报名、成绩通知、成绩分析等事务,印制各种表格和通知书。该考务系统应具有以下功能:审查考生填写的报名表(包括考生姓名、通信地址等基本信息)是否合格,合格的为之自动生成报名号,编制准考证(包括准考证号、报名号、考生姓名)并打印发给考生。将考生的相关信息(报名号、准考证号、姓名、通信地址)录入考生名册。对阅卷点送来的考生成绩清单进行检查,合格的录入成绩册,该成绩册包含准考证号、科目号、成绩等数据项。自动生成成绩通知书,寄送考生。根据考试中心提供的录取标准,自动生成录取通知书,寄送考生。对考生成绩进行汇总统计,打印成绩分布表,报送考试中心。根据考生成绩分析试题难度,打印试题难度分析表,报送考试中心。
试采用SA/SD方法进行需求分析和软件设计,并完成以下各题(请写明必要的步骤):请给出该考务处理系统的数据流图和数据字典。根据数据流图,设计出该系统的软件结构,并画出结构图。六、网络的设计与集成当要求新系统是一个网络应用系统,则要对网络进行设计。根据整体的战略计划来构建网络系统设计方案要适应已有的网络计划考虑网络应用系统的可靠性、安全性、吞吐量,以及同步性等技术。七、软件体系结构(
Softwarearchitecture)设计不同系统的设计方案存在许多共性问题,把这些共性部分抽取出来,就形成了具有广泛代表性和可广泛接受的软件体系结构风格对于高质量的软件产品而言,首先要为其选择合适的体系结构风格,这样就能够更好地重用已有的设计方案和实现方案软件体系结构设计侧重于系统宏观结构的设计。它是处理质量属性的主要手段软件体系结构影响了一些非功能的关键属性,如可修改性、性能、可靠性、部分安全性、可重用性和可移植性等等。比起算法设计和编码,体系结构对一些属性有更显著的影响软件体系结构如同人的骨架。重中之重用户界面如同人的外表,最容易让人一见钟情或一见恶心。数据库是大脑,是存储和处理数据用的。模块如同人的器官依附于架构数据结构与算法如同人的神经和肌肉。
软件体系结构设计涉及的因素举例1).校园学生的在线调查客户端服务器
数据库httphttpJDBCAccess2).带验证的校园学生在线调查
客户端服务器数据库验证服务器httphttpJDBCAccess3).增加缓冲区的结构客户端服务器数据库验证服务器高速缓存管理httphttphttphttphttpJDBCAccesshttp图5.5拥有高速缓存的调查系统体系结构ASoftwarearchitecture(SA)defines:ComponentsConnectorsControlstyle几种典型的软件结构风格数据流风格调用/返回风格面向对象风格分层结构数据共享风格数据流风格把系统任务分成几个处理步骤(过滤器),每个处理步骤是一个独立的程序,通过系统的数据流(管道)连接。一个步骤的输出是下一个步骤的输入。管道/过滤器批处理方式图示:输入数据输出数据数据流风格优点:每个组件功能独立,一个组件的行为不受其他组件的影响,简单、支持并行执行、复用和维护缺点:数据必须是完整的,批处理方式,执行过程也是事先设计好的,弱控制性、弱交互性不适合处理交互的应用,不适合增量开发在数据传输上没有通用的标准,每个过滤器都需要增加解析和合成数据的工作,导致系统性能下降,增加开发的复杂性。调用-返回风格(最常见的影响最深远的风格)传统的主程序/子程序体系结构将功能分解为一个控制层次,其中“主”程序调用一组程序构件,这些程序构件又去调用别的程序构件,如下图所示。这种结构总体上为树状结构,可以在底层存在公共模块。调用-返回风格优点:从数据流图开始,从抽象到具体,从模糊到清晰地给出实现程序的过程。自顶向下、逐步分解,控制复杂性程序的执行由设计好的过程单线程控制(结构化程序设计语言支持)流程清晰简单,性能高缺点:顶在何方、下到何处子程序的正确性难于判断。丢掉了数据设计主程序太重,山下级模块间耦合度高,不易扩展,难以复用面向对象风格系统的构件封装了数据和必须应用到数据上的操作,构件间通过消息传递进行通信和合作。优点:一个对象对外界隐藏了自己的详细信息,所以,改变一个对象的表示,不会影响其它对象,模块的独立性高。继承和封装方法为对象复用提供了技术支持其缺点如下:(1)为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确调用它的对象。(2)必须修改所有显式调用它的其他对象,并消除由此带来的一些副作用。例如,如果A使用了对象B,C
也使用了对象B,那么,C对B的使用所造成的对A
的影响可能是料想不到的。分层风格在分层体系结构中,整个系统被组织成一个分层结构,每一层为上层提供服务,并作为下一层的客户。这种风格允许将复杂问题分解成一个增量步骤序列的实现分层结构风格的缺点并非所有系统都能够按照层次来进行划分。例如,有时出于对系统性能的考虑,需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 7 我们的衣食之源(第一课时)说课稿-2023-2024学年道德与法治四年级下册统编版
- 2023一年级语文上册 第二单元 1 ɑ o e说课稿 新人教版
- 2024-2025学年高中语文上学期第9周《劝学》说课稿
- 2025年度农业信息化平台建设与维护合同
- 2025年度汽车代驾服务驾驶员权益保障协议
- 6 j q x 第1课时(说课稿)-2024-2025学年统编版语文一年级上册
- 2025年啤酒经销商培训与发展合作合同4篇
- 2025版智能停车系统设备采购与停车场车位租赁合同3篇
- 海外就业中介合同(2篇)
- 10清新空气是个宝 (说课稿)-部编版道德与法治二年级下册
- 输变电工程监督检查标准化清单-质监站检查
- 2024-2025学年北京海淀区高二(上)期末生物试卷(含答案)
- 【超星学习通】马克思主义基本原理(南开大学)尔雅章节测试网课答案
- 2024年中国工业涂料行业发展现状、市场前景、投资方向分析报告(智研咨询发布)
- 化工企业重大事故隐患判定标准培训考试卷(后附答案)
- 工伤赔偿授权委托书范例
- 食堂餐具炊具供货服务方案
- 员工安全健康手册
- 2024化工园区危险品运输车辆停车场建设规范
- 自然科学基础(小学教育专业)全套教学课件
- 华为客服制度
评论
0/150
提交评论