- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件开发过程与质量保证-4-软件设计20091
软件开发过程与质量保证 第四章 软件设计(1) 场景互动 已经对用户的需求进行了深入的理解和整理,下面为软件的最终实现,我们还需要做哪些工作? 数据存储方式是什么?数据库?还是文件?如何表示? 如何解决软件的复杂度,确保可支持性(可理解、可维护、可扩展),有效地组织开发? 如何实现用户的性能上的要求?效率如何提高?如何节省空间? 与外界进行沟通的形式是什么? 一、软件设计概述 数据设计 将分析时创建的数据模型变换成实现软件所需的数据结构。在实体关系图中定义的数据对象和关系以及数据字典中描述的详细数据内容提供了数据设计活动的基础。 详细的数据结构设计将在过程设计中进行。 体系结构设计 是建立系统的体系结构框架、详细设计必须符合的组建结构以及组件之间相互通信的规范。 体系结构设计的表示是从分析阶段的系统模型中导出。 接口设计 描述了软件内部、软件和需要协作的系统之间以及软件和人之间如何进行交互。 数据和数据流图提供了接口设计所需要的信息。 构件级设计 也称为过程设计,将软件体系结构的结构性元素变换成为对软件构件的过程性描述,也就是模块的数据结构与算法的设计。 1. 软件设计的过程 从工程管理的角度来看的设计过程 最初只是描绘出软件的总的框架(概要设计),然后进一步细化,在此框架中填入细节,把它加工成在程序细节上非常接近于源程序的软件表示(详细设计)。 概要设计 将软件需求转化为数据结构和软件的体系结构。 详细设计 确定软件各个组成部分内的算法以及各部分的内部数据组织 选定某种过程的表达形式来描述各种算法。 软件设计不同观察角度之间的关系 2. 软件设计的目的 设计是一个建模活动,它使用分析阶段得出的信息(即需求模型)并把这些信息转换为叫做解决方案的模型。 3. 软件设计的目标 层次关系明晰 软件实体有明显的层次关系,利于软件元素间控制 软件实体模块化 软件实体应该是模块化的,模块具有独立功能 软件实体与环境的界面清晰 设计规格说明清晰、简洁、完整、无二义性 4. 软件设计的概念 抽象 逐步求精 模块化 信息隐藏 控制层次 抽象 “抽象”的心理学观念使人能够集中于某个一般性级别上的问题,而不去考虑无关的底层细节。 这种解决问题的方式也应用于软件领域。软件过程中的每一个步骤都是软件解决方案抽象级别上的求精 。 逐步求精 逐步求精是由Niklaus Wirth最初提出的一种自顶向下设计策略,系统是通过过程细节的连续的精化层次开发的,层次结构通过逐步地分解功能的宏观声明直至形成程序设计语言的语句而开发。 逐步求精和抽象是互补的概念。随着抽象层次的降低,逐步求精越来越精化,并不断揭示底层的一些细节。 模块化 软件被划分成独立命名和可独立访问的被称作模块的构成成分,它们集合到一起满足问题的需求。 信息隐藏 信息隐藏的原则提出“特征在于每个模块都对其他模块隐藏的设计决策”,也就是说模块应该设计成其中包含的信息(过程和数据)对不需要这些信息的其他模块式不可访问的。 信息隐藏为后期的软件测试和维护提供了极大的方便。一旦在进行测试时发现缺陷,那么对模块的变更不会影响或者至少很少影响其他模块,不会将影响扩大并传播。 控制层次 也称为“程序结构”,它代表了程序构件(模块)的组织并暗示控制的层次结构。 一般用四个特征来描述:深度、宽度、扇入和扇出。 深度 定义为控制层次的层数,或者说是控制级别的数量。 宽度 定义为控制层次的跨度。 扇入 指明有多少个模块直接控制一个给定的模块。 扇出 指明被一个模块直接控制的其他模块的数量。 二、独立性原则 含义 模块独立性, 是指软件系统中每个模块只涉及软件要求的具体的子功能, 而和软件系统中其它的模块的接口是简单的 衡量独立性的标准 内聚 模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。 耦合 模块之间的互相连接的紧密程度的度量 1.内聚 偶然内聚 设计者随意决定将无关系的几个功能组合在一个模块中,该模块的内聚程度就是偶然内聚。 例子 为了节省空间,将多个模块中重复出现的语句提取出来,组成一个新的模块 缺点 这样的模块使产品的可维护性降低 这些模块是不可重用的 矫正办法 因为它执行多个操作,可将模块分成更小的模块,每个小模块执行一个操作。 逻辑内聚 把逻辑上相似的功能结合到一个模块中。 放到一个模块中的原因是,使用统一动词但针对不同的对象,有相同的代码段;起始于某多路开关,以后转向不同的代码段,但各代码段间关系很少。 例子1 调用模块new_operration function_code=7; New_operation(function_code,dummy_1,dummy_2,dummy_3); //dummy_1、dummy_2和dummy_3是伪
文档评论(0)