4

我正在寻找有关如何在我的 STM32F7 平台上进行单元测试的建议。人们过去做了什么?你有哪些恐怖故事?你将做点什么不同的?我目前的计划有什么问题?

我的设置

  • 带有定制载体 PCB 的 STM32 Nucleo-144
  • arm-atollic-eabi-gcc编译器(暂时没有 C++)
  • 使用 Atollic TrueStudio 作为 IDE
  • 从 Ubuntu 16.04 完成的开发
  • 在板上运行 FreeRTOS

我的测试计划

有不同级别的测试;我专门谈论对不依赖于外部硬件的库/功能集进行单元测试。诸如“我的环形缓冲区实现是否正确处理滚动而没有内存泄漏”和“此位移操作是否导致结果变量中的正确字节序”之类的东西?所以我专注于这些类型的测试。

  • 将我的项目转换为使用 C++ 编译(以及所有相关的extern C必需项)
  • 将我的代码重构为“库”部分和“应用程序”部分。
  • 构建googletest(这是我们用于系统其他部分的)并将我的库链接到其中进行测试。
  • 在通过 Atollic 运行调试会话时在设备上运行单元测试。
4

1 回答 1

1

如果您真的必须在嵌入式目标上进行单元测试,您应该重新考虑这个问题,因为您编写了单元测试计划(像往常一样)以进行测试

  • 一组不依赖于外部硬件的功能。

  • 诸如“我的环形缓冲区实现是否正确处理滚动而没有内存泄漏?”之类的事情。和“这种位移操作是否会导致结果变量的字节顺序正确?”

这些是(潜在的)错误将在 PC 架构(x86,...)上以与 STM32 上几乎相同的方式发生。

同时,你应该问问自己在你的过程中会不小心发生多少错误

  • 将 [the] 项目转换为使用 C++ 编译(以及所有相关的extern C required
  • 将我的代码重构为“库”部分和“应用程序”部分。

不要误会我的意思——如果做得好(并且在项目的理想阶段),后一点可能会大大提高软件的质量。

多年来,我一直在开发具有功能安全相关性(IEC61508、SIL3)的软件——虽然可能存在一些特殊情况,当您无法将所有单元测试转移到不同的硬件平台(您的 PC)上,但我从未遇到过我自己就是这样的例子。相反,我们总是可以在某些 PC 上执行我们的单元测试,并通过在原始硬件上进行某种集成测试来补充这些单元测试。请注意,在此类(补充)集成测试中,您不必再关注库内部逻辑错误,而主要关注硬件/软件集成和系统集成。

于 2020-06-01T07:23:59.920 回答