【笔记】面向对象软件的测试

面向对象软件的测试

面向对象的基本概念
面向对象的软件开发以对象、类、封装、继承、多态、消息和接口为核心。
1对象
对象是一个可操作的实体,是由保存对象属性的特性的数据和操作这些数据的操作封装在一起构成的整体。对象是一个基本的可计算的实体,对象之间通过消息机制相互发生作用。
对象是测试的最直接的目标,对象是否符合需求说明、对象与对象正之间是否能进行协同工作,是测试的焦点。程序运行时,每个对象都将经理创建、访问、修改和删除4个过程,这4个过程称为对象的生命周期。针对对象进行测试,应从多方面测试对象的状态是否与其生命周期相符。
2类
类是具有相同或相似性质的对象抽象的集合。因此,对象的抽象就是累,类的具体化就是对象,也可以说类的实例就是对象。类通过构造函数来创造新的对象,并对新的对象进行初始化,因此在对类进行测试时,需要考虑对象初始化过程是否正确。
3封装
封装就是把对象的属性和方法结合成一个整体,尽可能掩盖其内部的细节。封装后的对象,只能知道输入和输出,无法了解内部的操作过程,也无法真正了解内部数据真实状态。这一特征简化了对对象的使用,同时也给测试带来了难度。
4继承
继承是类之间的一种联系,类开通过派生生成新类,派生出的新类称为子类。通过继承机制,子类可以继承父类的特点和功能,同时还可以具有自己独有的特点和功能。这一特征为缺陷的扩散提供了途径,如果父类带有缺陷,派生出的子类也会带有缺陷,这会对后面的开发带来隐患。
5多态
多态提供了将对象堪称是一种或多种类型的能力。多态包含几种不同的形式,参数多态、包含多态和过载多态。参数多态是能够根据一个或多个参数来定义一种类型的能力;包含多态是同一个类具有不同表现形式的一种现象,这一特征使得参数具有对象替换的能力。多态性增强了软件的灵活性和重用性,同时也使得测试的工作量成倍增加。
6消息
消息是对象的操作将要执行的请求,是对象之间产生相互作用的方式。消息包含一些参数,在程序执行时,参数值可以由消息的发送者发送给接收者,也可以通过接受者返回给发送者,因此在测试时,需要考虑在消息处理前和处理后,传递的参数能够被修改,对象的状态是否正确。
7接口
接口是行为声明的集合,由一些规范构成,这些规范定义了类的一套完整的公共行为。接口不是孤立的,它与类和其他的接口有一定的关系。因此,在测试时,需要考虑接口包含的行为与类的行为是否相符

面向对象的开发方法
面向过程的开发方法:程序=算法+数据
面向对象的开发方法:程序=对象+消息
传统软件开发的问题,重用性、可维护性、稳定性差

面向对象的分析和设计
面向对象的分析:是采用面向对象思路进行需求分析建模的工程。也就是以需求分析为基础,来选择对象和类的过程。
步骤:1获取功能需求 2根据功能和参与者确定系统的类和对象 3确定类的结构层次、属性和方法 4建造对象模型
分析原则:
1抽象 强调把数据(属性)和操作(服务)结合为一个不可分的整体(对象)
2封装 隐蔽对象内部细节
3继承 要求是在每个由一般类和特殊类形成的一般—特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和服务,一次性地在一般类中进行定义
4分类 把具有相同属性和服务的对象划分为一类,用类作为这些对象的抽象描述
5聚合 这一原则的要求是把一个复杂事物合成若干比较简单的事物的组成体,从而简化对复杂事物的描述
6关联 将各个对象联系起来
7消息通信 不允许在对象之外直接地存取对象内部的属性
8粒度控制 注意其大的组成部分,暂时不详查每一部分的具体细节
9行为分析 大量的事物所构成的问题域中各行为的依赖、交织情况

面向对象的设计:分为系统设计和对象设计
系统设计过程:1系统分解 2确定并发性 3设计人机交互子系统 4设计任务管理子系统 5设计数据管理子系统(1数据存储管理模式;2设计数据管理子系统)
对象设计过程:1单一职责原则 2开闭原则 3替换原则 4依赖倒置原则 5接口分离原则

面向对象模型
对象模型:表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述的,表现了对象的相互关系。
1对象和类(属性是对象的数值;操作是类中对象所使用的一中功能或变换;方法是类的操作的实现步骤) 2关联和链(关联是链的抽象,链是关联的实例) 3类的层次结构(聚集关系和一般关系,一般化类称为父类,具体类称为子类)
动态模型:与时间和变化有关的系统性质。
1事件 2状态 3状态图
功能模型:由多装数据流图组成,不包含控制信息,也不表示对象中值的组织。
1处理(改变数值) 2数据流(处理输入输出) 3动作对象 4数据存储对象
功能模型指明了系统应该“做什么”;动态模型明确规定了什么时候(即在何种状态下)接受了什么时间的触发;对象模型则定义了做事情的实体


面向对象软件的测试策略
在面向对象软件的开发中,不管采用什么方法,使用什么模型,归根到底都是对类的开发,也就是说面向对象程序的基本构成单元是类,所以面向对象测试就是对类的测试。从面向对象的结构层次出发,可以将面向对象测试分为三个层次:类测试、集成测试和系统测试。
1类测试策略
面向对象的类测试,相当于面向过程的单元测试。类测试主要进行结构测试和功能测试,包括三个部分
①基于服务的测试。主要考察封装在类中的一个方法对数据进行的操作,该部分的测试多来用传统的白盒测试方法
②基于状态的测试。类是通过消息的传递来实现彼此之间交互的,在接收和发出消息的时候,类都会出现相应的状态,根据这些状态,进行逐个的测试,并设计出项应的测试用例。常用的基于状态的类测试方法有分片测、所有转换测试、状态标识测试等
③基于相应状态的测试。从类和对象的责任出发,以对象接收消息时发出的相应为基础进行的测试
2集成测试策略
面向对象的集成测试,就是将在类测试中通过的单个类,以一定的规则组装起来以后,进行整体功能的测试。集成测试步骤应包含以下内容
①按照设计阶段的说明画出对象图
②开发端口输入时间所驱动的类
③开发与主类直接相关的类
④将于主类直接相关的类
⑤对新集成的模块进行测试
⑥从已集成的模块中选一个新类作为下一步的集成类
3系统集成策略
系统测试是从用户的角度去评估一个软件,因此,程序内部的设计和实现的细节在这个层次已不再重要,而是以软件的实际功能需求为依据,对整个软件系统进行全面测试

面向对象的测试模型
1面向对象分析的测试
是对需求分析和对类、对象和结构的设计,在确定需求分析以后,会形成面向对象的分析文档,因此,该阶段的测试主要是针对文档的测试,其考虑的方法包括:
①对认定的对象的测试;②对认定的结构的测试;③对认定的主题的测试;④对定义的属性和实例关联的测试;⑤对定义的服务和消息关联的测试
2面向对象设计的测试
主要工作是对面向对象分析阶段归纳出的类和结构进行详细的设计,从而构造出类库,实现分析结果对问题空间抽象。设计时相对于分析更高层的抽象。也会形成设计文档,同样是对文档的测试,其考虑的方法包括:
①对认定的类的测试;②对构造的类层次结构的测试;③对类库的支持的测试。
3面向对象编程的测试
能正确实现功能的类,通过消息传递来协同实现设计要求。需要忽略类功能实现的细则,将测试的目光集中在类功能的实现和相应的面向对象程序风格上,其考虑的方法包括:
①数据成员是否满足数据封装的要求
②类是否实现了要求的功能

面向对象的单元测试
面向对象软件的设计和开发,实质就是对类的设计和分开发。因为面向对象软件的功能的实现,是由类通过消息传递来完成的。因此,面向对象的单元测试,实际就是对类的测试。类测试的内容包括:基于服务的测试、基于状态的测试、基于相应状态的测试。

基于服务的类测试技术
主要考察封装在类中的方法对数目进行的操作。它可以采用传统的白盒测试方法,如基路径法、插桩法、排错法等。 可以采用Kung提出的快分支图法

基于状态的类测试技术(???)
主要思想是考察类的实例在生命周期各个状态下的情况,以外界向对象发送特定消息序列的方法类测试对象的相应状态。通过构造OSD模型来进行类的状态测试。

测试驱动的实现和代码的组织
测试驱动的实现方式
本质是通过创建被测类实例和测试这些实例的行为来测试类,常见的测试驱动设计方法:
1利用main函数 2嵌入静态方法 3设计独立测试类
测试代码的组织
1与开发代码放在一起 2与开发原代码放在同一目录下 3与开发原代码并行 4与产品副本放在一起

面向对象的集成测试和系统测试
面向对象软件的集成测试
1策略
①基于线程的测试:集成对响应系统的一个输入或时间所需的一组类,每个线程分别进行集成和测试,引用回归测试以保证没有产生副作用。
②基于使用的测试:按分层来组装系统,可以先进行独立的测试,然后用测试过独立类对从属类进行测试,直到整个系统构造完成。
2过程
①静态测试:针对程序结构进行,检测程序结构是否符合设计要求。通过使用测试软件的可逆性工程功能,得出源程序的类系统图和函数功能调用关系图,与OOD(Object-oriented Design,面向对象设计)结果相比较,检测程序结构和实现上是否有缺陷,检测OOP(Object Oriented Programming,面向对象编程)是否达到了设计要求。
②动态测试
3设计集成测试用例的步骤
①选定检测的类,参考OOD分析结果,确定出类的状态和相应的行为
②确定覆盖标准,利用结构关系图确定待测定的所有关联
③根据程序中雷的队形构造测试用例,确认使用什么输入激发类的状态,使用类的服务和期望产生什么行为等,还要设计一些禁止的例子,确认类是否有不合法的行为产生

面向对象软件的系统测试
参考OOA(Object-Oriented Analysis,面向对象分析法)的结果,对应描述的对象、属性和各种服务。
1功能测试:以软件分析文档为标准,测试系统的功能是否达到要求,是否满足用户的需求
2强度测试:测试系统的负载情况和功能实现情况,比如信息系统能容纳多少人同时在线操作
3性能测试:与强度测试项结合,测试软件系统的运行性能。在测试前,用户一般会对软件系统的性能提出相应的指标,比如相应时限、传输速度、计算精度、出错率等。
4安全测试:验证安装在系统内的保护机构确实能够对系统进行保护
5恢复测试:采用人工干扰使软件出错,中断使用,检测系统的恢复能力
6可用性测试:测试用户是否能够满意使用,主要操作是否简便,操作界面是否符合使用习惯
7安装/卸载测试:测试用户是否能方便地安装和卸载

 

posted @ 2020-07-28 21:13  黑川凛  阅读(1350)  评论(0)    收藏  举报