我是一名软件工程师,将/可能被聘为固件测试工程师。我只是想了解市场上用于测试固件的一些软件工具。您能否说明它们并解释一下它们为固件提供的测试类型?提前致谢。
3 回答
测试有多种形式,可以在不同阶段进行。除了在编写代码之前进行设计验证之外,代码测试还可以分为单元测试、集成测试、系统测试和验收测试(尽管确切的术语和阶段数量可能非常多)。在 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 嵌入代码并在运行时检查它的方法来增强您的构建工具。
我发现压力测试很有用。这通常意味着在短时间内给系统大量输入,然后看看它是如何处理的。输入可以是
- 需要处理大量数据的文件。一个例子是一个包含需要由警报设备分析的波形数据的文件。
- 运行在另一台机器上的应用程序接收到的数据。例如,生成随机触摸屏的程序按下/释放数据并将其发送到调试端口的设备。
这些类型的测试可以消除很多错误(特别是在性能至关重要且有限的系统中)。一个好的日志系统也可以很好地跟踪压力测试引起的错误的原因。