软件测试面向对象测试技术

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

六 、面向对象的单元测试
传统的单元测试是针对程序的函数、过程或完成 某一定功能的程序块。沿用单元测试的概念,实际测 试类成员函数。一些传统的测试方法在面向对象的单 元测试中都可以使用。如等价类划分法,因果图法, 边值分析法,逻辑覆盖法,路径分析法,来自百度文库等,单元 测试一般建议由程序员完成。
六 、面向对象的单元测试
三、面向对象分析和设计的测试
对认定的结构的测试 认定的结构指的是多种对象的组织方式,用来反映问题空 间中的复杂实例和复杂关系。认定的分类结构测试要 点: 处于高层的对象,是否在问题空间中含有不同于下一 层对象的特殊可能性,即是否能派生出下一层对象。 处于同一低层的对象,是否能抽象出在现实中有意义 的更一般的上层对象。 对所有认定的对象,是否能在问题空间内向上层抽象 出在现实中有意义的对象。 高层的对象的特性是否完全体现下层的共性,低层的 对象是否有高层特性基础上的特殊性。
一、面向对象测试概述
面向对象特征 (1)对象唯一性 (2)分类性 (3)继承性 (4)多态性
一、面向对象测试概述
面向对象要素 (1)抽象 (2)封装 (3)共享
面向对象软件开发方法与传统的软件 开发方法的区别:
(1)调查、分析系统需求,建立一个全面、 合理、统一的模型。
(2)对象设计。
(3)程序实现。


三、面向对象分析和设计的测试
面向对象设计(OOD)采用“造型的观点”,以 OOA为基础归纳出类,并建立类结构或进一步构造成类 库,实现分析结果对问题空间的抽象。OOD 归纳的类, 可以是对象简单的延续,可以是不同对象的相同或相似的 服务。由此可见,OOD不是在OOA上的另一思维方式的 大动干戈,而是OOA的进一步细化和更高层的抽象。 面向对象设计(OOD)是以OOA归纳出的类为基础, 建立类结构甚至进一步构造成类库,实现分析结果对问题 空间的抽象。
面向对象软件开发过程
面向对象的开发模型突破了传统的瀑布模型, 将开发分为面向对象分析(OOA),面向对象设计 (OOD),和面向对象编程(OOP)三个阶段。 针对这种开发模型,结合传统的测试步骤的划 分,我们把面向对象的软件测试分为: 面向对象分析的测试,面向对象设计的测试,面向 对象编程的测试; 面向对象单元测试,面向对象集成测试,面向对象 系统测试。
OO Integrate Test OO Unit Test
OOA Test
OOA
OOD OOP Test Test
OOD OOP
二、面向对象模型
OOA Test和OOD Test:是对分析和设计结果的测试, 主要是对分析设计生成的文档进行,是软件开发前期 的关键性测试; OOP Test:主要针对编程风格和程序代码实现进行测试 看,其测试内容主要在面向对象单元和面向对象集成 测试中体现; OO Unit Test:对程序内部具体单一的功能模块的测试。 主要是对类的测试。 OO Integrate Test:主要对系统内部相互服务进行测 试,如方法间的相互作用,类间的消息传递等。 OO System Test:是面向对象测试的最后阶段的测试, 主要以用户需求为测试标准,借鉴OOA及其测试结 果。
三、面向对象分析和设计的测试
对构造的类层次结构的测试
为了能充分发挥面向对象继承共享特性,OOD(面向对象设计) 的类层次结构通常基于OOA中产生的分类结构的原则来组织, 着重体现父类和子类间的一般性和特殊性。在当前的问题空间, 对类层次结构的主要要求是能在解空间构造实现全部功能的结 构框架。为此测试要注意如下几个方面: 类层次结构是否涵盖了所有定义的类; 是否能体现OOA中所定义的实例关联、消息关联; 子类是否具有父类没有的新特性; 子类间的共同特性是否完全在父类中得以体现。
第八章 面向对象软件测试
一、面向对象测试概述
1. 传统的软件开发存在的问题 (1)软件重用性差 (2)软件可维护性差 (3)开发出的软件不易满足用户需求
一、面向对象测试概述
2、面向对象技术 基本概念 (1)对象 (2)对象的状态和行为 (3)类 (4)类的结构(类间关系) (5)消息和方法
一、面向对象测试概述
我们生活在一个对象的世界里,每个对象有一定的属性, 把属性相同的对象进行归纳就形成类 •例如:家具就可以看作类, 其主要的属性有价格、尺寸、 重量、位置和颜色等 •无论我们谈论桌子、椅子还是沙发、衣橱,这些属性总是 可用的,因为它们都是家具而继承了为类定义的所有属性。

•除了属性之外,每个对象可以被一系列不同的方式操纵,它 可以被买卖、移动、修改(如漆上不同的颜色)。 •这些操作或方法将改变对象的一个或多个属性。 •类的合法操作可以和对象的定义联系在一起,并且被类的所 有实例继承。
五、面向对象编程的测试
继承使得传统测试遇见了这样一个难题:对继承 的代码究竟应该怎样测试?多态使得面向对象程序对 外呈现出强大的处理能力,但同时却使得程序内“同 一”函数的行为复杂化,测试时不得不考虑不同类型 具体执行的代码和产生的行为。
面向对象程序是把功能的实现分布在类中。能 正确实现功能的类,通过消息传递来协同实现设计 要求的功能。正是这种面向对象程序风格,将出现 的错误能精确的确定在某一具体的类。因此,在面 向对象编程(OOP)阶段,忽略类功能实现的细则, 将测试的目光集中在类功能的实现和相应的面向对 象程序风格,主要体现为以下两个方面(假设编程 使用C++语言): ☆ 数据成员是否满足数据封装的要求 ☆ 类是否实现了要求的功能

面向对象的单元测试的对象是软件设计的最小单位—类。

单元测试的依据是详细设计,单元测试应对类中所有重 要的属性和方法设计测试用例,以发现类内部的错误。
单元测试多采用白盒测试技术,系统内多个类都可以并 行进行测试。沿用单元测试概念,实际测试类成员函数。 一些传统的测试方法在面向对象的单元测试中都可以使 用,如等价类划分、边界值分析、因果图、逻辑覆盖、 路径分析法等。

1、单元测试的内容
面向对象的单元就是类,单元测试实际测 试的就是对类的测试。类测试的目的主要确保 一个类的代码能够完全满足类的说明所描述的 要求。
2、单元测试开始的时间
单元测试开始的时间一般在完全说明了这 个类,并且准备对其编码后不久。单元测试开 始时要制定一个测试计划。
在反复迭代的过程中,类的实现和说明在 进程中可能会发生变化,所以应该在软件的其 他部件使用该类之前对类进行测试,同时还有 必要执行回归测试。
类层次的分割测试
这种测试可以减少用完全相同的方式检查类测试 用例的数目。这很像传统软件测试中的等价类划分测 试。分割测试又可分三种: 基于状态的分割,按类操作是否改变类的状态来分割 (归类); 基于属性的分割,按类操作所用到的属性来分割(归 类); 基于类型的分割,按完成的功能分割(归类)。



类测试按顺序分为以下三部分: 基于属性的测试:类中所有属性的设置和访问的测试。 基于服务的测试:测试类中的每个方法。 基于状态的测试:除了类的每个操作要进行测试,类 的行为也要进行测试,所有能引起状态变化的事件都 要模拟到。类的行为通常可用状态图来描述,在利用 状态图进行类测试时,可考虑覆盖所有状态、状态迁 移等覆盖标准,也可考虑从初始状态到终止状态的所 有迁移路径的覆盖。
面向对象测试
面向对象软件对每个开发阶段都有不同
以往的要求和结果,已经不可能用功能细化 的观点来检测面向对象分析和设计的结果。 针对面向对象软件的开发特点,应该有一种 新的测试模型。
二、面向对象模型
OO System Test OOA Test:面向对象分析 的测试, OOD Test:面向对象设计 的测试, OOP Test:面向对象编程 的测试; OO Unit Test:面向对象 单元测试, OO Integrate Test:面向 对象集成测试, OO System Test:面向对 象系统测试。
面向对象测试
在传统的面向过程程序中,对于函数 y=Function(x); 只需要考虑一个函数(Function())的行为特点, 在面向对象程序中,你不得不同时考虑基类函数 (Base::Function())的行为和继承类函数 (Derived::Function())的行为。 面向对象程序的结构不再是传统的功能模块结 构,作为一个整体,原有集成测试所要求的逐步将 开发的模块搭建在一起进行测试的方法已不可能。
对于继承过来的方法,也要加以测试。
运行测试用例的时候,必须提供能够实例化的 桩类,以及起驱动器作用的“主程序”类,来提供 和分析测试用例。
6、测试程度
可以根据已经测试了多少类的实现和多 少类的说明来衡量测试的充分性。通常需要 将这两者都考虑到,希望测试到操作和状态 转换的各种组合情况。一个对象能维持自己 的状态,而状态一般来说也会影响操作的含 义。
五、面向对象编程的测试
典型的面向对象程序具有继承、封装和多态的新 特性,这使得传统的测试策略必须有所改变。封装是 对数据的隐藏,外界只能通过被提供的操作来访问或 修改数据,这样降低了数据被任意修改和读写的可能 性,降低了传统程序中对数据非法操作的测试。继承 是面向对象程序的重要特点,继承使得代码的重用率 提高,同时也使错误传播的概率提高。
5、方法的测试
在测试类的功能实现时,应该首先保证类成员 函数的正确性。 测试时主要考虑封装在类中的一个方法对数据 进行的操作,可以采用传统的模块测试方法,通过 向所在对象发消息来执行,它的执行与状态有关。 传统的针对模块的设计测试用例的技术,如等 价划分、边界值分析、因果图、逻辑覆盖、路径覆 盖等方法,仍然可以作为测试类中每个方法的主要 技术。
三、面向对象分析和设计的测试
对认定的对象的测试 OOA(面向对象分析)中认定的对象是对问题空间中的 结构、其他系统、设备、被记忆的事件、系统涉及的人 员等实际实例的抽象。对它的测试可以从如下方面考虑: 认定的对象是否全面,其名称应该尽量准确、适用,是 否问题空间中所涉及到的实例都反映在认定的抽象对象 中。 认定的对象是否具有多个属性。只有一个属性的对象通 常应看作其他对象的属性而不是抽象为独立的对象 对认定为同一对象的实例是否有共同的、区别于其他实 例的共同属性,是否提供或需要相同的服务 如果系统没有必要始终保持对象代表的实例信息,提供 或者得到关于它的服务,认定的对象也无必要。
在面向对象的系统中的方法,是通过消息 来驱动执行的,要测试类中的方法,必须用一 个驱动程序对被测方法发送一条消息以驱动其 执行,如果被测模块或方法中调用了其他模块 或方法,则需要设计一个模拟被调子程序功能 的存根程序,驱动程序、存根程序及被测模块 或方法组成一个独立的可执行单元。
在面向对象软件中,在保证单个方法功能正确 的基础上,还应该处理好测试方法之间的协助关系。 为了提高方法的重用性,设计方法的一个准则 是提高方法的内聚,即在一个方法中只完成单个功 能。
3、单元测试的人员
由另一个类的开发人员编写测试计划,由 该类的开发人员完成测试,避免对类说明的错 误理解
4、单元测试方法
单元测试的方法有代码检查和执行测试用 例。在某些情况下,用代码检查代替基于执行 的测试方法是可行的,但是,代码检查也存在 以下两个不利之处:

代码检查容易受人为因素影响
代码检查在回归测试方面明显需要更多的工作 量
二、面向对象模型
OOA:将问题空间中实现的功能进行抽象,问 题空间中的实例抽象为对象,用对象的结构反 映问题空间的复杂关系,用属性和服务表示实 例的特殊性和行为 OOD:建立类结构或进一步构造类库,实现分 析结果对问题空间的抽象。 OOP:软件的计算机实现。
三、面向对象分析和设计的测试

OOA Test和OOD Test:是对分析和设计结果的测试, 主要是对分析设计生成的文档进行,是软件开发前期 的关键性测试; OOA直接映射问题空间,全面地在问题空间中实现 功能的现实抽象化。OOA必须回答: (1)为完成用户要求,系统应提供哪些功能 (2)系统应由哪些对象构成 (3)每个对象应有哪些属性和服务 (4)对象间应有怎样的联系
相关文档
最新文档