Testing 如何在嵌入式系统中执行回归测试

Testing 如何在嵌入式系统中执行回归测试,testing,embedded,regression-testing,automated-tests,Testing,Embedded,Regression Testing,Automated Tests,在嵌入式环境中或者在自动化测试的可能性非常有限的其他情况下,运行回归测试有哪些良好的实践和策略 根据我的经验,许多测试必须手动执行,即测试人员需要按下一系列按钮,并验证机器是否正常工作。作为开发人员,很难保证您的更改不会破坏其他内容 如果没有适当的回归测试,在大型重构等过程中情况会变得更糟 有人认识到这个问题吗?您是否找到了一个很好的解决方案或流程来处理此类问题?对于嵌入式测试,我建议您在开发过程的早期设计解决方案。将嵌入式代码沙箱化以在PC平台上运行会有很大帮助,然后再进行模拟:) 这将确保大

在嵌入式环境中或者在自动化测试的可能性非常有限的其他情况下,运行回归测试有哪些良好的实践和策略

根据我的经验,许多测试必须手动执行,即测试人员需要按下一系列按钮,并验证机器是否正常工作。作为开发人员,很难保证您的更改不会破坏其他内容

如果没有适当的回归测试,在大型重构等过程中情况会变得更糟


有人认识到这个问题吗?您是否找到了一个很好的解决方案或流程来处理此类问题?

对于嵌入式测试,我建议您在开发过程的早期设计解决方案。将嵌入式代码沙箱化以在PC平台上运行会有很大帮助,然后再进行模拟:)


这将确保大部分测试的完整性,但您以后仍需要手动进行系统和验收测试。

为单个子系统和整个项目提供模拟目标环境的测试工具/沙盒/模型


这并没有消除在真实环境中进行测试的需要,但大大减少了测试的数量,因为模拟将捕获大多数问题,因此当这些问题全部通过并且您执行昂贵的人工驱动测试时,您有理由相信您将第一次通过测试。

,我非常喜欢在目标硬件和我自己的计算机上编译我的嵌入式代码。例如,当以8086为目标时,我包括一个映射到8086硬件上重置的入口点和一个DOS入口点。硬件的设计使得所有IO都是内存映射的。然后,我在硬件模拟器中有条件地编译,并有条件地将硬件内存位置更改为模拟硬件内存

如果我在非x86平台上工作,我可能会编写一个模拟器

另一种方法是创建一个测试台,其中硬件的所有输入和输出都通过软件控制。我们在工厂测试中经常使用这种方法

有一次,我们在IO硬件中内置了一个模拟器。通过这种方式,可以通过CAN发送一些命令,将硬件置于模拟模式,从而测试系统的其余部分。类似地,功能完善的软件可能有一个“模拟模式”,在该模式下,IO根据软件命令进行模拟

有人认识到这个问题吗

非常肯定

你找到好的解决方案了吗 处理这类问题的过程 有问题吗

技术的组合:

  • 自动化测试
  • 蛮力测试,即不如自动化测试智能化,但在长时间(数小时或数天)内重复测试功能,并且可以在没有人工干预的情况下运行的测试
  • 手动测试(通常难以避免)
  • 在PC上的软件仿真器上进行测试(或者作为最后手段,在硬件仿真器上进行测试)
关于在PC编译器上编译:这对于高级模块和具有测试适用线束的低级模块来说肯定是有意义的


例如,当涉及到必须处理来自多个源的实时信号的部分代码时,仿真是一个很好的起点,但我认为这还不够。在尽可能真实的环境中,在实际的硬件上测试代码通常是无可替代的。

除了到目前为止关于确保应用程序可以构建的建议之外 并且至少在普通PC上进行部分测试(这对于 使用Valgrind等工具,我会考虑您的软件设计

我参与的一个项目有一个驱动硬件的组件,一个 用于处理管理任务和另一个网络管理任务。 网络管理由SNMP处理,因此易于编写 远程运行以驱动硬件执行某些操作的脚本

为了运行底层硬件测试,我编写了一个简单的脚本读取器 解析测试脚本并将命令注入我的 司机。由于输出是基于视频的,因此很难实现自动化 用肉眼以外的方法验证操作,但它确实节省了时间 我是RSI。它在生成强调 测试或模拟已知故障条件,以确保不会出现错误 再次发生

如果我重新做一遍,我可能会实现一个共享的 测试线束使用的库和发送核心的真实代码 信息。然后,我会用python(或其他什么)来包装这个库
类似的)所以我的测试可以稍微“脚本化”。

根据我的经验,自动化硬件测试非常关键在PC和target中投资双重编译是一个“很好拥有”的特性,但如果有选择,我更愿意投资于自动化硬件测试。这最终将是一个更具成本效益的解决方案,因为制造部门无论如何都希望/需要故障分析的能力。

我同意所有人所说的自动化硬件是必须的-我们正在使用这种方法对我们的一些单位的嵌入式软件进行测试。我们已经建立了两个大型机架式测试站,全是硬件模拟器,我们使用NI测试台,并混合使用Labview VIs、C#code、供应商DLL等来管理所有这些。我们必须测试很多硬件-这就是为什么我们有这些垃圾。如果您只是在测试软件,那么您可以将其扩展到最基本的功能。测试串行接口?只需构建一个设备来模拟串行通信,并练习所有消息(以及一些无效消息),以确保软件正确响应。测试DIO?这很简单,有很多USB外设或嵌入式设备来模拟DIO。如果时间很重要,你就必须使用另一个嵌入式设备来获得你想要的严格公差,否则会出现一个错误