白盒测试

2025年03月17日 | 阅读 9 分钟

软件测试的盒子测试方法包括黑盒测试和白盒测试。我们这里讨论的白盒测试也被称为玻璃盒测试、结构测试、透明盒测试、开放盒测试和透视盒测试。它测试软件的内部编码和基础设施,重点检查预定义输入与预期和所需输出的匹配。它基于应用程序的内部工作原理,并围绕内部结构测试展开。在这种类型的测试中,需要编程技能来设计测试用例。白盒测试的主要目标是关注输入和输出流经软件的过程,并加强软件的安全性。

使用“白盒”一词是因为从系统内部视角看。透明盒、白盒或透视盒的名称表示能够透过软件的外壳看到其内部工作原理。

开发人员进行白盒测试。在此,开发人员将测试程序代码的每一行。开发人员执行白盒测试,然后将应用程序或软件发送给测试团队,测试团队将执行黑盒测试,并根据需求验证应用程序,识别错误并将其发送给开发人员。

开发人员修复错误并进行一轮白盒测试,然后将其发送给测试团队。在这里,修复错误意味着错误已被删除,并且特定功能在应用程序上正常工作。

在这里,测试工程师将不参与修复缺陷,原因如下:

  • 修复错误可能会中断其他功能。因此,测试工程师应始终发现错误,而开发人员应始终进行错误修复。
  • 如果测试工程师花费大部分时间修复缺陷,那么他们可能无法在应用程序中发现其他错误。

白盒测试包含各种测试,如下所示:

  • 路径测试
  • 循环测试
  • 条件测试
  • 基于内存角度的测试
  • 程序性能测试

路径测试

在路径测试中,我们将编写流程图并测试所有独立路径。这里编写流程图意味着流程图表示程序的流程,并显示每个程序如何相互连接,如下图所示:

White Box Testing

测试所有独立路径意味着,假设从 main() 到函数 G 的路径,首先设置参数并测试程序在该特定路径中是否正确,然后以相同的方式测试所有其他路径并修复错误。

循环测试

在循环测试中,我们将测试 while、for 和 do-while 等循环,并检查结束条件是否正确工作以及条件的大小是否足够。

例如:我们有一个程序,开发人员给出了大约 50,000 个循环。

我们无法手动测试这个程序的所有 50,000 个循环周期。因此,我们编写了一个小程序来帮助所有 50,000 个周期,如下图所示,测试 P 用与源代码程序相似的语言编写,这被称为单元测试。它是由开发人员编写的。

如下图所示,我们有各种需求,例如 1、2、3、4。然后,开发人员编写程序,例如程序 1、2、3、4 用于并行条件。这里应用程序包含数百行代码。

White Box Testing

开发人员将进行白盒测试,他们将逐行测试所有五个程序以查找错误。如果他们在任何程序中发现任何错误,他们将进行更正。然后他们必须再次测试系统,这个过程包含大量时间和精力,并减慢产品发布时间。

现在,假设我们有另一个情况,客户想要修改需求,那么开发人员将进行所需的更改并再次测试所有四个程序,这需要大量时间和精力。

这些问题可以通过以下方式解决:

在此,我们将为类似的程序编写测试,其中开发人员以与源代码相关的语言编写这些测试代码。然后他们执行这些测试代码,也称为单元测试程序。这些测试程序链接到主程序并作为程序实现。

White Box Testing

因此,如果代码中有任何修改或错误的需求,则开发人员会在主程序和测试程序中进行调整,然后执行测试程序。

条件测试

在此,我们将测试所有逻辑条件的值;也就是说,我们将同时验证ifelse条件。

例如

上述程序将在这两种情况下都正常工作,这意味着如果条件为真,则 else 应为假,反之亦然。

基于内存(大小)角度的测试

代码大小增加的原因如下:

  • 没有代码重用:我们举一个例子,我们有同一个应用程序的四个程序,程序的前十行是相似的。我们可以将这十行编写为一个离散函数,并且上述四个程序也应该可以访问它。此外,如果存在任何错误,我们可以在函数中修改代码行,而不是修改整个代码。
  • 开发人员使用可能被修改的逻辑。如果一个程序员编写代码,文件大小高达 250kb,那么另一个程序员可以使用不同的逻辑编写相似的代码,文件大小高达 100kb。
  • 开发人员声明了许多函数和变量,这些函数和变量可能永远不会在代码的任何部分中使用。因此,程序的规模将增加。

例如,

在上面的代码中,我们可以看到整数 a 从未在程序的任何地方被调用,并且函数 Create user 也从未在代码的任何地方被调用。因此,这导致了内存消耗。

由于代码量大,我们无法通过手动验证代码来记住这种类型的错误。所以,我们有一个内置工具,可以帮助我们测试不必要的变量和函数。在这里,我们有一个名为 Rational purify 的工具。

White Box Testing

假设我们有三个程序,例如程序 P、Q 和 R,它们向 S 提供输入。S 进入程序并验证未使用的变量,然后给出结果。之后,开发人员将单击多个结果并调用或删除不必要的函数和变量。

此工具仅用于 C 编程语言C++ 编程语言;对于其他语言,市场上有其他相关的工具可用。

  • 开发人员不使用可用的内置函数;相反,他们使用自己的逻辑编写完整的功能。因此,这导致了时间的浪费并推迟了产品发布。

测试程序的性能(速度、响应时间)

应用程序可能由于以下原因而变慢:

  • 使用逻辑时。
  • 对于条件情况,我们将充分使用 orand
  • Switch case,这意味着我们不能使用嵌套 if,而是使用 switch case。
White Box Testing

我们知道开发人员正在进行白盒测试,他们明白代码运行缓慢,或者程序的性能也变得迟缓。开发人员无法手动检查程序并验证哪行代码正在减慢程序速度。

为了解决这种情况,我们有一个名为 Rational Quantify 的工具,它可以自动解决这些问题。一旦整个代码准备好,Rational Quantify 工具将遍历代码并执行它。我们可以在结果表中以粗线和细线的形式看到结果。

在这里,粗线表示代码的哪个部分耗时。当我们双击粗线时,该工具将自动带我们到该行或该段代码,该代码也以不同的颜色显示。我们可以更改该代码并再次使用此工具。当所有行的顺序都变细时,我们知道程序的呈现已得到增强。开发人员将自动执行白盒测试,因为这比手动执行更节省时间。

白盒测试的测试用例源自软件开发生命周期的设计阶段。数据流测试、控制流测试、路径测试、分支测试、语句和决策覆盖率,所有这些技术都作为白盒测试的指导方针,用于创建无错误的软件。

White Box Testing

白盒测试遵循一些工作步骤,以使测试易于管理和理解下一步要完成的任务。执行白盒测试有一些基本步骤。

白盒测试的通用步骤

  • 设计所有测试场景、测试用例,并根据优先级对其进行排序。
  • 此步骤涉及在运行时研究代码,以检查资源利用率、未访问的代码区域、各种方法和操作所花费的时间等。
  • 在此步骤中,进行内部子例程的测试。内部子例程(例如非公共方法、接口)是否能够适当地处理所有类型的数据。
  • 此步骤侧重于测试控制语句(如循环和条件语句),以检查不同数据输入的效率和准确性。
  • 在最后一步,白盒测试包括安全测试,通过查看代码如何处理安全性来检查所有可能的安全漏洞。

白盒测试的原因

  • 它识别内部安全漏洞。
  • 检查代码内部输入的方式。
  • 检查条件循环的功能。
  • 在单个级别测试函数、对象和语句。

白盒测试的优点

  • 白盒测试优化代码,从而可以识别隐藏的错误。
  • 白盒测试的测试用例可以轻松自动化。
  • 这种测试比其他测试方法更彻底,因为它涵盖了所有代码路径。
  • 即使没有 GUI,也可以在 SDLC 阶段开始。

白盒测试的缺点

  • 当涉及到大型编程应用程序时,白盒测试非常耗时。
  • 白盒测试非常昂贵和复杂。
  • 它可能导致生产错误,因为它未由开发人员详细说明。
  • 白盒测试需要专业的程序员,他们对编程语言和实现有详细的知识和理解。

白盒测试中使用的技术

数据流测试数据流测试是一组测试策略,它检查程序的控制流,以根据事件序列探索变量序列。
控制流测试控制流测试通过控制结构确定程序语句或指令的执行顺序。程序的控制结构用于开发程序的测试用例。在此技术中,测试人员选择大型程序的特定部分来设置测试路径。测试用例由程序的控制图表示。
分支测试分支覆盖技术用于覆盖控制流图的所有分支。它至少覆盖决策点每个条件的所有可能结果(真和假)一次。
语句测试语句覆盖技术用于设计白盒测试用例。此技术涉及至少执行一次源代码的所有语句。它用于计算源代码中已执行语句的总数,占源代码中总语句的比例。
决策测试此技术报告布尔表达式的真假结果。每当语句(如 do while 语句、if 语句和 case 语句(控制流语句))可能有两个或更多结果时,它就被视为决策点,因为有两个结果,即真或假。

白盒测试与黑盒测试的区别

以下是白盒测试和黑盒测试之间的主要区别:

白盒测试黑盒测试
开发人员可以执行白盒测试。测试工程师执行黑盒测试。
要执行 WBT,我们应该了解编程语言。要执行 BBT,无需了解编程语言。
在此,我们将查看源代码并测试代码的逻辑。在此,我们将根据需求规范验证应用程序的功能。
在此,开发人员应了解代码的内部设计。在此,无需了解代码的内部设计。

下一主题黑盒测试