1、n面向对象影响测试n面向对象测试模型n面向对象分析测试n面向对象设计测试n面向对象单元测试n面向对象集成测试n面向对象系统测试面向对象影响测试 对象、类作为构成面向对象程序的基本元素,封装了数据及作用在数据上的操作,父类中定义共享的公共特征,子类继承父类所有特征外,并引入新的特征,使得类和类之间通过继承组成有向无圈图结构。面向对象技术都封装、继承、多态和动态绑定等特性一方面提高了软件开发效率,保证了软件都质量,但另一方面也给软件测试提出了新的问题,增加了测试的难度和复杂性。封装性影响测试 面向对象软件中,对象行为是被动的,在接受到相关外部信息后才被激活,对象的状态可能发生变化而进入新的状态。由
2、于信息隐蔽与封装机制,类的内部属性和状态对外界是不可见的,只能通过类自身的方法获得,这给类测试时测试用例执行是否处于预期状态的判断带来困难。继承性影响测试 在面向对象程序中,继承由扩展、覆盖和特例化三种基本机制实现。其中扩展是子类包含父类的特征;覆盖是子类的方法与父类的方法有相同的名字和消息参数,但其实现的方法不同;特例化是子类中特有的方法和实例变量。继承有利于代码的复用,但同时也使错误传播概率提高。多态性影响测试 多态性是将多种不同的特殊行为进行抽象的一种能力,对于同样的消息被不同类型的对象接收时导致完全不同的行为,使得面向对象程序对外呈现出强大的处理能力,但同时却使得程序内“同一”函数的行
3、为复杂化,多态促成了子类型替换。一方面,子类型替换使对象的状态难以确定。如果一个对象包含了A类型的对象变量,则A类型的所有子类型的对象也允许赋给该变量。程序运行过程中,该变量可能引用不同类型的对象,其结构不断变化。另一方面,子类型替换使得向父类对象发送的消息也允许向子类对象发送。面向对象测试模型 OOA Test是面向对象分析测试;OOD Test指面向对象设计测试,OOA Test和OOD Test 主要对分析设计文档进行,是软件开发前期的关键性测试。OOP Test是面向对象编程测试,主要针对编程风格和程序代码进行测试。OO Unit Test是指面向对象单元测试,对程序单元的功能模块测试
4、;OO Integrate Test是指面向对象集成测试,主要对系统单元模块之间的相互服务进行测试,如成员函数间的相互作用,类之间的消息传递等;OO System Test是指面向对象系统测试,主要以系统的需求规格说明为测试标准。面向对象分析测试 面向对象分析测试分为五个方面n对认定的对象的测试n对认定的结构的测试n对认定的主题的测试n对定义的属性和实例关联的测试n对定义的服务和消息关联的测试。对象测试 n认定的对象是否全面,是否问题空间中所有的实例都反映在认定的抽象对象中。n认定的对象是否具有多个属性。将只有唯一一个属性的对象作为其他对象的属性处理,而不是抽象为独立的对象。n对认定为同一对象
5、的实例是否有共同的,区别于其他实例的共同属性。n对认定为同一对象的实例是否提供相同的服务,如果服务随着不同的实例而变化,认定的对象就需要分解或利用继承性来分类表示。n系统没有必要始终保持对象代表的实例信息,提供或者得到关于它的服务,认定的对象也无必要。n认定的对象的名称应该尽量准确,适用。结构测试 结构是多种对象的组织方式,用来反映问题空间中的复杂实例和复杂关系。认定的结构分为两种:分类结构和组装结构。其中,分类结构体现了问题空间中实例的一般与特殊关系,组装结构体现了问题空间中实例整体与局部的关系。主题测试 n贯彻George Miller 的“7+2”原则,如果主题个数超过7个,就要对相关密
6、切的主题进行归并。n主题所反映的一组对象和结构是否具有相同和相近的属性和服务。n认定的主题是否是对象和结构更高层的抽象,是否便于理解OOA。n主题间的消息联系是否代表了主题所反映的对象和结构之间的所有关联。属性和实例关联测试 n定义的属性是否对相应的对象和分类结构的每个实例都适用。n定义的属性在现实世界是否与这种实例关系密切。n定义的属性在问题空间是否与这种实例关系密切。n定义的属性是否能够不依赖于其他属性被独立理解n定义的属性在分类结构中的位置是否恰当,低层对象的共有属性是否在上层对象属性体现。n在问题空间中每个对象的属性是否定义完整。n定义的实例关联是否符合现实。n在问题空间中实例关联是否
7、定义完整,特别需要注意一对多和多对多的实例关联。服务和消息关联测试 n对象和结构在问题空间的不同状态是否定义了相应的服务。n对象或结构所需要的服务是否都定义了相应的消息关联。n定义的消息关联所指引的服务提供是否正确n沿着消息关联执行的线程是否合理,是否符合现实过程。n定义的服务是否重复,是否定义了能够得到的服务。面向对象设计测试 面向对象设计采用“造型的观点”,是以OOA为基础归纳出类,建立类结构,实现分析结果对问题空间的抽象,设计类的服务。由此可见,OOD是OOA的进一步细化和抽象,其界限通常难以严格区分。OOD确定类和类结构不仅是满足当前需求分析的要求,更重要的是通过重新组合或加以适当的补
8、充,实现功能的重用和扩增。n对认定的类的测试n对构造的类层次结构的测试n对类库的支持的测试对认定类测试 n是否涵盖了OOA中所有认定的对象。n是否能体现OOA中定义的属性。n是否能实现OOA中定义的服务。n是否对应着一个含义明确的数据抽象。n是否尽可能少的依赖其他类。对类层次结构测试 n类层次结构是否含盖了所有定义的类。n是否能体现OOA中所定义的实例关联。n是否能实现OOA中所定义的消息关联。n子类是否具有父类没有的新特性。n子类间的共同特性是否完全在父类中得以体现。对类库支持测试 n一组子类中关于某种含义相同或基本相同的操作,是否有相同的接口。n类中方法功能是否较单纯,相应的代码行是否较少
9、,一般建议为不超过30行。n类的层次结构是否是深度大,宽度小。面向对象软件测试过程以层次增量的方式进行。首先对类的函数进行测试;然后,对类进行测试;再次,将多个类集成为类簇或子系统进行集成测试;最后,进行系统测试。其中,面向对象单元测试针对类中的成员函数以及成员函数间的交互进行测试;面向对象集成测试主要对系统内部的相互服务进行测试,如类之间的消息传递等;面向对象系统测试是基于面向对象集成测试的最后阶段的测试,主要以用户需求为测试标准。面向对象单元测试 类测试有两种主要的方式:功能性测试和结构性测试。功能性测试和结构性测试分别对应传统测试的黑盒测试和白盒测试。测试类的方法,对方法调用关系进行测试
10、。测试每个方法的所有输入情况,并对这些方法之间的接口进行测试。对类的构造函数参数以及消息序列进行选择保证其在状态集合下正常工作。因此,对类的测试分成如下两个层次:方法内测试和方法间测试。方法内测试n方法内测试作为第一个层次,考虑类中单独方法,这个层次的测试等效于传统程序中单个过程的测试,传统测试技术,如黑盒测试方法:等价类划分、边界值分析和错误推测等以及白盒测试方法:逻辑覆盖方法仍是测试类中每个方法的主要手段。n 面向对象软件中方法的执行是通过消息驱动执行的。测试类中的方法,必须用驱动模块对被测方法通过发送消息来驱动执行,被测试模块或者方法调用其他模块或方法,则需要设计一个模拟被调程序功能的桩
11、模块。驱动模块、桩模块及被测模块组成测试环境。方法间测试n方法间测试作为第二个层次,考虑类中方法之间的相互作用,对方法进行综合测试。单独测试一个方法时,只考虑其本身执行的情况,而没有考虑方法的协作关系。方法间测试考虑一个方法调用本类中的其他方法,或其他类的方法。n类的操作被封装在类中,对象之间通过发送消息启动操作,对象作为一个多入口模块,必须考虑测试方法的不同次序组合的情况,当一个类中方法的数目较多时,次序的组合数目将非常多。对于操作的次序组合以及动作的顺序问题,测试用例中加入了激发调用信息,检查它们是否正确运行。对于同一类中方法之间的调用,遍历类的所有主要状态。同时,选出最可能发现属性和操作
12、错误的情况,重点进行测试。测试用例设计和选择Berard提出测试用例的设计方法,关于设计合适的操作序列以测试类的状态,主要原则包括:(1)对每个测试用例应当给予特殊的标识,并且还应当与测试的类有明确的联系(2)测试目的应当明确(3)应当为每个测试用例开发一个测试步骤列表,列表包含内容 1)列出所要测试对象的说明 2)列出将要作为测试结果的消息和操作 3)列出测试对象可能发生的例外情况 4)列出外部条件,为了正确对软件进行测试所必须有的外部环境的变化 5)列出为了帮助理解和实现测试所需要的附加信息面向对象集成测试 传统面向过程的软件模块具有层次性,模块之间存在着控制关系。而面向对象的软件,其功能
13、散布在不同类中,通过消息传递,提供服务,没有一个层次的控制结构,构成类的各个部件之间存在直接和非直接交互,软件的控制流无法确定,从而传统软件自顶向下和自底向上的组装策略意义不大,采用传统的将操作组装到类中的增殖式组装常常行不通。集成测试关注于系统的结构和类之间的相互作用,测试步骤一般首先进行静态测试,然后进行动态测试。静态测试主要针对程序的结构进行,检测程序结构是否符合设计要求,采用逆向工程测试工具得到类的关系图和函数关系图,与面向对象设计规格说明比较检测程序结构和实现上是否有缺陷,是否符合需求设计。动态测试根据功能结构图、类关系图或者实体关系图,确定不需要被重复测试的部分,通过覆盖标准减少测
14、试工作量。覆盖标准有如下几类:(1)达到类所有的服务要求或服务提供的覆盖率。(2)依据类之间传递的消息,达到对所有执行线程的覆盖率。(3)达到类的所有状态的覆盖率。面向对象交互测试面向对象软件中类分为原始类和非原始类。原始类是最简单的组件,其数目较少。非原始类是指在某些操作中支持或需要使用其他对象的类。根据非原始类与其他实例交互的程度,非原始类分为汇集类和协作类。下面具体介绍汇集类和协作类测试。(1)汇集类 汇集类是指有些类的说明中使用对象,但是实际上从不和这些对象进行协作。编译器和开发环境的类库通常包含汇集类。例如,C+的模板库、列表、堆栈、队列和映射等管理对象。汇集类具有如下行为:1)存放
15、这些对象的引用 2)创建这些对象的实例 3)删除这些对象的实例 (2)协作类凡不是汇集类的非原始类就是协作类。协作类是指在一个或多个操作中使用其它的对象并将其作为实现中不可缺少的一部分。协作类测试的复杂性远远高于汇集类的测试,协作类测试必须在参与交互的类的环境中进行测试,需要创建对象之间交互的环境。面向对象系统测试n系统测试着眼于用户的需求,测试软件与系统其他部分配套运行情况,保证系统各部分在协调的环境下正常工作。n系统测试参照面向对象分析模型,测试组件序列中的对象、属性和服务。组件是由若干类构建,首先实施接受测试。接受测试将组件放在应用环境中,检查类的说明,采用极值甚至不正确数值进行测试。其次,组件的后续测试顺着主类的线索进行。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。