SE06软件设计基础幻灯片

上传人:E**** 文档编号:89707640 上传时间:2019-05-31 格式:PPT 页数:141 大小:1.17MB
返回 下载 相关 举报
SE06软件设计基础幻灯片_第1页
第1页 / 共141页
SE06软件设计基础幻灯片_第2页
第2页 / 共141页
SE06软件设计基础幻灯片_第3页
第3页 / 共141页
SE06软件设计基础幻灯片_第4页
第4页 / 共141页
SE06软件设计基础幻灯片_第5页
第5页 / 共141页
点击查看更多>>
资源描述

《SE06软件设计基础幻灯片》由会员分享,可在线阅读,更多相关《SE06软件设计基础幻灯片(141页珍藏版)》请在金锄头文库上搜索。

1、第六章 软件设计基础,软件工程,软件设计的问题,Who,What,Why,3W,1996年前后,微软掌上电脑操作系统 Win CE 1.0,本章提要,软件设计过程 软件设计基本概念 抽象与逐步求精、模块化与信息隐藏、软件总体结构设计、数据结构设计、软件过程设计 过程设计技术和工具 结构化程序设计、图形表示法、判定表、过程设计语言、过程设计工具之比较 设计规格说明与评审,软件设计过程,编码,测试,设计,开发阶段的信息流,软件设计过程,不同的软件设计方法会产生不同的设计形式。 数据设计把信息描述转换为实现软件所要求的数据结构。 总体结构设计旨在确定软件各主要部件之间的关系。 过程设计将软件体系结构

2、的组成部件转变为对软件组件的 过程性描述 接口设计根据数据流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间的交互机制。 根据设计结果编制代码 设计阶段做的决策直接影响软件质量,没有良好的设计就没有稳定的系统,也不会有易维护的软件 统计表明:设计、编码和测试这三个活动一般占用整个软件开发费用(不包括维护阶段)的75%以上,软件设计过程,软件设计也可看作将需求规格说明逐步转换为软件源代码的过程 从工程管理的角度看,软件设计可分为概要设计和详细设计两大步骤 概要设计是根据需求确定软件和数据的总体框架 详细设计是将其进一步精化成软件的算法表示和数据结构 概要设计和详细设计由若干活动组

3、成,除总体结构设计、数据结构设计和过程设计外,许多现代应用软件,还包括一个独立的界面设计活动,软件设计的任务,概要设计 制定规范 软件系统结构的总体设计 处理方式设计 数据库设计 可靠性设计 编写概要设计阶段的文档 概要设计评审,软件设计的任务,制定规范 首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括: 阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序 根据目标确定最合适的设计方法 规定设计文档的编制标准 规定编码的信息形式,与硬件、操作系统的接口规约,命名规则,软件设计的任务,软件系统结构的总体设计 基于

4、功能层次结构建立系统 采用某种设计方法,将系统按功能划分成模块的层次结构 确定每个模块的功能 建立与已确定的软件需求的对应关系 确定模块间的调用关系 确定模块间的接口 评估模块划分的质量,软件设计的任务,处理方式设计 确定为实现系统的功能需求所必需的算法,评估算法的性能 确定为满足系统的性能需求所必需的算法和模块间的控制方式 周转时间 响应时间 吞吐量 精度 确定外部信号的接收发送形式,软件设计的任务,数据库设计 确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计 确定输入,输出文件的详细的数据结构 结合算法设计,确定算法所必需的逻辑数据结构及其操作 确定对逻辑

5、数据结构所必需的那些操作的程序模块(软件包) 限制和确定各个数据设计决策的影响范围 若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则,软件设计的任务,数据的保护性设计(防卫性设计) 在软件设计中就插入自动检错,报错和纠错的功能 一致性设计 保证软件运行过程中所使用的数据的类型和取值范围不变 在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏 冗余性设计(可用于可靠性设计) 针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果,软件设计的任务,可靠性设计

6、 可靠性设计也叫做质量设计 在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。 编写概要设计阶段的文档 概要设计阶段完成时应编写以下文档: 概要设计说明书 数据库设计说明书 用户手册 制定初步的测试计划,软件设计的任务,概要设计评审 可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求 接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内 风险:确认该设计在现有技术条件下和

7、预算范围内是否能按时实现 实用性:确认该设计对于需求的解决方案是否实用 技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达,软件设计的任务,概要设计评审 可维护性:确认该设计是否考虑了方便未来的维护 质量:确认该设计是否表现出良好的质量特征 各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么 限制:评估对该软件的限制是否现实,是否与需求一致 其它具体问题:对于文档、可测试性、设计过程等进行评估,软件设计的任务,详细设计 在详细设计过程中,需要完成的工作是: 确定软件各个组成部分内的(操作)算法以及各部分的内部数据组织(数据结构) 选定某种过程的表达形式来描述(操作)算法 产

8、生描述各软件组件的详细设计的文档 进行详细设计的评审,软件设计的基本概念,软件设计基本概念是从二十世纪60年代陆续提出的 软件设计者根据这组概念进行设计决策,如: 划分子部件的标准 从软件的概念表示中分离出功能和数据结构的细节 以统一的标准衡量软件设计质量 讨论这组概念的目的是为了保证程序能“正常工作”,软件设计的基本概念,主要内容 抽象与逐步求精 模块化与信息隐藏 软件总体结构设计 数据结构设计 软件工程设计,抽象与逐步求精,抽象是管理、控制复杂性的基本策略。“抽象”是心理学概念,它要求人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节 使用抽象技术便于人们用“问题域”的概念和术语

9、描述问题,而无须过早地转换为那些不熟悉的结构 软件设计过程是,在不同抽象级别上考虑、处理问题的过程 在最高抽象级别上,用面向问题域的语言叙述“问题”,概括“问题解”的形式 不断地具体化,不断地用面向过程的语言描述问题 在最低的抽象级别上给出可直接实现的“问题解”,即程序,抽象与逐步求精,软件工程过程的每一步都是对较高一级抽象的解作一次较具体化的描述 在系统定义阶段, 软件系统被描述为基于计算机的大系统的一个组成部分 在软件规划和需求分析阶段,软件用问题域约定的习惯用语表达 从概要设计过渡到详细设计时,抽象级再一次降低 编码完成后,达到了抽象的最低级,抽象与逐步求精,在由高级抽象到低级抽象的转换

10、过程中,伴随着一连串的过程抽象和数据抽象 过程抽象把完成一个特定功能的动作序列抽象为一个过程名和参数表,通过指定过程名和实际参数调用此过程 数据抽象把一个数据对象的定义(或描述 )抽象为一个数据类型名,用此类型名可定义多个具有相同性质的数据对象,不同抽象级别软件的形式,由N.Wirth提出的“逐步求精”概念,与“抽象”密切相关,是早期的自顶向下设计策略 “逐步求精”的主要思想是,针对某个功能的宏观描述用逐步求精的方法不断地分解,逐步确立过程细节,直至该功能用程序语言描述的算法实现为止 求精的每一步都是用更为详细的描述替代上一层次的抽象描述,在整个设计过程中产生的,具有不同详细程度的各种描述组成

11、系统的层次结构 层次结构的上一层是下一层的抽象,下一层是上一层的求精 在过程求精的同时,伴随着数据求精,无论是过程还是数据,每个求精步都蕴含着某些设计决策,设计人员必须掌握一些基本的准则和各种可能的候选方法,模块化与信息隐藏,模块的概念 信息隐藏 模块的度量:内聚、耦合,模块化,把软件划分为可独立命名和编址的部件,每个部件称为一个模块,当把所有模块组装到一起时则获得满足问题需要的一个解 模块是数据说明、可执行语句等程序对象的集合,它是单独命名的,并且可以通过名字来访问的。例如过程、函数、子程序、宏等等都可作为模块 模块具有三个基本属性 功能模块实现的功能 逻辑描述模块内部怎么做 状态模块使用时

12、的环境和条件,模块化,模块的特征 外部特征模块的名字、参数等 内部特征完成模块功能的程序代码和模块内部数据 模块化,即把软件按照规定原则,划分为一个个较小的,相互独立的但又相互关联的部件。模块化实际上是系统分解和抽象的过程 软件总体结构体现了模块化思想,模块化,理想的模块 每个模块只解决一个问题 每个模块的功能应该明确,使人容易理解 模块之间的联结关系简单,具有独立性 用理想模块构建的系统,容易使人理解,易于编程,易于测试,易于修改和维护 对用户来说,其感兴趣的是模块的功能,而不必理解模块内部的结构和原理,模块化的理论依据,设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工

13、作量。对于两个问题P1和P2,如果有: C(P1)C(P2), 则显然有: E(P1)E(P2); 根据人类解决一般问题的经验,有: C(P1+P2)C(P1)+C(P2); 进而获得: E(P1+P2)E(P1)+E(P2)。 这种“分而治之”的思想提供了模块化的理论依据:把复杂问题分解成许多容易解决的小问题,则原来复杂的问题也就容易解决了。,模块化与软件成本,成本或工作量,模块数目,模块成本,接口成本,最小成本区,软件总成本,M,模块化,采用模块化原理使软件结构清晰,不仅容易设计也容易阅读和理解: 因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易调试和测试,有助于提

14、高软件的可靠性; 因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性; 模块化也有助于软件项目的组织管理,一个复杂的大型软件可以有许多程序员分工编写,进而提高了开发效率。,如何进行模块化,应用模块化原则,自然会产生一个问题 “为了得到一组模块,应该怎样分解软件呢?” 涉及以下概念: 信息隐藏 局部化 内聚度 耦合度,信息隐藏和局部化,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息对不需要这些信息的模块来说是不能访问的 局部化指把一些关系密切的软件元素放得彼此靠近 显然,局部化有助于信息隐藏 实际上应该隐藏的不是模块的一切信息,而是模块的实现细节。因此这条原理也

15、被称作“细节隐藏” 隐藏,意味着有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息 信息隐藏和局部化有助于软件测试和维护!,模块独立性,模块独立性是模块化、信息隐藏和局部化等概念的直接结果。,为什么模块独立性很重要? 有效模块化的软件比较容易开发出来; 独立的模块比较容易测试和维护。 总之,模块独立是设计好坏的关键!,模块独立的含义: 模块完成独立的功能,与其他模块的接口简单; 符合信息隐蔽和信息局部化原则; 模块间关连和依赖程度尽可能小。,模块独立的度量,模块的独立程度可有由两个定性标准来衡量 耦合 耦合衡量不同模块彼此间相互依赖的

16、紧密程度 内聚 内聚衡量同一模块内部各元素彼此组合的紧密程度,耦合性,耦合是软件结构内不同模块之间相互关联的度量,是影响软件复杂程度和设计质量的重要因素 耦合强度依赖的因素 一模块对另一模块的引用 一模块向另一模块传递的数据量 一模块施加到另一模块控制的数量 模块间接口的复杂程度,耦合性,耦合性,模块独立性,数据耦合,控制耦合,公共环境耦合,内容耦合,特征耦合,外部耦合,非直接耦合,非直接耦合,两个模块没有直接关系(模块1和模块2),它们之间的联系完全是通过主模块的控制和调用来实现,非直接耦合是模块独立性最强的,数据耦合,一模块调用另一模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构和外部变量)来交换输入、输出信息。属松散耦合,开发票,计算水费,单价 数量,金额,特征耦合,如两个模块之间是通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系, 则称这两个模块间存在特征偶合。,计算水电费,计算水费,计算电费,住户情况,水费,电费,住户情况,“住户情况”是一个数据结构,图中

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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