什么是白盒测试?技术、示例、类型和工具


白盒测试

白盒测试是一种软件测试技术,它涉及测试产品的底层结构、设计和代码,以验证输入-输出流程并改进设计、可用性和安全性。白盒测试也称为透明盒测试、开放盒测试、清晰盒测试、基于代码的测试和玻璃盒测试,因为代码对测试人员是可见的。

它是软件测试方法(称为盒测试)的两个组成部分之一。另一方面,黑盒测试是从外部或最终用户的角度进行测试。另一方面,白盒测试侧重于应用程序的内部工作原理,并围绕内部测试展开。

由于透明盒的概念,“白盒”一词应运而生。“清晰盒”或“白盒”这个名称指的是能够通过软件的外部外壳(或“盒”)看到软件的内部工作原理。同样,“黑盒测试”中的“黑盒”表示无法观察软件的内部工作原理,只能评估最终用户的体验。

在白盒测试中,您检查什么?

白盒测试需要对软件代码进行以下测试:

  • 内部安全漏洞

  • 代码过程中中断或结构不良的路径

  • 特定输入通过程序所采取的路径。

  • 预期结果

  • 条件循环在各种情况下都很有用。

  • 每个语句、对象和函数的个性化测试

软件开发可能包括系统、集成和单元级别的测试。白盒测试的主要目标之一是确保应用程序的操作流程正确。它涉及将一组预定的输入与预期或所需输出进行比较,目的是在其中一个输入未能提供预期结果时识别错误。

您如何进行白盒测试?

为了便于理解,我们将白盒测试分解为两个简单的阶段。在使用白盒测试技术测试应用程序时,测试人员执行以下操作:

步骤 1:理解源代码

程序的源代码通常是测试人员首先学习和理解的内容。因为白盒测试涉及测试应用程序的内部工作原理,所以测试人员必须精通被测应用程序中使用的编程语言。此外,测试人员必须精通安全的编码技术。

软件测试的主要目标之一是确保其安全性。测试人员应该能够检测安全漏洞并防止黑客和可能会故意或无意地将危险代码注入程序的幼稚用户攻击。

步骤 2:创建和执行测试用例

白盒测试的第二个基本步骤是对应用程序的源代码进行正确流程和结构的测试。一种方法是编写更多代码来测试应用程序的源代码。对于应用程序中的每个步骤或一系列过程,测试人员都会创建小型测试。此方法需要测试人员对代码有深入的了解,并且经常由开发人员执行。手动测试、反复试验测试和使用测试工具是一些稍后将在本文中讨论的其他方法。

白盒测试示例

代码:

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

软件工程中的白盒测试旨在确保代码中的所有决策分支、循环和语句都是正确的。

白盒测试用例将用于测试前面白盒测试示例中的语句。

A = 1; B = 1

A = -1, B = -3

白盒测试技术

代码覆盖率分析是一种流行的白盒测试技术。通过代码覆盖率分析来填补测试用例套件的漏洞。它识别一组测试用例中未进行测试的程序部分。一旦检测到漏洞,您就会编写测试用例来检查代码中未经测试的区域,从而提高软件产品的质量。

可以使用自动化技术执行代码覆盖率分析。盒式测试人员可以使用以下覆盖率分析技术:

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

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

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

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

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

我们为什么要进行白盒测试 (WBT)?

为了确保:

  • 每个模块的独立路径至少测试过一次。

  • 所有逻辑决策都经过测试,以查看它们是真还是假。

  • 所有在边界处及其操作约束内执行的循环都确保内部数据结构的有效性。

为了查找以下类型的错误:

  • 当我们创建和实现不属于程序一部分的函数、条件或控件时,我们更有可能犯逻辑错误。

  • 由于程序逻辑流程与其实际执行之间的不匹配而导致的设计缺陷

  • 检查语法和句法错误

白盒测试类型

白盒测试是指用于评估应用程序、代码片段或特定软件包可用性的各种测试方法。以下是列表:

  • 单元测试 - 单元测试通常是执行的第一种应用程序测试。随着每个单元或代码块的开发,它都将进行单元测试。程序员主要负责单元测试。作为软件开发人员,您编写几行代码、单个函数或对象,然后对其进行测试以确保其正常工作,然后再继续执行下一步。在软件开发生命周期的早期,单元测试有助于检测大多数问题。在此阶段发现的错误成本更低,更容易修复。

  • 内存泄漏测试 - 内存泄漏是导致应用程序运行缓慢的最常见原因之一。当您拥有运行缓慢的软件应用程序时,您需要一位熟练于检测内存泄漏的质量保证专业人员。除了上述内容外,黑盒测试和白盒测试都包含一些测试形式。以下是它们的列表。

  • 白盒渗透测试 - 在这种类型的测试中,测试人员/开发人员可以访问程序的整个源代码,以及广泛的网络信息、涉及的 IP 地址和所有服务器信息。目标是从多个方面攻击代码,以暴露安全漏洞。

  • 白盒变异测试 - 白盒变异测试通常用于确定软件解决方案增长方面的最佳编码策略。

白盒测试的优势

  • 通过检测隐藏缺陷来优化代码。

  • 白盒测试用例易于自动化。

  • 由于通常涵盖所有代码路径,因此测试更彻底。

  • 即使无法访问 GUI,也可以在 SDLC 的早期开始测试。

白盒测试的缺点

  • 白盒测试可能既耗时又昂贵。

  • 它会让习惯于运行白盒测试场景的开发人员感到厌烦。开发人员在白盒测试中缺乏细节可能会导致生产问题。

  • 白盒测试需要具备对编程和实现有深入了解的专业资源。

  • 白盒测试需要时间,较大的编程应用程序需要更多时间才能进行彻底测试。

结论

白盒测试是一项艰巨的任务。被测应用程序与所涉及的难度有很大关系。对执行单个简单任务的小型应用程序进行白盒测试可能需要几分钟时间,而较大的编程程序可能需要几天、几周甚至几个月才能完全测试。

软件测试应该在软件应用程序开发过程中、编写完成后以及每次修改后进行。

更新于:2021年8月20日

3K+ 浏览量

开启您的职业生涯

通过完成课程获得认证

开始学习
广告