软件测试第5章面向对象软件的测试.ppt

上传人:公**** 文档编号:568710523 上传时间:2024-07-26 格式:PPT 页数:56 大小:5.69MB
返回 下载 相关 举报
软件测试第5章面向对象软件的测试.ppt_第1页
第1页 / 共56页
软件测试第5章面向对象软件的测试.ppt_第2页
第2页 / 共56页
软件测试第5章面向对象软件的测试.ppt_第3页
第3页 / 共56页
软件测试第5章面向对象软件的测试.ppt_第4页
第4页 / 共56页
软件测试第5章面向对象软件的测试.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《软件测试第5章面向对象软件的测试.ppt》由会员分享,可在线阅读,更多相关《软件测试第5章面向对象软件的测试.ppt(56页珍藏版)》请在金锄头文库上搜索。

1、软软件件测测试试教教程程第5章面向对象软件的测试教授内容教授内容面向对象的测试概述面向对象的测试概述5.15.1面向面向对象的象的单元元测试5.25.2面向面向对象的集成象的集成测试和系和系统测试5.35.35.1面向对象的测试概述1对象对象对象是一个可操作的实体,是由特定的数据(属性)和操作封装在一起对象是一个可操作的实体,是由特定的数据(属性)和操作封装在一起的整体,对象之间通过消息机制相互发生作用。的整体,对象之间通过消息机制相互发生作用。对象是测试的最直接目标,对象是否符合需求说明、对象与对象之间是对象是测试的最直接目标,对象是否符合需求说明、对象与对象之间是否能进行协同工作,是我们否

2、能进行协同工作,是我们测试的焦点测试的焦点。程序运行时,每个对象都将历经创建、访问、修改和删除程序运行时,每个对象都将历经创建、访问、修改和删除4个过程,这个过程,这4个过程称为对象的生命周期。针对对象进行测试,应从多方面个过程称为对象的生命周期。针对对象进行测试,应从多方面测试对测试对象的状态是否与其生命周期相符象的状态是否与其生命周期相符。5.1.1面向对象的基本概念面向对象的基本概念2类类类是具有相同或相似性质的对象的抽象集合。因此,对类是具有相同或相似性质的对象的抽象集合。因此,对象的抽象就是类,类的具体化就是对象,也可以说类的实例象的抽象就是类,类的具体化就是对象,也可以说类的实例是

3、对象。类通过构造函数来创造新的对象,并对新的对象进是对象。类通过构造函数来创造新的对象,并对新的对象进行初始化,因此行初始化,因此在对类进行测试时,需要考虑对象初始化过在对类进行测试时,需要考虑对象初始化过程是否正确程是否正确。3封装封装封装就是把对象的属性和方法结合成一个整体,尽可能封装就是把对象的属性和方法结合成一个整体,尽可能掩盖其内部的细节。封装后的对象,只能知道输入和输出,掩盖其内部的细节。封装后的对象,只能知道输入和输出,无法了解内部的操作过程无法了解内部的操作过程,也无法真正了解内部数据的真实,也无法真正了解内部数据的真实状态。这一特征简化了对对象的使用,同时也给测试带来了状态。

4、这一特征简化了对对象的使用,同时也给测试带来了难度。难度。4继承继承继承是类之间的一种联系,类可以通过派生生成新类,继承是类之间的一种联系,类可以通过派生生成新类,派生出的新类称为子类。通过继承机制,子类可以继承父类派生出的新类称为子类。通过继承机制,子类可以继承父类的特点和功能,同时还可以具有自己独有的特点和功能。这的特点和功能,同时还可以具有自己独有的特点和功能。这一特征一特征为缺陷的扩散提供了途径为缺陷的扩散提供了途径,如果父类带有缺陷,派生,如果父类带有缺陷,派生出的子类也会带有缺陷,这会对后面的开发带来隐患。出的子类也会带有缺陷,这会对后面的开发带来隐患。5多态多态多态提供了将对象堪

5、称是一种或多种类型的能力。多态多态提供了将对象堪称是一种或多种类型的能力。多态包含几种不同的形式,参数多态、包含多态和过载多态。参包含几种不同的形式,参数多态、包含多态和过载多态。参数多态是能够根据一个或多个参数来定义一种类型的能力;数多态是能够根据一个或多个参数来定义一种类型的能力;包含多态是同一个类具有不同表现形式的一种现象,这一特包含多态是同一个类具有不同表现形式的一种现象,这一特征使得参数具有对象替换的能力。多态性增强了软件的灵活征使得参数具有对象替换的能力。多态性增强了软件的灵活性和重用性,同时也性和重用性,同时也使得测试的工作量成倍增加使得测试的工作量成倍增加。学生学生姓名姓名年龄

6、年龄研究生研究生导师导师研究方向研究方向本科生本科生班级班级专业专业人员人员姓名姓名年龄年龄研究生研究生导师导师研究方向研究方向职工职工部门部门职务职务在职研究生在职研究生运输工具运输工具轮船轮船车辆车辆飞机飞机卡车卡车轿车轿车继承:继承:多继承:多继承:继承层次:继承层次:6消息消息消息是对象的操作将要执行的请求,是对象之间产生相消息是对象的操作将要执行的请求,是对象之间产生相互作用的方式。消息包含一些参数,在程序执行时,参数值互作用的方式。消息包含一些参数,在程序执行时,参数值可以由消息的发送者发送给接收者,也可以通过接收者返回可以由消息的发送者发送给接收者,也可以通过接收者返回给发送者,

7、因此在测试时,需要给发送者,因此在测试时,需要考虑在消息处理前和处理后,考虑在消息处理前和处理后,传递的参数能否被修改,对象的状态是否正确传递的参数能否被修改,对象的状态是否正确。7接口接口接口是行为声明的集合,由一些规范构成,这些规范定接口是行为声明的集合,由一些规范构成,这些规范定义了类的一套完成的公共行为。接口不是孤立的,它与类和义了类的一套完成的公共行为。接口不是孤立的,它与类和其他接口有一定的关系。因此,在测试时,需要其他接口有一定的关系。因此,在测试时,需要考虑接口包考虑接口包含的行为与类的行为是否相符含的行为与类的行为是否相符。5.1.2面向对象的开发方法传传统统的的面面向向过过

8、程程的的开开发发方方法法是是以以过过程程为为中中心心,以以算算法法为为驱驱动动,因因此此,面面向向过过程程的的编编程程语语言言是是程程序序=算算法法+数数据据;面面向向对对象象的的开开发发方方法法是是以以对对象象为为中中心心,以以消消息息为为驱驱动动,因因此此,面面向向对对象象的的编编程程语语言言是是程程序序=对对象象+消消息息。下下面面将将对对传传统统开开发发方方法法开开发的软件存在的问题做出讨论发的软件存在的问题做出讨论1软件的重用性软件的重用性重用性是指同一事物不经修改或稍加修改就可多次重复重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。传统的面向过程方法所开发的软件,其重用

9、性使用的性质。传统的面向过程方法所开发的软件,其重用性很差,模块与模块之间均是强耦合性,很难拆分和扩展。很差,模块与模块之间均是强耦合性,很难拆分和扩展。2软件的可维护性软件的可维护性在软件的开发过程中,软件的可读性、可修改性和可测在软件的开发过程中,软件的可读性、可修改性和可测试性是软件的重要指标。由于传统的面向过程的开发方法开试性是软件的重要指标。由于传统的面向过程的开发方法开发的软件,各功能模块均是强耦合性,如果修改了其中一个发的软件,各功能模块均是强耦合性,如果修改了其中一个模块的算法或参数,会导致其他的模块功能瘫痪,也就是说模块的算法或参数,会导致其他的模块功能瘫痪,也就是说传统方法

10、开发出来的软件可修改性很差,这就直接导致了软传统方法开发出来的软件可修改性很差,这就直接导致了软件的维护费用和成本很高。件的维护费用和成本很高。3软件的稳定性软件的稳定性软件的稳定性主要表现在是否能满足客户的需求上,如软件的稳定性主要表现在是否能满足客户的需求上,如果能满足客户的需求,软件的结构就不需要更改,软件就比果能满足客户的需求,软件的结构就不需要更改,软件就比较稳定;反之,如果不能满足客户的需求,软件的结构就需较稳定;反之,如果不能满足客户的需求,软件的结构就需要发生较大的变化,软件就不稳定。而传统的开发方法是基要发生较大的变化,软件就不稳定。而传统的开发方法是基于过程来设计的,客户的

11、需求则是针对功能的,一旦功能的于过程来设计的,客户的需求则是针对功能的,一旦功能的需求发生了变化,对传统方法的设计就是灾难性的。需求发生了变化,对传统方法的设计就是灾难性的。面向对象的软件开发可分为面向对象的分析面向对象的软件开发可分为面向对象的分析(ObjectOrientedAnalysis,OOA)、面)、面向对象的设计(向对象的设计(ObjectOrientedDesign,OOD)和面向对象的编程()和面向对象的编程(ObjectOrientedProgamming,OOP)三部分,后)三部分,后面将对这些分析和设计、模型进行讨论。面将对这些分析和设计、模型进行讨论。1面向对象的分析

12、面向对象的分析面向对象的分析是采用面向对象思路进行需求分析建面向对象的分析是采用面向对象思路进行需求分析建模的工程,也就是以需求分析为基础,来模的工程,也就是以需求分析为基础,来选择对象和类选择对象和类的过的过程。分析的步骤包括以下几点:程。分析的步骤包括以下几点:(1)获取功能需求)获取功能需求(2)根据功能需求确定系统的类和对象)根据功能需求确定系统的类和对象(3)确定类的结构层次、属性和方法)确定类的结构层次、属性和方法(4)建造对象模型:为对象建立联系)建造对象模型:为对象建立联系总的来说,面向对象分析的关键是识别出系统功能中的总的来说,面向对象分析的关键是识别出系统功能中的对象,并分

13、析它们之间的关系,最终建立起简洁、精确、可对象,并分析它们之间的关系,最终建立起简洁、精确、可理解的正确模型。理解的正确模型。5.1.3面向对象的分析和设计面向对象的分析和设计面向对象分析的主要原则如下:面向对象分析的主要原则如下:(1)抽象:数据抽象)抽象:数据抽象(2)封装)封装(3)继承:共同具有的属性和服务)继承:共同具有的属性和服务(4)分类:用类作为对象的抽象描述。)分类:用类作为对象的抽象描述。(5)聚合)聚合(6)关联:将各个对象联系起来)关联:将各个对象联系起来(7)消息通信:对象之间只能通过消息进行通信)消息通信:对象之间只能通过消息进行通信(8)粒度控制)粒度控制(9)行

14、为分析:各行为的依赖、交织情况。)行为分析:各行为的依赖、交织情况。2面向对象的设计面向对象的设计 面向对象的设计(面向对象的设计(Object Oriented Design,OOD),是根据),是根据OOA中确中确定的类和对象,设计软件系统,以作为定的类和对象,设计软件系统,以作为OOP的基础。整个设计过程分的基础。整个设计过程分为为系统设计和对象设计系统设计和对象设计。系统设计过程包括:系统设计过程包括:(1)系统分解:需求模型的补充或修改)系统分解:需求模型的补充或修改(2)确定并发性:确定哪些对象是并发的)确定并发性:确定哪些对象是并发的(3)设计人机交互子系统:准则)设计人机交互子

15、系统:准则(4)设计任务管理子系统:要确定各类任务并把任务分配给)设计任务管理子系统:要确定各类任务并把任务分配给相应的硬件或软件去执行。相应的硬件或软件去执行。(5)设计数据管理子系统)设计数据管理子系统面向对象的设计,其核心就是对类的设计面向对象的设计,其核心就是对类的设计。该如何设计。该如何设计类,应该遵循相应的设计原则:类,应该遵循相应的设计原则:(1)单一职责原则)单一职责原则(2)开闭原则)开闭原则(3)替换原则)替换原则(4)依赖倒置原则)依赖倒置原则(5)接口分离原则)接口分离原则模型是对实体的特征和变化规律的一种表示或抽象,模型是对实体的特征和变化规律的一种表示或抽象,有三种

16、常用模型,对象模型、动态模型和功能模型:有三种常用模型,对象模型、动态模型和功能模型:功能功能模型指出发生了什么,动态模型确定什么时候发生,而对模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体象模型确定发生的客体。1对象模型对象模型对象模型表示静态的、结构化的系统对象模型表示静态的、结构化的系统数据数据性质,描述性质,描述系统的静态结构,表现对象的相互系统的静态结构,表现对象的相互关系关系。在该模型中包括。在该模型中包括以下几个方面的元素:以下几个方面的元素:(1)对象和类)对象和类(2)关联和链:关联是链的抽象,链是关联的实例。)关联和链:关联是链的抽象,链是关联的实例

17、。(3)类的层次结构:聚集是一种)类的层次结构:聚集是一种“整体部分整体部分”关系;关系;一般是一般是“一般一般具体具体”的关系。的关系。5.1.4面向对象模型面向对象模型图 描绘教材结构的聚集树图 一家公司的对象模型图 与上图对应的ER图2动态模型动态模型动态模型是与动态模型是与时间和变化时间和变化有关的系统性质。该模型描有关的系统性质。该模型描述系统的控制结构,表示瞬间的、行为化的系统控制。述系统的控制结构,表示瞬间的、行为化的系统控制。该模型描述的系统属性是触发事件、事件序列、状态、该模型描述的系统属性是触发事件、事件序列、状态、事件与状态的组织。该模型包括以下几个方面的元素:事件与状态

18、的组织。该模型包括以下几个方面的元素:(1)事件:指定时刻发生的某件事。)事件:指定时刻发生的某件事。(2)状态:是对象属性值的抽象,指明对象对输入事件的)状态:是对象属性值的抽象,指明对象对输入事件的响应。响应。(3)状态图状态图:反映状态与事件的关系。:反映状态与事件的关系。3功能模型功能模型功能模型表明如何从输入值得到输出值,由多张功能模型表明如何从输入值得到输出值,由多张数据流数据流图图组成。数据流图表示从源对象到目标对象的数据值的流向,组成。数据流图表示从源对象到目标对象的数据值的流向,包含以下几个元素:包含以下几个元素:(1)处理:用来改变数据值)处理:用来改变数据值(2)数据流:

19、将对象的输出与处理、处理与对象的输入、)数据流:将对象的输出与处理、处理与对象的输入、处理与处理联系起来。处理与处理联系起来。(3)动作对象:通过生成或者使用数据值来驱动数据流图。)动作对象:通过生成或者使用数据值来驱动数据流图。(4)数据存储对象:它用来存储数据)数据存储对象:它用来存储数据用户用户读入读入输入输入账目账目完成完成服务服务现金卡现金卡卡号及密码卡号及密码产生产生输出输出这三种模型分别从三个不同的方面对所要开发的系统这三种模型分别从三个不同的方面对所要开发的系统进行了描述,功能模型指明了系统应该进行了描述,功能模型指明了系统应该“做什么做什么”;动态;动态模型明确规定了什么时候

20、(即在何种状态下)接受了什么模型明确规定了什么时候(即在何种状态下)接受了什么事件的触发;对象模型则定义了做事情的实体。因此在面事件的触发;对象模型则定义了做事情的实体。因此在面向对象方法学中,对象模型是最基本最重要的,它为其他向对象方法学中,对象模型是最基本最重要的,它为其他两种模型奠定了基础。我们依靠对象模型完成三种模型的两种模型奠定了基础。我们依靠对象模型完成三种模型的集成。集成。面向对象程序的基本面向对象程序的基本构成单元是类构成单元是类,所以面向对象的测,所以面向对象的测试就是对类的测试。从面向对象的结构层次出发,可将面向试就是对类的测试。从面向对象的结构层次出发,可将面向对象测试分

21、为三个层次:对象测试分为三个层次:类测试、集成测试和系统测试类测试、集成测试和系统测试。(1)类测试策略策略类测试主要主要进行行结构构测试和功能和功能测试,包括三个部分:,包括三个部分:基于服基于服务的的测试基于状基于状态的的测试基于响基于响应状状态的的测试5.1.5面向对象软件的测试策略(2)集成测试策略)集成测试策略将在类测试中通过的单个类,以一定的规则组装起来,进行将在类测试中通过的单个类,以一定的规则组装起来,进行整体功能的测试。集成测试步骤应包含以下内容:整体功能的测试。集成测试步骤应包含以下内容:按照设计阶段的说明画出对象图;按照设计阶段的说明画出对象图;开发端口输入事件所驱动的类

22、;开发端口输入事件所驱动的类;开发与主类直接相关的类;开发与主类直接相关的类;将与主类直接相关联的类集成;将与主类直接相关联的类集成;对新集成的模块进行测试;对新集成的模块进行测试;从未集成的模块中选一个新类作为下一步的集成类。从未集成的模块中选一个新类作为下一步的集成类。(3)系统集成策略:以软件的实际功能需求为依据,对整)系统集成策略:以软件的实际功能需求为依据,对整个软件系统进行全方面测试。个软件系统进行全方面测试。5.1.6面向对象的测试模型面向对象的测试模型面向对象的软件测试分为:面向对象分析的测试(面向对象的软件测试分为:面向对象分析的测试(OOAT)、面向)、面向对象设计的测试(

23、对象设计的测试(OODT)、面向对象编程的测试()、面向对象编程的测试(OOPT)。)。(1)面向对象分析的测试)面向对象分析的测试面向对象分析阶段的主要工作是需求分析和对类、对象和对结构的面向对象分析阶段的主要工作是需求分析和对类、对象和对结构的设计,在确定需求分析以后,会形成面向对象的分析文档,因此,设计,在确定需求分析以后,会形成面向对象的分析文档,因此,该该阶段的测试主要是针对文档的测试阶段的测试主要是针对文档的测试,其考虑的方面包括:,其考虑的方面包括:对认定的对象的测试;对认定的对象的测试;对认定的结构的测试;对认定的结构的测试;对认定的主题的测试;对认定的主题的测试;对定义的属性

24、和实例关联的测试;对定义的属性和实例关联的测试;对定义的服务和消息关联的测试。对定义的服务和消息关联的测试。(2)面向对象设计的测试)面向对象设计的测试面向对象设计阶段的主要工作是对面向对象分析阶段归纳出的类和结面向对象设计阶段的主要工作是对面向对象分析阶段归纳出的类和结构进行详细的设计,从而构造成类库,实现分析结果对问题空间的抽象。构进行详细的设计,从而构造成类库,实现分析结果对问题空间的抽象。由此可见,面向对象设计是对面向对象分析的进一步细化和更高层的抽由此可见,面向对象设计是对面向对象分析的进一步细化和更高层的抽象。在设计完成以后,同样会形成面向对象的设计文档。因此,象。在设计完成以后,

25、同样会形成面向对象的设计文档。因此,该阶该阶段的测试同样是针对文档的测试段的测试同样是针对文档的测试,其考虑的方面包括:,其考虑的方面包括:对认定的类的测试;对认定的类的测试;对构造的类层次结构的测试;对构造的类层次结构的测试;对类库的支持的测试。对类库的支持的测试。(3)面向对象编程的测试)面向对象编程的测试面向对象程序是通过对类的操作来实现软件功能的。更确切地说,面向对象程序是通过对类的操作来实现软件功能的。更确切地说,是能正确实现功能的类,通过消息传递来协同实现设计要求。因此,是能正确实现功能的类,通过消息传递来协同实现设计要求。因此,在面向对象编程的测试中,需要我们忽略类功能实现的细则

26、,将测试在面向对象编程的测试中,需要我们忽略类功能实现的细则,将测试的目光集中在的目光集中在类功能的实现和相应的面向对象程序风格类功能的实现和相应的面向对象程序风格上,上,其考虑的方面包括:其考虑的方面包括:数据成员是否满足数据封装的要求;数据成员是否满足数据封装的要求;类是否实现了要求的功能。类是否实现了要求的功能。5.2面向对象的单元测试面向对象的单元测试5.2.1基于服务的类测试技术基于服务的类测试技术基于服务的类测试主要考察封装在类中的一个方法对数基于服务的类测试主要考察封装在类中的一个方法对数据进行的操作。它可以采用传统的据进行的操作。它可以采用传统的黑黑白盒测试方法,如:基白盒测试

27、方法,如:基路径法、插桩法、边界值法、排错法、等价类法等。但为克路径法、插桩法、边界值法、排错法、等价类法等。但为克服软件测试的盲目性和局限性,保证测试的质量,提高软件服软件测试的盲目性和局限性,保证测试的质量,提高软件的可靠性,我们提出采用的可靠性,我们提出采用Kung提出的提出的块分支图法块分支图法。1基于服务的类测试策略基于服务的类测试策略2测试实例一测试实例一设计一个类设计一个类Rectangle,要求如下,要求如下:(1)类中的私有变量存放)类中的私有变量存放Rectangle的长和宽,并且的长和宽,并且设置它们的默认值为设置它们的默认值为1;(2)通过成员函数设置其长和宽,并确保长

28、和宽都在)通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内;)范围之内;(3)求周长)求周长Perimeter。 通通过过构构造造BBD图图,从从基基于于基基本本路路径径测测试试的的结结构构测测试试出出发发对对类类CRectangle中中Set服服务务进进行行测测试试,查查找找语语句句覆覆盖盖和和分分支支覆覆盖盖错错误误。基基本本路路径径测测试试主主要要是是根根据据软软件件过过程程描描述述中中的的控控制制流流程程确确定定复复杂杂度度,定定义义基基本本路路径径集集合合,从从而而设设计计测测试试用用例例。设设计计出出的的测测试试用用例例要要保保证证在在测测试试中中程程序序的的每每一一

29、个个可可执执行行语语句句至至少少执行一次,其具体步骤如下。执行一次,其具体步骤如下。(2 2)确定基本路径集)确定基本路径集)确定基本路径集)确定基本路径集基本路径集要确保程序中每个可执行语句至少执行一次。基本路径集要确保程序中每个可执行语句至少执行一次。一组独立的路径是:一组独立的路径是:path1:-;path2:-;path3:-。(3 3)生成测试用例)生成测试用例)生成测试用例)生成测试用例根据判断给出的条件,选择适当的数据以保证每一条基本根据判断给出的条件,选择适当的数据以保证每一条基本路径均被测试到。只要设计出的测试用例能够保证这些路路径均被测试到。只要设计出的测试用例能够保证这

30、些路径的执行,就可以使得程序中的每个可执行语句至少执行径的执行,就可以使得程序中的每个可执行语句至少执行一次,每个条件的分支也能得到测试。一次,每个条件的分支也能得到测试。5.2.2基于状态的类测试技术1基于状态的类测试策略基于状态的类测试策略 状态测试的主要思想是考察类的实例在生命周期各个状态状态测试的主要思想是考察类的实例在生命周期各个状态下的情况,以外界向对象发送特定消息序列的方法来测试对下的情况,以外界向对象发送特定消息序列的方法来测试对象的响应状态。由于执行前对象状态的变化,可能会使同样象的响应状态。由于执行前对象状态的变化,可能会使同样的一个成员方法执行完全不同的功能,另外用户对对

31、象方法的一个成员方法执行完全不同的功能,另外用户对对象方法的调用又具有不确定性,所以使这部分的测试变得非常复杂,的调用又具有不确定性,所以使这部分的测试变得非常复杂,也超出了传统测试所覆盖的范围。因此,我们通过构造也超出了传统测试所覆盖的范围。因此,我们通过构造OSD模型模型来进行类的状态测试。来进行类的状态测试。 0SD(0bject State Diagram)模型即对象状态图模型,)模型即对象状态图模型,是用于是用于测试对象状态行为测试对象状态行为的测试模型,描述了对象在其生命的测试模型,描述了对象在其生命周期中的所有状态及其状态之间的相互转移。周期中的所有状态及其状态之间的相互转移。O

32、SD模型由若模型由若干个干个AOSD模型组成,模型组成,AOSD为一个四元组:为一个四元组:AOSD=(S,d,S,So),其中),其中S表示一个对象的状态集合;表示一个对象的状态集合;d表示字符集:表示字符集:S表示由对象状态可能产生的转移集;表示由对象状态可能产生的转移集;So表示起始状态。对表示起始状态。对象的一个状态是对象的数据属性的一个确定取值范围,相对象的一个状态是对象的数据属性的一个确定取值范围,相对此范围数据成员取真或假;转移表示状态的改变,每一个转此范围数据成员取真或假;转移表示状态的改变,每一个转移对应对象成员函数的执行。转移有条件转移、无条件转移移对应对象成员函数的执行。

33、转移有条件转移、无条件转移和交叉转移。对象的每一个数据成员对应一个和交叉转移。对象的每一个数据成员对应一个AOSD,每个,每个AOSD可有多个起始状态。构造可有多个起始状态。构造OSD模型的方法包括以下几模型的方法包括以下几个步骤。个步骤。(1 1)扫描源程序并得出执行分析表)扫描源程序并得出执行分析表)扫描源程序并得出执行分析表)扫描源程序并得出执行分析表执行分析表中的一行就表示对象中执行分析表中的一行就表示对象中一个成员方法的一个成员方法的一条执行路径一条执行路径,其中包括该路径执行所需的条件以及执,其中包括该路径执行所需的条件以及执行后的结果表达式。由于一个方法某一执行路径的结果行后的结

34、果表达式。由于一个方法某一执行路径的结果表达式可能有多个,全部列出的意义不大,仅列出引起表达式可能有多个,全部列出的意义不大,仅列出引起对象状态改变的表达式。如果没有该类表达式,则置为对象状态改变的表达式。如果没有该类表达式,则置为空。当遇到在某一执行条件下无任何语句执行的情况,空。当遇到在某一执行条件下无任何语句执行的情况,则分析表的结果表达式项注明则分析表的结果表达式项注明“不执行不执行”。借助每个成。借助每个成员方法已有的员方法已有的BBD模型能很容易地完成该步骤。模型能很容易地完成该步骤。(2)确定对象状态)确定对象状态分析执行分析表,列出状态变量的分析执行分析表,列出状态变量的所有可

35、能的状态及取值所有可能的状态及取值。(3)构造状态转移)构造状态转移规定规定Si为一个状态,它代表一个确定的取值范围,为一个状态,它代表一个确定的取值范围,Si(z)表示状态变量表示状态变量z在此取值范围内,在此取值范围内,PC表示一条路表示一条路径执行的条件通过下面的步骤构造转移。径执行的条件通过下面的步骤构造转移。(4)构造测试消息序列)构造测试消息序列通过对通过对0SD模型进行遍历,就能得到一个测试消息序列。模型进行遍历,就能得到一个测试消息序列。(5)生成测试用例)生成测试用例(1)扫描源程序得出带执行条件的执行分析表)扫描源程序得出带执行条件的执行分析表路路 径径执执 行行 条条 件

36、件结结果表达式果表达式adviceDelete()无无state=newadviceDelete(string no)无无state的所有状的所有状态态quickDelete()state=newstate=confirmedstate!=new不不执执行行applyDelete()state=newstate=unconfirmedstate=canceledstate=endstate!=new&canceled不不执执行行confirmDelete()state=unconfirmedstate=confirmedstate!=unconfirmed不不执执行行Delete()state

37、=confirmedstate=completestate!=confirmed不不执执行行cancelDelete()state!=completestate=canceledcompleteDelete()state=completestate=endstate!=complete不不执执行行2测试实例二测试实例二设计一个类设计一个类adviceDelete,实现建议的删除功能,实现建议的删除功能。(2)确定状态变量)确定状态变量根据表根据表5-1,可以得到,可以得到state所有的状态和取值,分别是:所有的状态和取值,分别是:S0(new)、S1(unconfirmed)、S2(conf

38、irmed),S3(completed)、S4(canceled)、S5(end)。(3)构造转移)构造转移图图5-5所示为类所示为类adviceDelete构造的构造的OSD模型。模型。(4 4)构造测试消息序列)构造测试消息序列)构造测试消息序列)构造测试消息序列根据每条测试消息序列,选择相应的数据进行测试。根据每条测试消息序列,选择相应的数据进行测试。5.2.3测试驱动的实现和代码的组织测试驱动的实现和代码的组织1测试驱动的实现方式测试驱动的实现方式 有了测试用例,还需要设计测试驱动程序,让测试用有了测试用例,还需要设计测试驱动程序,让测试用例例自动自动地执行。测试驱动的设计本质是通过地

39、执行。测试驱动的设计本质是通过创建被测类的创建被测类的实例和测试这些实例的行为实例和测试这些实例的行为来测试类,常见的测试驱动的来测试类,常见的测试驱动的设计方法有以下几种设计方法有以下几种:(1)利用)利用main函数函数 利用利用main函数方法实现测试驱动是一个最为简单的方函数方法实现测试驱动是一个最为简单的方式,直接将每个测试用例写入式,直接将每个测试用例写入main函数,测试结果直接输函数,测试结果直接输入屏幕。以入屏幕。以5.2.1的测试实例一为例,对类的测试实例一为例,对类Rectangle的测试,的测试,实际就是对该类实际就是对该类set服务的测试服务的测试。(2)嵌入静态方法

40、)嵌入静态方法在被测类中嵌入静态方法,在静态方法内部在被测类中嵌入静态方法,在静态方法内部实现测试用例的执行,然后调用该静态方法,将实现测试用例的执行,然后调用该静态方法,将测试结果输出到屏幕,仍以测试结果输出到屏幕,仍以5.2.1的测试实例一的测试实例一为例为例。(3)设计独立测试类)设计独立测试类将测试代码从开发代码中完全独立出来,通将测试代码从开发代码中完全独立出来,通过过独立的测试类独立的测试类处理被测类的实例化和方法,并处理被测类的实例化和方法,并对结果进行统计。以对结果进行统计。以5.2.1的测试实例一为例,的测试实例一为例,对类对类Rectangle中的中的set服务展开测试服务

41、展开测试。5.3面向对象的集成测试面向对象的集成测试和系统测试和系统测试5.3.1面向对象软件的集成测试面向对象软件的集成测试面向对象程序具有动态特性,程序的控制流无法确定,面向对象程序具有动态特性,程序的控制流无法确定,只能对编译完成的程序做只能对编译完成的程序做基于黑盒基于黑盒的集成测试。的集成测试。1面向对象软件的集成测试策略面向对象软件的集成测试策略(1)基于线程的测试)基于线程的测试集成对响应系统的一个输入或事件所需的一组类,每个集成对响应系统的一个输入或事件所需的一组类,每个线程分别进行集成和测试,应用回归测试以保证没有产生副线程分别进行集成和测试,应用回归测试以保证没有产生副作用

42、。作用。(2)基于使用的测试)基于使用的测试按分层来组装系统,可先进行独立类的测试,然后用测按分层来组装系统,可先进行独立类的测试,然后用测试过的独立类对从属类进行测试,直到整个系统构造完成。试过的独立类对从属类进行测试,直到整个系统构造完成。2 2面向对象软件的集成测试过程面向对象软件的集成测试过程面向对象软件的集成测试过程面向对象软件的集成测试过程(1)静态测试)静态测试:检测程序结构是否符合设计要求。检测程序结构是否符合设计要求。(2)动态测试)动态测试:设计测试用例,达到一定的测试覆盖标准。设计测试用例,达到一定的测试覆盖标准。3 3设计集成测试用例的步骤设计集成测试用例的步骤设计集成

43、测试用例的步骤设计集成测试用例的步骤(1)选定检测的类,参考)选定检测的类,参考OOD分析结果,确定出类的状态分析结果,确定出类的状态和相应的行为;和相应的行为;(2)确定覆盖标准,利用结构关系图确定待测类的所有关联)确定覆盖标准,利用结构关系图确定待测类的所有关联(3)根据程序中类的对象构造测试用例,确认使用什么输入)根据程序中类的对象构造测试用例,确认使用什么输入激发类的状态,使用类的服务和期望产生什么行为等,还要设激发类的状态,使用类的服务和期望产生什么行为等,还要设计一些类禁止的例子,确认类是否有不合法的行为产生。计一些类禁止的例子,确认类是否有不合法的行为产生。5.3.2面向对象软件

44、的系统测试面向对象的系统测试就是测试软件与系统其他部分配套运行的表现,面向对象的系统测试就是测试软件与系统其他部分配套运行的表现,以保证在系统各部分协调工作的环境下也能进行工作。系统测试不仅以保证在系统各部分协调工作的环境下也能进行工作。系统测试不仅是确认系统在实际运行时,它是否满足用户的需要,也是对软件开发是确认系统在实际运行时,它是否满足用户的需要,也是对软件开发设计的再确认。因此在进行系统测试,应该参考设计的再确认。因此在进行系统测试,应该参考OOA的结果,对应描的结果,对应描述的对象、属性和各种服务。其测试内容包括以下几述的对象、属性和各种服务。其测试内容包括以下几种:种:(1)功能测

45、试)功能测试以软件分析文档为标准,测试系统的功能是否达到要求,是否满足用户的需求。(2)强度测试)强度测试测试系统的负载情况和功能实现情况,比如信息系统能容纳多少人同时在线操作。(3)性能测试)性能测试与强度测试相结合,测试软件系统的运行性能。在测试前,用户一般会对软件系统的性能提出相应的指标,比如响应时限、传输速度、计算精度、出错率等。根据这些指标,对系统进行测试。(4)安全测试)安全测试验证安装在系统内的保护机构确实能够对系统进行保护。(5)恢复测试)恢复测试采用人工干扰使软件出错,中断使用,检测系统的恢复能力。(6)可用性测试)可用性测试测试用户是否能够满意使用,主要是指操作是否简便,操

46、作界面是否符合使用习惯。(7)安装)安装/卸载测试卸载测试测试用户是否能方便地安装和卸载。总的来说,面向对象的集成测试和系统测试都是基于面向对象的分析和设计进行的,在分析阶段总结出的用例图、状态图、顺序图、协作图和活动图都可以作为集成测试和系统测试的依据。本本章章小小结结 面向对象开发技术的出现,对软件测试带来前所未有的冲击。面向对象独有的特点,使得传统的测试技术不再适用。本章主要讨论面向对象开发的相关概念,面向对象测试的相关概念,并着重介绍了类测试技术和测试驱动的实现。习习题题 3基于服务的类测试技术的测试流程是什么?基于服务的类测试技术的测试流程是什么?4基于状态的类测试技术的测试流程是什么?基于状态的类测试技术的测试流程是什么?6测试驱动的实现方式有哪些?测试驱动的实现方式有哪些?

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号