软 件 工 程(8-n)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
偶然性内聚 逻辑性内聚 时间性内聚 过程性内聚 通信性内聚 顺序性内聚 功能性内聚
内聚性分类
弱 强
偶然性内 逻辑性 时间性 过程性 通信性 顺序性 功能性 聚 内聚 内聚 内聚 内聚 内聚 内聚
低内聚
中内聚
高内聚
模块耦合性
耦合性是对一个软件结构内不同模块之间互连程度的度量。 耦合性的强弱取决于模块间接口的复杂程度,以及通过接
逻辑层 表示层
应用服务器
界面 业务 组件 业务 组件
数据层
数据库
业务 组件
抽象机模型
抽象机模型也称为分层模型,是建立子系统的接口模
型。它把子系统组织成一系列的层次,每一层提供一 组服务,每一层定义为一个抽象机。 例如:网络协议OSI参考模型
用户A 用户B
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
模块独立性由两个定性标准度量: 模块自身的内聚(Cohesion)),也称为块内联系或 模块强度, 模块之间的耦合(Coupling),也称为块间联系。 模块独立性愈高,则块内联系越强,块间联系越弱。
模块内聚性
内聚性是从功能的角度对模块内部聚合能力的量度。 高内聚是模块独立性追求的目标。 分类:
软件设计质量原则
设计过程要有全局观念 设计对于分析模型应该是可跟踪的 设计不应该从头做起 设计应该是可实现的
设计应该表现出一致性和集成性
设计应该能够适应修改 设计不是编码
应该复审每一步设计,以减少语义性错误
软件模块化设计
模块是一个独立命名的,拥有明确定义的输入、输出
足信息需求的前提下尽可能减少复杂的数据结构 模块规模应适中 软件结构的深度、宽度、 扇入数和扇出数都要适当 模块的作用域应该在控制域之内
力求降低模块接口的复杂程度,设计单入口、单出口
Байду номын сангаас
的模块
软件架构设计(体系结构)
软件体系结构是一种总体表达。 大型软件系统总是被分解成一系列子系统,由子系统提供
Delphi客户端 程序
数据库 (MSSQLServer, Oracle)
三层C/S架构
相当频繁的重复使用是一个主要的设计考虑因素,在这种
情形下需要建立应用程序模型以允许它的一部分被多个用 户界面查看组件重复使用。它有一个指导方针是,在应用 程序需要相同数据的多个视图的任何时候,开发者应该考 虑使用三层方式代替两层方式。 从两层模型迁移到三层模型需要考虑的主要问题包括适当 的网络资源的可用性和管理并发数据访问的加锁方案。
外部接口
通信协议 SDK 消息 分布式访问
系统构成模型
以数据为中心的结构模型 客户机/服务器结构模型
抽象机结构模型
以数据为中心的结构模型
由一组子系统构成,子系统交换信息,协调工作
有两种基本方法: 全部共享数据放在一个中央数据库中,所有子 系统都能从中存取数据。 每个子系统用各自的数据库与其他子系统进行 数据交互,通过消息传递来实现。 共享数据模型的优点是能够高效地共享大量的数 据; 缺点是子系统一定要与以数据为中心的体系结构 模型一致,系统变更或进化比较困难。
模块数与开发工作量
开 发 工 作 量 总成本 最小成本区
接口成本
模块成本 模块数
软件模块化设计的指导思想
分解 抽象 逐步求精 信息隐蔽 模块独立性
分解与抽象
分解必然需要抽象的支持。抽象是抓住主要问题,隐
藏细节,这样才能容易分解。 抽象具有不同的级别。
人类解决复杂问题的基本方法之一。只有抓住事物的
SOA架构
服务提供者:
接受和执行来自使用者的请求。 它将自己的服务和接口契约发布 到服务注册中心,以便服务使用 者可以发现和访问该服务。 服务使用者: 一个应用程序、一个软件模块或 需要一个服务的另一个服务。 它发起对注册中心中的服务的查 询,通过传输绑定服务,并且执 行服务功能。 服务使用者根据接口契约来执行 服务。 服务注册中心: 服务发现的支持者; 它包含一个可用服务的存储库, 并允许感兴趣的服务使用者查找 服务提供者接口。
软件结构图
软件结构图的形态特征:
深度:指结构图控制的层次,也是模块的层数。
宽度:指一层中最大的模块个数。 扇出:指一个模块直接下属模块的个数。
扇入:指一个模块直接上属模块的个数。
画结构图应注意的事项:
模块不能重名。
调用关系只能从上到下。
软件结构图
A B E J K R F L S C G M H N O T D I P Q
信息隐蔽意味着通过一系列独立的模块可以得到有效
的模块化。 独立的构件或模块之间的“接口”简单而清晰。
模块的独立性
模块独立性是指开发具有独立功能而和其他模块没有
过多关联的模块。 模块独立性两大优点:
独立的模块由于分解了功能,简化了接口,使得软件比
较容易开发; 独立的模块比较容易测试和维护。
并发性
系统必须以一种模拟并行的方式来操作多个任务
操作系统进程管理模式 任务调度器模式包括一组含有tick()操作的活动对象 持久性 如果数据从创建它的进程执行以来一直存在,则该数据是持久性 存在的数据。 数据库管理系统模式将DBMS的存储和存取能力用于应用系统的体 系结构中。 应用级的持久模式在应用体系结构中建立了持久性特征。 分布性 强调系统或系统中构件或模块在一个分布的环境中相互通信的方 式。分布性问题有两个元素: 一是实体间连接方式 二是实体间通信的特性 代理模式是一种普遍的体系结构模式 CORBA就是代理模式的一个范例
第8章 软件设计
软件设计 模块化设计 软件架构设计 软件结构
软件设计概述
软件设计阶段的基本目标是构造系统“怎么做”的模
型描述。 “设计先于编码”,这是软件工程“推迟实现”基本 原则 软件系统设计是把软件需求“变换”为用于构造软件 的蓝图。
“输入”是需求分析各种模型元素 “输出”是软件设计模型和表示
一个可通过网络寻址的实体,它
服务注册中心
发现
注册
服务消费者
调用
服务提供者
并发系统的集中式控制模型
传感器进程 计算进程
传动装置进程
用户界面
系统控制器
故障处理器
系统控制模型
事件驱动系统 广播模型:发生的事件广播到所有子系统,任何能处理 该事件的子系统都会响应。该模型适用于基于网络的分 布式系统。
重构
重构是一种重新组织的技术,可以简化构件或模块的
设计或编码而无需改变其功能或行为。
重构是一种改进程序内部结构但不改变代码或设计的
外部行为。 “先使它转起来,再使它快起来”。
小结
设计的基本原理和概念包括模块化、抽象、体系结构、
信息隐蔽、模块独立、逐步求精和重构等。
软件体系结构提供了待建系统的整体视图,它描述软
通信介质
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
系统控制模型
集中式控制模型 调用—返回模型:这是一个自上而下的子过程模型。控 制始于系统(程序)的顶层,在子系统(程序)调用过 程中,控制逐步传递到更低的层次中。该模型适用于顺 序执行的系统。 管理者模型:这是一种适用于并发系统的模型。一个系 统组件被指定为系统管理者,控制其他系统过程的启动、 终止和协调。一个过程就是一个能和其他过程并发执行 的子系统或模块。
软件设计的目标是对将要实现的软件系统的体系结构、
系统的数据、系统模块间的接口,以及所采用的算法 给出详尽的描述。
软件设计三类活动
总体设计,也称为概要设计,软件结构设计,或高层设计。 分析需求规格说明 模块划分,形成具有预定功能的模块组成结构 表示出模块间的控制关系 给出模块之间的接口 软件详细设计,也称为(模块)过程设计,或低层设计。 设计模块细节 确定模块所需的算法和数据结构等 测试和复审
和特性的程序实体。 软件的模块化设计(Modular Design)。系统是有 一个个模块组装而成。 软件模块化设计优点
可以简化软件的设计和实现
提高软件的可理解性和可测试性 软件更容易得到维护。
软件模块化设计缺点 模块划分的数量越多,模块间的联系也越多 模块的接口工作量却随着模块数增加而增大
软件结构设计过程
设计供选择的方案 选取合理的方案 推荐最佳方案 功能分解和设计软件结构
数据库设计
制定软件设计测试计划 编制设计文档
审查和复审
软件结构图
软件结构图(Structure Chart, 简称SC)是软件
系统的模块层次结构,反映了整个系统的功能实 现。 软件结构以层次表示程序的系统结构,即一种控 制的层次体系,并不表示软件的具体过程。 软件结构图的主要元素有: 模块 控制关系 信息传递 循环调用和选择调用
一些相关的服务。
软件架构设计过程就是识别出这些子系统,并建立子系统
控制和通信的框架,最后给出软件体系结构的一个描述。 系统构架设计可以按照以下步骤进行 定义子系统 定义子外部接口 定义系统构成模型 定义系统控制模型
系统架构设计主要内容
子系统划分方法
前台业务办理和后台数据管理 数据采集、数据处理和数据管理 界面、控制和实体
总线架构
像水管一样随意接入 像PCI总线一样即插即用
Portal Service Collaboration Tools B2B Interactions
Business Intelligence Services Applications & Data
Service Registry
软件的体系结构模式
第三部分软件设计与建模
结构化软件设计
阳王东
回答问题
什么是软件设计?有哪些阶段和任务? 什么是模块化设计?有哪些原理? 什么是软件结构和体系结构?二者有什么区别? 数据流有哪些类型?如何区分?
数据流映射的步骤是什么?
什么是结构化程序设计?有哪些工具? 什么是JSD方法?具体步骤是什么?
数据流体系结构模型
当输入数据经过一系列的计算和操作构件或模块的变
换形成输出数据时,可以应用数据流体系结构。
管道和过滤器结构通过一组由管道连接的过滤器来变
换数据,并向下传递。
管道和过滤器结构
过滤器 过滤器 过滤器 过滤器 过滤器 过滤器 过滤器
过滤器
多媒体服务系统结构
客户1 客户2
„„„
本质,才能准确分析和处理问题,找到合理的解决方 案。
逐步求精
逐步求精,或称逐步细化,是一种自顶向下的设计策
略。
逐步求精是人类采用抽象到具体的过程把一个复杂问
题趋于简单化控制和管理的有效策略。 抽象和精化是互补的概念。
信息隐藏
信息隐蔽原则建议模块应该具有的特征是:每个模块
对其他所有模块都隐蔽自己的设计决策。
口的数据类型和数目。 分类:
非直接耦合 数据耦合 控制耦合 外部耦合
公共耦合
内容耦合
耦合性分类
弱 强
非直接耦 数据耦合 特征耦合 控制耦合 外部耦合 公共耦合 内容耦合 合 弱耦合 中耦合 较强耦合 强耦合
模块化设计的优化
改进软件结构提高模块独立性 在满足模块化要求的前提下尽量减少模块数量,在满
客户n
网 络
目录服务器 目录
视频服务器 电影文件
图片服务器 图片文件
web服务器 超文本文件
两层C/S架构
允许用户界面和应用程序代码直接访问数据库和网络存储
的API。应用程序使用数据库中存储的数据模型,但是不 需要在该模型之上建立逻辑模型。当开发中的系统是一个 原型系统或者已经知道其生命周期较短,期间API不会发 生变化的时候,两层应用程序是理想的。典型情形下,这 种方式用于小型的应用程序,它们的开发成本和时间都很 少。 窗体标题
广播模型中的子系统注册其感兴趣的特别事件 广播模型的优点是进化比较简单 缺点是子系统都知道是否和什么时候处理事件,这可能会引 起冲突。
中断驱动模型:由中断处理器对来自外部的中断进行检
测,然后在其他组件中处理这些中断。该模型适用于对 定时有严格要求的实时系统。
只用在硬件实时系统中,要求对一些事件能做出及时响应
内聚性分类
弱 强
偶然性内 逻辑性 时间性 过程性 通信性 顺序性 功能性 聚 内聚 内聚 内聚 内聚 内聚 内聚
低内聚
中内聚
高内聚
模块耦合性
耦合性是对一个软件结构内不同模块之间互连程度的度量。 耦合性的强弱取决于模块间接口的复杂程度,以及通过接
逻辑层 表示层
应用服务器
界面 业务 组件 业务 组件
数据层
数据库
业务 组件
抽象机模型
抽象机模型也称为分层模型,是建立子系统的接口模
型。它把子系统组织成一系列的层次,每一层提供一 组服务,每一层定义为一个抽象机。 例如:网络协议OSI参考模型
用户A 用户B
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
模块独立性由两个定性标准度量: 模块自身的内聚(Cohesion)),也称为块内联系或 模块强度, 模块之间的耦合(Coupling),也称为块间联系。 模块独立性愈高,则块内联系越强,块间联系越弱。
模块内聚性
内聚性是从功能的角度对模块内部聚合能力的量度。 高内聚是模块独立性追求的目标。 分类:
软件设计质量原则
设计过程要有全局观念 设计对于分析模型应该是可跟踪的 设计不应该从头做起 设计应该是可实现的
设计应该表现出一致性和集成性
设计应该能够适应修改 设计不是编码
应该复审每一步设计,以减少语义性错误
软件模块化设计
模块是一个独立命名的,拥有明确定义的输入、输出
足信息需求的前提下尽可能减少复杂的数据结构 模块规模应适中 软件结构的深度、宽度、 扇入数和扇出数都要适当 模块的作用域应该在控制域之内
力求降低模块接口的复杂程度,设计单入口、单出口
Байду номын сангаас
的模块
软件架构设计(体系结构)
软件体系结构是一种总体表达。 大型软件系统总是被分解成一系列子系统,由子系统提供
Delphi客户端 程序
数据库 (MSSQLServer, Oracle)
三层C/S架构
相当频繁的重复使用是一个主要的设计考虑因素,在这种
情形下需要建立应用程序模型以允许它的一部分被多个用 户界面查看组件重复使用。它有一个指导方针是,在应用 程序需要相同数据的多个视图的任何时候,开发者应该考 虑使用三层方式代替两层方式。 从两层模型迁移到三层模型需要考虑的主要问题包括适当 的网络资源的可用性和管理并发数据访问的加锁方案。
外部接口
通信协议 SDK 消息 分布式访问
系统构成模型
以数据为中心的结构模型 客户机/服务器结构模型
抽象机结构模型
以数据为中心的结构模型
由一组子系统构成,子系统交换信息,协调工作
有两种基本方法: 全部共享数据放在一个中央数据库中,所有子 系统都能从中存取数据。 每个子系统用各自的数据库与其他子系统进行 数据交互,通过消息传递来实现。 共享数据模型的优点是能够高效地共享大量的数 据; 缺点是子系统一定要与以数据为中心的体系结构 模型一致,系统变更或进化比较困难。
模块数与开发工作量
开 发 工 作 量 总成本 最小成本区
接口成本
模块成本 模块数
软件模块化设计的指导思想
分解 抽象 逐步求精 信息隐蔽 模块独立性
分解与抽象
分解必然需要抽象的支持。抽象是抓住主要问题,隐
藏细节,这样才能容易分解。 抽象具有不同的级别。
人类解决复杂问题的基本方法之一。只有抓住事物的
SOA架构
服务提供者:
接受和执行来自使用者的请求。 它将自己的服务和接口契约发布 到服务注册中心,以便服务使用 者可以发现和访问该服务。 服务使用者: 一个应用程序、一个软件模块或 需要一个服务的另一个服务。 它发起对注册中心中的服务的查 询,通过传输绑定服务,并且执 行服务功能。 服务使用者根据接口契约来执行 服务。 服务注册中心: 服务发现的支持者; 它包含一个可用服务的存储库, 并允许感兴趣的服务使用者查找 服务提供者接口。
软件结构图
软件结构图的形态特征:
深度:指结构图控制的层次,也是模块的层数。
宽度:指一层中最大的模块个数。 扇出:指一个模块直接下属模块的个数。
扇入:指一个模块直接上属模块的个数。
画结构图应注意的事项:
模块不能重名。
调用关系只能从上到下。
软件结构图
A B E J K R F L S C G M H N O T D I P Q
信息隐蔽意味着通过一系列独立的模块可以得到有效
的模块化。 独立的构件或模块之间的“接口”简单而清晰。
模块的独立性
模块独立性是指开发具有独立功能而和其他模块没有
过多关联的模块。 模块独立性两大优点:
独立的模块由于分解了功能,简化了接口,使得软件比
较容易开发; 独立的模块比较容易测试和维护。
并发性
系统必须以一种模拟并行的方式来操作多个任务
操作系统进程管理模式 任务调度器模式包括一组含有tick()操作的活动对象 持久性 如果数据从创建它的进程执行以来一直存在,则该数据是持久性 存在的数据。 数据库管理系统模式将DBMS的存储和存取能力用于应用系统的体 系结构中。 应用级的持久模式在应用体系结构中建立了持久性特征。 分布性 强调系统或系统中构件或模块在一个分布的环境中相互通信的方 式。分布性问题有两个元素: 一是实体间连接方式 二是实体间通信的特性 代理模式是一种普遍的体系结构模式 CORBA就是代理模式的一个范例
第8章 软件设计
软件设计 模块化设计 软件架构设计 软件结构
软件设计概述
软件设计阶段的基本目标是构造系统“怎么做”的模
型描述。 “设计先于编码”,这是软件工程“推迟实现”基本 原则 软件系统设计是把软件需求“变换”为用于构造软件 的蓝图。
“输入”是需求分析各种模型元素 “输出”是软件设计模型和表示
一个可通过网络寻址的实体,它
服务注册中心
发现
注册
服务消费者
调用
服务提供者
并发系统的集中式控制模型
传感器进程 计算进程
传动装置进程
用户界面
系统控制器
故障处理器
系统控制模型
事件驱动系统 广播模型:发生的事件广播到所有子系统,任何能处理 该事件的子系统都会响应。该模型适用于基于网络的分 布式系统。
重构
重构是一种重新组织的技术,可以简化构件或模块的
设计或编码而无需改变其功能或行为。
重构是一种改进程序内部结构但不改变代码或设计的
外部行为。 “先使它转起来,再使它快起来”。
小结
设计的基本原理和概念包括模块化、抽象、体系结构、
信息隐蔽、模块独立、逐步求精和重构等。
软件体系结构提供了待建系统的整体视图,它描述软
通信介质
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
系统控制模型
集中式控制模型 调用—返回模型:这是一个自上而下的子过程模型。控 制始于系统(程序)的顶层,在子系统(程序)调用过 程中,控制逐步传递到更低的层次中。该模型适用于顺 序执行的系统。 管理者模型:这是一种适用于并发系统的模型。一个系 统组件被指定为系统管理者,控制其他系统过程的启动、 终止和协调。一个过程就是一个能和其他过程并发执行 的子系统或模块。
软件设计的目标是对将要实现的软件系统的体系结构、
系统的数据、系统模块间的接口,以及所采用的算法 给出详尽的描述。
软件设计三类活动
总体设计,也称为概要设计,软件结构设计,或高层设计。 分析需求规格说明 模块划分,形成具有预定功能的模块组成结构 表示出模块间的控制关系 给出模块之间的接口 软件详细设计,也称为(模块)过程设计,或低层设计。 设计模块细节 确定模块所需的算法和数据结构等 测试和复审
和特性的程序实体。 软件的模块化设计(Modular Design)。系统是有 一个个模块组装而成。 软件模块化设计优点
可以简化软件的设计和实现
提高软件的可理解性和可测试性 软件更容易得到维护。
软件模块化设计缺点 模块划分的数量越多,模块间的联系也越多 模块的接口工作量却随着模块数增加而增大
软件结构设计过程
设计供选择的方案 选取合理的方案 推荐最佳方案 功能分解和设计软件结构
数据库设计
制定软件设计测试计划 编制设计文档
审查和复审
软件结构图
软件结构图(Structure Chart, 简称SC)是软件
系统的模块层次结构,反映了整个系统的功能实 现。 软件结构以层次表示程序的系统结构,即一种控 制的层次体系,并不表示软件的具体过程。 软件结构图的主要元素有: 模块 控制关系 信息传递 循环调用和选择调用
一些相关的服务。
软件架构设计过程就是识别出这些子系统,并建立子系统
控制和通信的框架,最后给出软件体系结构的一个描述。 系统构架设计可以按照以下步骤进行 定义子系统 定义子外部接口 定义系统构成模型 定义系统控制模型
系统架构设计主要内容
子系统划分方法
前台业务办理和后台数据管理 数据采集、数据处理和数据管理 界面、控制和实体
总线架构
像水管一样随意接入 像PCI总线一样即插即用
Portal Service Collaboration Tools B2B Interactions
Business Intelligence Services Applications & Data
Service Registry
软件的体系结构模式
第三部分软件设计与建模
结构化软件设计
阳王东
回答问题
什么是软件设计?有哪些阶段和任务? 什么是模块化设计?有哪些原理? 什么是软件结构和体系结构?二者有什么区别? 数据流有哪些类型?如何区分?
数据流映射的步骤是什么?
什么是结构化程序设计?有哪些工具? 什么是JSD方法?具体步骤是什么?
数据流体系结构模型
当输入数据经过一系列的计算和操作构件或模块的变
换形成输出数据时,可以应用数据流体系结构。
管道和过滤器结构通过一组由管道连接的过滤器来变
换数据,并向下传递。
管道和过滤器结构
过滤器 过滤器 过滤器 过滤器 过滤器 过滤器 过滤器
过滤器
多媒体服务系统结构
客户1 客户2
„„„
本质,才能准确分析和处理问题,找到合理的解决方 案。
逐步求精
逐步求精,或称逐步细化,是一种自顶向下的设计策
略。
逐步求精是人类采用抽象到具体的过程把一个复杂问
题趋于简单化控制和管理的有效策略。 抽象和精化是互补的概念。
信息隐藏
信息隐蔽原则建议模块应该具有的特征是:每个模块
对其他所有模块都隐蔽自己的设计决策。
口的数据类型和数目。 分类:
非直接耦合 数据耦合 控制耦合 外部耦合
公共耦合
内容耦合
耦合性分类
弱 强
非直接耦 数据耦合 特征耦合 控制耦合 外部耦合 公共耦合 内容耦合 合 弱耦合 中耦合 较强耦合 强耦合
模块化设计的优化
改进软件结构提高模块独立性 在满足模块化要求的前提下尽量减少模块数量,在满
客户n
网 络
目录服务器 目录
视频服务器 电影文件
图片服务器 图片文件
web服务器 超文本文件
两层C/S架构
允许用户界面和应用程序代码直接访问数据库和网络存储
的API。应用程序使用数据库中存储的数据模型,但是不 需要在该模型之上建立逻辑模型。当开发中的系统是一个 原型系统或者已经知道其生命周期较短,期间API不会发 生变化的时候,两层应用程序是理想的。典型情形下,这 种方式用于小型的应用程序,它们的开发成本和时间都很 少。 窗体标题
广播模型中的子系统注册其感兴趣的特别事件 广播模型的优点是进化比较简单 缺点是子系统都知道是否和什么时候处理事件,这可能会引 起冲突。
中断驱动模型:由中断处理器对来自外部的中断进行检
测,然后在其他组件中处理这些中断。该模型适用于对 定时有严格要求的实时系统。
只用在硬件实时系统中,要求对一些事件能做出及时响应