第三部分软件设计与建模(8软件设计)课件.ppt

上传人(卖家):晟晟文业 文档编号:5184515 上传时间:2023-02-16 格式:PPT 页数:82 大小:1.50MB
下载 相关 举报
第三部分软件设计与建模(8软件设计)课件.ppt_第1页
第1页 / 共82页
第三部分软件设计与建模(8软件设计)课件.ppt_第2页
第2页 / 共82页
第三部分软件设计与建模(8软件设计)课件.ppt_第3页
第3页 / 共82页
第三部分软件设计与建模(8软件设计)课件.ppt_第4页
第4页 / 共82页
第三部分软件设计与建模(8软件设计)课件.ppt_第5页
第5页 / 共82页
点击查看更多>>
资源描述

1、 软件工程软件工程方法与实践方法与实践(机械工业出版社)(机械工业出版社)高等院校计算机课程案例教程系列高等院校计算机课程案例教程系列窦万峰窦万峰 编著编著主讲:主讲:李淑芝李淑芝13507077576L1.1.现代软件工程现代软件工程(国家示范性软件学院系列教材国家示范性软件学院系列教材)张家浩张家浩/东南大学东南大学 机械工业出版社机械工业出版社 2009.12009.12.2.软件工程软件工程 理论与实践理论与实践 许家珆许家珆 曾翎曾翎 彭德中彭德中 编著编著 高等教育出版社高等教育出版社 2004.72004.73.3.软件工程软件工程-实践者的研究方法实践者的研究方法 (美)(美)

2、Roger S.PressmanRoger S.Pressman著著 郑人杰等译郑人杰等译 机械工业出机械工业出版社版社 2008.62008.6 4.4.Sommerville.ISommerville.I.(.(影印版影印版)机械工业出版社机械工业出版社 2003.42003.4总总 目目 录录第第1 1章章 软件工程学概述软件工程学概述(2 2学时)学时)第第2 2章章 软件过程软件过程(2 2学时)学时)第第3 3章章 软件过程模型软件过程模型(4 4学时)学时)第第4 4章章 案例研究案例研究(2 2学时)学时)第第5 5章章 软件需求分析过程软件需求分析过程(4 4学时)学时)第第

3、6 6章章 结构化分析建模结构化分析建模(4 4学时)学时)第第7 7章章 面向对象分析面向对象分析(6 6学时)学时)第第8 8章章 软件设计软件设计(4 4学时)学时)第第9 9章章 结构化设计方法结构化设计方法(4 4学时)学时)总总 目目 录录第第1010章章 面向对象设计面向对象设计(4 4学时)学时)第第1111章章 软件实现软件实现(2 2学时)学时)第第1212章章 软件测试软件测试(4 4学时)学时)第第1313章章 软件维护软件维护(2 2学时)学时)第第1414章章 软件项目管理软件项目管理(2 2学时)学时)第第1515章章 软件项目估算软件项目估算(1 1学时)学时)

4、第第1616章章 软件项目计划与管理软件项目计划与管理(1 1学时)学时)第第8章章 软件设计软件设计8.1 软件设计概述软件设计概述 8.2 软件模块化设计软件模块化设计 8.3 软件结构软件结构 8.4 软件系统结构模型软件系统结构模型8.5 体系结构模式体系结构模式 8.6 习题习题8.1 软件软件设计概述设计概述 软件设计阶段的基本目标是构造系统软件设计阶段的基本目标是构造系统“怎么做怎么做”的的模型描述,它是整个软件开发过程的核心问题模型描述,它是整个软件开发过程的核心问题 开发工作根据设计的方案进行,开发工作根据设计的方案进行,软件的总体设计软件的总体设计决定了系统的质量决定了系统

5、的质量“设计先于编码设计先于编码”,这是软件工程,这是软件工程“推迟实现推迟实现”基本原则基本原则 软件系统设计是把软件需求软件系统设计是把软件需求“变换变换”为用于构造为用于构造软件软件的蓝图的蓝图“输入输入”是需求分析各种模型元素是需求分析各种模型元素“输出输出”是软件设计模型和表示是软件设计模型和表示 软件设计的目标是对将要实现的软件系统的体系软件设计的目标是对将要实现的软件系统的体系结构、系统的数据、系统模块间的接口,以及所结构、系统的数据、系统模块间的接口,以及所采用的算法给出详尽采用的算法给出详尽的描述的描述总体总体设计设计需求需求 说明书说明书复审复审软件结构软件结构修修 改改详

6、细详细设计设计可接受可接受模块描述模块描述复审复审修修 改改 设计设计说明书说明书软件设计工作流程软件设计工作流程 从工程管理的角度看,从工程管理的角度看,软件设计软件设计分两步完成:分两步完成:总体设计(概要设计)总体设计(概要设计)和和详细设计详细设计两个阶段。两个阶段。首先做概要设计首先做概要设计(软件结构设计软件结构设计),将软件需),将软件需求转化为数据结构和软件的系统结构。求转化为数据结构和软件的系统结构。然后是详细设计,即过程设计。通过对结构表然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件详细的数据结构和算法。示进行细化,得到软件详细的数据结构和算法。通过软件设计阶

7、段的工作将划分出组成系统的通过软件设计阶段的工作将划分出组成系统的物理元素:物理元素:程序程序文件文件数据库数据库人工过程人工过程文档等文档等 但是每个物理元素仍然处于黑盒子级,这些黑但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后详细设计。盒子里的具体内容将在以后详细设计。总体设计阶段的另一项重要任务是设计总体设计阶段的另一项重要任务是设计软件的软件的结构结构,也就是要确定系统中每个程序是由哪些模块,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。组成的,以及这些模块相互间的关系。需求描述需求描述体系结构设计体系结构设计抽象描述抽象描述接口设计接口设计

8、组件设计组件设计数据结构数据结构设计设计系统体系结构系统体系结构软件描述软件描述接口描述接口描述组件描述组件描述数据结构数据结构描述描述算法描述算法描述算法设计算法设计软件软件设计设计功能与功能与性能需求性能需求编码编码软件软件测试测试程序模块程序模块已测试已测试软件软件系统结构系统结构设计设计过程设计过程设计数据结构设计数据结构设计信息域信息域需求需求 总体设计总体设计通常由两个主要阶段组成:通常由两个主要阶段组成:(1)系统设计阶段系统设计阶段:确定系统的具体实现方案;:确定系统的具体实现方案;(2)结构设计阶段结构设计阶段:确定软件结构。:确定软件结构。典型的典型的总体设计总体设计过程包

9、括下述过程包括下述9个步骤:个步骤:1.设想供选择的方案设想供选择的方案 需求分析阶段得出的数据流图是总体设计的极需求分析阶段得出的数据流图是总体设计的极好的出发点。好的出发点。一旦选出了边界划分一旦选出了边界划分(分组分组)最佳的方案,将能最佳的方案,将能大大提高系统的性能大大提高系统的性能/价格比。价格比。2.选取合理的方案选取合理的方案 通常至少选取低成本、中等成本和高成本的三通常至少选取低成本、中等成本和高成本的三种方案。种方案。在判断哪些方案合理时应该考虑在问题定义和在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能可行性研究阶段确定的工程规模和目标

10、,有时可能还需要进一步征求用户的意见。还需要进一步征求用户的意见。对每个合理的方案分析员都应该准备下列对每个合理的方案分析员都应该准备下列4份份资料:资料:(1)系统流程图;系统流程图;(2)组成系统的物理元素清单;组成系统的物理元素清单;(3)成本成本/效益分析;效益分析;(4)实现这个系统的进度计划。实现这个系统的进度计划。3.推荐最佳方案推荐最佳方案 分析员综合分析对比各种合理方案的利弊,推分析员综合分析对比各种合理方案的利弊,推荐一个最佳的方案。荐一个最佳的方案。用工程网络技术为推荐的方案制定详细的实现用工程网络技术为推荐的方案制定详细的实现计划。计划。用户和有关的技术专家认真审查分析

11、员所推荐用户和有关的技术专家认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并的最佳系统,如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。用部门负责人进一步审批。在使用部门的负责人也接受了分析员所推荐的在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶方案之后,将进入总体设计过程的下一个重要阶段段结构设计结构设计。4.功能分解功能分解 为了最终实现目标系统,必须设计出组成这个为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件系统的所有程序和文件

12、(或数据库或数据库)。对程序对程序(特别是复杂的大型程序特别是复杂的大型程序)的设计,通常的设计,通常分为两个阶段完成:分为两个阶段完成:(1)结构设计结构设计:确定程序由哪些模块组成,以:确定程序由哪些模块组成,以及这些模块之间的关系;及这些模块之间的关系;(2)过程设计过程设计:确定每个模块的处理过程,这:确定每个模块的处理过程,这是详细设计阶段的任务。是详细设计阶段的任务。为确定软件结构,首先需要从实现角度把复杂为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的

13、功能过分复杂,必须把它个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。的功能适当地分解成一系列比较简单的功能。一般说来,经过分解之后应该使每个功能对大一般说来,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。多数程序员而言都是明显易懂的。功能分解导致数据流图的进一步细化,同时还功能分解导致数据流图的进一步细化,同时还应该用应该用IPO图或其他适当的工具简要描述细化后每图或其他适当的工具简要描述细化后每个处理的算法。个处理的算法。5.设计软件结构设计软件结构 通常程序中的一个模块完成一个适当的子功能。通常程序中的一个模块完成一个适当的子功能。软件结

14、构软件结构(即由模块组成的层次系统即由模块组成的层次系统)表示软件表示软件系统的构成,是软件模块间关系的表示,可以用系统的构成,是软件模块间关系的表示,可以用层层次图次图或或结构图结构图来描绘。来描绘。如果数据流图已经细化到适当的层次,则可以如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构,这就是面向数据直接从数据流图映射出软件结构,这就是面向数据流的设计方法。流的设计方法。ABCDEFGHIJKLM 软件结构图软件结构图6.设计数据库(确定系统的数据结构)设计数据库(确定系统的数据结构)对于需要使用数据库的那些应用系统,软件工对于需要使用数据库的那些应用系统,软件工程师应

15、该在需求分析阶段所确定的系统数据需求的程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。基础上,进一步设计数据库。7.设计用户界面设计用户界面 作为人机接口的用户界面起着越来越重要的作作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的可用性及使用寿命。用,它直接影响到软件的可用性及使用寿命。8.制定软件设计测试计划制定软件设计测试计划 在软件开发的早期阶段考虑测试问题,能促使在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。软件设计人员在设计时注意提高软件的可测试性。9.书写文档书写文档 在这个阶段应该完成的文档通常有下述几种:

16、在这个阶段应该完成的文档通常有下述几种:(1)系统说明主要内容:系统流程图描绘的系统构系统说明主要内容:系统流程图描绘的系统构成方案,物理元素清单,成本成方案,物理元素清单,成本/效益分析,精化的效益分析,精化的数据流图,用层次图或结构图描绘的软件结构,用数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具简要描述的各个模块的算法,模图或其他工具简要描述的各个模块的算法,模块间的接口关系等。块间的接口关系等。(2)用户手册:根据总体设计阶段的结果,修改更用户手册:根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。正在需求分析阶段产生的初步的用户手册。(3)测试计划:

17、测试策略,测试方案,预期的测试测试计划:测试策略,测试方案,预期的测试结果,测试进度计划等。结果,测试进度计划等。(4)详细的实现计划。详细的实现计划。(5)数据库设计结果。数据库设计结果。10.审查和复审审查和复审 最后对总体设计的结果进行严格的技术审查,最后对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理在技术审查通过之后再由使用部门的负责人从管理角度进行复审。角度进行复审。软件设计质量原则软件设计质量原则 设计过程不应该受设计过程不应该受“隧道视野隧道视野”的限制的限制 设计对于分析模型应该是可跟踪的设计对于分析模型应该是可跟踪的 设计不应该从头做起设计不

18、应该从头做起 设计应该缩短软件和现实问题的设计应该缩短软件和现实问题的“智力距离智力距离”设计应该表现出一致性和集成性设计应该表现出一致性和集成性 设计应该能够适应修改设计应该能够适应修改 设计不是编码设计不是编码 在创建设计时,就应该考虑能够评估其质量在创建设计时,就应该考虑能够评估其质量 应该复审每一步设计,以减少语义性错误应该复审每一步设计,以减少语义性错误概要设计说明书概要设计说明书1 1 范围范围1.11.1系统目标系统目标1.2 1.2 主要软件需求主要软件需求1.3 1.3 软件设计约束、限制软件设计约束、限制2 2 数据设计数据设计2.1 2.1 数据对象和形成的数据结构数据对

19、象和形成的数据结构2.22.2文件和数据库结构文件和数据库结构外部文件结构外部文件结构 逻辑结构逻辑结构 逻辑记录描述逻辑记录描述 访问方法访问方法全局数据全局数据文件和数据交叉索引文件和数据交叉索引3 3 体系结构设计体系结构设计3.1 3.1 数据和控制流复审数据和控制流复审3.2 3.2 得出的程序结构得出的程序结构4 4 接口设计接口设计4.1 4.1 人机界面规约人机界面规约4.2 4.2 人机界面设计规约人机界面设计规约4.3 4.3 外部接口设计外部接口设计外部数据接口外部数据接口外部系统或设备接口外部系统或设备接口4.4 4.4 内部接口设计规约内部接口设计规约5 5 (每个模

20、块)过程设计(每个模块)过程设计5.1 5.1 处理说明处理说明5.2 5.2 接口描述接口描述5.3 5.3 设计语言描述设计语言描述5.4 5.4 使用的模块使用的模块5.5 5.5 内部设计结构内部设计结构5.6 5.6 注释注释/约束约束/限制限制6 6 需求交叉索引需求交叉索引7 7 测试部分测试部分7.17.1测试方针测试方针7.2 7.2 集成策略集成策略7.3 7.3 特殊考虑特殊考虑8 8 附录(包括特殊注解)附录(包括特殊注解)详细设计说明书详细设计说明书1 1 引言引言1.1 1.1 编写目的:阐明编写详细设计说明编写目的:阐明编写详细设计说明书的目的,指明读者对象。书的

21、目的,指明读者对象。1.2 1.2 项目背景:应包括项目的来源和主项目背景:应包括项目的来源和主管部门等。管部门等。1.3 1.3 定义:列出本文档中所用到的专门定义:列出本文档中所用到的专门术语的定义和缩写词。术语的定义和缩写词。列出有关资料的作者、标题、编号、列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源发表日期、出版单位或资料来源 文档所引用的资料、软件开发的标准文档所引用的资料、软件开发的标准或规范。或规范。1.4 1.4 参考资料:参考资料:项目经核准的计划任务书、合同或上级项目经核准的计划任务书、合同或上级机关的批文;机关的批文;项目开发计划;需求规格说明书;概要项目

22、开发计划;需求规格说明书;概要设计说明书;设计说明书;测试计划(初稿);测试计划(初稿);用户操作手册。用户操作手册。2 2 总体设计总体设计2.1 2.1 需求概述需求概述2.2 2.2 软件结构:如给出软件系统的结构软件结构:如给出软件系统的结构图。图。3 3 程序描述程序描述3.1 3.1 逐个模块给出以下说明:逐个模块给出以下说明:性能性能 输出项目输出项目 功能功能 输入项目输入项目3.2 3.2 算法:模块所选用的算法。算法:模块所选用的算法。3.3 3.3 程序逻辑:详细描述模块实现的算程序逻辑:详细描述模块实现的算法,可采用:标准流程图;法,可采用:标准流程图;PDLPDL语言

23、;语言;N-N-S S图;判定表等描述算法的图表。图;判定表等描述算法的图表。3.4 3.4 接口接口 限制条件限制条件 存储分配存储分配3.53.5测试要点:给出测试模块的主要测试测试要点:给出测试模块的主要测试要求。要求。8.2 软件模块化设计软件模块化设计有人说,模块化是为了使一个复有人说,模块化是为了使一个复杂的大型程序能被人的智力所管杂的大型程序能被人的智力所管理,软件应该具备的惟一属性。理,软件应该具备的惟一属性。模块是一个独立命名的,拥有明确定义的输入、模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。输出和特性的程序实体。把一个大型软件系统的全部功能,按照一定的原

24、把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成一个则合理地划分为若干个模块,每个模块完成一个特定子功能,所有的这些模块以某种结构形式组特定子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计成一个整体,这就是软件的模块化设计(Modular Design)。)。软件模块化设计可以简化软件的设计和实现,提软件模块化设计可以简化软件的设计和实现,提高软件的可理解性和可测试性,并使软件更容易高软件的可理解性和可测试性,并使软件更容易得到维护。得到维护。分解、抽象、逐步求精、信息隐蔽和模块独立性,分解、抽象、逐步求精、信息隐蔽和模块独立性,是软件模

25、块化设计的指导思是软件模块化设计的指导思想。想。模块(模块(构件构件)是程序对象有名字的集合。例如,)是程序对象有名字的集合。例如,过程、函数、子程序、宏等,是构成软件系统结构过程、函数、子程序、宏等,是构成软件系统结构的基本元素。的基本元素。面向对象方法学中的面向对象方法学中的对象对象是模块,对象内的方是模块,对象内的方法(服务)也是模块。模块是构成程序的基本构件。法(服务)也是模块。模块是构成程序的基本构件。模块化就是将系统划分为若干个模块,每个模模块化就是将系统划分为若干个模块,每个模块完成一个子功能。块完成一个子功能。模块化的目的是将系统模块化的目的是将系统“分而治之分而治之”,模块化

26、,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件易理解,易于测试和调试,因而也有助于提高软件的可靠性。的可靠性。令:令:C C(X X)表示问题表示问题 X X 的复杂度函数,的复杂度函数,E E(X X)表示解决问题)表示解决问题 X X 所需工作量所需工作量的复杂度函数;的复杂度函数;若:有问题若:有问题 P1P1,P2 P2,C C(P1P1)C C(P2P2););显然:显然:E E(P1P1)E E(P2P2)由经验:由经验:C C(P1+P2P1+P2)C C(P1P1)+C+C(P2P

27、2)于是:于是:E E(P1+P2P1+P2)E E(P1P1)+E+E(P2P2)将问题(将问题(P1+P2P1+P2)划分为两个问题划分为两个问题P1P1和和P2P2后,其工作量和复杂度都降低。后,其工作量和复杂度都降低。软件总成本 模块化与软件成本的关系模块化与软件成本的关系成本模块数目模块成本接口成本最小成本区M结论:结论:并非模块分得越小越好,因为模块之间接口的并非模块分得越小越好,因为模块之间接口的复杂度和工作量会增加。显然,复杂度和工作量会增加。显然,每个软件系统都有一每个软件系统都有一个最佳模块数个最佳模块数M M,注意选择分解的最佳模块数。,注意选择分解的最佳模块数。模块化降

28、低软件复杂度的简单证明:模块化降低软件复杂度的简单证明:采用模块化原理可以使软件结构清晰,不仅容采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。易设计也容易阅读和理解。因为程序错误通常局限在有关的模块及它们之因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。因而有助于提高软件的可靠性。因为变动往往只涉及少数几个模块,所以模块因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。化能够提高软件的可修改性。模块化的主要优点是:模块化设计降低了软件模块化的主要优点是:

29、模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。各个部分可以并行开发,从而提高了软件的生产率。人类在认识复杂现象的过程中使用的最强有力人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面状态或过程之间总存在着某些相似的方面(共性共性)。把这些相似的方面集中和概括起来,暂时忽略把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。它们之

30、间的差异,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。考虑它们的细节。抽象抽象 处理复杂系统的惟一有效的方法是用层次的方处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。式构造和分析它。软件工程过程的每一步都是对软件解法的抽象软件工程过程的每一步都是对软件解法的抽象层次的一次精化:层次的一次精化:在可行性研究阶段,软件作为系统的一个完整部在可行性研究阶段,软件作为系统的一个完整部件;件;在需求分析期间,软件解法是使用在问题环境内在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;熟悉的方式描述的;当由总体设计向详细设

31、计过渡时,抽象的程度也当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;就随之减少了;最后,当源程序写出来以后,也就达到了抽象的最后,当源程序写出来以后,也就达到了抽象的最低层。最低层。软件体系结构软件体系结构 软件体系结构是指软件的整体结构和这种结构为软件体系结构是指软件的整体结构和这种结构为系统提供概念上完整性的方式。系统提供概念上完整性的方式。体系结构可以是程序构件或模块的结构或组织,体系结构可以是程序构件或模块的结构或组织,这些构件或模块交互的形式以及这些构件所用数这些构件或模块交互的形式以及这些构件所用数据的结构。据的结构。体系结构设计可以使用大量的模型来表达。体系结构设计可以

32、使用大量的模型来表达。信息隐藏原理指出:应该这样设计和确定模块,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息使得一个模块内包含的信息(过程和数据过程和数据)对于不需对于不需要这些信息的模块来说,是不能访问的。要这些信息的模块来说,是不能访问的。实际上,应该隐藏的不是有关模块的一切信息,实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节。而是模块的实现细节。独立的构件或模块之间的独立的构件或模块之间的“接口接口”简单而清晰。简单而清晰。所谓局部化是指把一些关系密切的软件元素物所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。理地放得彼此靠近。在模块中使用局

33、部数据元素是局部化的一个例在模块中使用局部数据元素是局部化的一个例子。子。显然,显然,局部化有助于实现信息隐藏。局部化有助于实现信息隐藏。信息隐藏和局部化信息隐藏和局部化 模块独立的概念是模块化、抽象、信息隐藏和模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。局部化概念的直接结果。希望这样设计软件结构,使得每个模块完成一希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的个相对独立的特定子功能,并且和其他模块之间的关系很简单。关系很简单。模块的独立性很重要,主要有两条理由:模块的独立性很重要,主要有两条理由:第一,有效的模块化的软件比较容易开发出来

34、。第一,有效的模块化的软件比较容易开发出来。第二,独立的模块比较容易测试和维护。第二,独立的模块比较容易测试和维护。总之,模块独立是好设计的关键,而设计又是总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。决定软件质量的关键环节。模块独立模块独立 模块独立性的度量标准是两个定性准则:模块独立性的度量标准是两个定性准则:(1)耦合性耦合性:描述模块之间联系的紧密程度;:描述模块之间联系的紧密程度;(2)内聚性内聚性:描述模块内部联系的紧密程度。:描述模块内部联系的紧密程度。模块独立性比较强的模块应该具有高内聚性和模块独立性比较强的模块应该具有高内聚性和低耦合度。低耦合度。模块独立性

35、愈高,则块内联系越强,块间联系模块独立性愈高,则块内联系越强,块间联系越弱。越弱。低非直接耦合数据耦合控制耦合特征特征耦合耦合公共公共耦合耦合内容内容耦合耦合 高弱 强耦合性模块独立性1.1.耦合耦合 耦合是对一个软件结构内不同模块之间互连程度的耦合是对一个软件结构内不同模块之间互连程度的度量。度量。耦合强弱取决于模块间接口的复杂程度,进入或访耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。问一个模块的点,以及通过接口的数据。模块间的耦合程度强烈影响系统的可理解性、可测模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。试性、可靠性和可维护性。(

36、1 1)数据耦合:)数据耦合:两个模块彼此间通过参数交换信息,而且两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。交换的信息仅仅是数据。系统中至少必须存在数据耦合,只有当某些模块的输系统中至少必须存在数据耦合,只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。值的功能。(2 2)控制耦合:)控制耦合:一个模块通过传送开关、标志、名字等控一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。制信息,明显地控制选择另一模块的功能。A 模块flagf1Bf2fn 控制耦合是中等程度控制耦合是中

37、等程度的耦合,它增加了系统的的耦合,它增加了系统的复杂程度。控制耦合在把复杂程度。控制耦合在把模块适当分解之后通常可模块适当分解之后通常可以用数据耦合代替它。以用数据耦合代替它。(3)特征耦合:)特征耦合:被调用的模块需要使用作为参数被调用的模块需要使用作为参数传递进来的数据结构中的一部分数据元素时,就出传递进来的数据结构中的一部分数据元素时,就出现了现了特征耦合特征耦合。(4)公共耦合:公共耦合:当两个或多个模块通过一个公共当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为数据环境相互作用时,它们之间的耦合称为公共环公共环境耦合境耦合。公共环境可以是全程变量、共享的通信区、内

38、公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设存的公共覆盖区、任何存储介质上的文件、物理设备等。备等。如果两个模块共享的数据很多,都通过参数传如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时递可能很不方便,这时可以利用公共环境耦合可以利用公共环境耦合。全局全局数据区数据区ABCDEFB B、C C、E E 为公共耦合为公共耦合(5)内容耦合)内容耦合:是是最高程度的耦合。最高程度的耦合。有如下表现:有如下表现:a.a.一个模块直接访问另一模块的内部数据。一个模块直接访问另一模块的内部数据。b.b.一个模块不通过正常入口转到另一模块的内部。一个模

39、块不通过正常入口转到另一模块的内部。c.c.一个模块有多个入口。一个模块有多个入口。d.d.两个模块有部分代码重迭。两个模块有部分代码重迭。AB进入另一模块内进入另一模块内AB部分代码重迭部分代码重迭Entry1 .Entry2 .多重入口多重入口 总之,耦合是影响软件复杂程度的一个重要总之,耦合是影响软件复杂程度的一个重要因素。因素。应该采取下述设计原则:应该采取下述设计原则:尽量使用数据耦合,少用控制耦合和特征耦尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合,限制公共环境耦合的范围,完全不用内容耦合。合。2.2.内聚内聚 内聚标志一个模块内各个元素彼此结

40、合的紧内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,简单地说,理想内聚的模块只做一件事情理想内聚的模块只做一件事情。设计时应该力求做到高内聚,中等程度的内设计时应该力求做到高内聚,中等程度的内聚也可以采用,不要使用低内聚。聚也可以采用,不要使用低内聚。低低功能功能内聚内聚顺序顺序内聚内聚通信通信内聚内聚过程过程内聚内聚时间时间内聚内聚逻辑逻辑内聚内聚偶然偶然内聚内聚 高高强强弱弱 内聚性内聚性模块独立性模块独立性 低内聚有如下几类:低内聚有如下几类:(1)偶然内聚偶然内聚一个模块完成一组任务,这些一个模块

41、完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。任务彼此间即使有关系,关系也是很松散的。有时在写完一个程序之后,发现一组语句在两有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。省内存,这样就出现了偶然内聚的模块。(2)逻辑内聚逻辑内聚一个模块完成的任务在逻辑上一个模块完成的任务在逻辑上属于相同或相似的一类。属于相同或相似的一类。(3)时间内聚时间内聚一个模块包含的任务必须在同一个模块包含的任务必须在同一段时间内执行。一段时间内执行。例如:初始化系统模块、系统结束模块、紧

42、急故障处理模例如:初始化系统模块、系统结束模块、紧急故障处理模块块 等均是时间性聚合模块。等均是时间性聚合模块。调用模块判定读一个记录写一个记录被调用模块 中内聚主要有两类:中内聚主要有两类:(4)过程内聚过程内聚一个模块内的处理元素是相关一个模块内的处理元素是相关的,而且必须以特定次序执行。的,而且必须以特定次序执行。(5)通信内聚通信内聚模块中所有元素都使用同一个模块中所有元素都使用同一个输入数据和输入数据和(或或)产生同一个输出数据。产生同一个输出数据。高内聚也有两类:高内聚也有两类:(6)顺序内聚)顺序内聚一个模块内的处理元素和同一一个模块内的处理元素和同一个功能密切相关,而且这些处理

43、必须顺序执行。个功能密切相关,而且这些处理必须顺序执行。(7)功能内聚)功能内聚模块内所有处理元素属于一个模块内所有处理元素属于一个整体,完成一个单一的功能。整体,完成一个单一的功能。功能内聚是最高程度的内聚。功能内聚是最高程度的内聚。逐步求精是人类解决复杂问题时采用的基本方逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。法,也是许多软件工程技术的基础。可以把逐步求精定义为:可以把逐步求精定义为:“为了能集中精力解为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。决主要问题而尽量推迟对问题细节的考虑。”逐步求精之所以如此重要,是因为人类的认知逐步求精之所以如此重要,

44、是因为人类的认知过程遵守过程遵守Miller法则:法则:一个人在任何时候都只能把一个人在任何时候都只能把注意力集中在(注意力集中在(72)个知识块上。)个知识块上。Miller法则是人类智力的基本局限,我们不可法则是人类智力的基本局限,我们不可能战胜自己的自然本性,只能接受这个事实,承认能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽我们的最大努力自身的局限性,并在这个前提下尽我们的最大努力工作。工作。逐步求精逐步求精 逐步求精,或称逐步细化,是一种逐步求精,或称逐步细化,是一种自顶向下自顶向下的的设计策略。设计策略。抽象与求精是一对互补的概念。抽象与求精是一对互补的

45、概念。抽象使得设计者能够说明过程和数据,同时却抽象使得设计者能够说明过程和数据,同时却忽略低层细节。忽略低层细节。事实上,可以把抽象看作是一种通过忽略多余事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方的细节同时强调有关的细节,而实现逐步求精的方法。法。求精则帮助设计者在设计过程中逐步揭示出低求精则帮助设计者在设计过程中逐步揭示出低层细节。层细节。这两个概念都有助于设计者在设计演化过程中这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。创造出完整的设计模型。逐步求精和模块化的概念,与抽象是紧密相关逐步求精和模块化的概念,与抽象是紧密相关的。的。随

46、着软件开发工程的进展,在软件结构每一层随着软件开发工程的进展,在软件结构每一层中的模块,表示了对软件抽象层次的一次精化:中的模块,表示了对软件抽象层次的一次精化:事实上,软件结构顶层的模块,控制了系统的主事实上,软件结构顶层的模块,控制了系统的主要功能并且影响全局;要功能并且影响全局;在软件结构底层的模块,完成对数据的一个具体在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式分配控制;处理,用自顶向下由抽象到具体的方式分配控制;简化了软件的设计和实现,提高了软件的可理解简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。性和可测试性,并且使软

47、件更容易维护。重构重构 重构是一种重新组织的技术,可以简化构件或模重构是一种重新组织的技术,可以简化构件或模块的设计或编码而无需改变其功能或行为。块的设计或编码而无需改变其功能或行为。重构是一种改进程序内部结构但不改变代码或设重构是一种改进程序内部结构但不改变代码或设计的外部行为。计的外部行为。“先使它转起来,再使它快起来先使它转起来,再使它快起来”。8.3 软软件件结构结构 软件结构图软件结构图(Structure Chart,Structure Chart,简称简称SCSC)是软件)是软件系统的模块层次结构,反映了整个系统的功能实系统的模块层次结构,反映了整个系统的功能实现。现。软件结构以

48、层次表示程序的系统结构,即一种控软件结构以层次表示程序的系统结构,即一种控制的层次体系,并不表示软件的具体过程。制的层次体系,并不表示软件的具体过程。软件软件结构一般用树状或网状结构的图形来表结构一般用树状或网状结构的图形来表示。示。8.3 软软件件结构结构 软软件结构图的主要元素有:件结构图的主要元素有:模块:模块用带有名字的方框表示,名称应体模块:模块用带有名字的方框表示,名称应体现模块的功能。现模块的功能。控制关系:控制关系用单向箭头或直线表示模控制关系:控制关系用单向箭头或直线表示模块间的调用关系。块间的调用关系。信息传递:用带注释的短箭头表示模块调用过信息传递:用带注释的短箭头表示模

49、块调用过程中传递的信息。程中传递的信息。循环调用和选择调用:在上部模块底部加一个循环调用和选择调用:在上部模块底部加一个菱形符号表示选择调用,在上部模块的下方家菱形符号表示选择调用,在上部模块的下方家一个弧形箭头,表示循环调用。一个弧形箭头,表示循环调用。层次图和层次图和HIPOHIPO图图 层次图用来描绘软件的层次结构。虽然层次图用来描绘软件的层次结构。虽然层次图层次图的形式和描绘数据结构的的形式和描绘数据结构的层次方框图层次方框图相同,但是表相同,但是表现的内容却完全不同。现的内容却完全不同。层次图中的一个矩形框代表一个模块,方框间层次图中的一个矩形框代表一个模块,方框间的连线表示调用关系

50、而不像层次方框图那样表示组的连线表示调用关系而不像层次方框图那样表示组成关系。成关系。描绘软件结构的图形工具描绘软件结构的图形工具正文加工系统的层次图正文加工系统的层次图 描绘软件结构的图形工具描绘软件结构的图形工具 HIPO图是美国图是美国IBM公司发明的公司发明的“层次图加输层次图加输入入/处理处理/输出图输出图”的英文缩写。的英文缩写。为了能使为了能使HIPO图具有可追踪性,在图具有可追踪性,在H图图(层次层次图图)里除了最顶层的方框之外,每个方框都加了编里除了最顶层的方框之外,每个方框都加了编号。号。编号规则和数据流图的编号规则相同。编号规则和数据流图的编号规则相同。和和H图中每个方框

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第三部分软件设计与建模(8软件设计)课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|