《软件工程04系统设计教程》由会员分享,可在线阅读,更多相关《软件工程04系统设计教程(149页珍藏版)》请在金锄头文库上搜索。
1、,软件工程,第四章 系统设计,本章学习目标,2,3,能根据具体项目进行模块划分和软件架构设计,掌握软件设计的主要技术、主要内容和主要方法,理解软件设计和需求分析之间的相互关系,设计工程概要介绍,软件设计定义: 在IEEE610.12-90中,软件设计定义为软件系统或组件的架构、构件、接口和其他特性的定义过程及该过程的结果。,理念: 功在平时,受益最后,分析,设计,编码,测试,维护,设计工程概要介绍,软件设计 软件工程生命周期中的一个活动 进行软件编码的基础 软件需求分析被转化为软件的内部结构 是连接用户需求和软件技术的桥梁,用户需求,软件技术,软件设计,设计工程活动,软件架构设计(有时称为顶层
2、设计或概要设计) 描述软件的顶层架构和组织,划分不同的组件。解决系统总体上应该如何做?,即将分析模型映射为具体的软件结构。 软件详细设计 详细设计则将概要设计的结果具体化,详细描述各组件以便能够编码实现 。 注意: 软件设计主要为分解设计D-design(Decomposition design); 可以包括系列模式设计FP-design(Family Pattern design);,分解设计:将软件映射为各组件,设计工程活动,详细设计的任务和目标 算法过程的设计 选择某种图形、表格、语言等合适的工具,表示每个处理过程的详细算法。 2) 数据结构的设计 对于处理过程中涉及的概念性数据类型进行
3、确切的定义。 3) 数据库物理设计 主要确定那些依赖于具体使用的数据库系统的数据存储记录格式、存储方法和存储记录安排等。 4) 信息编码设计 信息编码是指将某些数据项的值用某一代号来表示,以提高数据的处理效率 5) 测试用例的设计 测试用例包括输入数据和预期结果等内容。由于进行详细设计的软件人员对具体过程的要求最清楚,因而由他们设计测试用例是最合适。 6) 其他设计 根据软件系统的具体要求,还可能进行网络系统的设计输入/输出格式设计、人机对话设计、系统配置设计等。 7) 编写“详细设计说明书” 软件详细设计说明书,对概要设计的进一步细化,一般由各部分的担当人员依据概要设计分别完成,然后在集成,
4、是具体的实现细节。理论上要求可以照此编码。,设计过程和质量,好的设计应该具有如下三个特点 设计必须实现在分析模型中包含的所有明确要求,必须满足客户所期望的所有隐含要求; 设计必须是对编码人员、测试人员及后续的维护人员必须是可读可理解的; 设计应提供该软件的完整视图,以从实现的角度解决数据、功能及行为等各领域方面的问题,设计过程和质量,设计指导原则 设计应该是一种架构 设计应该是模块化的 设计应该包含数据、体系结构、接口和组件各个方面 应该设计出系统所用的数据结构 应该设计出展现独立功能特性的各组件 应该设计出各组件与外部环境连接的各接口 设计由软件需求分析过程中获得信息驱动,采用可重复使用的方
5、法导出 设计应该采用正确清楚的表示法,设计过程和质量,设计质量属性 功能性 易用性 可靠性 性能 可支持性 包含三个属性:扩展性、适应性、可维护性,设计模型,模型输入 软件需求的数据模型、功能模型和行为模式 分类 数据设计 架构设计 接口设计 组件级设计,分析模型到设计模型的转化,基于场景的元素,面向流的元素,行为元素,基于类的元素,用例文本 用例图 活动图 泳道图,数据流图 控制流图 处理叙述,状态图 顺序图,类图 分析包 CRC模型 协作图,分析模型,设计模型,体系结构设计,数据/类设计,接口设计,构件级 设计,设计相关概念,信息隐藏 功能独立 细化 重构,抽象 体系结构 设计模式 模块化
6、,概念1. 抽象,含义:是“忽略具体的信息将不同事物看成相同事物的过程” 在抽象的最高层是使用待解决的问题领域内的术语概括性的描述解决方案。在中间层次的抽象则更多的采用面向过程化的方法,即面向问题的术语与面向实现的术语相结合。而最低层的抽象则是用直接实现的方式来描述。 软件设计的每一个步骤都是对相应层次解决方案的抽象的逐步求精。可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节 抽象机制:参数化、规范化 规范化抽象 数据抽象:描述数据对象的冠名数据集合 过程抽象:具有明确和有限功能的指令序列,门 包含属性:门的类型、转动方向、开门机关、重量和尺寸等,开 一系列过程:走到门前,伸出手并抓住
7、把手,转动把手并拉门,离开打开的门等,概念2. 体系结构,定义:软件的整体结构和这种结构为系统提供概念上完整性的方式 体系结构设计可以使用大量的一种或多种模型来表达 结构模型 框架模型 动态模型 过程模型 功能模型,作用:软件设计的目标之一就是导出系统的体系结构图,该图作为一个框架,将指导更为详细的设计活动。,概念3. 设计模式,含义 在给定上下文环境中一类共同问题的共同解决方案 被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 微观结构 实体模式 结构模式 行为模式 设计模式:可复用面向对象软件的基础:面向对象
8、的设计中精选出23个设计模式,设计模式:可复用面向对象软件的基础,Erich Gamma,Richard Helm,John Vlissides,Ralph Johnson,描述设计模式,模式名:使用简短却富有表现力的名称描述模式的本质 含义:描述模式并说明该模式是什么 别名:列出该模式的所有同义词 动机:提供一个问题的示例 适用性:记录能够应用该模式的特殊的设计环境 结构:描述实现该模式所必需的类 参与者:描述实现该模式所必需的类的职责 协作:描述参与者如何协作以便实现其职责 因果关系:说明“设计的影响因素”,即影响模式的因素和模式在实施时必须考虑的潜在的权衡 相关模式:相关设计模式的交叉索
9、引 实现、代码示例、已知应用,设计模式举例抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。,概念4. 模块化,含义 软件被划分为命名和功能相对独立的多个组件(通常称为模块),通过这些组件的集成来满足问题的需求 软件的模块性 程序可被智能管理的单一属性 (内聚与耦合) 模块化的理论依据 基于人类解决问题观测数据,模块化,基于人类解决问题的观测数据,把复杂的问题分解成容易解决的问题,则原来的问题也就容易解决了。 设函数C(x)定义为问题x的复杂程度,函数E(x)定义为解决问题的工件(时间): 对两个问题p1和p2,如果有 C(p1) C(p2) (4-1a) 显然 E
10、(p1) E(p2) (4-1b) 若 C(p1 + p2) C(p1) + C(p2) (4-2) 则 E(p1 + p2) E(p1) + E(p2) (4-3) 推论:无限分解任务,那开发该软件的工作量将变成足够小以至于可以忽略?,实现劳动分工,提高开发效率,模块化,模块化和软件成本,如何确定最小代价区间M ?,模块化,模块化设计标准 模块化的分解性 :可分解为子问题 模块化的组合性 :组装可重用的组件 模块化的可理解性 :可作为独立单元理解 模块化的连续性 :需求小变化只影响单个模块 模块化的保护 :模块内异常只影响自身,概念5. 信息隐藏,模块化基本问题 如何分解软件系统以达最佳的模
11、块划分 信息隐藏原则 模块应该具有彼此相互隐藏的特性 即:模块定义和设计时应当保证模块内的信息(过程和数据)不可以被不需要这些信息的其他模块访问 特点 抽象有助于定义构成软件的过程(或信息)实体。 信息隐藏原则定义和隐藏了模块内的过程细节和模块内的本地数据结构。,概念6. 功能独立,含义 每个模块只解决了需求中特定的子功能,并从程序结构的其他部分看该模块具有简单的接口 好处 易于开发:功能被划分,接口被简化 易于维护(和测试):次生影响有限,错误传递减少,模块重用 定性衡量标准 内聚性:模块的功能相对强度 耦合性:模块之间的相互依赖程度 模块独立性强 = 高内聚低耦合,概念7. 细化,含义 逐
12、步求精的过程 与抽象的关系 抽象使设计师确定过程和数据,但不局限于底层细节 细化有助于设计者在设计过程中揭示底层细节,概念8. 重构,含义 不改变组件功能和行为条件下,简化组件设计(或代码)的一种重组技术 方法 检查现有设计的冗余情况、未使用的设计元素、无效或不必要的算法、较差的构建方式或不恰当的数据结构,或任何其他可更改并导致更好设计的错误,数据设计,含义 数据设计(有时也被称为数据架构)构建高层抽象(客户/用户的数据视图)的数据模型、信息模型 相关概念 数据建模 数据结构 数据库 数据仓库,计算机存储、组织数据的方式,按照数据结构来组织、存储和管理数据的仓库,数据字典、E-R图、类图,为决
13、策制定,提供所有类型数据支持的战略集合,组件级别的数据设计,设计原则 应用于功能和行为系统分析的原则也应适用于数据设计 所有的数据结构及其对应的操作都应该确定 建立数据字典并在数据定义和程序设计中应用 低层次的数据设计应该推迟到设计的后期过程 数据结构的表示应该只对直接使用数据结构中数据的模块可见 开发有用的数据结构及其对应操作的程序库 软件设计和编程语言应该支持抽象数据类型的定义与实现,概念数据模型,物理数据模型,体系结构设计,含义及内容 系统需要执行的函数功能组件集(如数据库、计算模块) 组件之间通信、协同和合作的连接器 组件集成构成系统的约束 设计人员通过分析其组成部分的已知特性理解系统
14、整体特性的语义模型分析,风格和模式简要分类,数据中心架构,数据库系统;超文本系统;黑板系统,风格和模式简要分类,数据流体系架构,批处理序列;管道-过滤器,风格和模式简要分类,调用和返回架构(数据抽象与面向对象风格),主程序/子程序;分层,风格和模式简要分类,面向对象架构 系统组件封装数据和处理该数据的操作。组件之间的通信和协作通过消息传递实现,MVC架构,风格和模式简要分类,层次架构,体系结构组织与细化,两个基本问题 控制结构 在架构内部如何实现管理控制?是否有不同的控制架构存在? 数据传递 组件之间如何进行数据传递?数据流是否连续,或者传递给系统的数据对象是否零散?,接口设计,定义:描述了信
15、息如何流入和流出系统以及被定义为体系结构的一部分的构件之间是如何通信的。 内容: 1、UI设计(界面设计):美学、人体工程、技术 2、外部接口:与其他系统、设备、网络或其他信息生成者或使用者的外部接口:需求中收集,设计时检验。包括错误检查和适当的安全检查。 3、内部接口:各种设计构件之间的内部接口,来源:用例文本、用例图、状态图、泳道图、顺序图、数据流图、加工规约等。,接口设计-界面设计,易学?易用?易理解?,高效用户界面设计有三条重要原则(黄金原则): 允许用户操作控制(用户为中心) 减少用户记忆负担 保持界面一致,以不强迫用户进入不必要的或不希望的动作的方式来定义交互模式。 提供灵活的交互
16、。 允许用户交互被中断和撤销。 当技能级别增长时可以使交互流线化并允许定制交互。 使用户与内部技术细节隔离开来。 设计应允许用户与出现在屏幕上的对象直接交互。,以减少对短期记忆的要求。 建立有意义的缺省。 定义直观的快捷方式。 界面的视觉布局应该基于真实世界的象征。 以不断进展的方式揭示信息。,允许用户将当前任务放入有意义的环境中。 在应用系统家族内保持一致性。 如果过去的交互模型已经建立起了用户期望,除非有不得已的理由,否则不要改变它。,接口设计-界面设计,推荐读物 交互设计超越人机交互,电子工业出版社 设计心理学,唐纳德A诺曼 情感化设计,唐纳德A诺曼 可用性工程,尼尔森,设计过程,构件设计,定义:完整描述每个软件构件的内部细节。 内容: 1、为所有局部数据对象定义数据结构。 2、为所有在构件内发生处理定义算法细节。 3、定义允许访问所有构件操作(行为)的接口。 方法: 伪代码、流程图、盒图等。,部署