当前位置:文档之家› 面向对象软件测试

面向对象软件测试


3/20
面向对象测试模型
面向对象的开发模型突破了传统的瀑布模型, 面向对象的开发模型突破了传统的瀑布模型,将开发分为面 向对象分析(OOA),面向对象设计(OOD), ),面向对象设计 ),和面向对象编 向对象分析(OOA),面向对象设计(OOD),和面向对象编 OOP) 程(OOP)三个阶段 针对这种开发模型,结合传统的测试步骤的划分, 针对这种开发模型,结合传统的测试步骤的划分,把面向对 象的软件测试分为: 象象分析的测试(续)
OOA直接映射问题空间, OOA直接映射问题空间,全面的将问题空间中实现功能的现实 直接映射问题空间 抽象化
将问题空间中的实例抽象为对象, 将问题空间中的实例抽象为对象,用对象的结构反映问题空间的复杂实 例和复杂关系,用属性和操作表示实例的特性和行为 例和复杂关系, 对一个系统而言,与传统分析方法产生的结果相反,行为是相对稳定的, 对一个系统而言,与传统分析方法产生的结果相反,行为是相对稳定的, 结构是相对不稳定的,这更充分反映了现实的特性 结构是相对不稳定的, OOA的结果是为后面阶段类的选定和实现, OOA的结果是为后面阶段类的选定和实现,类层次结构的组织和实现提 的结果是为后面阶段类的选定和实现 供平台。因此,对OOA的测试,应从以下方面考虑: 供平台。因此, OOA的测试,应从以下方面考虑: 的测试 对认定的对象的测试 对认定的结构的测试 对认定的主题的测试 对定义的属性和实例关联的测试 对定义的服务和消息关联的测试
10/20
面向对象的单元测试—类测试( 面向对象的单元测试—类测试(续)
类的测试按顺序分为三个部分: 类的测试按顺序分为三个部分:
1. 2.
基于服务的测试: 测试类中的每一个方法; 基于服务的测试: 测试类中的每一个方法; 基于状态的测试: 基于状态的测试: 考察类的实例在其生命周期各 个状态下的情况; 个状态下的情况; 基于响应状态的测试: 从类和对象的责任出发, 基于响应状态的测试: 从类和对象的责任出发,以 外界向对象发送特定的消息序列的方法来测试对 象的各个响应状态
2.
13/20
面向对象的系统测试
通过单元测试和集成测试,仅能保证软件开发的功能得以实现。 通过单元测试和集成测试,仅能保证软件开发的功能得以实现。 但不能确认在实际运行时,它是否满足用户的需要。为此, 但不能确认在实际运行时,它是否满足用户的需要。为此,对 完成开发的软件必须经过规范的系统测试 系统测试应尽量搭建与用户实际使用环境相同的测试平台, 系统测试应尽量搭建与用户实际使用环境相同的测试平台,应 该保证被测系统的完整性,对临时没有的系统设备部件, 该保证被测系统的完整性,对临时没有的系统设备部件,也应 有相应的模拟手段 系统测试时,应该参考OOA分析的结果,对应描述的对象、 系统测试时,应该参考OOA分析的结果,对应描述的对象、属 OOA分析的结果 性和各种服务, 性和各种服务,检测软件是否能够完全再现问题空间 系统测试不仅是检测软件的整体行为表现,从另一个侧面看, 系统测试不仅是检测软件的整体行为表现,从另一个侧面看, 也是对软件开发设计的再确认
7/20
面向对象编程的测试
典型的面向对象程序具有继承、封装和多态的新特性, 典型的面向对象程序具有继承、封装和多态的新特性, 这使得传统的测试策略必须有所改变
封装是对数据的隐藏, 封装是对数据的隐藏,外界只能通过被提供的操作来访问或 修改数据,这样降低了数据被任意修改和读写的可能性, 修改数据,这样降低了数据被任意修改和读写的可能性,降 低了传统程序中对数据非法操作的测试 继承是面向对象程序的重要特点, 继承是面向对象程序的重要特点,继承使得代码的重用率提 高,同时也使错误传播的概率提高 多态使得面向对象程序对外呈现出强大的处理能力, 多态使得面向对象程序对外呈现出强大的处理能力,但同时 却使得程序内同一函数的行为复杂化, 却使得程序内同一函数的行为复杂化,测试时必须考虑不同 类型具体执行的代码和产生的行为
8/20
面向对象编程的测试( 面向对象编程的测试(续)
面向对象程序是把功能的实现分布在类中
能正确实现功能的类, 能正确实现功能的类,通过消息传递来协同实现设 计要求的功能
因此,在面向对象编程(OOP)阶段,忽略类功 阶段, 因此,在面向对象编程 阶段 能实现的细则, 能实现的细则,将测试的目光集中在类功能的 实现和相应的面向对象程序风格, 实现和相应的面向对象程序风格,主要体现为 以下两个方面
面向对象分析的测试 面向对象设计的测试 面向对象编程的测试 面向对象单元测试 面向对象集成测试 面向对象系统测试 面向对象的回归测试
4/20
面向对象分析的测试
面向对象分析(OOA):E面向对象分析(OOA):E-R图和语义网络模型 (OOA):E
信息造型中的概念, 信息造型中的概念,与面向对象程序设计语言中 的重要概念结合在一起而形成的分析方法 最后通常是得到问题空间的图表的形式描述
3.
11/20
面向对象的集成测试
传统的集成测试, 传统的集成测试,有两种方式通过集成完成的 功能模块进行测
1.
自顶向下集成: 自顶向下集成:自顶向下集成是构造程序结构的一 种增量式方式,它从主控模块开始,按照软件的控 种增量式方式,它从主控模块开始, 制层次结构,以深度优先或广度优先的策略, 制层次结构,以深度优先或广度优先的策略,逐步 把各个模块集成在一起 自底向上集成:自底向上测试是从“原子” 自底向上集成:自底向上测试是从“原子”模块 即软件结构最低层的模块) (即软件结构最低层的模块)开始组装测试
6/20
面向对象设计的测试
面向对象设计( 面向对象设计(OOD)采用造型的观点,以OOA为 )采用造型的观点, 为 基础归纳出类,并建立类结构或进一步构造成类库, 基础归纳出类,并建立类结构或进一步构造成类库, 实现分析结果对问题空间的抽象
OOD是OOA的进一步细化和更高层的抽象 是 的进一步细化和更高层的抽象 OOD确定类和类结构不仅是满足当前需求分析的要求,更 确定类和类结构不仅是满足当前需求分析的要求, 确定类和类结构不仅是满足当前需求分析的要求 重要的是通过重新组合或加以适当的补充, 重要的是通过重新组合或加以适当的补充,能方便实现功能 的重用和扩增, 的重用和扩增,以不断适应用户的要求 的测试, 对OOD的测试,应从如下三方面考虑: 的测试 应从如下三方面考虑: 对认定的类的测试 对构造的类层次结构的测试 对类库的支持的测试
数据成员是否满足数据封装的要求 类是否实现了要求的功能
9/20
面向对象的单元测试——类测试 类测试 面向对象的单元测试
传统的单元测试的对象是软件设计的最小单位——模块 传统的单元测试的对象是软件设计的最小单位——模块 ——
单元测试的依据是详细设描述, 单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路 径设计测试用例, 径设计测试用例,以便发现模块内部的错误 单元测试多采用白盒测试技术, 单元测试多采用白盒测试技术,系统内多个模块可并行地进行测试
第14讲 14讲 面向对象软件测试
1/20
结构化测试
自底向上的测试策略, 自底向上的测试策略,从“小型测试”开始,逐步走 小型测试”开始, 大型测试” 向“大型测试”
从单元测试开始,然后逐步进入集成测试, 从单元测试开始,然后逐步进入集成测试,最后是有效性 和系统测试 在传统应用中,单元测试集中在最小的可编译程序单位— 在传统应用中,单元测试集中在最小的可编译程序单位— 子程序( 模块、子例程、进程) —子程序(如,模块、子例程、进程) 一旦这些单元均被独立测试后, 一旦这些单元均被独立测试后,它被集成在程序结构中 这时要进行一系列的回归测试以发现由于模块的接口所带 来的错误和新单元加入所导致的副作用 系统被作为一个整体测试以保证发现在需求中的错误
如根据类的继承关系图来纵向检查类, 如根据类的继承关系图来纵向检查类, 根据对象之间方法的相互作 用来横向检查类的关系图
15/20
面向对象的系统测试( 面向对象的系统测试(续)
系统测试: 系统测试:
系统测试是对所有类和主程序构成的整个系统进行整体测试, 系统测试是对所有类和主程序构成的整个系统进行整体测试, 以验证软件系统的正确性和性能指标等满足需求规格说明书 和任务书所指定的要求 它与传统的系统测试一样, 包括功能测试、性能测试、 它与传统的系统测试一样, 包括功能测试、性能测试、余量 测试等, 测试等, 可套用传统的系统测试方法 测试用例可从对象—行为模型和作为面向对象分析的事件流 测试用例可从对象—行为模型和作为面向对象分析的事件流 图中导出
14/20
面向对象的系统测试( 面向对象的系统测试(续)
类簇(是一组相互合作的类) 类簇(是一组相互合作的类)
类簇测试主要考察一组协同操作的类之间的相互作用, 类簇测试主要考察一组协同操作的类之间的相互作用, 是 系统集成测试的一个子阶段 在单个类分别进行测试后, 根据系统中类的层次关系图, 在单个类分别进行测试后, 根据系统中类的层次关系图, 将相互有影响的类作为一个整体, 将相互有影响的类作为一个整体, 检查各相关类之间消息 连接的合法性、子类的继承性与父类的一致性、 连接的合法性、子类的继承性与父类的一致性、动态绑定 执行的正确性、 执行的正确性、类簇协同完成系统功能的正确性等 测试用例可由多种方案结合生成
当考虑面向对象软件时,单元的概念发生了变化 当考虑面向对象软件时,
封装驱动了类和对象的定义,这意味着每个类和类的实例(对象) 封装驱动了类和对象的定义,这意味着每个类和类的实例(对象)包装了 属性(数据)和操纵这些数据的操作, 属性(数据)和操纵这些数据的操作,而不是个体的模块 最小的可测试单位是封装的类或对象,类包含一组不同的操作, 最小的可测试单位是封装的类或对象,类包含一组不同的操作,并且某 特殊操作可能作为一组不同类的一部分存在 一个对象有它自己的状态和依赖于状态的行为, 一个对象有它自己的状态和依赖于状态的行为, 对象操作既与对象的状 态有关, 但也可能改变对象的状态。 态有关, 但也可能改变对象的状态。 单元测试的意义发生了较大变化,我们不再孤立地测试单个操作, 单元测试的意义发生了较大变化,我们不再孤立地测试单个操作,而是 将操作作为类的一部分
相关主题