软件工程与实践第5章PPT格式课件下载.ppt
《软件工程与实践第5章PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《软件工程与实践第5章PPT格式课件下载.ppt(64页珍藏版)》请在冰豆网上搜索。
![软件工程与实践第5章PPT格式课件下载.ppt](https://file1.bdocx.com/fileroot1/2022-10/9/e9fe78e6-a971-49e3-ab5e-b5d30ec149b1/e9fe78e6-a971-49e3-ab5e-b5d30ec149b11.gif)
系统设计总体设计过程通常由两个主要阶段组成:
系统设计阶段,确定系统的具体物理实现方案;
结构设计阶阶段,确定系统的具体物理实现方案;
结构设计阶段,确定软件结构。
段,确定软件结构。
典型的总体设计过程包括下述典型的总体设计过程包括下述9个步骤:
个步骤:
1.设想供选择的方案设想供选择的方案2.选取合理的方案选取合理的方案3.推荐最佳方案推荐最佳方案4.功能分解功能分解5.1设计过程设计过程5.设计软件结构设计软件结构6.设计数据库设计数据库7.制定测试计划制定测试计划8.书写文档书写文档(系统说明、用户手册、测试计划、详细系统说明、用户手册、测试计划、详细的实现计划、数据库设计结果)的实现计划、数据库设计结果)9.审查和复审审查和复审模块是由边界元素限定的相邻程序元素(例如,数据模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识说明,可执行的语句)的序列,而且有一个总体标识符代表它。
按照模块的定义,过程、函数、子程序和符代表它。
按照模块的定义,过程、函数、子程序和宏等,都可作为模块。
面向对象方法学中的对象是模宏等,都可作为模块。
面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。
模块是块,对象内的方法(或称为服务)也是模块。
模块是构成程序的基本构件。
构成程序的基本构件。
5.2设计原理设计原理5.2.1模块化模块化模块化就是把程序划分成独立命名且可独立访问的模模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
构成一个整体,可以完成指定的功能满足用户的需求。
设函数设函数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)图图5.1模块化和软件成本模块化和软件成本采用模块化原理可以使软件结构清晰,能够提高软件采用模块化原理可以使软件结构清晰,能够提高软件的可靠性和可修改性,也有助于软件开发工程的组织的可靠性和可修改性,也有助于软件开发工程的组织管理。
管理。
在现实世界中一定事物、状态或过程之间总存在着某在现实世界中一定事物、状态或过程之间总存在着某些相似的方面些相似的方面(共性共性),把这些相似的方面集中和概括,把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。
或者起来,暂时忽略它们之间的差异,这就是抽象。
或者说抽象就是抽出事物的本质特性而暂时不考虑它们的说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
细节。
一个复杂的动态系统首先可以用一些高级的抽象概念一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体念构造和理解,如此进行下去,直至最低层次的具体元素。
元素。
5.2.2抽象抽象软件工程过程的每一步都是对软件解法的抽象层次的软件工程过程的每一步都是对软件解法的抽象层次的一次精化。
一次精化。
在可行性研究阶段,软件作为系统的一个完整部件;
在需求分析阶段,软件解法是使用在问题环境内熟悉在需求分析阶段,软件解法是使用在问题环境内熟悉的方式描述的;
当由总体设计向详细设计过渡时,抽的方式描述的;
当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;
最后,当源程序写出来以象的程度也就随之减少了;
最后,当源程序写出来以后,也就达到了抽象的最低层。
后,也就达到了抽象的最低层。
随着软件开发工程的进展,在软件结构每一层中的模随着软件开发工程的进展,在软件结构每一层中的模块,表示了对软件抽象层次的一次精化。
块,表示了对软件抽象层次的一次精化。
事实上,软件结构顶层的模块,控制了系统的主要功事实上,软件结构顶层的模块,控制了系统的主要功能并且影响全局;
在软件结构底层的模块,完成对数能并且影响全局;
在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式据的一个具体处理,用自顶向下由抽象到具体的方式分配控制,简化了软件的设计和实现,提高了软件的分配控制,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。
可理解性和可测试性,并且使软件更容易维护。
逐步求精是人类解决复杂问题时采用的基本方法,也逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设计和是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础。
可以把逐步求精定义为:
实现技术)的基础。
“为了为了能集中精力解决主要问题而尽量推迟对问题细节的考能集中精力解决主要问题而尽量推迟对问题细节的考虑。
虑。
”人类的认知过程遵守人类的认知过程遵守Miller法则:
一个人在任何时候法则:
一个人在任何时候都只能把注意力集中在(都只能把注意力集中在(72)个知识块上。
)个知识块上。
逐步求精方法确保每个问题都将被解决,而且每个问逐步求精方法确保每个问题都将被解决,而且每个问题都将在适当的时候被解决。
题都将在适当的时候被解决。
5.2.3逐步求精逐步求精抽象与求精是一对互补的概念。
抽象使得设计者能够抽象与求精是一对互补的概念。
抽象使得设计者能够说明过程和数据,同时却忽略低层细节。
事实上,可说明过程和数据,同时却忽略低层细节。
事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。
求精则帮助设计关的细节,而实现逐步求精的方法。
求精则帮助设计者在设计过程中逐步揭示出低层细节。
这两个概念都者在设计过程中逐步揭示出低层细节。
这两个概念都有助于设计者在设计有助于设计者在设计演化演化过程中创造出完整的设计模过程中创造出完整的设计模型。
型。
信息隐藏原理指出:
应该这样设计和确定模块,使得信息隐藏原理指出:
应该这样设计和确定模块,使得一个模块内包含的信息一个模块内包含的信息(过程和数据过程和数据)对于不需要这些对于不需要这些信息的模块来说,是不能访问的。
信息的模块来说,是不能访问的。
局部化有助于实现信息隐藏,隐藏的不是有关模块的局部化有助于实现信息隐藏,隐藏的不是有关模块的一切信息,而是模块的实现细节。
一切信息,而是模块的实现细节。
5.2.4信息隐藏和局部化信息隐藏和局部化开发具有独立功能而且和其他模块之间没有过多的相开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。
换句话说,希互作用的模块,就可以做到模块独立。
换句话说,希望这样设计软件结构,使得每个模块完成一个相对独望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。
立的特定子功能,并且和其他模块之间的关系很简单。
模块的独立性很重要,有两条理由:
第一,有效的模模块的独立性很重要,有两条理由:
第一,有效的模块化块化(即具有独立的模块即具有独立的模块)的软件比较容易开发出来。
的软件比较容易开发出来。
第二,独立的模块比较容易测试和维护。
总之,模块第二,独立的模块比较容易测试和维护。
总之,模块独立是好设计的关键,而设计又是决定软件质量的关独立是好设计的关键,而设计又是决定软件质量的关键环节。
键环节。
5.2.5模块独立模块独立模块的独立程度可以由两个定性标准度量,这两个标模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。
耦合衡量不同模块彼此间互准分别称为内聚和耦合。
耦合衡量不同模块彼此间互相依赖相依赖(连接连接)的紧密程度;
内聚衡量一个模块内部各的紧密程度;
内聚衡量一个模块内部各个元素彼此结合的紧密程度。
个元素彼此结合的紧密程度。
1.耦合耦合耦合是对一个软件结构内不同模块之间互连程度的度耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度,进入或量。
耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
访问一个模块的点,以及通过接口的数据。
在软件设计中应该追求尽可能松散耦合的系统。
在这在软件设计中应该追求尽可能松散耦合的系统。
在这样的系统中可以研究、测试或维护任何一个模块,而样的系统中可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多了解。
此外,由于模不需要对系统的其他模块有很多了解。
此外,由于模块间联系简单,发生在一处的错误传播到整个系统的块间联系简单,发生在一处的错误传播到整个系统的可能性就很小。
可能性就很小。
如果两个模块彼此间通过参数交换信息,而且交换的如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。
如果信息仅仅是数据,那么这种耦合称为数据耦合。
如果传递的信息中有控制信息传递的信息中有控制信息(尽管有时这种控制信息以尽管有时这种控制信息以数据的形式出现数据的形式出现),则这种耦合称为控制耦合。
,则这种耦合称为控制耦合。
数据耦合是低耦合,一个系统内可以只包含数据耦合。
控制耦合是中等程度的耦合,它增加了系统的复杂程控制耦合是中等程度的耦合,它增加了系统的复杂程度。
控制耦合往往是多余的,在把模块适当分解之后度。
控制耦合往往是多余的,在把模块适当分解之后通常可以用数据耦合代替它。
通常可以用数据耦合代替它。
当把整个数据结构作为参数传递而被调用的模块只需当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
要使用其中一部分数据元素时,就出现了特征耦合。
当两个或多个模块通过一个公共数据环境相互作用时,当两个或多个模块通过一个公共数