无需登录 数据私有 本地保存

测试覆盖率可视化器 - 上传 lcov 文件查看行覆盖

60
0
0
0

术语表

以下是与测试覆盖率分析相关的专业术语解释,帮助您更好地理解工具中涉及的概念和技术细节。

测试覆盖率(Test Coverage)

测试覆盖率是衡量测试用例对源代码覆盖程度的量化指标。它表示在执行测试用例的过程中,有多少比例的源代码被至少执行过一次。测试覆盖率通常以百分比形式表示,计算公式为:已覆盖的代码行数除以可执行代码行总数再乘以100%。测试覆盖率越高,意味着测试用例覆盖的代码范围越广,代码中潜在的未被测试发现的缺陷就越少。但需要注意的是,100%的测试覆盖率并不意味着代码完全没有缺陷,它只能说明所有代码都被测试执行过,但不能保证测试用例验证了所有可能的输入和状态组合。

LCOV

LCOV(Late Cover)是一种基于文本的代码覆盖率数据格式,由 GNU 项目中的同名工具生成。LCOV 文件以纯文本形式存储覆盖率数据,包含了源文件路径、每个文件的覆盖率统计信息以及逐行的覆盖计数。LCOV 格式因其简洁性和广泛的工具支持而成为最流行的覆盖率数据交换格式之一。许多主流的覆盖率工具(如 Istanbul/nyc、gcov、phpunit 等)都支持生成 LCOV 格式的报告。LCOV 文件通常以 .info 或 .lcov 为扩展名。

行覆盖率(Line Coverage)

行覆盖率是最基本的覆盖率度量指标,它统计的是被测试至少执行过一次的可执行代码行数占总可执行代码行数的百分比。可执行代码行包括赋值语句、函数调用、条件判断、循环控制等实际执行的代码行,不包括注释、空行、纯声明语句等不可执行代码。行覆盖率的计算公式为:行覆盖率 = 已覆盖行数 / 可执行行数 × 100%。行覆盖率的优点是直观易懂,但缺点是无法反映复杂条件分支的覆盖情况。例如一个包含三个条件的 if-else-if 结构,只要整体被执行一次就计为全部覆盖,而不区分每个分支是否都被测试过。

函数覆盖率(Function Coverage)

函数覆盖率统计的是被测试至少调用一次的函数数量占总函数数量的百分比。与行覆盖率不同,函数覆盖率关注的是函数级别的覆盖情况,只要一个函数体被测试执行过一次,该函数就被计为已覆盖。函数覆盖率的计算公式为:函数覆盖率 = 已覆盖函数数 / 总函数数 × 100%。函数覆盖率适合从宏观角度了解测试用例是否覆盖了项目中的所有函数,但它不区分函数内部的代码覆盖深度,即使一个函数只有部分代码被测试执行,该函数也会被计为完全覆盖。

Istanbul / nyc

Istanbul 是 JavaScript 生态中最流行的代码覆盖率工具,nyc 是 Istanbul 的命令行界面版本。Istanbul 通过代码插桩(instrumentation)技术在源代码中注入覆盖率收集代码,在测试运行过程中记录每行代码和每个分支的执行次数,最终生成覆盖率报告。Istanbul 支持多种输出格式,包括 LCOV、HTML 报告、JSON 等。nyc 是 Istanbul 的 CLI 封装,提供了更加便捷的命令行使用方式,常与 Jest、Mocha 等测试框架配合使用。运行 nyc 命令后会在 coverage 目录下生成多种格式的覆盖率报告。

代码插桩(Instrumentation)

代码插桩是指在源代码中注入额外的统计代码,用于在代码运行时收集覆盖率数据的技术。插桩后的代码在执行过程中会记录每行代码的执行次数、每个分支的命中情况等信息。插桩通常在测试运行之前由覆盖率工具自动完成,开发者无需手动修改源代码。插桩会增加代码的体积和执行开销,因此通常只在测试环境和开发环境中使用,不应在生产环境中部署插桩后的代码。Istanbul 是 JavaScript 生态中最常用的代码插桩工具。

分支覆盖率(Branch Coverage)

分支覆盖率是一种比行覆盖率更精细的覆盖率度量指标,它关注的是条件判断语句中各个分支的覆盖情况。分支覆盖率统计的是被测试执行过的分支数占总分支数的百分比。例如,一个 if-else 语句有两个分支,如果测试只执行了 if 分支而没有执行 else 分支,则分支覆盖率为50%。分支覆盖率能更好地反映测试用例对代码逻辑的覆盖深度,特别适合检测条件判断中被遗漏的测试路径。本工具虽然主要展示行覆盖率,但了解分支覆盖率的概念有助于开发者构建更全面的测试策略。

可执行行(Executable Line)

可执行行是指源代码中实际会被 JavaScript 引擎或编译器执行的代码行。可执行行包括赋值语句、函数调用、条件判断、循环控制、返回语句等,不包括纯注释行、空行、只有花括号的行、import/export 声明行、类型定义行等不可执行代码。在计算覆盖率时,只有可执行行会被纳入分母,注释和空行等不可执行代码不参与覆盖率计算。本工具在解析 LCOV 数据时会自动识别和排除不可执行行,确保覆盖率计算的准确性。

LCov Info 文件格式

LCOV info 文件是 LCOV 工具生成的标准覆盖率数据文件,采用纯文本格式存储。文件中每条记录以特定的关键词开头:SF(Source File)表示源文件路径,LF(Lines Found)表示可执行行总数,LH(Lines Hit)表示已覆盖行数,DA(Data)表示单行的覆盖数据(格式为行号,执行次数),FN(Function Name)表示函数名,FNDA(Function Data)表示函数的执行次数,end_of_record 表示当前文件记录的结束。本工具通过解析这些标准化的记录来提取覆盖率数据并进行可视化展示。