技术分享 | 白盒测试方法论

简介: 技术分享 | 白盒测试方法论

白盒测试又称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法。盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构,对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

白盒测试通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。

白盒测试的度量

根据待测产品的内部实现细节来设计测试用例。白盒测试的执行手段可以涵盖单元测试、集成测试。一般使用代码覆盖率作为白盒测试的主要度量指标。

代码覆盖率常见概念

  • 语句覆盖:每行代码都要覆盖至少一次(最基础,不能保证完整度)
  • 判定覆盖:判定表达式的真假至少覆盖一次
  • 判定/条件覆盖:判定覆盖与条件覆盖都必须覆盖
  • 条件组合覆盖:判定表达式中的所有条件组合都需要覆盖
  • 分支覆盖:控制流中的每条边都要被覆盖一次
  • 路径覆盖:所有的路径都要尽量覆盖
  • 指令覆盖:一行代码会被编译为多条指令,尽可能的覆盖所有指令
  • 方法覆盖:每个方法至少要被覆盖一次
  • 类覆盖:每个类至少被覆盖一次

覆盖率统计的工具

  • EMMA:是一个开源、面向 Java 程序的测试覆盖率收集和报告工具。它通过对编译后的 Java 字节码文件进行插桩,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。
  • Cobertura:是一款优秀的开源测试覆盖率统计工具,它与单元测试代码结合,标记并分析在测试包运行时执行了哪些代码和没有执行哪些代码以及所经过的条件分支,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通过标记无用的、执行不到的代码来优化代码,最终生成一份美观详尽的 HTML 覆盖率检测报告。
  • Jacoco:是一个开源的覆盖率工具,针对 Java 语言,是现在最流行的 Java 覆盖率统计工具。

流程覆盖

流程覆盖用路径覆盖率表达,是利用代码执行流代表流程。执行时需要对流程进行裁剪获得一个适合业务的小规模的业务子集。

流程覆盖率 = 测试经过的路径 / 业务子集路径

精准化测试

精准化测试是一套计算机测试辅助分析系统。精准化测试的核心组件包含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统。这些功能完整的构成了精准化测试技术体系。

精准化测试强调代码调用链与黑盒测试用例之间的关联。可以根据代码变更自动分析影响范围。比如说研发修改了 1 行代码,功能用例有 1000 条,其实很多用例和这 1 行代码是没有关系的。精准化测试可以判断出有哪些测试用例和改动的这 1 行代码有关系。比如说这 1000 条用例当中,只有 20 条和修改的代码有关系。那么测试的范围可以大大缩减,测试效率就会提高。

精准化测试还有一个很有价值的作用,就是在黑盒测试过程中,借助代码流程覆盖率指导测试活动。比如在黑盒测试结束之后,观察代码的覆盖情况,发现有一些路径没有被覆盖到,这个时候就需要继续补充用例,一直到代码流程可以很全面的覆盖。这是系统测试与底层白盒测试相结合的一个方法。

精准化测试还可以用线上数据推导有效的测试用例。比如测试一个系统,这个系统是有大量历史数据的。这时就可以提取其中一段时间的数据,使用这些数据继续测试这个系统。测试完成后统计这些测试数据中哪些数据对于测试覆盖率的增加是有帮助的。可以使用大数据的方法,自动提取出对于测试覆盖率有增益效果的数据。这种方法可以看出哪些测试数据覆盖的代码是相同的。这些测试数据其实就属于同一个集合,在这种集合中,只取一个测试数据就可以。利用线上数据反推有效测试用例也是精准化测试的重要作用。

由于精准化测试需要对底层白盒测试相当了解,对于测试人员要求比较高,所以现在实现起来有一定的难度。目前行业中还没有开源的精准化测试的工具。现阶段只能通过 Jacoco 等覆盖率统计的工具,自己去实现精准化测试平台。更多技术文章

相关文章
|
9月前
|
SQL
学习方法论小结
学习方法论小结
356 1
|
测试技术
技术分享 | 黑盒测试方法论—边界值
技术分享 | 黑盒测试方法论—边界值
|
运维 监控 测试技术
技术分享 | 一文带你了解测试流程的体系
技术分享 | 一文带你了解测试流程的体系
|
测试技术
技术分享 | 黑盒测试方法论—场景法
场景法就是模拟用户操作软件时的场景,主要用于测试系统的业务流程。 测试不能只关注某个控件的边界值、等价类是否满足要求,也要关注它的主要功能和业务流程是否正确实现,这时就需要使用场景法来完成。
|
小程序 测试技术 项目管理
技术分享 | 软件测试入门必会-流程管理平台
技术分享 | 软件测试入门必会-流程管理平台
|
测试技术 数据安全/隐私保护
技术分享 | 黑盒测试方法论—等价类
等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。 需要把用户所有可能输入的数据,划分成若干份(若干个子集),然后从每一个子集当中选取少数具有代表性的数据作为测试用例,这种方法被称为——等价类划分法。 在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果。
|
测试技术 API 微服务
《软件测试52讲》读书笔记 —— 互联网产品的测试策略
《软件测试52讲》读书笔记 —— 互联网产品的测试策略
217 0
《软件测试52讲》读书笔记 —— 互联网产品的测试策略
|
测试技术
技术分享 | 黑盒测试方法论—边界值
边界值分析法是一种很实用的黑盒测试用例方法,它具有很强的发现故障的能力。边界值分析法也是作为对等价类划分法的补充,测试用例来自等价类的边界。 这个方法其实是在测试实践当中发现,Bug 往往出现在定义域或值域的边界上,而不是在其内部。为检测边界附近的处理专门设计测试用例,通常都会取得很好的测试效果。 在用边界值分析法的时候,一般规定了取值范围以及值的个数的场景。 在分析等价类案例,划分等价类的时
|
运维 监控 架构师
技术分享 | 一文带你了解测试流程体系
软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。 为了能更好的保障软件质量,在软件测试的实践中,慢慢形成了一些流程用来达到这一目标。下面就来介绍一下常见的测试流程。 ## 传统测试流程 在传统的测试流程中包含了如图所示的步骤。 下面分别介绍下每一步流程的含义。 ### 单元测试 单元测试是对软件中的基本组成单位
|
测试技术 数据安全/隐私保护
技术分享 | 黑盒测试方法论—等价类
等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。 需要把用户所有可能输入的数据,划分成若干份(若干个子集),然后从每一个子集当中选取少数具有代表性的数据作为测试用例,这种方法被称为——等价类划分法。 在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试