对使用RTOS的项目进行单元测试

缺口

对于下一个嵌入式系统项目,我想进行单元测试。从技术上讲,它可能不是测试驱动的开发,但我至少希望预先对单元测试进行测试并进行全面的单元测试。

我正在使用IAR EWARM工具链。我正在考虑使用cmocka,Unity或Cunit。我正在学习将µC / OS-III用作RTOS。

问题是:图片中的RTOS如何进行单元测试?EG:我应该禁用内核并以单线程应用程序的形式对代码进行单元测试,并对所有/大多数内核调用进行存根,还是有更好的方法?

示例:在µC / OS-III中,入口仍然是主要入口。从main调用任何初始化代码,然后调用OSStart()开始多任务处理。因此,当我运行测试工具时,我无法调用OSStart()

#ifdef UNIT_TEST
test_runner();
#else
OSStart(&err);
#endif

然后在任务的所有应用程序代码中,我只需要模拟消息传递并延迟对内核的调用。

那是做到这一点的最好方法。还是我更适合启动内核,为我的测试运行者创建任务并从中运行所有任务作为单个线程,或者是否有其他好的方法涉及从测试工具中生成其他任务。

斯科特·诺维尔

您似乎对单元测试有误解。您的代码是否使用RTOS无关紧要,因为单元测试涉及单独测试代码模块(即C函数)。测试期间,RTOS将无法运行。

单元测试还假定您正在根据一组定义代码功能的需求进行测试。大多数单元测试的目标是能够提供各种形式的代码覆盖。这包括声明,决策和多条件决策覆盖。

语句的覆盖范围表明您已经练习了函数中的每一行代码。

决策覆盖涉及显示所有条件的正反两面都被覆盖。

多条件决策覆盖率(MCDC)用于测试复杂的决策,即是否(a &&(b || c))并确保覆盖所有变化。MCDC测试通常仅限于非常关键的应用,例如航空电子设备,在这些应用中,故障可能会带来灾难性的后果。

通常对子例程进行打桩,即对其进行拦截和控制,以证明每个子例程均已按顺序调用,并且所传递的参数正确,并且各种返回值均能正常运行。

我承认我对您提到的工具没有任何经验,但是有许多可用的商业单元测试工具,如Cantata,LDRA TestBench,IBM Rational Test Real Time和其他适合于深度单元测试的工具。

还有针对RTOS本身的商业解决方案。我公司为µC / OS-II和µC / OS-III提供了现成的单元和集成测试包。

Scott验证软件

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章