软件工程-04概要设计._第1页
软件工程-04概要设计._第2页
软件工程-04概要设计._第3页
软件工程-04概要设计._第4页
软件工程-04概要设计._第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

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

文档简介

1、1第四章第四章 概要设计概要设计软件工程软件工程2 2第四章第四章 软件概要设计软件概要设计4.1 软件设计的目标与准则软件设计的目标与准则4.2 软件设计工程的任务软件设计工程的任务4.3 创建良好设计的原则创建良好设计的原则 4.4 传统的结构化设计方法传统的结构化设计方法4.5 概要设计评审概要设计评审4.6概要设计案例概要设计案例软件工程软件工程3 34.1 软件设计的目标和准则软件设计的目标和准则n软件设计的基本目标是软件设计的基本目标是用比较抽象概括的方式用比较抽象概括的方式确定目标系统如何完成预定的任务确定目标系统如何完成预定的任务,即软件设,即软件设计是确定系统的物理模型。计是

2、确定系统的物理模型。n从技术观点来看,软件设计包括从技术观点来看,软件设计包括数据设计数据设计、体体系结构设计系结构设计、接口设计接口设计、过程设计过程设计。n有一些设计目标是从用户那里得到,更多的设有一些设计目标是从用户那里得到,更多的设计目标是从非功能需求或应用领域中抽取出来。计目标是从非功能需求或应用领域中抽取出来。n设计目标可以从以下设计目标可以从以下 5 组设计准则中选择。组设计准则中选择。软件工程软件工程4 4性能准则性能准则设计准则设计准则定定 义义响应时间响应时间 用户提交请求后多长时间可得到系统的确认用户提交请求后多长时间可得到系统的确认吞吐量吞吐量在一段固定时间内系统能够处

3、理多少任务在一段固定时间内系统能够处理多少任务内存内存系统运行需要占用多少内存空间系统运行需要占用多少内存空间可靠性准则可靠性准则设计准则设计准则定定 义义鲁棒性鲁棒性面对非法用户进入后系统的存活能力面对非法用户进入后系统的存活能力可靠性可靠性明确期待的行为与观察到行为之间的差别明确期待的行为与观察到行为之间的差别可用性可用性系统能够用来完成正常任务的时间百分比系统能够用来完成正常任务的时间百分比容错性容错性在出错条件下系统的操作能力在出错条件下系统的操作能力保密性保密性系统忍受恶意攻击的能力系统忍受恶意攻击的能力安全性安全性再出现错误时系统避免威胁到人类生命的能力再出现错误时系统避免威胁到人

4、类生命的能力软件工程软件工程5 5最终用户准则最终用户准则成本准则成本准则设计准则设计准则定定 义义效用效用系统支持用户工作的困难程度系统支持用户工作的困难程度易用性易用性用户使用系统的困难程度用户使用系统的困难程度设计准则设计准则定定 义义开发成本开发成本 开发系统初始版本的成本开发系统初始版本的成本部署成本部署成本 安装系统并培训用户的成本安装系统并培训用户的成本升级成本升级成本 从原有系统中导出数据的成本,此准则导致了从原有系统中导出数据的成本,此准则导致了向后兼容性需求向后兼容性需求维护成本维护成本 需要进行错误修复和增强系统的成本需要进行错误修复和增强系统的成本管理成本管理成本 需要

5、对系统进行管理的成本需要对系统进行管理的成本软件工程软件工程6 6维护准则维护准则n性能性能、可靠性可靠性和和最终用户最终用户准则往往准则往往从需求中明确从需求中明确地获取地获取,也可以,也可以从应用领域中获取从应用领域中获取;而;而成本成本和和维维护护准则准则由客户和供应商提出由客户和供应商提出。设计准则设计准则定定 义义可扩展性可扩展性向系统中添加功能或新类的困难程度向系统中添加功能或新类的困难程度可修改性可修改性更改系统功能的困难程度更改系统功能的困难程度可适应性可适应性将系统发送到不同应用领域的困难程度将系统发送到不同应用领域的困难程度可移植性可移植性将系统移植到不同平台的困难程度将系

6、统移植到不同平台的困难程度可读性可读性通过阅读源代码来理解系统的困难程度通过阅读源代码来理解系统的困难程度需求的可追踪性需求的可追踪性 将代码映射到特定需求上的困难程度将代码映射到特定需求上的困难程度软件工程软件工程7 7n在定义设计目标时,希望开发一个既安全可靠,在定义设计目标时,希望开发一个既安全可靠,又廉价的系统是不现实的,因此开发人员应当对又廉价的系统是不现实的,因此开发人员应当对所有可能的设计目标进行权衡,对必须的设计目所有可能的设计目标进行权衡,对必须的设计目标赋予优先级别。标赋予优先级别。n一旦有了清晰的设计目标,就可以开始系统的初一旦有了清晰的设计目标,就可以开始系统的初始分解

7、。始分解。权权 衡衡基基 本本 原原 则则空间与速度空间与速度如果软件的响应时间或吞吐量不满足需求,则如果软件的响应时间或吞吐量不满足需求,则可以使用更多的存储空间来加快软件的执行速可以使用更多的存储空间来加快软件的执行速度。如果软件太大,则可以牺牲一定的速度对度。如果软件太大,则可以牺牲一定的速度对数据进行压缩处理。数据进行压缩处理。软件工程软件工程8 8权权 衡衡基基 本本 原原 则则交付时间与交付时间与功能功能如果开发进度滞后于计划,则按时交付的功能如果开发进度滞后于计划,则按时交付的功能可以少于预定交付的功能,或推迟交付所有功可以少于预定交付的功能,或推迟交付所有功能。契约软件通常更强

8、调功能,而商业外购软能。契约软件通常更强调功能,而商业外购软件则更强调交付日期。件则更强调交付日期。交付时间与交付时间与质量质量如果测试滞后于计划,则可以按时交付带有错如果测试滞后于计划,则可以按时交付带有错误的软件,或推迟交付带有少量错误的软件。误的软件,或推迟交付带有少量错误的软件。交付时间与交付时间与人员配置人员配置如果开发进度滞后于计划,可以在项目中增加如果开发进度滞后于计划,可以在项目中增加资源以提高生产率。在多数情况下,这种选择资源以提高生产率。在多数情况下,这种选择只适用于早期项目。新的人员要经过培训方可只适用于早期项目。新的人员要经过培训方可使用。这样中途增加资源通常会降低生产

9、率,使用。这样中途增加资源通常会降低生产率,还会增加软件开发的成本。还会增加软件开发的成本。软件工程软件工程9 94.2 软件设计工程的任务软件设计工程的任务n软件设计工程的任务是基于需求分析的结果建立软件设计工程的任务是基于需求分析的结果建立各种设计模型,给出问题解决的方案。各种设计模型,给出问题解决的方案。n软件设计是将用户需求准确地转化成为最终的软软件设计是将用户需求准确地转化成为最终的软件产品的唯一途径,在需求到实现之间起到了桥件产品的唯一途径,在需求到实现之间起到了桥梁作用。梁作用。n在软件设计阶段,需要在多种设计方案之中进行在软件设计阶段,需要在多种设计方案之中进行决策和折中,并使

10、用选定的方案进行后续的开发决策和折中,并使用选定的方案进行后续的开发活动。设计决策将最终影响软件实现的成败,同活动。设计决策将最终影响软件实现的成败,同时也将影响到软件维护。时也将影响到软件维护。软件工程软件工程1010n软件设计既是过程又是模型。软件设计既是过程又是模型。n设计过程设计过程是一系列的迭代步骤,使设计人员能是一系列的迭代步骤,使设计人员能够描述目标系统的各个侧面。够描述目标系统的各个侧面。n设计模型设计模型首先描述目标系统的整体架构,然后首先描述目标系统的整体架构,然后逐步细化架构得到构造每个细节的指导原则,逐步细化架构得到构造每个细节的指导原则,从而得到系统的一系列不同的视图

11、。从而得到系统的一系列不同的视图。n软件设计是后续开发步骤及软件维护工作的基软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系础。如果没有设计,只能建立一个不稳定的系统结构。统结构。软件设计的概念软件设计的概念软件工程软件工程11 11n所谓的所谓的“不稳定不稳定”,是指每次修改,都会导致系,是指每次修改,都会导致系统结构整体的变更,不但费时费力,还会引入新统结构整体的变更,不但费时费力,还会引入新的错误,降低软件质量。的错误,降低软件质量。设计设计编码编码测试测试维护维护测试测试编码编码维护维护有软件设计有软件设计 没有软件设计没有软件设计软件工程软件工程121

12、2n从工程管理角度来看,软件设计分两步完成:从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计和详细设计。n概要设计概要设计是将软件的需求转化为数据结构和软件的是将软件的需求转化为数据结构和软件的系统结构;系统结构; 确定系统设计方案确定系统设计方案 将软件需求将软件需求转化为软件体系结构转化为软件体系结构 确定系统级接口确定系统级接口 全局数据结构或数据库模式。全局数据结构或数据库模式。n详细设计详细设计是软件结构表示的细化,得到软件的详细是软件结构表示的细化,得到软件的详细数据结构表达和具体算法描述。数据结构表达和具体算法描述。 过程设计即确立每个模块的实现算法过程设计即

13、确立每个模块的实现算法 数据设计即局部数据结构数据设计即局部数据结构 模块接口设计模块接口设计软件设计的阶段与任务软件设计的阶段与任务 软件工程软件工程1313n从技术的角度,采用的方法不同会有所不同:从技术的角度,采用的方法不同会有所不同:u传统的结构化方法将软件设计划分为传统的结构化方法将软件设计划分为体系结体系结构设计构设计、数据设计数据设计、接口设计接口设计及及过程设计过程设计四四部分;部分;u面向对象方法则将软件设计划分为面向对象方法则将软件设计划分为体系结构体系结构设计设计、类设计类设计数据设计数据设计、接口设计接口设计、构件构件级设计级设计四部分。四部分。 软件设计的阶段与任务软

14、件设计的阶段与任务 软件工程软件工程14141. 体系结构设计体系结构设计体系结构设计定义软件的主要结构元素及其之体系结构设计定义软件的主要结构元素及其之间的关系。体系结构设计表示可以从系统规格间的关系。体系结构设计表示可以从系统规格说明、分析模型(如对象类或数据流图)及体说明、分析模型(如对象类或数据流图)及体系结构的风格导出。系结构的风格导出。2. 类设计类设计类设计对分析阶段所建立的对象类模型进行细类设计对分析阶段所建立的对象类模型进行细化,转化为设计类的实现及软件实现所要求的化,转化为设计类的实现及软件实现所要求的数据结构。数据结构。3. 数据设计数据设计软件工程软件工程1515传统方

15、法主要根据需求阶段所建立的实体传统方法主要根据需求阶段所建立的实体-关关系图(系图(E-R图)来确定软件涉及的文件系统的图)来确定软件涉及的文件系统的结构及数据库的表结构。面向对象方法根据类结构及数据库的表结构。面向对象方法根据类设计导出数据设计。设计导出数据设计。4. 接口设计接口设计接口设计描述用户界面,软件和其他系统元素接口设计描述用户界面,软件和其他系统元素如硬件设备、其他软件系统及使用人员的外部如硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口。接口,以及各种构件之间的内部接口。5. 构件级设计构件级设计构件级设计将软件体系结构的结构元素变换为构件级设计将软件体

16、系结构的结构元素变换为对软件构件的过程性描述。从基于类的模型、对软件构件的过程性描述。从基于类的模型、软件工程软件工程1616数据流模型及行为模型获得的信息可以作为构数据流模型及行为模型获得的信息可以作为构件设计的基础。件设计的基础。6. 过程设计过程设计过程设计的主要工作是确定软件各个组成部分过程设计的主要工作是确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。表达形式来描述各种算法。n软件设计过程中所有基本技术活动的经典设计软件设计过程中所有基本技术活动的经典设计过程流程如图过程流程如图 软件设计的过程软件设计的过程

17、软件工程软件工程1717否否设计输入设计输入设计输入的评审设计输入的评审制定技术规范制定技术规范确定运行环境确定运行环境数据设计数据设计质量设计质量设计体系结构设计体系结构设计运行设计运行设计复用模块的选择与确定复用模块的选择与确定概要设计说明的编写与评审概要设计说明的编写与评审是否需要是否需要修改设计修改设计? ?实施设实施设计更改计更改是是否否详细设计详细设计是否需要是否需要修改设计修改设计?实施实施设计设计更改更改进入实现阶段进入实现阶段是是详细设计说明的编写与评审详细设计说明的编写与评审软件工程软件工程1818概要设计过程概要设计过程n选定体系结构n软件总体结构设计u按照结构化设计方法

18、把一个复杂的系统按功能划分模块,并确定每个模块的功能。u确定模块之间的调用关系。n确定系统的外部接口和内部接口n分析数据流图,弄清数据流图加工的过程,决定数据处理问题的类型(事务或变换)软件工程软件工程1919概要设计过程概要设计过程n对初始结构图进行改进完善n确定系统包含哪些应用服务系统、客户端、数据库管理系统;确定每个模块放在哪个应用服务器或客户端的哪个目录、哪个文件或是在数据库内建立的对象,落实体系结构。n进行主要的算法设计n进行异常处理设计n制定设计规范n编写概要设计说明书软件工程软件工程2020n良好的设计原则可为设计过程导航。良好的设计原则可为设计过程导航。1.设计应遵循设计应遵循

19、抽象化抽象化的原则,的原则,数据抽象数据抽象过程抽象过程抽象u过程抽象过程抽象 是指在软件设计中将处理过程是指在软件设计中将处理过程的实现细节隐藏在数据抽象中,可以直接的实现细节隐藏在数据抽象中,可以直接通过模块接口使用这些处理操作通过模块接口使用这些处理操作。u数据抽象数据抽象 是指采用抽象数据类型表示数是指采用抽象数据类型表示数据,实现数据封装,使得使用者可通过接据,实现数据封装,使得使用者可通过接口使用数据而不必关心数据结构的实现。口使用数据而不必关心数据结构的实现。创建良好设计的原则创建良好设计的原则 软件工程软件工程2121例例1:考虑适用于低级:考虑适用于低级CAD的图形软件包。的

20、图形软件包。n又抽象又抽象 该该CAD软件系统配有能与绘图员进行可视化通信软件系统配有能与绘图员进行可视化通信的图形界面,能用鼠标代替绘图工具,画各种直线和曲线;的图形界面,能用鼠标代替绘图工具,画各种直线和曲线;能完成所有几何计算以及所有截面视图和辅助视图的设计。能完成所有几何计算以及所有截面视图和辅助视图的设计。图形设计的结果存在图形文件中,图形文件可包含几何的、图形设计的结果存在图形文件中,图形文件可包含几何的、正文的和其他各种补充设计信息。正文的和其他各种补充设计信息。 显而易见,在这一抽象级别上,用问题域本身的术语来描述显而易见,在这一抽象级别上,用问题域本身的术语来描述问题的解。问

21、题的解。抽象与逐步求精抽象与逐步求精软件工程软件工程2222抽象抽象 CAD软件任务;软件任务; 用户界面子任务;用户界面子任务; 创建二维图形子任务;创建二维图形子任务; 显示图形子任务;显示图形子任务; 管理图形文件子任务;管理图形文件子任务; end CAD. 在这一抽象级别上,给出了组成在这一抽象级别上,给出了组成CAD软件任务的所软件任务的所有主要子任务,尽管术语已与问题域有所不同,但有主要子任务,尽管术语已与问题域有所不同,但仍然不是实现所用的语言。仍然不是实现所用的语言。抽象与逐步求精抽象与逐步求精软件工程软件工程2323抽象抽象(仅以(仅以“创建二维图形子任务创建二维图形子任务

22、”为例)为例) PROCEDURE 创建二维图形创建二维图形 REPEAT UNTIL DO WHILE 数字仪接口任务;数字仪接口任务; 判断作图请求:判断作图请求: 线:画线任务;线:画线任务; 圆:画圆任务;圆:画圆任务; END;抽象与逐步求精抽象与逐步求精软件工程软件工程2424 DO WHILE 键盘接口任务;键盘接口任务; 选择分析或计算:选择分析或计算: 辅助视图:辅助视图任务;辅助视图:辅助视图任务; 截面视图:截面视图任务;截面视图:截面视图任务; END; END REPEAT;END PROCEDURE.抽象与逐步求精抽象与逐步求精软件工程软件工程2525n在这一抽象级

23、别上,给出了初步的过程在这一抽象级别上,给出了初步的过程性表示,此时所有术语都是面向软件性表示,此时所有术语都是面向软件(比如采用(比如采用do while结构)并且模块结结构)并且模块结构也开始明朗。求精过程还可继续下去,构也开始明朗。求精过程还可继续下去,直至产生源代码。直至产生源代码。抽象与逐步求精抽象与逐步求精软件工程软件工程2626数据抽象与过程抽象一样,能使设计者按不同的详数据抽象与过程抽象一样,能使设计者按不同的详细程度表示数据对象。细程度表示数据对象。仍以仍以CAD软件为例,我们可定义一个称为软件为例,我们可定义一个称为drawing(图)的数据对象:(图)的数据对象:TYPE

24、 drawing IS STRUCTURE DEFINED number IS STRING LENGTH(12); geometry DEFINED notes IS STRING LENGTH(256); bom DEFINEDEND drawing TYPE;数据抽象数据抽象软件工程软件工程2727数据抽象数据抽象在此,在此,drawing被表示为一种结构,其各个组成部被表示为一种结构,其各个组成部件本身又可为某种数据抽象,比如件本身又可为某种数据抽象,比如geometry(几何(几何图形)和图形)和bom。一旦抽象数据类型一旦抽象数据类型drawing定义完毕,即可用类型定义完毕,即可

25、用类型名直接说明数据对象,而不必涉及其内部构造的细名直接说明数据对象,而不必涉及其内部构造的细节,例如,可用语句节,例如,可用语句: blueprint IS INSTANCE OF drawing; 或或 schematic IS INSTANCE OF drawing; 说明说明blueprint和和schematic具有具有drawing的一切特性。的一切特性。blueprint蓝图,蓝图,schematic简(略)图。简(略)图。软件工程软件工程2828数据抽象数据抽象在抽象数据类型的定义中可以附加一组操作在抽象数据类型的定义中可以附加一组操作的定义,用以确定在此类数据对象上可进行的定

26、义,用以确定在此类数据对象上可进行的操作。以抽象数据类型的操作。以抽象数据类型drawing为例,可以为例,可以定义擦除(定义擦除(erase)、存储()、存储(save)、分类)、分类(catalog)和拷贝()和拷贝(copy)等操作。)等操作。许多程序设计语言都提供了对抽象数据类型许多程序设计语言都提供了对抽象数据类型的支持,的支持,Ada 的程序包机制是对数据抽象和的程序包机制是对数据抽象和过程抽象的双重支持过程抽象的双重支持 软件工程软件工程29292.设计应当遵循设计应当遵循模块化模块化的原则的原则。u每个模块可独立地开发、测试,最后组装成每个模块可独立地开发、测试,最后组装成完整

27、的程序。完整的程序。u其出发点是本着将一种复杂问题其出发点是本着将一种复杂问题“分而治之分而治之”的原则。其目的是使程序的结构清晰,容易的原则。其目的是使程序的结构清晰,容易阅读、理解、测试、修改。阅读、理解、测试、修改。uMeyer的的良好模块设计方法的标准良好模块设计方法的标准a) 模块可分解性模块可分解性 可将系统按问题子问题可将系统按问题子问题分解的原则分解成系统的模块层次结构分解的原则分解成系统的模块层次结构;b) 模块可组装性模块可组装性 可利用已有的设计构件组可利用已有的设计构件组装成新系统,不必一切从头开始。装成新系统,不必一切从头开始。软件工程软件工程3030c) 模块可理解

28、性模块可理解性 一个模块可不参考其他模一个模块可不参考其他模块而被理解;块而被理解;d) 模块连续性模块连续性 对软件需求的一些微小变更对软件需求的一些微小变更只导致对某个模块的修改而整个系统不只导致对某个模块的修改而整个系统不用大动用大动;e) 模块保护模块保护 将模块内出现异常情况的影响将模块内出现异常情况的影响范围限制在模块内部;范围限制在模块内部;3.设计应遵循设计应遵循信息隐蔽信息隐蔽的原则的原则。uParnas主张在开发时,将每个程序的成分主张在开发时,将每个程序的成分隐藏在模块内,定义每一个模块时尽可能隐藏在模块内,定义每一个模块时尽可能少地显露其内部的处理。少地显露其内部的处理

29、。软件工程软件工程3131u每个模块的实现细节对于其它模块是隐蔽的,每个模块的实现细节对于其它模块是隐蔽的,将来修改软件时偶然引入错误所造成的影响将来修改软件时偶然引入错误所造成的影响就可以局限在一个或几个模块内部,不致波就可以局限在一个或几个模块内部,不致波及到软件的其它部分。及到软件的其它部分。u在可预见将来可能修改的场合,信息隐蔽可在可预见将来可能修改的场合,信息隐蔽可以提高软件的可修改性、可测试性和可移植以提高软件的可修改性、可测试性和可移植性。性。模块模块(求一元二次(求一元二次方程的根)方程的根)a,b,c根根计算一元二次方程根的所有软件元素计算一元二次方程根的所有软件元素(如局部

30、变量,计算公式等)(如局部变量,计算公式等)局部化局部化软件工程软件工程32324.模块独立性模块独立性u如果一个模块能够独立于其他模块被编程、测试和如果一个模块能够独立于其他模块被编程、测试和修改,则该模块具有模块独立性。它是抽象、模块修改,则该模块具有模块独立性。它是抽象、模块化和信息隐蔽的直接产物。化和信息隐蔽的直接产物。u1978年年Myers提出用两个准则来度量功能独立性,提出用两个准则来度量功能独立性,即模块间的耦合和模块的内聚。即模块间的耦合和模块的内聚。u内聚性内聚性:内聚是一个模块内部各个元素彼此结合的:内聚是一个模块内部各个元素彼此结合的紧密程度的度量。紧密程度的度量。u耦

31、合性耦合性: 耦合是模块间互相连接的紧密程度的度量,耦合是模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂度、调用方式以它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。及哪些信息通过接口。u模块之间的耦合性越高,其模块独立性就越弱。模模块之间的耦合性越高,其模块独立性就越弱。模块的内聚性越高,它与其他模块之间的耦合性就会块的内聚性越高,它与其他模块之间的耦合性就会降低,而模块独立性就越强。降低,而模块独立性就越强。 软件工程软件工程33335.尽可能尽可能增加内聚增加内聚u不同内聚类型:内聚性从高到低排序不同内聚类型:内聚性从高到低排序功能内聚功能内聚 层内聚层内

32、聚 通信内聚通信内聚 顺序内聚顺序内聚 过程内聚过程内聚 时间内聚时间内聚 实用程序内聚实用程序内聚高高 内聚性内聚性 低低强强 模块独立性模块独立性 弱弱软件工程软件工程34345.尽可能尽可能增加内聚增加内聚(1) 功能内聚功能内聚 u 一个模块中各个部分都是为了完成一项具一个模块中各个部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割体功能而协同工作,紧密联系,不可分割的。这种模块就是功能内聚模块。功能内的。这种模块就是功能内聚模块。功能内聚模块的模块独立性最强。聚模块的模块独立性最强。u 功能内聚的内聚度最高,概要设计中要追功能内聚的内聚度最高,概要设计中要追求的目标。求的目标

33、。u 满足功能内聚的模块只执行一个功能,这满足功能内聚的模块只执行一个功能,这是一个判断模块是否是功能内聚的方法。是一个判断模块是否是功能内聚的方法。软件工程软件工程3535(2) 层内聚层内聚相关服务放在一起,并有严格的层次结构,高相关服务放在一起,并有严格的层次结构,高层服务可访问低层服务,反之不可。如分层结层服务可访问低层服务,反之不可。如分层结构。构。用户界面用户界面访问操作系统访问操作系统访问数据库访问数据库网络通信网络通信应用逻辑应用逻辑应用程序的典型层次应用程序的典型层次内核内核(处理过程和交换处理过程和交换)屏幕显示功能屏幕显示功能用户帐号管理用户帐号管理文件系统文件系统应用程

34、序应用程序操作系统的典型层次操作系统的典型层次软件工程软件工程3636(3) 通信内聚通信内聚访问或操作同一数据的过程放在一个类中,这访问或操作同一数据的过程放在一个类中,这些过程可以互相通信。如某个类设计。些过程可以互相通信。如某个类设计。初始化初始化插入插入删除删除查找查找修改修改符符 号号 表表软件工程软件工程3737通信内聚通信内聚打印报告A打印报告C打印报告B计算A计算B保存通信内聚例子n如果一个模块内各组成部分的处理动作都使用相如果一个模块内各组成部分的处理动作都使用相同的输入数据或相同的输出数据,称为通讯聚合。同的输入数据或相同的输出数据,称为通讯聚合。软件工程软件工程3838案

35、例:通信内聚案例:通信内聚获得配件单获得配件单价和库存量价和库存量配件编号配件编号库存量库存量单价单价两个工作:两个工作:1.按配件编号查询按配件编号查询“数数据存储据存储”,获得单价。,获得单价。2.按配件编号查询按配件编号查询“数数据存储据存储”,获得库存量。,获得库存量。这两个处理动作都使用相同的输入数据,称为通讯聚合。这两个处理动作都使用相同的输入数据,称为通讯聚合。软件工程软件工程3939(4) 顺序内聚顺序内聚:存在一系列过程,其中一个过程向:存在一系列过程,其中一个过程向另一个过程提供输入,这些过程放在一起,形另一个过程提供输入,这些过程放在一起,形成顺序内聚。如面向对象系统中的

36、消息序列。成顺序内聚。如面向对象系统中的消息序列。(5) 过程内聚过程内聚:几个一次调用的操作放在一个模块:几个一次调用的操作放在一个模块中,它们是相关的且必须以特定次序执行,则中,它们是相关的且必须以特定次序执行,则称这个模块为过程内聚模块。但在这种模块内,称这个模块为过程内聚模块。但在这种模块内,一个操作的输出不一定是下一个操作的输入。一个操作的输出不一定是下一个操作的输入。如调用结构。如调用结构。软件工程软件工程4040循环体循环体计算累积计算累积事务记录事务记录累积销售额累积销售额累积订货量累积订货量通过循环体,计算通过循环体,计算两种累积数。两种累积数。写一个记录写一个记录读一个记录

37、读一个记录判定判定调用模块调用模块被调用被调用模块模块软件工程软件工程4141(6) 时间内聚时间内聚:程序执行过程中同一阶段内完成的:程序执行过程中同一阶段内完成的操作放在一起,达到时间内聚。操作放在一起,达到时间内聚。例如:程序设例如:程序设计中的初始化模块计中的初始化模块(7) 实用程序内聚实用程序内聚:逻辑上不能纳入其他内聚类型:逻辑上不能纳入其他内聚类型的相关实用程序放在一起,形成实用程序内聚。的相关实用程序放在一起,形成实用程序内聚。如可复用的过程或类。如可复用的过程或类。软件工程软件工程4242功能内聚功能内聚n功能内聚功能内聚如果一个模块的各个成分都是完成某个具体任如果一个模块

38、的各个成分都是完成某个具体任务必不可少的成分,这些成分协同工作,紧密务必不可少的成分,这些成分协同工作,紧密联系,不可分割,则称为功能内聚。联系,不可分割,则称为功能内聚。功能内聚的内聚度最高,概要设计中要追求的功能内聚的内聚度最高,概要设计中要追求的目标。目标。满足功能内聚的模块只执行一个功能,这是一满足功能内聚的模块只执行一个功能,这是一个判断模块是否是功能内聚的方法。个判断模块是否是功能内聚的方法。 软件工程软件工程4343模块内聚模块内聚巧合巧合 逻辑逻辑 时间时间 过程过程 通信通信 顺序顺序 功能功能内聚内聚 内聚内聚 内聚内聚 内聚内聚 内聚内聚 内聚内聚 内聚内聚软件工程软件工

39、程4444该模块只能完成一个模块吗模块内各组成部分的关系如何次序重要吗次序重要吗逻辑相似吗功能内聚过程内聚通信内聚顺序内聚时间内聚逻辑内聚偶然内聚否是数据流控制流两者都不是是是是否否否软件工程软件工程45456.尽可能尽可能降低耦合降低耦合主程序主程序子程序子程序1子程序子程序2模块之间无连接,则无耦合模块之间无连接,则无耦合主程序主程序子程序子程序1子程序子程序2模块之间存在连接,则存在耦合模块之间存在连接,则存在耦合耦合耦合是是模块之间的互连程度度量模块之间的互连程度度量模块之间的连接有:调用,返回,进入,跳出模块之间的连接有:调用,返回,进入,跳出软件工程软件工程46466.尽可能尽可能

40、降低耦合降低耦合u模块间存在相互依赖关系即为耦合。不同模块间存在相互依赖关系即为耦合。不同耦合类型按照耦合性从高向低排列有:耦合类型按照耦合性从高向低排列有:(1) 内容耦合内容耦合如果发生下列情形,模块间就是内容耦合如果发生下列情形,模块间就是内容耦合: 一个模块直接访问另一个模块的内部数一个模块直接访问另一个模块的内部数据据;紧密紧密 耦合性耦合性 松散松散弱弱 模块独立性模块独立性 强强内容内容 公共公共 控制控制 标记标记 数据数据 例程调例程调 类型使类型使 外部外部耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合 用耦合用耦合 用耦合用耦合 耦合耦合软件工程软件工程4747 一个模

41、块不通过正常入口转到另一模块一个模块不通过正常入口转到另一模块内部内部; 两个模块有一部分程序代码重迭(只可两个模块有一部分程序代码重迭(只可能出现在汇编语言中)能出现在汇编语言中);内容耦合始终要避免它。内容耦合始终要避免它。AB进入另一模块内部进入另一模块内部模块代码重叠模块代码重叠AB软件工程软件工程4848(2)公共耦合公共耦合若一组模块都访问同一个公共数据环境,则它们之间若一组模块都访问同一个公共数据环境,则它们之间的耦合就是公共耦合。公共数据环境可以是全局的耦合就是公共耦合。公共数据环境可以是全局变量、全局数据结构、共享的通信区、内存的公变量、全局数据结构、共享的通信区、内存的公共

42、覆盖区等。这种耦合会引起下列问题:共覆盖区等。这种耦合会引起下列问题:所有公共耦合模块都与某一个公共数据环境内所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若某个数据的大小被部各项的物理安排有关,若某个数据的大小被修改,将会影响到所有的模块。修改,将会影响到所有的模块。无法控制各个模块对公共数据的存取,严重影无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。响软件模块的可靠性和适应性。软件工程软件工程4949 公共数据名的使用,明显降低了程序的公共数据名的使用,明显降低了程序的可读性。可读性。u公共耦合的复杂程度随耦合模块的个数增公共耦合的复杂程度随耦合模块的

43、个数增加而显著增加。若只是两模块间有公共数加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。共耦合和紧密公共耦合。common公共数据区公共数据区ABcommon公共数据区公共数据区AB松散的公共耦合松散的公共耦合紧密的公共耦合紧密的公共耦合软件工程软件工程5050(3) 控制耦合控制耦合一个过程通过标志、开关或命令显式地控一个过程通过标志、开关或命令显式地控制另一个过程制另一个过程的动作,就产的动作,就产生控制耦合。生控制耦合。FlagFlagf1f2fn软件工程软件工程A A计算平均分计算平均分或最高分或最高分

44、B B平均平均/ /最高最高( (控制信号控制信号) )成绩成绩读入分数读入分数输出结果输出结果计算平均分计算平均分计算最高分计算最高分平均平均/ /最高最高? ?B B软件工程软件工程n控制耦合增加了理解和编程的复杂性,调用控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了模块必须知道被调模块的内部逻辑,增加了相互依赖相互依赖n去除模块间控制耦合的方法:去除模块间控制耦合的方法:(1)(1)找出模块调用时所用的一个或多个控制找出模块调用时所用的一个或多个控制变量。变量。( (2 2) )在被调用模块中根据控制变量找出所有在被调用模块中根据控制变量找出所有的流程。的流

45、程。( (5 5) )将每一个流程分解为一个独立的模块。将每一个流程分解为一个独立的模块。( (4 4) )将被调用模块内的判定上移到调用模块将被调用模块内的判定上移到调用模块中进行中进行软件工程软件工程5353(4) 标记耦合标记耦合u如果一组模块通过参数表传递结构或对如果一组模块通过参数表传递结构或对象(注意,不是简单变量或结构中的某象(注意,不是简单变量或结构中的某一分量),就是标记耦合。一分量),就是标记耦合。u事实上,这组模块共享了这个结构或对事实上,这组模块共享了这个结构或对象。这要求这些模块都必须清楚该结构象。这要求这些模块都必须清楚该结构或对象的内部细节,并按结构要求对此或对象

46、的内部细节,并按结构要求对此结构或对象进行操作。结构或对象进行操作。 p0 (x0, y0) p1 (x1, y1)画线段函数画线段函数 LINE ( p0, p1) 即为标记耦合即为标记耦合软件工程软件工程5454标记耦合标记耦合计算水费和电费计算水费和电费计算水费计算水费计算电费计算电费住户详情住户详情水费水费住户详情住户详情电费电费模块之间的特征联结模块之间的特征联结软件工程软件工程5555(5) 数据耦合数据耦合u如果模块之间的访问是通过数据参数如果模块之间的访问是通过数据参数(不是控制参数、结构或对象参数、公(不是控制参数、结构或对象参数、公共数据结构)来交换输入、输出信息的,共数据

47、结构)来交换输入、输出信息的,则称这种耦合为数据耦合。则称这种耦合为数据耦合。u由于限制了只通过参数表传递数据,数由于限制了只通过参数表传递数据,数据耦合是松散的耦合,模块之间的独立据耦合是松散的耦合,模块之间的独立性比较强性比较强数据耦合数据耦合 LINE ( x0, y0, x1, y1)p0 (x0, y0) p1 (x1, y1)软件工程软件工程5656数据耦合数据耦合开发货单开发货单计算金额计算金额单价单价数量数量金额金额软件工程软件工程5757特征特征耦合与数据耦合的相互转换耦合与数据耦合的相互转换计算水费和电费计算水费和电费计算水费计算水费计算电费计算电费本月用水量本月用水量水费

48、水费本月用电量本月用电量电费电费模块之间的特征联结模块之间的特征联结软件工程软件工程改控制耦合为数据耦合举例改控制耦合为数据耦合举例A A计算平均分计算平均分B1B1平均成绩最高成绩计算最高分计算最高分B2B2软件工程软件工程5959(6) 例程调用耦合例程调用耦合u一个程序(或对象的操作)调用另一个一个程序(或对象的操作)调用另一个程序(或另一个对象的操作),就产生程序(或另一个对象的操作),就产生例程调用耦合。例程调用耦合。u如果几个程序之间出现例程调用耦合,如果几个程序之间出现例程调用耦合,就意味着它们必须依赖对方的行为,而就意味着它们必须依赖对方的行为,而且调用者依赖被调用者的接口。且

49、调用者依赖被调用者的接口。u在所有的系统中都存在这种类型的耦合。在所有的系统中都存在这种类型的耦合。(7) 类型使用耦合类型使用耦合u类将实例变量或本地变量声明为另一个类将实例变量或本地变量声明为另一个类的实例,就产生类型(嵌套)耦合。类的实例,就产生类型(嵌套)耦合。软件工程软件工程6060u典型的事例如在定义一个典型的事例如在定义一个“几何图形几何图形”类时用到了类时用到了“点点”类的实例。类型使用类的实例。类型使用耦合的问题是:当类型定义改变时,该耦合的问题是:当类型定义改变时,该类型的使用者也必须改变。类型的使用者也必须改变。 (8) 包含包含/引入耦合引入耦合u一个构件引入(一个构件

50、引入(import)一个包时就产)一个包时就产生引入耦合,一个构件包含(生引入耦合,一个构件包含(include)另一个构件时,就产生包含耦合。另一个构件时,就产生包含耦合。u包含包含引入耦合是必需的,因为它允许你引入耦合是必需的,因为它允许你使用库或其他子系统的功能。但要注意使用库或其他子系统的功能。但要注意可能的副作用。例如操作同名。可能的副作用。例如操作同名。 软件工程软件工程6161(9) 外部耦合外部耦合模块对外部系统,如操作系统、共享库或模块对外部系统,如操作系统、共享库或硬件有依赖关系时就产生外部耦合。可通硬件有依赖关系时就产生外部耦合。可通过信息隐蔽减少这种依赖关系。过信息隐蔽

51、减少这种依赖关系。u实际上,两个模块之间的耦合不只是一种实际上,两个模块之间的耦合不只是一种类型,而是多种类型的混合。这就要求设类型,而是多种类型的混合。这就要求设计者按照降低耦合性的原则进行比较和分计者按照降低耦合性的原则进行比较和分析,逐步加以改进。析,逐步加以改进。 7.尽可能提高抽象层次尽可能提高抽象层次u设计应隐藏或推迟考虑细节以降低复杂性。设计应隐藏或推迟考虑细节以降低复杂性。软件工程软件工程6262 类是包含过程抽象的数据抽象。类是包含过程抽象的数据抽象。 使用泛化关系(父类)和接口,可进一步使用泛化关系(父类)和接口,可进一步提高抽象层次。提高抽象层次。 类中公有操作越少,抽象

52、程度越高。类中公有操作越少,抽象程度越高。 类中所有变量都是私有的,抽象程度达到类中所有变量都是私有的,抽象程度达到最高。最高。u抽象可确保在设计时不必关心不必要的细节,抽象可确保在设计时不必关心不必要的细节,能把握问题的本质并做出重要决策。能把握问题的本质并做出重要决策。8.8.尽可能提高可复用性尽可能提高可复用性u复用性设计有两方面的含义:复用性设计有两方面的含义:软件工程软件工程6363 尽量使用已有的构件(包括开发环境提尽量使用已有的构件(包括开发环境提供的及以往开发类似系统时创建的);供的及以往开发类似系统时创建的); 在设计时就应该考虑将来的重复利用问在设计时就应该考虑将来的重复利

53、用问题,有意识地按照可复用构件的要求建题,有意识地按照可复用构件的要求建立自己的设计。立自己的设计。u复用构件的机制包括复用构件的机制包括过程调用过程调用和和继承父类继承父类。u在软件设计中引入复用性的方法有:在软件设计中引入复用性的方法有: 使设计尽可能通用(数据类型参数化,使设计尽可能通用(数据类型参数化,所有数据自包含);所有数据自包含); 提高构件的独立性和抽象性(提高内聚、提高构件的独立性和抽象性(提高内聚、降低耦合、提高抽象性);降低耦合、提高抽象性);软件工程软件工程6464 设计系统时要包含钩子(建立一些表格设计系统时要包含钩子(建立一些表格或链接,用以纳入新的功能);或链接,

54、用以纳入新的功能); 尽量简化设计(只做简单事情,易于与尽量简化设计(只做简单事情,易于与其他构件配合,输入其他构件配合,输入输出单一);输出单一); u可以在算法、类、过程、框架和完整应用可以在算法、类、过程、框架和完整应用程序的级别上创建可复用性。程序的级别上创建可复用性。9.灵活性设计灵活性设计u积极预测将来可能在实现和功能方面的变积极预测将来可能在实现和功能方面的变化,并化,并采取相应措施。采取相应措施。u在设计中引入灵活性的方法有:在设计中引入灵活性的方法有: 降低耦合并提高内聚(提高替换能力)降低耦合并提高内聚(提高替换能力)软件工程软件工程6565 建立抽象(创建有多态操作的接口

55、和父类)建立抽象(创建有多态操作的接口和父类) 不要将代码写死(消除代码中的常数)不要将代码写死(消除代码中的常数) 抛出异常(由操作的调用者处理异常)抛出异常(由操作的调用者处理异常) 使用并创建可复用的代码使用并创建可复用的代码10. 预防过期预防过期u积极预测将来可能在技术和运行环境上的变积极预测将来可能在技术和运行环境上的变化,并为此采取相应措施。化,并为此采取相应措施。u在设计中应遵循的预计过期的规则有:在设计中应遵循的预计过期的规则有: 避免使用早期发布的技术避免使用早期发布的技术 避免使用针对特定环境的软件库避免使用针对特定环境的软件库软件工程软件工程6666 避免使用软件库中未

56、编档的或很少使用的避免使用软件库中未编档的或很少使用的功能功能 避免使用小公司或可能不提供长期支持的避免使用小公司或可能不提供长期支持的公司提供的可复用构件或特殊硬件公司提供的可复用构件或特殊硬件 使用众多厂商支持的标准语言和技术使用众多厂商支持的标准语言和技术11. 可移植性设计可移植性设计u可移植性设计的主要目标是让软件在尽可能可移植性设计的主要目标是让软件在尽可能多的平台上运行。多的平台上运行。u实现可移植性的规则有:实现可移植性的规则有: 避免使用特定环境的专有功能避免使用特定环境的专有功能软件工程软件工程6767 使用不依赖特定平台的程序设计语言使用不依赖特定平台的程序设计语言 小心

57、使用可能依赖某一平台的类库小心使用可能依赖某一平台的类库 了解其他语言可能依赖特殊硬件结构的功了解其他语言可能依赖特殊硬件结构的功能和文本文件的差异能和文本文件的差异12. 可测试性设计可测试性设计u设计时采取措施使得测试易于进行。设计时采取措施使得测试易于进行。u可测试性设计的最重要的方法是保证代码的可测试性设计的最重要的方法是保证代码的所有功能都能脱离图形用户界面执行。所有功能都能脱离图形用户界面执行。u需要考虑的可测试性设计的规则如下:需要考虑的可测试性设计的规则如下: 坚持测试驱动设计(测试先行)的方法。坚持测试驱动设计(测试先行)的方法。软件工程软件工程6868 函数小型化。尽量做到

58、一个函数对应一个函数小型化。尽量做到一个函数对应一个操作,使函数小型化。操作,使函数小型化。 数据的显示与控制分离。将处理代码与数据的显示与控制分离。将处理代码与 GUI分离。这样,各种分离。这样,各种GUI 动作就变成了动作就变成了模型上的简单方法调用。模型上的简单方法调用。13. 防御性设计防御性设计u为提高可靠性,应确保不引入任何缺陷,能为提高可靠性,应确保不引入任何缺陷,能够处理其他代码不适当使用构件引起的问题。够处理其他代码不适当使用构件引起的问题。u按契约设计是防御性设计技术,其核心思想:按契约设计是防御性设计技术,其核心思想: 被调用操作中设置为正常执行必须满足的被调用操作中设置

59、为正常执行必须满足的前置条件前置条件(precondition):软件工程软件工程6969 被调用操作正常执行所得到的结果即为被调用操作正常执行所得到的结果即为后置条件后置条件 (postcondition):要求被调用:要求被调用操作在返回前有责任保证这些后置条件操作在返回前有责任保证这些后置条件成立。成立。 被调用操作在执行时确保不会被修改的被调用操作在执行时确保不会被修改的不变量不变量(invariant)。u前置条件、后置条件和不变式都是布尔表前置条件、后置条件和不变式都是布尔表达式,其计算结果为假,表示有错误发生。达式,其计算结果为假,表示有错误发生。u可以使用断言机制。在重要构件的

60、边界可以使用断言机制。在重要构件的边界(如层)应始终保留严格的断言检测。(如层)应始终保留严格的断言检测。 软件工程软件工程7070n结构化设计(结构化设计(structured design,SD)是)是一种面向数据流的设计方法,它可以与一种面向数据流的设计方法,它可以与SA方法衔接。方法衔接。n结构化设计是基于模块化、自顶向下细结构化设计是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基化、结构化程序设计等程序设计技术基础上发展起来的。基本思想是将系统设础上发展起来的。基本思想是将系统设计成由相对独立、功能单一的模块组成计成由相对独立、功能单一的模块组成的结构。的结构。4.4 传统

温馨提示

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

最新文档

评论

0/150

提交评论