📜  软件测试中的面向对象测试

📅  最后修改于: 2022-05-13 01:56:59.479000             🧑  作者: Mango

软件测试中的面向对象测试

先决条件 - 软件测试
软件通常会经历许多级别的测试,从单元测试到系统或验收测试。通常,单元内测试、软件的小“单元”或模块是单独测试的,重点是测试该模块的代码。在更高阶的测试(例如验收测试)中,测试整个系统(或子系统),重点是测试系统的功能或外部行为。

随着信息系统变得越来越复杂,面向对象范式因其在分析、设计和编码方面的优势而越来越受欢迎。由于测试类、抽象类、继承、动态绑定、消息、传递、多态、并发等问题,常规测试方法无法应用于测试类。
测试类是一个与测试函数根本不同的问题。函数(或过程)具有明确定义的输入输出行为,而类没有输入输出行为规范。我们可以使用测试函数的方法来测试一个类的方法,但是我们不能使用这些方法来测试这个类
方法。

根据戴维斯的说法,传统系统中发生的依赖性是:

  • 变量之间的数据依赖关系
  • 调用模块之间的依赖关系
  • 模块与其计算的变量之间的函数依赖关系
  • 变量及其类型之间的定义依赖关系。

但是在面向对象的系统中,还有以下额外的依赖:

  • 类到类依赖
  • 类到方法的依赖
  • 类到消息依赖项
  • 类到变量依赖项
  • 变量依赖的方法
  • 消息依赖的方法
  • 方法到方法的依赖关系

测试类中的问题:
因此,需要额外的测试技术来测试这些依赖关系。另一个有趣的问题是不能动态地测试类,只能测试它的实例,即对象。类似地,继承的概念引发了各种问题,例如,如果对父类或超类进行了更改,那么在更大的类系统中,将难以单独测试子类并将错误隔离到一个类。

在面向对象的程序中,控制流的特点是对象之间的消息传递,控制流通过对象间的通信从一个对象切换到另一个对象。因此,类似函数的类中没有控制流。类中缺少顺序控制流需要不同的测试方法。此外,在函数中,使用全局数据传递给函数的参数决定了过程中的执行路径。但是,在一个对象中,与该对象相关联的状态也会影响执行路径,并且类的方法可以通过这种状态在它们之间进行通信,因为这种状态在方法的调用中是持久的。因此,对于测试对象,对象的状态必须发挥重要作用。

面向对象测试的技术如下:

  1. 基于故障的测试:
    这种类型的检查允许提出支持消费者规范或代码或两者的测试用例。它试图识别可能的故障(可能导致错误的设计或代码区域)。对于所有这些错误,开发了一个测试用例来“清除”错误。这些测试还强制每次执行代码。

    这种测试方法不会发现所有类型的错误。但是,可能会遗漏不正确的规范和接口错误。这些类型的错误可以通过传统测试模型中的函数测试来发现。在面向对象的模型中,交互错误可以通过基于场景的测试来发现。这种形式的面向对象测试只能针对客户的规范进行测试,因此仍然会遗漏接口错误。

  2. 基于方法测试的类测试:
    这种方法是测试类的最简单方法。该类的每个方法都执行定义明确的内聚函数,因此可以与传统测试技术的单元测试相关。因此,一个类的所有方法都可以至少参与一次来测试该类。
  3. 随机测试:
    它通过开发一个随机测试序列来支持,该序列尝试对类别行为典型的最小操作种类
  4. 分区测试:
    该方法对一个类别的输入和输出进行分类,以便对其进行严格检查。这最大限度地减少了必须设计的案例数量。
  5. 基于场景的测试:
    它主要涉及捕获用户动作,然后在整个测试过程中刺激他们做出类似的动作。
    这些测试倾向于寻找错误的交互形式。