软件工程课件:第05章 总体设计_第1页
软件工程课件:第05章 总体设计_第2页
软件工程课件:第05章 总体设计_第3页
软件工程课件:第05章 总体设计_第4页
软件工程课件:第05章 总体设计_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 总体设计How to do generally !第五章 总体设计5.1 总体设计的过程5.2 软件设计基本原理5.3 设计准则 5.4 总体设计的图形描述工具5.5 结构化设计方法 总体设计问题定义可行性研究需求分析总体设计详细设计编码与单元测试综合测试软件维护软件定义时期软件开发时期软件维护时期概括地说,如何解决这些问题,系统怎样实现?划分系统的构成成分(黑盒子),如程序、文件、数据库、人工操作等。设计系统的软件结构,即构成模块。5.1 总体设计的过程1. 设计供选择的方案2. 选取合理的方案 3. 推荐最佳实现方案4. 功能分解5. 软件结构设计6. 数据库设计7. 制定测试计划

2、8. 编写文档9. 审查和复审1. 设计供选择的方案设想方案需求分析阶段得出的数据流图是总体设计的根本出发点。用不同思路对需求分析中的数据流图的处理进行分组(不同的处理边界和处理方法)。可供选择的方案从实用的、可操作性的角度,去除不合理的方案,留下合理的方案进入下一步的选取和设计。选取合理的方案合理方案的选取在上一步设计出的方案中选取合理的方案。这些方案中至少应包括低成本、中成本和高成本的三种方案类型。对每个合理方案要提供以下几方面资料:(1)系统流程图;(2)数据字典;(3)成本效益分析;(4)实现这个系统的进度计划。 3. 推荐最佳方案推荐方案分析员从合理方案中选择一个最佳方案向用户推荐,

3、并为推荐的方案制定详细的实现计划。审查方案对于分析员推荐的最佳方案,用户和有关专家应该认真审查。如果确认该方案确实符合用户的需要,并且在现有条件下完全能够实现,则应该提请使用部门负责人进一步审批。在使用部门负责人也接受了分析员所推荐的方案之后,方可进入总体设计过程的下一步工作,即结构设计阶段。 功能分解对于大型系统的设计,通常分为两个阶段:结构设计和过程设计。结构设计:确定系统由哪些模块组成,以及这些模块之间的相互关系。过程设计:确定每个模块的处理过程。其中,结构设计是总体设计阶段的任务,而过程设计则是详细设计阶段的任务。功能分解为了确定软件结构(下一步),需从实用的角度对软件的功能进行分解。

4、功能分解可通过分析和细化数据流图中的处理而实现。功能的描述完成功能分解后,应采用适当的工具(如IPO图、IPO表)描述每个处理的算法。5. 软件结构设计软件结构软件结构是指软件各功能模块之间的关系,如层次关系、调用/被调用关系等。软件结构设计将软件模块组织成良好的层次关系:顶层、下层、更下层。软件功能模块通过调用其下层子模块,实现所需要完成的功能。软件结构的描述层次方框图Warnier图6. 数据库设计 数据库设计数据库的应用越来越广泛,实际上大多数的系统都要用到数据库技术。数据库设计是一项专门的技术和学科(数据库系统、数据库技术)。数据库设计指对于一个给定的应用环境,构造最优的数据库模式,建

5、立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。总体设计人员应根据需求分析中所确定的数据需求来进行相应的数据库设计。数据库设计内容模式设计子模式设计完整性安全性设计优化处理等。 7. 制定测试计划 测试计划在软件开发的早期阶段提前考虑软件的测试计划是很有必要的。这样能促使软件设计人员在设计时注意到软件的测试问题,从而有利于提高软件的可测试性。软件测试计划的主要内容:测试目的测试范围被测试/不被测试的特性测试方法测试的通过标准测试环境要求测试人员要求和职责分配测试进度要求测试风险和应急措施 8. 编写文档总体设计的文档总体设计说明书(包括系统实现方案和

6、软件模块结构);测试计划(包括测试策略、测试方案、预测的测试结果、测试进度计划等);用户手册(根据总体设计阶段的结果,编写的初步的用户操作手册);细化的实现计划;数据库设计。9. 审查和复审技术审查召开项目小组评审会,从技术角度审查总体设计的合理性、正确性、可追溯性等。管理复审从管理者的角度,审查总体设计中组织管理工作规范性、文档的规范性和完整性等。5. 2 软件设计基本原理1. 模块化2. 抽象3. 逐步求精4. 信息隐蔽5. 模块独立性1. 模块化模块模块是由一个标识符所代表的、由边界元素(如Java中的)限定的相邻程序元素(数据/变量说明、可执行语句)的、实现特定功能的序列。模块又称构件

7、,是能够单独命名并独立地完成一定功能的程序语句的集合。例如高级语言中的过程、函数、子程序等都可作为模块。模块化是软件的一个重要属性模块化的特性提供了人们处理复杂的问题的一种方法,同时也使得软件能够被有效地管理。模块化特性设函数:C(x)表示问题x的复杂程度;E(x)表示解决问题x所需要的工作量(时间)。对于两个问题P1和P2,如果:C(P1)C(P2),则显然有:E(P1)E(P2)另一个特性是:C(P1P2)C(P1)C(P2)根据上面的结论,还有:E(P1P2)E(P1)E(P2)这个不等式表明:单独解决问题P1和P2所需的工作量之和,比把P1和P2合起来作为一个问题来解决时所需的工作量要

8、少。 这种“分而治之”的思想提供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。模块化和软件成本的关系(模块化粒度)成本/模块2. 抽象抽象我们在考虑问题时,集中考虑和当前问题有关的方面,而忽略和当前问题无关的方面,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。 软件工程过程中的抽象软件工程过程的每一步,都是对软件解法的抽象层次的一次细化。在可研阶段,软件被看作是一个完整的系统部分;在需求分析期间,使用在问题环境中熟悉的术语来描述软件的解法;当由总体设计阶段转入详细设计阶段时,抽象的程度进一步减少;最后,当源程序写出来时,也就达到了抽象的

9、最低层。总体设计中的抽象总体设计中的软件层次结构是一种抽象,自顶向下是软件抽象层次的细化。这种抽象简化了软件的设计与实现,提高了可理解性和可测试性。3. 逐步求精逐步求精:逐步求精是人类解决复杂问题时采用的基本用法,也是许多软件工程技术的基础。可把逐步求精理解为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑”。逐步求精的理论基础:“Miller法则”:一个人在任何时候都只能把注意力集中在5到9个(72)知识块上。 “Miller法则”是人类智力的基本局限,我们不可能战胜自己的本性,只能接受这个事实,承认自身的局限性,并在这个前提下近我们最大的努力。逐步求精的好处:它能帮助软件工程师把

10、精力集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解决方案来说虽然必要的,然而目前还不需要的细节,这些细节将留到以后考虑。软件设计中“抽象”和“求精”的互补关系抽象是设计者在软件设计中关注系统/模块的特征、功能和数据的,而忽略底层细节;求精使设计者在设计过程中逐步揭示和实现底层细节。4. 信息隐蔽信息隐蔽模块所包含的信息(过程和数据)对于其他模块来说应该是隐蔽的。也就是说,模块应当被这样规定和设计,使得包含在模块中的信息(过程或数据)对于其它不需要这些信息的模块来说,是不能访问的,或者说是“不可见”的。局部化局部化的概念和信息隐藏概念是密切相关的,所谓局部化是指把一些关系密切的软件元

11、素物理地放得彼此靠近。信息隐蔽的好处信息隐蔽对于软件的测试与维护都有很大的好处。因为对于软件的其它部分来说,绝大多数数据和过程都是隐蔽的,这样,在修改期间由于疏忽而引入的错误所造成的影响就可以局限在一个或几个模块内部,不至波及到软件的其他部分(局部化)。5. 模块独立模块独立模块独立是指开发具有独立功能且和其他模块没有过多的相互作用的模块。模块独立的概念是模块化,抽象、信息隐藏和局部化概念的直接结果。模块独立性的好处有效的模块化的软件比较容易开发出来,而且适于团队进行分工开发。模块化程度较高的软件比较容易测试和维护。模块的独立程度可以由两个定性标准度量耦合:指不同模块彼此间互相依赖的紧密程度;

12、内聚:指在模块内部各个元素彼此结合的紧密程度。耦合耦合:软件结构中各个模块之间相互关联程度的度量。耦合的分类:无耦合/非直接耦合两个模块之间没有或没有直接的数据或调用关系。数据耦合如果两个模块通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合就是数据耦合。 标记耦合两个模块应用了(访问了)同名的外部标识符。特征耦合当把整个数据结构作为参数传递而使用其中一部分数据元素时,就出现了特征耦合。在这种情况下,被调用的模块可以使用的数据多于它确实需要的数据,这将导致对数据的访问失去控制。控制耦合如果两个模块通过参数交换信息,交换的信息有控制信息,那么这种耦合就是控制耦合。公共耦合当两个或多个模块通

13、过公共数据环境相互作用时,他们之间的耦合称为公共环境耦合。内容耦合有下列情形之一,两个模块就发生了内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;一个模块有多个入口。设计原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。内聚内聚:模块内部各个元素彼此结合的紧密程度的度量。内聚的分类:偶然内聚(低,0分)如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也比较松散,就叫做偶然内聚。逻辑内聚(低,1分)如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。时间内聚(低,3分)如果一个模块包含的任务必修在同一段时

14、间内执行,就叫时间内聚。过程内聚(中,5分)如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。 通信内聚(中,7分)如果模块中所有元素都使用同一个输入数据和产生一个输出数据,则成为通信内聚。 顺序内聚(高,9分)如果一个模块内的处理元素同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序内聚。 功能内聚(高,10分)如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。 5. 3 设计准则1. 改进软件结构提高模块独立性2. 模块规模应该适中3. 深度、宽度、扇出和扇入都应适当4. 模块的作用域应该在控制域之内5. 力争降低模块接口的复杂程度6.

15、设计单入口单出口的模块7. 模块功能应该可以预测设计准则1. 改进软件结构提高模块独立性审查设计出来的初步的软件结构,通过模块合并和分解,力求降低耦合、提高内聚。提高独立性的主要方法:提取公用子功能、减少模块间控制信息的传递、减少模块对全局变量的访问、降低接口的复杂性等。2. 模块规模应该适中规模过大的模块逻辑复杂,难以理解。而且完成的功能可能含有多种,因此一般还可以进一步分解。规模过小的模块会使系统的模块数增加很多,造成模块接口开销大。对于非公共调用的小模块,可合并在其父模块中。推荐模块的大小为一页纸,大约不超过60条语句。设计准则(续)3. 深度、宽度、扇出和扇入都应适当深度:软件结构的控

16、制层数(数的深度),反映了系统的逻辑复杂程度。宽度:软件结构的同一层上最多模块数,反映了系统的功能复杂程度。扇出:一个模块直接调用(控制)的下级模块数,反映了该模块的复杂程度。扇入:一个模块被直接调用的上级模块数,反映了该模块的共享程度。4. 模块的作用域应该在控制域之内作用域:受该模块内的一个判定影响的所有模块的集合(逻辑上受影响)。控制域:该模块直接或间接从属于它的所有模块的集合(结构上受影响)。软件结构的度量-例子深度=4宽度=4模块A:-扇入=1-扇出=2-控制域:B,C,D,E,F-作用域:取决于内部逻辑模块C:-扇入=2-扇出=3-控制域:D,E,F-作用域:取决于内部逻辑“好的”

17、软件结构:深度和宽度适中;上层模块高扇出,下层模块高扇入;作用域在控制域内。设计准则(续)5. 力争降低模块接口的复杂程度模块接口复杂是容易引发软件错误的重要原因。模块接口复杂是模块紧耦合、低内聚的征兆。模块接口的设计应使信息传递简单清晰,与模块功能一致。6. 设计单入口单出口的模块使模块只有一个入口、一个出口,不出现中间跳出、跳入。模块之间不出现内容耦合。7. 模块功能应该可以预测,且功能不过份局限模块的功能是确定的、可重现的(对于同样的输入产生同样的输出)。在功能确定的基础上,模块处理能力应有较广的适应性,满足不同数据结构和处理规模。5. 4 总体设计的图形描述工具5.4.1 层次图层次化

18、表示功能模块的调用关系,上层模块调用下层模块完成所需的功能。5.4.2 HIPO图5.4.3 结构图 正文加工系统的层次图5.4.1 层次图层次化表示功能模块的调用关系,上层模块调用下层模块完成所需的功能。带编号的层次图(H图)5.4.2 HIPO图对层次图改进:每一个方框有编号;每一个方框对应一张IPO图。软件结构图的基本符号5.4.3 结构图对层次图改进:采用带有注释的箭头表示模块调用时参数的传递;实心圆注释箭头表示传递控制信息,空心圆注释箭头表示传递数据;菱形表示条件分支选择;箭头圆弧表示循环。产生最佳解的结构图结构图例5. 5 结构化设计方法5.5.1 数据流图的类型5.5.2 设计步

19、骤5.5.3 变换设计5.5.4 事务设计5.5.5 设计的后处理 结构化设计从数据流图(DFD)入手,分析DFD的类型,找出DFD的处理中心,映射成初步的软件结构(层次结构图),按照设计准则细化和优化结构,描述模块的接口和全局数据,经过评审后,提交下一步进行详细设计5.5.1 数据流图的类型1、变换型数据流图2、事务型数据流图1、变换型数据流图时间图5.8变换流2、事务型数据流图图5.9事务流5.5.2 设计步骤图5.10面向数据流方法的设计过程5.5.3 变换设计1. 复查基本系统模型2. 复查并精化数据流图3. 确定数据流图的类型4. 确定输入流和输出流的边界,从而孤立出变换中心5. 进

20、行“第一级分解”6. 进行“第二级分解”7. 使用设计度量和设计准则对第一次分割得到的软件结构进一步精化变换设计例:汽车仪表盘我们通过一个汽车数字仪表板的设计来介绍变换分析的过程。假设仪表板的功能如下:(1)通过模数(AD)转换实现传感器和微处理机接口;(2)在发光二极管(LCD)面板上显示数据;(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4)指示加速或减速;(5)超速警告:如果车速超过55英里小时,则发出超速警告铃声。在软件需求分析阶段,应该对上述每项性能和其它要求进行全面的分析,并建立起相应的文档资料,得出数据流图。具体的设计步骤如下。1、复查基本系

21、统模型仔细阅读和理解需求规格说明书复查基本系统模型初步的数据流图数据字典IPO图2、复查并精化数据流图图5.11数字仪表板系统的数据流图3、确定数据流图的类型这一步的任务是确定数据流图是变换型数据流图还是事务型数据流图。从上图中可以看出,数据沿着两条输入通路(旋转信号和燃料流量传感器信号)进入系统,然后沿着五条通路(4个显示,一个警告铃声)离开,没有明显的事务中心(虽然变换“计算mph与超速值”可以看作是一个事务中心)。因此,可以认为这个数据流图的类型是变换型数据流图。4、确定输入流和输出流的边界,从而孤立出变换中心图5.12具有边界的数据流图5、进行“第一级分解”一个总控模块若干个二级模块对

22、“变换型”DFD:一个输入模块、一个变换模块、一个输出模块。对“事务型”DFD:一个事务接收模块、每个事务流对应一个模块。图5.13 第一级分解的方法第一级分解的结果图5.14 数字仪表板系统的第一级分解6、进行“第二级分解”DFD中的每一个加工对应一个模块从“变换中心”向外延伸,构造模块间的层次(调用)关系图5.15第二级分解的方法图5.16 未经精化的输入结构第二级分解的结果输入结构第二级分解的结果变换结构图5.17 未经精化的变换结构第二级分解的结果输出结构图5.18未经精化的输出结构7、对第一次分割得到的软件结构进一步精化对于从前面的设计步骤得到的软件结构,使用设计度量和设计准则,还可

23、以进行许多修改:输入结构中的模块“转换成rpm”和“收集sps”,模块太小,功能简单,可以合并;模块“确定加速减速”可以放在模块“计算mph”下面,以减少耦合;模块“加速减速显示”可以相应地放在模块“显示mph”的下面。设计准则参见“5. 2 软件设计基本原理”。基本思路是:模块化、高内聚、低耦合、上层模块高扇出、下层模块高扇入。精化的数字仪表板系统的软件结构图5.19 精化后的数字仪表板系统的软件结构5.5.4 事务设计图5.20 事务分析的映射方法一个总控模块若干个二级模块:一个事务接收模块、每个事务流对应一个模块。5.5.5 设计的后处理在确定系统的软件结构以后,还必须做好下述工作:为每

24、个模块开发一份功能说明;为每个模块提供一份接口说明;定义局部的和全程的数据结构;给出所有的设计限制或约束;进行总体设计评审;如果需要和可能的话,进行设计“优化”。4.5小结总体设计的目的用比较抽象的方法确定系统概要地是如何实现的(How to do generally !)。从初步的数据流图导出(设计出)软件结构。主要分为系统设计(DFD、方案、功能)和软件结构设计(DFD、软件结构)二个阶段。总体设计的过程9步设想可能方案、选取合理方案、推荐最佳方案、功能分解细化DFD、设计软件结构、设计数据库、制定测试计划、编写文档、审查和复审。总体设计的原理模块化、抽象vs逐步求精、信息隐蔽/局部化、模

25、块独立性(耦合、内聚)总体设计的启发规则7条原则保证设计出良好的软件结构。总体设计的图形工具数据流图、层次图、HIPO图、结构图。结构化设计方法(SD)区分数据流图的类型(变换型、事务型);结构化设计方法的步骤(7步)习题 51. 为每种类型的模块耦合举一个具体例子。2. 为每种类型的模块内聚举一个具体例子。3. 用面向数据流的方法设计下列系统的软件结构。(1) 储蓄系统(参见习题2第2题)。(2) 机票预订系统(参见习题2第3题)。(3) 患者监护系统(参见习题2第4题)。4. 美国某大学共有200名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过26 000(含26 000)的教师工资将保持不变,年工资少于26 000的教师将增加工资,所增加的工资数按下述方法计算:给每个由此教师所赡养的人(包括教师本人)每年补助100,此外,教师有一年工龄每年再多补助50,但是,增加后的年工资总额不能多于26 000。教师

温馨提示

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

评论

0/150

提交评论