技术开发 频道

面向对象的软件测试技术

    5.   面向对象软件的集成测试

    (1) 传统的自顶向下或自底向上的集成测试策略在面向对象软件的集成测试中无意义,OO软件的集成测试需要在整个程序编译完成后进行,面向对象程序具有动态特性,程序的控制流无法确定,只能对编译完成的程序做基于黑盒子的集成测试

    (2) 面向对象软件的集成测试两种策略

    基于线程的测试(Thread based testing):集成对响应系统的一个输入或事件所需的一组类,每个线程分别进行集成和测试,应用回归测试以保证没有产生副作用。

    基于使用的测试(Use based testing):通过测试那些几乎不使用服务器类的的类(独立类)而开始构造系统,在独立类测试完成后,下一层中使用独立类的类(依赖类)被测试,这个依赖类层次的测试序列一直持续到构造完整个系统。

(3) 测试目的

      能够检测出相对独立的,单元测试无法检测出的,那些类相互作用时才会产生的错误,只关注于系统的结构和内部的相互作用

(4) 面向对象软件的集成测试过程
   
    第一步:静态测试  针对程序的结构进行,检测程序结构是否符合设计要求。通过使用测试软件的‘可逆性工程’功能,得出源程序的类系统图和函数功能调用关系图,与OOD结果相比较,检测程序结构和实现上是否有缺陷,检测OOP是否达到了设计要求

    第二步:动态测试 根据静态测试得出的函数功能调用关系图或类关系图作为参考,按照如下步骤设计测试用例,达到如下测试覆盖标准

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

    覆盖标准:达到类所有的服务要求或服务提供的一定覆盖率;依据类间传递的消息,达到对所有执行线程的一定覆盖率;达到类的所有状态的一定覆盖率等

    六.   面向对象软件的确认和系统测试

    (1) 系统测试:需要测试它与系统其他部分配套运行的表现,以确保在系统各部分协调工作的环境下软件也能正常运行

    (2) 要求:测试环境尽量与用户实际使用环境相同,保证被测系统的完整性,对暂时没有的系统设备部件,应采取相应的模拟手段。参考OOA分析结果,检测软件是否能够完全‘再现’问题空间

    (3) 不仅是检测软件的整体行为表现,另一方面对软件设计开发的确认。OO软件的确认和系统测试具体的测试内容与传统的系统测试基本相同,包括:功能测试,强度测试,性能测试,安全测试,易用性测试,恢复测试,安装/卸载测试


    三.OO软件测试用例设计原则(Berard)

    关注于设计合适的操作序列以测试类的状态

    1.    对每个测试用例应当给予特殊的标识,并且还应当与测试的类有明确的联系

    2.    测试目的应当明确

    3.    应当为每个测试用例开发一个测试步骤列表,列表包含内容

    l        列出所要测试对象的说明

    l        列出将要作为测试结果的消息和操作

    l        列出测试对象可能发生的例外情况

    l        列出外部条件,为了正确对软件进行测试所必须有的外部环境的变化

    l        列出为了帮助理解和实现测试所需要的附加信息

    四.OO软件测试的方法

    1.      基于故障的测试

    (1) 具有较高的发现可能故障的能力

    (2) 从分析模型开始,考察可能发生的故障,设计用例去执行设计和代码

    (3) 可用于集成测试,发现消息联系中‘可能的故障’(可能的故障指意料之外的结果、错误地使用了操作/消息、不正确地引用等)

    (4) 除用于操作测试外,还可用于属性测试,用以确定其对于不同类型的对象行为是否赋予了正确的属性值

    (5) 是从客户对象(主动)上发现错误

    (6) 不能发现的错误:不正确的规格说明,用户不需要的功能或缺少用户需要的功能;没有考虑子系统间的交互作用

    2.      基于场景的测试

    (1) 主要关注用户需要做什么,不是产品能做什么,即从用户任务(使用用例)中找出用户要做什么及如何去执行

    (2) 有助于在一个单元测试情况下检查多重系统,比基于故障的测试更实际,更复杂一点

    3.      OO类的随机测试

    如果一个类有多个操作(功能),这些操作(功能)序列有多种排列,这种不变化的操作序列可随机产生,用这种可随机排列来检查不同类实例的生存史,称为随机测试

    4.      类层次的分割测试

    (1) 可以减少用完全相同的方式检查类测试用例的数目,类似于等价类划分

    (2) 分类:基于状态的分割、基于属性的分割、基于类型的分割

    l        基于状态的分割:按类操作是否会改变类的状态进行分割(归类)

    l        基于属性的分割:按类操作所得到的属性来分割(归类)

    l        基于类型的分割:按完成的功能分割(分类),如初始操作、计算操作、查询操作

    5.      由行为模型(状态、活动、顺序和合作图)导出的测试

    状态转换图(STD)可以用来帮助导出类的动态行为的测试序列,以及这些类与之合作的类的动态行为测试用例,根据状态转换图,设计出最小测试用例,加入其他测试序列到最小测试序列中,保证类所有行为被充分检查

    总结:

    本章主要讲述了面向对象软件的测试方法,依据面向对象软件开发模型划分面向对象测试模型,其中单元测试、集成测试、确认测试和系统测试通过与传统的单元测试、集成测试和确认测试、系统测试进行比较,得出面向对象软件的测试内容

0
相关文章