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

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

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

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

有帮助吗?

解决方案

个人而言,我有我的嵌入代码的忠实粉丝编译目标硬件和我自己的计算机上都。例如,针对8086的时候,我同时切入点,映射到8086的硬件和DOS入口点重置。硬件的设计使所有IO是内存映射。我然后有条件编译在一个硬件仿真和有条件地改变硬件的存储器位置来模拟硬件存储器中。

如果我要在非x86平台上工作,我可能会写一个仿真器来代替。

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

有一次我们建立了一个模拟器到IO硬件。这样的系统的其余部分可以通过在CAN发送几个命令进行测试,把硬件到模拟模式。类似地,良好分解软件可具有其中IO模拟响应于软件命令的“模拟模式”。

其他提示

对于嵌入式测试,我建议你设计你的出路这在开发过程的早期。沙盒嵌入式代码,在PC平台上运行有很大帮助,然后就嘲讽之后:)

这将确保它的大部分integrety,但你仍然需要做系统测试和验收测试手动以后。

有人认识到这个问题吗?

明确地。

您找到了好的解决方案还是 处理这类 问题?

技术组合:

  • 自动化测试;
  • 暴力测试,即那些不像自动化测试那么智能,但会在很长一段时间内(几小时或几天)重复测试某个功能,并且可以在没有人工干预的情况下运行;
  • 手动测试(通常很难避免);
  • 在 PC 上的软件模拟器上进行测试(或者作为最后的手段,使用硬件模拟器)。

关于在PC编译器上编译:这对于高级模块以及具有适合测试的工具的低级模块来说肯定是有意义的。

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

不像大多数的反应,到目前为止,我不都像桌面系统,因此无法模仿桌面上的嵌入式系统的嵌入式环境中工作。

为了写出好的测试系统,您需要测试系统具有前馈和反馈。 JTAG是最常见的前馈方式来控制设备。您可以设置该设备的完整状态(甚至整个董事会,如果你幸运的话),然后设置测试代码运行。此时你会得到您的反馈意见。 JTAG还可以作为反馈设备。然而,逻辑分析仪的软件API是在这种情况下最好的。你可以寻找某些层面上针,脉冲计数,甚至从流式外设解析数据流。

提供为单个子系统测试工具/沙箱/实体模型,并且为整个项目,即仿真目标环境。

这不会删除在真实环境测试的需要,但大大降低了他们的号码作为模拟捕获大部分问题,所以到时候他们都通过和执行昂贵的人力驱动测试,你有理由相信你会传递第一次。

除了到目前为止建议要确保你的应用程序可以建立 和对正常PC的至少部分地测试(这也是有用 使用像Valgrind的工具),我会想你的软件设计。

一个项目我制作有一个组件,其用于驱动硬件,一个 用于处理管理任务和另一个网络管理。 网络管理是通过SNMP处理,所以很容易写 远程地运行驱动硬件脚本做一些事情。

要运行低级别的硬件测试我写了一个简单的脚本读者 该分析测试脚本和命令注入到的IPC我 驱动程序。由于输出是基于视频这是很难实现自动化 不是由眼睛处理其它的验证,但可以肯定的保存 我RSI。也正是在生成的脚本,压力非常有用 测试或模拟已知故障条件,以确保虫子没 重新进行。

如果我在那里做一遍,我可能会实现共享 经测试工具和实际使用的代码库发送核心 消息。然后我会包裹在python的lib(或东西 相似),所以我的测试可能是略微更“编写脚本”。

我同意大家说谁自动化硬件是必须的 - 我们使用这种方法来测试我们的一些单位的嵌入式软件。我们已经建立了完整的硬件仿真的大型双机架测试站,我们使用NI TestStand的用的LabVIEW VI,C#代码,供应商的DLL等混合来管理这一切。我们一定要考很多硬件 - 这就是为什么我们有所有的废话。如果你只是测试软件,那么你可以扩展它回到最基本的要素。测试串行接口?只需建立一个设备来模拟串行通信和行使所有消息(以及一些非有效信息),以确保软件的正确响应。测试DIO?这很简单,有很多USB外设或嵌入式设备的模拟DIO。如果时机很重要,你必须使用其他的嵌入式设备,让你要找的严格的公差,否则电脑会做得很好。

最重要的部分是要始终知道你在测试什么,而不是测试比其他任何东西。如果它的软件,确保测试是独立于硬件的最大程度的可能。如果您正在测试波形产生什么用d / A,分离出来的任务 - 测试d /与软件除了吐出的预先安排的顺序并不做任何花哨的嵌入式设备上的一个特殊构建的硬件电压等级。然后,你可以看到,如果你引用了,如果你的过滤器设置为错误的频率,等等,那么你应该能够测试独立于硬件的软件 - 使用开发板对软件进行测试,并在处理器验证行为脚是正确的。

我工作中使用的解决方案是自动化的夜间构建和测试程序。

  1. 从源代码管理中检查主干头代码。
  2. 构建项目并加载到目标上。
  3. 运行 PC 控制的自动化测试脚本。

如果您使用某种通信协议,则测试脚本很容易运行。这对于内部单元测试很有好处。让情况变得更有趣(也更彻底)的是制作一个插入电路板的线束来模拟外部 IO。

仿真有利于开发和基本的初始测试,但真实的物理运行时间是系统验证的唯一可靠方法。物理操作可以找出非代码问题(由编码方法引起),例如电压骤降、噪声、毛刺、反跳问题、竞争条件等。

长时间的系统测试也很重要。设置自动化测试以连续几天/几周连续滥用系统是消除几个月后才可能出现的问题的好方法。当事情开始变得奇怪时,告诉客户重新启动电源并不是所有行业都能接受的奢侈行为。

在我的经验,自动化硬件测试一直是至关重要的。 - 投资于在PC和对象双重汇编是一个“最好有”的功能,但选择的话,我宁愿投资于自动化硬件测试。这将是在结束以来的制造臂将要/需要的能力反正进行故障分析以更具成本效益的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top