{工程设计管理}软件工程031设计工程)

上传人:卓****库 文档编号:140686886 上传时间:2020-07-31 格式:PPTX 页数:62 大小:331.38KB
返回 下载 相关 举报
{工程设计管理}软件工程031设计工程)_第1页
第1页 / 共62页
{工程设计管理}软件工程031设计工程)_第2页
第2页 / 共62页
{工程设计管理}软件工程031设计工程)_第3页
第3页 / 共62页
{工程设计管理}软件工程031设计工程)_第4页
第4页 / 共62页
{工程设计管理}软件工程031设计工程)_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《{工程设计管理}软件工程031设计工程)》由会员分享,可在线阅读,更多相关《{工程设计管理}软件工程031设计工程)(62页珍藏版)》请在金锄头文库上搜索。

1、软件工程,第5章 设计工程,1,复旦大学计算机科学与工程系 软件工程课程,内容摘要,软件设计工程概述 软件设计过程 软件体系结构设计 部件级设计技术(自学) 设计规约与设计评审(自学),2,内容摘要,软件设计工程概述 软件设计原则 软件体系结构设计 部件级设计技术 设计规约与设计评审,3,软件设计工程概述,软件需求分析解决“做什么”的问题,软件设计过程则解决“怎么做”的问题 软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计,4,软件设计的任务,使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/

2、类设计、体系结构设计、接口设计、部件级设计,5,接口设计,接口设计主要包括三个方面: 设计软件模块间的接口 设计模块和其他非人的信息生产者和消费者(比如外部实体)之间的接口 设计人(用户)和计算机间的接口,6,部件级设计,部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述。 从类为基础的模型、流模型、行为模型中得到的信息是部件设计的基础。,7,衡量设计的技术标准,1)设计出来的结构应是分层结构,从而建立软件成份之间的控制。 2)设计应当模块化,从逻辑上将软件划分为完成特定功能或子功能的部件。 3)设计应当既包含数据抽象,也包含过程抽象。 4)设计应当建立具有独立功能特征的模块。

3、5)设计应当建立能够降低模块与外部环境之间复杂连接的接口。 6)设计应能根据软件需求分析获取的信息,建立可驱动、可重复的方法。,8,总体设计,总体设计的基本目的就是回答“概括地说,系统应该如何实现?”。因此,总体设计又称为概要设计或初步设计。 通过这个阶段的工作将划分出组成系统的物理元素程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级。 总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。,9,总体设计的必要性,可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中

4、选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。,10,总体设计过程(共9个步骤),总体设计过程通常由两个主要阶段组成: A.系统设计阶段,确定系统的具体实现方案; B.结构设计阶段,确定软件结构(模块组成的层次系统)。,11,总体设计过程(共9个步骤),典型的总体设计过程包括下述9个步骤: 1. 设想供选择的方案 在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。在总体设计阶段开始时只有系统的逻辑模型,分析员有充分的自由分析比较不同的物理实现方案。 一种常用的方法:设想把数据流图中的处理分组的各种可能的方法。抛弃在技术上行不通的方法。,12,总

5、体设计过程(共9个步骤),2. 选取合理的方案 通常至少选取低成本、中等成本和高成本的三种方案。在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。 对每个合理的方案分析员都应该准备下列4份资料: (1) 系统流程图; (2) 组成系统的物理元素清单; (3) 成本/效益分析; (4) 实现这个系统的进度计划。,13,总体设计过程(共9个步骤),3. 推荐最佳方案 分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。 1.用户和有关的技术专家应该认真审查分析员所推荐的最佳系统,如果该系统确

6、实符合用户的需要,并且是在现有条件下完全能够实现的,则 2.应该提请使用部门负责人进一步审批。在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。,14,总体设计过程(共9个步骤),4. 功能分解 为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成:首先进行结构设计,然后进行过程设计。 1.结构设计确定程序由哪些模块组成,以及这些模块之间的关系,属于总体设计阶段的任务; 2.过程设计确定每个模块的处理过程。结构设计是总体设计阶段的任务,过程设计是详细设计阶段的任务。,15

7、,总体设计过程(共9个步骤),5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能。,软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。,16,总体设计过程(共9个步骤),6. 设计数据库 对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。 7. 制定测试计划 在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。,17,

8、总体设计过程(共9个步骤),8. 书写文档 应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种: (1) 系统说明: 主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具(例如,PDL语言)简要描述的各个模块的算法,模块间的接口关系等等。 (2) 用户手册: 根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。 (3) 测试计划: 包括测试策略,测试方案,预期的测试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结

9、果,18,总体设计过程(共9个步骤),9. 审查和复审 最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,19,内容摘要,软件设计工程概述 软件设计原理 软件体系结构设计 部件级设计技术 设计规约与设计评审,20,抽象化与逐步求精,抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。 抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概念是上层概念的精化和细化。 软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述,21,逐步求精,逐步求精,把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题

10、的解法(“为了能集中解决主要问题而尽量推迟对问题细节的考虑”)。 抽象使得设计者能够描述过程和数据而忽略低层的细节,而求精有助于设计者在设计过程中揭示低层的细节;,二者的目的不同,22,模块化,模块化,即把软件按照规定原则,划分为一个个较小的,相互独立的但又相互关联的部件,实际上是系统分解和抽象的过程。 模块是数据说明、可执行语句等程序对象的集合,它是单独命名的,并且可以通过名字来访问。 例如,过程。函数、子程序、宏等 面向对象方法学中的对象、对象内的方法(服务)也是模块。模块是构成程序的基本构件。,23,设C(x)是描述问题x复杂性的函数,E(x)是解决问题x所需工作量(按时间计算)的函数。

11、对于两个问题p1 和p2,如果: C(p1)C(p2)(5.1a) 那么 E(p1)E(p2) (5.1b) 即:问题越复杂,解决问题所需要的花费更多。,24,通过对人解决问题的实验,又存在另一个有趣的规律: C(p1p2)C(p1)C(p2) (5.2) 方程式(5.2)意味着p1和p2组合后的复杂性比单独考虑每个问题时的复杂性要大。考虑方程式(5.2)和方程式(5.1)隐含的条件,我们可以得出: E(p1p2) E(p1)E(p2) (5.3) 不等式(5.3)表达出了一个对于模块化和软件具有十分重要意义的结论(即,模块化的论据):将复杂问题分解成可以管理的片断会更使解决问题更加容易。,2

12、5,问题:如果我们无限制地划分软件,开发它所需的工作量会变得小到可以忽略? 事实上,影响软件开发的工作量的因素还有很多,例如模块接口费用等等。 上述不等式只能说明,当模块的总数增加时,单独开发各个子模块的工作量之和会有所减少。,26,如果模块是相互独立的,当模块变得越小,每个模块花费的工作量越低; 但当模块数增加时,模块间的联系也随之增加,把这些模块联接起来的工作量也随之增加(设计模块间接口所需工作量增加)。,27,信息隐藏,信息隐藏:每个模块的实现细节对于其它模块来说应该是隐蔽的; 块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用; 通过信息隐蔽,则可定义和实施对模块的过

13、程细节和局部数据结构的存取限制。,28,模块独立,模块独立:模块完成独立的功能并且与其他模块的接口简单,符合信息隐蔽和信息局部化原则,模块间关联和依赖程度尽可能小。 模块独立的重要性 功能被划分,并且接口被简化,所以具有有效模块化的软件更易于开发。 由于因设计和编码修改引起的副作用受到局限,错误传播被减小,并且模块复用成为可能,所以独立的模块更易于维护和测试。,29,模块独立,模块的独立性可以由两项指标来衡量:内聚度与耦合度: 内聚(cohesion)是一个模块内部各个元素彼此结合的紧密程度的度量。 耦合(coupling)是模块之间的相对独立性(互相连接的紧密程度)的度量。,30,内聚,一般

14、模块的内聚性分为七种类型,31,内聚,1)巧合内聚(偶然内聚):如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。将几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块称为巧合内聚模块。 2)逻辑内聚:指完成一组逻辑相关任务的模块,调用该模块时,由传送给模块的控制型参数来确定该模块应执行哪一种功能。 3)时间内聚:指一个模块中的所有任务必须在同一时间段内执行。例如初始化模块和终止模块。,32,内聚,4)过程内聚 :指一个模块完成多个任务,这些任务必须按指定的过程(procedural)执行。 5)通信内聚 :指一个模块内所有处理元素都集中在某个数据结构的一块区

15、域中。 6)顺序内聚:指一个模块完成多个功能,这些功能又必须顺序执行。 7)功能内聚 :指一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联系,不可分割的。,33,耦合和内聚的概念是Constantine, Yourdon, Myers和Stevens等人提出来的。按照他们的观点,如果给上述几种内聚的优劣评分,将得到如下结果: 功能内聚10分时间内聚3分 顺序内聚9分逻辑内聚1分 通信内聚7分偶然内聚0分 过程内聚5分 事实上,没有必要精确确定内聚的级别。重要的是设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获得较高的模

16、块独立性。,34,耦合,一般模块之间可能的耦合方式有七种类型,35,耦合,1)内容耦合:如果一个模块直接访问另一个模块的内部数据;或者一个模块不通过正常入口转到另一模块内部;或者两个模块有一部分程序代码重迭;或者一个模块有多个入口,则两个模块之间就发生了内容耦合。 2)公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。 3)外部耦合:指模块间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式、通信协议上)时,称为外部耦合。,36,耦合,4)控制耦合:如果一个模块传送给另一个模块的参数中包含了控制信息,该控制信息用于控制接收模块中的执行逻辑,则称为控制耦合。 5)标记耦合:两个模块之间通过参数表传递一个数据结构的一部分(如某一数据结构的子结构),就是标记耦合。 6)数据耦合:两个模块之间仅通过参数表传递简单数据,则称为数据耦合。 7)非直接耦合:如果两个模块之间没有直接关系,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号