软件工程第四章第4章_第1页
软件工程第四章第4章_第2页
软件工程第四章第4章_第3页
软件工程第四章第4章_第4页
软件工程第四章第4章_第5页
已阅读5页,还剩250页未读 继续免费阅读

下载本文档

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

文档简介

1、2021-11-16河南理工大学Page 1l软件设计:将软件需求转换为软件表示的软件设计:将软件需求转换为软件表示的过程过程l传统的软件工程方法学采用传统的软件工程方法学采用结构化设计结构化设计(Structured Design,SD)(Structured Design,SD)技术,完成软件技术,完成软件设计工作设计工作l通常把软件设计工作划分为通常把软件设计工作划分为概要设计概要设计和和详详细设计细设计这样两个阶段。这样两个阶段。2021-11-16河南理工大学Page 2l概要设计概要设计:通过仔细分析软件规格说明,:通过仔细分析软件规格说明,适当地对软件进行适当地对软件进行功能分解

2、功能分解,从而把,从而把软件软件划分为模块划分为模块,并且,并且设计出完成预定功能的设计出完成预定功能的模块结构模块结构。l详细设计详细设计:详细地设计每个模块,确定完:详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。成每个模块功能所需要的算法和数据结构。2021-11-16河南理工大学Page 3 结构化设计与结构化分析的关系结构化设计与结构化分析的关系4.1面向数据流的设计方法面向数据流的设计方法4.6软件设计的概念和原理软件设计的概念和原理4.2模块独立模块独立4.3启发规则启发规则4.4表示软件结构的图形工具表示软件结构的图形工具4.52021-11-16河南理工大学P

3、age 4人机界面设计人机界面设计4.7过程设计过程设计4.8过程设计的工具过程设计的工具4.9面向数据结构的设计方法面向数据结构的设计方法4.10小结小结4.112021-11-16河南理工大学Page 5l软件设计必须依据对软件的需求来进行软件设计必须依据对软件的需求来进行l结构化分析的结果为结构化设计提供了最结构化分析的结果为结构化设计提供了最基本的输入信息。基本的输入信息。2021-11-16河南理工大学Page 6l分析模型分析模型( (见见3.33.3节节) )的每个元素都提供了的每个元素都提供了创建设计模型时所需要的信息。图创建设计模型时所需要的信息。图4.14.1描绘描绘了软件

4、设计过程中的信息流。了软件设计过程中的信息流。2021-11-16河南理工大学Page 7图图4.1 4.1 把分析模型转变成软件把分析模型转变成软件2021-11-16河南理工大学Page 8l由由数据模型、功能模型和行为模型数据模型、功能模型和行为模型清楚地清楚地表示的软件需求被传送给软件设计者表示的软件需求被传送给软件设计者l使用适当的设计方法完成使用适当的设计方法完成数据设计、体系数据设计、体系结构设计、接口设计和过程设计结构设计、接口设计和过程设计。 2021-11-16河南理工大学Page 9l数据设计把分析阶段创建的数据设计把分析阶段创建的信息域模型信息域模型转变成实现软件转变成

5、实现软件所需要的数据结构所需要的数据结构l体系结构设计确定程序的主要结构元素(程序构件)之体系结构设计确定程序的主要结构元素(程序构件)之间的关系间的关系计算机程序的模型框架计算机程序的模型框架l接口设计的结果描述了软件内部、软件与协作系统之间接口设计的结果描述了软件内部、软件与协作系统之间以及软件与使用者之间的沟通方式。接口意味着信息流,以及软件与使用者之间的沟通方式。接口意味着信息流,因此因此数据流图数据流图提供了设计接口所需的信息提供了设计接口所需的信息l过程设计把程序体系结构中的结构元素,变换成对软件过程设计把程序体系结构中的结构元素,变换成对软件结构的过程性描述。结构的过程性描述。处

6、理规格说明处理规格说明、控制规格说明控制规格说明以及以及状态转换图状态转换图是过程设计的基础是过程设计的基础2021-11-16河南理工大学Page 102021-11-16河南理工大学Page 11图图4.1 4.1 把分析模型转变成软件把分析模型转变成软件2021-11-16河南理工大学Page 12l在软件设计期间我们所做出的决策,将最在软件设计期间我们所做出的决策,将最终决定软件开发能否成功终决定软件开发能否成功l更重要的是,这些设计决策将决定软件维更重要的是,这些设计决策将决定软件维护的难易程度护的难易程度2021-11-16河南理工大学Page 13 4.2.1 4.2.1 模块化

7、模块化 模块是由边界元素限定的相邻的程序模块是由边界元素限定的相邻的程序元素元素( (例如,数据说明,可执行的语句例如,数据说明,可执行的语句) )的的序列,而且有一个总体标识符来代表它。序列,而且有一个总体标识符来代表它。2021-11-16河南理工大学Page 14像像PascalPascal这样的块结构语言中的这样的块结构语言中的BeginBeginendend对,或者对,或者C C,C+C+和和JavaJava语言语言中的中的对,都是边界元素的例子。对,都是边界元素的例子。2021-11-16河南理工大学Page 15因此,过程、函数、子程序和宏等,因此,过程、函数、子程序和宏等,都可

8、作为模块。面向对象范型中的对象都可作为模块。面向对象范型中的对象( (见见第第6 6章章) )是模块,对象内的方法也是模块。是模块,对象内的方法也是模块。模块是构成程序的基本构件。模块是构成程序的基本构件。l模块化就是把程序划分为可模块化就是把程序划分为可独立命名独立命名且且独独立访问立访问的模块的模块l每个模块完成一个每个模块完成一个子功能子功能,模块集成一个,模块集成一个整体,可以完成指定的功能满足用户需求整体,可以完成指定的功能满足用户需求2021-11-16河南理工大学Page 162021-11-16河南理工大学Page 17 如果一个大型程序仅由一个模块组成,很难被人理解。如果一个

9、大型程序仅由一个模块组成,很难被人理解。 设函数设函数C(x)定义问题定义问题x的复杂程度,函数的复杂程度,函数E(x)定义解决定义解决问题问题x需要的工作量(时间)。对于两个问题需要的工作量(时间)。对于两个问题P1和和P2,如如果:果: C(P1)C(P2) 那么那么 E(P1)E(P2) 根据解决问题的经验,有一个规律是:根据解决问题的经验,有一个规律是: C(P1+P2)C(P1)+C(P2) 于是有于是有 E(P1+P2)E(P1)+E(P2) 2021-11-16河南理工大学Page 18图图4.2 4.2 模块化和软件成本模块化和软件成本l上图中最小成本区上图中最小成本区M的值不

10、能精确地预测的值不能精确地预测l但考虑模块化解决方案时,成本曲线确实但考虑模块化解决方案时,成本曲线确实有帮助有帮助2021-11-16河南理工大学Page 192021-11-16河南理工大学Page 20lMeyer提出了五条标准,我们可以用这五提出了五条标准,我们可以用这五条标准来评价一种条标准来评价一种设计方法设计方法定义有效的模定义有效的模块系统的能力。下面列出这五条标准。块系统的能力。下面列出这五条标准。 2021-11-16河南理工大学Page 21 (1) (1) 模块可分解性模块可分解性 如果一种设计方法提供了把问题分解如果一种设计方法提供了把问题分解为子问题的系统化机制,它

11、就能降低整个为子问题的系统化机制,它就能降低整个问题的复杂性,从而可以实现一种有效的问题的复杂性,从而可以实现一种有效的模块化解决方案。模块化解决方案。 2021-11-16河南理工大学Page 22 (2) (2) 模块可组装性模块可组装性 如果一种设计方法能把现有的如果一种设计方法能把现有的( (可重用可重用的的) )设计构件组装成新系统,它就能提供一设计构件组装成新系统,它就能提供一种并非一切都从头开始做的模块化解决方种并非一切都从头开始做的模块化解决方案。案。 2021-11-16河南理工大学Page 23 (3) (3) 模块可理解性模块可理解性 如果可以把一个模块作为一种独立单如果

12、可以把一个模块作为一种独立单元元( (无需参考其他模块无需参考其他模块) )来理解,那么,这来理解,那么,这样的模块是易于构造和易于修改的。样的模块是易于构造和易于修改的。 2021-11-16河南理工大学Page 24 (4) (4) 模块连续性模块连续性 如果对系统需求的微小修改只导致对如果对系统需求的微小修改只导致对个别模块,而不是对整个系统的修改,则个别模块,而不是对整个系统的修改,则修改所引起修改所引起的副作用将最小。的副作用将最小。2021-11-16河南理工大学Page 25 (5) (5) 模块保护性模块保护性 如果在一个模块内出现异常情况时,如果在一个模块内出现异常情况时,它

13、的影响局限在该模块内部,则由错误引它的影响局限在该模块内部,则由错误引起的副作用将最小。起的副作用将最小。 2021-11-16河南理工大学Page 26l可以使软件结构清晰,不仅容易设计也容可以使软件结构清晰,不仅容易设计也容易阅读和理解。易阅读和理解。l因为程序错误通常局限在有关的模块及它因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠测试和调试,因而有助于提高软件的可靠性。性。2021-11-16河南理工大学Page 27l因为变动往往只涉及少数几个模块,所以因为变动往往只涉及少数几个模块,所

14、以模块化能够提高软件的可修改性。模块化能够提高软件的可修改性。l模块化也有助于软件开发工程的组织管理,模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。技术熟练的程序员编写困难的模块。2021-11-16河南理工大学Page 28 4.2.2 4.2.2 抽象抽象 人类在认识复杂现象的过程中使用的最强有人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在力的思维工具是抽象。人们在实践中认识到,在现实世界中

15、一定事物、状态或过程之间总存在着现实世界中一定事物、状态或过程之间总存在着某些相似的方面某些相似的方面( (共性共性) )。2021-11-16河南理工大学Page 29把这些相似的方面集中和概括起来,把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。暂时忽略它们之间的差异,这就是抽象。或者说抽象就是抽出事物的或者说抽象就是抽出事物的本质特性而暂本质特性而暂时不考虑它们的细节。时不考虑它们的细节。2021-11-16河南理工大学Page 30 4.2.3 4.2.3 逐步求精逐步求精 逐步求精是人类解决复杂问题时采用逐步求精是人类解决复杂问题时采用的基本技术,也是许多软件工程

16、技术的基本技术,也是许多软件工程技术( (例如,例如,规格说明技术,设计和实现技术、测试和规格说明技术,设计和实现技术、测试和集成技术集成技术) )的基础。的基础。2021-11-16河南理工大学Page 31可以把逐步求精定义为:可以把逐步求精定义为:“为了能集为了能集中精力解决主要问题而尽量推迟对问题细中精力解决主要问题而尽量推迟对问题细节的考虑。节的考虑。”2021-11-16河南理工大学Page 32求精实际上是细化过程。从在高抽象求精实际上是细化过程。从在高抽象级别定义的功能陈述级别定义的功能陈述( (或信息描述或信息描述) )开始。开始。也就是说,该陈述仅仅概念性地描述了功也就是说

17、,该陈述仅仅概念性地描述了功能或信息,但是并没有提供功能的内部工能或信息,但是并没有提供功能的内部工作情况或信息的内部结构。作情况或信息的内部结构。2021-11-16河南理工大学Page 33求精要求设计者细化原始陈述,随着求精要求设计者细化原始陈述,随着每个后续求精每个后续求精( (细化细化) )步骤的完成而提供越步骤的完成而提供越来越多的细节。来越多的细节。2021-11-16河南理工大学Page 34l抽象与求精是一对互补的概念抽象与求精是一对互补的概念l抽象使得设计者能够说明过程和数据,同抽象使得设计者能够说明过程和数据,同时却忽略低层细节时却忽略低层细节l求精则帮助设计者在设计过程

18、中揭示出低求精则帮助设计者在设计过程中揭示出低层细节。层细节。l这两个概念都有助于设计者在这两个概念都有助于设计者在设计演化过设计演化过程中创造出完整的设计模型程中创造出完整的设计模型2021-11-16河南理工大学Page 35 4.2.4 4.2.4 信息隐藏信息隐藏 应用模块化原理时,自然会产生的一应用模块化原理时,自然会产生的一个问题是:个问题是:“为了得到最好的一组模块,为了得到最好的一组模块,应该怎样分解软件应该怎样分解软件”。2021-11-16河南理工大学Page 36信息隐藏原理指出:应该这样设计和信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息确定模块,使

19、得一个模块内包含的信息( (过过程程和数据和数据)对于不需要这些信息的模块来说,对于不需要这些信息的模块来说,是不能访问的。是不能访问的。2021-11-16河南理工大学Page 37“模块独立模块独立”概念是模块化、抽象、概念是模块化、抽象、逐步求精和信息隐藏等概念的直接结果,逐步求精和信息隐藏等概念的直接结果,也是完成有效的模块设计的基本标准。也是完成有效的模块设计的基本标准。 l开发具有独立功能且和其他模块之间没有过多开发具有独立功能且和其他模块之间没有过多相互作用的模块,就可以做到模块独立相互作用的模块,就可以做到模块独立l模块独立的原因:模块独立的原因: 容易合作开发容易合作开发 容

20、易测试和维护容易测试和维护2021-11-16河南理工大学Page 382021-11-16河南理工大学Page 39l模块的独立程度可以由两个定性标准来度模块的独立程度可以由两个定性标准来度量,这两个标准分别称为量,这两个标准分别称为内聚内聚和和耦合耦合l耦合耦合衡量不同模块彼此间互相依赖衡量不同模块彼此间互相依赖( (连接连接) )的紧密程度的紧密程度l内聚内聚衡量一个模块内部各个元素彼此结合衡量一个模块内部各个元素彼此结合的紧密程度的紧密程度2021-11-16河南理工大学Page 40 4.3.1 4.3.1 耦合耦合 耦合是对一个软件结构内不同模块之耦合是对一个软件结构内不同模块之间

21、互连程度的度量。耦合强弱取决于模块间间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。以及通过接口的数据。 2021-11-16河南理工大学Page 41在软件设计中应该追求尽可能在软件设计中应该追求尽可能松散耦松散耦合的系统合的系统。在这样的系统中可以研究、测。在这样的系统中可以研究、测试或维护任何一个模块,而不需要对系统试或维护任何一个模块,而不需要对系统的其他模块有很多了解。的其他模块有很多了解。2021-11-16河南理工大学Page 42此外,由于模块间联系简单,发生在此外,由于模块间联系简单,发

22、生在一处的错误传播到整个系统的可能性就很一处的错误传播到整个系统的可能性就很小。因此,模块间的耦合程度强烈影响系小。因此,模块间的耦合程度强烈影响系统的可理解统的可理解性、可测试性、可靠性和可维性、可测试性、可靠性和可维护性。护性。l独立:两个模块每一个都能独立工作而不需要另外一个独立:两个模块每一个都能独立工作而不需要另外一个模块的存在模块的存在l数据耦合:两个模块彼此间通过参数交换信息,且交换数据耦合:两个模块彼此间通过参数交换信息,且交换的仅仅是数据(的仅仅是数据(低耦合低耦合)l控制耦合:交换控制信息控制耦合:交换控制信息2021-11-16河南理工大学Page 43sum(int a

23、,int b)int c;c=a+b;return(c);main()int x,y;.printf(x+y=%d,sum(x,y);主函数与主函数与sum函数之间即为数据函数之间即为数据耦合关系耦合关系2021-11-16河南理工大学Page 44void output(flag)if(flag)printf(OK!);else printf(NO!);main()int flag;.output(flag);主函数与主函数与output函数之间即为控制函数之间即为控制耦合关系耦合关系.2021-11-16河南理工大学Page 45l公共环境耦合:当两个或多个模块通过一个公共数据环公共环境耦

24、合:当两个或多个模块通过一个公共数据环境相互作用境相互作用 一个模块存储数据,一个模块取数据(比较松散的耦合)一个模块存储数据,一个模块取数据(比较松散的耦合) 两个模块既存储数据,又取数据(介于数据耦合和控制耦合)两个模块既存储数据,又取数据(介于数据耦合和控制耦合)l内容耦合内容耦合:(避免):(避免) 一个模块访问另外一个模块的内部数据一个模块访问另外一个模块的内部数据 一个模块不通过正常入口而转到另外一个模块的内部一个模块不通过正常入口而转到另外一个模块的内部 两个模块有一部分程序代码重叠(汇编语言)两个模块有一部分程序代码重叠(汇编语言) 一个模块有多个入口一个模块有多个入口 202

25、1-11-16河南理工大学Page 462021-11-16河南理工大学Page 47总之,耦合是影响软件复杂程度的一个总之,耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则:重要因素。应该采取下述设计原则:2021-11-16河南理工大学Page 48 4.3.2 4.3.2 内聚内聚 内聚标志一个模块内各个元素彼此结内聚标志一个模块内各个元素彼此结合的紧密程度,它是合的紧密程度,它是信息隐蔽信息隐蔽和和局部化局部化概念概念的自然扩展。的自然扩展。 简单地说,理想内聚的模块只做一件简单地说,理想内聚的模块只做一件事情。事情。 2021-11-16河南理工大学Page 49l设计时应

26、该力求做到高内聚,设计时应该力求做到高内聚,l通常中等程度的内聚也是可以采用的,而通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;且效果和高内聚相差不多;l但是,低内聚很坏,不要使用。但是,低内聚很坏,不要使用。2021-11-16河南理工大学Page 50 内聚和耦合是密切相关的,模块内的内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。高内聚往往意味着模块间的松耦合。 内聚和耦合都是进行模块化设计的有内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应该力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度把更多注意力集中到提高模块

27、的内聚程度上。上。 l低内聚:低内聚: 偶然内聚偶然内聚模块完成一组任务,任务之间彼此没什么关系模块完成一组任务,任务之间彼此没什么关系 逻辑内聚逻辑内聚完成的任务在逻辑上相同或相似完成的任务在逻辑上相同或相似 时间内聚时间内聚包含的任务必须在同一时间段执行包含的任务必须在同一时间段执行l中内聚中内聚 过程内聚过程内聚模块内的处理元素相关,且必须以特定次序执模块内的处理元素相关,且必须以特定次序执行行 通信内聚通信内聚模块中所有元素都使用同一个输入数据和(或模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据)产生同一个输出数据2021-11-16河南理工大学Page 51l高内聚高内

28、聚 顺序内聚:模块内的处理元素和同一个功能密切相关,且必须顺序内聚:模块内的处理元素和同一个功能密切相关,且必须顺序执行顺序执行 功能内聚:模块内所以元素属于一个整体,完成一个单一的功功能内聚:模块内所以元素属于一个整体,完成一个单一的功能能2021-11-16河南理工大学Page 52 定义:定义:若一个模块由多个完成不同任务的语句段组成若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。,则称此模块的内聚为偶然内聚。 在模块在模块T有三条语句。至少从表面上看不出这三条语句有三条语句

29、。至少从表面上看不出这三条语句之间有什么联系,只是由于之间有什么联系,只是由于P,Q,R,S四个模块中都有四个模块中都有这三条语句,为了节省空间才把它们作为一个模块放在这三条语句,为了节省空间才把它们作为一个模块放在一起。这完全是偶然性的。一起。这完全是偶然性的。2021-11-16河南理工大学Page 53 定义:定义:这种模块是把几种功能组合在一起,每次调用这种模块是把几种功能组合在一起,每次调用时,则由传递给模块的判定参数来确定该模块应执行时,则由传递给模块的判定参数来确定该模块应执行哪一种功能哪一种功能 一个子程序将打印季度开支报告、月份开支报告一个子程序将打印季度开支报告、月份开支报

30、告和日开支报告具体打印哪一个,将由传入的控制标和日开支报告具体打印哪一个,将由传入的控制标志决定,这个子程序具有逻辑内聚性,因为它的内部志决定,这个子程序具有逻辑内聚性,因为它的内部逻辑是由输进去的外部控制标志决定的逻辑是由输进去的外部控制标志决定的。2021-11-16河南理工大学Page 54 定义:定义:若一个模块包含了需要在同一时间段中执行的若一个模块包含了需要在同一时间段中执行的多个任务,则称该模块的内聚为时间内聚多个任务,则称该模块的内聚为时间内聚 将多个变量的初始化放在同一个模块中实现,或将将多个变量的初始化放在同一个模块中实现,或将需要同时使用的多个库文件的打开操作放在同一个模

31、需要同时使用的多个库文件的打开操作放在同一个模块中,都会产生时间内聚的模块。块中,都会产生时间内聚的模块。2021-11-16河南理工大学Page 55 定义:定义:若一个模块中的各个部分相关,并且必须按特若一个模块中的各个部分相关,并且必须按特定的次序执行,则称该模块的内聚为过程内聚定的次序执行,则称该模块的内聚为过程内聚 假设有一个子程序,它产生读取雇员的名字,然假设有一个子程序,它产生读取雇员的名字,然后是地址,最后是它的电话号码。这种顺序之所以重后是地址,最后是它的电话号码。这种顺序之所以重要,仅仅是因为它符合用户的要求,用户希望按这种要,仅仅是因为它符合用户的要求,用户希望按这种顺序

32、进行屏幕输入。另外一个子程序将读取关于雇员顺序进行屏幕输入。另外一个子程序将读取关于雇员的其它信息。的其它信息。 这个子程序是过程内聚,因为是由一个特定顺序而这个子程序是过程内聚,因为是由一个特定顺序而不是其它任何原因,把这些操作组合在一起的。不是其它任何原因,把这些操作组合在一起的。2021-11-16河南理工大学Page 56 定义:定义:若一个模块中的各个部分使用同一个输入数据若一个模块中的各个部分使用同一个输入数据或产生同一个输出数据,则称该模块的内聚为通信内或产生同一个输出数据,则称该模块的内聚为通信内聚聚 比如有一个打印总结报告,并在完成后重新初始化比如有一个打印总结报告,并在完成

33、后重新初始化传进来的总结数据的子程序,这个子程序具有通信内传进来的总结数据的子程序,这个子程序具有通信内聚性,因为这两个操作仅仅是由于它们使用了相同的聚性,因为这两个操作仅仅是由于它们使用了相同的数据才联系在一起。数据才联系在一起。2021-11-16河南理工大学Page 57 定义:定义:若一个模块中的各个部分都与同一个功能密切若一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后顺序执行相关,并且必须按照先后顺序执行(通常前一个部分的通常前一个部分的输出数据就是后一个部分的输入数据输出数据就是后一个部分的输入数据),则称该模块的,则称该模块的内聚为顺序内聚内聚为顺序内聚 假设有一个

34、按给出的生日计算雇员年龄、退休时间假设有一个按给出的生日计算雇员年龄、退休时间的子程序,如果它是利用所计算的年龄来确定雇员将的子程序,如果它是利用所计算的年龄来确定雇员将要退休的时间,那么它就具有顺序内聚性。要退休的时间,那么它就具有顺序内聚性。 而如果它是分别计算年龄和退休时间的,但使用而如果它是分别计算年龄和退休时间的,但使用相同生日数据,那它就只具有通讯内聚性。相同生日数据,那它就只具有通讯内聚性。2021-11-16河南理工大学Page 58 比如计算雇员年龄的子程序就是功能内聚性的。比如计算雇员年龄的子程序就是功能内聚性的。 /* * 功能内聚性例子功能内聚性例子 * 根据出生年份得

35、出年龄根据出生年份得出年龄 */ #include #include void GetAge() int BirthYear = 0; int Age = 0; printf(%s, 请输入出生年份请输入出生年份:); scanf(%d, &BirthYear); time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); Age = timeinfo -tm_year + 1900 - BirthYear; printf(您的年龄是您的年龄是:%

36、d岁岁n, Age); 2021-11-16河南理工大学Page 592021-11-16河南理工大学Page 60 没有必要精确确定内聚的级别。重要的是没有必要精确确定内聚的级别。重要的是设计时力争做到高内聚,并且能够辨认出低设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块内聚的模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获的内聚程度降低模块间的耦合程度,从而获得得较高的模块独立性。较高的模块独立性。2021-11-16河南理工大学Page 61 软件工程师们在开发计算机软件的长软件工程师们在开发计算机软件的长期实践中积累了丰富的经验,总结

37、这些经期实践中积累了丰富的经验,总结这些经验得出了一些启发规则。验得出了一些启发规则。2021-11-16河南理工大学Page 62 这些启发规则虽然不像前两节讲述的这些启发规则虽然不像前两节讲述的基本原理那样普遍适用,但是在许多场合基本原理那样普遍适用,但是在许多场合仍然能给软件工程师有益的启示,往往能仍然能给软件工程师有益的启示,往往能帮助他们找到改进软件设计提高软件质量帮助他们找到改进软件设计提高软件质量的途径,因的途径,因此有助于实现有效的模块化。此有助于实现有效的模块化。下面介绍几条常用的启发规则。下面介绍几条常用的启发规则。2021-11-16河南理工大学Page 631.1.改进

38、软件结构提高模块独立性改进软件结构提高模块独立性 通过模块分解或合并,提高模块内聚程度,降低模块间的耦合通过模块分解或合并,提高模块内聚程度,降低模块间的耦合2.2.模块规模应该适中模块规模应该适中 不宜过大:超过不宜过大:超过3030行语句,可理解程度迅速下降行语句,可理解程度迅速下降 不宜过小:系统接口复杂不宜过小:系统接口复杂3.3.深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当2021-11-16河南理工大学Page 64深度深度:软件结构中控制的层数;:软件结构中控制的层数;宽度宽度:软件结构内同一个层次上的模块总数的最大值;:软件结构内同一个层次上的模块总数的最大值;

39、扇出扇出:一个模块直接控制(调用)其它模块的数目;:一个模块直接控制(调用)其它模块的数目;扇入扇入:一个模块被其它模块调用的数目。:一个模块被其它模块调用的数目。 正文加工正文加工系统系统输入输入输出输出编辑编辑加标题加标题存储存储检索检索编目录编目录格式化格式化添加添加删除删除插入插入修改修改合并合并列表列表对扇出、扇入过大的改进:对扇出、扇入过大的改进: 2021-11-16河南理工大学Page 65(a)对扇入过大的改进对扇入过大的改进(b)对扇出过大的改进对扇出过大的改进2021-11-16河南理工大学Page 664.4.模块的作用域应该在控制域之内模块的作用域应该在控制域之内作用

40、域:受该模块内一个判定影响的所有模块的集合作用域:受该模块内一个判定影响的所有模块的集合控制域:直接或间接从属于该模块的模块集合控制域:直接或间接从属于该模块的模块集合MAGBCEDF图图4.3 模块的作用域和控制域模块的作用域和控制域5.5.力争降低模块接口的复杂程度力争降低模块接口的复杂程度 信息传递简单且和模块的功能一致信息传递简单且和模块的功能一致2021-11-16河南理工大学Page 67 如:如:QUAD-ROOT(TBL,X)求一元二次方程的根的模块,其中求一元二次方程的根的模块,其中TBL,X都为数组,分别代表方都为数组,分别代表方程的系数和方程的根。程的系数和方程的根。应该

41、使接口更简单,如:应该使接口更简单,如: QUAD-ROOT(A,B,C,ROOT1,ROOT2)A、B、C是方程的系数,是方程的系数,ROOT1,ROOT2是方程的根是方程的根。 2021-11-16河南理工大学Page 686.6.设计单入口单出口的模块设计单入口单出口的模块 防止内容耦合防止内容耦合7.7.模块功能应该可以预测模块功能应该可以预测2021-11-16河南理工大学Page 694.5.1 4.5.1 层次图和层次图和HIPOHIPO图图 通常使用层次图描绘软件的层次结构。通常使用层次图描绘软件的层次结构。在图在图4.34.3中已经非正式地使用了层次图。中已经非正式地使用了层

42、次图。2021-11-16河南理工大学Page 70在层次图中一个矩形框代表一个模块,在层次图中一个矩形框代表一个模块,框间的连线表示调用关系框间的连线表示调用关系( (位于上方的矩形位于上方的矩形框所代表的模块调用框所代表的模块调用位于下方的矩形框所位于下方的矩形框所代表的模块代表的模块)。2021-11-16河南理工大学Page 71图图4.4 4.4 正文加工系统的层次图正文加工系统的层次图2021-11-16河南理工大学Page 72lHIPOHIPO图是美国图是美国IBMIBM公司发明的公司发明的“层次图加层次图加输入输入/ /处理处理/ /输出图输出图”的英文缩写。的英文缩写。l为

43、了使为了使HIPOHIPO图具有可追踪性,在图具有可追踪性,在H H图图( (即层即层次图次图) )里除了顶层的方框之外,每个方框都里除了顶层的方框之外,每个方框都加了编号。加了编号。2021-11-16河南理工大学Page 73编号方法与本书第编号方法与本书第3 3章章3.5.23.5.2节中介绍节中介绍的数据流图的编号方法相同,例如,把图的数据流图的编号方法相同,例如,把图4 44 4加了编号之后得到加了编号之后得到图图4.5。2021-11-16河南理工大学Page 74图图4.5 4.5 正文加工系统的正文加工系统的H H图图2021-11-16河南理工大学Page 75图图4.6 I

44、PO4.6 IPO图的一个例子图的一个例子2021-11-16河南理工大学Page 76图图4.7 4.7 改进的改进的IPOIPO图图(IPO(IPO表表) )的形式的形式2021-11-16河南理工大学Page 774.5.2 4.5.2 结构图结构图 YourdonYourdon提出的结构图是进行软件结构提出的结构图是进行软件结构设计的另一个有力工具。设计的另一个有力工具。2021-11-16河南理工大学Page 78结构图和层次图类似,也是描绘软件结构图和层次图类似,也是描绘软件结构的图形工具,图中一个方框代表一个结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字或主要功能;

45、模块,框内注明模块的名字或主要功能;方框之间的箭头方框之间的箭头(或直线或直线)表示模块的调用表示模块的调用关系。关系。2021-11-16河南理工大学Page 79在结构图中通常还用带注释的箭头表在结构图中通常还用带注释的箭头表示模块调用过程中来回传递的信息。示模块调用过程中来回传递的信息。2021-11-16河南理工大学Page 80如果希望进一步标明传递的信息是数如果希望进一步标明传递的信息是数据还是控制信息,则可以利用注释箭头尾据还是控制信息,则可以利用注释箭头尾部的形状来区分:尾部是空心圆表示传递部的形状来区分:尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。的是数据,实心

46、圆表示传递的是控制信息。图图4.84.8是结构图的一个例子。是结构图的一个例子。2021-11-16河南理工大学Page 81图图4.8 4.8 结构图的例子结构图的例子产生产生2021-11-16河南理工大学Page 82图图4.9 4.9 判定为真时调用判定为真时调用A A,为假时调用,为假时调用B B2021-11-16河南理工大学Page 83图图4.10 4.10 模块模块M M循环调用模块循环调用模块A A,B B,C C2021-11-16河南理工大学Page 84面向数据流的设计方法的目标是给出面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。设计软件结构的一个系

47、统化的途径。 2021-11-16河南理工大学Page 85在软件工程的需求分析阶段,信息流在软件工程的需求分析阶段,信息流是一个关键考虑因素,通常用数据流图描是一个关键考虑因素,通常用数据流图描绘信息在系统中加工和流动的情况。绘信息在系统中加工和流动的情况。2021-11-16河南理工大学Page 86面向数据流的设计方法定义了一些不面向数据流的设计方法定义了一些不同的同的“映射映射”,利用这些映射可以把,利用这些映射可以把数据数据流图流图变换成变换成软件结构软件结构。2021-11-16河南理工大学Page 87因为任何软件系统都可以用数据流图因为任何软件系统都可以用数据流图表示,所以面向

48、数据流的设计方法理论上表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。通常所说的结可以设计任何软件的结构。通常所说的结构化设计方法,也就是基于数构化设计方法,也就是基于数据流的设计据流的设计方法。方法。2021-11-16河南理工大学Page 884.6.1 4.6.1 概念概念 面向数据流的设计方法把信息流映射面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的成软件结构,信息流的类型决定了映射的方法。信息流有下述两种类型。方法。信息流有下述两种类型。 2021-11-16河南理工大学Page 891. 1. 变换流变换流2. 2. 事务流事务流2021-11-1

49、6河南理工大学Page 90信息沿输入通路进入系统,同时由外信息沿输入通路进入系统,同时由外部形式变换成内部形式。进入系统的信息部形式变换成内部形式。进入系统的信息通过变换中心,经加工处理以后再沿输出通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫据流图具有这些特征时,这种信息流就叫做做变换流变换流。2021-11-16河南理工大学Page 91图图4.11 4.11 变换流变换流2021-11-16河南理工大学Page 92原则上所有信息流都可以归结为变换原则上所有信息流都可以归结为变换流。流。但

50、是,当数据沿输入通路到达一个处但是,当数据沿输入通路到达一个处理理T,这个处理根据输入数据的类型在若,这个处理根据输入数据的类型在若干个动作序列中选出来一个来执行时,这干个动作序列中选出来一个来执行时,这类数据流应该划分为一类特殊的数据流,类数据流应该划分为一类特殊的数据流,称为称为事务流事务流。2021-11-16河南理工大学Page 93图图4.12 4.12 事务流事务流2021-11-16河南理工大学Page 94处理处理T称为事务中心,它完成下述任务:称为事务中心,它完成下述任务:接收输入数据(输入数据又称为事接收输入数据(输入数据又称为事务);务);分析每个事物以确定它的类型;分析

51、每个事物以确定它的类型;根据事物类型选取一条活动通路。根据事物类型选取一条活动通路。2021-11-16河南理工大学Page 95图图4.13 4.13 面向数据流方法的设计过程面向数据流方法的设计过程2021-11-16河南理工大学Page 96 4.6.2 4.6.2 变换分析变换分析 变换分析是一系列设计步骤的总称,经变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。下面通过预先确定的模式映射成软件结构。下面通过一个例子说明变换分析的方法。一个例子说明变换分析的方法。1. 1. 例子例子汽车的数字仪

52、表板汽车的数字仪表板2021-11-16河南理工大学Page 972. 2. 设计步骤设计步骤(1) 复查基本系统模型。复查基本系统模型。(2) 复查并精化数据流图。复查并精化数据流图。(3) 确定数据流图具有变换特性还是事确定数据流图具有变换特性还是事务特性。务特性。(4) 确定输入流和输出流的边界,从而确定输入流和输出流的边界,从而孤立出变换中心。孤立出变换中心。2021-11-16河南理工大学Page 98图图4.14 4.14 数字仪表板系统的数据流图数字仪表板系统的数据流图2021-11-16河南理工大学Page 99图图4.15 4.15 具有边界的数据流图具有边界的数据流图202

53、1-11-16河南理工大学Page 100(5) (5) 完成完成“第一级分解第一级分解”软件结构代表对控制的自顶向下的分配,分解就是分配控制的过软件结构代表对控制的自顶向下的分配,分解就是分配控制的过程程图图4.164.16显示了第一级分解显示了第一级分解CmCm:最顶层的控制模块:最顶层的控制模块CaCa:输入信息处理控制模块,用于协同对所有输入数据的接受:输入信息处理控制模块,用于协同对所有输入数据的接受CtCt:变换中心控制模块,管理对内部形式的数据的所有操作:变换中心控制模块,管理对内部形式的数据的所有操作CeCe:输出信息处理控制模块,协调输出信息的产生过程:输出信息处理控制模块,

54、协调输出信息的产生过程 2021-11-16河南理工大学Page 101图图4.16 4.16 第一级分解的方法第一级分解的方法2021-11-16河南理工大学Page 102图图4.15 4.15 具有边界的数据流图具有边界的数据流图2021-11-16河南理工大学Page 103图图4.17 4.17 数字仪表板系统的第一级分解数字仪表板系统的第一级分解2021-11-16河南理工大学Page 104(6) (6) 完成完成“第二级分解第二级分解”。第二级分解第二级分解是把数据流图中的每个处理映射成软件结构中的一个适当的模块是把数据流图中的每个处理映射成软件结构中的一个适当的模块方法:方法

55、:从变换中心的边界沿着输入通路向外移动,把输入通路中每个处从变换中心的边界沿着输入通路向外移动,把输入通路中每个处理映射成软件结构理映射成软件结构CaCa控制下的一个低层模块;控制下的一个低层模块;沿着输出通路向外移动,把输出通路中每个处理映射成直接或间沿着输出通路向外移动,把输出通路中每个处理映射成直接或间接受接受CeCe控制的一个低层模块;控制的一个低层模块;最后把变换中心内的每个处理映射成受最后把变换中心内的每个处理映射成受CtCt控制的一个模块控制的一个模块2021-11-16河南理工大学Page 105图图4.18 4.18 第二级分解的方法第二级分解的方法2021-11-16河南理

56、工大学Page 106图图4.15 4.15 具有边界的数据流图具有边界的数据流图2021-11-16河南理工大学Page 107图图4.17 4.17 数字仪表板系统的第一级分解数字仪表板系统的第一级分解2021-11-16河南理工大学Page 108图图4.19 4.19 未经精化的输入结构未经精化的输入结构2021-11-16河南理工大学Page 109图图4.20 4.20 未经精化的变换结构未经精化的变换结构2021-11-16河南理工大学Page 110图图4.21 4.21 未经精化的输出结构未经精化的输出结构2021-11-16河南理工大学Page 111(7) (7) 使用设

57、计度量和启发规则对第一使用设计度量和启发规则对第一次分割得到的软件结构进一步精化。次分割得到的软件结构进一步精化。2021-11-16河南理工大学Page 112图图4.224.22精化后的数字仪表板系统的软件结构精化后的数字仪表板系统的软件结构2021-11-16河南理工大学Page 113上述七个设计步骤的目的是,开发出上述七个设计步骤的目的是,开发出软件的整体表示。也就是说,一旦确定了软件的整体表示。也就是说,一旦确定了软件结构就可以把它作为一个整体来复查,软件结构就可以把它作为一个整体来复查,从而能够评价和精化软件结构。在这个时从而能够评价和精化软件结构。在这个时期进行修改只需要很期进

58、行修改只需要很少的附加工作,但是少的附加工作,但是却能够对软件的质量特别是软件的可维护却能够对软件的质量特别是软件的可维护性产生深远的影响。性产生深远的影响。2021-11-16河南理工大学Page 114 4.6.3 4.6.3 事务分析事务分析 虽然在任何情况下都可以使用变换分虽然在任何情况下都可以使用变换分析方法设计软件结构,但是在数据流具有析方法设计软件结构,但是在数据流具有明显的事务特点时,也就是有一个明显的明显的事务特点时,也就是有一个明显的“发射中心发射中心”( (事务中心事务中心) )时,还是以采用时,还是以采用事务分析方法为宜。事务分析方法为宜。2021-11-16河南理工大

59、学Page 115 事务分析的设计步骤和变换分析的设事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在计步骤大部分相同或类似,主要差别仅在于由数据流图于由数据流图到软件结构的映射方法不同。到软件结构的映射方法不同。 2021-11-16河南理工大学Page 116 对于一个大系统,常常把变换分析和对于一个大系统,常常把变换分析和事务分析应用到同一个数据流图的不同部事务分析应用到同一个数据流图的不同部分,由此得到的子结构形成分,由此得到的子结构形成“构件构件”,可,可以利用它们构造完整的软件结构。以利用它们构造完整的软件结构。2021-11-16河南理工大学Page 117事务

60、设计的基本方法有两步:事务设计的基本方法有两步: 1)建立主控模块、接收输入类型分析)建立主控模块、接收输入类型分析模块和事务调度模块;模块和事务调度模块;主模块主模块调度调度输入类型分析输入类型分析2021-11-16河南理工大学Page 1182)分别设计输入类型分析模块和调度模块的下)分别设计输入类型分析模块和调度模块的下层模块结构。层模块结构。 方法是:将输出的每条通路作为调度模块的方法是:将输出的每条通路作为调度模块的一个判断分支,而输入类型分析模块的下层模块一个判断分支,而输入类型分析模块的下层模块与变换设计类似。与变换设计类似。 2021-11-16河南理工大学Page 119I2I3I1TCA1B1

温馨提示

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

评论

0/150

提交评论