软件工程SE-Lecture7设计工程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为什么要模块独立?
功能被划分,接口被简化,软件更易于开发 。 因设计和编码修改引起的副作用受到局限,错误传播被减 小,并且模块复用成为可能,所以独立的模块更易于维护 和测试 。
@Beibei Liu, School of EIE, SCUT
软件设计原则
模块独立的衡量指标
内聚度
一个模块内部各个元素彼此结合的紧密程度的度量。 7种类型:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内 聚、顺序内聚、功能内聚
模块独立的衡量指标
内聚度 vs. 耦合度
模块之间的连接越紧密越多,耦合性就越( 立性就越( )。
) ,而其模块独
一个模块内部各个元素之间的联系越紧密,则它的内聚性就越 ( )。 模块独立性比较强的模块应是( )内聚( )耦合的模块 。
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的目标: (什么样的设计才是“好”的?)
设计必须实现分析模型中描述的所有显式需求,必须满足 用户希望的所有隐式需求。 设计必须是可读、可理解的,使得将来易于编程、易于测 试、易于维护。
设计应从实现角度出发,给出与数据、功能、行为相关的 软件全貌。
@Beibei Liu, School of EIE, SCUT
软件设计原则
模块独立的衡量指标
内聚度 vs. 耦合度
模块之间的连接越紧密越多,耦合性就越(高),而其模块独立 性就越(低)。 一个模块内部各个元素之间的联系越紧密,则它的内聚性就越 (高 )。 模块独立性比较强的模块应是(高)内聚(低)耦合的模块 。
@Beibei Liu, School of EIE, SCUT
软件设计的过程: 包括:制定应该共同遵守的标准以便协调工作; 1) 制定规范
确定设计目标及其优先顺序;确定最合适的设计 方法;规定设计文档的编制标准、编码的信息形 式、接口规约、命名规则…….
2) 体系结构和接口设计 3) 数据/类设计 4) 部件级(过程)设计 5) 编写设计文档 6) 设计评审
@Beibei Liu, School of EIE, SCUT
软件体系结构设计
“体系结构”(architecture)
关注系统的一个或多个结构,包含软件构件、这些构件的 对外可见的性质以及它们之间的关系。 (别墅or公寓,电 梯or楼梯,朝南or朝东,房间位置…….)
体系结构的重要性:
①方便利益相关人员的交流 ②有利于系统设计的前期决策 ③可传递的系统级抽象
@Beibei Liu, School of EIE, SCUT
软件设计原则
抽象与逐步求精
“抽象”:控制复杂性的基本策略。将注意力集中在某一 层次上考虑问题,忽略低层次细节。 软件工程过程的每一步都是对较高一级的抽象解作一次具 体化的描述 :
系统定义 需求分析 体系结构设计 部件级设计 抽象级别逐 步降低
@Beibei Liu, School of EIE, SCUT
软件设计原则
抽象与逐步求精
“逐步求精”:把问题的求解过程分解成若干步骤或阶段, 每步都比上步更精化,更接近问题的解法。
@Beibei Liu, School of EIE, SCUT
软件设计原则
模块化
即把软件按照规定原则,划分为一个个较小的,相互独立 的但又相互关联的部件,实际上是系统分解和抽象的过程。
耦合度
模块之间的相对独立性(互相连接的紧密程度)的度量。取决于 各个模块间接口的复杂程度、调用模块的方式以及通过接口的信 息类型。 7种类型:非直接耦合、数据耦合、标记耦合、控制耦合、外部 耦合、公共耦合、内容耦合
@Beibei Liu, School of EIE, SCUT
软件设计原则
为什么要信息隐藏?
在修改软件时偶然引入错误所造成的影响就可以局限在一 个或几个模块内部,避免影响到软件的其它部分。
@Beibei Liu, School of EIE, SCUT
软件设计原则
模块独立
指模块完成独立的功能并且与其他模块的接口简单,符合 信息隐蔽和信息局部化原则,模块间关联和依赖程度尽可 能小 。
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的任务: (要设计些什么内容?)
数据/类设计 体系结构设计 接口设计 部件级设计
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的任务: (要设计些什么内容?)
模块
是数据说明、可执行语句等程序对象的集合,它是单独命 名的,并且可以通过名字来访问,例如,过程。函数、子 程序、宏等 。
名字
模块内部特征 参数 功能 ……
@Beibei Liu, School of EIE, SCUT
程序代码
模块外部特征 数据结构 ……
软件设计原则
为什么要模块化?
软件设计原则
为什么要模块化?
把复杂问题分解成许多容易解决的小问题,则原来复杂的 问题也就容易解决了。 模块化有助于软件项目的组织管理,一个复杂的大型以由 许多程序员分工编写,提高开发效率。 模块化使程序错误通常局限在有关的模块及它们之间的接 口中,使软件容易调试和测试,有助于提高软件的可靠性。 模块化有助于提高软件的可修改性,因为变动往往只涉及 少数几个模块。 模块化使软件的结构清晰,使软件容易阅读和理解。
@Beibei Liu, School of EIE, SCUT
软件体系结构的风格
一些普遍运用的软件体系结构风格
数据为中心的体系结构
数据流为中心的体系结构 调用和返回风格的体系结构 面向对象风格的体系结构 层次式风格的体系结构
@Beibei Liu, School of EIE, SCUT
软件生命周期
系统工程 需求分析 设计 编码
做什么? 怎么做?
测试
运行维护
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的阶段:
软件体系结构设计 (概要设计)
软件需求数据结构、体系结构
部件级设计 (详细设计)
体系结构部件过程性描述、详细数据结构、算法
@Beibei Liu, School of EIE, SCUT
软件设计原则
抽象与逐步求精
软件设计中的主要抽象手段:
过程抽象(功能抽象)
指任何一个完成明确定义功能的操作都可被使用 者当作单个实体看待,尽管这个操作实际上是由 一系列更低级的操作来完成的。
数据抽象
指定义数据类型和施加于该类型对象的操作,并 限定了对象的取值范围,只能通过这些操作修改 和观察数据。
数据/类设计 体系结构设计
系统规约、分析模型、子系统关系
软件整体结构(软件部件、外部可见属性、部件关系)
接口设计 部件级设计
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的任务: (要设计些什么内容?)
数据/类设计 体系结构设计 接口设计
问题p1和问题p2组合后的复杂性( 杂性。
)单独考虑每个问题时的复
如果模块是相互独立的,当模块变得越小,每个模块花费的工作量 越( )。 当模块数增加时,模块间的联系( ) ,把这些模块连接起来 的工作量( )。
@Beibei Liu, School of EIE, SCUT
软件设计原则
为什么要模块化?
《软件工程》
Lecture 7 设计工程
@Beibei Liu, School of EIE, SCUT
软件生命周期
系统工程 需求分析 设计 编码
数据模型 功能模型 行为模型
软件设计是把软件需求 变换成软件表示的过程。 软件设计的输入是软件 分析模型。
测试
运行维护
@Beibei Liu, School of EIE, SCUT
பைடு நூலகம்件设计概述
软件设计的过程: 1) 制定规范
迭代过程:
2) 体系结构和接口设计 3) 数据/类设计 4) 部件级(过程)设计
描述整体框架 ,反映功能、 数据、行为需求
5) 编写设计文档 6) 设计评审
填入细节,加工成接近于源 程序的软件表示
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的技术标准:
设计出来的结构应是分层结构,从而建立软件成份之间的 控制。 设计应当模块化,从逻辑上将软件划分为完成特定功能或 子功能的部件。
设计应当既包含数据抽象,也包含过程抽象。
设计应当建立具有独立功能特征的模块。 设计应当建立能够降低模块与外部环境之间复杂连接的接 口。 设计应能根据软件需求分析获取的信息,建立可驱动、可 重复的方法。
B/S(Browser/Server)结构
通常包含客户层、服务器层和数据层。
@Beibei Liu, School of EIE, SCUT
软件体系结构的风格
一些普遍运用的软件体系结构风格
数据为中心的体系结构 数据流为中心的体系结构 调用和返回风格的体系结构 面向对象风格的体系结构 层次式风格的体系结构 ……
模块间接口
分析模型
外部接口 人机接口
部件级设计
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的任务: (要设计些什么内容?)
数据/类设计 体系结构设计 接口设计 部件级设计
体系结构的结构性元素
软件部件的过程性描述
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的过程: 1) 制定规范 2) 体系结构和接口设计 3) 数据/类设计 4) 部件级(过程)设计
5) 编写设计文档 6) 设计评审
文档!评审!
@Beibei Liu, School of EIE, SCUT
软件设计原则
抽象与逐步求精 模块化 信息隐藏 模块独立
问题p1和问题p2组合后的复杂性(大于)单独考虑每个问 题时的复杂性。 如果模块是相互独立的,当模块变得越小,每个模块花费 的工作量越(低) 。 当模块数增加时,模块间的联系(随之增加) ,把这些模 块连接起来的工作量(随之增加) 。
@Beibei Liu, School of EIE, SCUT
数据/类设计
分析类模型
数据结构
数据的组织、存 取方式、相关程 度以及信息的处 理方法….
CRC中定义的数据 对象、对象关系、 数据字典….
体系结构设计 接口设计 部件级设计
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的任务: (要设计些什么内容?)
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件设计的过程: 1) 制定规范 2) 体系结构和接口设计 3) 数据/类设计 4) 部件级(过程)设计 5) 编写设计文档 6) 设计评审
@Beibei Liu, School of EIE, SCUT
软件设计概述
软件体系结构的风格
一些普遍运用的软件体系结构风格
数据为中心的体系结构 数据流为中心的体系结构
调用和返回风格的体系结构 面向对象风格的体系结构 层次式风格的体系结构 ……
@Beibei Liu, School of EIE, SCUT
软件体系结构的风格
一些普遍运用的软件体系结构风格
@Beibei Liu, School of EIE, SCUT
软件设计原则
理想的模块?
理想的模块只解决一个问题,每个模块的功能明确,容易 理解,易于编程,易于测试,易于修改和维护。
@Beibei Liu, School of EIE, SCUT
软件设计原则
信息隐藏
每个模块的实现细节对于其它模块来说应该是隐蔽的 。 块中所包含的信息(包括数据和过程)不允许其它不需要 这些信息的模块使用 。
@Beibei Liu, School of EIE, SCUT
软件体系结构设计
常见软件体系结构
单主机结构
客户界面、数据和程序被集中在主机上,通常只支持一个用户 同时操作,不需考虑多用户并发操作问题,结构简单。
C/S(Client/Server)结构
应用程序的处理由客户机和服务器分担,客户机在接收到处理请 求和数据后实现显示和业务逻辑,通常有GUI界面。