软件工程讲义_第十六章 测试面向对象的应用系统

合集下载

面向对象软件的测试

面向对象软件的测试

可编辑ppt
11
面向对象层次结构测试重点
对认定的对象的测试
OOA(面向对象分析)中认定的对象是对问题空间中的结构、其他系 统、设备、被记忆的事件、系统涉及的人员等实际实例的抽象。对 它的测试可以从如下方面考虑:
认定的对象是否全面,其名称应该尽量准确、适用,是否问题空间 中所涉及到的实例都反映在认定的抽象对象中。
软件测试方法和技术
面向对象软件的测试
可编辑ppt
1
回顾
① 验收测试的过程和主要内容 ② 产品规格说明书的验证 ③ 用户界面和可用性测试 ④ 兼容性测试 ⑤ 可安装性和可恢复性测试 ⑥ 文档测试 ⑦ 验收测试报告和用户验收测试
可编辑ppt
2
面向对象软件的测试
1面向对象软件的特点 2面向对象测试的层次与数据流 3面向对象的单元测试 4面向对象的集成测试
认定的对象是否具有多个属性。只有一个属性的对象通常应看作其 他对象的属性而不是抽象为独立的对象
对认定为同一对象的实例是否有共同的、区别于其他实例的共同属 性,是否提供或需要相同的服务,如果服务随着不同的实例而变化, 认定的对象就需要分解或利用继承性来分类表示。
如果系统没有必要始终保持对象代表的实例信息,提供或者得到关 于它的服务,认定的对象也无必要。
合理的分析,有利于找出更有 价值的测试用例。
可编辑ppt
10
分层与增量
分层与增量:测试用例选择时,需要注意的事项:
D的接口中添加一个或多个新的操作,并且有可能是D中的一个新方法实 现一个新操作。新操作引入了新的功能和新的代码,这些都需要测试。
在D中改变那些在C中声明的操作规范,需要为操作添加新的基于规范的测 试用例。附加的测试用例提供了新的输入,这些输入符合任何削弱了的前 置条件,并且对由任何加强了的后置条件导致的新的期望结果进行检查 。

《软件测试》第章面向对象的软件测试

《软件测试》第章面向对象的软件测试

确定决策
01
确定被测对象的功能决策,包括条件和结果。
决策表
02
根据条件和结果,建立决策表,包括输入、决策规则和期望输
出。
测试用例设计
03
根据决策表,设计针对每个决策的测试用例,包括输入、期望
输出和测试步骤。
基于类图的测试用例设计
确定类
确定被测对象涉及的类,包括类之间的关系。
类图
根据类之间的关系,建立类图,包括类之间的关系、属性和方法。
面向对象软件测试的特点
基于对象、注重交互性、考虑继承性和多态性等。
面向对象软件测试的国内外发展现状及趋势
面向对象软件测试的国内外发展现状
目前,面向对象软件测试已经得到了广泛的应用和研究,国内外出现了一些成熟的面向对象软件测试框架和工 具,如JUnit、TestNG、HP QTP等。
面向对象软件测试的未来趋势
基于TestNG的集成测试技术
TestNG简介
TestNG基本结构
TestNG功能
TestNG是另一个开源的Java测试框 架,与JUnit相比,它提供了更加灵活 的测试配置和管理功能。TestNG支 持多线程测试、分组测试、参数化测 试和依赖测试等。
TestNG测试用例由测试类和方法组 成,使用@Test注解标识测试方法。 TestNG还提供了@Before和@After 注解以及@BeforeClass和 @AfterClass注解,用于在测试前和 测试后执行一些操作。
实例2
基于类图和交互图的测试模型实例,通过分析 类和对象间的交互关系,设计有效的测试用例 。
实例3
对象测试的实例,针对单个对象及其方法进行 测试,并模拟对象间的交互来设计更有效的测 试用例。

面向对象软件的测试

面向对象软件的测试

C la s s _ A + o p e ra tio n 1 () + o p e ra tio n 2 ()
C la s s _ B + o p e ra tio n 3 ()
C la s s _ C + o p e ra tio n 2 () + o p e ra tio n 3 ()
图 Class_A类有两个实例 6 方法operation1()和op - eration2(),Class_B 6 类继承了Class_A类并 类 且实现了新的实例方法 之 operation3(),Class_ 间 C类继承了Class_B类, 的 覆盖了Class_B类的实 继 例方法operation3()和 承 实例方法operation2(). 关 系
对类进行测试时需要构建可执行的类实例,而 接口不存在任何构造方法无法被实现。
由于接口一定会在某个类中实现,因此就使 用一个实现接口的类来做测试。遵循以下原则:
如果接口没有被任何类实现就无需进行测试。 如果已被别的类实现,那么就针对实现该接口
的类进行测试。
(如下图6-8)
Interface_A
+ a_m ethod() + b_m ethod()
技巧,设计类测试用例和测试驱动程序的几种方 法; • 初步了解Junit。
6.1面向对象的测试与传统测试的比较
传统的测试计算机软件的策略是从“小型测 试”开始,逐步走向“大型测试”,且单元测试集 中在最小的可编译程序单位——子程序。
面向对象程序的结构不再是传统的功能模块 结构,而是作为一个整体,并且对每个开发阶段 都有不同以往的要求和结果,已经不可能用功能细 化的观点来检测面向对象分析和设计的结果。

软件工程面向对象

软件工程面向对象

面向对象软件工程面向对象方法学的提出•结构化软件工程方法学•面向过程、以算法为核心、把数据和过程作为相对独立的部分•对早期只重视编程、不重视用户需求和开发过程,只重视代码、不重视文档来说,是一个巨大的进步•给软件产业带来了巨大的进步,部分缓解了软件危机•在许多中小型软件项目中获得了很大的成功•但是,它存在着明显的缺点•当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功面向对象方法学概述•面向对象方法学的出发点和原则•尽可能模仿人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界、解决问题的方法与过程•面向对象方法的特点•与人类习惯的思维方法一致:按照人们习惯的思维方式建立模型,模拟客观世界•稳定性好:实体是相对稳定的,以对象为中心构建的软件系统必然是相对稳定的•可重用性好:对象类提供了比较理想的模块化机制和可重用机制•易于开发大型软件:把大型产品看作一系列本质上相互独立的小产品来处理•可维护性好:容易理解、容易修改、易于测试四个要点:对象+类+继承+通信•面向对象软件是由对象组成•软件中的任何元素都是对象•对象是把静态属性的数据和动态属性的操作封装在一起而形成的统一体•复杂对象由简单对象组成•把所有对象都划分成若干类•每个类都定义了一组数据和方法(即施加于对象的操作);•按照子类与父类的关系,把若干个对象类组成一个层次结构的系统(即继承);•对象彼此之间仅能通过传递消息相互联系(对象的私有信息都被封装在对象类中)。

Coad和Yourdon给出了一个定义:面向对象=对象+类+继承+通信基本概念(1)•类(Class)•是对具有相同属性和行为的一(多)个对象的描述•是一个支持继承的抽象数据类型•实例(Instance)•就是由某个特定的类所描述的一个具体的对象•消息(Message)•是要求某个对象执行类中所定义的某个操作的规格说明•其组成为:接收消息的对象、消息名和变元•方法(Method)•就是对象所能执行的操作(类中定义的服务)•属性(Attribute)•就是类中所定义的数据,是对客观世界实体所具有的性质的抽象基本概念(2)•封装•是把数据和实现操作的代码集中起来放在对象内部,不能从外部进行访问和修改。

面向对象的系统测试概述

面向对象的系统测试概述

于……
巴西
optCanada
计算
加拿大
optEuope optJanpan
欧共体 日本
清除 退出
lblEqAmount
cmdCompute cmdClear cmdQuit
VB控件
7. 扩展基本用例EEUC
比EUC增加了前提、替代事件序列描述、系统功能交 叉引用、后果描述提供一些补充说明。
EEUC1 启动应用程序
替代序列 交叉引用 后果
重复转换,相同美元金额
用户
txtDollar得到焦点
基本功能
用户输入美元金额并选择国家,应用程序计算并显示等价金额
参与者行动:
系统响应:
1.用户键盘输入美元金额 2. 美元金额出现在txtDollar中
3.用户点击一个国家按钮 4. 指定国家的货币名称出现在lblEquiv中
12.设置当前选择的选项按钮
13.用户点击cmdClear按钮 14.txtDollar显示空项
15.所选国家选项按钮被复位
行动8、10和13可无限次重复
R3,R4,R6
txtDollar得到焦点
EEUC7 参与者 前提 类型 描述 序列
异常情况:没有选择国家
用户
txtDollar得到焦点
隐藏功能
后果
txtDollar得到焦点
EEUC8 参与者 前提 类型 描述 序列
异常情况:没有输入美元金额
用户
txtDollar得到焦点
隐藏功能
用户选择一个国家,并在没有输入美元金额的情况下点击cmdCompute按钮
参与者行动:
系统响应:
1.用户点击一个国家按钮 2. 国家货币名称出现在lblEquiv中

软件工程系统测试PPT课件

软件工程系统测试PPT课件
了程序的正确性.
CHENLI
5
软件测试与软件调试的区别
内容
软件测试
目的 从一个侧面证明程序员的失败;
方法 从已知条件开始,使用预先定义的程序, 且有预知的结果,不可预见的仅是程序是 否通过测试;
约束 有计划并且要进行测试设计; 过程 发现错误、改正错误、重新测试的过程;
方式 执行是有规程的;
测试 由独立的测试组在不了解软件设计的 人员 条件下完成;
Beta测试由软件的最终用户们在一个或多个 客户场所进行。Beta测试是软件在开发者不能 控制的环境中的“真实”应用。
CHENLI
28
软件测试与开发各阶段关系
CHENLI
29
测试阶段信息流
CHENLI
30
软件测试技术
设计测试方案是测试阶段的关键技术问题。
测试方案包括具体的测试目的(例如,预定 要测试的具体功能),应该输入的测试数据和预 期的结果。 把测试数据和预期的输出结果称为测试用例。 其中最困难的问题是设计测试用的输入数据。
黑盒测试发现程序中的错误,必须在所有可能 的输入条件和输出条件中确定测试数据,来检 查程序是否都能产生正确的输出。
CHENLI
35
软件测试技术
白盒方法穷尽测试实例:
CHENLI
36
软件测试技术
包含的不同执行路径数达520条,对每
一条路径进行测试需要1毫秒,假定一年
工作365 × 24小时,要想把所有路径测
二、白盒测试从程序的逻辑结构入手,按照一定的原 则,来设计测试用例和测试数据,因此白盒测试法 也称为逻辑覆盖法。
CHENLI
41
软件测试技术
三.由白盒测试产生的测试实例应具有下列功能: 1.保证在模块中的独立路径最少被检查一次; 2.检查每个逻辑判断的真假两种情况; 3.对每个循环变量的初值、中间值和终止进行检查; 4.检查程序的内部结构是否有效。

面向对象软件测试方法及工具

面向对象软件测试方法及工具

面向对象软件测试方法及工具一、面向对象软件测试方法介绍随着面向对象编程的普及,针对面向对象的软件测试方法也得到了广泛的应用和研究。

面向对象软件测试方法充分利用了面向对象程序设计的特点,对软件系统进行有效的测试。

面向对象软件测试方法主要包括单元测试、集成测试、系统测试、验收测试等。

1、单元测试单元测试是对软件系统中最小单元的测试。

最小单元可以是一个类,一个函数或者一个模块等。

单元测试主要是通过代码测试来验证一个单元的正确性。

单元测试的目标是在每次开发的过程中及时发现和解决问题,以提高软件质量和开发效率。

2、集成测试集成测试是将多个模块或子系统组合在一起进行测试,以验证它们之间的交互和一致性。

集成测试可以分为自下而上的集成测试和自上而下的集成测试。

自下而上的集成测试,也称为模块集成测试。

模块集成测试是对系统中单个模块的测试。

当一个模块经过单元测试后,可以将其与其他模块进行联合测试。

在单元测试中发现的问题可能会影响到多个模块,因此需要在联合测试时进行综合分析和解决。

自上而下的集成测试,也称为模块组装测试。

模块组装测试是将上层模块作为测试的重点,在测试过程中逐步加入下层模块进行测试。

在这种测试方法中,需要重点测试上层模块的功能和接口是否正常,以保证整个软件系统的运行。

3、系统测试系统测试是对整个软件系统的测试,包括对系统的功能、性能、安全、稳定性等方面的测试。

系统测试是保证整个软件系统按照设计要求正常运行的重要手段。

4、验收测试验收测试是在软件系统开发完成后对软件系统进行测试,目的是验证软件系统是否满足用户需求。

验收测试主要包括安装测试、兼容性测试、功能测试和性能测试等。

二、面向对象软件测试技术1、黑盒测试黑盒测试是一种基于软件系统功能的测试技术。

黑盒测试不考虑软件的内部结构,只测试软件是否能够按照规格说明正常工作。

黑盒测试可以独立于编写代码的程序员进行,只需要依据需求文档,就能进行有效的测试。

2、白盒测试白盒测试是一种基于软件系统的内部结构的测试技术。

面向对象的软件测试技术

面向对象的软件测试技术

面向对象的软件测试技术软件测试是软件开发生命周期中至关重要的一环,它旨在确保软件的质量和可靠性。

随着软件系统的复杂性不断增加,传统的测试方法已经无法满足对软件质量的要求。

面向对象的软件测试技术应运而生,通过将面向对象思想应用于测试过程,提高软件测试的效率和准确性。

本文将介绍面向对象的软件测试技术及其在现代软件开发中的应用。

一、面向对象的软件测试概述面向对象的软件测试是一种基于面向对象原则的软件测试方法论,它将对象作为测试的基本单元,通过模拟对象的行为和交互关系来进行测试。

与传统的结构化测试相比,面向对象的软件测试能够更好地应对软件系统的复杂性和动态性。

在面向对象的软件测试中,测试用例是以对象的状态和行为为基础进行设计的。

通过对对象的状态进行赋值和调用对象的方法,测试人员可以验证对象的响应和输出是否符合预期。

同时,面向对象的测试方法还充分利用了继承、封装和多态等面向对象特性,减少了测试用例的冗余性和重复性。

二、1. 单元测试单元测试是面向对象软件测试的基础,它通过对类和方法进行测试,验证对象的行为是否正确。

在单元测试中,测试人员需要编写测试用例来覆盖类的各个方法,并通过断言来判断实际输出是否符合预期。

单元测试可以帮助开发人员及时发现和修复代码中的错误,提高代码质量和可维护性。

2. 集成测试集成测试是对多个对象之间的交互进行测试,目的是验证对象之间的接口和协作是否正确。

在集成测试中,测试人员需要模拟对象之间的消息传递和数据交换,并对系统的整体功能进行验证。

通过集成测试,可以发现对象之间的潜在问题和依赖关系,确保系统的稳定性和一致性。

3. 模拟测试模拟测试是一种通过模拟外部环境来进行测试的方法,主要用于测试与外部系统交互的功能。

在模拟测试中,测试人员会编写模拟对象,模拟外部系统的行为和数据输入,从而验证软件系统对外部输入的处理能力。

通过模拟测试,可以提前预知外部系统可能引发的问题,并进行相应的处理和优化。

软件测试与质量保障教学资料 面向对象测试

软件测试与质量保障教学资料 面向对象测试

anhuisoft@
非正式验收或 α 测试
在非正式验收测试中,执行测试过程的限定不
象正式验收测试中那样严格。测试内容由各测 试员决定。 这种验收测试方法不象正式验收测试那样组织 有序,而且更为主观。 大多数情况下,非正式验收测试是由最终用户 组织执行的。
anhuisoft@
2 回归测试
在软件发生变动时保证原有功能正
常运作的一种测试策略和方法。 回归测试不需要进行全面的测试, 而是根据修改的情况进行有选择性 的测试。
29
面向对象测试
华中农业大学信息学院计算机科学系
面向对象的新特性
继承 封装(信息隐蔽) 多态(动态绑定)
新特性对测试的影响
信息隐蔽(封装)对测试的影响
信息隐蔽避免类中有关实现细节的信息 被错误地使用; 隐蔽机制给测试带来了困难。
新特性对测试的影响
继承对测试的影响
若一个类得到了充分的测试,当 其被子类继承后,继承的方法在 子类的环境中的行为特征需要重 新测试。
新特性对测试的影响
多态性对测试的影响
面向对象软件中,由于动态绑定和多 态性的存在所带来的不确定性,给测 试覆盖率的满足增大了难度。
2 面向对象测试的层次
面向对象测试的层次,取决于单元的构成,
一般采用三层或四层方式。
如果把单个操作或方法看作单元,则有四
层测试,即方法、类、集成和系统测试。 如果把类看作单元,则有三层测试:类测 试,集成测试,系统测试。
anhuisoft@
验收测试主要内容——实施验收测试
在此阶段里,需要采用一些常用的
验收测试策略进行,例如:α测试, β测试等。 实施验收测试是整个验收测试过程 中的核心部分。

面向对象的软件测试

面向对象的软件测试
04
持续改进软件测试过程
分析测试结果
分析测试结果,找出可能的问题和改进点。
提升技能和知识
持续学习新的软件测试技术和方法,提升团 队技能和知识水平。
改进测试用例
根据分析结果,改进或补充测试用例,以提 高测试覆盖率。
引入自动化
引入更多的自动化测试,提高测试效率和质 量。
THANKS FOR WATCHING
系统测试可以使用自动 化测试工具进行,如 Selenium、JMeter等 ,这些工具支持对整个 系统的全面测试和性能 监控。
验收测试
01
总结词
验收测试是在软件开发完成后 进行的最终测试阶段,以确认 软件是否满足用户需求并可交 付使用。
02
详细描述
验收测试关注的是软件的最终 质量和用户满意度,验证软件 是否符合用户期望和需求。它 通常在系统测试之后进行,以 确保软件可以交付给用户使用 。
详细描述
集成测试关注的是模块之间的交互和通信,验证 各个模块在组合后能否协同工作。它通常在单元 测试之后进行,以确保模块之间的集成不会引入 新的错误。
工具
集成测试可以使用自动化测试框架进行,如 TestLink、FitNesse等,这些工具支持对多个模 块的集成测试和断言。
系统测试
总结词
详细描述
测试方法
Mockito
总结词
Mockito是一个流行的Java模拟框架,用于 模拟对象和创建测试场景。
详细描述
Mockito能够帮助开发者创建模拟对象,模 拟被测对象的行为,以便在单元测试中隔离 依赖关系。它提供了简洁的注解和API,使得 模拟对象的使用和管理变得简单。Mockito 还支持对接口、类和私有方法的模拟,提供

软件工程 第七版 Chapter_16v1 测试面向对象的应用系统

软件工程 第七版  Chapter_16v1 测试面向对象的应用系统

8
传统测试用例设计方法的可应用性

基于故障的测试

测试人员查找似然故障(即系统的实现有可能产生错误的方面)。 为了确定这些故障是否存在,需要设计测试用例以检查设计或代码 继承并不能排除对所有派生类进行全面测试的需要。事实上,它确 实使测试过程更复杂。 基于场景的测试关心用户做什么,而不是产品做什么。这意味着捕 获用户必须完成的任务(通过用例),然后在测试时使用它们及其 变体。

类测试与类层次


基于场景的测试设计

9
OOT 方法:随机测试

随机测试

确定适用于类的操作 定义约束它们的使用 确定最小测试序列
操作序列定义了类的最小生命历时

随机产生(但是有效)一些不同的测试序列
检查其他类实例(更复杂的)的生命历时
10
OOT 方法:划分测试

划分测试

与传统软件的等价划分基本相似,划分测试减少测试特定类所 需的测试用例数量 基于状态划分
根据它们改变类的状态的能力对类操作进行分类
基于属性划分
根据它们所使用的属性对类操作进行分类
基于类别划分
根据每个操作所完成的一般功能对类操作进行分类
11
OOT 方法:类间测试


与单个类的测试相类似,类协作测试可以通过运用随机 和划分方法、基于场景测试及行为测试来完成。下面的 方法是生成多类随机测试用例的方法: 类间测试
6
OO 测试策略

确认测试 类连接的细节消失了 利用用例(第5章和第6章),它是需求模型的一部分 传统的黑盒测试方法(第18章)可以用于驱动确认测 试
7
OOT 方法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象环境的集成测试

当进行面向对象系统的集成测试时, 驱动程序和桩程序的使用也发生变化。 驱动程序可用于测试低层中的操作和 整组类的测试。驱动程序也可用于代 替用户界面以便在界面实现之前就可 以进行系统功能的测试。桩程序可用 于在需要类间的协作但其中的一个或 多个协作类仍未完全实现的情况下。
面向对象环境的集成测试

面向对象概念的测试用例设计的含义

类经过分析模型到设计模型的演变,它成 为测试用例设计的目标。由于操作和属性 是封装的,从类的外面测试操作通常是徒 劳的。尽管封装是面向对象的本质特征之 一,但它可能成为测试的一个小障碍。 “测试需要对象的具体和抽象状态”。然 而,封装使获取这些信息有些困难,除非 提供内置操作来报告类的属性值。
OOA和OOD模型的正确性
用于表示分析和设计模型的符号和语法是与为 项目所选择的特定分析和设计方法连接在一起的。 由于语法的正确性是基于符号表示的正确使用来 判断的,必须对每个模型进行评审以确保维持了 正确的建模习惯。 在分析和设计期间,可以根据模型是否符合真 实世界的问题来评估模型的语义正确性。如果模 型准确地反映了真实世界,则在语义上是正确的。 实际上,为了确定模型是否反映了真实世界的需 求,应该将其介绍给问题领域的专家,由专家检 查类定义和层次中遗漏和不清楚的地方。要对类 关系进行评估,确定这些关系是否准确地反映了 真实世界的对象连接。

面向对象环境的单元测试

当考虑面向对象软件时,单元的概念发生 了变化。封装导出了类的定义。这意味着 每个类和类的实例(对象)包装有属性(数据) 和处理这些数据的操作(函数)。封装的类常 是单元测试的重点,然而,类中包含的操 作是最小的可测试单元。由于类中可以包 含一些不同的操作,且特殊的操作可以作 为不同类的一部分存在,因此,必须改变 单元测试的战术。

面向对象测试方法

面向对象体系结构导致封装了协作类 的一系列分层子系统的产生。每个系 统成分(子系统和类)完成有助于满 足系统需求的功能。有必要在不同的 层次上测试面向对象系统,以发现错 误。在类相互协作以及子系统穿越体 系结构层通信时可能出现这些错误。
面向对象测试方法
对于面向对象测试用例的设计,[Ber93]已经提出了总体方 法: 1.每个测试用例都应该唯一地标识,并明确地与被测试的类 相关联。 2.应该叙述测试的目的。 3.应该为每个测试开发测试步骤,并包括以下内容: a.将要测试的类的指定状态列表 b.作为测试结果要进行检查的消息和操作列表 c.对类进行测试时可能发生的异常列表 d.外部条件列表 e.有助于理解或实现测试的补充信息 面向对象测试与传统的测试用例设计是不同的,传统的测试 用例是通过软件的输入-处理-输出视图或单个模块的算法细 节来设计的,而面向对象测试侧重于设计适当的操作序列以 检查类的状态。
扩展测试的视野

如果问题没有在设计期间检测出来,并传 递到编码活动中,将增加可观的工作量生 成代码,实现不必要的属性、两个不必要 的操作、驱动对象间通信的消息以及很多 其他相关的问题。另外,类的测试会消耗 更多不必要的时间。一旦最终发现了这个 问题,一定对系统执行修改,由变更所引 起的潜在副作用将永远存在。

推荐使用下面的步骤对类模型进行评估: 1.检查CRC模型和对象-关系模型。 2.检查每一张CRC索引卡片的描述以确定委托责 任是定义协作者的一部分。 3.反转连接,确保每个提供服务的协作者都从合 理的地方收到请求。 4.使用步骤3中反转后的连接,确定是否真正需 要其他类,或者责任在类之间的组织是否合适。 5.确定是否可以将广泛请求的多个责任组合为一 个责任。
测试面向对象的应用系统

面向对象测试与传统系统测试相类似,但它们 的测试战术是不同的。由于面向对象分析与设计 模型在结构和内容上与所得的面向对象程序相类 似,因此,“测试”可以起始于对这些模型的评 审。一旦产生了代码,真正的面向对象测试以设 计一系列检验类操作的“小型测试”以及当一个 类与其他类进行协作时是否出现错误开始。当集 成类形成一个子系统时,结合基于故障的方法, 运用基于使用的测试对相互协作的类进行完全检 查。最后,利用用例发现软件确认层的错误。来自 面向对象概念的测试用例设计的含义
继承也为测试用例设计者提出了额外的挑战。 即使已取得复用,每个新的使用环境也需要重新 测试。另外,由于增加了所需测试环境的数量, 多重继承使测试进一步复杂化。 若从超类中派生的子类实例使用在相同的问题 域,则当测试子类时,使用超类中生成的测试用 例集是可能的。然而,若子类用在一个完全不同 的环境中,则超类的测试用例将具有很小的可应 用性,因而必须设计新的测试用例集。

扩展测试的视野

例如,在分析和第一轮迭代中,考虑定义 了很多属性的一个类。一个无关的属性被 扩展到类中,然后指定了两个操作来处理 此属性。分析模型进行了评审,领域专家 指出了这个问题。在这个阶段去除无关的 属性,可以在分析阶段避免一些问题和不 必要的工作量。如果问题没有在分析期间 被发现并进一步传播,在设计期间也会发 生问题。(课本292页)
面向对象环境的单元测试

不再孤立地对单个操作进行测试(传统的单 元测试观点),而是将其作为类的一部分。 为便于说明,考虑一个类层次结构,在此 结构内对超类定义某操作X,并且一些子类 继承了操作X。每个子类使用操作X,但它 应用于为每个子类定义的私有属性和操作 的环境内。由于操作X应用的环境有细微的 差别,在每个子类的环境中测试操作X是必 要的。这意味着在面向对象环境中,以独 立的方式测试X往往是无效的。
面向对象模型的一致性
系统设计评审是这样进行的:检查面向对象分 析期间所开发的对象-行为模型,并将所需要的 系统行为映射到为完成此行为而设计的子系统上。 在系统行为的范畴内也要对并发和任务分配进行 评审。对系统的行为状态进行评估以确定并发行 为。使用用例进行用户界面设计。 对照对象-关系网检查对象模型,确保所有的设 计对象包括必要的属性和操作,以实现为每个 CRC索引卡片所定义的协作。另外,要对操作 细节的详细规格说明进行评审。

传统测试用例设计方法的可应用性
白盒测试方法可以应用于类中定义的操作。 基本路径、循环测试或数据流技术有助于 确保测试一个操作的每条语句。然而,许 多类操作的简洁结构使某些人认为:用于 白盒测试的工作量最好直接用于类层次的 测试。 与利用传统的软件工程方法所开发的系统 一样,黑盒测试方法也适用于面向对象系 统。用例可为黑盒测试和基于状态的测试 设计提供有用的输入。
用于评审的CRC索引卡片实例
图16-1 用于评审的CRC索引卡片实例
面向对象模型的一致性

一旦创建了设计模型,就可以进行系统设 计和对象设计的评审了。系统设计描述总 体的产品体系结构、组成产品的子系统、 将子系统分配给处理器的方式、将类分配 给子系统的方式以及用户界面的设计。对 象模型描述每个类的细节以及实现类之间 的协作所必需的消息传送活动。

基于故障的测试
集成测试寻找操作调用或信息连接中的似然错误。在这 种环境下,有三种错误可以发现:非预期的结果、错误 的操作/消息使用,以及不正确的调用。为确定函数(操 作)调用时的似然故障,必须检查操作的行为。 集成测试适用于属性与操作。对象“行为”通过赋予属 性值来定义。测试应该检查属性以确定不同类型的对象 行为是否存在合适的值。 集成测试试图发现用户对象而不是服务对象中的错误。 集成测试的重点是确定调用代码而不是被调用代码中是 否存在错误。利用操作调用为线索,是找出检查调用代 码的测试需求的一种方式。

面向对象模型的一致性 面向对象模型的一致性可以通过这样的方 法来判断:“考虑模型中实体之间的关系。 不一致的分析模型或设计模型在一部分中 的表示没有正确地反映到模型的其他部 分”。 为了评估一致性,应该检查每个类及与其 他类的连接。可以使用CRC模型或对象关系图来辅助此活动。

面向对象模型的一致性
面向对象环境的单元测试

面向对象软件的类测试等同于传统软 件的单元测试。不同的是传统软件的 单元测试侧重于模块的算法细节和穿 过模块接口的数据,面向对象软件的 类测试是由封装在该类中的操作和类 的状态行为驱动的。
面向对象环境的集成测试

由于面向对象软件没有明显的层次控 制结构,因此,传统的自顶向下和自 底向上集成策略已没有太大意义。另 外,由于类的成分间的直接或间接相 互作用,每次将一个操作集成到类中 往往是不可能的。

簇测试是面向对象软件集成测试中的 一步。这里,利用试图发现协作中的 错误的测试用例来测试(通过检查CRC 和对象-关系模型所确定的)协作的类 簇。
面向对象环境的确认测试
在确认级或系统级,类连接的细节消失了。 如传统的确认方法一样,面向对象软件的 确认关注用户可见的动作和用户可以辨别 的来自系统的输出。为了辅助确认测试的 导出,测试人员应该拟定出用例,用例是 需求模型的一部分,提供了最有可能发现 用户交互需求方面错误的场景。 传统的黑盒测试方法可用于驱动确认测试。 另外,测试人员可以选择从对象-行为模型 导出测试用例,也可以从创建的事件流图 导出测试用例。
扩展测试的视野
在开发的后期,面向对象分析和面向对象 设计模型提供了有关系统结构和行为的实 质性信息。因此,在代码生成之前,需要 对这些模型进行严格的评审。 应该在模型的语法、语义和语用方面对所 有的面向对象模型进行正确性、完整性和 一致性测试。

测试OOA和OOD模型

不能在传统意义上对分析和设计模型进行 测试,因为这些模型是不能运行的。然而, 可以使用技术评审检查模型的正确性和一 致性。
软件工程
第16章 测试面向对象的应用系统
主要内容
扩展测试的视野 测试OOA和OOD模型 面向对象测试策略 面向对象测试方法 类级可应用的测试方法 类间测试用例设计 小结

测试面向对象的应用系统
相关文档
最新文档