理解软件设计过程抽象与逐步求精课件

上传人:痛*** 文档编号:241593809 上传时间:2024-07-07 格式:PPT 页数:79 大小:338.27KB
返回 下载 相关 举报
理解软件设计过程抽象与逐步求精课件_第1页
第1页 / 共79页
理解软件设计过程抽象与逐步求精课件_第2页
第2页 / 共79页
理解软件设计过程抽象与逐步求精课件_第3页
第3页 / 共79页
点击查看更多>>
资源描述
软软 件件 工工 程程教学目的:理解软件设计过程、抽象与逐步求精、教学目的:理解软件设计过程、抽象与逐步求精、模块化与信息隐藏等概念。模块化与信息隐藏等概念。教学重点:几个软件设计的基本概念。教学重点:几个软件设计的基本概念。教学难点:教学难点:模块划分与软件损耗的关系。模块划分与软件损耗的关系。教教 具:多媒体教室、电子教案具:多媒体教室、电子教案作作 业:业:第第8章章 软件设计基础软件设计基础教学目的:理解软件设计过程、抽象与逐步求精、第8章 软件设 软软 件件 工工 程程第第8 8章章软件设计基础软件设计基础软软件件设设计计阶阶段段的的工工作作是是以以需需求求分分析析阶阶段段的的成成果果为为前前提提和和基基础础的的,即即经经过过系系统统分分析析小小组组签签字字认认可可的的需需求求规规格格说说明明书书及及有有关关技技术术文文档档。经经过过软软件件工工程程师师们们多多年年的的努努力力,一一些些软软件件设设计计技技术术、质质量量评评估估标标准准和和设设计计表表示示法法逐逐步步形形成成并并用用于于软软件工程实践。件工程实践。软件设计是软件工程的重要阶段。软件设计过软件设计是软件工程的重要阶段。软件设计过程是对程是对程序结构、数据结构和过程细节程序结构、数据结构和过程细节逐步求逐步求精、复审并编制文档的过程,本章讨论与软件精、复审并编制文档的过程,本章讨论与软件设计有关的主要概念。设计有关的主要概念。第8章软件设计基础软件设计阶段的工作是以需求分析阶段的成果 软软 件件 工工 程程8.1 8.1 软件设计基本概念软件设计基本概念 8.1.1 8.1.1 软件设计过程软件设计过程一般认为,软件开发阶段由一般认为,软件开发阶段由设计、编码和测试设计、编码和测试三个基本活动组成,其中三个基本活动组成,其中“设计设计”活动是获取活动是获取高质量、低耗费、易维护软件的一个最重要环高质量、低耗费、易维护软件的一个最重要环节。节。需求分析阶段获得的需求规格说明书包括对将需求分析阶段获得的需求规格说明书包括对将要实现的系统在信息、功能和行为等各个方面要实现的系统在信息、功能和行为等各个方面的描述,这是软件设计的基础。对此不论采用的描述,这是软件设计的基础。对此不论采用何种软件设计方法都将产生何种软件设计方法都将产生:系统的总体结构设计(系统的总体结构设计(architectural design););系统的数据设计(系统的数据设计(data design););系统的过程设计(系统的过程设计(procedural design)。)。8.1 软件设计基本概念 8.1.1 软件设计过程一般 软软 件件 工工 程程8.1.1 8.1.1 软件设计过程软件设计过程图图8-1-1 开发阶段的信息流开发阶段的信息流功能描述功能描述行为描述行为描述其他需求其他需求程序程序模块模块总体结构设计总体结构设计设计设计编码编码信息描述信息描述过程设计过程设计数据设计数据设计集集成成并并确确认认的软件的软件测试测试8.1.1 软件设计过程图8-1-1 开发阶段的信息流功 软软 件件 工工 程程8.1.1 8.1.1 软件设计过程软件设计过程软件设计也可看作将需求规格说明逐步转换为软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。软件源代码的过程。从工程管理的角度软件设计可分为概要从工程管理的角度软件设计可分为概要(preliminary)设计和详细()设计和详细(detail)设计两)设计两大步骤。大步骤。概要设计概要设计是根据需求确定软件和数据的总体框是根据需求确定软件和数据的总体框架,架,详细设计详细设计是将其进一步精化成软件的算法是将其进一步精化成软件的算法表示和数据结构。表示和数据结构。而在技术上,概要设计和详细设计又由若干活而在技术上,概要设计和详细设计又由若干活动组成,除总体结构设计、数据结构设计和过动组成,除总体结构设计、数据结构设计和过程设计外,许多现代应用软件,还包括一个独程设计外,许多现代应用软件,还包括一个独立的界面设计活动。立的界面设计活动。8.1.1 软件设计过程软件设计也可看作将需求规格说明逐步 软软 件件 工工 程程8.1.2 抽象与逐步求精抽象与逐步求精抽象抽象是控制复杂性的基本策略。是控制复杂性的基本策略。“抽象抽象”要求要求人们将注意力集中在某一层次上考虑问题,而人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节。忽略那些低层次的细节。软件设计过程应当是在软件设计过程应当是在不同抽象级别上不同抽象级别上考虑和考虑和处理问题的过程。最初,应在最高抽象级别上,处理问题的过程。最初,应在最高抽象级别上,用面向问题域的语言叙述用面向问题域的语言叙述“问题问题”,概括,概括“问问题解题解”的形式,而后不断地具体化,不断地用的形式,而后不断地具体化,不断地用面向过程的语言描述问题,最后,在最低的抽面向过程的语言描述问题,最后,在最低的抽象级别上给出可直接实现的象级别上给出可直接实现的“问题解问题解”,即程,即程序。序。8.1.2 抽象与逐步求精抽象是控制复杂性的基本策略。“抽 软软 件件 工工 程程8.1.2 8.1.2 抽象与逐步求精抽象与逐步求精软件工程过程的每一步都是对较高一级抽象的解作一次进一软件工程过程的每一步都是对较高一级抽象的解作一次进一步具体化的描述。步具体化的描述。v在系统定义阶段,软件系统被描述为基于计算机的大系统的在系统定义阶段,软件系统被描述为基于计算机的大系统的一个组成部分;一个组成部分;v在软件规划和需求分析阶段,软件用问题域约定的习惯用语在软件规划和需求分析阶段,软件用问题域约定的习惯用语表达;表达;v从概要设计过渡到详细设计时,抽象级再一次降低;从概要设计过渡到详细设计时,抽象级再一次降低;v编码完成后达到了抽象的最低级。编码完成后达到了抽象的最低级。在上述由高级抽象到低级抽象的转换过程中,伴随着一连串在上述由高级抽象到低级抽象的转换过程中,伴随着一连串的过程抽象和数据抽象。的过程抽象和数据抽象。v过程抽象把完成一个特定功能的动作序列抽象为一个过程名过程抽象把完成一个特定功能的动作序列抽象为一个过程名和参数表;和参数表;v数据抽象把一个数据对象的定义(或描述)抽象为一个数据数据抽象把一个数据对象的定义(或描述)抽象为一个数据类型名。类型名。8.1.2 抽象与逐步求精软件工程过程的每一步都是对较高一 软软 件件 工工 程程【例【例8.1】考虑适用于低级】考虑适用于低级CAD的图形软件包的图形软件包抽象抽象 该该CAD软件系统配有能与绘图员进行可软件系统配有能与绘图员进行可视化通信的图形界面,能用鼠标代替绘图工具,视化通信的图形界面,能用鼠标代替绘图工具,画各种直线和曲线;能完成所有几何计算以及画各种直线和曲线;能完成所有几何计算以及所有截面视图和辅助视图的设计。图形设计的所有截面视图和辅助视图的设计。图形设计的结果存在图形文件中,图形文件可包含几何的、结果存在图形文件中,图形文件可包含几何的、正文的和其他各种补充设计信息。正文的和其他各种补充设计信息。显而易见,在这一抽象级别上,用问题域本身显而易见,在这一抽象级别上,用问题域本身的术语来描述问题的解。的术语来描述问题的解。【例8.1】考虑适用于低级CAD的图形软件包抽象 该CA 软软 件件 工工 程程【例【例8.1】考虑适用于低级】考虑适用于低级CAD的图形软件包的图形软件包抽象抽象 CAD软件任务;软件任务;用户界面子任务;用户界面子任务;创建二维图形子任务;创建二维图形子任务;显示图形子任务;显示图形子任务;管理图形文件子任务;管理图形文件子任务;end CAD.在在这这一一抽抽象象级级别别上上,给给出出了了组组成成CAD软软件件任任务务的的所所有有主主要要子子任任务务,尽尽管管术术语语已已与与问问题题域域有有所所不同,但仍然不是实现所用的语言。不同,但仍然不是实现所用的语言。【例8.1】考虑适用于低级CAD的图形软件包抽象 软软 件件 工工 程程【例【例8.1】考虑适用于低级】考虑适用于低级CAD的图形软件包的图形软件包抽象抽象(仅以(仅以“创建二维图形子任务创建二维图形子任务”为例)为例)PROCEDURE 创建二维图形创建二维图形 REPEAT UNTIL DO WHILE 数字仪接口任务;数字仪接口任务;判断作图请求:判断作图请求:线:画线任务;线:画线任务;圆:画圆任务;圆:画圆任务;END;【例8.1】考虑适用于低级CAD的图形软件包抽象(仅以“创 软软 件件 工工 程程【例【例8.1】考虑适用于低级】考虑适用于低级CAD的图形软件包的图形软件包 DO WHILE 键盘接口任务;键盘接口任务;选择分析或计算:选择分析或计算:辅助视图:辅助视图任务;辅助视图:辅助视图任务;截面视图:截面视图任务;截面视图:截面视图任务;END;END REPEAT;END PROCEDURE.【例8.1】考虑适用于低级CAD的图形软件包 软软 件件 工工 程程【例【例8.1】考虑适用于低级】考虑适用于低级CAD的图形软件包的图形软件包在这一抽象级别上,给出了初步的过程性表示,在这一抽象级别上,给出了初步的过程性表示,此时所有术语都是面向软件(比如采用此时所有术语都是面向软件(比如采用dowhile结构)并且模块结构也开始明朗。求结构)并且模块结构也开始明朗。求精过程还可继续下去,直至产生源代码。精过程还可继续下去,直至产生源代码。【例8.1】考虑适用于低级CAD的图形软件包在这一抽象级别上 软软 件件 工工 程程数据抽象数据抽象数数据据抽抽象象与与过过程程抽抽象象一一样样,能能使使设设计计者者按按不不同同的详细程度表示数据对象。的详细程度表示数据对象。仍仍以以CAD软软件件为为例例,我我们们可可定定义义一一个个称称为为drawing(图)的数据对象:(图)的数据对象:TYPE drawing IS STRUCTURE DEFINED number IS STRING LENTH(12);geometry DEFINED notes IS STRING LENTH(256);bom DEFINEDEND drawing TYPE;数据抽象数据抽象与过程抽象一样,能使设计者按不同的详细程度表 软软 件件 工工 程程数据抽象数据抽象在在此此,drawing被被表表示示为为一一种种结结构构,其其各各个个组组成成部部件件本本身身又又可可为为某某种种数数据据抽抽象象,比比如如geometry(几几何何图图形形)和和bom。一一旦旦抽抽象象数数据据类类型型drawing定定义义完完毕毕,即即可可用用类类型型名名直直接接说说明明数数据据对对象象,而而不不必必涉涉及及其其内内部部构构造造的的细细节节,例例如,可用语句如,可用语句:blueprint IS INSTANCE OF drawing;或或 schematic IS INSTANCE OF drawing;说明说明blueprint和和schematic具有具有drawing的一切特性。的一切特性。blueprint蓝图,蓝图,schematic简(略)图。简(略)图。数据抽象在此,drawing被表示为一种结构,其各个组成部件 软软 件件 工工 程程数据抽象数据抽象在抽象数据类型的定义中可以附加一组操作的在抽象数据类型的定义中可以附加一组操作的定义,用以确定在此类数据对象上可进行的操定义,用以确定在此类数据对象上可进行的操作。以抽象数据类型作。以抽象数据类型drawing为例,可以定义擦为例,可以定义擦除(除(erase)、存储()、存储(save)、分类)、分类(catalog)和拷贝()和拷贝(copy)等操作。)等操作。许多程序设计语言都提供了对抽象数据类型的许多程序设计语言都提供了对抽象数据类型的支持,支持,Ada 的程序包机制是对数据抽象和过程的程序包机制是对数据抽象和过程抽象的双重支持抽象的双重支持 数据抽象在抽象数据类型的定义中可以附加一组操作的定义,用以确 软软 件件 工工 程程逐步求精逐步求精关于关于“逐步求精逐步求精”,N.Wirth曾经做过如下说曾经做过如下说明:明:“我们对付复杂问题的重要办法是抽象,因此,我们对付复杂问题的重要办法是抽象,因此,对一个复杂的问题不应该立即用计算机指令、对一个复杂的问题不应该立即用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽数字和逻辑符号来表示,而应该用较自然的抽象语言来表示,从而得出抽象程序。抽象程序象语言来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象适的记号(可能是自然语言)来表示。对抽象程序做进一步分解,进入下一个抽象层次,重程序做进一步分解,进入下一个抽象层次,重复这一精化过程直到程序能被计算机接受为止。复这一精化过程直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令这时的程序可能是用某种高级语言或机器指令书写的。书写的。”逐步求精关于“逐步求精”,N.Wirth曾经做过如下说明:软软 件件 工工 程程过程求精与数据求精过程求精与数据求精因因为为求求精精的的每每一一步步都都是是用用更更为为详详细细的的描描述述替替代代上上一一层层次次的的抽抽象象描描述述,所所以以在在整整个个设设计计过过程程中中产产生生的的,具具有有不不同同详详细细程程度度的的各各种种描描述述,组组成成了了系系统统的的层层次次结结构构。层层次次结结构构的的上上一一层层是是下下一一层的抽象,下一层是上一层的求精。层的抽象,下一层是上一层的求精。在过程求精的同时自然伴随着数据的求精,无在过程求精的同时自然伴随着数据的求精,无论是过程还是数据,每一步细化都蕴涵着某些论是过程还是数据,每一步细化都蕴涵着某些设计决策,因此设计人员必须掌握一些基本的设计决策,因此设计人员必须掌握一些基本的准则,比较各种可能的候选方案。准则,比较各种可能的候选方案。过程求精与数据求精因为求精的每一步都是用更为详细的描述替代上 软软 件件 工工 程程8.1.3 模块化与信息隐藏模块化与信息隐藏软软件件总总体体结结构构(下下一一节节讨讨论论)体体现现了了模模块块化化思思想想,即即把把软软件件划划分分为为可可独独立立命命名名和和编编制制的的部部件件,每每个个部部件件称称为为一一个个模模块块,当当把把所所有有模模块块组组装装到到一起时,便可获得满足问题需要的一个解。一起时,便可获得满足问题需要的一个解。“模块化是唯一对软件中的程序进行智能化管模块化是唯一对软件中的程序进行智能化管理的一个属性理的一个属性”。8.1.3 模块化与信息隐藏软件总体结构(下一节讨论)体现 软软 件件 工工 程程8.1.3 模块化与信息隐藏模块化与信息隐藏假设:假设:函数函数C(X)问题问题X的复杂性;的复杂性;函数函数E(X)求解问题求解问题X需要花费的工作量(时间);需要花费的工作量(时间);对于问题对于问题P1和和P2,如果,如果:C(P1)C(P2)则有则有:E(P1)E(P2)结论:解决一个复杂问题总比解决一个简单问题耗费结论:解决一个复杂问题总比解决一个简单问题耗费 更多的工作量。更多的工作量。同时同时 有:有:C(P1+P2)C(P1)+C(P2)结论:由结论:由P1、P2组合而成的问题的复杂性往往比考虑组合而成的问题的复杂性往往比考虑 单个问题复杂性的和更大。单个问题复杂性的和更大。于是有:于是有:E(P1+P2)E(P1)+E(P2)8.1.3 模块化与信息隐藏假设:软软 件件 工工 程程8.1.3 模块化与信息隐藏模块化与信息隐藏图图8-1-2 模块与软件耗费模块与软件耗费最小成本最小成本区域区域MO软件总成本软件总成本用于接口的成本用于接口的成本每个模块成本之和每个模块成本之和模块总数模块总数成本或成本或工作量工作量8.1.3 模块化与信息隐藏图8-1-2 模块与软件耗费 软软 件件 工工 程程1 1信息隐蔽信息隐蔽信息隐蔽原理告诉我们,模块应该设计得使其信息隐蔽原理告诉我们,模块应该设计得使其所含信息(过程和数据)对于那些不需要这些所含信息(过程和数据)对于那些不需要这些信息的模块不可访问;每个模块只完成一个相信息的模块不可访问;每个模块只完成一个相对独立的特定功能;模块之间仅仅交换那些为对独立的特定功能;模块之间仅仅交换那些为完成系统功能必须交换的信息,即模块应该独完成系统功能必须交换的信息,即模块应该独立。显然,模块独立的概念是模块化、抽象、立。显然,模块独立的概念是模块化、抽象、信息隐蔽和局部化等诸多概念的直接结果。信息隐蔽和局部化等诸多概念的直接结果。1信息隐蔽信息隐蔽原理告诉我们,模块应该设计得使其所含信息 软软 件件 工工 程程信息隐蔽原理的好处信息隐蔽原理的好处它不仅支持模块的并行开发,而且还可减少测它不仅支持模块的并行开发,而且还可减少测试和后期维护的工作量。因为测试和维护阶段试和后期维护的工作量。因为测试和维护阶段不可避免地要修改设计和代码,模块对大多数不可避免地要修改设计和代码,模块对大多数数据和过程处理细节的隐蔽可以减少错误向外数据和过程处理细节的隐蔽可以减少错误向外传播。此外,整个系统欲扩充功能亦只需传播。此外,整个系统欲扩充功能亦只需“插插入入”新模块,原有的多数模块无须改动。新模块,原有的多数模块无须改动。信息隐蔽原理的好处它不仅支持模块的并行开发,而且还可减少测试 软软 件件 工工 程程2 2内聚度(内聚度(cohesioncohesion)内聚度是前述信息隐蔽和局部化概念的自然扩内聚度是前述信息隐蔽和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧展,它标志一个模块内部各成分彼此结合的紧密程度。密程度。内聚度按其高低程度可分为七级,内聚度越高内聚度按其高低程度可分为七级,内聚度越高越好。越好。2内聚度(cohesion)内聚度是前述信息隐蔽和局部化概 软软 件件 工工 程程1 1)偶然性内聚)偶然性内聚低级内聚低级内聚偶然性内聚(偶然性内聚(coincidental cohesion)。是指一个模块内各成)。是指一个模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。常见的偶然性内聚情形是,当程序员写完一个程序也很松散。常见的偶然性内聚情形是,当程序员写完一个程序后发现有一组语句多处出现,于是为节省内存便将这组语句单后发现有一组语句多处出现,于是为节省内存便将这组语句单独组成一个模块。独组成一个模块。XYZW1)偶然性内聚低级内聚偶然性内聚(coincidenta 软软 件件 工工 程程2 2)逻辑性内聚)逻辑性内聚低级内聚低级内聚如果一个模块完成的诸任务逻辑上相关,则称之为逻如果一个模块完成的诸任务逻辑上相关,则称之为逻辑性内聚(辑性内聚(logical cohesion)例如:一个模块产生所有与类型无关的输出,即为逻例如:一个模块产生所有与类型无关的输出,即为逻辑性内聚。辑性内聚。又如:模块又如:模块X、Y分别调用分别调用A、B,A、B相似,将其合相似,将其合并为模块并为模块AB,模块,模块AB即为逻辑性内聚。即为逻辑性内聚。XYSABXYSAB2)逻辑性内聚低级内聚如果一个模块完成的诸任务逻辑上相关 软软 件件 工工 程程3)时间性内聚时间性内聚低级内聚低级内聚如果一个模块包含的诸任务必须在同一时间段如果一个模块包含的诸任务必须在同一时间段内执行(例如一个初始化模块),则称之为时内执行(例如一个初始化模块),则称之为时间性内聚(间性内聚(temporal cohesiontemporal cohesion)。)。以上三种内聚形式通常认为是低级内聚。以上三种内聚形式通常认为是低级内聚。3)时间性内聚低级内聚如果一个模块包含的诸任务必须在同一 软软 件件 工工 程程4 4)过程性内聚)过程性内聚中级内聚中级内聚过程性内聚(过程性内聚(procedural cohesion)模块的过程性内聚度是指,模块内成分彼此相模块的过程性内聚度是指,模块内成分彼此相关,并且必须按特定的次序执行;关,并且必须按特定的次序执行;过程内聚模块的各组成功能由控制流联结在一过程内聚模块的各组成功能由控制流联结在一起。起。4)过程性内聚中级内聚过程性内聚(procedural 软软 件件 工工 程程5 5)通信性内聚度)通信性内聚度中级内聚中级内聚通信性内聚(通信性内聚(communicational cohesion)。)。模块的通信性内聚度是指,模块中各成分都将对数模块的通信性内聚度是指,模块中各成分都将对数据结构的同一区域进行操作,以达到通信的目的。据结构的同一区域进行操作,以达到通信的目的。例如,模块例如,模块A的处理单元是由同一数据文件的数据的处理单元是由同一数据文件的数据产生不同的表格产生不同的表格模块模块A从文件从文件FILE读出数据读出数据1.由数据产生报表一由数据产生报表一2.由数据产生报表二由数据产生报表二5)通信性内聚度中级内聚通信性内聚(communicat 软软 件件 工工 程程6 6)顺序性内聚)顺序性内聚 高级内聚高级内聚顺序性内聚(顺序性内聚(sequential cohesion)。如果一个模块内的各处理成分均与同一功能相如果一个模块内的各处理成分均与同一功能相关,且这些处理必须顺序执行,则称顺序内聚;关,且这些处理必须顺序执行,则称顺序内聚;通常,一个处理成分的输出是另一个处理成分通常,一个处理成分的输出是另一个处理成分的输入。例如:的输入。例如:1.输入系数输入系数2.求方程的根求方程的根3.打印方程的根打印方程的根求一元二次方程求一元二次方程根的模块根的模块6)顺序性内聚 高级内聚顺序性内聚(sequential 软软 件件 工工 程程7 7)功能性内聚)功能性内聚高级内聚高级内聚功能性内聚(功能性内聚(functional cohesion)。)。如果模块内所有成分形成一个整体,完成单个如果模块内所有成分形成一个整体,完成单个功能,则称功能内聚,功能内聚是最高程度的功能,则称功能内聚,功能内聚是最高程度的内聚形式。内聚形式。例如,一个模块仅完成一个矩阵的输出,就是例如,一个模块仅完成一个矩阵的输出,就是一个具有功能性内聚的模块。一个具有功能性内聚的模块。q设计软件时,应该能够识别内聚度的高低,并设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度,从而获通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性。得较高的模块独立性。7)功能性内聚高级内聚功能性内聚(functional 软软 件件 工工 程程3 3耦合度耦合度耦合度是对软件结构中模块间关联程度的一种度量。耦合度是对软件结构中模块间关联程度的一种度量。耦合的强弱取决于模块间接口的复杂性、进入或调用模块耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过界面传送数据的多少等。的位置以及通过界面传送数据的多少等。与内聚度正好相反,在设计软件时应追求尽可能松散耦合与内聚度正好相反,在设计软件时应追求尽可能松散耦合的系统。因为对这类系统中任一模块的设计、测试和维护的系统。因为对这类系统中任一模块的设计、测试和维护相对独立。由于模块间联系较少,错误在模块间传播的可相对独立。由于模块间联系较少,错误在模块间传播的可能性也随之变小。能性也随之变小。模块间的耦合程度直接影响系统的可理解性、可测试性、模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。可靠性和可维护性。耦合度也可以分为七级耦合度也可以分为七级3耦合度耦合度是对软件结构中模块间关联程度的一种度量。软软 件件 工工 程程1 1)非直接耦合)非直接耦合最松散的耦合最松散的耦合耦合度也可以分为七级:耦合度也可以分为七级:如果两模块中任一个都不依赖于对方能独立工如果两模块中任一个都不依赖于对方能独立工作,则称这两模块为(作,则称这两模块为(nodirect couplingnodirect coupling),),这类耦合度最低。例如:这类耦合度最低。例如:XYAB无关系无关系1)非直接耦合最松散的耦合耦合度也可以分为七级:XYAB 软软 件件 工工 程程2 2)数据耦合)数据耦合数据耦合(数据耦合(data couplingdata coupling)如果两模块间通过参数交换信息,而信息仅限如果两模块间通过参数交换信息,而信息仅限于数据,则称这两模块为数据耦合。一般软件于数据,则称这两模块为数据耦合。一般软件系统中都存在数据耦合,它是完成大多数功能系统中都存在数据耦合,它是完成大多数功能所必需的。例如:所必需的。例如:AB通过参数通过参数传递数据传递数据2)数据耦合数据耦合(data coupling)AB通过 软软 件件 工工 程程3 3)特征耦合)特征耦合特征耦合(特征耦合(stamp coupling)介于数据耦合和控制耦合之间的是特征耦介于数据耦合和控制耦合之间的是特征耦合(合(stamp coupling)。例如,传递了求)。例如,传递了求平均成绩以外的参数:平均成绩以外的参数:producereport cardscalculateaverage printreport cardstudengt recordaverragestudengt recordaverrage3)特征耦合特征耦合(stamp coupling)prod 软软 件件 工工 程程4 4)控制耦合)控制耦合控制耦合(控制耦合(control coupling)。)。如果两模块间通过参数交换信息,此时若传递如果两模块间通过参数交换信息,此时若传递的信息中含有控制信息,则耦合度上升为控制的信息中含有控制信息,则耦合度上升为控制耦合。控制耦合通常会增加系统的复杂性,有耦合。控制耦合通常会增加系统的复杂性,有时适当分解模块可消除控制耦合。时适当分解模块可消除控制耦合。4)控制耦合控制耦合(control coupling)。软软 件件 工工 程程5 5)外部耦合)外部耦合外部耦合(外部耦合(external coupling)。)。当若干模块均与同一个外部环境关联(例如,当若干模块均与同一个外部环境关联(例如,I/O处理使所有处理使所有I/O模块与特定的设备、格式和模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。通信协议相关联),它们之间便存在外部耦合。外部耦合尽管需要,但应限制在少数几个模块外部耦合尽管需要,但应限制在少数几个模块上。上。5)外部耦合外部耦合(external coupling)。软软 件件 工工 程程6 6)公共耦合)公共耦合公共耦合(公共耦合(common couplingcommon coupling)当若干模块通过全局的数据环境相互作用时,当若干模块通过全局的数据环境相互作用时,它们之间存在公共耦合。全局数据环境中可能它们之间存在公共耦合。全局数据环境中可能含有全局变量、公用区、内存公共覆盖区、任含有全局变量、公用区、内存公共覆盖区、任何存储介质上的文件、物理设备等。何存储介质上的文件、物理设备等。6)公共耦合公共耦合(common coupling)软软 件件 工工 程程7 7)内容耦合)内容耦合内容耦合(内容耦合(content coupling)。)。最高耦合度是内容耦合,出现内容耦合的情形最高耦合度是内容耦合,出现内容耦合的情形包括:当一个模块使用另一个模块内部的数据包括:当一个模块使用另一个模块内部的数据或控制信息;一个模块直接转移到另一个模块或控制信息;一个模块直接转移到另一个模块内部,等等。内部,等等。7)内容耦合内容耦合(content coupling)。软软 件件 工工 程程8.1.3 8.1.3 模块化与信息隐藏模块化与信息隐藏一般来说,设计软件时应尽量使用数据耦合,一般来说,设计软件时应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共数据减少控制耦合,限制外部环境耦合和公共数据耦合,杜绝内容耦合。耦合,杜绝内容耦合。值得指出,模块化设计的思想适用于任何软件值得指出,模块化设计的思想适用于任何软件系统的设计。当某些软件系统(如实时软件等)系统的设计。当某些软件系统(如实时软件等),因不能容忍子程序调用引起的时间开销而必,因不能容忍子程序调用引起的时间开销而必须以整块软件的形式出现时,软件设计仍然应须以整块软件的形式出现时,软件设计仍然应该以模块化设计的思想为指导,直至编码时再该以模块化设计的思想为指导,直至编码时再改用代入式(改用代入式(inline)方法。这样,源程序中)方法。这样,源程序中虽不含明显的模块,但模块化设计所带来的大虽不含明显的模块,但模块化设计所带来的大部分益处却已被系统获得。部分益处却已被系统获得。8.1.3 模块化与信息隐藏一般来说,设计软件时应尽量使用 软软 件件 工工 程程教学目的:理解软件设计的概念,掌握几种设计技术教学目的:理解软件设计的概念,掌握几种设计技术和工具,了解设计规格说明和评审。和工具,了解设计规格说明和评审。教学重点:几种设计技术和工具。教学重点:几种设计技术和工具。教学难点:教学难点:判定表。判定表。教教 具:多媒体教室、电子教案具:多媒体教室、电子教案作作 业:业:教学题目教学题目 8.1.48.1.6,8.2,8.3教学目的:理解软件设计的概念,掌握几种设计技术和工具,了解设 软软 件件 工工 程程8.1.4 8.1.4 软件总体结构设计软件总体结构设计软件总体结构(软件总体结构(software architecture)应该)应该包括两方面内容:包括两方面内容:1)由系统中所有过程性部件(即模块)由系统中所有过程性部件(即模块)构成的层次结构,即程序结构;构成的层次结构,即程序结构;2)对应于程序结构的输入输出数据结构。对应于程序结构的输入输出数据结构。软件总体结构设计的目标就是产生一个模块化软件总体结构设计的目标就是产生一个模块化的程序结构并明确各模块之间的控制关系,此的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。据流,进一步协调程序结构和数据结构。8.1.4 软件总体结构设计软件总体结构(software 软软 件件 工工 程程8.1.4 8.1.4 软件总体结构设计软件总体结构设计软件总体结构(软件总体结构(software architecture)应该)应该包括两方面内容:包括两方面内容:1)由系统中所有过程性部件(即模块)由系统中所有过程性部件(即模块)构成的层次结构,即程序结构;构成的层次结构,即程序结构;2)对应于程序结构的输入输出数据结构。对应于程序结构的输入输出数据结构。软件总体结构设计的目标就是产生一个模块化软件总体结构设计的目标就是产生一个模块化的程序结构并明确各模块之间的控制关系,此的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。据流,进一步协调程序结构和数据结构。8.1.4 软件总体结构设计软件总体结构(software 软软 件件 工工 程程1.1.结构演变结构演变图图8-1-3 8-1-3 结构演变结构演变软软件件“解解”S1S4S2待解问题待解问题S3P1 P2P4P31.结构演变图8-1-3 结构演变软件“解”S1S4S 软软 件件 工工 程程2.2.同一个同一个“问题问题”的多种软件的多种软件解解图图8-1-4 对应于同一问题的各种软件结构对应于同一问题的各种软件结构问题问题P结构结构1结构结构2结构结构3M1M2M3M4M1M2M3M4M1M2M3M4MMM2.同一个“问题”的多种软件解图8-1-4 对应于同一 软软 件件 工工 程程3.表示程序结构的工具表示程序结构的工具类树图(类树图(treelike diagram)WarnierOrr图图Jackson图图v最常见的是如图最常见的是如图8-1-5所示的类树图。为便于讨所示的类树图。为便于讨论,下面定义几个有关的术语和度量。论,下面定义几个有关的术语和度量。3.表示程序结构的工具类树图(treelike dia 软软 件件 工工 程程4.4.有关程序结构的术语有关程序结构的术语图图8-1-5 有关程序结构的术语有关程序结构的术语Mabcdemfgihopqrntjks扇出扇出扇入扇入宽度宽度深度深度4.有关程序结构的术语图8-1-5 有关程序结构的术语 软软 件件 工工 程程4.有关程序结构的术语有关程序结构的术语一个软件的深度(一个软件的深度(depth)控制的层数;控制的层数;一个软件的宽度(一个软件的宽度(width)其控制的层数和其控制的层数和跨度;跨度;一个模块的一个模块的“扇出数扇出数”(fanout)该模块该模块直接控制的其他模块数;直接控制的其他模块数;一个模块的一个模块的“扇入数扇入数”(fanin)指能直接控)指能直接控制该模块的模块数。制该模块的模块数。4.有关程序结构的术语一个软件的深度(depth)控 软软 件件 工工 程程4.有关程序结构的术语有关程序结构的术语如果一个模块控制另一个模块,称前者为如果一个模块控制另一个模块,称前者为“主控主控”模块,后者为模块,后者为“从属从属”模块。在图模块。在图8-1-5中模块中模块M主主控模块控模块a、b、c,模块,模块d从属模块从属模块a,因此也从属,因此也从属M。此外,软件结构中还有两个重要的特性,即可见域此外,软件结构中还有两个重要的特性,即可见域和连通域。和连通域。v模块的可见域模块的可见域该模块可直接或间接引用该模块可直接或间接引用 的一组模块;的一组模块;v模块的连通域模块的连通域仅包括该模块可直接引用仅包括该模块可直接引用 的模块。的模块。4.有关程序结构的术语如果一个模块控制另一个模块,称前者 软软 件件 工工 程程8.1.5 数据结构设计数据结构设计数据结构描述各数据分量之间的逻辑关系,数数据结构描述各数据分量之间的逻辑关系,数据结构一经确定,数据的组织形式、访问方法、据结构一经确定,数据的组织形式、访问方法、组合程度及处理策略等随之而定,所以数据结组合程度及处理策略等随之而定,所以数据结构是影响软件总体结构的重要因素。构是影响软件总体结构的重要因素。数据结构与程序结构一样,也可以在不同的抽数据结构与程序结构一样,也可以在不同的抽象级别上表示。以栈为例,作为一个抽象数据象级别上表示。以栈为例,作为一个抽象数据类型,在概念级上只关心类型,在概念级上只关心“先进后出先进后出”特性,特性,而在实现级上则要考虑物理表示及内部工作的而在实现级上则要考虑物理表示及内部工作的细节,比如,用向量实现,或用链表实现等。细节,比如,用向量实现,或用链表实现等。8.1.5 数据结构设计数据结构描述各数据分量之间的逻辑关 软软 件件 工工 程程8.1.5 8.1.5 数据结构设计数据结构设计数据结构对程序结构和过程复杂性有直接的影响,从数据结构对程序结构和过程复杂性有直接的影响,从而在很大程度上决定了软件的质量。而在很大程度上决定了软件的质量。数据设计的目标是为在需求规格说明中定义的那些数数据设计的目标是为在需求规格说明中定义的那些数据对象选择合适的逻辑表示,并确定可能作用在这些据对象选择合适的逻辑表示,并确定可能作用在这些逻辑结构上的所有操作(包括选用已存在的程序包)。逻辑结构上的所有操作(包括选用已存在的程序包)。数据抽象和信息隐蔽两个概念是数据设计的基础。数据抽象和信息隐蔽两个概念是数据设计的基础。通常,数据设计方案不是唯一的,有时需进行算法复通常,数据设计方案不是唯一的,有时需进行算法复杂性分析、综合各种因素之后才能从多种候选方案中杂性分析、综合各种因素之后才能从多种候选方案中筛选出最佳的设计方案。筛选出最佳的设计方案。8.1.5 数据结构设计数据结构对程序结构和过程复杂性有直 软软 件件 工工 程程8.1.6 软件过程设计软件过程设计过程设计紧跟在数据结构和程序结构设计之后,其基过程设计紧跟在数据结构和程序结构设计之后,其基本任务是描述模块内各处理元素和判断元素的顺序,本任务是描述模块内各处理元素和判断元素的顺序,图图8-1-6展示了模块展示了模块B的内部过程。的内部过程。过程说明过程说明图图8-1-6 模块模块B的内部结构的内部结构模块模块B 模块模块B程序结构程序结构8.1.6 软件过程设计过程设计紧跟在数据结构和程序结构设 软软 件件 工工 程程8.1.6 8.1.6 软件过程设计软件过程设计所谓过程,应包括有关处理的精确说明,诸如所谓过程,应包括有关处理的精确说明,诸如事件的顺序、判断的位置和条件、循环操作以事件的顺序、判断的位置和条件、循环操作以及数据的组成,内部变量和外部变量的引用问及数据的组成,内部变量和外部变量的引用问题等等。题等等。过程设计也应遵循过程设计也应遵循“自上而下,逐步求精自上而下,逐步求精”的的原则和单入口单出口的结构化设计思想。原则和单入口单出口的结构化设计思想。过程设计的任务是描述算法的细节。结构化程过程设计的任务是描述算法的细节。结构化程序流程图、盒图(序流程图、盒图(N-S图)、判定表和判定树,图)、判定表和判定树,以及过程设计语言(以及过程设计语言(PDL)、)、PAD图等是人们图等是人们经常使用的工具。经常使用的工具。8.1.6 软件过程设计所谓过程,应包括有关处理的精确说明 软软 件件 工工 程程8.2 软件过程设计技术和工具软件过程设计技术和工具 8.2.1 结构化程序设计结构化程序设计 结构化程序设计定义:是程序设计技术,它采用自顶结构化程序设计定义:是程序设计技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制构件。向下逐步求精的设计方法和单入口单出口的控制构件。结构化程序设计的思想,应该在软件设计中体现出来,结构化程序设计的思想,应该在软件设计中体现出来,但这并不排除为效率或其他原因对结构化程序设计作但这并不排除为效率或其他原因对结构化程序设计作一点修正。随着面向对象、软件重用等新的软件开发一点修正。随着面向对象、软件重用等新的软件开发方法和技术的发展,更现实、更有效的开发途径可能方法和技术的发展,更现实、更有效的开发途径可能是自顶向下和自底向上两种方法有机地结合。是自顶向下和自底向上两种方法有机地结合。8.2 软件过程设计技术和工具 8.2.1 结构化程序 软软 件件 工工 程程8.2.2 图形表示法图形表示法1流程图(也称为程序框图)是最常用的一种表示法,流程图(也称为程序框图)是最常用的一种表示法,“顺序顺序”、“分支分支”和和“循环循环”三个基本控制构件用三个基本控制构件用流程图表达的形式如图流程图表达的形式如图8-2-1所示。所示。F第二个任务第二个任务顺序结构顺序结构then部分部分else部分部分dowhile循环循环第一个任务第一个任务T分支条件分支条件Ifthenelse结构结构循环条件循环条件循环体循环体TF图图8-2-1 流程图构件流程图构件 8.2.2 图形表示法1流程图(也称为程序框图)是最常用 软软 件件 工工 程程8.2.2 图形表示法图形表示法2盒图也称为盒图也称为N-S图或图或Chapin图。这种表达方式图。这种表达方式取消了流程线,它强迫程序员以结构化方式思取消了流程线,它强迫程序员以结构化方式思考和解决问题。考和解决问题。第一个任务第一个任务第二个任务第二个任务第三个任务第三个任务顺序结构顺序结构else部分部分then部分部分条件条件FTif-then-else结构结构do-while部分部分循环条件循环条件循环结构循环结构图图8-2-3 盒图的构件盒图的构件8.2.2 图形表示法2盒图也称为N-S图或Chapin 软软 件件 工工 程程8.2.3 判定表与判定树判定表与判定树当模块中包含复杂的条件组合,并要根据这些条件当模块中包含复杂的条件组合,并要根据这些条件的组合选择动作时,只有判定表和判定树能够清晰的组合选择动作时,只有判定表和判定树能够清晰地表达出复杂的条件组合与各种动作之间的对应关地表达出复杂的条件组合与各种动作之间的对应关系。系。判定表由四部分组成:判定表由四部分组成:左上部左上部列出所有条件;列出所有条件;左下部左下部列出所有可能的动作;列出所有可能的动作;右上部右上部所有可能的条件组合(矩阵);所有可能的条件组合(矩阵);右下部右下部条件组合与动作之间的对应关系。条件组合与动作之间的对应关系。判定表的每一列可解释为一条处理规则。判定表的每一列可解释为一条处理规则。8.2.3 判定表与判定树当模块中包含复杂的条件组合,并要 软软 件件 工工 程程8.2.3 判定表与判定树判定表与判定树【例【例8.2】问题处理描述:耗电记费系统可以采用】问题处理描述:耗电记费系统可以采用固定价格收费、浮动价格收费和其他方式收费三固定价格收费、浮动价格收费和其他方式收费三种方式。若采用固定价格方式收费,对每月耗电种方式。若采用固定价格方式收费,对每月耗电100kWh以下的用户只征收最低标准费,超过以下的用户只征收最低标准费,超过100kWh的用户按价格表的用户按价格表A收费;若采用浮动价收费;若采用浮动价格方式收费,则每月耗电格方式收费,则每月耗电100kWh以下的用户按以下的用户按价格价格A收费,超过收费,超过100kWh的用户按价格的用户按价格B收费。收费。8.2.3 判定表与判定树【例8.2】问题处理描述:耗电记表表81 判定表判定表规规 则则12345 固定价格方式固定价格方式 浮动价格方式浮动价格方式 耗电耗电100kW.h 耗电耗电100kW.h TFTFTFFTFTTFFTFTFF 收取最低标准费收取最低标准费 按价格表按价格表A收费收费 按价格表按价格表B收费收费 其他处理其他处理 条件条件动作动作表81 判定表规 则12345 固定 软软 件件 工工 程程【例【例8.2】判定树】判定树 耗电耗电100kWh 收取最低标准费收取最低标准费 固定方式固定方式 耗电耗电100kWh 按价格表按价格表A收费收费 耗电耗电100kWh 按价格表按价格表A收费收费耗电收费耗电收费 浮动方式浮动方式 耗电耗电100kWh 按价格表按价格表B收费收费 其他方式其他方式 其他处理其他处理图图8-2-5 用判定树表示计算耗电收费的算法用判定树表示计算耗电收费的算法【例8.2】判定树 软软 件件 工工 程程8.2.3 判定表与判定树判定表与判定树判定树的优点:形式简单,直观明了,易于掌握。判定树的优点:形式简单,直观明了,易于掌握。判定树的缺点:判定树的缺点:存在着数据冗余的问题,相同的数据元素往往要存在着数据冗余的问题,相同的数据元素往往要重复多次,而且越接近树的叶端重复的次数越多。重复多次,而且越接近树的叶端重复的次数越多。判定树要求对条件进行层次划分,若条件所处层判定树要求对条件进行层次划分,若条件所处层次不对,可能会导致增加判定树的复杂性。次不对,可能会导致增加判定树的复杂性。8.2.3 判定表与判定树判定树的优点:形式简单,直观明了 软软 件件 工工 程程8.2.4 过程设计语言(过程设计语言(PDL)PDL(Procedure Design Language)也称为结)也称为结构英语或伪码,是所有正文形式的过程设计工构英语或伪码,是所有正文形式的过程设计工具的统称。具的统称。PDL经常表现为一种经常表现为一种“混杂混杂”的形式,允许自的形式,允许自然语言(如英语)的词汇与某种结构化程序设然语言(如英语)的词汇与某种结构化程序设计语言(如计语言(如Pascal、C、Ada等)的语法结构交等)的语法结构交织在一起织在一起8.2.4 过程设计语言(PDL)PDL(Procedur 软软 件件 工工 程程8.2.4 过程设计语言(过程设计语言(PDL)PDL应具有下述特点:应具有下述特点:1关键字采用固定语法并支持结构化构件、数关键字采用固定语法并支持结构化构件、数据说明机制和模块化;据说明机制和模块化;2处理部分采用自然语言描述;处理部分采用自然语言描述;3允许说明简单(标量、数组等)和复杂(链允许说明简单(标量、数组等)和复杂(链表、树等)的数据结构;表、树等)的数据结构;4子程序的定义与调用规则不受具体接口方式子程序的定义与调用规则不受具体接口方式的影响。的影响。8.2.4 过程设计语言(PDL)PDL应具有下述特点:软软 件件 工工 程程8.2.4 过程设计语言(过程设计语言(PDL)考察一个考察一个PDL的原型,它可以建立在任意一个通用的结构化的原型,它可以建立在任意一个通用的结构化程序设计语言之上。基本成分包括:子程序定义、界面描述、程序设计语言之上。基本成分包括:子程序定义、界面描述、数据说明、块结构、分支结构、循环结构和数据说明、块结构、分支结构、循环结构和I/O结构。结构。数据说明的形式为:数据说明的形式为:TYPE IS 其中:其中:局部变量或全局变量;局部变量或全局变量;某个特定关键字(例如,某个特定关键字(例如,SCALAR,ARRAY,LIST,STRING,STRUTURE等);等);说明此处定义的变量在该过程或整个程序中应说明此处定义的变量在该过程或整个程序中应如何使用。如何使用。8.2.4 过程设计语言(PDL)考察一个PDL的原型,它 软软 件件 工工 程程8.2.4 过程设计语言过程设计语言(PDL)可进行抽象数据类型的定义,例如可进行抽象数据类型的定义,例如:TYPE table_1 IS INSTACE OF symbol_table 而而symbol_table在另一处已定义如下:在另一处已定义如下:TYPE symbol_table IS STRUCTURE DEFINED8.2.4 过程设计语言(PDL)可进行抽象数据类型的定义 软软 件件 工工 程程8.2.4 过程设计语言过程设计语言(PDL)该该PDL的的块块结结构构描描述述一一个个过过程程元元素素,即即一一个个块块内内的的所所有有语句将作为一个整体执行,形式为语句将作为一个整体执行,形式为 BEGIN END该该PDL的分支结构有的分支结构有if-then-else和和case两种形式,分别为两种形式,分别为 IF THEN ELSE ENDIF8.2.4 过程设计语言(PDL)该PDL的块结构描述一个 软软 件件 工工 程程8.2.4 过程设计语言过程设计语言(PDL)CASE OF WHEN SELECT WHEN SELECT WHEN SELECT DEFAULT:ENDCASE8.2.4 过程设计语言(PDL)CASE OF 情况 软软 件件 工工 程程8.2.4 过程设计语言(过程设计语言(PDL)循环结构包括三类,表达形式分别为循环结构包括三类,表达形式分别为:DO WHILE ENDWHILEREPEAT UNTIL ENDREPEATDOFOR =ENDFOR8.2.4 过程设计语言(PDL)循环结构包括三类,表达形 软软 件件 工工 程程8.2.4 过程设计语言(过程设计语言(PDL)此此PDL还提供了还提供了NEXT和和EXIT两种语句:两种语句:EXIT语句,退出本层循环;语句,退出本层循环;NEXT语句强迫本次循环结束,新一轮循环开始。语句强迫本次循环结束,新一轮循环开始。在该在该PDL中,子程序说明为:中,子程序说明为:PROCEDURE INTERFACE END 其中属性表指明该子程序的引用特性(比如,是其中属性表指明该子程序的引用特性(比如,是INTERNAL还是还是EXTERNAL模式)和其他依赖于实现(即模式)和其他依赖于实现(即程序设计语言)的特性。程序设计语言)的特性。8.2.4 过程设计语言(PDL)此PDL还提供了NEXT 软软 件件 工工 程程8.2.4 过程设计语言过程设计语言(PDL)输入输入/输出说明部分常用的形式有输出说明部分常用的形式有 READ/WRITE
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!