面向对象的软件测试策略研究(转)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象的软件测试策略研究
发布时间: 2010-12-17 13:54 作者: 赵蔷欧阳宏基
软件测试是保证软件质量的一个重要手段随着面向对象技术在软件工程中日益推广和使用.传统的结构化测试技术和法受到了极大的冲击面向软件测试技术是新兴的软件测试技术.是专门针对使用面向对象技术开发的软件而提出的一种测试技术.是面向对象软件开发中的不可缺少的一环.已成为保证面向对象软件质量、提高其可靠性的关键。本文主要研究了面向对象技术的特点对测试的影响.提出面向对象软件测试的策略。
1、测试面向对象软件的特殊性
和传统的开发技术相比.面向对象开发技术新增了多态、继承、封装等特点,极大地优化了数据使用的安全性.捉高了代码的重用率.是面向对象开发技术产生巨大吸引力的重要因素而另~方面也影响了软件测试的方法和内容.增加了软件测试的难度.带来了传统软件设计技术所不存在的错误从程序的组织结构方面来讲.传统软件测试技术与过程式程序中数据和操作相分离的特点相适应.是从输入/处理/输出的角度检验一1、函数或过程能否正确工作面向对象程序设计把程序看作是相互协作而又彼此独立的对象的集合在面向对象程序中,对象是属性(数据)和方法(操作)的封装体。每个对
象就像一个传统意义上的小程序.有自己的数据、操作、功能和目的。因此,传统的测试技术必须经过改造才能用于面向对象软件的测试.同时.还需要研究专门针对面向对象软件、适应面向对象软件特定的测试理论和技术
2、面向对象技术的特点及其对测试的影响
与传统的程序相比.面向对象程序设计是一种全新的软件开发技术,面向对象程序的封装性、继承性、动态绑定等特性使程序具有较大的灵活性.给软件测试提出了新的要求.使得面向对象软件的测试更加复杂
2.1 信息隐蔽对测试的影响
类的重要作用之一就是信息隐蔽.它对类中所封装的信息的存取进行控制.从而避免类中有关实现细节的信息被错误使用。而这样的细节性信息正是软件测试所不可忽略的。由于面向对象的软件系统在运行时刻由一组协调工作的对象组成.对象具有一定的状态,在工作过程中对象的状态可能被修改.产生新的状态。所以对于面向对象的程序测试.对象的状态是必须考虑的因素。面向对象软件测试的基本工作就是创建对象.向对象发送一系列信息后检查结果对象的状态.看其是否处于正确的状态。而对象的状态往往
是隐蔽的.若类中未提供足够的存取函数来表明对象的实现方式和内部状态.则测试者必须增添这样的函数。因此,类的信息隐蔽机制给测试带来困难2.2封装性对测试的影响
封装性(Encapsulate)~类的重要特征之一.它把数据和操作数据的方法封装在一起.限制对象属性对外的可见性和外界对它的操作权限。封装性提高了信息隐蔽的能力。使模块间的耦合变弱,从而使程序更容易修改。有效地避免了类中有关实现细节的信息被错误地使用.而这样的细节性信息正是软件测试所不可忽略的。如前所述,对象的状态是对面向对象的程序测试必须考虑的因素.测试应涉及对象的初态、输人参数、输出参数、对象的终态。但是.对象的状态往往是隐蔽的.若类中未提供足够的存取函数来表明对象的实现方式和内部状态.则测试者必须增添这样的函数。这样增加了测试的工作量.在一定程度上破坏了类的信息隐蔽性和封装性因此.类的封装性给测试带来了很大困难。
2.3 继承性对测试的影响
继承是指父类的属性和操作可以通过实例化产生的子类和对象来实现继承性是面向对象程序的基本特性之一.是一种有效的程序复用方法然而.类的继承机制增加了软件测试的复杂性,同时也向测试用例设计者提出了新的挑战。即使是彻底复用的,对每个新的使用语境也需要重新测试此外.多重继承增加了需要测试语境的数量,从而使测试进一步复杂化。在面向对象的程序中,一个函数可能被封装在多个类中.子类不但继承了父类中的特征(数据和方法).还可以对继承的特征进行重定义Weyuker的非外延性公理认为若有两个功能相同而实现不同的程序,对其中一个是充分的测试数据集未必对另一个是充分的所以,继承并未简化测试问题.反而使测试更加复杂
2.4 多态性对测试的影响
多态性(Polymorphism)~-向对象方法的关键特性之一.同一消息可以根据发生消息的对象不同采取不同的处理方法.它使得系统在运行时能自动为给定的消息选择合适的实现代码.这给程序员提供了高度柔性、问题抽象和易于维护但多态性所带来的不确定性.也使得传统测试实践中的静态分析法遇到了不可逾越的障碍。与此同时还增加了系统运行中可能的执行路径.加大了测试用例的选取难度和数量这种不确定性和骤然增加的路径组合给测试覆盖率的满足带来了挑战多态性给软件测试带来的问题仍然是目前研究的重点及难点问题之一
3、面向对象的软件测试策略
3.1 扩大测试视角
在面向对象的程序设计中,由于相同的语义结构(如类、属性、操作和消息)出现在分析、设计和代码阶段。面向对象的分析和面向对象的设计模式提供了关于系统的结构和行为的实质性信息,所以应该重视面向对象分析和设计模式的复审如果问题在分析阶段及设计阶段未被检测到.则将传送到编码中.要花费大量的精力和时间去实现一个不必要(有问题)的属性、不必要的操
作、驱动对象问通信的消息及其他相关的代码.然后再花费更多的精力去发现它,还必须对系统进行相关的修改.而修改有可能导致更多的潜在问题因此,面向对象的软件测试应扩大测试的视角.包括分析与设计模型测试、类测试、对象交互测试、类层次结构测试、面向对象系统测试五大部分
3.2 划分测试层次
软件测试层次是基于测试复杂性分解的思想.是软件测试的一种基本模式。传统层次测试基于功能模块的层次结构.而在面向对象软件测试中.继承和组装关系刻画了类之间的内在层次.它们既是构造系统结构的基础.也是构造测试结构的基础。对于传统程序设计语言书写的软件.测试分为3个级别的测试:
单元测试、集成测试和系统测试。面向对象软件测试的动态测试工作过程与传统的测试一样.分为制定测试计划、产生测试用例、执行测试和评价几个阶段。在测试的具体内容上。从面向对象软件的结构出发。可以将面向对象软件测试分为三个层次:类测试、集成测试和系统测试面向对象的测试层次与传统软件测试层次的对应关系。
3.3 面向对象测试技术策略
3.3.1 面向对象的类测试策略
类测试就是验证类的实现是否和该类的规格说明完全一致一类测试和传统的单元测试大体相似.但和单元测试不同,类测试除了要测试类中包含的方法.还要测试类的状态。在面向对象系统中.系统的基本构造模块是封装了的数据和方法的类和对象.每个对象有自己的生存周期、自己的状态。消息是对象之问相互请求或协作的途径.是外界使用对象方法及获取对象状态的唯一方式对象的功能是在消息的触发下,由对象所属类中定义的方法与相关对象的合作共同完成。在工作过程中对象的状态可能被改变.产生新的状态。测试过程中不能仅仅检查输入数据产生的输出结果是否与预期的吻合.还要考虑对象的状态。类测试是整个测试过程的一个重要步骤,它与传统测试方法的区别可用测试按顺序可分为三个部分:1)基于服务的测试:测试类中的每一个方法:2)基于状态的测试:测试类的实例在其生命周期各个状态下的情况:3)基于响应状态的测试:从类和对象的责任出发.以外界向对象发送的消息序列来测试对象的各个响应状态。目前有很多类的测试方法,如:基于状态图的测试、基于宁列图的测试、基于活动图的测试、基于协作图的测试、基于状态模式的测试等都是针对上述测试的某一个部分。
3.3.2 集成测试策略
如前所述。面向对象软件测试分为类测试、集成测试和系统测试三个层次。其中,集成测试作为重要环节,贯穿于面向对象软件构造过程的始终。面向对象软件的集成测试有两种不同的策略,一种是基于线程的测试,另一种是基于使用的测试。基于线程的测试:集成一组相互协作以对于某输入或事件作出回应的类。每个线程被集成并被分别测试.应用回归测试以保证没有产生副作用。基于使用的测试:通过测试那些不适用的服务器的类(称为独立类)而开始构造系统。在独立测试完成后,下一层的使用独立的类(称为依赖类)被测试.依赖类层次的测试序列一直持续到构造完整个系统
3.3.3 类间多态性测试策略