测试覆盖率 精准测试:如何判断两次测试中哪次的质量更好?

满满元气弹 · 2024年08月06日 · 1866 次阅读

代码覆盖率分析:
在真实的代码中,冗余代码往往大量存在,再加上测试时间非常有限,即使使用精准测试,代码覆盖率也很难达到 100%。那么,当两次测试的代码覆盖率都未达到 100% 时,我们该如何判断哪次测试的质量更好呢?

覆盖率不等于质量
举个例子:

  • 第一次测试的代码覆盖率是 92%,但遗漏了关键功能的测试,测试了很多边边角角的功能。
  • 第二次测试的代码覆盖率是 89%,虽然没有全部覆盖,但关键功能全部测试完毕。

在这个例子中,尽管第二次测试的覆盖率(89%)低于第一次测试(92%),但测试质量显然更高。因此,测试质量不仅取决于代码覆盖率,还取决于关键功能部分是否测试全面。从测试工程师的角度来看,除了需求或功能说明书,他们主要靠测试案例来辅助分析关键功能是否测试全面。然而,测试案例的完整性和优先级难以判断某次测试是否覆盖了关键功能。那么,是否有办法知道关键功能是否测试全面呢?答案是肯定的。

测试工程师关注点与精准测试工具

在软件工程中,开发工程师和测试工程师的关注点有所不同。开发工程师更关注代码,而测试工程师则更关注测试案例。API 接口是开发和测试都熟悉的领域。如果仅提供代码覆盖率,测试工程师难以判断未覆盖代码是否关键。仅有代码覆盖率,无论是包覆盖率、类覆盖率、分支覆盖率还是行覆盖率,都无法判断未覆盖部分的功能是否重要。

整体代码覆盖率 vs API 接口维度代码覆盖率

整体代码覆盖率
整体代码覆盖率衡量整个代码库在测试过程中被执行的比例,包括所有模块、类、函数和代码行。它提供了一个宏观视角,帮助了解整个项目的测试覆盖情况。
覆盖率类型:

  1. 包覆盖率:每个包(或模块)中的代码被测试覆盖的比例。
  2. 类覆盖率:每个类中的代码被测试覆盖的比例。
  3. 分支覆盖率:条件语句(如 if/else)的每个分支被执行的比例。
  4. 代码行覆盖率:实际被执行的代码行数占总代码行数的比例。

优点:

  • 提供全面的覆盖率信息。

缺点:

  • 无法通过整体代码覆盖率知晓特定功能或接口 API 的深度分析。

API 接口维度的代码覆盖率
API 接口维度的代码覆盖率提供了 API 接口维度的代码覆盖情况,专门针对 API 相关的代码路径,评估 API 在测试过程中调用的代码覆盖情况。
覆盖率类型:

  1. API 接口的分支覆盖率:API 请求中的条件语句每个分支被执行的比例。
  2. API 接口的代码行覆盖率:API 请求涉及的代码行数被执行的比例。

优点:

  • 专注于 API 层,通过识别 API 接口的优先级,间接获得关键功能的测试情况。
  • 有助于发现 API 特定路径的测试盲点和薄弱点。
  • 适用于微服务架构或基于 API 接口的应用程序。

缺点:

  • 实现难度远高于整体代码覆盖率。

基于 API 接口的代码覆盖率与漏测点分析
通过基于 API 接口的代码覆盖率和漏测点/漏测原因分析,我们可以间接得到关键功能的测试情况。只要同步了 API 接口的优先等级,即可间接了解关键功能的测试情况。下面是我们实现的基于 API 接口的代码覆盖率和漏测原因分析界面。

实现方法
我们有两种方式可以实现 API 接口的代码覆盖率:

  1. 链路分析方法:基于自动链路跟踪,在请求时自动添加 Trace 信息,根据 Trace Id 关联请求穿透的代码(请参考 Google 的论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》)。
  2. 静态调用链路分析:Java 通过源代码或字节码进行静态调用链路分析,涉及分析代码中的方法调用并构建方法调用图。这种分析通常不需要运行时数据。 两种方法各有不足,在实际应用中可以考虑将它们结合起来,取长补短。

上海复深蓝精准测试产品 TestForce/复测高手 ( www.fucegaoshou.com ) 出品

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册