软件工程课件:第5章总体设计

上传人:努力****83 文档编号:192647578 上传时间:2023-03-07 格式:PPT 页数:92 大小:682.50KB
收藏 版权申诉 举报 下载
软件工程课件:第5章总体设计_第1页
第1页 / 共92页
软件工程课件:第5章总体设计_第2页
第2页 / 共92页
软件工程课件:第5章总体设计_第3页
第3页 / 共92页
资源描述:

《软件工程课件:第5章总体设计》由会员分享,可在线阅读,更多相关《软件工程课件:第5章总体设计(92页珍藏版)》请在装配图网上搜索。

1、1/92第第5章章 总体设计总体设计5.1 设计过程设计过程5.2 设计原理设计原理5.3 启发规则启发规则5.4 描绘软件结构的图形工具描绘软件结构的图形工具5.5 面向数据流的设计方法面向数据流的设计方法5.6 小结小结2/92 总体设计的基本目的就是回答总体设计的基本目的就是回答“概括地说,概括地说,系统应该如何实现系统应该如何实现?”这个问题,因此,总体设计这个问题,因此,总体设计又称为概要设计或初步设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物通过这个阶段的工作将划分出组成系统的物理元素理元素程序、文件、数据库、人工过程和文程序、文件、数据库、人工过程和文档等等

2、,但是每个物理元素仍然处于档等等,但是每个物理元素仍然处于黑盒子级黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。这些黑盒子里的具体内容将在以后仔细设计。总体设计阶段的另一项重要任务是设计软件总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个的结构,也就是要确定系统中每个程序是由哪些程序是由哪些模块组成的模块组成的,以及这些模块相互间的关系。,以及这些模块相互间的关系。3/92 根据需求分析阶段得到的数据流图,设想各种根据需求分析阶段得到的数据流图,设想各种可能的方案可能的方案。然后分析员从这些方案中选取若干个合理方案,然后分析员从这些方案中选取若干个合理方案,为每个合理方

3、案都准备一份系统流程图,列出组为每个合理方案都准备一份系统流程图,列出组成系统的所有物理元素,进行成本成系统的所有物理元素,进行成本/效益分析。效益分析。分析员再综合分析这些合理的方案,从中选出分析员再综合分析这些合理的方案,从中选出一个最佳方案向用户推荐。一个最佳方案向用户推荐。如果用户接受了推荐的方案,分析员应该进一如果用户接受了推荐的方案,分析员应该进一步为其设计软件结构,进行必要的数据库设计,步为其设计软件结构,进行必要的数据库设计,确定测试要求并且制定测试计划。确定测试要求并且制定测试计划。4/92总体设计的必要性总体设计的必要性:可以站在全局高度上,花较少成本,从较抽象可以站在全局

4、高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。而用较低成本开发出较高质量的软件系统。5/92总体设计过程通常由两个主要阶段组成:总体设计过程通常由两个主要阶段组成:系统设计系统设计阶段,确定系统的具体实现方案;阶段,确定系统的具体实现方案;结构设计结构设计阶段,确定软件结构。阶段,确定软件结构。典型的总体设计过程包括下述典型的总体设计过程包括下述9个步骤:个步骤:1.设想供选择的方案设想供选择的方案考

5、虑各种可能的实现方案,并且力求从中选出最佳考虑各种可能的实现方案,并且力求从中选出最佳方案。在总体设计阶段开始时只有系统的逻辑模型,方案。在总体设计阶段开始时只有系统的逻辑模型,分析员有充分的自由分析比较不同的物理实现方案,分析员有充分的自由分析比较不同的物理实现方案,一旦选出了最佳的方案,将能大大提高系统的性能一旦选出了最佳的方案,将能大大提高系统的性能/价格比。价格比。5.1 设计过程设计过程6/922.选取合理的方案选取合理的方案从前一步得到的一系列供选择的方案中选取若干个从前一步得到的一系列供选择的方案中选取若干个合理的方案,通常至少选取低成本、中等成本和高合理的方案,通常至少选取低成

6、本、中等成本和高成本的成本的三种方案三种方案。对每个合理的方案分析员都应该准备下列对每个合理的方案分析员都应该准备下列4份资料:份资料:(1)系统流程图;系统流程图;(2)组成系统的物理元素清单;组成系统的物理元素清单;(3)成本成本/效益分析;效益分析;(4)实现这个系统的进度计划。实现这个系统的进度计划。7/923.推荐最佳方案推荐最佳方案分析员应该综合分析对比各种合理方案的利弊,推分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。实现计划。用户和有关的技术专家应该认真审查分析员所推荐用户和有关的技

7、术专家应该认真审查分析员所推荐的最佳系统。的最佳系统。在使用部门的负责人也接受了分析员所推荐的方案在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段之后,将进入总体设计过程的下一个重要阶段结构设计。结构设计。8/924.功能分解功能分解为了最终实现目标系统,必须设计出组成这个系为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件统的所有程序和文件(或数据库或数据库)。9/925.设计软件结构设计软件结构 通常程序中的一个模块完成一个适当的子通常程序中的一个模块完成一个适当的子功能。功能。应该把模块组织成良好的层次系统应该把模块组织成良好的层次系统,顶,

8、顶层模块调用它的下层模块以实现程序的完整功层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,最下能,每个下层模块再调用更下层的模块,最下层的模块完成最具体的功能。层的模块完成最具体的功能。软件结构软件结构(即由模块组成的层次系统即由模块组成的层次系统)可以用层可以用层次图或结构图来描绘。次图或结构图来描绘。10/926.设计数据库设计数据库 对于需要使用数据库的那些应用系统,对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。统数据需求的基础上,进一步设计数据库。7.制定测

9、试计划制定测试计划 在软件开发的早期阶段考虑测试问题,在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件能促使软件设计人员在设计时注意提高软件的可测试性。的可测试性。11/928.书写文档书写文档 总体设计的结果总体设计的结果这个阶段应完成的文档:这个阶段应完成的文档:(1)系统说明:包括用系统流程图描绘的系统构成系统说明:包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本方案,组成系统的物理元素清单,成本/效益分析;效益分析;对最佳方案的概括描述,精化的数据流图,用层次对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用图或结构图描绘的

10、软件结构,用IPO图或其他工具图或其他工具描述的各个模块的算法,模块间的接口关系,以及描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。需求、功能和模块三者之间的交叉参照关系等等。(2)用户手册:根据总体设计阶段的结果,修改更用户手册:根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册正在需求分析阶段产生的初步的用户手册。12/92(3)测试计划:包括测试策略,测试方案,预期的测试计划:包括测试策略,测试方案,预期的测试结果,测试进度计划等等。测试结果,测试进度计划等等。(4)详细的实现计划详细的实现计划(5)数据库设计结果数据库设计结果9

11、.审查和复审审查和复审最后应该对总体设计的结果进行严格的最后应该对总体设计的结果进行严格的技术审查技术审查,在技术审查通过之后再由使用部门的负责人从管理在技术审查通过之后再由使用部门的负责人从管理角度进行复审。角度进行复审。13/92模块是由边界元素限定的相邻程序元素(例如,数模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体据说明,可执行的语句)的序列,而且有一个总体标识符代表它。标识符代表它。按照模块的定义,过程、函数、子程序和宏等,都按照模块的定义,过程、函数、子程序和宏等,都可作为模块。可作为模块。面向对象方法学中的对象是模块,对象内的方法面向对象

12、方法学中的对象是模块,对象内的方法(或称为服务)也是模块。(或称为服务)也是模块。模块是构成程序的基本构件。模块是构成程序的基本构件。5.2 设计原理设计原理 5.2.1 模块化模块化14/92模块化模块化就是把程序划分成独立命名且可独立访就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。功能满足用户的需求。有人说,模块化是为了使一个复杂的大型程序有人说,模块化是为了使一个复杂的大型程序能被人的智力所管理。如果一个大型程序仅由能被人

13、的智力所管理。如果一个大型程序仅由一个模块组成,它将很难被人所理解。一个模块组成,它将很难被人所理解。15/92设函数设函数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)这个不等式导致这个不等式导致“各个击破各个击破”的结论的结论把复杂把复

14、杂的问题分解成许多容易解决的小问题,原来的问的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。题也就容易解决了。这就是模块化的根据。16/92由上面的不等式似乎还能得出下述结论:如果无限由上面的不等式似乎还能得出下述结论:如果无限地分割软件,最后为了开发软件而需要的工作量也地分割软件,最后为了开发软件而需要的工作量也就小得可以忽略了。事实上,还有另一个因素在起就小得可以忽略了。事实上,还有另一个因素在起作用,从而使得上述结论不能成立。作用,从而使得上述结论不能成立。参看图参看图5.1,当模块数目增加时每个模块的规模将减,当模块数目增加时每个模块的规模将减小,开发单

15、个模块需要的成本小,开发单个模块需要的成本(工作量工作量)确实减少了;确实减少了;但是,设计模块间接口所需要的工作量将增加。但是,设计模块间接口所需要的工作量将增加。根据这两个因素,得出了图中的总成本曲线。每个根据这两个因素,得出了图中的总成本曲线。每个程序都相应地有一个最适当的模块数目程序都相应地有一个最适当的模块数目M,使得系,使得系统的开发成本最小。统的开发成本最小。17/92图图5.1 模块化和软件成本模块化和软件成本18/92模块化的好处:模块化的好处:1.采用模块化原理可以使软件结构清晰,不仅容采用模块化原理可以使软件结构清晰,不仅容易设计也易设计也容易阅读和理解容易阅读和理解。2

16、.因为程序错误通常局限在有关的模块及它们之因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件间的接口中,所以模块化使软件容易测试和调容易测试和调试试,因而有助于,因而有助于提高软件的可靠性提高软件的可靠性。3.因为变动往往只涉及少数几个模块,所以模块因为变动往往只涉及少数几个模块,所以模块化能够提高软件的化能够提高软件的可修改性可修改性。4.模块化也有助于软件开发工程的模块化也有助于软件开发工程的组织管理组织管理,一,一个复杂的大型程序可以由许多程序员分工编写个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的不同的模块,并且可以进一步分配技术熟练

17、的程序员编写困难的模块。程序员编写困难的模块。19/92人类在认识复杂现象的过程中使用的最强有力的思人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的中一定事物、状态或过程之间总存在着某些相似的方面方面(共性共性)。把这些相似的方面集中和概括起来,把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。暂时忽略它们之间的差异,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。它们的细节。5.2.2

18、 抽象抽象20/92逐步求精是人类解决复杂问题时采用的基本方法,逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设也是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础。可以把逐步求精定义为:计和实现技术)的基础。可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题为了能集中精力解决主要问题而尽量推迟对问题细节的考虑细节的考虑。”逐步求精之所以如此重要,是因为人类的认知过程逐步求精之所以如此重要,是因为人类的认知过程遵守遵守Miller法则:一个人在任何时候都只能把注意法则:一个人在任何时候都只能把注意力集中在(力集中在(72)个知

19、识块上。)个知识块上。5.2.3 逐步求精逐步求精21/92但是,在开发软件的过程中,软件工程师在一段时但是,在开发软件的过程中,软件工程师在一段时间内需要考虑的知识块数远远多于间内需要考虑的知识块数远远多于7。例如,一个。例如,一个程序通常不止使用程序通常不止使用7个数据,一个用户也往往有不个数据,一个用户也往往有不止止7个方面的需求。个方面的需求。逐步求精方法的强大作用就在于,它能帮助软件工逐步求精方法的强大作用就在于,它能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方程师把精力集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解决方案来说虽然是必要面上,而忽略那些对整体解决

20、方案来说虽然是必要的的。22/92抽象与求精是一对互补的概念。抽象与求精是一对互补的概念。抽象使得设计者能够说明过程和数据,同时却抽象使得设计者能够说明过程和数据,同时却忽略低层细节。事实上,可以把抽象看作是一忽略低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。而实现逐步求精的方法。求精则帮助设计者在设计过程中逐步揭示出低求精则帮助设计者在设计过程中逐步揭示出低层细节。层细节。这两个概念都有助于设计者在设计演化过程中这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。创造出完整的设计模型。23/

21、92信息隐藏原理信息隐藏原理:应该这样设计和确定模块,使得一:应该这样设计和确定模块,使得一个模块内包含的信息个模块内包含的信息(过程和数据过程和数据)对于不需要这些对于不需要这些信息的模块来说,是不能访问的。信息的模块来说,是不能访问的。局部化局部化:把一些关系密切的软件元素物理地放得彼把一些关系密切的软件元素物理地放得彼此靠近。在模块中使用局部数据元素是局部化的一此靠近。在模块中使用局部数据元素是局部化的一个例子。显然,个例子。显然,局部化有助于实现信息隐藏局部化有助于实现信息隐藏。5.2.4 信息隐藏和局部化信息隐藏和局部化24/92每个模块完成一个相对独立的特定子功能,并每个模块完成一

22、个相对独立的特定子功能,并且和其他模块之间的关系很简单且和其他模块之间的关系很简单。模块独立的概念是模块化、抽象、信息隐藏和模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。局部化概念的直接结果。开发具有独立功能而且和其他模块之间没有过开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。多的相互作用的模块,就可以做到模块独立。5.2.5 模块独立模块独立25/92模块的独立程度可以由两个标准度量:内聚和耦合。模块的独立程度可以由两个标准度量:内聚和耦合。耦合:耦合:衡量不同模块衡量不同模块彼此间彼此间互相依赖互相依赖(连接连接)的紧密的紧密程度。程度。内

23、聚:内聚:衡量一个衡量一个模块内部模块内部各个元素彼此结合的紧密各个元素彼此结合的紧密程度。程度。26/921.耦合耦合耦合是对一个软件结构内不同模块之间互连程度的耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。入或访问一个模块的点,以及通过接口的数据。27/92在软件设计中应该追求尽可能松散耦合的系统在软件设计中应该追求尽可能松散耦合的系统。在。在这样的系统中可以研究、测试或维护任何一个模块,这样的系统中可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多

24、了解。此外,由而不需要对系统的其他模块有很多了解。此外,由于模块间联系简单,发生在一处的错误传播到整个于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小。因此,系统的可能性就很小。因此,模块间的耦合程度强模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维烈影响系统的可理解性、可测试性、可靠性和可维护性。护性。如果两个模块中的每一个都能独立地工作而不需要如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们彼此完全独立,这意另一个模块的存在,那么它们彼此完全独立,这意味着模块间无任何连接,耦合程度最低。但是,在味着模块间无任何连接,耦合程度最低。但是,在一

25、个软件系统中不可能所有模块之间都没有任何连一个软件系统中不可能所有模块之间都没有任何连接。接。28/92如果两个模块彼此间通过参数交换信息,而且交换如果两个模块彼此间通过参数交换信息,而且交换的仅仅是数据,那么这种耦合称为的仅仅是数据,那么这种耦合称为数据耦合数据耦合。数据数据耦合是低耦合。系统中至少必须存在这种耦合:某耦合是低耦合。系统中至少必须存在这种耦合:某些模块的输出数据作为另一些模块的输入数据。些模块的输出数据作为另一些模块的输入数据。如果传递的信息中有控制信息如果传递的信息中有控制信息(尽管有时这种信息尽管有时这种信息以数据的形式出现以数据的形式出现),则这种耦合称为,则这种耦合称

26、为控制耦合控制耦合。控制耦合是中等程度的耦合,它增加了系统的复杂控制耦合是中等程度的耦合,它增加了系统的复杂程度。在把模块适当分解之后通常可以用数据耦合程度。在把模块适当分解之后通常可以用数据耦合代替它。代替它。29/92 当把整个数据结构作为参数传递而被调用的模当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现块只需要使用其中一部分数据元素时,就出现了了特征耦合特征耦合:被调用的模块:被调用的模块可以使用的数据多可以使用的数据多于它确实需要的数据于它确实需要的数据,这将导致对数据的访问,这将导致对数据的访问失去控制,从而给计算机犯罪提供了机会。失去控制,从而给计

27、算机犯罪提供了机会。30/92当两个或多个模块通过一个公共数据环当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为境相互作用时,它们之间的耦合称为公公共环境耦合共环境耦合。公共环境可以是全程变量、共享的通信公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。上的文件、物理设备等等。31/92最高程度的耦合是最高程度的耦合是内容耦合内容耦合。如果出现下列情况。如果出现下列情况之一,两个模块间就发生了内容耦合:之一,两个模块间就发生了内容耦合:u一个模块访问另一个模块的内部数据;一个模块访问另一个模块的内部数

28、据;u一个模块不通过正常入口而转到另一个模块的一个模块不通过正常入口而转到另一个模块的内部;内部;u两个模块有一部分程序代码重叠两个模块有一部分程序代码重叠(只可能出现在只可能出现在汇编程序中汇编程序中);u一个模块有多个入口一个模块有多个入口(这意味着一个模块有几种这意味着一个模块有几种功能功能)。32/92应该采取下述设计原则:应该采取下述设计原则:尽量使用数据耦合尽量使用数据耦合少用控制耦合和特征耦合少用控制耦合和特征耦合限制公共环境耦合的范围限制公共环境耦合的范围完全不用内容耦合完全不用内容耦合33/922.内聚内聚内聚标志一个模块内各个元素彼此结合的紧密程内聚标志一个模块内各个元素彼

29、此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。单地说,理想内聚的模块只做一件事情。设计时应该力求做到高内聚,通常中等程度的内设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的;低内聚很坏,不要使用。聚也是可以采用的;低内聚很坏,不要使用。34/92内聚和耦合是密切相关的,模块内的高内聚往往意内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合味着模块间的松耦合。实践表明内聚更重要,应该。实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。把更多注意力集中到提高模块的内聚程度上。

30、低内聚有如下几类:低内聚有如下几类:如果一个模块完成一组任务,这些任务彼此间即如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也很松散,就叫做使有关系,关系也很松散,就叫做偶然内聚偶然内聚。有时。有时在写完一个程序之后,发现一组语句在两处或多处在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。这样就出现了偶然内聚的模块。在偶然内聚的模块中,各种元素之间没有实质性联系,很在偶然内聚的模块中,各种元素之间没有实质性联系,很可能在一种应用场合需要修改这个模块,在另一种应用场可能在一种

31、应用场合需要修改这个模块,在另一种应用场合又不允许这种修改,从而陷入困境。事实上,偶然内聚合又不允许这种修改,从而陷入困境。事实上,偶然内聚的模块出现修改错误的概率比其他类型的模块高得多。的模块出现修改错误的概率比其他类型的模块高得多。35/92如果一个模块完成的任务在逻辑上属于相同或相如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为似的一类,则称为逻辑内聚逻辑内聚。在逻辑内聚的模块中,不同功能混在一起,合用部分程序代码,即使局部功能的修改有时也会影响全局。因此,这类模块的修改也比较困难。如果一个模块包含的任务必须在同一段时间内执如果一个模块包含的任务必须在同一段时间内执行,就叫行,

32、就叫时间内聚时间内聚。时间关系在一定程度上反映了程序的某些实质,所以时间内聚比逻辑内聚好一些。36/92中内聚主要有两类:中内聚主要有两类:如果一个模块内的处理元素是相关的,而且必须以如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为特定次序执行,则称为过程内聚过程内聚。使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块。如果模块中所有元素都使用同一个输入数据和如果模块中所有元素都使用同一个输入数据和(或或)产生同一个输出数据,则称为产生同一个输出数据,则称为通信内聚通信内聚。37/92高内聚也有两类:高内聚也有两类:如果一个模块内

33、的处理元素和同一个功能密切相关,如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行而且这些处理必须顺序执行(通常一个处理元素的通常一个处理元素的输出数据作为下一个处理元素的输入数据输出数据作为下一个处理元素的输入数据),则称,则称为为顺序内聚顺序内聚。根据数据流图划分模块时,通常得到顺序内聚的模块,这种模块彼此间的连接往往比较简单。如果模块内所有处理元素属于一个整体,完成一个如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为单一的功能,则称为功能内聚功能内聚。功能内聚是最高程。功能内聚是最高程度的内聚。度的内聚。38/92 耦合与内聚的例子耦合与内聚的例子 给上

34、述七种内聚的优劣评分,将得到如下结果:给上述七种内聚的优劣评分,将得到如下结果:功能内聚功能内聚 10分分时间内聚时间内聚3分分顺序内聚顺序内聚 9分分逻辑内聚逻辑内聚1分分通信内聚通信内聚 7分分偶然内聚偶然内聚0分分过程内聚过程内聚 5分分事实上,没有必要精确确定内聚的级别。重要的是事实上,没有必要精确确定内聚的级别。重要的是设计时力争做到高内聚,并且能够辨认出低内聚的设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度降模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获得较高的模块独立性。低模块间的耦合程度,从而获得较高的模块独立性。

35、39/92 人们总结的一些经验人们总结的一些经验,能给软件工程师能给软件工程师以有益的启示,帮助他们找到改进软件设计以有益的启示,帮助他们找到改进软件设计提高软件质量的途径。提高软件质量的途径。下面介绍几条启发式规则。下面介绍几条启发式规则。5.3 启发规则启发规则40/921.改进软件结构提高模块独立性改进软件结构提高模块独立性设计出软件的初步结构以后,应该审查分析这设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合个结构,通过模块分解或合并,力求降低耦合提高内聚。提高内聚。例如,多个模块公有的一个子功能可以独立成例如,多个模块公有的一个子功能可以独立成一个模块

36、,由这些模块调用;有时可以通过分一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。数据的引用,并且降低接口的复杂程度。41/922.模块规模应该适中模块规模应该适中经验表明,一个模块的规模不应过大,最好能写在经验表明,一个模块的规模不应过大,最好能写在一页纸内一页纸内(通常不超过通常不超过60行语句行语句)。有人从心理学角。有人从心理学角度研究得知,当一个模块包含的语句数超过度研究得知,当一个模块包含的语句数超过30以后,以后,模块的可理解程度迅速下降。模块的可理解程度迅速下降。过大的模块

37、往往是由于分解不充分,但是进一步分过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降解必须符合问题结构,一般说来,分解后不应该降低模块独立性。低模块独立性。过小的模块开销大于有效操作,而且模块数目过多过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。将使系统接口复杂。42/923.深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当深度表示软件结构中控制的层数深度表示软件结构中控制的层数,它往往能粗略地,它往往能粗略地标志一个系统的大小和复杂程度。深度和程序长度标志一个系统的大小和复杂程度。深度和程序长度之间应该有粗略的对应关系,当然这

38、个对应关系是之间应该有粗略的对应关系,当然这个对应关系是在一定范围内变化的。如果层数过多则应该考虑是在一定范围内变化的。如果层数过多则应该考虑是否有许多管理模块过分简单了,能否适当合并。否有许多管理模块过分简单了,能否适当合并。宽度是软件结构内同一个层次上的模块总数的最大宽度是软件结构内同一个层次上的模块总数的最大值值。一般说来,宽度越大系统越复杂。对宽度影响。一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。最大的因素是模块的扇出。43/92扇出是一个模块直接控制扇出是一个模块直接控制(调用调用)的模块数目的模块数目,扇出,扇出过大意味着模块过分复杂,需要控制和协调过多的过大意

39、味着模块过分复杂,需要控制和协调过多的下级模块;下级模块;扇出过小扇出过小(例如总是例如总是1)也不好也不好。经验表明,一个设计得好的典型系统的平均扇出通经验表明,一个设计得好的典型系统的平均扇出通常是常是3或或4(扇出的上限通常是扇出的上限通常是59)。扇出太大一般是因为缺乏中间层次,应该适当增加扇出太大一般是因为缺乏中间层次,应该适当增加中间层次的控制模块中间层次的控制模块。扇出太小时可以把下级模块。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的进一步分解成若干个子功能模块,或者合并到它的上级模块中去。当然分解模块或合并模块必须符合上级模块中去。当然分解模块或合并模块

40、必须符合问题结构,不能违背模块独立原理。问题结构,不能违背模块独立原理。44/92一个模块的一个模块的扇入表明有多少个上级模块直接调扇入表明有多少个上级模块直接调用它用它,扇入越大则共享该模块的上级模块数目,扇入越大则共享该模块的上级模块数目越多,这是有好处的,但是,不能违背模块独越多,这是有好处的,但是,不能违背模块独立原理单纯追求高扇入。立原理单纯追求高扇入。观察大量软件系统后发现,设计得很好的软件观察大量软件系统后发现,设计得很好的软件结构通常是:结构通常是:顶层扇出比较高,中层扇出较少,顶层扇出比较高,中层扇出较少,底层扇入到公共的实用模块中去底层扇入到公共的实用模块中去(底层模块有高

41、底层模块有高扇入扇入)。45/924.模块的作用域应该在控制域之内模块的作用域应该在控制域之内模块的模块的作用域作用域定义为受该模块内一个判定影响的所定义为受该模块内一个判定影响的所有模块的集合。有模块的集合。模块的模块的控制域控制域是这个模块本身以及所有直接或间接是这个模块本身以及所有直接或间接从属于它的模块的集合。从属于它的模块的集合。例如,在图例如,在图5.2中模块中模块A的控制域是的控制域是A、B、C、D、E、F等模块的集合。等模块的集合。在一个设计得很好的系统中,在一个设计得很好的系统中,所有受判定影响的模所有受判定影响的模块应该都从属于做出判定的那个模块,块应该都从属于做出判定的那

42、个模块,最好局限于最好局限于做出判定的那个模块本身及它的直属下级模块。做出判定的那个模块本身及它的直属下级模块。46/92图图5.2 模块的作用域和控制域模块的作用域和控制域47/925.力争降低模块接口的复杂程度力争降低模块接口的复杂程度模块接口复杂是软件发生错误的一个主要原因。应模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。块的功能一致。接口复杂或不一致接口复杂或不一致(即看起来传递的数据之间没有即看起来传递的数据之间没有联系联系),是紧耦合或低内聚的征兆,应该重新分析,是紧耦合或低内聚的征

43、兆,应该重新分析这个模块的独立性。这个模块的独立性。6.设计单入口单出口的模块设计单入口单出口的模块这条启发式规则警告软件工程师不要使模块间出现这条启发式规则警告软件工程师不要使模块间出现内容耦合。当从顶部进入模块并且从底部退出来时,内容耦合。当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。软件是比较容易理解的,因此也是比较容易维护的。48/927.模块功能应该可以预测模块功能应该可以预测如果一个模块可以当做一个黑盒子,也就是说,只如果一个模块可以当做一个黑盒子,也就是说,只要输入的数据相同就产生同样的输出,这个模块的要输入的数据相同就产生同样的输出,这个模块

44、的功能就是可以预测的。功能就是可以预测的。带有内部带有内部“存储器存储器”的模块的模块的功能可能是不可预测的功能可能是不可预测的,因为它的输出可能取决于内部存储器的,因为它的输出可能取决于内部存储器(例如某例如某个标记个标记)的状态。由于内部存储器对于上级模块而的状态。由于内部存储器对于上级模块而言是不可见的,所以这样的模块既不易理解又难于言是不可见的,所以这样的模块既不易理解又难于测试和维护。测试和维护。49/92层次图用来描绘软件的层次结构层次图用来描绘软件的层次结构。在图。在图5.2中已经中已经非正式地使用了层次图。虽然层次图的形式和第非正式地使用了层次图。虽然层次图的形式和第3.7节中

45、介绍的描绘数据结构的层次方框图相同,节中介绍的描绘数据结构的层次方框图相同,但是表现的内容却完全不同。但是表现的内容却完全不同。层次图中的一个矩形框代表一个模块,方框间的连层次图中的一个矩形框代表一个模块,方框间的连线表示调用关系线表示调用关系而不像层次方框图那样表示组成关而不像层次方框图那样表示组成关系。图系。图5.3是层次图的一个例子。是层次图的一个例子。5.4 描绘软件结构的图形工具描绘软件结构的图形工具 5.4.1 层次图和层次图和HIPO图图50/92图图5.3 正文加工系统的层次图正文加工系统的层次图 51/92层次图很适于在自顶向下设计软件的过程中使用。层次图很适于在自顶向下设计

46、软件的过程中使用。HIPO图是美国图是美国IBM公司发明的公司发明的“层次图加输入层次图加输入/处处理理/输出图输出图”的英文缩写。为了能使的英文缩写。为了能使HIPO图具有可图具有可追踪性,在追踪性,在H图图(层次图层次图)里除了最顶层的方框之外,里除了最顶层的方框之外,每个方框都加了编号。编号规则和第每个方框都加了编号。编号规则和第2.4节中介绍节中介绍的数据流图的编号规则相同,例如,图的数据流图的编号规则相同,例如,图5.3加了编加了编号后得到图号后得到图5.4。和和H图中每个方框相对应,应该有一张图中每个方框相对应,应该有一张IPO图描绘图描绘这个方框代表的模块的处理过程这个方框代表的

47、模块的处理过程。HIPO图中的每图中的每张张IPO图内都应该明显地标出它所描绘的模块在图内都应该明显地标出它所描绘的模块在H图中的编号,以便追踪了解这个模块在软件结构中图中的编号,以便追踪了解这个模块在软件结构中的位置。的位置。52/92图图5.4 带编号的层次图带编号的层次图(H图图)53/92Yourdon提出的结构图是进行软件结构设计的另一提出的结构图是进行软件结构设计的另一个有力工具。结构图和层次图类似,也是描绘软件个有力工具。结构图和层次图类似,也是描绘软件结构的图形工具,图中一个方框代表一个模块,框结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭

48、头内注明模块的名字或主要功能;方框之间的箭头(或直线或直线)表示模块的调用关系。因为按照惯例总是表示模块的调用关系。因为按照惯例总是图中位于上方的方框代表的模块调用下方的模块,图中位于上方的方框代表的模块调用下方的模块,即使不用箭头也不会产生二义性,为了简单起见,即使不用箭头也不会产生二义性,为了简单起见,可以只用直线而不用箭头表示模块间的调用关系。可以只用直线而不用箭头表示模块间的调用关系。5.4.2 结构图结构图54/92在结构图中通常还用带注释的箭头表示模块调用过在结构图中通常还用带注释的箭头表示模块调用过程中来回传递的信息。如果希望进一步标明传递的程中来回传递的信息。如果希望进一步标明

49、传递的信息是数据还是控制信息,则可以利用注释箭头尾信息是数据还是控制信息,则可以利用注释箭头尾部的形状来区分:尾部是空心圆表示传递的是数据,部的形状来区分:尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。图实心圆表示传递的是控制信息。图5.5是结构图的是结构图的一个例子。一个例子。以上介绍的是结构图的基本符号,也就是最经常使以上介绍的是结构图的基本符号,也就是最经常使用的符号。此外还有一些附加的符号,可以表示模用的符号。此外还有一些附加的符号,可以表示模块的选择调用或循环调用。图块的选择调用或循环调用。图5.6表示当模块表示当模块M中中某个判定为真时调用模块某个判定为真时调用模块A,

50、为假时调用模块,为假时调用模块B。图图5.7表示模块表示模块M循环调用模块循环调用模块A、B和和C。55/92图图5.5 结构图的例子结构图的例子产生最佳解的一般结构产生最佳解的一般结构56/92图图5.6 判定为真时调用判定为真时调用A,为假时调用,为假时调用B57/92图图5.7 模块模块M循环调用模块循环调用模块A、B、C58/92通常用层次图作为描绘软件结构的文档通常用层次图作为描绘软件结构的文档。结构图作为文档并不很合适,因为图上包含结构图作为文档并不很合适,因为图上包含的信息太多有时反而降低了清晰程度。的信息太多有时反而降低了清晰程度。59/92面向数据流的设计方法的目标是给出设计

51、软面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。件结构的一个系统化的途径。因为任何软件系统都可以用数据流图表示,因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计所以面向数据流的设计方法理论上可以设计任何软件的结构。任何软件的结构。通常所说的结构化设计方法通常所说的结构化设计方法(简称简称SD方法方法),也就是基于数据流的设计方法。也就是基于数据流的设计方法。5.5 面向数据流的设计方法面向数据流的设计方法60/92面向数据流的设计方法把信息流映射成软件结构,面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流的类型决定了

52、映射的方法。信息流有下述两种类型。信息流有下述两种类型。1.变换流变换流参看图参看图5.8,信息沿输入通路进入系统,同时由外,信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。种信息流就叫作变换流。5.5.1 概念概念61/92图图5.8 变换流变换流62/92基本系统模型意味着变换流,因此,原则上所有信基本系统模型意味着变换流,

53、因此,原则上所有信息流都可以归结为这一类息流都可以归结为这一类。但是,当数据流图具有。但是,当数据流图具有和图和图5.9类似的形状时,这种数据流是类似的形状时,这种数据流是“以事务为以事务为中心的中心的”,也就是说,也就是说,数据沿输入通路到达一个处数据沿输入通路到达一个处理理T,这个处理根据输入数据的类型在若干个动作,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流特殊的数据流,称为事务流。图。图5.9中的处理中的处理T称为称为事务中心,它完成下述任务:事务中心,它完成下述任务:(1)接收输

54、入数据接收输入数据(输入数据又称为事务输入数据又称为事务);(2)分析每个事务以确定它的类型;分析每个事务以确定它的类型;(3)根据事务类型选取一条活动通路。根据事务类型选取一条活动通路。63/92图图5.9 事务流事务流64/923.设计过程设计过程图图5.10(见书(见书96页)说明了使用面向数据流方法页)说明了使用面向数据流方法逐步设计的过程。逐步设计的过程。65/92变换分析是一系列设计步骤的总称,经过这些步骤变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映把具有变换流特点的数据流图按预先确定的模式映射成软件结构。下面通过一个例子说明变换分析的射

55、成软件结构。下面通过一个例子说明变换分析的方法。方法。1.例子例子我们已经开始进入我们已经开始进入“智能智能”产品时代。在这类产品产品时代。在这类产品中把软件做在只读存储器中,成为设备的一部分,中把软件做在只读存储器中,成为设备的一部分,从而使设备具有某些从而使设备具有某些“智能智能”。因此,这类产品的。因此,这类产品的设计都包含软件开发的任务。作为面向数据流的设设计都包含软件开发的任务。作为面向数据流的设计方法中变换分析的例子,考虑汽车数字仪表板的计方法中变换分析的例子,考虑汽车数字仪表板的设计。设计。5.5.2 变换分析变换分析66/92仪表板功能如下:仪表板功能如下:(1)通过模数转换实

56、现传感器和微处理机接口;通过模数转换实现传感器和微处理机接口;(2)在发光二极管面板上显示数据;在发光二极管面板上显示数据;(3)指示每小时英里数指示每小时英里数(mph),行驶的里程,每加仑,行驶的里程,每加仑油行驶的英里数油行驶的英里数(mpg)等等;等等;(4)指示加速或减速;指示加速或减速;(5)超速警告:如果车速超过超速警告:如果车速超过55英里英里/小时,则发出小时,则发出超速警告铃声。超速警告铃声。在软件需求分析阶段应该对上述每条要求以及系统在软件需求分析阶段应该对上述每条要求以及系统的其他特点进行全面的分析评价,建立起必要的文的其他特点进行全面的分析评价,建立起必要的文档资料,

57、特别是数据流图。档资料,特别是数据流图。67/922.设计步骤设计步骤第第1步步 复查基本系统模型。复查基本系统模型。复查的目的是确保系统的输入数据和输出数据符合复查的目的是确保系统的输入数据和输出数据符合实际。实际。第第2步步 复查并精化数据流图。复查并精化数据流图。应该对需求分析阶段得出的数据流图认真复查,并应该对需求分析阶段得出的数据流图认真复查,并且在必要时进行精化。不仅要确保数据流图给出了且在必要时进行精化。不仅要确保数据流图给出了目标系统的正确的逻辑模型,而且应该使数据流图目标系统的正确的逻辑模型,而且应该使数据流图中每个处理都代表一个规模适中相对独立的子功能。中每个处理都代表一个

58、规模适中相对独立的子功能。假设在需求分析阶段产生的数字仪表板系统的数据假设在需求分析阶段产生的数字仪表板系统的数据流图如图流图如图5.11(见书(见书97页)所示。页)所示。68/9269/92第第3步步 确定数据流图具有变换特性还是事务特性。确定数据流图具有变换特性还是事务特性。一般地说,一个系统中的所有信息流都可以认为是一般地说,一个系统中的所有信息流都可以认为是变换流,但是,当遇到有明显事务特性的信息流时,变换流,但是,当遇到有明显事务特性的信息流时,建议采用事务分析方法进行设计。在这一步,设计建议采用事务分析方法进行设计。在这一步,设计人员应该根据数据流图中占优势的属性,确定数据人员应

59、该根据数据流图中占优势的属性,确定数据流的全局特性。此外还应该把具有和全局特性不同流的全局特性。此外还应该把具有和全局特性不同的特点的局部区域孤立出来,以后可以按照这些子的特点的局部区域孤立出来,以后可以按照这些子数据流的特点精化根据全局特性得出的软件结构。数据流的特点精化根据全局特性得出的软件结构。70/92从图从图5.11看出,数据沿着两条输入通路进入系统,看出,数据沿着两条输入通路进入系统,然后沿着然后沿着5条通路离开,没有明显的事务中心。因条通路离开,没有明显的事务中心。因此可以认为这个信息流具有变换流的总特征。此可以认为这个信息流具有变换流的总特征。第第4步步 确定输入流和输出流的边

60、界,从而孤立出变确定输入流和输出流的边界,从而孤立出变换中心。换中心。输入流和输出流的边界和对它们的解释有关,也就输入流和输出流的边界和对它们的解释有关,也就是说,不同设计人员可能会在流内选取稍微不同的是说,不同设计人员可能会在流内选取稍微不同的点作为边界的位置。当然在确定边界时应该仔细认点作为边界的位置。当然在确定边界时应该仔细认真,但是把边界沿着数据流通路移动一个处理框的真,但是把边界沿着数据流通路移动一个处理框的距离,通常对最后的软件结构只有很小的影响。距离,通常对最后的软件结构只有很小的影响。对于汽车数字仪表板的例子,设计人员确定的流的对于汽车数字仪表板的例子,设计人员确定的流的边界如

61、图边界如图5.12(见书(见书98页)所示。页)所示。71/9272/92第第5步步 完成完成“第一级分解第一级分解”。软件结构代表对控制的自顶向下的分配,所谓分解软件结构代表对控制的自顶向下的分配,所谓分解就是分配控制的过程。就是分配控制的过程。对于变换流的情况,数据流图被映射成一个特殊的对于变换流的情况,数据流图被映射成一个特殊的软件结构,这个结构控制输入、变换和输出等信息软件结构,这个结构控制输入、变换和输出等信息处理过程。图处理过程。图5.13说明了第一级分解的方法。位于说明了第一级分解的方法。位于软件结构最顶层的控制模块软件结构最顶层的控制模块Cm协调下述从属的控协调下述从属的控制功

62、能:制功能:输入信息处理控制模块输入信息处理控制模块Ca,协调对所有输入数据的协调对所有输入数据的接收;接收;变换中心控制模块变换中心控制模块Ct,管理对内部形式的数据的所管理对内部形式的数据的所有操作;有操作;73/92输出信息处理控制模块输出信息处理控制模块Ce,协调输出信息的产生,协调输出信息的产生过程。过程。虽然图虽然图5.13意味着一个三叉的控制结构,但是,对意味着一个三叉的控制结构,但是,对一个大型系统中的复杂数据流可以用两个或多个模一个大型系统中的复杂数据流可以用两个或多个模块完成上述一个模块的控制功能。应该在能够完成块完成上述一个模块的控制功能。应该在能够完成控制功能并且保持好

63、的耦合和内聚特性的前提下,控制功能并且保持好的耦合和内聚特性的前提下,尽量使第一级控制中的模块数目取最小值。尽量使第一级控制中的模块数目取最小值。对于数字仪表板的例子,第一级分解得出的结构如对于数字仪表板的例子,第一级分解得出的结构如图图5.14所示。每个控制模块的名字表明了为它所控所示。每个控制模块的名字表明了为它所控制的那些模块的功能。制的那些模块的功能。74/92图图5.13 第一级分解的方法第一级分解的方法75/92图图5.14 数字仪表板系统的第一级分解数字仪表板系统的第一级分解76/92第第6步步 完成完成“第二级分解第二级分解”。所谓第二级分解就是把数据流图中的每个处理映射所谓第

64、二级分解就是把数据流图中的每个处理映射成软件结构中一个适当的模块。完成第二级分解的成软件结构中一个适当的模块。完成第二级分解的方法是,从变换中心的边界开始沿着输入通路向外方法是,从变换中心的边界开始沿着输入通路向外移动,把输入通路中每个处理映射成软件结构中移动,把输入通路中每个处理映射成软件结构中Ca控制下的一个低层模块;然后沿输出通路向外控制下的一个低层模块;然后沿输出通路向外移动,把输出通路中每个处理映射成直接或间接受移动,把输出通路中每个处理映射成直接或间接受模块模块Ce控制的一个低层模块;最后把变换中心内控制的一个低层模块;最后把变换中心内的每个处理映射成受的每个处理映射成受Ct控制的

65、一个模块。图控制的一个模块。图5.15表表示进行第二级分解的普遍途径。示进行第二级分解的普遍途径。77/92图图5.15 第二级分解的方法第二级分解的方法78/92虽然图虽然图5.15描绘了在数据流图中的处理和软件结构描绘了在数据流图中的处理和软件结构中的模块之间的一对一的映射关系,但是,不同的中的模块之间的一对一的映射关系,但是,不同的映射经常出现。应该根据实际情况以及映射经常出现。应该根据实际情况以及“好好”设计设计的标准,进行实际的第二级分解。的标准,进行实际的第二级分解。对于数字仪表板系统的例子,第二级分解的结果分对于数字仪表板系统的例子,第二级分解的结果分别用图别用图5.16,5.1

66、7和和5.18描绘。这描绘。这3张图表示对软件张图表示对软件结构的初步设计结果。虽然图中每个模块的名字表结构的初步设计结果。虽然图中每个模块的名字表明了它的基本功能,但是仍然应该为每个模块写一明了它的基本功能,但是仍然应该为每个模块写一个简要说明,描述:个简要说明,描述:79/92进出该模块的信息进出该模块的信息(接口描述接口描述);模块内部的信息;模块内部的信息;过程陈述,包括主要判定点及任务等;过程陈述,包括主要判定点及任务等;对约束和特殊特点的简短讨论。对约束和特殊特点的简短讨论。这些描述是第一代的设计规格说明,在这个设计时这些描述是第一代的设计规格说明,在这个设计时期进一步的精化和补充是经常发生的。期进一步的精化和补充是经常发生的。第第7步步 使用设计度量和启发式规则对第一次分割得使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。到的软件结构进一步精化。80/92图图5.16 未经精化的输入结构未经精化的输入结构81/92图图5.17 未经精化的变换结构未经精化的变换结构82/92图图5.18 未经精化的输出结构未经精化的输出结构83/92对第一次分割得到的软件结构

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

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

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


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