面向对象软件的测试_第1页
面向对象软件的测试_第2页
面向对象软件的测试_第3页
面向对象软件的测试_第4页
面向对象软件的测试_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章

面向对象软件的测试

[本章要点]

面向对象软件的测试与传统软件的区别;类测试价值的评估方法;类测试用例设计方法;特殊类的测试方法;划分面向对象软件测试的方法;开源工具Junit的使用方法。[本章目标]了解面向对象的测试与传统软件测试的异同;掌握类测试的基础知识;重点理解针对抽象类以及接口类等特殊类的测试技巧,设计类测试用例和测试驱动程序的几种方法;初步了解Junit。6.1面向对象的测试与传统测试的比较

传统的测试计算机软件的策略是从“小型测试”开始,逐步走向“大型测试”,且单元测试集中在最小的可编译程序单位——子程序。面向对象程序的结构不再是传统的功能模块结构,而是作为一个整体,并且对每个开发阶段都有不同以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。面向对象的软件测试分为:面向对象分析的测试,面向对象设计的测试,面向对象编程的测试,面向对象单元测试,面向对象集成测试,面向对象系统测试。1、传统的面向过程分析与面向对象分析(OOA)2、结构化的设计方法与面向对象设计(OOD)3、典型的面向对象程序具有继承、封装和多态的新特性。4、传统的单元测试的对象是软件设计的最小单位——模块。

5、传统的集成测试,主要有两种功能模块测试的方式:①自顶向下集成②自底向上集成。面向对象集成测试采用基于路径的集成策略(MM-路径)。6、为了保证软件的功能完整性,除了单元测试和集成测试,还必须经过规范的系统测试。

6.1.1信息隐蔽对测试的影响

类的重要作用之一是信息隐蔽。它对类中所封装的信息的存取进行控制,从而避免类中有关实现细节的信息被错误地使用。该隐蔽机制给测试带来了困难。6.1.2封装和继承对测试的影响若一个类得到了充分的测试,当其被子类继承后,继承的方法在子类的环境中的行为特征需要重新测试。

6.1.3多态性对测试的影响

传统软件测试中经常使用静态分析技术对代码进行分析;面向对象软件中,由于动态绑定和多态性的存在所带来的不确定性,给测试覆盖率的满足增大了难度。6.2类测试基础1、类测试概念:验证类的实现是否和该类的说明完全一致。2、类测试的方法:通过代码检查或执行测试用例的方法来有效地进行类测试。(后者优于前者)。

3、类测试人员

类测试通常由开发人员来进行;(会带来好处和不足之处)。4、类测试时间

类的测试伴随着开发过程中的各个阶段,当类的说明或实现发生变化时应该执行回归测试。5、类测试过程为类创建实例-->创造适当的环境-->运行测试用例(向一个实例发送一个或多个消息)-->通过参数来检查测试运行的结果-->清除执行测试用例所需的测试环境。6.2.1类在UML中的描述

UML(UnifiedModelingLanguage)语言是一种支持对象技术的建模语言,是在计算机系统中表示真实世界的语言,描述真实世界中的对象和它们之间的关系,支持应用的开发。在UML中,用来表示类的符号是矩形,并划分为三个区域,分别是:⑴名称区域:显示类的名称⑵属性区域:显示在类中定义的变量。⑶操作区域:显示在类中定义的方法。

如图6-1所示:图6-1类的UML表示法

类之间的关系分为六类,分别是关联、泛化、实现、依赖、聚合和组合。每种关系分别使用不同的符号来表示(如:表6-1所示),并分别用私有的、保护的和公有的三个关键字来修饰类(如:表6-2所示)。表6-1UML类图符号描述

表6-2UML类图作用域描述6.2.2类测试的价值

选择将每个类作为一个单元进行单独的测试,还是将其同其他类绑定进行集成测试,需要使用如下4个要素来进行测试价值的评估:1、类本身的复杂程度2、类在整个系统中的层次3、开发该类测试驱动程序需要投入的成本4、类本身的风险程度6.2.3类测试用例设计

一般基于如下3个标准设计测试系列,即基于状态的覆盖率、基于限制的覆盖率和基于代码的覆盖率。

根据状态转换确定测试用例

6.2.4类测试驱动程序设计

从开发的角度:测试驱动的基本思想是在设计之前先考虑好测试代码;从测试的角度:为了执行测试,运行测试用例,找出软件中隐藏的BUG。因此,测试驱动程序的构建应该简单、透明、易维护,能够提供尽可能多的服务,同时兼顾自增量更新,更理想的情况就是能够复用已存在的测试驱动程序的代码。编写类测试驱动程序的方法有很多种,以Java语言为例来说明测试驱动程序设计的结构。

1、在main方法中写入需要运行的测试用例,即实现main方法,然后编译、执行该类。2、在类中实现一个静态测试方法,通过调用该测试方法来收集每个测试用例的执行结果。3、实现独立的测试类,它的职责是执行并收集每个测试用例的结果。6.3类测试的延伸

类测试构造思想以及如何对接口类、抽象类等进行测试的方法。一、继承层次结构中类的测试

继承是实现接口和代码复用的有效机制。根据继承机制的特点,父类中被测试用例所测试的代码被子类继承,只要父类代码没有被子类“覆盖”,那么就不用重新创建这些测试用例。图6-6显示了各类之间的继承关系:

图6

-6类之间的继承关系Class_A类有两个实例方法operation1()和operation2(),Class_B类继承了Class_A类并且实现了新的实例方法operation3(),Class_C类继承了Class_B类,覆盖了Class_B类的实例方法operation3()和实例方法operation2().根据图6-6中这三个类之间的区别,可以确定继承的测试用例中是否需要产生新的子类测试用例,哪些测试用例适用于测试子类,哪些测试用例在测试子类中不必执行,如下表6-7所示:

由此,可以得出继承层次结构中类测试的测试用例可以采用如下增补原则:1)如果子类新增了一个或者多个新的操作,就需要增加相应的测试用例。2)如果子类定义的同名方法覆盖了父类的方法,就需要增加相应的测试用例。那么,在具体构建类测试用例时可以采用如图6-7所示的结构。对于基类我们要全部测试,底层的测试类可以对其父类的测试方法回归。

图6-7类测试用例的构建二、接口类测试

对类进行测试时需要构建可执行的类实例,而接口不存在任何构造方法无法被实现。由于接口一定会在某个类中实现,因此就使用一个实现接口的类来做测试。遵循以下原则:如果接口没有被任何类实现就无需进行测试。如果已被别的类实现,那么就针对实现该接口的类进行测试。(如下图6-8)图6-8InterFace接口测试类图

6.4面向对象测试的层次

在传统软件中,确定单元的指导方针是:1、能够自身编译的最小程序块;2、单一过程/函数(独立);3、由一个人完成的小规模工作。

面向对象软件测试与传统方法的区别:指导方针中没有明确说明是把类还是方法作为单元。下面对分别以方法和类作为单元的测试进行简单的介绍和比较。

⑴以方法为单元可以将面向对象单元测试归结为传统的单元测试。可以使用所有传统功能性测试和结构性测试技术。前期工作相对容易,但后续测试工作重。⑵以类为单元面向对象测试的层次,取决于单元的构成,一般采用三层或四层方式。如果把单个操作或方法看作单元,则有四层测试,即操作/方法、类、继承和系统测试。面向对象测试的主要问题是集成测试,可以看作是第三层,即通过测试的类之间的交互测试。6.5Junit简介

Junit是用于测试使用Java语言编写的面向对象程序的单元级测试工具。(由EricGamma及KentBeck编写的,由SourceForge发行,使用许可证遵循IBM’scommonPublicLicenseVersion1.0公开版权规范)

*优点*:1、提升程序代码的质量的同时,Junit测试使我们能够更快速的编写程序。2、Junit使用简单3、Junit能够检验测试结果并立即提供反馈。4、Junit测试可以组织成一个有层次的测试系列架构。5、使用Junit开发测试成本低。

6、Junit测试提升软件的稳定性。7、Junit测试是使用Java语言开发的。8、Junit是免费的。一、Junit的安装和配置(略)二、Junit的卸载步骤(略)三、支持Junit的JavaIDE(略)目前主要有ForteforJava3.0EnterpriseEdition;JBuilder6EnterpriseEdition;VisualAgeforJava等。

四、Junit的各种断言

Junit提供了一些用于帮助我们确定某个被测试函数是否正常工作的辅助函数,通常把这些函数称之为断言。可以判断某条件是否为真;两数据是否相等。下面举出一些断言方法:

⑴用于判断是否相等AssertEquals([报告出错信息String

message],期望值expected,实际产生的值actual)

⑵用来判断给定的对象是否为空/(是否为非空)

assertNull/assertNotNull([String

message],java.lang.Objectobject)如果答案为否,则会失败,同样message参数是可选的。注意:当某个断言失败的时候,其所在的测试方法就会停止,也就是说剩余的断言将不会执行,此时应该先修复这个失败的测试再继续进行其他测试。另外,当有的测试失败时不能给原有代码添加新的特性!此时,应该尽快的修复这个错误,直到所有的测试都顺利通过。五、Junit自动化测试框架定义:就是可以对代码进行单元测试的框架。简单的自动化测试框架应该满足如下几个要求:1、能够以某种方式将测试用例组织成一个测试包,以便可以一次执行所有测试用例,尽量达到让实现人员或者测试人员按一个按钮就能完成所有的测试工作,并且输出清晰的测试结果的目的。2、支持简单的操作,可以向测试包中添加任意多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论