8

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

背景:

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

问题:

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

4

1 回答 1

5

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

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

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

遗憾的是,所有这些东西都是内部的和封闭源代码的,所以我不能指出你可以运行和使用的任何东西,但这个想法非常合理——我们在每个版本的翻译器上运行了数千个这样的自动化测试非常满意的结果。

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

于 2012-05-10T14:24:28.630 回答