什么是白盒测试
白盒测试正在测试一个软件解决方案的内部结构,设计和代码。在这种类型的测试中,测试人员可以看到代码。它主要侧重于验证通过应用程序的输入和输出,改善设计和可用性,增强安全性。白盒测试也称为透明测试,开盒测试,结构测试,基于代码的测试,它通常由开发人员执行。
它是进行软件测试的重要部分之一。与之相对应的黑盒测试涉及从外部或最终用户类型的角度进行测试。另一方面,白盒测试基于应用程序的内部工作原理,并围绕内部测试展开。
白盒测试中验证什么
白盒测试涉及以下软件代码的测试:
- 内部安全
- 编码过程中路径或结构
- 通过代码的特定输入流
- 预期输出
- 条件循环的功能
- 分别测试每个语句,对象和函数
测试可以在软件开发的系统、集成和单元级别进行。白盒测试的基本目标之一是验证应用程序的工作流程。它涉及针对预期或期望的输出测试一系列预定义的输入,以便当特定输入未产生预期的输出时,发现程序的 BUG。
如何执行白盒测试
为了简化白盒测试,将其分为两个基本步骤。这是测试人员使用白盒测试技术测试应用程序时所做的事情:
步骤 1:理解源代码
测试人员经常要做的第一件事是学习和理解应用程序的源代码。由于白盒测试涉及对应用程序内部工作的测试,因此测试人员必须非常了解所测试应用程序中使用的编程语言。同样,测试人员必须高度了解安全的编码。安全通常是测试软件的主要目标之一。测试人员应该能够发现安全问题,并防止黑客和极客用户的攻击,他们可能有意或无意将恶意代码注入应用程序。
步骤 2:创建测试用例并执行
白盒测试的第二个基本步骤涉及测试应用程序的源代码,以验证正确的流程和结构。一种方法是编写更多代码以测试应用程序的源代码。测试人员将为应用程序中的每个过程或一系列过程开发很少的测试。此方法要求测试人员必须对代码有深入的了解,并且通常由开发人员完成。
白盒测试示例
一个加法的 Demo:
def add(int a, int b) {
int result = a + b;
if (result > 0) print result
else print(-result);
}
白盒测试的目标是验证代码中的所有决策分支,循环,语句。
为了执行上述代码中的语句,白盒测试用例应为:
A = 1,B = 1
A = -1,B = -3
白盒测试技术
白盒测试的主要技术是代码覆盖率分析。代码覆盖率分析消除了测试用例套件中的盲点。它标识一组测试用例未执行的程序区域。一旦发现盲点,就可以创建测试用例来验证未经测试的代码部分,从而提高软件产品的质量。
有自动工具可以执行代码覆盖率分析。以下是一些覆盖率分析技术
语句覆盖:这种技术要求在软件工程的测试过程中,至少对代码中的所有可能语句进行一次测试。
分支覆盖率:此技术检查软件应用程序的每个可能路径(if-else
和其他条件循环)。
除了上述内容之外,还有许多覆盖类型,例如条件覆盖,多个条件覆盖,路径覆盖,功能覆盖等。每种技术都有其自身的优点,并尝试测试(覆盖)软件代码的所有部分。使用语句和分支覆盖率,通常可以达到80-90%
的代码覆盖率。
以下是之前写过关于覆盖率的文章:
白盒测试的类型
白盒测试包含几种用于评估应用程序,代码块或特定软件包的可用性的测试类型。以下列出-
单元测试
通常是在应用程序上进行的第一类测试。单元测试是在开发每个单元或代码块时执行的。单元测试本质上是由程序员完成的。作为软件开发人员,只需要开发几行代码,单个函数或对象,并对其进行测试,以确保其能够正常工作,然后再继续进行单元测试,以帮助在软件开发生命周期的早期识别出大多数错误。在此阶段发现的错误更便宜且易于修复。
下面是单元测试相关文章:
测试内存泄漏
内存泄漏是导致应用程序运行缓慢的主要原因。如果您的软件应用程序运行缓慢,那么具有丰富的检测内存泄漏经验的质量保证专家至关重要。
其他
- 白盒渗透测试:在此测试中,测试人员/开发人员具有应用程序源代码的完整信息,详细的网络信息,涉及的 IP 地址以及应用程序在其上运行的所有服务器信息。目的是从多个角度攻击代码以暴露安全威胁
- 白盒突变测试:突变测试通常用于发现用于扩展软件解决方案的最佳编码技术
白盒测试的优势
- 通过发现隐藏的错误进行代码优化。
- 白盒测试用例可以轻松实现自动化。
- 由于通常涵盖所有代码路径,因此测试更加彻底。
- 即使没有 GUI,也可以在 SDLC 中尽早开始测试。
白盒测试的缺点
- 白盒测试可能非常复杂且昂贵。
- 通常执行白盒测试用例的开发人员会讨厌它。
- 白盒测试需要专业资源,并且对编程和实现有详细的了解。
- 白盒测试是耗时的,较大的编程应用程序需要花费大量时间来进行全面测试。
结束语
白盒测试可能非常复杂。涉及的复杂性与要测试的应用程序有很大关系。一个执行单个简单操作的小型应用程序可以在几分钟内进行白盒测试,而大型编程应用程序则需要数天,数周甚至更长的时间才能完全测试。
- 郑重声明:文章首发于公众号 “FunTester”,禁止第三方(腾讯云除外)转载、发表。
技术类文章精选
- Linux 性能监控软件 netdata 中文汉化版
- 性能测试框架第三版
- 如何在 Linux 命令行界面愉快进行性能测试
- 图解 HTTP 脑图
- 性能测试中图形化输出测试数据
- 压测中测量异步写入接口的延迟
- 多种登录方式定量性能测试方案
- JMeter 吞吐量误差分析