软件工程SE-Lecture7设计工程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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界面。
相关文档
最新文档