LEM*_*ANE 11 testing embedded microcontroller firmware
我是一名软件工程师,可能/可能被聘为固件测试工程师.我只是想了解市场上用于测试固件的一些软件工具.您能说明一下并解释一下它们为固件提供哪种类型的测试?提前致谢.
Cli*_*ord 13
测试有多种形式,可以在不同阶段进行.除了在编写代码之前进行设计验证之外,代码测试可以分为单元测试,集成测试,系统测试和验收测试(尽管确切的术语和阶段数可能非常多).在V模型中,这些将与需求和设计开发中的阶段水平对应.同样在开发和维护中,您可以执行回归测试 - 确保在应用其他更改时修复的错误仍然是固定的.
就工具而言,这些可分为静态分析和动态分析.静态工具在不执行的情况下分析源代码,而动态分析则关注执行期间代码的行为.一些(昂贵的)工具执行"抽象执行",这是一种静态分析技术,用于确定代码在执行期间如何失败而无需实际执行,这种方法计算成本高,但可以处理比传统动态分析更多的执行路径和变量状态.
最简单的静态分析形式是代码审查; 让人来阅读你的代码.有一些工具可以帮助解决这个表面上手动的过程,例如SmartBear的Code Collaborator.同样,最简单的动态分析形式是简单地在调试器中逐步执行代码,甚至只使用各种测试场景运行代码.第一个可以由程序员在单元开发和调试期间完成,而后者更适合于验收或集成测试.
虽然良好的代码审查可以消除大量错误,尤其是设计错误,但是在找到由编程语言的细微或神秘语义引起的某些类型的错误时效率可能不高.这种错误有助于使用静态分析工具(如Gimpel的PC-Lint和FlexeLint工具或Programming Research的QA工具)进行自动检测,但是低成本方法(例如将编译器的警告级别设置为高并使用多个编译器进行编译)也是如此有用.
动态分析工具有多种形式,例如代码覆盖率分析,代码性能分析,内存管理分析和边界检查.
高端工具/供应商包括Coverity,PolySpace(抽象分析工具),Cantata,LDRA和Klocwork.在低端(价格,不一定有效)是PC-Lint和Tessy等工具,甚至是开源夹板(仅限C),以及大量的单元测试工具
以下是我发现有用的一些固件测试技术......
PC上的单元测试; 即,从固件中提取函数,并在更快的平台上编译和测试它.例如,这将使您能够详尽地测试功能,而这将非常耗时.
使用自由运行的硬件定时器检测固件中断处理程序:在进入和退出时打勾,以及中断计数.跟踪每个中断处理程序的最小和最大频率和周期.该数据可用于进行速率单调分析或截止时间单调分析.
使用标准协议(如Modbus RTU)按需提供一系列状态数据.这可用于配置和验证数据.
使用自动构建过程将固件版本号构建到代码中,例如,通过从源代码存储库获取版本信息.使用#3使版本号可用.
使用lint或其他静态分析工具.使用-Wall从lint和编译器请求零警告.
通过将固件的CRC嵌入代码并在运行时进行检查的方法来扩充构建工具.