第10章面向对象测试 面向对象测试的特点 面向对象的测试策略 面向对象软件的测试用例设计 RUP的测试活动 安交通大学刘海岩
西安交通大学 刘海岩 1 第10章 面向对象测试 ⚫ 面向对象测试的特点 ⚫ 面向对象的测试策略 ⚫ 面向对象软件的测试用例设计 ⚫ RUP的测试活动
10.1面向对象测试的特点 面向对象测试的整体目标(以最小的工作量发现最 大数量的错误)与传统软件测试的目标是一致的。但是 OO程序的性质改变了测试策略与战术。 1、传统测试主要是基于程序运行过程的,即选择一组 输入数据运行被测程序,通过比较实际结果与预期结果 从而判断程序是否有错。而OO程序中的对象通过发送消 息启动相应的操作,并且通过修改对象的状态达到转化 系统运行状态的目的,同时,在系统中还可能存在并发 活动的对象。应此传统的测试方法不再适应 2、传统程序的复用以调用公共模块为主,运行环境是 连续的。而面向对象复用很多是用继承实现的,子类继 承过来的同名操作有新的语境,必须要重新测试。随着 继承层次的加深,测试的工作量和难度也随之增加。由 继承支持的多态的特性同样给测试带来了难度 安交通大学刘海岩
西安交通大学 刘海岩 2 10.1 面向对象测试的特点 面向对象测试的整体目标(以最小的工作量发现最 大数量的错误)与传统软件测试的目标是一致的。但是 OO程序的性质改变了测试策略与战术。 1、传统测试主要是基于程序运行过程的,即选择一组 输入数据运行被测程序,通过比较实际结果与预期结果 从而判断程序是否有错。而OO程序中的对象通过发送消 息启动相应的操作,并且通过修改对象的状态达到转化 系统运行状态的目的,同时,在系统中还可能存在并发 活动的对象。应此传统的测试方法不再适应。 2、传统程序的复用以调用公共模块为主,运行环境是 连续的。而面向对象复用很多是用继承实现的,子类继 承过来的同名操作有新的语境,必须要重新测试。随着 继承层次的加深,测试的工作量和难度也随之增加。由 继承支持的多态的特性同样给测试带来了难度
3、面向对象软件的开发是渐进、演化的开发,从分析 设计到实现使用相同的语义结构(如类、属性、操作 消息)。因此要扩大测试的视角,对分析模型、设计模 型进行测试。例如,在分析模型中定义了一个无用的属 性,围绕着这个属性可能会带来以下错误: 在分析模型中: 定义了一个与该属性有关的操作 导致了不正确的类关系: 为共享属性和操作创建了不必要的子类: 为适应该属性和操作刻画了其类和系统的行为。 如果问题在分析阶段未被发现,再将错误继续传播, 使得设计模型可能存在 与该类有关的不合适的子系统或任务的划分 与该无用属性有关操作的算法设计: 与该无用属性有关操作的接口及消息模式。 安交通大学刘海岩
西安交通大学 刘海岩 3 3、面向对象软件的开发是渐进、演化的开发,从分析、 设计到实现使用相同的语义结构(如类、属性、操作、 消息)。因此要扩大测试的视角,对分析模型、设计模 型进行测试。例如,在分析模型中定义了一个无用的属 性,围绕着这个属性可能会带来以下错误: 在 分析模型中: • 定义了一个与该属性有关的操作: • 导致了不正确的类关系: • 为共享属性和操作创建了不必要的子类: • 为适应该属性和操作刻画了其类和系统的行为。 如果问题在分析阶段未被发现,再将错误继续传播, 使得设计模型可能存在: • 与该类有关的不合适的子系统或任务的划分: • 与该无用属性有关操作的算法设计: • 与该无用属性有关操作的接口及消息模式
如果问题在设计阶段仍未被检测到,并传送到编码 活动中,则大量的工作将被花在生成那些实现一个不必 要的属性、不必要的操作、不必要的消息通信以及很多 其它相关问题的代码。 由于分析设计模型不能被执行,所以不能进行传统 意义上的测试。只能通过正式技术复审来检査分析模型 和设计模型的一致性 4、面向对象开发工作的演化性使面向对象测试活动也 具有演化性。每个构件产生过程中,单元测试随时进行, 迭代的每一个构造都要进行集成测试,后期迭代还包括 大量的回归测试,迭代结束时进行系统测试。 是否设计模式的使用将减轻OO系统的繁重测试? Binder认为每次复用是一个新的使用语境,需要重新谨慎 的测试。为了获得OO系统的高可靠性,可能需要更多的 而不是更少的测试。 安交通大学刘海岩
西安交通大学 刘海岩 4 如果问题在设计阶段仍未被检测到,并传送到编码 活动中,则大量的工作将被花在生成那些实现一个不必 要的属性、不必要的操作、不必要的消息通信以及很多 其它相关问题的代码。 由于分析设计模型不能被执行,所以不能进行传统 意义上的测试。只能通过正式技术复审来检查分析模型 和设计模型的一致性。 4、 面向对象开发工作的演化性使面向对象测试活动也 具有演化性。每个构件产生过程中,单元测试随时进行, 迭代的每一个构造都要进行集成测试,后期迭代还包括 大量的回归测试,迭代结束时进行系统测试。 是否设计模式的使用将减轻OO系统的繁重测试? Binder认为每次复用是一个新的使用语境,需要重新谨慎 的测试。为了获得OO系统的高可靠性,可能需要更多的 而不是更少的测试
10.2面向对象的测试策略 传统的测试策略是从小型测试开始,逐步走向大型测试, 即从单元测试开始,逐步进入集成测试,最后进行系统测试 在传统测试中,单元测试集中在最小的可编译程序单位(子 程序、过程、函数),一旦这些单元都被独立测试后,被集 成到程序结构中进行一系列的回归测试,以发现由于模块的 接口和新单元加入所导致的副作用而带来的错误。最后,对 系统整体进行测试以发现需求中的错误。 1、单元测试(类或对象或组成的小簇) OO语境中,单元的概念发生了变化。封装驱动了类或对 象的定义,即每个类或对象封装了属性和操作这些属性的服 务,最小的可测试单位不是个体模块,而是封装的类或对象 类包含一组不同的操作,并且某个特殊操作可能作为类的 部分存在(如子类中继承的操作),因此,单元实际上是类 或若干相关的类组成的小簇 西安交通大学刘海岩
西安交通大学 刘海岩 5 10.2 面向对象的测试策略 传统的测试策略是从小型测试开始,逐步走向大型测试, 即从单元测试开始,逐步进入集成测试,最后进行系统测试。 在传统测试中,单元测试集中在最小的可编译程序单位(子 程序、过程、函数),一旦这些单元都被独立测试后,被集 成到程序结构中进行一系列的回归测试,以发现由于模块的 接口和新单元加入所导致的副作用而带来的错误。最后,对 系统整体进行测试以发现需求中的错误。 1、单元测试(类或对象或组成的小簇) OO语境中,单元的概念发生了变化。封装驱动了类或对 象的定义,即每个类或对象封装了属性和操作这些属性的服 务,最小的可测试单位不是个体模块,而是封装的类或对象。 类包含一组不同的操作,并且某个特殊操作可能作为类的一 部分存在(如子类中继承的操作),因此,单元实际上是类 或若干相关的类组成的小簇