第3章结构化方法.ppt_第1页
第3章结构化方法.ppt_第2页
第3章结构化方法.ppt_第3页
第3章结构化方法.ppt_第4页
第3章结构化方法.ppt_第5页
免费预览已结束,剩余140页可下载查看

下载本文档

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

文档简介

课名:软件工程,2,第1章绪论第2章软件需求与软件需求规约第3章结构化方法第4章面向对象的方法UML第5章面向对象的方法RUP第6章软件测试第7章软件生存周期过程与管理第8章集成化能力成熟度模型(CMMI),第3章结构化方法,结构化方法作为一种“思想”工具,可用于定义需求,建立待建系统的功能模型;可用于定义满足需求的结构,给出一种特定的软件解决方案。,总的要求,要求学生掌握结构化分析方法,并能运用该方法给出小型简单系统的功能模型;掌握结构化设计方法,能基于给定的小型简单系统功能模型,给出系统的总体设计,并能运用详细设计工具给出若干模块的详细设计。,知识点和考核要求,(1)识记1)表达问题域信息的基本术语及其表示。2)表达功能模型的工具DFD图。3)数据结构符号和判定表、判定树。4)变换型数据流图和事务型数据流图。5)模块以及模块内聚和耦合。6)详细设计工具:框图、PAD图、N-S图和伪码。,(2)领会1)结构化方法源于的基本思想。2)结构化分析方法中每一术语所基于原理以及它们在建模中的作用。3)构建系统功能模型的步骤。4)变换设计和事务设计。5)“高内聚低耦合”原则以及经验性性准则。6)详细设计工具的优缺点以及相互转换。7)结构化方法存在的问题。,(3)应用1)针对不复杂的系统需求(问题)陈述,创建该系统的功能模型,包括系统的DFD图,数据字典和加工小说明。2)在创建系统功能模型的基础上,给出该系统的总体设计,并针对有关模块运用PAD图或N-S图或伪码,给出这些模块的详细设计。,结构化方法一种特定的软件开发方法学结构化分析方法何谓分析,一般地说,分析是系统化地使用信息,给出一个问题的估算.,系统建模技术-结构化方法结构化分析方法要回答:如何定义问题?就如何定义问题而言,如何获得需求如何规约需求如何验证需求关于需求获取-需求面临的挑战问题空间理解人与人之间的通信需求的不断变化,1)需求目标在任何一个设计中,精确地陈述问题总是第一步的。需求的目标是要简洁而精确地说明所要解决的问题。为此:软件人员的注意力应在做什么和为什么做,而不是如何做。与用户和该领域的专家进行交流,导引出他们对软件产品的要求。基于对用户要求的理解,结合计算机软件的特有能力,创造出对用户有价值的,能提高产品的质量与可用性的新的产品要求。分析所定出的产品要求,判断其正确性,一致性,完整性及可行性;决定解决方案,完成高层次的设计,确定出功能子系统及子系统之间的接口界面。把产品要求以用户手册及工程设计技术要求的形式表达出来。(可能还包括测试的标准)。用于在开发的全过程中,验证核实所开发的产品确能满足用户的要求,支持技术文档的管理,更重要的是支持需求变化的管理。可见,为了实现这一目标:需求(工程)包括需求的引出、创造、分析、表述、验核和管理。,2)需求工程的重要性Standish-Group对350家公司的8000个软件项目作过一次调查其中,31%的项目的结局是被取消。引致这些项目失败的原因是:13.1%不完整的产品要求;12.4%缺乏用户的参与;10.6%缺少资源(人力、财力);9.9%不现实的期望;9.3%高层领导支持不足;8.7%产品要求与指标的改变;8.1%没有订计划;7.5%不再需耍该开发中的系统。其中,与产品需求有关的(1,2,4,和6项)占了44.1%。这些数据突出地显示了软件产品需求在软件开发中的重要性。,重要性之一软件需求工程直接关系到“成本、质量和按时交付”等问题-它们是项目成败的关键因素。项目的五维:进度,特性,质量,成本,人员。重要性之二软件需求工程-这种发生在软件生命周期的初始阶段的错误是非常难于改正,并且是代价极高的。最新的研究兴趣聚焦于“需求引出”,因为它涉及到软件开发人员与非软件专业人员合作的问题。,3)需求工程的原则(1)抽象:抓住事物的本质(要素)。其中,一个重要方面是:捕获问题空间的“一般/特殊”关系是认识、构造问题的一般途径。(2)划分:分离问题。其中,一个重要方面是:捕获问题空间的“整体/部分”关系是降低问题复杂性的基本途径之一(3)投影:捕获并建立问题空间的多维“视图”是描述问题的基本手段之一是解决“A是B,B是A”的基本方法,分析问题和需求的能力取决于分析人员的思维和经验。思维来源于:严谨、逻辑和“活跃”的思考习惯。(1)严谨要求思考的对象应该是不放过任何一个“小”问题(2)逻辑要求思考的过程应该是一种符合规则的推导过程(3)活跃思维要求思考的方式应该是并行的,即不是仅一个角度,而是多个角度来思考问题经验来源于:(1)开发了一些软件并善于总结-创新与教训(2)跟踪最新技术。,具体地说(1)基础软件人员必须先在一定程度上熟悉并学习软件所涉及的专业领域。程度的深浅,以满足工作的要求为目标。软件人员要懂得如何帮助用户去表达出他们对产品的耍求。因为需求获取是一个交互的过程。软件人员面对的用户是:他们不是计算机或软件的专业人员,他们不能完全清楚软件能带来一些什么新的功能可以帮助提高工作效率和提供新的服务,因此必须在需求规约中包括用户对产品工作性能,可靠性,可维护性,可扩展性等的需求。(2)表达使用清楚而良构的语言完成需求规约。必须完全用问题领域方面的词汇来表达,不应该出现软件领域内的词汇。通过浏览文档,能够完全理解所要解决的具体问题和该问题的一般性解决方案。,(3)做法开始问题定义时,通常是建立一个词汇表。对于具有模糊含义的术语,或者在目前的问题中用于有限范围内的术语,要给出专门的定义。另外,在词汇表中加入精化细节也是很有帮助的-那些通常归入功能性需求规范的“东西”,常体现在精化细节中。集中在公司的关键任务的目标上。一个新项目的开始,可能是执行一个已有的长期系统计划的结果,或来自于一系列高层战略信息系统计划编制的建议。因此,由此产生的建造,应该尽量基于长期的方向和目标,而不是针对商业危机或技术潮流而做出的反应。应该直接集中在公司的业务需要上,而不是技术员的理想软件列表上。应该通过考察现在的应用情况,并根据其业务性能和任何预计的未来的市场影响,对每个系统进行分类。,需求分类根据软件产品的性能指标和实现难度,对问题和需求进行分类:核心需求基本功能需求高级功能需求组合功能需求,恰当地选取问题和需求的切入点。所有问题和需求都有发生的根源,其表面现象往往是开发者思路的切入点。其中,如果切入点是狭隘的,那么围绕着问题和需求的分析往往局限于自身的思路范围,问题和需求产生的原因就很难发现。所以当不能理解分析的问题和需求时,不妨先跳出思维惯例,寻求存在这样的问题和需求的原因,然后再分析理解之。交替反复分析多个问题和需求,寻找问题间的共性和特性。问题复杂化,是一个抽象问题或需求的逆过程。提出问题需求的许多可能的假设,丰富问题需求的形式。问题复杂化的意图是许多问题应该从更多的方面去验证不同环境下问题是否同样存在。问题抽象化,继而简化问题。众多的问题和需求变成程序式过程,就是公式化问题和需求。类模板就是一个抽象问题很好的例子。,4)需求获取技术特征由上可见,需求获取技术特征:方便通讯(使用易于理解的语言)提供定义系统边界的方法提供划分、抽象、投影等方法允许采用多种可供选择的设计方法适应需求的变化支持使用问题空间的术语,思考问题和编制文档,何谓结构化分析就软件需求分析而言,即为:系统化地使用问题域术语,给出该问题的模型,即:,需求-一个抽象层,该系统的概念模型或称系统的需求规约,问题域-客观事物系统,形成,分析(映射),可见,需求分析作为一种活动,其目标为:在一个确定的抽象层(即需求层)上为客观事物系统施加了一个结构,形成待开发软件系统(产品)的概念模型,即需求规约(规格说明书),作为开发人员和客户间技术契约的基础,并作为而后开发活动的一个基本输入,实现软件需求分析的目标对方法学的需求(1)提供一组术语(符号),指导抽象中需要关注的主要方面,并用于表达分析中所使用的信息.(3.1.1节)这些术语形成一个特定的抽象层,即需求层.当然,这组术语应体现软件设计的某些“原理/原则”!(2)依据这些术语所形成的“空间”,给出表达模型的工具.(3.1.2节)(3)给出过程指导.(3.1.3节),需求层的确定一个抽象层是由一组确定的术语定义的,为此为了支持需求分析中有关要使用的那些信息的表达,给出了以下五个术语符号:,数据流:加工:数据存储:数据源:数据潭:,其中:数据流、数据存储-支持数据抽象,加工-支持过程/功能的抽象,用于表达系统内涵数据源、数据潭支持系统边界抽象,用于表达系统外延.是完备的。,基本术语,1.数据流数据流是一类术语,用于表达在分析中所要使用的、用于表达“客体”的信息。在使用中一般要给出标识,该标识是一个名词或名词短语,并且往往直接使用实际问题空间中的概念。2.加工加工也是一类术语,用于表达在分析中使用的、用于表达“处理”的信息。在使用中一般也要给出标识。该标识一般采用动宾结构,并且往往直接使用实际问题空间中的概念,以便表达该加工的一定语义。3.数据存储数据存储也是一类术语,用于表达在分析中所使用的、表达“结构化客体”的信息。在使用中一般也要给出标识。该标识是一个名词或名词短语,并且往往直接使用实际问题空间中的概念。这样的标识可以表达该结构化数据的“一定”语义。,4.数据源和数据潭数据源是数据流的起点;数据潭是数据流的归宿地。数据源和数据潭是系统之外的实体,可以使人、物或其它软件系统。他们均用一个矩形表示。引入数据源和数据潭这两个术语的目的是为了表示系统的环境,可以使用它们和相关的数据流来定义系统的边界。与其他术语一样,在使用这两个术语来表达系统/产品“边界”的信息时,也要给出相应的标识。该标识也是一个名词或名词短语,并且往往直接使用实际问题空间中的概念。这样的表示可以表达系统/产品边界的“一定”语义。,旅行社,订票单,预定机票,准备机票,记帐,费用,航班,帐单,机票,记帐文件,航班目录,旅行社,系统功能模型表示,需求分析的首要任务是建立系统功能模型,为此结构化分析方法给出了一种表达功能模型的工具,即数据流图(DataflowDiagram),简称DFD图。(如下图:飞机票预订系统数据流图),如果把任何软件系统都视为一个数据变换装置,它接受各种形式的输入,通过变换产生各种形式的输出,那么数据流图就是一种表达待建系统功能模型的工具。,建模过程指导建立系统的功能模型-使用的工具为数据流图DFD首先:建立系统环境图,确定系统边界继之:自顶向下,逐层分解建立数据字典-使用的工具为结构符定义数据流定义数据存储定义数据项给出加工小说明-使用的工具可以为判定表判定树,自顶向下,逐步求精,建立系统的层次数据流图为了便于管理,从0层开始就要对数据流图以及其中的加工进行编号,并在整个系统中应是惟一的。一般按下述规则为分层数据流图和图中的加工进行编号的。1)顶层数据流图以及其中惟一的加工均不必编号。2)由于0层通常只有一个子图,因此,该子图的层号为0,而其中每一加工的编号分别为0.1,0.2,0.3。3)以后各层,其子图层号为上一层(父层)的加工号;而该层中加工编号为子图层号,后跟一个小数点,再加上该加工在子图中的顺序号,例如1.1,1.2,1.3,即加工编号由相应的子图号、小数点、加工在子图中的顺序号组成。由“父图”生成“子图”的一般步骤如下:1)将“父图”的每一加工按其功能分解为若干个子加工。2)将“父图”的输入流和输出流“分派”到相关的子加工3)在各加工之间建立合理的关联,必要时引入数据存储,使之形成一个有机的整体,问题:建立一个简化的商业自动化系统,其中:营业员通过该系统记录每日销售的商品(商品名,商品编号,单价,数量,销售时间);收款员通过该系统记录收到的现金数额以及购物余额;商店经理每日统计销售额,并在必要时查看某种商品的销售情况(商品名,商品编码,金额),结构化分析方法应用实例,简化的商业自动化系统,营业员,收款员,经理,销售的商品,现金额,现金余额,销售情况,日销售额,查询要求,建立系统的功能模型首先:建立系统环境图,确定系统边界-顶层DFD,其中:1数据流为:销售的商品,日销售额等3个输入流,3个输出流数据源为:营业员,经理,收款员数据潭为:经理,收款员2加工名为:要建立的系统名字,录入、修改或删除商品信息,录入、修改现金额,并计算余额,查询商品销售情况计算日销售额,1,2,3,继之:自顶向下,逐层分解A、按人或部门的功能要求,将加工“打碎”,形成:,注:需给每一加工编号;,B、”分派”数据流,形成:,录入、修改或删除商品信息,2录入、修改现金额,并计算余额,查询商品销售情况计算日销售额,销售的商品,现金额,现金余额,查询要求,销售情况,日销售额,1,3,其中:要根据特定的加工要求进行分派;保持与顶层数据流的一致;可以不引入数据源和数据潭。,录入、修改或删除商品信息,录入、修改现金额,并计算余额,查询商品销售情况计算日销售额,销售的商品,现金额,现金余额,查询要求,销售情况,日销售额,销售文件,1,2,3,C、引入文件,使之形成一个有机整体系统:,注:到一个文件,既有输入流,又有输出流,则可简化为,并可不给出标识。至此,体现精化,形成0层数据流图。,查询商品销售情况计算日销售额,查询要求,销售情况,日销售额,销售文件,3,继续A、B、C:自顶向下,逐层分解。例如:加工3,可分解为:,判定要求,查询要求,3。1统计销售情况,3。2计算日销售额,销售文件,查询要求2,查询要求1,销售情况,日销售额,加工3:,*其中为什么要引入加工“判定要求”?,建立数据字典定义数据流定义数据存储定义数据项引入:结构符|用于定义数据结构,A,A,A,B,C,B0,C0,B*,定义数据字典该步的目标为依据系统的数据流图,定义其中包含的所有数据流和数据存储的数据结构,直到给出构成以上数据的各数据项的基本数据类型。数据是客体的一种表示,而且已经证明,所有客体均可用以下3种基本结构表示,这3中结构分别为顺序结构、选择结构和重复结构。,在数据字典中,为了使定义的结构数据便于理解和阅读,一般按3种条目来组织,即数据流条目、数据存储条目和数据项条目。其中数据流条目给出DFD图中所有数据流的结构定义;数据存储条目给出DFD图中所有数据存储的结构定义;数据项条目给出所有数据项的类型定义。,数据字典:、数据流:销售的商品=商品名+商品编号+单价+数量+销售时间现金额=余额=日销售额=非负实数查询要求=商品编号|日期查询要求1=商品编号查询要求2=日期销售情况=商品名+商品编号+金额、数据存贮:销售文件=销售的商品、数据项,给出加工小说明-使用的工具可以为判定表判定树判断表条件类别条件组合操作操作执行例如:考试总分=620=620e,e-f,f-g,h,h-y,puty,g-x,putx,x-z,putz,geta,getb,b-d,a-c,e,e,g,h,h,g,z,z,x,x,g,y,y,h,d,b,c,a,c,d,e,e,f,g,h,f,x,a,b,事务设计,事务中心,输入模块,路径1,路径2,输出模块,a,y,c,g,b,f,c-e,c,e,e-g,e,g,b-d,b,d,d-f,d,f,事务型数据流图所描述系统的数据处理模式为“集中-发散”式。在实际应用中,任何软件系统从本质上来说都是信息的变换装置,因此,原则上所有的数据流图都可以归为变换型。但是,如果其中某些部分具有事务型数据流图的特征,那么就可以把这些部分按照事务型数据流图予以处理。,(1)变换设计。变换设计是在需求规约的基础上,经过一系列设计步骤,将变换型数据流图转换为系统的模块结构图。(2)事务设计。尽管在任何情况下都可以使用变换设计将一个系统的DFD图转换为模块结构图,但是,当数据流图具有明显的事务型特征时,也就是有一个明显的事务处理中心时,则比较适宜采用事务设计。,总体设计分为3个阶段。第一阶段为初始设计,在对给定的数据流图进行复审和精化的基础上,将其转换为初始的模块结构图。第二阶段为精化设计,依据模块“高内聚低耦合”的原则,精化初始的模块结构图,并设计其中的全局数据结构和每一模块的接口。第三阶段为复审阶段,对前两个阶段所得到的高层软件结构进行复审,必要时还可能需要对该软件结构做一些精化工作,这对软件的一些性质,特别是对软件质量的提高将产生非常大的影响。,第二步:如何将初始的MSD转化为最终可供详细设计使用的MSD基于模块化原理-高内聚低耦合,给出一些设计规则经验规则,用于精化初始的MSD体现设计人员的创造,模块化及启发式规则,该步的目标是:基于模块“高内聚低耦合”的原则,提高模块的独立性。模块是执行一个特殊任务的一个过程以及相关的数据结构。模块通常由两部分组成。一部分是接口,给出可由其他模块或例程访问的常量、变量、函数等。接口不但可用于刻画各个模块之间的连接,以体现其功能,而且还对其他模块的设计和使用者提供了一定的可见性,模块的另一部分是模块体,是接口的实现。因此,模块化自然涉及两个问题:一是如何将系统分解成软件模块,二是如何设计模块。结构化软件设计是一种典型的模块化方法,即把一个待开发的软件分解成若干简单的、具有高内聚低耦合的模块,这一过程称为模块化。模块化是系统设计基本原理/原则之一。,模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。以下分别详细阐述。,耦合性:耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。,耦合:不同模块之间相互依赖程度的度量。耦合类型:内容耦合:公共耦合:两个以上的模块共同引用一个全局数据项。控制耦合:一个模块向另一模块传递一个控制信号,接受信号的模块将依据该信号值进行必要的活动。标记耦合:两个模块至少有一个通过界面传递的公共有结构的参数。数据耦合:模块间通过参数传递基本类型的数据。,在软件设计中应该追求尽可能松散耦合的系统。在这样的系统中可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多了解。此外,由于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小。因此,模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们彼此完全独立,这意味着模块间无任何连接,耦合程度最低。但是,在一个软件系统中不可能所有模块之间都没有任何连接。,无直接耦合-即两个模块之间没有直接的关系,它们分别从属于不同模块的控制和调用,它们之间不传递任何消息。它们之间的联系完全是通过主模块的控制和调用来实现的模块的耦合性最弱,独立性最高。,数据耦合-如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据的耦合。数据耦合是低耦合。系统中至少必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。一般说来,一个系统内可以只包含数据耦合。标记耦合-指两个模块间传递数据结构。如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址。,控制耦合-指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。即传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现)的耦合。两个模块间存在调用关系,传递控制标志。控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合往往是多余的,在把模块适当分解之后通常可以用数据耦合代替它。,当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。公共耦合指两个模块间存在共享公共数据。公共耦合的复杂程序随耦合模块的个数增加而增加。,公共耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。如果只有两个模块有公共环境,那么这种耦合有下面两种可能:(1)一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的一种形式,是比较松散的耦合。(2)两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共耦合。,最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠(只可能出现在汇编程序中);一个模块有多个入口(这意味着一个模块有几种功能)。应该坚决避免使用内容耦合。事实上许多高级程序设计语言已经设计成不允许在程序中出现任何形式的内容耦合。,内容耦合是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。,耦合是指不同模块之间相互依赖程度的度量。高耦合(紧密耦合)是指两个模块之间存在着很强的依赖;低耦合(松散耦合)是指两个模块之间存在一定依赖;无耦合是指模块之间根本没有任何关系。如果模块之间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,尽量避免使用使用内容耦合。,降低模块之间耦合度的措施;1在耦合方式降低模块之间接口的复杂程度2在传递信息类型上尽量使用数据耦合,避免控制耦合,慎用或有控制使用公共耦合,内聚性:内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚很坏,不要使用。,内聚:一个模块之内各成分之间相互依赖程度的度量。内聚类型:偶然内聚:一个模块之内各成分之间没有任何关系。逻辑内聚:几个逻辑上相关的功能放在同一模块中。时间内聚:一个模块完成的功能必须在同一时间内完成,而这些功能只是因为时间因素关联在一起。过程内聚:处理成分必须以特定的次序执行。通信内聚:各成分都操作在同一数据集或生成同一数据集。顺序内聚:各成分与一个功能相关,且一个成分的输出作为另一成分的输入。功能内聚:模块的所有成分对完成单一功能是最基本的,且该模块对完成这一功能而言是充分必要的。,低内聚:偶然内聚-指各个处理单元之间没有直接关系。如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。它使该模块能执行不同的功能。当几个模块内凑巧有一些程序段代码相同,又没有明确表现出独立的功能,把这些代码独立出来建立的模块即为偶然内聚模块。它是内聚程度最低的模块。缺点是模块的内容不易理解,不易修改和维护。,逻辑内聚-如果一个模块完成的任务在逻辑上属于相同或相似的一类。这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的控制型参数来确定该模块应执行哪一种功能。逻辑内聚模块比偶然内聚模块的内聚程度要高。因为它表明了各部分之间在功能上的相关关系。如消息循环中的各个Case,根据不同的逻辑标志,调用想应该的块。,时间内聚-如果一个模块包含的任务必须在同一段时间内执行。这种模块大多为多功能模块,但要求模块的各个功能必须在同一时间段内执行。例如初始化模块和终止模块。时间内聚模块比逻辑内聚模块的内聚程度又稍高一些。在一般情形下,各部分可以以任意的顺序执行,所以它的内部逻辑更简单。,中内聚:通信内聚-模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据。指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。,高内聚:顺序内聚-如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)。根据数据流图划分模块时,通常得到顺序内聚的模块,这种模块彼此间的连接往往比较简单。,功能内聚-这是最高程度的内聚,指模块内所有元素共同完成一个功能,缺一不可。模块内所有处理元素属于一个整体,完成一个单一的功能。与其他模块的耦合是最弱的。,功能内聚10分时间内聚3分顺序内聚9分逻辑内聚1分通信内聚7分偶然内聚0分事实上,没有必要精确确定内聚的级别。重要的是设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获得较高的模块独立性。,内聚是指一个模块内部各成分之间相互关联程度的度量。高内聚是指一个模块中各部分之间存在着很强的依赖;低内聚是指一个模块中各部分之间存在较少的依赖。,内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。,启发性规则-经验的总结(1)改进软件结构,提高模块独立性;模块划分时力求低耦合,高内聚,保持模块的相对独立性,并以此为原则优化初始的软件结构。(2)模块规模适中-每页60行语句;经验表明,一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)。有人从心理学角度研究得知,当一个模块包含的语句数超过30以后,模块的可理解程度迅速下降。过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性。过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。因此过小的模块有时不值得单独存在,特别是只有一个模块调用它时,通常可以把它合并到上级模块中去而不必单独存在。,(3)深度、宽度、扇入和扇出适中;如果层数过多则应该考虑是否有许多管理模块过分简单了,能否适当合并。宽度是软件结构内同一个层次上的模块总数的最大值。一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。经验表明,一个设计得好的典型系统的平均扇出通常是3或4(扇出的上限通常是59)。扇入越大则共享该模块的上级模块数目越多,这是有好处的,但是,不能违背模块独立原理单纯追求高扇入(4)模块的作用域力争在控制域之内;一个模块的作用范围应在其控制范围之内,且判定所在的模块与受其影响的模块在层次上尽量靠近,模块的作用域定义为受该模块内一个判定影响的所有模块的集合。模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合。例如,在下图中模块A的控制域是A、B、C、D、E、F等模块的集合。在一个设计得很好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。,在设计过程中,模块的作用范围不在其控制范围之内的改进方法:1)上移判断点2)下移受判断影响的模块,(5)降低模块接口的复杂性;模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致(即看起来传递的数据之间没有联系),是紧耦合或低内聚的征兆,应该重新分析这个模块的独立性。(6)模块功能应该可以预测。,应用示例:数字仪表板系统的精化,读旋转信号,收集并求平均,转换成转/分,计算gph,读并校核,确定加速/减速,计算里程,计算mph和超速值,计算燃料消耗,产生加速/减速显示,产生里程显示,发出铃声,产生mph显示,产生mpg显示,旋转信号,信号/秒,(sps),sps,燃烧流传感器信号,燃烧流,gph,sps,rpm,rpm,箭头指示,上箭头,下箭头,水平线,英里,超速值,mph,mpg,mpg显示,mph显示,铃声,里程显示,输入部分,Getgph,Getrpm,Getsps,Get燃料流,变换燃料流为ghp,Get燃转信号,变换燃转信号为燃料流,变换sps为rpm,Getsps,Getsps,转换为sps,Get转速信号,变换为sps,变换为sps,、数字仪表板系统输入部分的精化输入部分的初始模块结构图,转速信号,转速信号,燃料流,燃料流,燃料流,gph,sps,sps,rpm,sps,rpm,gph,sps,sps,sps,sps,sps,sps,sps,转速信号,转速信号,输入部分,计算gph,计算rpm,计算sps,读燃转信号,采集sps,读转速信号,使用启发式规则1,并考虑其它规则,可以将输入部分的模块结构图精化为:,其中:sps为转速的每秒信号量;sps为sps的平均值;sps为sps的瞬时变化值;rpm为每分钟转速;mph为每小时英里数;gph为每小时燃烧的燃料加仑数;rpm为行进里程。,输出部分,PUTmpg,PUTmph,PUT里程,PUT加/减速,PUT超速量,显示,显示,显示,、数字仪表板系统输出部分的精化输出部分的初始模块结构图,显示,对于这一初始的模块结构图,一般情况下应:把相同或类似的物理输出合并为一个模块,以减少模块之间的关联。就本例而言:左边前三个“显示”,基本上属于相似的物理输出,因此可以把它们合并为一个显示模块。而将“PUTmpg”模块和相关的“生成显示的模块合并为一个模块;同样地,应把“PUTmph”模块、“PUT里程”各自与相关的生成显示的模块合并为一个模块,参见下图。其它求精的规则,与输入部分类同。例如,可以将“PUT加/减速”模块与其下属的两个模块合并为一个模块,将“PUT超速量”模块与其下属的两个模块合并为一个模块。,输出模块,生成mpg显示,生成mph显示,生成里程显示,生成加/减速显示,生成蜂鸣,显示,通过以上求精之后,可得如下的模块结构图,变换模块,计算mpg,计算mph,计算里程,计算加/减速,、变换部分的精化首先,应该了解:对于变换部分的求精,是一项具有挑战性的工作。其中主要是根据设计准则,并要通过实践,不断地总结经验,才能设计出合理的模块结构。就给定的数字仪表板系统而言,如果把“确定加/减速”的模块放在“计算速度mph”模块下面,则可以减少模块之间的关联,提高模块的独立性。通过这一求精,可以得到如下的模块结构图:,通过以上讨论,可以看出:在总体设计中将一个给定的DFD转换为初始的模块结构图基本上是一个“机械”的过程,一般体现不了设计人员的创造力;优化设计-将一个初始的模块结构图转换为最终的模块结构图,对设计人员将是一种挑战,其结果将直接影响软件系统开发的质量。,经过总体设计阶段的工作,已经确定了软件的模块结构和接口描述,可作为详细设计的一个重要输入。在此基础上,通过详细设计,具体描述模块结构图中的每一模块,即给出实现模块功能的实施机制,包括一组例程和数据结构,从而精确地定义了满足需求所规约的结构。具体地说,详细设计又是一个相对独立的抽象层,使用的术语包括输入语句、赋值语句、输出语句、顺序语句、选择语句、重复语句等。详细设计的目标是将总体设计阶段所产生的系统高层结构映射为以这些术语所表达的低层结构,也是系统的最终结构。,()详细设计层-主要引入了关于三种动作控制结构的术语/符号三种控制结构:顺序,选择和循环这三种结构在表达系统行为方面是完备的第一种表达-伪码顺序begins1;s2;snend;选择if条件表达式thens1elses2;循环while条件表达式dos;,伪码是一种混合语言。外部采用形式语言的控制结构,内部使用自然语言。例如:Begin输入一元二次方程的系数a,b,c;ifb2-4acothen计算两实根else输出无实根;end.,第二种表达-框图,s1,s2,s1,s2,.,s,S1,S2,S3,S1,S2,X5X5,T,F,F,T,S1,S2,S3,S4,S5,S6,S8,S7,S9,S10,X10&Y3,结构化方法总结,一切系统都是由有信息流构成的(其中包含一些必要的数据变换),它们的相互作用、相互影响,构成了大千世界的各式各样系统。,)结构化方法的世界观方法学的提出,通常与信息域研究的主要内容相关:1)信息流例如,结构化方法2)信息内容例如,面向对象方法3)信息结构例如,JACKSON方法,2)基于的基本原理/原则,自顶向下功能分解数据抽象功能/过程抽象模块化;,结构化方法的抽象层,包括:需求分析层设计层实现层,问题空间,解空间,自顶向下,3)结构化方法是一种系统化的软件系统建模方法,从测试的角度看,结构化方法是一种特定的建立验证和确认所需标尺的方法学,包括结构化分析和结构化设计。,紧紧围绕“自顶向下”“过程抽象”“数据抽象”和“模块化”等基本原理/原则给出了完备的符号可操作的过程易理解的表示工具并提供了控制信息组织复杂性的机制,例如逐层分解,数据打包等以支持将问题空间的一个问题映射为解空间的一个解,4)该方法的组成,捕获的“过程”和“数据”恰恰是客观事物的易变性质解的结构没有保持原系统的结构从而:造成维护,验证上的困难。,A,B1,B2,B3,B4,C2,C3,C4,C5,C1,Dn,Dm,数据结构1,数据结构2,)问题,章节同步练习,一、单项选择题1、数据字典定义数据流或数据存储组成时,使用了若干符号,其中表示的含义是()A可选B与C或D重复-本题在2009年10月真题第一大题第3小题考查过,主要考查的知识点为定义数据字典中的数据结构符号。是重复结构,是指数据A是由多个重复出现的数据B构成的。,2、软件结构化设计中,好的软件结构应该力求做到()A顶层扇出较少,中间扇出较高,底层模块低扇入B顶层扇出较高,中间扇出较少,底层摸块高扇入C顶层扇入较少,中间扇出较高,底层模块高扇入D顶层扇入较少,中间扇入较高,底层模块低扇入-本题在2010年10月真题第一大题第9小题考查过,主要考查的知识点为软件的结构设计。通常一个好的软件设计结构,顶层摸块扇出的比较大,中间层模块扇出较小,而底层模块具有较大的扇入,系统的模块结构呈现的是葫芦形状。,3、在图中结构图的深度为()A3B4C5D6-4、在图中结构图的宽度为()A3B4C5D6-,本题主要考查的知识点为软件结构的深度和宽度。在一个软件结构中,深度表示其控制的层数。宽度是指同一个层次上模块总数的最大值。,5、对于图中,下列说法正确的是A摸块A的扇出为5B模块A的扇出为1C模块C的扇出为3D模块C的扇出为5-在本题主要考查的知识点为软件结构的扇出。模块扇出是指一个模块直接控制的下层模块的数目,6、对于图中,下列说法工确的是A模块E的扇入为4B模块E的扇入为3C模块E的扇入为2D模块E的扇入为1-本题主要考查的知识点为软件结构的扇入。扇入表示的是有多少个上级摸块直接调用它,7、对于类程序设计语言,下面说法错误的是APDL是一种混合语言BPDL是一种表示数据结构和处理过程的设计工具CPDL不可以作为注释工具直接嵌入在源程序中D已存在的一些PDL处理工具,可自动生成程序代码,提高软件生产率-本题主要考查的知识点为类程序设计语言(PDL)。为了保持文档和程序的一致性,提高文档的质量,PDL可以作为注释工具直接插在源程序中。,8、以下说法正确的是()A程序流程图是一种算法描述工具BPAD图是一种描述程序逻辑结构的工具CPDL是一种用于描述模块算法设计和处理细节的语言DN-S图设计的摸块不一定是结构化的-本题主要考查的知识点为详细设计工具。选项中只有B选项是正确的,其余均有误,N-S图设计的摸块一定是结构化的,PDL是一种表示数据结构和处理过程的设计工具,程序流程图不是算法描述工具。,9、以下说法错误的是()APAD图支持逐步求精的设计方法B程序流程图往往反映的是最后的结果C程序流程图容易造成非结构化的程序结构D程序流程图清晰反映了逐步求精的过程-本题主要考查的知识点为对详细设计工具的理解。在选项D中,程序流程图不是一种逐步求精的工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构,故D选项是错误的。,10、对于PDL与需求分析中描述加工逻辑的“结构化语言”的区别,以下说法错误的是()APDL不是结构化语言B需求分析中描述加工逻辑的结构化自然语言无严格的语法CPDL外层语言更严格一些,更趋于形式化D需求分析中描述加工逻辑的“结构化语言”内层自然语言描述较抽象、较概括-本题主要考查的知识点为PDL与结构化语言。PDL是一种“混合”语言,它可以是结构化的语言,也可以是某种自然语言。,11、模块的内聚性可以按照内聚程度的高低进行排序,以下排列中属于从低到高的正确次序是A偶然内聚,时间内聚,逻辑内聚B通信内聚,时间内聚,逻辑内聚C功能内聚,通信内聚,时间内聚D逻辑内聚,通信内聚,顺序内聚-本题在2006年10月真题第一大题第14小题考查过,主要考查的知识点为模块的内聚性。按照内聚程度的高低来说,功能内聚的程度最高,偶然内聚的程度是最低的。,12、结构化程序设计主要强调的是()A程序的规摸B程序的效率C程序设计语言的先进性D程序易读性-本题在2001年10月真题第一大题第16小题考查过,主要考查的知识点为结构化程序设计的理解。结构化程序设计的本质是使程序的控制流程线性化,实现程序的动态执行符合静态书写的结构,从而增强程序的可读性,13、定义了数据流图中每一个图形元素的结构化分析方法的描述工具是()A数据流图B数据字典C判定表D判定树-本题主要考查的知识点为数据字典。数据字典定义了包含所有的数据流和数据存储的数据结构,而判定表和判定树是描述加工的工具。,14、结构化分析方法中,描述系统的数据处理流程的工具是()A数据流图B数据字典C判定表D判定树-本题主要考查的知识点为数据流图。DFD图是一种描述数据变换的图形化工具,也是一种表达待建系统功能模型的工具。,15、为每个模块完成的功能进行具体描述,把功能描述转变为精确的、结构化的过程描述的阶段是()A、概要设计B、详细设计C、编

温馨提示

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

评论

0/150

提交评论