,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第11 章 面向对象的测试,1面向对象测试的特点,2面向对象的测试策略,测试阶段的制品,参加测试的人员职责,测试步骤,第11 章 面向对象的测试1面向对象测试的特点,1,11.1 面向对象测试的特点,面向对象测试的主要目的用尽可能低的测试成本和尽可能少的测试方案发现尽可能多的错误。,典型的面向对象程序具有继承、封装和多态的新特性,这使得传统的测试策略必须有所改变。,封装是对数据的隐藏,外界只能通过被提供的操作来访问或修改数据,这样降低了数据被任意修改和读写的可能性,降低了传统程序中对数据非法操作的测试。,11.1 面向对象测试的特点面向对象测试的主要目的用尽可能低,2,面向对象测试的特点,继承是面向对象程序的重要特点,继承使得代码的重用率提高,同时也使错误传播的概率提高。,多态使得面向对象程序对外呈现出强大的处理能力,但同时却使得程序内同一函数的行为复杂化,测试时不得不考虑不同类型具体执行的代码和产生的行为。,面向对象测试的特点继承是面向对象程序的重要特点,继承使得代码,3,11.2面向对象的测试策略,传统的测试从单元测试开始,然后逐步进入集成测试,最后是有效性和系统测试。单元测试集中在最小的可编译程序单位子程序,一旦这些单元均被独立测试后,它被集成在程序结构中,这时要进行一系列的回归测试,以发现由于模块的接口所带来的错误和新单元加入所导致的副作用。,最后,系统被作为一个整体测试以保证发现在需求中的错误。,11.2面向对象的测试策略传统的测试从单元测试开始,然后逐,4,面向对象程序,面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已成为不可能。,而且,面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。,因此,传统的测试模型对面向对象软件已经不再适用,面向对象程序面向对象程序的结构不再是传统的功能模块结构,作为,5,认定的对象,OOA中认定的对象是对问题空间中的结构,其他系统,设备,被记忆的事件,系统涉及的人员等实际实例的抽象。,对它的测试可以从如下方面考虑:,认定的对象OOA中认定的对象是对问题空间中的结构,其他系统,,6,认定的对象,1.认定的对象是否全面,是否问题空间中所有涉及到的实例都反映在认定的抽象对象中。2.认定的对象是否具有多个属性。只有一个属性的对象通常应看成其他对象的属性,而不是抽象为独立的对象。,认定的对象1.认定的对象是否全面,是否问题空间中所有涉及到的,7,认定的对象,3.对认定为同一对象的实例是否有共同的,区别于其他实例的共同属性。是否提供或需要相同的服务,如果服务随着不同的实例而变化,认定的对象就需要分解或利用继承性来分类表示。,4.如果对象之间存在比较复杂的关系,应该检查它们之间的关系描述是否正确,例如,一般与特殊关系、整体与局部关系等。,认定的对象3.对认定为同一对象的实例是否有共同的,区别于其他,8,类层次结构,为能充分发挥面向对象的继承共享特性,OOD的类层次结构,通常基于OOA中产生的分类结构的原则来组织,着重体现父类和子类间一般性和特殊性。,在当前的问题空间,对类层次结构的主要要求是能在解空间构造实现全部功能的结构框架。为此,测试如下方面:,类层次结构为能充分发挥面向对象的继承共享特性,OOD的类层次,9,类层次结构,类层次结构是否含盖了所有分析阶段定义的类。,是否能体现面向对象分析中所定义的实例关联、消息传递关系,子类是否具有父类没有的新特性。,子类间的共同特性是否完全在父类中得以体现。,类层次结构类层次结构是否含盖了所有分析阶段定义的类。,10,类层次结构,面向对象软件,单元的概念发生了变化。,封装驱动了类和对象的定义,这意味着每个类和类的实例(对象)包装了属性(数据)和操纵这些数据的操作。而不是个体的模块。最小的可测试单位是封装的类或对象,类包含一组不同的操作,并且某特殊操作可能作为一组不同类的一部分存在,因此,单元测试的意义发生了较大变化。,我们不再孤立地测试单个操作,而是将操作作为类的一部分。,类层次结构面向对象软件,单元的概念发生了变化。,11,集成策略,对OO软件的集成测试有两种不同策略,,第一种称为基于线程的测试,集成对回应系统的一个输入或事件所需的一组类,每个线程被集成并分别测试,应用回归测试以保证没有产生副作用。,第二种称为基于使用的测试,通过测试那些几乎不使用服务器类的类(称为独立类)而开始构造系统,在独立类测试完成后,下一层的使用独立类的类,称为依赖类,被测试。这个依赖类层次的测试序列一直持续到构造完整个系统。,集成策略对OO软件的集成测试有两种不同策略,,12,有效性测试,和传统的确认测试一样,面向对象软件的有效性集中在用户可见的动作和用户可识别的系统输出,通过测试检验软件是否满足用户的需求。,在此可采用传统的黑盒测试方式,以证明软件功能和需求的一致性。,有效性测试和传统的确认测试一样,面向对象软件的有效性集中在用,13,11.3 测试阶段的制品,11.3 测试阶段的制品,14,