资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,面向对象交互测试,涂星明,主要内容,13.1,对象交互测试基础,13.2,对象交互的测试,13.3,现成组件的测试,1,13.1,对象交互测试基础,13.1.1,对象交互的概念,13.1.2,对象交互的类型,13.1.3,对象交互测试的考虑,2,13.1.1,对象交互的概念,对象交互是一个对象,(,称为发送者对象,,sender),对另一个对象,(,称为接收者对象,,receiver),的请求,发送者对象请求接收者对象的一个操作,而接收者进行的所有处理工作就是完成这个请求。,3,对象交互的方式,1),在公共操作中将一个或多个类作为形参的类型。,2),公共操作的返回类型是一个或多个类类型。,3),一个类的方法创建了另一个类的实例,并将其作为实现的一部分。,4),类的方法引用了某个类的全局实例。,注意:多态性增加了与被测试的类进行交互的对象数量,4,13.1.2,对象交互的类型,根据非原始类与其他实例交互的程度,可以将非原始类分为:,(1),汇集类,指维护与其他类实例之间的关联但从来不和那些实例交互的类,仅是表现为以下行为:存放这些对象的引用,创建实例,删除实例,(2),协作类,指具有更广泛交互的在一个或多个操作中使用其它的对象并将其作为实现中不可缺少的一部分的类。,5,13.1.3,对象交互测试的考虑,一组对象间的交互非常复杂,对每个交互进行独立的测试还是将所有交互作为一个整体进行测试,即选择正确的“块”的大小,取决于三个因素:,区分那些与被测各对象有组成关系的对象和那些仅仅与被测对象有关联的对象。,聚合层数与缺陷的能见度有关,若“块”太大,会有不正确的中间结果。,对象越复杂,在一轮测试之前应该被集成的对象应该越少,6,13.2,对象交互的测试,13.2.1,汇集类的测试,13.2.2,协作类的测试,13.2.3,测试用例抽样,7,13.2.1,汇集类的测试,可以使用测试原始类的方法来测试汇集类。,测试汇集类时,测试驱动程序要创建一些实例,并传送给一个正在测试的集合,测试用例的中心目的是保证实例被正确地加入集合以及正确地从集合移出,测试时应估算集合的上限,测试系统应包含否定测试,应该用超过指定客量限制的测试例进行测试,令其抛出异常。,8,13.2.2,协作类的测试,测试协作器类时,复杂性远远高于原始类和汇集类的测试,需要与之相关联的每个类的一个或多个实例。,可以以,UML,时序图为指导,构建对象交互的测试用例。,9,基于时序图设计对象交互测试用例,1),将每个,UML,时序图中的消息作为节点,节点的内容包括该消息的元素,(,消息发送者,消息发送者的状态、相关参数值、消息接收者、消息接收者的状态、消息执行结果,),。,2),按照消息的执行顺序,构造消息序列结构图,3),根据形成的消息序列结构图,采用路径覆盖准则,设计相应的测试用例,每条从初始节点出发的完整路径就是一个消息序列的测试用例。,10,消息序列结构图,消息节点,2,消息节点,1,时序图,11,测试驱动程序,对测试用例片段开发相应的测试驱动程序的具体的工作是:,1),创建发送类对象,接收类,1,的对象,接收类,2,的对象。,2),按照,preState,置各对象的状态。,3),执行发送对象,1,操作。,4),检查各对象的状态是否符合,postState,。,注意,测试用例序列中的各测试用例片段需要作为一个整体的测试用例,来测试消息序列成功与否。,12,13.2.3,测试用例抽样,穷举测试法无疑是一种可靠的测试方法,但是通常由于测试用例的数目太多而不可能进行。,为此,需要选择测试用例,从而在最感兴趣的地方发现错误,两种测试用例抽样方法:,1.,基于概率分布的抽样方法,2.,特殊的抽样技术,正交阵列测试,(OATS),13,基于概率分布的抽样方法,总体:所有可能被执行的测试用例,包括所有前置条件和所有输入值可能的组合情况。,概率:可建立在用户的使用情况上,例如可按使用频率来给出概率,或统一分布。,样本:是基于某个概率分布选择的总体的子集,分层样本:是样本的一个集合,其中的每个样本代表一个特定的个体。,这样一个测试总体被分成若干子集,一个子集包含了针对某个特定内容的所有测试,可以在每个独立于其他子集的子集上进行抽样。,例如,将来自用例模型的使用者作为测试用例分层的基础,从每个使用者的用例中挑选出一个测试用例的抽样。,14,正交阵列测试,正交阵列测试系统,(Orthogonal Array Testing System,,,OATS),提供了一种特殊的抽样方法 通过定义一组交互对象的配对方式的组合,以尽力限制测试配置的组合数目的激增。,正交阵列是一个数值矩阵,每一列代表一个因素。在正交阵列测试中,它代表软件系统中一个特定的类族。每一个因素变量都可以取一组特定的值,称为级别,在正交阵列测试中,每一个级别就是类族中一个特定类,以及对应于这些类的一系列状态。,正交阵列中,各个因素组合成配对方式,例:,A,,,B,,,C,三种因素,各有,3,个级别,则有,27,种可能的组合情况,若限制每个级别只出现两次,则只有,9,种情况。,正交阵列中,每一行可看作测试用例。,15,标准的正交阵列,L,18,(2,1,3,7,),16,基于正交阵列确定测试用例步骤,1),确定所有的因素:发送类族,接收类族,消息中每个参数位置的类族,及每个类族的状态因素。,2),确定每个因素的级别数。,3),定位一个适合这个问题的标准正交阵列。,4),建立从每个因素到阵列中整数的映射,以便可以解释这个标准阵列。,5),基于映射和表中的行构建测试用例。,17,应用,OATS,的例子,18,应用,OATS,的例子,共,6,个因素:类,A,族,类,P,族,类,C,族及其状态因素。,每个因素的级别数:,类,A,族有,2,个级别,类,P,族有,1,个级别,类,C,族有,3,个级别,类,A,族的状态因素有,2+3,个级别,(,类,A,实例有,2,个状态,类,B,实例有,3,个状态,),类,P,族的状态因素有,2,个级别,(,类,P,实例有,2,个状态,),类,C,族的状态因素有,2+3+3,个级别,(,类,C,实例有,2,个状态,类,D,实例有,3,个状态,类,E,实例有,3,个状态,),选定标准正交阵列:,L,18,(2,1,3,7,),1,个因素包含,2,个级别,,7,个因素包含,3,个级别,最后两列(多余的列)未使用,19,因素阵列值映射,20,基于映射和表中的行构建测试用例,标准的正交阵列,L,18,(2,1,3,7,),中第,10,行解释为编号为,10,的测试用例,而在这个测试用例中,通过将处于状态,3,的类,P,的一个实例传送给处于状态,2,的类,E,的一个实例,处于状态,1,的类,B,的一个实例将要发送消息。,21,OATS,的充分性标准,OATS,的用途之一是能够改变被测试软件覆盖的完全程度,以下是一些可能用到的层次:,穷举性:考虑全部因素的所有可能的组合情况。,代价高,信任级高。,最小性:仅仅测试每个级别基类之间的交互。,测试用例少,信任级低。,随机性:测试人员随意根据几个类来选择测试用例。,信任级不清,测试用例数目任意。,代表性:统一的抽样,确保每个类都被测试到某种程度。,对各个类来说信任级相同,测试用例的数目减至最少。,加权代表性:把用例加入到具有代表性的方法中,以类的相对重要性或类相关联的风险性作为基础。,22,13.3,现成组件的测试,为了提高组件的质量,应该对新获得的组件实施接受测试,包括类测试和交互性测试。,接受测试应该将组件放在使用它的环境中进行,测试用例应该彻底地检查类说明的限制。,在组件测试时,更倾向于使用极值甚至是不正确的值来进行接受测试。,测试时,通常以组件的主类为基础,顺着这个类的线索展开测试。,23,本章总结,讨论了:,13.1,对象交互测试基础,13.2,对象交互的测试,13.3,现成组件的测试,24,习题,1.,什么是对象交互,?,对象交互的类型有哪些,?,2.,什么是对象交互测试,?,对象交互测试需要考虑什么问题,?,3.,什么是汇集类,?,什么是协作类,?,怎样测试汇集类和协作类,?,4.,结合以下类图,使用正交阵列测试,(OATS),的方法来选择交互测试用例,并说明其中的测试用例。说明:类,A,有两个状态,类,D,有两个状态,类,B,有一个状态,类,C,有两个状态。,25,
展开阅读全文