CANN Runtime LLT 覆盖率验收政策:门槛解析、统计口径与完成判定全指南 📅 发布时间:2026/9/20 12:49:13 👁 浏览次数: CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载导读本文完整解读 CANN Runtime 开源仓库中runtime-llt-generator技能Skill所使用的 LLTLow Level Test覆盖率验收政策。该政策规定了在生成或修改 Runtime 单元测试时如何圈定覆盖率统计范围、如何解析覆盖率门槛、如何采集与判定覆盖率以及判定达标所必须满足的质量条件。读完本文你将掌握一套可复用的覆盖率达到标判定方法既能准确设定coverage_threshold入参、理解默认 80% 的语义与生效优先级也能在 LCOV/LLVM coverage 报告基础上完成可核对的分子分母计算并避免把行覆盖率达标误当作测试行为正确的常见陷阱。一、政策定位与适用范围本文档对应的政策文件位于仓库 coverage-policy.md它是runtime-llt-generatorSkill 在新增或修改 LLT时的完成判定依据不替代仓库自身的 UT 规范。与之配套的两份规范由 runtime-ut-guidelines.md 引用包括UT代码规范硬性规范断言、mock 与全局状态清理、测试隔离、可维护性。UT用例开发指导 与 Runtime DT用例开发总纲用例设计方法论与校验方式。覆盖率政策与这些规范的分工是UT 规范管用例怎么写覆盖率政策管覆盖率怎么验收。覆盖率只回答代码被执行了没有而断言是否有效、行为是否正确由 UT 代码规范和用例设计规范共同负责。1.1 适用范围的关键约束政策第一条即声明其使用边界开始前记录工作区已有修改作为本次任务的基线。覆盖率的统计只针对用户指定范围或本次 LLT 涉及的生产代码改动不包含基线中的无关修改。仅修改测试时默认统计目标函数的全部可执行行只有用户或缺陷已明确范围时才按分支或代码区间统计。声明、注释、空行、当前产品未编译的代码不计入分母——这与仓库 CMake 构建中的ENABLE_UT/ENABLE_COV开关语义一致见第五节。排除代码时需逐行说明原因且可由配置启用的代码不得排除——防止通过剔除未编译路径来虚增覆盖率。二、门槛入参与解析规则2.1coverage_threshold入参的写法政策定义了可选入参coverage_threshold用于表示目标范围的行覆盖率门槛。接受以下写法写法含义是否合法8080 个百分点合法80%80 个百分点合法87.5%87.5 个百分点小数合法自然语言覆盖率达到 90%90 个百分点视为同一入参-5/120/abc越界或不可解析非法规则要点数值单位始终是百分点必须是0到100之间的有限值。参数缺失时直接采用默认值参数越界、无法解析或同一请求给出互相冲突的值时只询问会影响门槛判定的歧义不做无谓提问。用户值与仓库强制值冲突时不得静默降级必须取较高者见 2.3。2.2 默认门槛80%用户未指定coverage_threshold时请求门槛默认为80%。需要特别强调的是政策原文明确注明80% 是本 Runtime Skill 的默认值不是通用行业标准。也就是说这个 80% 是runtime-llt-generator这一 Skill 在与仓库 workflow 配合时采用的本地默认不能据此推论全行业 UT 覆盖率都应为 80%或CANN 仓库统一要求 80%。2.3 强制门槛优先级取较高者需求、目标仓库 workflow 或其他强制规则若规定了最低覆盖率实际生效门槛按以下公式确定实际生效门槛 max(请求门槛, 强制最低值)示例用户指定coverage_threshold75%但仓库 workflow 规定最低 80%则本次实际生效门槛为 80%若用户指定 90%则取 90%。政策要求开始生成前记录请求门槛及其来源用户输入或默认值、仓库强制最低值和实际生效门槛交付时同时报告这些值。这保证了覆盖率验收过程可审计、可复核。三、完成门槛行覆盖达标只是必要条件政策明确完成门槛包含两层二者缺一不可行覆盖率达标按适用范围统计的行覆盖率必须达到实际生效门槛。行为验证充分所有可达的新建或修改判断结果、错误返回、边界和资源清理路径必须有直接用例不能用行覆盖率门槛替代分支与行为验证。第 2 条直接呼应了 UT代码规范 的规则 2断言必须覆盖关键可观察结果——失败场景必须校验错误码、错误状态或关键保护行为而不是只断言执行结束。政策同时给出一个重要警示覆盖率只说明代码被执行不能证明断言有效或行为正确。这是全篇的核心心智模型覆盖率是执行证据不是正确性证据。四、采集与判定从报告明细读数4.1 采集流程六步政策规定了覆盖率采集的固定流程先检查当前环境查看当前 workflow、tests/build_ut.sh --help、准确的 CMake target 和覆盖工具不复用可能已过期的命令。同一快照构建运行使用与被测源码、测试源码同一工作区快照构建并运行目标用例筛选结果必须实际执行大于 0 个用例。从明细数据读取目标行从 LCOV、LLVM coverage 或仓库等价工具的明细数据读取目标行不得从控制台总体PASS推断覆盖率达标。记录完整元信息commit/工作树状态、覆盖口径生产 diff 或 test-only 目标范围、构建 target、测试 binary、筛选条件、报告路径、可执行总行、命中行、未命中行、未知行和百分比。平台分别采集同一目标具有平台实现时分别采集受影响平台的结果一个平台的覆盖率不能外推到另一个平台。unknown 行处理可执行代码未插桩、未构建、未进入报告、无法映射到当前二进制或统计范围不能解释时必须记为unknown并阻止达到实际生效门槛的结论。报告缺失或源码与二进制快照不一致时结论只能是覆盖率未验证。4.2 计算口径公式政策给出的唯一合法计算公式为scope_line_coverage 已命中的目标范围可执行生产代码行 / 目标范围可执行生产代码总行配套判定规则分子、分母、未覆盖行和unknown行必须能从报告明细中核对。unknown不为 0 时不能判定达标。分母为 0 时记为N/A不算达标。没有判断分支的函数分支覆盖率记为N/A但仍需测试调用方可触发的边界情况。也就是说一个目标函数没有可执行行或报告无法映射的场景永远不能宣称覆盖率达标只能如实报告N/A或覆盖率未验证。4.3 仓库中的覆盖率工具链在 CANN Runtime 仓库中覆盖率采集依赖 tests/build_ut.sh 的-c/--cov参数其关键实现逻辑与政策第 1、3、4 条完全对应-c, --cov同时打开ENABLE_UTon与ENABLE_COVon见 tests/build_ut.sh构建阶段通过 CMake 传入-DENABLE_COV${ENABLE_COV}见 tests/build_ut.sh运行时先用 gtest 生成 XML 报告--gtest_outputxml:${report_dir}/${filename}.xml再调用lcov -c -d ${ut_dir}采集、lcov -r剔除/usr/*、output/*、tests/*、第三方库与build/*等目录最后genhtml生成 HTML 报告见 tests/build_ut.sh。从 CMake 侧看910B 平台 CMakeLists 在ENABLE_GCOV开关开启时追加-fprofile-arcs -ftest-coverage插桩并在链接期追加-lgcov同时 UT target 接口统一链接了-lgcov见 910B CMakeLists。这解释了政策第 6 条可执行代码未插桩……必须记为 unknown的落地方式只有以-c/--cov构建的二进制才携带覆盖率插桩信息未插桩的二进制天然无法进入报告明细。需要特别留意的是脚本中的一处历史路径build_rts的 CMake 参数里使用的是-DENABLE_COV见 tests/build_ut.sh而 UT 编译选项里生效的是ENABLE_GCOV见 910B CMakeLists。政策第 1 条要求先检查当前 workflow、tests/build_ut.sh --help、准确 CMake target正是为了在构建前核对这类开关的实际接线避免凭记忆拼接命令。4.4 平台分支必须分别采集政策第 5 条的背景是 Runtime 仓的多平台 UT 工程布局。从 tests/ut/runtime/runtime/test 目录可以看到测试用例按平台拆分到platform/910B/、platform/950/、platform/arch5162/、platform/arch9201/、platform/cloud/、platform/dc/等多个独立目录每个平台拥有各自的CMakeLists.txt、main.cc、stub/hal_stub.cc与平台专属 fixture。例如 910B 平台构建出runtime_utest_task_910B、runtime_utest_api_910B、runtime_utest_xpu_910B等多个 gtest 可执行文件见 910B CMakeLists。因此当被测代码存在平台实现差异时必须为每个受影响平台分别构建、运行并采集覆盖率一个平台如 910B的通过结果不能外推为 950 或 David 等其他平台已覆盖。五、质量检查覆盖率之外的硬性要求即使行覆盖率达标政策仍要求对用例本身做质量审计有效断言对返回码、出参、对象状态、副作用、回调、资源和依赖交互使用有效断言。场景覆盖检查成功、非法输入、边界、依赖失败、重复调用、失败清理和适用的平台分支。未覆盖代码审计检查未覆盖代码是否暴露遗漏场景、不可达代码、错误挂载或错误 target。用例独立性使用独立、可重复、顺序无关的用例恢复 mock、全局状态、环境变量和临时资源。这四点与仓库 UT代码规范 的规则一一对应规则 1每个测试用例必须有有效断言对应第 1 条规则 2断言必须覆盖关键可观察结果对应第 1、2 条规则 3mock 对象必须在测试退出时 verify 或 reset、规则 4修改全局状态后必须恢复对应第 4 条规则 5测试用例之间不得互相依赖、规则 6临时文件和目录必须清理对应第 4 条。在 UT用例开发指导 中也可以找到配套的实践模式例如在TearDown中调用Mock::VerifyAndClear或GlobalMockObject::verify()来收口 mock 状态。六、与 LLT 生成工作流的衔接覆盖率政策是 runtime-llt-generator SKILL.md 工作流程第 5 步构建、运行和覆盖率的执行依据。结合该 SKILL 的完整工作流建立被测范围 → 设计行为矩阵 → 选择放置位置和构建挂载 → 编写 LLT → 构建/运行/覆盖率覆盖率验收的完整闭环如下生成前记录工作区基线确定请求门槛用户输入或默认 80%、仓库强制最低值、实际生效门槛并记录三者来源。生成中只修改目标测试及其必要构建资产新增测试文件必须加入准确的CMakeLists.txt源文件列表若新增模块需要tests/build_ut.sh -u name独立执行才修改脚本的ut_path_map/target 映射。验证时以-c构建准确 target → 直接运行包含新用例的 gtest binary → 证明筛选后实际执行大于 0 个用例且无失败/超时 → 按本政策采集覆盖率并与实际生效门槛核对。交付时同时报告请求门槛及来源、实际生效门槛、覆盖范围、实际结果、未覆盖/未知行以及未执行的全量验证、平台路径和剩余风险。政策与 SKILL 共同强调的已知陷阱包括不假设tests/build_ut.sh会把--后的gtest_filter透传给二进制不用全仓覆盖率掩盖目标改动未覆盖不把行覆盖率当作断言有效性的替代品不把单个平台 fixture 的通过结果外推为所有平台已覆盖。七、常见问题速查问题答案未指定门槛时默认是多少80%且这是 Runtime Skill 的本地默认不是行业通用标准用户指定门槛与仓库强制值冲突怎么办取较高者为实际生效门槛不得静默降级覆盖率统计的分母包含什么仅目标范围内的可执行生产代码行声明、注释、空行、未编译代码不计入能否从控制台PASS判断覆盖率达标不能必须从 LCOV/LLVM coverage 明细数据读取目标行报告中有unknown行怎么办unknown不为 0 时不能判定达标目标范围没有可执行行怎么办记为N/A不算达标一个平台覆盖达标能代表其他平台吗不能受影响平台必须分别采集行覆盖率达标是否意味着测试合格不是分支、错误返回、边界和资源清理路径仍需直接用例断言有效性另行审计排除代码需要满足什么条件逐行说明原因且可由配置启用的代码不得排除八、结语覆盖率验收的本质是证据链而非单一百分比从圈定统计范围、解析门槛优先级到按同一快照构建运行、从报告明细核对分子分母再到对unknown/N/A的诚实上报每一步都有明确的判定规则。在 CANN Runtime 仓库中这套政策与 tests/build_ut.sh 的-c/--cov工具链、各平台 CMakeLists.txt 的ENABLE_GCOV插桩以及 UT代码规范 的断言与状态清理要求共同构成完整闭环。掌握了这套方法你就能在生成 Runtime LLT 时给出可审计、可复核、不可被看起来通过了糊弄的覆盖率结论。赞分享CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载相关推荐CANN Runtime LLT 用例生成实战指南从行为设计到覆盖率验收的完整方法论CANN Runtime LLT 用例生成实战指南从行为设计到覆盖率验收的完整方法论 CANN Runtime 开源仓库 cann/runtime 为运行CANNAscend人工智能任务调度CANN Runtime LLT 精准验收指南变更驱动的用例筛选与定向运行CANN Runtime LLT 精准验收指南变更驱动的用例筛选与定向运行 CANN Runtime 代码仓cann/runtime维护着一套庞大的 RuCANNAscend人工智能任务调度CANN Runtime Example API 覆盖率分析从零构建可量化、可追踪的接口覆盖报告CANN Runtime Example API 覆盖率分析从零构建可量化、可追踪的接口覆盖报告 导读 本文面向需要在 CANN Runtime 仓库中评估CANNAscend人工智能任务调度上一篇高性能实时面部关键点检测技术深度解析MediaPipe Face Mesh的实现原理与优化策略下一篇开源项目 PoC 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考