【问题标题】:Test an emulator测试模拟器
【发布时间】:2012-05-19 03:10:59
【问题描述】:

对于模拟硬件的程序(例如 vmWare),我们应该如何组织单元测试和系统测试?

背景:

多年来,我们一直在管理一台 1980 年代的计算机以及相关的外围设备和软件。该系统对我们的客户至关重要,他们不想更换它。因此,我们选择为某些硬件开发仿真器。问题在于它在数千页打字机书面文本中的记录很差。因此,这是尝试和错误的开发。

问题:

我们目前没有模拟器的单元测试,系统测试非常附加。很难通过在文本终端中键入并模拟从外部系统输入的数据来测试复杂的操作系统是否在各个方面都工作。我们现在测试的唯一方法是从外部系统(通过 X.25)添加一个大的输入压力,并定期自动化一些繁重的操作。但是你错过了很多。

【问题讨论】:

  • 您是否可以在测试环境中复制设置并一次模拟一个外围设备?
  • 可能是个疯狂的想法,但是你有没有可能建立一个系统,可以将所有输入的副本发送到真实系统,发送到模拟器,然后比较模拟器的输出到真实系统?

标签: c++ unit-testing testing automated-tests emulation


【解决方案1】:

我曾经在一家公司工作,从事类似的工作。为了测试我们的系统(它实际上是一个动态二进制翻译器,而不是一个模拟器),我们编写了一个测试框架,它将在本地运行相同的命令并翻译,然后比较结果。我们开始使用用户空间程序来做这件事,但是随着我们开发更复杂的产品,我们使用相同的技术来自动测试仿真硬件。粗略地说,您想编写一些程序来访问该硬件并对其进行处理,将所有输出转储到终端或某处的日志中。然后在两边(真实的和仿真的)运行这些程序,并比较输出。根据您的模拟的精确程度,您可能需要一些脚本来在区分时忽略输出的某些部分 - 地址、主机名等。

在模拟硬件时要注意的另一件事是状态更改:特定命令可能会在两侧提供相同的输出,但可能会以不同的方式更改内部状态。这可能很难预料,但通常您需要识别可能受到影响的内部状态并将其与每个命令的输出一起转储。

在我们被收购之前,我们开始研究更聪明的东西,在我们运行测试时使用内核跟踪工具逐步监控操作系统/硬件状态,然后比较原生运行和翻译运行之间的一系列步骤。这从未完全开发,但看起来很有希望。

遗憾的是,所有这些东西都是内部和闭源的,所以我无法为您指出任何可以运行和使用的东西,但这个想法非常合理 - 我们在每个版本上运行了数千个这样的自动化测试我们的翻译人员取得了非常令人满意的结果。

编辑:我对这个问题想得越多,我就越想解决这个问题。我不认为你的项目是开源的,但如果是的话,我很乐意参与。如果有可能,请随时与我联系。

【讨论】:

  • 很遗憾,该项目不是开源的,所以没有外界帮助的可能。但是感谢您的关注
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多