04 软件设计工程.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《04 软件设计工程.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 04 软件设计工程 软件设计 工程
- 资源描述:
-
1、1设计工程设计工程2内容摘要内容摘要软件设计工程概述软件设计工程概述软件设计准则软件设计准则 软件体系结构设计软件体系结构设计部件级设计技术部件级设计技术 设计规约与设计评审设计规约与设计评审3 正如任何工程项目一样,在生产之前要做正如任何工程项目一样,在生产之前要做设计,软件编码前,也必须先进行软件设计。设计,软件编码前,也必须先进行软件设计。 软件设计是软件开发的关键步骤,直接影软件设计是软件开发的关键步骤,直接影响软件质量。响软件质量。 软件需求分析解决软件需求分析解决“做什么做什么”的问题,软的问题,软件设计过程则解决件设计过程则解决“怎么做怎么做”的问题的问题4.1 4.1 软件设计
2、工程概述软件设计工程概述4软件设计是把软件需求变换成软件表示的过程,它主要包含软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:两个阶段:软件体系结构设计软件体系结构设计阶段和阶段和部件级设计部件级设计; 有称为有称为总体设计总体设计和和详细设计详细设计两个两个阶段。阶段。 其其工作流程工作流程可用下图表示:可用下图表示: 总体总体设计设计需求需求 说明书说明书复审复审体系体系 结构结构数据数据/ /类结构类结构修修 改改详细详细设计设计可接受可接受部件过程描述部件过程描述复审复审修修 改改设计说设计说 明书明书1 1、设计阶段结束要交付的文档是设计说明书,根据设计方法的不同,、设
3、计阶段结束要交付的文档是设计说明书,根据设计方法的不同,有不同的设计文档。有不同的设计文档。2 2、每个设计步骤完成后,都应进行复审。、每个设计步骤完成后,都应进行复审。 常用的设计方法有:常用的设计方法有: SD法、法、Jackson法、法、OOD法、层次式输入法、层次式输入-处理处理-输出法输出法(又称又称HIPO法法)、 Parnas法、法、 Warnier法等。法等。软件设计阶段软件设计阶段5设计任务:设计任务:使用一种设计方法使用一种设计方法,将分析阶段获得的需求说将分析阶段获得的需求说明的明的软件分析模型中通过数据、功能和行为模型所展示软件分析模型中通过数据、功能和行为模型所展示的
4、软件需求的信息传送给设计阶段,的软件需求的信息传送给设计阶段,完成系统的完成系统的数据数据/类类设计、体系结构设计、接口设计、部件级设计设计、体系结构设计、接口设计、部件级设计 最后得到最后得到软件设计说明书。软件设计说明书。过程设计过程设计结构设计结构设计数据设计数据设计界面设计界面设计软件设计软件设计1. 1.软件设计阶段的任务软件设计阶段的任务6软件设计的目标就是构造一个高内聚低耦合的软件设计模型。软件设计的目标就是构造一个高内聚低耦合的软件设计模型。提高可靠性;提高可维护性;提高可理解性;提高效率。提高可靠性;提高可维护性;提高可理解性;提高效率。衡量该目标的准则衡量该目标的准则1、软
5、件实体有明显的层次结构,利于软件元素间控制。、软件实体有明显的层次结构,利于软件元素间控制。2、软件实体应该是模块化的,模块具有独立功能。、软件实体应该是模块化的,模块具有独立功能。3、软件实体与环境的界面清晰。、软件实体与环境的界面清晰。4、设计规格说明清晰、简洁、完整和无二义性。、设计规格说明清晰、简洁、完整和无二义性。软件软件高可靠高可靠性性高可维高可维护性护性高可理高可理解性解性高效率高效率软件设计的目标2.2.软件设计的目标软件设计的目标73.3.软件设计的过程软件设计的过程一选取合理的系统体系结构二推荐最佳方案、技术选型三划分模块,确定软件结构 四数据结构和算法设计五设计用户界面六
6、编写文档七审查和复查8一、选取合理的系统体系结构软件体系结构确定了系统的组织结构和拓扑结构,软件体系结构确定了系统的组织结构和拓扑结构,显示了系统需求和构成系统的元素之间的对应关系,显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。提供了一些设计决策的基本原理。体系结构设计是软件设计的第一个阶段,该阶段体系结构设计是软件设计的第一个阶段,该阶段侧重于系统宏观结构的设计,而不关心模块的内部算侧重于系统宏观结构的设计,而不关心模块的内部算法。法。常见的软件体系结构常见的软件体系结构单主机结构单主机结构C/SC/S(Client/ServerClient/Server)结构
7、)结构B/SB/S(Browser/ServerBrowser/Server)结构)结构3. 3. 软件设计的过程软件设计的过程9一、选取合理的系统体系结构选取体系选取体系 针对以下问题考虑针对以下问题考虑:是单机还是客户机是单机还是客户机/服务器系统服务器系统是应用开发还是低层开发是应用开发还是低层开发(是否有单片机是否有单片机)客户机最大点数客户机最大点数是否提供给第三方接口是否提供给第三方接口网络网络(数据通信数据通信)连接方式连接方式胖客户机还是瘦客户机胖客户机还是瘦客户机数据文件的保存方式数据文件的保存方式(文本、本地数据库、大型文本、本地数据库、大型数据库数据库)3. 3. 软件设
8、计的过程软件设计的过程10二、 推荐最佳方案、技术选型技术选型,明确以下信息:技术选型,明确以下信息:主要硬件环境操作系统应用系统内的各种服务器软件开发语言及开发工具CASE软件3. 3. 软件设计的过程软件设计的过程三、划分模块,确定软件结构三、划分模块,确定软件结构 开发方法不同,确定软件结构的方法也不同。例如开发方法不同,确定软件结构的方法也不同。例如SDSD法,是从分层法,是从分层的的DFDDFD图导出初始的结构图,再对初始的结构图进行改进,获得最终的图导出初始的结构图,再对初始的结构图进行改进,获得最终的结构图。结构图。 一般包括确定系统的软件结构,分解模块一般包括确定系统的软件结构
9、,分解模块 ,确定系统的模块层次,确定系统的模块层次关系。关系。11四、确定系统的数据结构、算法 数据结构的建立对于信息系统而言尤为重要。要确定数据的类型,数据结构的建立对于信息系统而言尤为重要。要确定数据的类型,组织、存取方式,相关程度及处理方式等。组织、存取方式,相关程度及处理方式等。五、设计用户界面 作为人机接口的用户界面起着越来越重要的作用,它直接影响到作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的寿命。软件的寿命。3. 3. 软件设计的过程软件设计的过程六、编写文档设计阶段结束要交付的文档是设计说明书,根据设计方法的设计阶段结束要交付的文档是设计说明书,根据设计方法的
10、不同,有不同的设计文档。不同,有不同的设计文档。七、审查和复查每个设计步骤完成后,都应进行复审。每个设计步骤完成后,都应进行复审。12一一抽象化与逐步求精抽象化与逐步求精 二二模块化准则模块化准则三三信息隐蔽准则信息隐蔽准则四四模块独立性准则模块独立性准则4.2 4.2 软件设计准则软件设计准则 软件设计是软件开发过程的重要阶段,对保证软件设计是软件开发过程的重要阶段,对保证软件系统的质量起着关键作用。但是如何保证软件软件系统的质量起着关键作用。但是如何保证软件设计的质量呢?有以下经过长期考验的设计准则:设计的质量呢?有以下经过长期考验的设计准则:13 抽象抽象,是在软件设计的规模逐渐增大的情
11、况下,控制复,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。杂性的基本策略。 抽象的过程是从特殊到一般的过程,上层概念是下层概抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概念是上层概念的精化和细化。念的抽象,下层概念是上层概念的精化和细化。 软件工程过程的每一步都是对较高一级抽象的解作一次软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述具体化的描述 一、抽象化与逐步求精准则一、抽象化与逐步求精准则 逐步求精逐步求精,把问题的求解过程分解成若干步骤或阶段,把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题的解法每步都比上步更精化,更接近
12、问题的解法 抽象使得设计者能够描述过程和数据而忽略低层的细节,抽象使得设计者能够描述过程和数据而忽略低层的细节,而求精有助于设计者在设计过程中揭示低层的细节而求精有助于设计者在设计过程中揭示低层的细节 14模块(模块(Module)是程序对象有名字的集合。又称)是程序对象有名字的集合。又称“构件构件”,一般指用一个名字可调用的一段程序。例如,过程,一般指用一个名字可调用的一段程序。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本、函数、子程序、宏等,是构成软件系统结构的基本元素。元素。它一般具有如下三个基本属性:它一般具有如下三个基本属性:功能功能 即指该模块实现什么功能,做什么事情。
13、必须注意,即指该模块实现什么功能,做什么事情。必须注意,这里所说的模块功能,应是该模块本身的功能加上它这里所说的模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。所调用的所有子模块的功能。逻辑逻辑 即描述模块内部怎么做。即描述模块内部怎么做。状态状态 即该模块使用时的环境和条件。即该模块使用时的环境和条件。二、模块化准则二、模块化准则4.2 4.2 软件设计准则软件设计准则15 模块化:所谓模块化就是将系统划分成若干模块,每模块化:所谓模块化就是将系统划分成若干模块,每个模块完成一个子功能,把这些模块集中起来组成一个个模块完成一个子功能,把这些模块集中起来组成一个整体,以满足所要求
14、的整个系统的功能。整体,以满足所要求的整个系统的功能。 模块化的目的是将系统模块化的目的是将系统“分而治之分而治之”,模块化能够降,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。易于测试和调试,因而也有助于提高软件的可靠性。二、模块化准则二、模块化准则4.2 4.2 软件设计准则软件设计准则16模块化降低软件复杂度的模块化降低软件复杂度的简单证明简单证明令:令:C C(X X)表示问题)表示问题 X X 的复杂度函数;的复杂度函数; E E(X X)解决问题)解决问题 X X 所需工作量
15、的复所需工作量的复杂度函数;杂度函数;若:有问题若:有问题 P1P1,P2 P2 ;C C(P1P1) C C(P2P2);); 显然:显然:E E(P1P1) E E(P2P2)由经验:由经验:C C(P1+P2P1+P2) C C(P1P1)+ C+ C(P2P2)于是:于是:E E(P1+P2P1+P2) E E(P1P1)+ E+ E(P2P2)将问题(将问题(P1+P2P1+P2)划分为两个问题)划分为两个问题P1P1和和P2P2后,其工作量和复杂度都降低。后,其工作量和复杂度都降低。 并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。并非模块分得越小越好,因为模块之间接口
16、的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数显然,每个软件系统都有一个最佳模块数M M。注意选择分解的最佳模块数。注意选择分解的最佳模块数。右上图描述了模块化与软件成本的关系。右上图描述了模块化与软件成本的关系。软件总成本 模块化与软件成本的关系成本模块数目模块成本接口成本最小成本区M17三、信息隐蔽准则三、信息隐蔽准则4.2 4.2 软件设计准则软件设计准则 由由parnas方法提倡的信息隐蔽如下方法提倡的信息隐蔽如下:每个模块的实现细每个模块的实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息(数据和过程)不允许其他
17、不需要这些信息的含的信息(数据和过程)不允许其他不需要这些信息的模块使用。模块使用。 通过信息隐蔽,则可定义和实施对模块的过程细节和局通过信息隐蔽,则可定义和实施对模块的过程细节和局部数据结构的存取限制部数据结构的存取限制 18该原则有利于提高模块的内聚性。该原则有利于提高模块的内聚性。由于一个软件系统在整个软件生由于一个软件系统在整个软件生存期内要经过多次修改,存期内要经过多次修改,在划分模块时要采取措施,使得大多数过程和数在划分模块时要采取措施,使得大多数过程和数据对软件的其他部分是隐蔽的。这样,在将来修改软件时,可将偶然引入据对软件的其他部分是隐蔽的。这样,在将来修改软件时,可将偶然引入
18、错误所造成的影响限制在一个局部范围之内,错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分不致波及到软件的其他部分。例如:定义栈(例如:定义栈(stackstack)操作模块)操作模块makenullmakenull(置空栈);(置空栈);pushpush(进栈);(进栈);poppop(出栈);(出栈);gettopgettop(取栈顶)(取栈顶) empty empty (判栈空)其操作均被封装,无需了解模块内部的实现过程。(判栈空)其操作均被封装,无需了解模块内部的实现过程。对外实现了信息隐蔽。对外实现了信息隐蔽。三、信息隐蔽准则三、信息隐蔽准则4.2 4.2 软件设计准则
19、软件设计准则19四、模块独立性准则四、模块独立性准则u软件模块独立性的含义是指开发具有功能专一,模块之软件模块独立性的含义是指开发具有功能专一,模块之间无过多相互作用的模块。又称为间无过多相互作用的模块。又称为模块独立性准则模块独立性准则。软件系统中每个模块只涉及软件要求的具体的子功能,软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。这种类型的而和软件系统中其他模块的接口是简单的。这种类型的模块可以并行开发,开发容易,能减少错误的影响,使模块可以并行开发,开发容易,能减少错误的影响,使模块容易组合、修改及测试。模块容易组合、修改及测试。提高模块质量在于提高
20、模块独立性。提高模块质量在于提高模块独立性。模块的独立性的度量标准是用模块的独立性的度量标准是用耦合性和内聚性耦合性和内聚性两个定两个定性指标来衡量。性指标来衡量。独立性比较强的模块应该是具有高内聚性和低耦合度独立性比较强的模块应该是具有高内聚性和低耦合度4.2 4.2 软件设计准则软件设计准则20耦合性耦合性(Coupling)模块分解的一个目标是使块间联系尽可能模块分解的一个目标是使块间联系尽可能小,达到这个目标可通过以下措施。小,达到这个目标可通过以下措施。每个模块用过程语句(或函数方式等)调用其他模块。模块间传送的参数为数据型。模块间公用的信息(如参数等)尽量少。耦合性耦合性是指软件结
21、构中模块相互连接的紧密程度,是模块间相互连是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。模块分解的一个目标是使块间联系尽可能小,块间联系的接性的度量。模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:大小可从三个方面衡量: 方式 块间联系方式有“直接引用”或“用过程语句调用”。 作用块间传送的共用信息(参数)类型,可为“数据型”、“控制型”或“混合型”(数据/控制型)。 数量块间传送的共用信息的数量。方式数据作用少多数量控制混合直接引用过程调用21模块间耦合的类型:模块间耦合的类型:模模块块独独立立性性弱弱(低耦合低耦合)强强(中耦合中耦合)(较强耦合较
22、强耦合)(强耦合强耦合)外部耦合公共耦合内容耦合无直接耦合数据耦合标记耦合高高低低耦耦合合性性控制耦合22(1) 无直接耦合 两个模块没有直接关系两个模块没有直接关系(模块模块1和模块和模块2),模块独,模块独立性最强。立性最强。模块模块1 1模块模块2 2模块模块3 3模块模块4 423(2) 数据耦合数据耦合(数据耦合(Data Coupling): 一个模块传送给另一个模块一个模块传送给另一个模块的参数是一个单个的数据项。的参数是一个单个的数据项。一模块调用另一模块时,被调用模块的输入、输出都是简单一模块调用另一模块时,被调用模块的输入、输出都是简单的数据的数据( (若干参数若干参数)
23、)。属松散耦合。属松散耦合。数据耦合举例数据耦合举例开发票开发票计算水费计算水费单价单价数量数量金额金额24(3) 标记耦合(复合型耦合)复合耦合(复合耦合(Stamp Coupling)(标记标记,特征耦合特征耦合) 一个模块传送给另一个模块的参数是一个复合的一个模块传送给另一个模块的参数是一个复合的数据结构。例如,包含几个数据单项的记录。数据结构。例如,包含几个数据单项的记录。如果两个模块通过传递数据结构如果两个模块通过传递数据结构( (不是简单数据,而不是简单数据,而是记录、数组等是记录、数组等) )加以联系,或都与一个数据结构加以联系,或都与一个数据结构有关系有关系, , 则称这两个模
24、块间存在标记偶合。则称这两个模块间存在标记偶合。25标记耦合举例标记耦合举例“住户情况住户情况”是一个数据结构是一个数据结构, ,图中模块都与此数据结构有关图中模块都与此数据结构有关. .“计算水费计算水费”和和“计算电费计算电费”本无关本无关, ,由于引用了此数据结构产生依赖关由于引用了此数据结构产生依赖关系系, ,它们之间也是标记偶合它们之间也是标记偶合. .26将标记耦合修改为数据耦合举例将标记耦合修改为数据耦合举例计算水电费计算水电费计算水费计算水费计算电费计算电费本月本月用水量用水量本月本月用电量用电量水费水费电费电费27(4) 控制耦合(Control Coupling)控制耦合控
25、制耦合 一个模块传递给另一模一个模块传递给另一模块的信息是用于控制该块的信息是用于控制该模块内部逻辑的控制信模块内部逻辑的控制信号。显然,对被控制模号。显然,对被控制模块的任何修改,都会影块的任何修改,都会影响控制模块。响控制模块。A BFlagf1f2fn.一模块向下属模块传递的信息一模块向下属模块传递的信息 (开关量、标志等控制被调开关量、标志等控制被调用模块决策的变量用模块决策的变量) 控制了被调用模块的内部逻辑。控制了被调用模块的内部逻辑。28控制耦合举例控制耦合举例(控制信号控制信号)29控制耦合增加了理解和编程的复杂性,调用模块控制耦合增加了理解和编程的复杂性,调用模块必须知道被调
展开阅读全文