第三部分 软件设计与建模软件设计

上传人:猪** 文档编号:243121468 上传时间:2024-09-16 格式:PPT 页数:84 大小:1.22MB
返回 下载 相关 举报
第三部分 软件设计与建模软件设计_第1页
第1页 / 共84页
第三部分 软件设计与建模软件设计_第2页
第2页 / 共84页
第三部分 软件设计与建模软件设计_第3页
第3页 / 共84页
点击查看更多>>
资源描述
,软件工程,方法与实践,(机械工业出版社),高等院校计算机课程案例教程系列,窦万峰 编著,主讲:,李淑芝,13507077576,Lsz013,主讲:曾婕,13767792699,zjoancn77,1.,现代软件工程,(,国家示范性软件学院系列教材,),张家浩,/,东南大学 机械工业出版社,2009.1,2.,软件工程,理论与实践,许家珆 曾翎 彭德中 编著 高等教育出版社,2004.7,3.,软件工程,-,实践者的研究方法,(美),Roger S. Pressman,著 郑人杰等译 机械工业出版社,2008.6,4.,Software Engineering, 6th Edition,Sommerville.I. (,影印版,),机械工业出版社,2003.4,主要参考书:,总 目 录,第,1,章 软件工程学概述,(,2,学时),第,2,章 软件过程,(,2,学时),第,3,章 软件过程模型,(,4,学时),第,4,章 案例研究,(,2,学时),第,5,章 软件需求分析过程,(,4,学时),第,6,章 结构化分析建模,(,4,学时),第,7,章 面向对象分析,(,6,学时),第,8,章 软件设计,(,4,学时),第,9,章 结构化设计方法,(,4,学时),总 目 录,第,10,章 面向对象设计,(,4,学时),第,11,章 软件实现,(,2,学时),第,12,章 软件测试,(4学时),第,13,章 软件维护,(2学时),第,14,章 软件项目管理,(,2,学时),第,15,章 软件项目估算,(,1,学时),第,16,章 软件项目计划与管理,(,1,学时),第,8,章 软件设计,8.1,软件设计概述,8.2,软件模块化设计,8.3,软件结构,8.4,软件系统结构模型,8.5,体系结构模式,8.6,习题,引言:,我们前面已经学习了软件从问题定义到可行性分析,到需求分析,一步步明确软件问题,用户的需求,但那都是软件的需求,而不是软件(也可以说是从用户角度描述,而不是从软件开发人员角度描述问题),我们这一章就是要将我们的计算机软件需求变为软件表示,那么什么是软件表示?怎样用软件表示我们的问题?如何实现这一变换?这是我们这一部份要解决的主要问题。,8.1,软件设计概述,软件设计阶段的,基本目标,是构造系统,“,怎么做,”,的模型描述,它是整个软件开发过程的核心问题,开发工作根据设计的方案进行,,软件的总体设计决定了系统的质量,“,设计先于编码,”,,这是软件工程,“,推迟实现,”,基本原则,软件系统设计是把软件需求,“,变换,”,为用于构造软件的蓝图,“,输入,”,是需求分析各种模型元素,“,输出,”,是软件设计模型和表示,软件设计的目标,是对将要实现的软件,系统的体系结构、系统的数据、系统模块间的接口,以及所采用的算法,给出详尽的描述,总体,设计,需求 说明书,复审,软件结构,修 改,详细,设计,可接受,模块描述,复审,修 改,设计,说明书,软件设计工作流程,从工程管理的角度看,,软件设计,分两步完成:,总体设计(概要设计),和,详细设计,两个阶段。,首先做概要设计,(,软件结构设计,),将软件需求转化为,数据结构和软件的系统结构,。,然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件详细的数据结构和算法。,通过软件设计阶段的工作将划分出组成系统的物理元素:,程序,文件,数据库,人工过程,文档等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后详细设计。,总体设计阶段的另一项重要任务是设计,软件的结构,,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。,设计过程的一般模型,需求描述,体系结构设计,抽象描述,接口设计,组件设计,数据结构,设计,系统体系结构,软件描述,接口描述,组件描述,数据结构,描述,算法描述,算法设计,设计活动,设计产品,软件,设计,功能与,性能需求,编码,软件,测试,程序模块,已测试,软件,系统结构,设计,过程设计,数据结构设计,信息域,需求,开发阶段信息流,总体设计,通常由两个主要阶段组成:,(1),系统设计阶段,:确定系统的具体实现方案;,(2),结构设计阶段,:确定软件结构。,典型的,总体设计,过程包括下述,9,个步骤:,1.,设计供选择的方案,需求分析阶段得出的数据流图是总体设计的极好的出发点。,一旦选出了边界划分,(,分组,),最佳的方案,将能大大提高系统的性能,/,价格比。,2.,选取合理的方案,通常至少选取低成本、中等成本和高成本的三种方案。,在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。,对每个合理的方案分析员都应该准备下列,4,份资料:,(1),系统流程图;,(2),组成系统的物理元素清单;,(3),成本,/,效益分析;,(4),实现这个系统的进度计划。,3.,推荐最佳方案,分析员综合分析对比各种合理方案的利弊,推荐一个最佳的方案。,用工程网络技术为推荐的方案制定详细的实现计划。,用户和有关的技术专家认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。,在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段,结构设计,。,4.,功能分解,为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件,(,或数据库,),。,对程序,(,特别是复杂的大型程序,),的设计,通常分为两个阶段完成:,(,1,),结构设计,:确定程序由哪些模块组成,以及这些模块之间的关系;,(,2,),过程设计,:确定每个模块的处理过程,这是详细设计阶段的任务。,为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。,分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。,一般说来,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。,功能分解导致数据流图的进一步细化,同时还应该用,IPO,图或其他适当的工具简要描述细化后每个处理的算法。,5.,设计软件结构,通常程序中的一个模块完成一个适当的子功能。,软件结构,(,即由模块组成的层次系统,),表示软件系统的构成,是软件模块间关系的表示,,可以用,层次图,或,结构图,来描绘。,如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构,这就是面向数据流的设计方法。,A,B,C,D,E,F,G,H,I,J,K,L,M,软件结构图,6.,设计数据库(确定系统的数据结构),对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。,7.,设计用户界面,作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的可用性及使用寿命。,8.,制定软件设计测试计划,在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。,9.,书写文档,在这个阶段应该完成的文档通常有下述几种:,(1),系统说明主要内容:系统流程图描绘的系统构成方案,物理元素清单,成本,/,效益分析,精化的数据流图,用层次图或结构图描绘的软件结构,用,IPO,图或其他工具简要描述的各个模块的算法,模块间的接口关系等。,(2),用户手册:根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。,(3),测试计划:测试策略,测试方案,预期的测试结果,测试进度计划等。,(4),详细的实现计划。,(5),数据库设计结果。,10.,审查和复审,最后对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,软件设计质量原则,设计过程不应该受,“,隧道视野,”,的限制,设计对于分析模型应该是可跟踪的,设计不应该从头做起,设计应该缩短软件和现实问题的,“,智力距离,”,设计应该表现出一致性和集成性,设计应该能够适应修改,设计不是编码,在创建设计时,就应该考虑能够评估其质量,应该复审每一步设计,以减少语义性错误,概要设计说明书,1,范围,1.1,系统目标,1.2,主要软件需求,1.3,软件设计约束、限制,2,数据设计,2.1,数据对象和形成的数据结构,2.2,文件和数据库结构,外部文件结构, 逻辑结构, 逻辑记录描述, 访问方法,全局数据,文件和数据交叉索引,3,体系结构设计,3.1,数据和控制流复审,3.2,得出的程序结构,4,接口设计,4.1,人机界面规约,4.2,人机界面设计规约,4.3,外部接口设计,外部数据接口,外部系统或设备接口,4.4,内部接口设计规约,5,(每个模块)过程设计,5.1,处理说明,5.2,接口描述,5.3,设计语言描述,5.4,使用的模块,5.5,内部设计结构,5.6,注释,/,约束,/,限制,6,需求交叉索引,7,测试部分,7.1,测试方针,7.2,集成策略,7.3,特殊考虑,8,附录(包括特殊注解),详细设计说明书,1,引言,1.1,编写目的:阐明编写详细设计说明书的目的,指明读者对象。,1.2,项目背景:应包括项目的来源和主管部门等。,1.3,定义:列出本文档中所用到的专门术语的定义和缩写词。, 列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源, 文档所引用的资料、软件开发的标准或规范。,1.4,参考资料:,项目经核准的计划任务书、合同或上级机关的批文;,项目开发计划;需求规格说明书;概要设计说明书;,测试计划(初稿);,用户操作手册。,2,总体设计,2.1,需求概述,2.2,软件结构:如给出软件系统的结构图。,3,程序描述,3.1,逐个模块给出以下说明:, 性能, 输出项目, 功能, 输入项目,3.2,算法:模块所选用的算法。,3.3,程序逻辑:详细描述模块实现的算法,可采用:标准流程图;,PDL,语言;,N-S,图;判定表等描述算法的图表。,3.4,接口, 限制条件, 存储分配,3.5,测试要点:给出测试模块的主要测试要求。,8.2,软件模块化设计,有人说,模块化是为了使一个复杂的大型程序能被人的智力所管理,软件应该具备的惟一属性。,模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。,把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成一个特定子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计(,Modular Design,)。,软件模块化设计可以简化软件的设计和实现,提高软件的可理解性和可测试性,并使软件更容易得到维护。,分解、抽象、逐步求精、信息隐蔽和模块独立性,,是软件模块化设计的指导思想。,模块(,构件,)是程序对象有名字的集合。,例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。,面向对象方法学中的,对象,是模块,对象内的方法(服务)也是模块。模块是构成程序的基本构件。,模块化就是将系统划分为若干个模块,每个模块完成一个子功能。,模块化的目的是将系统,“,分而治之,”,,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。,令:,C,(,X,)表示问题,X,的复杂度函数,,E,(,X,)表示解决问题,X,所需工作量的复杂度函数;,若:有问题,P1,,,P2,,,C,(,P1,), C,(,P2,);,显然:,E,(,P1,), E,(,P2,),由经验:,C,(,P1+P2,), C,(,P1,),+ C,(,P2,),于是:,E,(,P1+P2,), E,(,P1,),+ E,(,P2,),将问题(,P1+P2,)划分为两个问题,P1,和,P2,后,其工作量和复杂度都降低。,软件总成本,模块化与软件成本的关系,成本,模块,数目,模块成本,接口成本,最小成本区,M,结论:,并非模块分得越小越好,因为模块之间接口的复杂度和工作量会增加。显然,每个软件系统都有一个最佳模块数,M,,注意选择分解的最佳模块数。,模块化降低软件复杂度的简单证明:,采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。,因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。,因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。,模块化的,主要优点,是:模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。,人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。,人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面,(,共性,),。,把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。,或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。,抽象,处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。,软件工程过程的每一步都是对软件解法的抽象层次的一次精化:,在可行性研究阶段,软件作为系统的一个完整部件;,在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;,当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;,最后,当源程序写出来以后,也就达到了抽象的最低层。,软件体系结构,软件体系结构,是指软件的整体结构和这种结构为系统提供概念上完整性的方式。,体系结构可以是程序构件或模块的结构或组织,这些构件或模块交互的形式以及这些构件所用数据的结构。,体系结构设计可以使用大量的模型来表达。,信息隐藏原理,指出:应该这样设计和确定模块,使得一个模块内包含的信息,(,过程和数据,),对于不需要这些信息的模块来说,是不能访问的。,实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节。,独立的构件或模块之间的,“,接口,”,简单而清晰。,所谓,局部化,是指把一些关系密切的软件元素物理地放得彼此靠近。,在模块中使用局部数据元素是局部化的一个例子。,显然,,局部化有助于实现信息隐藏。,信息隐藏和局部化,模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。,希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。,模块的独立性很重要,主要有两条理由:,第一,有效的模块化的软件比较容易开发出来。,第二,独立的模块比较容易测试和维护。,总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。,模块独立,模块独立性的度量标准是两个定性准则:,(,1,),耦合性,:描述模块之间联系的紧密程度;,(,2,),内聚性,:描述模块内部联系的紧密程度。,模块独立性比较强的模块应该具有,高内聚性和低耦合度。,模块独立性愈高,则块内联系越强,块间联系越弱。,低,非直接,耦合,数据,耦合,控制,耦合,特征,耦合,公共,耦合,内容,耦合,高,弱,强,耦合性,模块独立性,1.,耦合,耦合是对一个软件结构内不同模块之间互连程度的度量。,耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。,模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。,(,1,)数据耦合:,两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。,系统中至少必须存在数据耦合,只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。,(,2,)控制耦合:,一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。,A,模块,flag,f1,B,f2,fn, ,控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合在把模块适当分解之后通常可以用数据耦合代替它。,(,3,)特征耦合:,被调用的模块需要使用作为参数传递进来的数据结构中的一部分数据元素时,就出现了特征耦合。,(,4,)公共耦合:,当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。,公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。,如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时,可以利用公共环境耦合,。,全局,数据区,A,B,C,D,E,F,B,、,C,、,E,为公共耦合,(,5,)内容耦合:,是最高程度的耦合。,有如下表现:,a.,一个模块直接访问另一模块的内部数据。,b.,一个模块不通过正常入口转到另一模块的内部。,c.,一个模块有多个入口。,d.,两个模块有部分代码重迭。,A,B,进入另一模块内,A,B,部分代码重迭,Entry1,.,Entry2,.,多重入口,总之,耦合是影响软件复杂程度的一个重要因素。,应该采取下述设计原则:,尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。,2.,内聚,内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。,简单地说,,理想内聚的模块只做一件事情,。,设计时应该力求做到高内聚,中等程度的内聚也可以采用,不要使用低内聚。,低,功能,内聚,顺序,内聚,通信,内聚,过程,内聚,时间,内聚,逻辑,内聚,偶然,内聚,高,强,弱,内聚,性,模块独立性,低内聚有如下几类:,(,1,)偶然内聚,一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。,有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。,(,2,)逻辑内聚,一个模块完成的任务在逻辑上属于相同或相似的一类。,(,3,)时间内聚,一个模块包含的任务必须在同一段时间内执行。,例如:初始化系统模块、系统结束模块、紧急故障处理模块 等均是时间性聚合模块。,调用模块,判定,读,一,个,记,录,写,一,个,记,录,被调用模块,中内聚主要有两类:,(,4,)过程内聚,一个模块内的处理元素是相关的,而且必须以特定次序执行。,(,5,)通信内聚,模块中所有元素都使用同一个输入数据和,(,或,),产生同一个输出数据。,高内聚也有两类:,(,6,)顺序内聚,一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行。,(,7,)功能内聚,模块内所有处理元素属于一个整体,完成一个单一的功能。,功能内聚是最高程度的内聚。,逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。,可以把逐步求精定义为:,“,为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。,”,逐步求精之所以如此重要,是因为人类的认知过程遵守,Miller,法则:,一个人在任何时候都只能把注意力集中在(,72,)个知识块上。,Miller,法则是人类智力的基本局限,我们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽我们的最大努力工作。,逐步求精,逐步求精,或称逐步细化,是一种,自顶向下,的设计策略。,抽象与求精是一对互补的概念。,抽象使得设计者能够说明过程和数据,同时却忽略低层细节。,事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。,求精则帮助设计者在设计过程中逐步揭示出低层细节。,这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。,逐步求精和模块化的概念,与抽象是紧密相关的。,随着软件开发工程的进展,在软件结构每一层中的模块,表示了对软件抽象层次的一次精化:,事实上,软件结构顶层的模块,控制了系统的主要功能并且影响全局;,在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式分配控制;,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。,重构,重构是一种重新组织的技术,可以简化构件或模块的设计或编码而无需改变其功能或行为。,重构是一种改进程序内部结构但不改变代码或设计的外部行为。,“,先使它转起来,再使它快起来,”,。,8.3,软件结构,软件结构图,(,Structure Chart,简称,SC,)是软件系统的模块层次结构,反映了整个系统的功能实现。,软件结构以层次表示程序的系统结构,即一种控制的层次体系,并不表示软件的具体过程。,软件结构一般用树状或网状结构的图形来表示。,8.3,软件结构,软件结构图的主要元素有:,模块,:模块用带有名字的方框表示,名称应体现模块的功能。,控制关系,:控制关系用单向箭头或直线表示模块间的调用关系。,信息传递,:用带注释的短箭头表示模块调用过程中传递的信息。,循环调用和选择调用,:在上部模块底部加一个菱形符号表示选择调用,在上部模块的下方家一个弧形箭头,表示循环调用。,A,B,简单模块调用,A,B,C,选择调用,图4-4结构图的基本定义,A,B,C,D,循环调用,层次图和,HIPO,图,层次图用来描绘软件的层次结构。虽然,层次图,的形式和描绘数据结构的,层次方框图,相同,但是表现的内容却完全不同。,层次图中的一个矩形框代表一个模块,方框间的连线表示调用关系而不像层次方框图那样表示组成关系。,描绘软件结构的图形工具,正文加工系统的层次图,描绘软件结构的图形工具,HIPO,图是美国,IBM,公司发明的,“,层次图加输入,/,处理,/,输出图,”,的英文缩写。,为了能使,HIPO,图具有可追踪性,在,H,图,(,层次图,),里除了最顶层的方框之外,每个方框都加了编号。,编号规则和数据流图的编号规则相同。,和,H,图中每个方框相对应,应该有一张,IPO,图描绘这个方框代表的模块的处理过程。,HIPO,图中的每张,IPO,图内都应该明显地标出它所描绘的模块在,H,图中的编号,以便追踪了解这个模块在软件结构中的位置。,描绘软件结构的图形工具,带编号的层次图,(H,图,),描绘软件结构的图形工具,A,SC,图中的主要内容,1,、模块,-,在,SC,图中用,矩形框,表示,并用名字来标记它,-,模块调用关系,2,、模块,的调用关系和接口,B,被调用模块,调用模块,A,(,查询学生,),B,(,查找学生记录,),数据信号,控制信号,学,号,查找成功信号,-,模块间接口的表示,描绘软件结构的图形工具,例,:,画出打印报告的软件结构图,调用次序为上层调用下层; 同层按照数据传递关系确定;一般从左到右执行。,执行过程即按照数据流向进行。,报 告,计 算,获得编辑,确认数据,读入,编辑,打印报告头,打印报告尾,打印,输入,EOF,输入,已编辑,已编辑,已编辑,已确认,已确认,数据,已确认,数据,计算结果,结果,日期,总结果,行,行,行,打印报告,予以确认,描绘软件结构的图形工具,SC,中还有一些附加的符号,可以表示模块的选择调用或循环调用。,注意:,1.,层次图和结构图并不严格表示模块的调用次序。,2.,通常用层次图作为描绘软件结构的文档。,3.,利用,IPO,图或数据字典中的信息得到模块调用时传递的信息,由层次图导出结构图的过程,作为检查设计正确性和评价模块独立性的好方法。,判定为真时调用,A,,,为假时调用,B,模块,M,循环调用模块,A,、,B,、,C,描绘软件结构的图形工具,软件结构图的形态特征:,深度:,指结构图控制的层次,也是模块的层数。能粗略表示一个系统的大小和复杂程度,深度和程序长度之间存在着某种对应关系。,宽度:,指一层中,最大的模块,个数。一般来说,结构的宽度越大,则系统就越复杂。,扇出:,指一个模块直接下属模块的个数。扇出过大,表示模块过分复杂,需要控制和协调的下级模块太多。,扇出的上限一般为,5,9,,平均一般为,3,或,4,。,扇入:,指一个模块直接上属模块的个数。扇入过大,意味着共享该模块的上级模块数目多,这有一定的益处,但是决不能违背模块的独立性原则而片面追求高扇入。,8.3,软件结构,有关指标,:,深度,:表示软件结构中从顶层模块到最底层模块的层数。,宽度,:表示控制的总分布。,扇出数,:指一个模块直接控制下属的模块个数。,扇入数,:指一个模块的直接上属模块个数。,1,层,2,层,A,B,C,D,E,F,G,H,I,J,K,L,M,N,扇入为,2,扇入为,3,3,层,宽度,宽度,宽度,软件结构示意图,深度,顶层,扇出为,3,一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。,深度、宽度、扇出和扇入都应适当,画结构图应注意的事项:,模块不能重名。,调用关系只能从上到下。,8.3,软件结构,M,N,O,P,Q,G,H,I,C,D,A,T,J,K,L,E,F,B,R,S,人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发式规则。,启发式规则能帮助人们找到改进软件设计提高软件质量的途径。,模块化设计的优化,(启发规则),1.,改进软件结构提高模块独立性,设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求,降低耦合提高内聚。,例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。,(a),X,Y,Q1,Q2,Y,Q2,Q,X,Q,(b),(c),(d),Q,重复部分,Y,Y,X,Q1,Y,Q2,X,x,2.,模块规模应该适中,一般说来,分解后不应该降低模块独立性。,3.,深度、宽度、扇出和扇入都应适当,4.,力争降低模块接口的复杂程度,模块接口复杂是软件发生错误的一个主要原因。,应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。,5.,设计单入口单出口的模块,当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。,控制范围,结构方面的特点,包括模块及其所有下属模块。,作用范围,判断所涉及到的模块,是从功能特点考虑的。,SD,方法认为:,当作用范围为控制范围的子集时,才能获得较低的块间联系。,如下图中的设计,判定的作用范围恰好在判定所在模块的下一层。,TOP,X,T,B,A,B1,B2,模块,TOP,的控制范围是:,TOP,、,X,、,T,、,B,、,A,、,B1,、,B2,;,模块,B,的控制范围与作用范围相同,模块,A,的控制范围:,A,、,B,、,C,、,D,、,G,、,E,、,F,则,F,的的作用范围:,B,、,E,、,F,A,B,C,D,G,E,F,F,B,E,6.,模块的作用域应该在控制域之内,图,3.33,控制范围与作用范围,TOP,A,B,C,D,E,F,(a),TOP,A,B,C,D,E,F,(b),TOP,A,B,C,D,E,F,(c),TOP,A,B,C,D,E,F,(d),显然,图(,a,)不满足作用范围应与控制范围的原则,模块,F,的作用范围不在控制范围之内。,图(,b,)中模块,TOP,和图(,c,)中模块,B,虽然满足上述原则,但其作用范围所涉及到的模块不是直接的。,图(,d,)的模块设计最合理。,应用范围与作用范围,举例,7.,模块功能应该可以预测,模块的功能应该能够预测,但也要防止模块功能过分局限。,如果一个模块可以当做一个黑盒子,也就是说,只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。,以上列出的启发式规则多数是经验规律,对改进设计,提高软件质量,往往有重要的参考价值;但是,它们既不是设计的目标也不是设计时应该普遍遵循的原理。,8.4,软件系统结构模型,软件体系结构是一种表达,使软件工程师能够分析设计是否满足需求、选择合理的方案和降低风险。,大型软件系统总是被分解成一系列子系统,由子系统提供一些相关的服务。,软件体系结构设计过程就是识别出这些子系统,并建立子系统控制和通信的框架,最后给出软件体系结构的一个描述。,两类结构模型:,系统构成模型,系统控制模型,概念补充,概念补充,概念补充,概念补充,概念补充,概念补充,概念补充,概念补充,系统构成模型,以数据为中心的结构模型,数据流结构模型,客户机,/,服务器结构模型,抽象机结构模型,1.,以数据为中心的结构模型,由一组子系统构成,子系统交换信息,协调工作有两种基本方法:,全部共享数据放在一个中央数据库中,所有子系统都能从中存取数据。,每个子系统用各自的数据库与其他子系统进行数据交互,通过消息传递来实现。,共享数据模型的,优点,是能够高效地共享大量的数据,生产数据的子系统不需要关心数据如何被其他子系统使用,可以集中进行如备份、保密性、访问控制和错误恢复等活动;,缺点,是子系统一定要与以数据为中心的体系结构模型一致,系统变更或进化比较困难,子系统的需求会不同,难以集成,以及很难将数据分布到多台机器上。,2.,数据流体系结构模型,当输入数据经过一系列的计算和操作构件或模块的变换形成输出数据时,可以应用数据流体系结构。,管道和过滤器结构通过一组由管道连接的过滤器来变换数据,并向下传递。,管道和过滤器结构,过滤器,过滤器,过滤器,过滤器,过滤器,过滤器,过滤器,过滤器,3.,客户机,/,服务器结构模型,客户机,/,服务器结构模型的主要组成部分是:,一组给其他子系统提供服务的单机服务器,一组向服务器请求服务的客户机,一个连接客户机和服务器的网络(可选),服务器模型能实现以数据为中心的体系结构模型的系统,客户机,/,服务器模型的最大优势在于可以是一个分布式结构,多媒体服务系统结构,网 络,目录服务器,目录,视频服务器,电影文件,图片服务器,图片文件,web,服务器,超文本文件,客户,1,客户,2,客户,n,4.,抽象机模型,抽象机模型也称为分层模型,是建立子系统的接口模型。它把子系统组织成一系列的层次,每一层提供一组服务,每一层定义为一个抽象机。,例如:网络协议,OSI,参考模型,通 信 介 质,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层,用户,B,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层,用户,A,系统控制模型,集中式控制模型,调用,返回模型:这是一个自上而下的子过程模型。控制始于系统(程序)的顶层,在子系统(程序)调用过程中,控制逐步传递到更低的层次中。该模型适用于顺序执行的系统。,管理者模型:这是一种适用于并发系统的模型。一个系统组件被指定为系统管理者,控制其他系统过程的启动、终止和协调。一个过程就是一个能和其他过程并发执行的子系统或模块。,并发系统的集中式控制模型,系 统 控 制 器,故障处理器,用户界面,传感器进程,传动装置进程,计算进程,系统控制模型,事件驱动系统,广播模型:发生的事件广播到所有子系统,任何能处理该事件的子系统都会响应。该模型适用于基于网络的分布式系统。,广播模型中的子系统注册其感兴趣的特别事件,广播模型的优点是进化比较简单,缺点是子系统都知道是否和什么时候处理事件,这可能会引起冲突。,中断驱动模型:由中断处理器对来自外部的中断进行检测,然后在其他组件中处理这些中断。该模型适用于对定时有严格要求的实时系统。,只用在硬件实时系统中,要求对一些事件能做出及时响应,8.5,软件的体系结构模式,软件的体系结构模式定义了处理系统某些行为特征的方法,并发性,系统必须以一种模拟并行的方式来操作多个任务,操作系统进程管理模式,任务调度器模式包括一组含有,tick(),操作的活动对象,持久性,如果数据从创建它的进程执行以来一直存在,则该数据是持久性存在的数据,数据库管理系统模式将,DBMS,的存储和存取能力用于应用系统的体系结构中,应用级的持久模式在应用体系结构中建立了持久性特征,8.5,软件的体系结构模式,分布性,强调系统或系统中构件或模块在一个分布的环境中相互通信的方式。分布性问题有两个元素:,一是实体间连接方式,二是实体间通信的特性,代理模式是一种普遍的体系结构模式,CORBA,就是代理模式的一个范例,实验,6,:,Rational Rose,工具基本使用,使用,Rational Rose,完成一个系统的业务分析模型。,使用,Rational Rose,完成一个系统的设计模型的详细视图,包括用况视图、逻辑视图、开发视图、展开视图和物理视图。,要求:理解实验内容与方法、提交实验报告,习题:,1,、,6,、,7,8.6,实验要求及习题,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!