《软件测试基础精5PPT课件》由会员分享,可在线阅读,更多相关《软件测试基础精5PPT课件(67页珍藏版)》请在金锄头文库上搜索。
1、 1 软件测试技术基础 Part 软件测试方法 华东交通大学软件学院 2 第5章面向对象软件的测试 本章重点面向对象软件的特点什么是面向对象的单元 如何利用JUnit进行单元测试 5 1概述 对象定义 对象是一个可操作的实体 它既包含了特定的数据 又包含了操作这些数据的代码 即方法 针对对象的测试对象的封装 信息隐藏对测试的影响对象的状态 对象状态的转化对象的生命周期 状态与生命期是否相符对象的交互 消息的发送和接受 4 5 1概述 类定义 是通过抽象数据类型的方法实现的一种数据类型 是具有共性的对象集合 对类的测试构造函数 不同的构造函数以及是否调用其他对象析构函数 可选 数据空间及时释放方
2、法 关注前置条件和后置条件符合设计 5 5 1概述 封装定义 是将数据以及操作数据的方法关联起来 构成的一个具有类类型的对象的描述 封装要求类高度内聚 且耦合很松 测试的难点封装使得内部的实现细节隐藏起来 外界无法访问封装后对象的独立性加重集成测试的负担 6 5 1概述 继承定义 是类之间的一种联系 通过从某个类 称父类 派生可以得到一个新的类 称子类或派生类 该类具有父类的特点和功能 同时还具有新的特点和功能 给测试带来的挑战缺陷传播重复测试 7 5 1概述 多态定义 一个对外接口 多个内在实现方法 分为参数多态和包含多态 一般通过动态测试来检查 8 5 1概述 消息对象之间通过消息的传递产
3、生相互作用 通过消息来请求执行某个操作 测试时应考虑消息的发送者消息的接收者消息所包含的参数 9 5 1概述 接口用于描述一系列规范的行为对接口的测试应注意接口包含的行为应与对应类的行为相符 接口往往与其他接口或类具有关系 应测试到所有可能的作用方式 面向对象技术的特点给测试带来的新问题具体表现为 1 封装把数据及对数据的操作封装在一起 限制了对象属性对外的透明性和外界对它的操作权限 在某种程度上避免了对数据的非法操作 有效防止了故障的扩散 但同时 封装机制也给测试数据的生成 测试路径的选取以及测试结构的分析带来了困难 2 继承实现了共享父类中定义的数据和操作 同时也可定义新的特征 子类是在新
4、的环境中存在 所以父类的正确性不能保证子类的正确性 继承使代码的重用率得到了提高 但同时也使故障的传播几率增加 3 多态和动态绑定增加了系统运行中可能的执行路径 而且给面向对象软件带来了严重的不确定性 给测试覆盖率的活动带来新的困难 面向对象的软件测试与传统软件测试 1数据成员是否满足数据封装的要求数据封装是数据和数据有关的操作的集合 检查数据成员是否满足数据封装的要求 基本原则是数据成员是否被外界 数据成员所属的类或子类以外的调用 直接调用 当改变数据成员的结构时 是否影响了类的对外接口 是否会导致相应外界必须改动 值得注意 有时强制的类型转换会破坏数据的封装特性 8 2类测试 例如 cla
5、ssHiden private inta 1 char p hiden classVisible public intb 2 char s visible Hidenpp Visible qq Visible 在上面的程序段中 pp的数据成员可以通过qq被随意访问 1 继承的成员函数是否都不需要测试 对父类中已经测试过的成员函数 两种情况需要在子类中重新测试 a 继承的成员函数在子类中做了改动 b 成员函数调用了改动过的成员函数的部分 Derived Redefined 显然需要重新测试 对于Derived Inherited 如果它有调用Redefined 的语句 x x Redefined
6、 就需要重新测试 反之 无此必要 2 对父类的测试是否能照搬到子类 延用上面的假设 Base Redefined 和Derived Redefined 已经是不同的成员函数 它们有不同的服务说明和执行 应该对Derived Redefined 重新测试分析 设计测试用例 但由于面向对象的继承使得两个函数有相似 故只需在Base Redefined 的测试要求和测试用例上添加对Derived Redfined 新的测试要求和增补相应的测试用例 例如 Base Redefined 含有如下语句if value 0 message less elseif value 0 message equal
7、elsemessage more Derived Redfined 中定义为if value 0 message less elseif value 0 message Itisequal else message more if value 88 message luck 在原有的测试上 对Derived Redfined 的测试只需做如下改动 将value 0的测试结果期望改动 增加value 88的测试 16 5 2面向对象的软件测试模型 面向对象的软件开发面向对象的分析 OOA 面向对象的设计 OOD 面向对象的编程 OOP 17 5 2面向对象的软件测试模型 面向对象的软件测试面向对
8、象分析的测试面向对象设计的测试面向对象编程的测试面向对象的单元测试面向对象的集成测试面向对象的系统测试 对分析和设计得到的文档进行测试 对编程风格和代码进行测试 面向对象软件测试模型 面向对象测试的模型 面向对象分析OOA的测试OOA直接映射问题空间 全面的将问题空间中实现功能的现实抽象化 将问题空间中的实例抽象为对象 用对象的结构反映问题空间的复杂实例和复杂关系 用属性和服务表示实例的特性和行为 OOA对问题空间分析抽象的不完整 最终会影响软件的功能实现 导致软件开发后期产生大量原本可避免的修补工作 冗余的对象或结构会影响类的选定 程序的整体结构或增加程序员不必要的工作量 面向对象设计OOD
9、的测试OOD确定类和类的结构不仅满足满足当前需求分析的需求 更重要的是通过重新组合或加以适当的补充 能方便实现功能的重用和扩增 对OOD的测试针对功能的实现和重用以及对OOA结果的拓展 对认定的类测试 是否涵盖了OOA中所有认定的对象 是否能体现OOA中定义的属性 是否能实现OOA中定义的服务 是否对应着一个含义明确的数据抽象 是否尽可能少的依赖其他类 类中的方法是否单用途 对构造的类层次结构的测试 类层次结构是否涵盖了所有定义的类 是否能体现OOA中定义的实例关联 是否能实现OOA中定义的消息关联 子类是否具有父类没有的新特性 子类间的共同特性是否完全在父类中得以体现 对类库的支持的测试 面
10、向对象测试的模型 面向对象测试的模型 面向对象程序是把功能的实现分布在类中 能正确实现功能的类 通过消息传递来协同实现设计要求的功能 这种程序架构能将出现的错误精确的确定在某一具体的类 对OOP的测试重点集中在类功能的实现和相应的面向对象程序架构 主要体现为以下两个方面 1 数据成员是否满足数据封装的要求 基本原则是数据成员是否被外界 数据成员所属的类或子类以外的调用 直接调用 2 类是否实现了要求的功能 测试类的功能 不能仅满足于代码能无错运行或被测试的类能提供的功能正确 应以所做的OOD结果为依据 检测类提供的功能是否满足了设计的要求 是否有缺陷 22 5 3面向对象的单元测试 与传统单元
11、测试的区别从单元的划分看从测试方法看从测试对象看 23 5 3面向对象的单元测试 从单元划分看面向过程 以过程或功能作为单元划分的依据 面向对象 以类作为单元是否需要测试所有的类无法实例化的类如何测试继承的类如何测试 24 5 3面向对象的单元测试 与传统单元测试的区别从单元的划分看从测试方法看从测试对象看 25 5 3面向对象的单元测试 从测试方法看传统的单元测试 静态测试 动态测试面向对象的单元测试 更强调自动化 不强调代码检查如何设计测试用例如何构造测试驱动程序 并避免巨大的工作量如何最大可能实现自动化的单元测试 26 5 3面向对象的单元测试 与传统单元测试的区别从单元的划分看从测试方
12、法看从测试对象看 27 5 3面向对象的单元测试 从测试对象看传统的单元测试主要关注函数实现的功能如何通过接口传递数据或消息函数内部的逻辑和效率面向对象的单元测试主要关注类的方法类的状态 28 5 3面向对象的单元测试 从测试对象看面向对象的单元测试应解决如何测试私有方法或受到保护的方法是否需要测试类中的所有方法 29 5 3面向对象的单元测试 实施的基本步骤划分类的优先级 根据优先级的大小确定需要执行单元测试的类 静态测试 去除低级错误 评估类的质量对需要执行单元测试的类设计测试用例开发测试驱动 自动化的脚本组织测试用例执行测试 对测试结果进行总结 30 5 3面向对象的单元测试 测试用例的
13、设计案例说明根据代码设计测试用例根据前置条件和后置条件设计测试用例根据状态转换设计测试用例根据方法特性设计测试用例 31 5 3面向对象的单元测试 案例说明MyPointMyShapeMyLineMyTriangleScaleneIsosceles 32 5 3面向对象的单元测试 测试用例的设计案例说明根据代码设计测试用例根据前置条件和后置条件设计测试用例根据状态转换设计测试用例根据方法特性设计测试用例 33 5 3面向对象的单元测试 根据代码设计测试用例公有方法保护方法私有方法直接修改被测代码在被测类中加入公有方法利用内类机制 34 5 3面向对象的单元测试 测试用例的设计案例说明根据代码设
14、计测试用例根据前置条件和后置条件设计测试用例根据状态转换设计测试用例根据方法特性设计测试用例 35 5 3面向对象的单元测试 根据前置和后置条件设计测试用例定义前置条件是方法被执行之前应该满足的条件 后置条件是当方法执行结束之后应满足的条件 36 5 3面向对象的单元测试 测试用例的设计案例说明根据代码设计测试用例根据前置条件和后置条件设计测试用例根据状态转换设计测试用例根据方法特性设计测试用例 37 5 3面向对象的单元测试 根据状态转换设计测试用例状态转换图中清晰地列出了类可能处于的所有状态 每一对状态转换都涉及一个触发事件 38 5 3面向对象的单元测试 测试用例的设计案例说明根据代码设
15、计测试用例根据前置条件和后置条件设计测试用例根据状态转换设计测试用例根据方法特性设计测试用例 39 5 3面向对象的单元测试 根据方法特性设计测试用例构造函数 检测被测类在各种情况下所创建的对象能否正常初始化功能函数 结合边界值 等价类检验每种功能是否能正确完成接口函数 检验类能否在各种状态之间成功转化 40 5 3面向对象的单元测试 综合策略根据方法特性划分 构造函数 功能函数和接口函数 针对构造函数 根据前置和后置条件设计用例 针对功能函数公有方法 基于前置条件和后置条件设计测试用例 受保护的方法 严格区分有访问权限和无访问权限的前置条件和后置条件 设计测试用例 私有方法 根据实际情况选用
16、适当的策略进行测试 针对接口函数 根据状态转换设计测试用例 对于以上每种情况 都应结合边界值 等价类等测试方法来选择测试数据 41 5 3面向对象的单元测试 测试驱动的实现方式利用main方法嵌入静态方法独立的测试类 42 5 3面向对象的单元测试 测试代码的组织与产品代码放在一起在产品代码目录下与产品代码并行与产品代码的副本放在一起 43 5 3面向对象的单元测试 测试驱动框架设计目标自动简单灵活设计思想TestCaseTestResult 44 5 3面向对象的单元测试 测试驱动框架 TestCase4类操作构建和执行测试用例创建和操作被测类的Object实例分析测试用例结果将测试过程记录到日志文件 45 5 3面向对象的单元测试 案例实践一 类MyPoint的第一次测试尝试 46 5 4JUnit测试 面临的问题提高软件的质量需要撰写测试程序 经良好设计和规划的测试类的代码不需要那么繁琐和冗长 通过借助于测试类的编写规范可以得到易于操作的测试 且不随时间变化 47 5 4JUnit测试 JUnit的概念用于编写和运行可重复的测试 专门针对Java代码的单元测试 主要用于白盒测试盒