软件工程第七章项目设计
合集下载
软件工程07_设计优化

2017/9/4
10
开放封闭原则
• 开放封闭原则(The Open-Closed Principle, OCP): 一个模块对扩展应是开放的,而对修改应是封闭的。 • 这条原则是面向对象思想的最高境界,即设计者应给 出对于需求变化进行扩展的模块,而永远不需要改写 已经实现的内部代码或逻辑。 • 两个基本的特点:
第7章 设计优化
• 将不同的功能方法行之有效的分配到不同的
类中
• 确定在功能级别以面向对象的思维进行组织
的策略
• 经常发生的问题具有相同或相似的解决方案:
架构模式与设计模式。
2017/9/4
1
小规模设计
• 两个一般性的原则: • KISS(Keep It Simple Stupid):选择尽可能简 单的实现方案,因为既能够全面解决问题而且具 有较好的可理解性,但并不代表“Quick and Dirty” 。 • YAGNI(You Ain't Gonna Need It):“你不会 需要它”,指的是开发者自以为有用的功能,实 际上都不会需要。
2017/9/4 7
• 如果系统中还存 在另一类使用者 ,比如维修者, 则他们专注的应 该是这些交通工 具的运转,而与 驾驶相关的操作 是不应该暴露给 这些维修者类。
2017/9/4
8
面向接口的作用
• 面向接口的设计能够使Client只需关注如何 进行业务活动(如:驾驶),而不必关心 其使用对象的具体实现。 • 一个对象可以很容易地被(实现了相同接 口的)另一个对象所替换,这样对象间的 连接不必硬绑定(hard wire)到一个具体 类的对象上,因此增加了灵活性。 • 这是一种松散的耦合,同时增加了重用的 可能性。
2017/9/4 12
软件工程-07

16
120
130 140
面向对象的程序设计方法
在面向对象的程序设计中,数据和操作数据的算 法不再分离,它们被封装在一起,构成对象,其 他的对象可以使用这个对象所提供的服务。
面向对象程序设计方法的特点是封装、泛化、多 态、协同和复用。 1. 封装 按照抽象数据类型的要求,对象把数据和相应 操作封装在其内部,通过定义在接口上的操作 访问。
对框架中的局部再做细化,得到整个程序。 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i; /* 建立2到10的素数表B[ ],其中存放2到10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]*/ for ( j = 1;j <= 4;j++ )
软件工程59xp迭代的生存周期版本发布计划新用户故事项目速度用户故事上一次迭代项目速度制定迭代计划未完成的任务迭代计划新功能学习交流未通过测试的部分错误开发每日工作最新版本软件工程60xp的产品化阶段的核心是确认软件产品已经通过了大规模高强度的测试准备好进入产在这个阶段中会降低软件的演化速度但软件的演化过程并没有停止只是对于某个功能是否应被加入到下一个发布中需要慎重考虑
19
4. 协同 协同是指一组对象通过它们之间的协作来完成 一个任务。这组对象间的协作包含了一个消息 序列,亦称线程。 在使用消息传递时需要仔细考虑消息序列中每 个操作执行的前臵条件和后臵条件。 例如,使用队列时,在进队列前要先保证队列 非满,在出队列前要保证队列非空。但这样做, 必须了解消息接收者对象的细节,有悖于实现 与使用相分离的信息隐蔽原则。
120
130 140
面向对象的程序设计方法
在面向对象的程序设计中,数据和操作数据的算 法不再分离,它们被封装在一起,构成对象,其 他的对象可以使用这个对象所提供的服务。
面向对象程序设计方法的特点是封装、泛化、多 态、协同和复用。 1. 封装 按照抽象数据类型的要求,对象把数据和相应 操作封装在其内部,通过定义在接口上的操作 访问。
对框架中的局部再做细化,得到整个程序。 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i; /* 建立2到10的素数表B[ ],其中存放2到10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]*/ for ( j = 1;j <= 4;j++ )
软件工程59xp迭代的生存周期版本发布计划新用户故事项目速度用户故事上一次迭代项目速度制定迭代计划未完成的任务迭代计划新功能学习交流未通过测试的部分错误开发每日工作最新版本软件工程60xp的产品化阶段的核心是确认软件产品已经通过了大规模高强度的测试准备好进入产在这个阶段中会降低软件的演化速度但软件的演化过程并没有停止只是对于某个功能是否应被加入到下一个发布中需要慎重考虑
19
4. 协同 协同是指一组对象通过它们之间的协作来完成 一个任务。这组对象间的协作包含了一个消息 序列,亦称线程。 在使用消息传递时需要仔细考虑消息序列中每 个操作执行的前臵条件和后臵条件。 例如,使用队列时,在进队列前要先保证队列 非满,在出队列前要保证队列非空。但这样做, 必须了解消息接收者对象的细节,有悖于实现 与使用相分离的信息隐蔽原则。
最新课件-软件工程电子教案第七章面向数据流的设计方

在核对以上信息后保存该成绩信息。
成绩录入精化数据流图
学生信息 班级信息 教学计划
重复输入报告 无此课程报告 无此班级报告 无此学生报告
管理员
成绩 输入 成绩 查询 成绩 查询 成绩 查询教 成绩 信息 成绩 信息 学生 信息 班级 信息 学计划 信息 班 课 姓 级 程 名 信 信 息 息 姓名 显示 显示 显示 姓名 班级 课程 班级信息
传入
变换
传出
T
事务中心
精化数据流图 “事务‛ 区分事务中心 和数据接收路径 映射成事务结构 流类型 “变换‛ 区分输入和 输出分支 映射成变换结构 变换分析
事务分析
运用模块设计规则精化软件结构
导出接口描述和全程数据结构
复查 面向数据流的设计过程
详细设计
面向数据流的设计过程
精化数据流图 确定数据流图类型 把数据流图映射到系统模块结构设计出模块结构 的上层
软件结构也被划分为:变换型结构、事务性结构— 两种类型。
变换流
信息沿输入通路进 信 入系统,同时由外 息 部形式变换为内部 形式,进入系统的 外部 信息通过变换中心, 表示 经过加工处理后再 沿输出通路变换为 外部形式离开软件 系统。 特点:从同一数据 内部 源进入系统的数据, 表示 它在DFD中流动的 逻辑路径是相同的。
传入分支的分解
c,e
c,e MA e Get C C b B a A d D Get B a a E b b Get E c MA
e
c
c
d Read D
d
e
B to C b A to B
D to E
(1)
Read A
(2)
传出分支的分解
软件工程课件 第七章

不可能进行穷尽测试,选择最有代表性、最 可能发生错误的通道进行测试十分关键。要选 择适当的测试用例对模块重要的执行路径(如 条件、循环)进行测试,用以发现不正确的计 算、错误的比较或不适当的控制流向。
目的:使模块中所有可能被执行的语句都被 执行,所有可能假设的条件都出现,以保证其 逻辑的正确性。
前一页
单元测试—边界条件
边界测试是单元测试中最后的也可能是最 重要的任务。软件常常在它的边界上失效, 例如,处理n元数组的第n个元素时,或做到i 次循环中的第i次重复时,往往会发生错误。 使用刚好小于、刚好等于和刚好大于最大值 或最小值的数据结构、控制量和数据值的测 试方案,非常可能发现软件中的错误。
前一页
软件工程
(Software Engineering)
第七章 实现
实现概述
实现就是选用某种程序设计语言在 特定的环境实现软件系统的全部功能, 并满足相应的非功能要求。 实现包括编码与测试,跨越软件生 成周期的两个阶段。
前一页
编码
编程就为是用编程(程序)语言把 软件表达翻译为计算机可以理解的形 式—用某种程序设计语言书写的程序。 目前仍然主要采用人工的方法和传 统的编程语言。Fra bibliotek前一页
集成测试
由模块组装成程序时有两种方法。 一种是先分别测试每个模块,再把所有模块按 设计要求放在一起结合成所要的程序。这种方法称 为非渐增式测试方法。 另一种方法是把下一个要测试的模块同已经测 试好的那些模块结合起来进行测试,测试完以后再 把下一个应该测试的模块结合进来测试。这种每次 增加一个模块的方法称为渐增式测试。 渐增式测试有自顶向下和自底向上两种策略。
编码风格
标准:
简单明晰
易读易懂
编码风格—程序内部文档
目的:使模块中所有可能被执行的语句都被 执行,所有可能假设的条件都出现,以保证其 逻辑的正确性。
前一页
单元测试—边界条件
边界测试是单元测试中最后的也可能是最 重要的任务。软件常常在它的边界上失效, 例如,处理n元数组的第n个元素时,或做到i 次循环中的第i次重复时,往往会发生错误。 使用刚好小于、刚好等于和刚好大于最大值 或最小值的数据结构、控制量和数据值的测 试方案,非常可能发现软件中的错误。
前一页
软件工程
(Software Engineering)
第七章 实现
实现概述
实现就是选用某种程序设计语言在 特定的环境实现软件系统的全部功能, 并满足相应的非功能要求。 实现包括编码与测试,跨越软件生 成周期的两个阶段。
前一页
编码
编程就为是用编程(程序)语言把 软件表达翻译为计算机可以理解的形 式—用某种程序设计语言书写的程序。 目前仍然主要采用人工的方法和传 统的编程语言。Fra bibliotek前一页
集成测试
由模块组装成程序时有两种方法。 一种是先分别测试每个模块,再把所有模块按 设计要求放在一起结合成所要的程序。这种方法称 为非渐增式测试方法。 另一种方法是把下一个要测试的模块同已经测 试好的那些模块结合起来进行测试,测试完以后再 把下一个应该测试的模块结合进来测试。这种每次 增加一个模块的方法称为渐增式测试。 渐增式测试有自顶向下和自底向上两种策略。
编码风格
标准:
简单明晰
易读易懂
编码风格—程序内部文档
实用软件工程第7章7.1节 面向对象分析与设计

OOA模型被划分为五个层次(五个 视图)
与OMT的对象模型结合使用
• OOA的五个层次
Class &object layer
(类及对象层)
属性
Attribute layer
(属性层)
Service layer
服务
(服务层)
Structure layer (结构层)
类的边界 实例的边界
实例连接 消息连接
7.1 面向对象方法的概述
结构化分析方法(传统建模 方法)与面向对象方法比较:
现实世界
影射
计算机世界
现实世界
面
OOA
向 对
象
开
OOD 发
方
法
OOP
结构化
结 分析 构 化 结构化 开 设计 发 方 结构化 法 编程
计算机世界
对象、实体与类
现实世界
实体
计算机世界 影射
对象
抽 象
抽象数据类
计算机逻 辑的实现
响应。
接收方 收到消息后,经过解释,
激活方法,予以响应。
7. 动态绑定(dynamic binding)
动态绑定是指在程序运行时才将消息所请求的操作 与实现该操作的方法连接起来。
传统的程序设计语言的过程调用与目标代码的连接 (即调用哪个过程)放在程序运行前(即编译时)进 行(称为静态绑定)。
而动态绑定则是把这种连接推迟到运行时才进行。
多态性的作用
➢ 增强了操作的透明性、可理解性 和可扩展性。
➢ 增强了软件的灵活性和重用性。
6.消息(message)
• 消息 对象之间相互请求或相互协作
的途径,是要求某个对象执行某个功能 操作的规格说明。
与OMT的对象模型结合使用
• OOA的五个层次
Class &object layer
(类及对象层)
属性
Attribute layer
(属性层)
Service layer
服务
(服务层)
Structure layer (结构层)
类的边界 实例的边界
实例连接 消息连接
7.1 面向对象方法的概述
结构化分析方法(传统建模 方法)与面向对象方法比较:
现实世界
影射
计算机世界
现实世界
面
OOA
向 对
象
开
OOD 发
方
法
OOP
结构化
结 分析 构 化 结构化 开 设计 发 方 结构化 法 编程
计算机世界
对象、实体与类
现实世界
实体
计算机世界 影射
对象
抽 象
抽象数据类
计算机逻 辑的实现
响应。
接收方 收到消息后,经过解释,
激活方法,予以响应。
7. 动态绑定(dynamic binding)
动态绑定是指在程序运行时才将消息所请求的操作 与实现该操作的方法连接起来。
传统的程序设计语言的过程调用与目标代码的连接 (即调用哪个过程)放在程序运行前(即编译时)进 行(称为静态绑定)。
而动态绑定则是把这种连接推迟到运行时才进行。
多态性的作用
➢ 增强了操作的透明性、可理解性 和可扩展性。
➢ 增强了软件的灵活性和重用性。
6.消息(message)
• 消息 对象之间相互请求或相互协作
的途径,是要求某个对象执行某个功能 操作的规格说明。
软件工程课件第07章

BeiHuaZLL
软件工程
主编 曹哲 高诚 中国水利水电出版社
1
h
软 件 设 计:
BeiHuaZLL
是后续开发步骤及软件维护工作的基础。 如果没有设计,只能建立一个不稳定的系 统结构
2
h
软件工程
BeiHuaZLL
第7章 软件设计基础
概念
基本概念
设计 过程
设计 工具
3
说明 与评审
h
7.1.1 软件设计过程
BeiHuaZLL
结构设计
概过要程设设计计 详细设计 数据设计
完成每管理角一与部技术角件的过程化数描据述设计 把信度息描度述转换为实TT过ee现xxtt 程软设件计所
结构设计 确定要程求序的各数主据要结部构件之间的关系
概要设计 详细设计 根框将算据架法需“概表求设示确”4和定数结软据果件结进和构一数步据精的化总成体 h
输入职
职工档案
生成职工档
程序O、程工序档段案、子程序管理系统
案报表系统 模块总数
一个功能、易理解、独立
9
h
信息隐藏
BeiHuaZLL
模块内所含信息对那些不需要这些信息的模块不可 访问,每个模块只完成一个相对独立的特定功能。
模块独立性(Module independence) 好设计的关键:每个模块完成一个相对独立的子功能, 并且与其它模块间的接口简单。
13
h
七种“内聚模块”的性能比 较 BeiHuaZLL
形式
偶然 逻辑 时间 过程 通信 顺序 功能
评价
最坏 最坏 不好 中 中 好 好
可修 改性
最坏 最坏 不好 中 中 好 好
可读性
最坏 不好 中 中 中 好 好
软件工程
主编 曹哲 高诚 中国水利水电出版社
1
h
软 件 设 计:
BeiHuaZLL
是后续开发步骤及软件维护工作的基础。 如果没有设计,只能建立一个不稳定的系 统结构
2
h
软件工程
BeiHuaZLL
第7章 软件设计基础
概念
基本概念
设计 过程
设计 工具
3
说明 与评审
h
7.1.1 软件设计过程
BeiHuaZLL
结构设计
概过要程设设计计 详细设计 数据设计
完成每管理角一与部技术角件的过程化数描据述设计 把信度息描度述转换为实TT过ee现xxtt 程软设件计所
结构设计 确定要程求序的各数主据要结部构件之间的关系
概要设计 详细设计 根框将算据架法需“概表求设示确”4和定数结软据果件结进和构一数步据精的化总成体 h
输入职
职工档案
生成职工档
程序O、程工序档段案、子程序管理系统
案报表系统 模块总数
一个功能、易理解、独立
9
h
信息隐藏
BeiHuaZLL
模块内所含信息对那些不需要这些信息的模块不可 访问,每个模块只完成一个相对独立的特定功能。
模块独立性(Module independence) 好设计的关键:每个模块完成一个相对独立的子功能, 并且与其它模块间的接口简单。
13
h
七种“内聚模块”的性能比 较 BeiHuaZLL
形式
偶然 逻辑 时间 过程 通信 顺序 功能
评价
最坏 最坏 不好 中 中 好 好
可修 改性
最坏 最坏 不好 中 中 好 好
可读性
最坏 不好 中 中 中 好 好
软件工程全部课件-07 章实现A

程序设计风格
源程序文档化
源程序文档化包括标识符的命名、安排注释
以及程序的视觉组织等。
17
标识符包括模块名、变量名、常量名、标号名、子程序名以 及数据区名、缓冲区名等。这些名字应能反映它所代表的实 际东西,使其能够见名知意,有助于对程序功能的理解。选
取含义鲜明的名字,使它能正确地提示程序对象所代 表的实体
(3)注释要正确。
23
程序设计风格
视觉组织—空格、空行和移行
空格:恰当地利用空格,可以突出运算的优
先性,避免发生运算的错误。例如,将表达 式
(a<-17)&&!(b<=49)||c
写成
(a<-17) && !(b<=49) || c
就更清楚。
空行:自然的程序段之间可用空行隔开。
24
程序设计风格
12
高级语言优点:
生产率高, 程序容易阅读,容易测试,容易调试, 容易维护
选择高级语言的理想标准: 为了使程序容易测试和维护以减少软件的总成本,所选用的高 级语言应该有理想的模块化机制,以及可读性好的控制结构和 数据 结构; 为了便于调试和提高软件可靠性,语言特点应该使编译程序能 够尽可能多地发现程序中的错误; 为了降低软件开发和维护的成本,选用的高级语言应该有良好 的独立编译机制。
根据设计去完成编码时,困难最少; 可以减少需要的程序测试量; 可以得到更容易阅读和更容易维护的程序。 7.1.1 选择程序设计语言
第7章
实现
4
7.1.1 程序设计语言
程序设计语言的性能
从软件心理学及软件工程角度对程序设计语
言的性能进行讨论。
5
程序设计语言
软件心理学的观点
最新课件-软件工程电子教案第七章面向数据流的设计方

传入
变换
传出T事务Fra bibliotek心精化数据流图 “事务” 区分事务中心 和数据接收路径 映射成事务结构 流类型 “变换” 区分输入和 输出分支 映射成变换结构 变换分析
事务分析
运用模块设计规则精化软件结构
导出接口描述和全程数据结构
复查 面向数据流的设计过程
详细设计
面向数据流的设计过程
精化数据流图 确定数据流图类型 把数据流图映射到系统模块结构设计出模块结构 的上层
变换 中心
加工 映射
传出 部分 输出
变换型 结构图
总控模块
输入模块
加工模块
输出模块
映射
接受部分 接受 事务 事务型 数据流图 映射 事务中心 事务型 结构图 事务中心 事务 分析
动作 1
动作 2
动作 3
接受事务
调度模块
输出模块
动作1
动作2
动作3
提示
大型系统的数据流图中,变换型和事务型结构往往 共存:
软件工程
本章提要
基本概念和设计过程 变换分析 事务分析 启发式设计策略 设计优化原则
基本概念和设计过程
面向数据流的设计方法以数据流图为基础,它定义 了把数据流图变换成软件结构的不同映射方法。 因为任何系统都可以用数据流图表示,所以面向数 据流的设计方法理论上可以设计出任何软件的系统 结构。 数据流类型决定了映射方法。数据流有变换流和事 务流两种基本类型。
软件结构也被划分为:变换型结构、事务性结构— 两种类型。
变换流
信息沿输入通路进 信 入系统,同时由外 息 部形式变换为内部 形式,进入系统的 外部 信息通过变换中心, 表示 经过加工处理后再 沿输出通路变换为 外部形式离开软件 系统。 特点:从同一数据 内部 源进入系统的数据, 表示 它在DFD中流动的 逻辑路径是相同的。