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