白盒测试——什么是、技术、示例和类型

白盒测试

白盒测试是一种测试技术,旨在测试软件的内部结构、设计和编码,以验证输入输出流并改进设计、可用性和安全性。在白盒测试中,代码对测试人员可见,因此它也被称为透明盒测试、开放盒测试、透视盒测试、基于代码的测试和玻璃盒测试。

它是软件测试中盒子测试方法学的两部分之一。其对应部分黑盒测试涉及从外部或最终用户的角度进行测试。另一方面,软件工程中的白盒测试基于应用程序的内部工作原理,围绕内部测试进行。

“白盒”这个术语的使用是源于“透视盒”的概念。透明盒或白盒的名称象征着能够透过软件的外壳(或“盒子”)看到其内部工作原理。同样,“黑盒测试”中的“黑盒”象征着无法看到软件的内部工作原理,因此只能测试最终用户体验。

白盒测试视频

如果视频无法访问,请点击此处

白盒测试中验证什么?

白盒测试涉及对软件代码进行以下方面的测试

  • 内部安全漏洞
  • 编码过程中损坏或结构不良的路径
  • 特定输入在代码中的流向
  • 预期输出
  • 条件循环的功能
  • 对每个语句、对象和函数进行单独测试

测试可以在软件开发的系统、集成和单元级别进行。白盒测试的基本目标之一是验证应用程序的工作流程。它涉及根据预期或期望的输出测试一系列预定义输入,这样当特定输入未产生预期输出时,你就遇到了一个错误。

如何执行白盒测试?

我们将其分为两个基本步骤,以便为您提供白盒测试的简化解释。这是测试人员在使用白盒测试技术测试应用程序时所做的事情

步骤 1) 理解源代码

测试人员通常首先要做的是学习和理解应用程序的源代码。由于白盒测试涉及测试应用程序的内部工作原理,因此测试人员必须对他们正在测试的应用程序中使用的编程语言非常了解。此外,测试人员必须高度了解安全编码实践。安全性通常是测试软件的主要目标之一。测试人员应该能够发现安全问题并防止黑客和不知情的用户有意或无意地将恶意代码注入应用程序中。

步骤 2) 创建测试用例并执行

白盒测试的第二个基本步骤涉及测试应用程序的源代码以确保正确的流程和结构。一种方法是编写更多代码来测试应用程序的源代码。测试人员将为应用程序中的每个过程或一系列过程开发小的测试。这种方法要求测试人员必须对代码有深入的了解,并且通常由开发人员完成。其他方法包括手动测试、试错测试以及使用测试工具,我们将在本文中进一步解释。

WhiteBox Testing

白盒测试示例

考虑以下代码片段

Printme (int a, int b) {                       ------------  Printme is a function 
    int result = a+ b; 
    If (result> 0)
    	Print ("Positive", result)
    Else
    	Print ("Negative", result)
    }                                        -----------   End of the source code

软件工程中白盒测试的目标是验证代码中的所有决策分支、循环和语句。

为了执行上述白盒测试示例中的语句,白盒测试用例将是

  • A = 1, B = 1
  • A = -1, B = -3

白盒测试技术

主要的白盒测试技术是代码覆盖率分析。代码覆盖率分析消除了测试用例套件中的空白。它识别程序中未被一组测试用例执行的区域。一旦发现空白,您就可以创建测试用例来验证代码中未测试的部分,从而提高软件产品的质量

有可用的自动化工具来执行代码覆盖率分析。以下是盒子测试人员可以使用的一些覆盖率分析技术

语句覆盖率:- 这种技术要求在软件工程的测试过程中,代码中的每个可能语句至少被测试一次。

分支覆盖率 – 此技术检查软件应用程序的每个可能路径(if-else 和其他条件循环)。

除了上述之外,还有许多覆盖类型,例如条件覆盖率、多条件覆盖率、路径覆盖率、函数覆盖率等。每种技术都有其自身的优点,并试图测试(覆盖)软件代码的所有部分。使用语句和分支覆盖率,您通常可以达到 80-90% 的代码覆盖率,这已经足够了。

以下是重要的白盒测试技术

  • 语句覆盖
  • 决策覆盖
  • 分支覆盖
  • 条件覆盖
  • 多条件覆盖
  • 有限状态机覆盖
  • 路径覆盖
  • 控制流测试
  • 数据流测试

白盒测试类型

白盒测试包含多种测试类型,用于评估应用程序、代码块或特定软件包的可用性。它们如下所列 —

  • 单元测试:这通常是对应用程序进行的第一种测试。单元测试在每个单元或代码块开发时进行。单元测试主要由程序员完成。作为软件开发人员,您会开发几行代码、一个单独的函数或一个对象,并对其进行测试以确保其正常工作,然后再继续。单元测试有助于在软件开发生命周期的早期发现大多数错误。在此阶段发现的错误修复成本更低,更容易修复。
  • 内存泄漏测试:内存泄漏是导致应用程序运行缓慢的主要原因。在软件应用程序运行缓慢的情况下,经验丰富的 QA 专家在检测内存泄漏方面至关重要。

除了上述之外,一些测试类型既属于黑盒测试,也属于白盒测试。它们如下所列

  • 白盒渗透测试在此测试中,测试人员/开发人员拥有应用程序源代码、详细网络信息、所涉及的 IP 地址以及应用程序运行的所有服务器信息的完整信息。目的是从多个角度攻击代码以暴露安全威胁。
  • 白盒变异测试变异测试通常用于发现用于扩展软件解决方案的最佳编码技术。

白盒测试工具

以下是顶级白盒测试工具列表。

白盒测试的优点

  • 通过发现隐藏错误来优化代码。
  • 白盒测试用例可以轻松自动化。
  • 测试更彻底,因为通常会覆盖所有代码路径。
  • 即使 GUI 不可用,测试也可以在软件开发生命周期 (SDLC) 早期开始。

白盒测试的缺点

  • 白盒测试可能非常复杂且昂贵。
  • 通常执行白盒测试用例的开发人员讨厌它。开发人员进行的白盒测试不够详细,可能导致生产错误。
  • 白盒测试需要具备深入编程和实现知识的专业资源。
  • 白盒测试非常耗时,大型编程应用程序需要时间才能充分测试。

结论

  • 白盒测试可能非常复杂。所涉及的复杂性与正在测试的应用程序有很大关系。一个执行单个简单操作的小型应用程序可以在几分钟内进行白盒测试,而大型编程应用程序则需要数天、数周甚至更长时间才能完全测试。
  • 软件测试中的白盒测试应在软件应用程序开发时、编写后以及每次修改后进行。