首页
/ NASA FPrime项目中状态机自动生成代码的单元测试覆盖率优化方案

NASA FPrime项目中状态机自动生成代码的单元测试覆盖率优化方案

2025-05-23 20:47:33作者:贡沫苏Truman

在NASA FPrime项目中,状态机模块的自动生成代码(StateMachineAc.hpp/cpp)被错误地纳入了单元测试覆盖率统计范围。本文将深入分析该问题的技术背景、影响范围及解决方案。

问题背景

状态机是嵌入式系统中常见的编程模式,FPrime框架通过代码生成工具自动产生状态机实现代码。这些自动生成的代码本质上属于框架基础设施,而非开发者编写的业务逻辑代码。将它们纳入单元测试覆盖率统计会导致两个问题:

  1. 覆盖率数据失真:自动生成代码的覆盖率会人为拉高整体指标
  2. 维护成本增加:开发团队需要为自动生成代码编写不必要的测试用例

技术分析

该问题与之前处理过的类似问题(fprime-tools PR #245)具有相同的技术本质,但出现在不同的代码文件上。具体表现为:

  • 状态机自动生成的StateMachineAc.hpp/cpp文件被错误统计
  • 根本原因是覆盖率统计工具(gcovr.py)的过滤规则不完善

解决方案

通过修改gcovr.py文件中的过滤逻辑即可解决。具体需要:

  1. 在gcovr.py第94行附近添加过滤规则
  2. 明确排除StateMachineAc.hpp/cpp文件的覆盖率统计

这种处理方式与框架对其他自动生成代码(如RPC接口代码)的处理策略保持一致,符合以下设计原则:

  • 自动生成代码不应影响人工编写代码的覆盖率评估
  • 框架基础设施代码与业务逻辑代码应该分开统计

实现建议

对于使用FPrime框架的开发者,建议:

  1. 定期检查覆盖率报告中是否包含自动生成代码
  2. 在自定义代码生成器时,确保生成的代码有明确标记
  3. 在项目CMake配置中明确区分手动编写和自动生成的代码

总结

正确处理自动生成代码的测试覆盖率是保证软件质量指标真实性的重要环节。FPrime框架通过完善工具链中的过滤机制,确保了单元测试覆盖率统计的准确性,使开发者能够专注于业务逻辑代码的质量提升。这一改进也体现了框架在设计上对实用性和精确性的平衡考量。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
docsdocs
暂无描述
Markdown
828
5.49 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
494
518
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
786
1.58 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
803
1.14 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
973
2.29 K
kernelkernel
deepin linux kernel
C
32
16
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
483
313
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.02 K
769
cannbot-skillscannbot-skills
CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。
Markdown
1.27 K
814
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
652
288