您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件工程第5章(精)
第五章总体设计本章要点:概要设计的任务、设计原理、启发规则、描绘软件结构的图形工具、面向数据流的设计方法本章难点:内聚和耦合、事务流和变换流、事务分析、变换分析学时:4学时☞传统的软件工程方法学采用结构化设计技术完成软件设计工作,软件设计分为总体设计(概要设计、初步设计)和详细设计。☞总体设计阶段的主要任务:1.方案设计首先设想实现目标系统的各种可能的方案。然后,根据系统规模和目标,综合考虑技术、经济、操作等各种因素,从设想出的供选择的方案中选取若干个合理的方案。最后,综合分析、对比所选取的各种方案的利弊,从中选出一个最佳方案,并且制定这个方案的详细实现计划。2.体系结构设计软件体系结构设计指确定软件系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。设计出初步的软件结构之后,还应从多方面进一步改进软件结构,以便得到更好的体系结构。5.1设计过程设想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构设计数据库制定测试计划书写文档系统说明用户手册测试计划详细的实现计划数据库设计结果审查和复审5.2设计原理为了能获得高质量的设计结果,在软件设计过程应该遵循下述原理(准则)。5.2.1模块化模块是由边界元素限定的相邻程序元素的序列,并且有一个标识符代表它。模块化是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把全部模块集成起来构成一个大集体,可以完成指定的功能,满足用户的需求。模块化可以使一个复杂的大型程序能被人的智力所管理,是软件应该具备的最重要的属性。每个程序都相应地有一个最适当的模块数目,可使软件系统的开发成本最小。优点:1.2.3.4.5.2.2抽象抽象是人类在认识复杂现象、解决复杂问题的过程中使用的最强有力的思维工具。抽象是把现实世界中一定事物、状态或过程之间相似的方面集中和概括起来,暂时忽略它们之间的差异的方法。即抽象是提取事物的本质特性而暂时不考虑它们的细节。设计复杂系统方法用层次的方式分析和构造。在软件工程中的每个阶段中,抽象的层次逐步降低,在软件结构设计中的模块分层也是由抽象到具体的分析和构造出来的。软件工程过程的每一步,都是对软件解法的抽象层次的一次细化。在可行性研究阶段,软件被看作是一个完整的系统部分;在需求分析阶段,使用问题环境中熟悉的术语来描述软件的解法;由总体设计转入详细设计阶段时,抽象的程度进一步减小;最后,当源程序写出来时,也就达到了抽象的最低层。5.2.3逐步求精是人类解决复杂问题时采用的基本技术,也是软件工程技术的基础。逐步求精指为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精是把一个时期内必须解决的种种问题按优先级排序的技术。它确保每个问题都将被解决,而且每个问题都在适当的时候解决,但在任何时候一个人都不需同时处理7个以上知识块。用逐步求精方法解决问题的过程中,问题的某个特定方面的重要性是随时间变化的。它能确保每个问题在适当时候都得到解决,但在任何时刻都不需同时处理7个以上知识块。求精是细化过程。要求设计者细化原始陈述,随着每个后续求精(细化)步骤的完成而提供越来越多的细节。抽象与求精是一对互补的概念。抽象使得设计者能说明过程和数据,同时却忽略低层细节。求精上帮助设计者在设计过程中揭示出低层细节。都有助于设计者创造出完整的设计模型。5.2.4信息隐藏信息隐藏指在设计模块时应使得一个模块内包含的信息(过程或数据)对于不需要这些信息的模块来说是不能访问的。应该隐藏的不是有关模块的一切信息,而是模块的实现细节。“隐藏”意味着可以通过定义一组独立的模块来实现有效的模块化,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。使用信息隐藏原理设计软件模块,有助于减少修改软件时所犯的错误。5.2.5局部化局部化指把一些关系密切的软件元素物理地放得彼此靠近。局部化与信息隐藏密切相关,局部化有助于实现信息隐藏。5.2.6模块独立☞只有合理地划分和组织模块,才能获得模块化所带来的好处,才能大大提高软件的质量。指导模块划分和组织的最重要的原理是“模块独立”。☞开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。☞模块独立性的重要性?1.具有独立性的模块比较容易开发出来。2.独立模块比较容易测试和维护。☞模块独立是好设计的关键,设计又是决定软件质量的关键环节☞模块的独立程度可以由内聚和耦合这两个定性能够标准来度量。内聚衡量一个模块内部各个元素彼此结合的紧密程度。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。5.2.6.1耦合★耦合是对一个结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。★在软件设计中应该追求尽可能松散耦合的系统。模块间耦合松散,有助于提高系统的可理解性、可测试性、可靠性和可维护性。★模块之间典型的耦合有:数据耦合、控制耦合、特征耦合、公共环境耦合、内容耦合★设计原则:尽量使用数据耦合,少使用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。5.2.6.2内聚★内聚是一个模块内的各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。★在软件设计中尽力做到高内聚(功能内聚和顺序内聚),通常中等程度的内聚(通信内聚和过程内聚)也是可以使用的,而且效果和高内聚相差不多;但低内聚(偶然内聚、逻辑内聚和时间内聚)效果很坏,不要使用。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应把更多注意力集中到提高模块的内聚程度上。5.3启发规则改进软件结构、提高模块独立性。设计出软件的初步结构以后,应仔细审查分析此结构,通过模块分解或合并,力求降低耦合、提高内聚。模块规模应该适中。模块规模过大,则可理解程度很低;规模过小则开销大于有效操作。通过模块分解或合并调整模块规模时,不可降低模块独立性。深度、宽度、扇出和扇入都应适当。模块的作用域应在控制域之内。力争降低模块接口的复杂程度。接口复杂或模块功能不一致,是紧耦合或低内聚的征兆,应重新分析这个模块的独立性。设计单入口单出口的模块。目的使模块间不要出现内容耦合。模块功能应可以预测。模块功能应能预测(即只要输入的数据相同就能产生同样的输出),但也不要使模块功能过分局限。5.4描绘软件结构的图形工具1.层次图和HIPO图层次图用于描绘软件层次结构。层次图中的一个矩形框代表一个模块,方框间的连线表示模块间的调用关系。层次图很适于在自顶向下设计软件的过程中使用。HIPO图是“层次图加输入/处理/输出图”的英文缩写。用层次图描绘软件结构,和层次图中每个对应的方框相对应,有一张IPO图描绘这个方框代表的模块的处理过程。2.结构图是描绘软件结构的图形工具。图中一个矩形框代表一个模块,框间连线表示模块间的调用关系。通常用带注释的箭头线描述在模块调用过程中传递的信息。尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息ABABCDABCAB基本形式顺序调用选择调用循环调用5.5面向数据流的设计方法面向数据流的设计方法的目标,是给出设计软件结构的一个系统化的途径。面向数据流的设计方法定义了一些“映射”规则,利用这些映射可以把数据流图变换成软件结构。5.5.1数据流的类型面向数据流的设计方法把数据流图映射成软件结构,数据流的类型决定了映射的方法。数据流的类型:变换流和事务流1.变换流(transformflow)变换是把输入的数据处理后变成另外的数据输出。信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征是,这种信息流就叫变换流。特点:从同一数据源进入系统的数据,它在数据流图中流动的逻辑路径是相同的。变换流的DFD是一个线性结构,由输入、变换、输出三部分组成。变换型数据处理的工作过程分为取得数据、变换数据、给出数据。变换型数据流图的例子:处理定货库存数据定货数据逻辑输入逻辑输出主处理2.事务流事务是一个处理,将输入数据流分离成许多发散的数据流,形成许多加工路径,并根据值选择其中一个路径来执行。这种数据流以事务为中心,称为事务流。事务中心完成的任务:(1)接受输入数据(事务)(2)分析每个事务以确定它的类型(3)根据事务类型选取一条活动通路例:事务型数据流图更新库存增加库存减少库存添加记录删除记录精化数据流图类型区分事务中心和数据接收通路区分输入和输出分支映射成事务结构映射成变换结构优化软件结构导处软件结构复查详细设计事务变换不满意满意事务分析变换分析面向数据流的设计过程:是一系列设计步骤的总结,把具有变换流特点的数据流图按预先确定的模式映射成软件结构。步骤:重画数据流图;区分有效输入、输出和中心变换部分;进行一级分解,设计上层模块;进行二级分解,设计中、下层模块。重新分析数据流图分析数据流图中的数据流是如何流动的,确定其具有变换流特征。在数据流图上区分系统的的逻辑输入、逻辑输出和中心变换部分方法:1.直接确定。(经验丰富的设计人员)2.试探法:逻辑输入是离物理输入端最远的,但仍被看作是系统输入的数据流逻辑输出是离物理输出端最远的,但仍被看作是系统输出的数据流从物理输入到逻辑输入,构成系统的输入部分;从物理输出到逻辑输出,构成输出部分;输入部分和输出部分之间的是中心变换部分。5.5.2变换分析进行一级分解,设计系统模块结构的顶层和第一层。首先,根据变换中心可以对应得到主模块的位置;其次,根据划分好的三个部分画出输入、变换、输出模块。第一层模块与主模块之间传送的数据应与数据流图相对应。主模块控制、协调第一层的输入模块、变换模块、输出模块的工作。进行二级划分,设计输入、中心变换、输出部分的中、下层模块根据第一层模块,自顶向下,逐步细化,分别为各个模块设计出下属模块。如此下去,可画出所有的输入和输出模块,直到物理输入和输出为止。设计中心变换模块的下层模块一般应参照数据流图的中心变换部分和功能分解的原则来考虑如何对中心变换模块进行分解。系统获得C获得B获得A将A转换为B将B转换为C将C转换为D和E输出D将D转换为F输出F输出E将E转换为G输出G将G转换为H输出H123456ABCDEFGH输入变换中心输出由事务型数据流图导出事务型系统的初始结构图技术。步骤:1.识别事务中心处理和事务处理;2.设计结构图的第一层(主层,事务中心处理模块)和第二层(事务)。第二层为各事务处理模块,加上一个取事务模块和一个输出模块。3.为每个事务处理设计下层操作模块,可以共享。4.设计细节模块,也可以被操作模块共享。大型软件系统的数据流图是由变换型和事务型组成的混合型数据流图,由它映射的系统结构图是混合型结构图。对于混合型数据流图,在映射成结构图时,一般以变换分析为主,事务分析为辅的映射方式进行软件结构设计。5.5.3事务分析例:定货系统的结构图。定货系统Get库存数据处理定货Put定货数据库存数据库存数据定货数据定货数据Get库存数据合格库存业务Read库存业务库存业务库存业务→合格库存业务定货数据库存业务合格库存业务更新库存合格库存业务库存数据取事务增加库存减少库存添加记录删除记录输出操作1操作2操作3细节1细节2产生定货清单Write定货清单定货数据定货清单定货清单5.5.4设计优化
本文标题:软件工程第5章(精)
链接地址:https://www.777doc.com/doc-3603741 .html