白盒测试是一种允许测试人员检查和验证软件系统内部工作的技术。了解类型、技术、优点和缺点。
软件测试是指验证生成的产品是否按预期执行并保证它在发货后不包含任何不受欢迎的意外的系统过程。
软件测试的成本大大低于在产品发送后发现严重错误然后修复它的成本。但是,客户满意度和忠诚度的损失是在产品发货后发现错误的最高成本。
您的客户可能会立即转向竞争对手,故事将突然停止。
开发和测试软件的过程是必不可少的。
它确保质量、可靠性和降低风险。此外,全面的测试可确保有效的性能和满意的消费者,从而转化为成功的业务。
可以根据各种标准和以各种方式评估软件产品。
然而,在基本层面上,可以考虑软件的预期功能,即它是否按预期执行。
白盒测试是一种更广泛的产品测试。在这里,您测试的不仅仅是功能。与黑盒子相比,盒子现在是半透明的,或者,换个角度来看,它现在是白色的。因此,您可以观察产品的内部运作。
显示所有语句、条件循环、输入流等。
因此,您将需要一位经验丰富的程序员或测试专家,他们精通编程语言和白盒测试的编码程序。本文将重点介绍白盒测试。
什么是白盒测试?
白盒测试是一种允许测试人员检查和验证软件系统内部运作的技术,该系统由其代码、基础设施和与外部系统的连接组成。
白盒测试是当代持续集成/持续交付 (CI/CD) 软件开发管道的自动化构建过程的一个组成部分。
静态应用程序安全测试 (SAST) 经常提到白盒测试,这是一种自动检查源代码或二进制文件并就潜在漏洞和缺陷提供反馈的方法。
白盒测试的重点是什么?
白盒测试可以针对应用程序源代码的以下任何问题:
安全漏洞和漏洞
安全漏洞是使应用程序容易受到攻击的程序组件。例如,不保护您的应用程序免受注入攻击可能会在程序中留下一个安全漏洞,攻击者有朝一日可能会利用该漏洞来破坏客户端数据。
白盒测试确定应用程序是否使用安全最佳实践进行编程,以及代码是否容易受到已知安全威胁和漏洞的攻击。
检查损坏/结构不良的编程路径
有一些特定的编码标准,如果不遵守,可能不会导致错误,但在某些情况下可能会导致意外行为。
此外,如果不检查或程序员没有检查条件的所有可能值,诸如条件之类的编码结构可能会导致无法预料的结果。
白盒测试有助于揭示不完整和错误的程序结构,发现冗余、有缺陷或低效的条件逻辑。
预期产出
这需要评估函数的所有可能输入,以确定它是否总是产生预期的结果。
循环测试
如果循环构造没有正确编写并导致它遇到无限循环,程序将始终失败。
由于嵌套循环很快就会变成难以管理的代码迷宫,因此最好尽可能避免使用它们,以支持更直接的构造。
白盒测试评估单循环、级联循环和嵌套循环中局部和全局变量的效率、条件逻辑和正确处理。
数据流测试 (DFT)
这是在变量流经代码时跟踪变量及其值的过程,以识别未适当初始化、声明但从未使用或不正确修改的变量。
要确定是否存在相互竞争的变量名称,或者程序结构是否错误地更改了变量的值,建议跟踪变量从声明到处理的生命周期。
验证预期结果
测试最关键的方面之一是确定是否达到了预期的结果。
执行白盒测试以确保实现软件程序的预期结果。
验证每个语句和函数调用
白盒测试需要验证函数中的每个语句以确保程序的完整性。
白盒测试的类型
两种最流行的白盒测试形式是单元测试和集成测试。
1. 单元测试
在单元测试中,应用程序被视为多个组件或模块的内聚。因此,每个模块的控制数据、方法和流程都是独立验证的。通常,开发人员编写自动化测试来确认应用程序组件是否满足设计要求。
编程风格是单元组件的关键决定因素。
例如,在面向对象的风格中,一个单元变成了一个类及其接口。执行、操作和变异测试是各种单元测试。
2. 整合评估
在集成测试期间,许多相关的单个单元或模块作为一个组进行检查。它评估组成单元符合功能标准的程度,并识别各种元素之间相互作用中的任何缺陷。
集成测试细分为自顶向下、自底向上和混合方法。
其他形式的白盒测试包括:
突变测试
这种形式的单元测试通过设计测试、对代码进行微小的随机更改以及确定测试是否仍然通过来验证代码的弹性和一致性。
白盒渗透测试
在这种类型的白盒测试中,道德黑客表现为知识渊博的内部人员,并试图利用对其代码和环境的广泛了解来攻击应用程序。
静态代码分析
使用预定模式或机器学习自动发现静态代码中的漏洞或编码缺陷。
执行白盒测试的步骤
白盒测试要求测试人员执行多项任务。
1. 确定必须测试的内容
白盒测试鼓励检查所选实例的每个组件。因此,较少数量的识别件是优选的。
在对这些进行测试后,现有的缺陷变得明显。
功能和组件经过反复测试,以确保它们按计划运行。提取和评估小的组件,并在满足目标时提取下一个组件。
测试的能源效率也很重要,这意味着消耗的能量与获得的结果成正比。
2. 组织流程图
该流程图描述了所有可能的和可想象的路径。这些路径可以对应于任何特征、模块或组件。执行它是为了确定测试的范围。
3. 为所有路径开发测试用例
在映射各种路径后为每个可能的路径创建测试用例。创建测试用例后,它们将被执行。
4. 执行
这是测试执行阶段,执行测试用例。然后,可以重复执行阶段以确认测试结果。
白盒测试技术
白盒测试的主要目标是尽可能彻底地覆盖源代码。
代码覆盖率分析是一种流行的白盒测试方法。
代码覆盖率,通常称为测试覆盖率,是一个指标,表明已执行了多少语句或代码行。
使用语句覆盖率、分支覆盖率和路径覆盖率等概念,可以确定应用程序的逻辑有多少可以由单元测试套件运行和测试。
我们将在下面进一步讨论这些概念:
声明覆盖范围
顾名思义,语句覆盖旨在评估模块或功能中可执行语句的最大数量。
这种白盒测试技术确保所有可执行代码语句至少执行和测试一次。例如,如果代码块中存在多个条件,每个条件都用于给定的输入范围,则测试应评估输入的每个容量以确认所有代码行都已执行。
语句覆盖有助于识别新语句、不需要的分支、部分代码引用的缺失语句以及先前版本遗留的死代码。
决策覆盖/分支覆盖
分支覆盖将代码划分为条件逻辑的分支,并保证单元测试覆盖每个分支。
这种覆盖技术最大化了对每个分支的测试,例如 if 语句或循环。
路径覆盖
路径覆盖与线性无关的代码路径有关。在路径覆盖技术中,测试人员编写单元测试来执行尽可能多的程序控制流路径。目的是检测损坏、重复或低效的路径。
多重覆盖
测试条件或决策语句的每个潜在结果组合。
其他代码覆盖方法包括有限状态机、路径、控制流和数据流覆盖。
白盒测试的优势
除了测试提供的好处之外,白盒测试还提供:
- 用于测试的简单脚本自动化。
- 由于一次检查一个语句的代码,因此得到了极大的优化。
- 涵盖所有途径的极其详尽的测试。
- 单元测试可以在应用程序的生命周期中相对较早地开始,从而最大限度地减少在生命周期后期出现错误的可能性。
白盒测试的缺点
像其他所有概念一样,有;白盒测试也有它的缺点。
以下是一些突出的缺点:
- 与其他类型的测试相比,白盒测试是一项复杂、耗时且昂贵的工作。
- 对于白盒测试,需要额外的高质量资源。
- 可能代价高昂。
- 通常,测试并不详尽。因此,它们可能包含错误。
- 测试需要有经验的资源,因为它涉及技术理解。
白盒测试示例
现在让我们考虑这个简单的伪代码:
INPUT USER, PERMISSION IF USER IS LOGGED IN AND USER.HAS(PERMISSION)GRANT ACCESSPRINT("ACCESS GRANTED") ELSERESTRICT ACCESSPRINT("ACCESS DENIED") PRINT("COMPLETED")
对于上述伪代码,这是用户浏览应用程序(在本例中为博客站点)以进行发布的典型场景。测试代码适用于以下问题:
- 该用户是否正确登录?
- 此用户是否具有“CREATE_POST”权限
如果两个条件都满足,则 GRANT ACCESS
如果不满足,则 RESTRICT ACCESS
在操作结束时,“完成”
白盒测试工具
各种白盒测试工具包括:
- 艾玛
- PyUnit
- HTML单元
- CppUnit
结论
假设您的应用程序处于高风险行业,例如航空电子设备或医疗设备。
在这种情况下,最好使用白盒技术对其进行彻底测试。
单独的黑盒测试不足以实现最大的测试覆盖率。我们需要使用黑盒和白盒测试技术来覆盖最多的缺陷。
如果正确完成白盒测试,无疑会提高软件质量。测试人员参与这个测试也是有益的,因为他们可以对代码提供最“客观”的意见。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。