收藏 分销(赏)

软件设计思路专题培训课件.ppt

上传人:人****来 文档编号:12879926 上传时间:2025-12-22 格式:PPT 页数:92 大小:774KB 下载积分:8 金币
下载 相关 举报
软件设计思路专题培训课件.ppt_第1页
第1页 / 共92页
软件设计思路专题培训课件.ppt_第2页
第2页 / 共92页


点击查看更多>>
资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,软件设计思路,软件设计,需求分析,:,软件系统必须,“,做什么,”,;,软件设计:,“,如何做,”,才可以满足需求规格说明中规定的各项需求。,从工程管理的角度来看,软件设计通常分为两步,即概要设计和详细设计。,概要设计的基本目的是回答,“,概括地说,软件系统应如何实现,”,这一问题。因此,概要设计有时称为,初步设计或总体设计,。,这个阶段的工作将划分出组成系统的,物理元素,程序、文件、数据库、人工过程和文档等,每个物理元素仍处在,黑盒子级,,具体内容将在以后仔细设计。,概要设计的关键是确定软件的总体结构,即确定软件系统的组成成份(子系统或模块)以及各组成成份之间的相互关系。,软件设计,(,续),详细设计是对概要设计结果的进一步细化,其主要任务是确定软件系统各组成成份内部的数据结构和算法过程,方法:结构化方法、面向对象方法,软件设计,(,续),总体设计过程,首先寻找实现目标系统的各种不同的方案,(需求分析阶段得到的数据流图是设想各种可能方案的基础)。,然后分析员从这些供选择的方案中,选取若干个合理的方案,,为每个合理的方案都准备一份系统,流程图,,列出组成系统的所有,物理元素,,进行,成本效益,/,分析,并且制定实现出一个最佳方案的,进度计划,。,系统分析员,推荐最佳方案,,用户接受后,为这个最佳方案,设计软件结构,。进行必要的数据库设计,确定测试要求并制定测试计划。,总体设计的必要性,可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。,总体设计过程由两个主要阶段,(,包括,9,个步骤,),组成:,(1),系统设计阶段,确定系统的具体实现方案;,(2),结构设计阶段,确定软件结构。,设计原理,:,模块化、抽象、信息隐藏和局部化、模块独立,模块的独立程度度量:,内聚和耦合,在软件设计中应该追求尽可能,松耦合、高内聚,的系统。,启发规则:,7,条规则,描绘软件结构的图形工具:,层次图、,HIPO,图、结构图,面向数据流的设计方法:,变换流分析、事务流分析,5.1,设计过程,总体设计过程通常由两个主要阶段组成:,(1),系统设计阶段,确定系统的具体实现方案;,(2),结构设计阶段,确定软件结构。,典型的总体设计过程包括下述,9,个步骤:,1.,设想供选择的方案,2.,选取合理的方案,3.,推荐最佳方案,4.,功能分解,5.,设计软件结构,6.,设计数据库,7.,制定测试计划,8.,书写文档,9.,审查和复审,在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。在总体设计阶段开始时只有系统的逻辑模型,分析员有充分的自由分析比较不同的物理实现方案,一旦选出了最佳的方案,将能大大提高系统的性能,/,价格比。,需求分析阶段得出的数据流图是总体设计的极好的出发点。设想供选择的方案的一种常用的方法是,,设想把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法,(,例如,组内不同处理的执行时间不相容,),,余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。,1.,设想供选择的方案,应该从前一步得到的一系列供选择的方案中选取若干个合理的方案,,通常至少选取低成本、中等成本和高成本的三种方案,。在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。,对每个合理的方案分析员都应该准备下列,4,份资料:,(1),系统流程图;,(2),组成系统的物理元素清单;,(3),成本,/,效益分析;,(4),实现这个系统的进度计划。,2.,选取合理的方案,分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。制定详细实现计划的关键技术是本书第,13,章中将要介绍的工程网络。,用户和有关的技术专家应该认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段,结构设计。,3.,推荐最佳方案,为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件,(,或数据库,),。对程序,(,特别是复杂的大型程序,),的设计,通常分为两个阶段完成:,首先进行结构设计,然后进行过程设计,。结构设计确定程序由哪些模块组成,以及这些模块之间的关系;过程设计确定每个模块的处理过程。结构设计是总体设计阶段的任务,过程设计是详细设计阶段的任务。,为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。,分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。一般说来,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。功能分解导致数据流图的进一步细化,同时还应该用,IPO,图或其他适当的工具简要描述细化后每个处理的算法。,4.,功能分解,通常程序中的一个模块完成一个适当的子功能。,应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能,。软件结构,(,即由模块组成的层次系统,),可以用层次图或结构图来描绘,第,5.4,节将介绍这些图形工具。,如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构,这就是第,5.5,节中将要讲述的面向数据流的设计方法。,5.,设计软件结构,对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。,在数据库课中已经详细讲述了设计数据库的方法,本书不再赘述。,6.,设计数据库,在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。本书第,7,章将仔细讨论软件测试的目的和设计测试方案的各种技术方法。,7.,制定测试计划,应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种:,(1),系统说明,主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本,/,效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用,IPO,图或其他工具,(,例如,,PDL,语言,),简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。,(2),用户手册,根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。,(3),测试计划,包括测试策略,测试方案,预期的测试结果,测试进度计划等等。,(4),详细的实现计划,(5),数据库设计结果,8.,书写文档,最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,9.,审查和复审,5.2,设计原理,模块可以是过程、函数、子程序和宏、对象内的方法。,5.2.1,模块化,C(P1)C(P2),显然,E(P1)E(P2),而且,C(P1+P2)C(P1)+C(P2),故,E(P1+P2)E(P1)+E(P2),其中,,C(x),问题,x,的复杂程度;,模块化和软件成本,当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本,(,工作量,),确实减少了,;,但是随着模块数目增加,设计模块间接口所需要的工作量也将增加。,虽然目前还不能精确地决定,M,的数值,但是在考虑模块化的时候总成本曲线确实是有用的指南。,采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。,5.2.2,抽象,抽象就是抽出事物的本质特性而暂时不考虑它们的细节。,软件工程过程的每一步都是对软件解法的抽象层次的一次精化。在可行性研究阶段,软件作为系统的一个完整部件;在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;最后,当源程序写出来以后,也就达到了抽象的最低层。,5.2.3,逐步求精,逐步求精:,为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。,人类的认知过程遵守,Miller,法则:一个人在任何时候都只能把注意力集中在(,72,)个知识块上。,逐步求精方法的强大作用就在于,它能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑的细节,这些细节将留到以后再考虑。,5.2.4,信息隐藏和局部化,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息,(,过程和数据,),对于不需要这些信息的模块来说,是不能访问的。,局部化是指把一些关系密切的软件元素物理地放得彼此靠近。,5.2.5,模块独立,模块独立化有如下优点:,1.,有效的模块化,(,即具有独立的模块,),的软件比较容易开发出来。,2.,独立的模块比较容易测试和维护。,模块的独立程度可以由内聚和耦合两个定性标准度量,:,耦合,衡量不同模块彼此间互相依赖,(,连接,),的紧密程度;,内聚,衡量一个模块内部各个元素彼此结合的紧密程度。,耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。,在软件设计中应该追求尽可能,松散耦合,的系统。,模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。,如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们彼此完全独立,这意味着模块间无任何连接,耦合程度最低。但是,在一个软件系统中不可能所有模块之间都没有任何连接。,1.,耦合,数据耦合:,如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。,控制耦合:,如果传递的信息中有控制信息,(,尽管有时这种控制信息以数据的形式出现,),,则这种耦合称为控制耦合。,特征耦合:,当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。,公共环境耦合:,当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。,内容耦合:,如果出现下列情况之一,两个模块间就发生了内容耦合:,一个模块访问另一个模块的内部数据;,一个模块不通过正常入口而转到另一个模块的内部;,两个模块有一部分程序代码重叠,(,只可能出现在汇编程序中,),;,一个模块有多个入口,(,这意味着一个模块有几种功能,),。,总之,耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则:,尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。,内聚标志一个模块内各个元素彼此结合的紧密程度,简单地说,理想内聚的模块只做一件事情。,设计时应该力求做到高内聚,内聚和耦合是密切相关,模块内的高内聚往往意味着模块间的松耦合。,2.,内聚,低内聚有如下几类:,偶然内聚:,如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。,逻辑内聚:,如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。,时间内聚:,如果一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。,中内聚主要有两类:,过程内聚:,如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。,(,使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块,),通信内聚:,如果模块中所有元素都使用同一个输入数据和,(,或,),产生同一个输出数据,则称为通信内聚。,高内聚也有两类:,顺序内聚:,如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,(,通常一个处理元素的输出数据作为下一个处理元素的输入数据,),,则称为顺序内聚。,功能内聚:,根据数据流图划分模块时,通常得到顺序内聚的模块,这种模块彼此间的连接往往比较简单。如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。,耦合和内聚的概念是,Constantine,Yourdon,Myers,和,Stevens,等人提出来的。按照他们的观点,如果给上述七种内聚的优劣评分,将得到如下结果:,功能内聚,10,分时间内聚,3,分,顺序内聚,9,分逻辑内聚,1,分,通信内聚,7,分偶然内聚,0,分,过程内聚,5,分,事实上,没有必要精确确定内聚的级别。重要的是设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获得较高的模块独立性。,5.3,启发规则,1.,改进软件结构提高模块独立性,2.,模块规模应该适中,3.,深度、宽度、扇出和扇入都应适当,4.,模块的作用域应该在控制域之内,5.,力争降低模块接口的复杂程度,6.,设计单入口单出口的模块,7.,模块功能应该可以预测,设计出软件的初步结构以后,应该审查分析这个结构,通过,模块分解或合并,力求降低耦合提高内聚,。例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。,1.,改进软件结构提高模块独立性,经验表明,一个模块的规模不应过大,最好能写在一页纸内,(,通常不超过,60,行语句,),。有人从心理学角度研究得知,当一个模块包含的语句数超过,30,以后,模块的可理解程度迅速下降。,过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性。,过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。因此过小的模块有时不值得单独存在,特别是只有一个模块调用它时,通常可以把它合并到上级模块中去而不必单独存在。,2.,模块规模应该适中,模块过大:可理解程度下降,模块过小:开销大于有效操作、接口复杂,深度,表示软件结构中控制的层数。,宽度,是软件结构内同一个层次上的模块总数的最大值。,扇出,是一个模块直接控制,(,调用,),的模块数目。,扇出太大,应增加中间层次的控制模块;扇出小时,把下级模块进一步分解成若干个子功能模块或合并到,它的上级模块中去。,扇入,是表明有多少个上级模块直接调用它。,3.,深度、宽度、扇出和扇入都应适当,设计得很好的软件结构通常顶层扇出比较高,中层扇出较少,底层扇入到公共的实用模块中去,(,底层模块有高扇入,),。,(1),深度和程序长度之间应该有粗略的对应关系,当然这个对应关系是在一定范围内变化的。如果层数过多则应该考虑是否有许多管理模块过分简单了,能否适当合并。,(2),一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。,(3),一个设计得好的典型系统的平均扇出通常是,3,或,4(,扇出的上限通常是,5,9),。,(4),扇入越大则共享该模块的上级模块数目越多,这是有好处的,但是,不能违背模块独立原理单纯追求高扇入。,高扇出的模块结构举例:,编外,人员,工资,取得,工资,数据,计时,制工,资额,薪金,制工,资额,编外,人员,税款,编外,人员,扣款,常规,扣款,税收,扣款,计算实发工资,避免平铺结构,编外,人员,工资,取得工资数据,计时,制工,资额,薪金,制工,资额,编外,人员,税款,编外,人员,扣款,常规,扣款,税收,扣款,计算实发工资,计时工人实发工资,计薪工人实发工资,编外人员实发工资,增加中间层降低扇出,模块的作用域定义为受该模块内一个判定影响的所有模块的集合。模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合。,模块,C,的控制范围,:C,、,D,、,E,、,F,、,G,、,H,如果模块,C,作出的决策影响了模块,L,,,L,超出了,C,的控制范围,.,(难于理解;会出现控制耦合),1,、把做决策的点,C,上移,2,、把,L,移到,C,的控制域中,在一个设计得很好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。,4.,模块的作用域应该在控制域之内,C,H,D,E,G,X,F,A,I,L,J,K,B,模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。,接口复杂或不一致,(,即看起来传递的数据之间没有联系,),,是紧耦合或低内聚的征兆,,应该重新分析这个模块的独立性。,5.,力争降低模块接口的复杂程度,这条启发式规则警告软件工程师,不要使模块间出现内容耦合,。当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。,6.,设计单入口单出口的模块,模块的功能应该能够预测,但也要防止模块功能过分局限。,如果一个模块可以当做一个黑盒子,也就是说,,只要输入的数据相同就产生同样的输出,,这个模块的功能就是可以预测的。带有内部,“,存储器,”,的模块的功能可能是不可预测的,因为它的输出可能取决于内部存储器,(,例如某个标记,),的状态。由于内部存储器对于上级模块而言是不可见的,所以这样的模块既不易理解又难于测试和维护。,7.,模块功能应该可以预测,5.4,描绘软件结构的图形工具,层次图,HIPO,图(可追踪),IPO,图来描述处理过程,结构图,循环,调用,条件,调用,模块的名字或主要功能,调用关系,传递的信息,(,数据流和控制流,),5.5,面向数据流的设计方法,(,结构化设计 方法,SD),面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。,面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。,因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。,5.5.1,概念,结构化设计方法(,SD,)以数据流图为基础,它定义了把,DFD,变换成,软件结构,的不同,映射,方法。,数据流图可分为两种类型:,变换型数据流,事务型数据流,参看图,5.8,,信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。,1.,变换流,图,5.8,变换流,当数据流图具有和图,5.9,类似的形状时,这种数据流是,“,以事务为中心的,”,,也就是说,数据沿输入通路到达一个处理,T,,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。图,5.9,中的处理,T,称为事务中心,它完成下述任务:,(1),接收输入数据,(2),分析每个事务以确定它的类型;,(3),根据事务类型选取一条活动通路。,2.,事务流,图,5.9,事务流,图,5.10,(见书,96,页)说明了使用面向数据流方法逐步设计的过程。,应该注意,任何设计过程都不是机械地一成不变的,设计首先需要人的判断力和创造精神,这往往会凌驾于方法的规则之上。,3.,设计过程,精化数据流图,区分事务中心,和数据接收路径,映射成变换结构,流类型,区分输入和,输出分支,映射成事务结构,用启发式设计规则精化软件结构,导出接口描述和全程数据结构,复查,详细设计,“,事务,”,“,变换,”,事务分析,变换分析,5.5.2,变换分析,变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。,映射,DFD,(,问题结构,),软件系统的结构,(,程序结构,),变换流映射,步骤:,(1),区分传入、变换中心、传出部分,在,DFD,上标明分界线,(2),第一级分解,(,建立初始,SC,框架,),设计顶层和第一层模块,(3),第二级分解,(,分解,SC,各分支,),自顶向下分解,设计出每个分支的中、下层模块,M,C,M,T,M,A,M,E,c,e,c,e,u,w,u,w,C,B,A,E,D,a,b,d,e,c,Q,P,R,e,p,c,p,r,r,u,w,W,U,V,w,u,v,假设的仪表板将完成下述功能:,(1),通过模数转换实现传感器和微处理机接口;,(2),在发光二极管面板上显示数据;,(3),指示每小时英里数,(mph),,行驶的里程,每加仑油行驶的英里数,(mpg),等等;,(4),指示加速或减速;,(5),超速警告:如果车速超过,55,英里,/,小时,则发出超速警告铃声。,在软件需求分析阶段应该对上述每条要求以及系统的其他特点进行全面的分析评价,建立起必要的文档资料,特别是数据流图。,1.,例子,第,1,步 复查基本系统模型。,复查的目的是确保系统的输入数据和输出数据符合实际。,第,2,步 复查并精化数据流图。,应该对需求分析阶段得出的数据流图认真复查,并且在必要时进行精化。不仅要确保数据流图给出了目标系统的正确的逻辑模型,而且应该使数据流图中每个处理都代表一个规模适中相对独立的子功能。,第,3,步 确定数据流图具有变换特性还是事务特性,一般地说,一个系统中的所有信息流都可以认为是变换流,但是,当遇到有明显事务特性的信息流时,建议采用事务分析方法进行设计。,2.,设计步骤,输入流和输出流的边界和对它们的解释有关,也就是说,不同设计人员可能会在流内选取稍微不同的点作为边界的位置。当然在确定边界时应该仔细认真,但是把边界沿着数据流通路移动一个处理框的距离,通常对最后的软件结构只有很小的影响。,第,4,步 确定输入流和输出流的边界,从而孤立出变换中心,图,5.12,具有边界的数据流图,图,5.13,说明了第一级分解的方法。位于软件结构最顶层的控制模块,Cm,协调下述从属的控制功能:,输入信息处理控制模块,Ca,协调对所有输入数据的接收;变换中心控制模块,Ct,管理对内部形式的数据的所有操作;,第,5,步 完成,“,第一级分解,”,图,5.13,第一级分解的方法,图,5.14,数字仪表板系统的第一级分解,所谓第二级分解就是把数据流图中的每个处理映射成软件结构中一个适当的模块。完成第二级分解的方法是,从变换中心的边界开始沿着输入通路向外移动,把输入通路中每个处理映射成软件结构中,Ca,控制下的一个低层模块;然后沿输出通路向外移动,把输出通路中每个处理映射成直接或间接受模块,Ce,控制的一个低层模块;最后把变换中心内的每个处理映射成受,Ct,控制的一个模块。图,5.15,表示进行第二级分解的普遍途径。,第,6,步 完成,“,第二级分解,”,。,图,5.15,第二级分解的方法,图,5.17,未经精化的变换结构,图,5.18,未经精化的输出结构,图,5.16,未经精化的输入结构,第,7,步 使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。,图,5.19,精化后的数字仪表板系统的软件结构,输入结构中的模块,“,转换成,rpm,”,和,“,收集,sps,”,可以合并;,模块,“,确定加速,/,减速,”,可以放在模块,“,计算,mph,”,下面,以减少耦合;,5.5.3,事务分析,虽然在任何情况下都可以使用变换分析方法设计软件结构,但是在数据流具有明显的事务特点时,也就是有一个明显的,“,发射中心,”,(,事务中心,),时,还是以采用事务分析方法为宜。,事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在于由数据流图到软件结构的映射方法不同。,由事务流映射成的软件结构包括一个接收分支和一个发送分支。映射出接收分支结构的方法和变换分析映射出输入结构的方法很相像,即从事务中心的边界开始,把沿着接收流通路的处理映射成模块。发送分支的结构包含一个,调度模块,,它控制下层的所有活动模块;然后把数据流图中的每个活动流通路映射成与它的流特征相对应的结构。图,5.20,说明了上述映射过程。,事务流映射方法:,一般说来,如果数据流不具有显著的事务特点,最好使用变换分析;反之,如果具有明显的事务中心,则应该采用事务分析技术。但是,机械地遵循变换分析或事务分析的映射规则,很可能会得到一些不必要的控制模块,如果它们确实用处不大,那么可以而且应该把它们合并。反之,如果一个控制模块功能过分复杂,则应该分解为两个或多个控制模块,或者增加中间层次的控制模块。,混合流设计,对于一个大系统,常常把变换分析和事务分析应用到同一个数据流图的不同部分,由此得到的子结构形成“构件”,可以利用它们构造完整的软件结构。,5.5.4,设计优化,考虑设计优化问题时应该记住,“,一个不能工作的最佳设计的价值是值得怀疑的,”。软件设计人员应该致力于开发能够满足所有功能和性能要求,而且按照设计原理和启发式设计规则衡量是值得接收的软件。,应该在设计的早期阶段尽量对软件结构进行精化。可以导出不同的软件结构,然后对它们进行评价和比较,力求得到“最好”的结果。这种优化的可能,是把软件结构设计和过程设计分开的真正优点之一。,注意,结构简单通常既表示设计风格优雅,又表明效率高。设计优化应该力求做到在有效的模块化的前提下使用最少量的模块,以及在能够满足信息要求的前提下使用最简单的数据结构。,对于时间是决定性因素的应用场合,可能有必要在详细设计阶段,也可能在编写程序的过程中进行优化。软件开发人员应该认识到,程序中相对说比较小的部分,(,典型地,,10%,20%),,通常占用全部处理时间的大部分,(50%,80%),。,用下述方法对时间起决定性作用的软件进行优化是合理的:,(,1),在不考虑时间因素的前提下开发并精化软件结构;,(2),在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程,(,算法,),,以求提高效率;,(3),使用高级程序设计语言编写程序;,(4),在软件中孤立出那些大量占用处理机资源的模块;,(5),必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。,上述优化方法遵守了一句格言:,“,先使它能工作,然后再使它快起来。,”,(1)计算标准分:根据考生原始分计算,得到标准分,存入考生分数文件。,(2)计算录取线分:根据标准分、招生计划文件中的招生人数,计算录取线,存人录取线文件。,试根据要求画出该系统的数据流程图,并将其转换为软件结构图。,案例,高校录取统分子系统有如下功能:,源点,/,终点,处理,计算标准分,计算录取线分,数据流,数据存储,原始分,标准分,录取线分,招生人数,考生分数文件,招生计划文件,录取线文件,计算标准分,计算录取线分,标准分,录取线分,招生人数,原始分,考生分数文件,招生计划文件,录取线文件,标准分,数据流图:,系统的软件结构图:,原始分,标准分,招生人数,录取线分,统分子系统,处理标准分,取得原始分,计算标准分,存取标准分,计算录取线分,取得招生人数,存录取线分,计算,标准分,计算,录取线分,招生计划文件,考生分数文件,录取线文件,标准分文件,原始分,标准分,标准分,标准分,招生数,录取线分,系统的数据流图:,统分子系统,取得标准分,取得招生数,计算录取分数线,取得原始分,计算标准分,登录考生分数,登录录取线分,原始分,标准分,招生数,录取线分,统分子系统,取得标准分,取得招生数,计算录取分数线,取得原始分,计算标准分,登录考生分数,登录录取线分,原始分,标准分,招生数,录取线分,系统的软件结构图:,5.6,小结,总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。因此,总体设计阶段主要由两个小阶段组成。首先需要进行系统设计,从数据流图出发设想完成系统功能的若干种合理的物理方案,分析员应该仔细分析比较这些方案,并且和用户共同选定一个最佳方案。然后进行软件结构设计,确定软件由哪些模块组成以及这些模块之间的动态调用关系。层次图和结构图是描绘软件结构的常用工具。,在进行软件结构设计时应该遵循的最主要的原理是模块独立原理,也就是说,软件应该由一组完成相对独立的子功能的模块组成,这些模块彼此之间的接口关系应该尽量简单。,抽象和求精是一对互补的概念,也是人类解决复杂问题时最常用、最有效的方法。在进行软件结构设计时一种有效的方法就是,由抽象到具体地构造出软件的层次结构。,软件工程师在开发软件的长期实践中积累了丰富的经验,总结这些经验得出一些很有参考价值的启发式规则,它们往往能对如何改进软件设计给出宝贵的提示。在软件开发过程中既要充分重视和利用这些启发式规则,又要从实际情况出发避免生搬硬套。,自顶向下逐步求精是进行软件结构设计的常用途径;但是,如果已经有了详细的数据流图,也可以使用面向数据流的设计方法,用形式化的方法由数据流图映射出软件结构。应该记住,这样映射出来的只是软件的初步结构,还必须根据设计原理并且参考启发式规则,认真分析和改进软件的初步结构,以得到质量更高的模块和更合理的软件结构。,在进行详细的过程设计和编写程序之前,首先进行结构设计,其好处正在于可以在软件开发的早期站在全局高度对软件结构进行优化。在这个时期进行优化付出的代价不高,却可以使软件质量得到重大改进。,习题,5-1,为每种类型的模块耦合举一个具体例子。,5-2,为每种类型的模块内聚举一个具体例子。,5-3,用面向数据流的方法设计下列系统的软件结构:,(1),储蓄系统,(,参见习题,2,第,2,题,),;,(2),机票预订系统,(,参见习题,2,第,3,题,),;,(3),患者监护系统,(,参见习题,2,第,4,题,),。,5-4,美国某大学共有,200,名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过,26 000(,含,26 000),的教师工资将保持不变,年工资少于,26 000,的教师将增加工资,所增加的工资数按下述方法计算:给每个由此教师所赡养的人,(,包括教师本人,),每年补助,100,,此外,教师有一年工龄每年再多补助,50,,但是,增加后的年工资总额不能多于,26 000,。,教师的工资档案储存在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇用日期等信息。需要写一个程序计算并印出每名教师的原有工资和调整后的新工资。要求:,(1),画出此系统的数据流图;,(2),写出需求说明;,(3),设计上述的工资调整程序,(,要求用,HIPO,图描绘设计结果,),,设计时请分别采用下述两种算法,并比较这两种算法的优缺点:,(a),搜索工资档案数据,找出年工资少于,26 000,的人,计算新工资,校核是否超过,26 000,,储存新工资,印出新旧工资对照表;,(b),把工资档案数据按工资从最低到最高的次序排序,当工资数额超过,26 000,时即停止排序,计算新工资,校核是否超过限额,储存新工资,印出结果。,(4),你所画出的数据流图适用于哪种算法,?,图,1,:工资支付系统的第一级分解,5.4,参考答案,图,2,:工资支付系统的第二级分解,图,3,:优化后的工资支付软件结构,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服