1. 如何用 OpenTelemetry 的 Trace 数据自动识别未被测试覆盖的代码路径?
如何用 OpenTelemetry 的 Trace 数据自动识别未被测试覆盖的代码路径?
- OpenTelemetry Trace 与代码路径的关系
- 覆盖率与 trace 映射
- 自动化识别未覆盖路径
OpenTelemetry 通过跨服务传播 Trace(trace id、span id)记录请求经过的完整调用链,span 中包含的组件、方法、操作名与属性可映射到代码路径。自动识别未覆盖路径的方法:一是采集生产环境真实请求的 trace,建立从请求到代码路径(span 名称、服务、方法、可执行代码)的映射;二是结合代码覆盖率插桩(如 JaCoCo、字节码插桩),把 trace 覆盖的代码与插桩覆盖率数据关联,识别出"生产有真实流量但测试未覆盖"和"测试已覆盖但生产调用路径不同"的代码段;三是把 trace 中的 span 与测试用例执行产生的 span 做对比,找出未被任何测试执行覆盖的 span/代码路径,汇总为"未覆盖路径清单";四是据此生成补充测试用例优先级,指导测试补强。这是"可观测性反哺测试"的典型应用,通过在测试与生产都埋点并对比,定位真实覆盖盲区。
传统覆盖率只看"测试执行时覆盖了哪些代码",而 trace 能揭示"生产真实流量走了哪些路径"。两者结合能发现"测试覆盖率高但生产路径没测到"的盲区,使测试覆盖从"代码行"提升到"真实路径"层面。
// 对比测试与生产 trace 的 span 覆盖(示意)
public class UncoveredPathFinder {
public Set<String> findUncoveredInProduction() {
Set<String> prodSpans = traceStore.querySpans("production", "7d"); // 生产真实 span
Set<String> testSpans = traceStore.querySpans("test", "7d"); // 测试执行 span
prodSpans.removeAll(testSpans); // 生产有、测试没有的路径
return prodSpans; // 未覆盖路径清单,用于生成补测用例
}
}