mag*_*gol 8 c++ testing automated-tests unit-testing emulation
我们应该如何为模拟硬件的程序(如vmWare)组织单元测试和系统测试?
背景:
我们多年来一直管理着一台20世纪80年代的计算机以及相关的外围设备和软件.该系统对我们的客户至关重要,他们不想替换它.因此,我们选择为某些硬件开发仿真器.问题在于,在数千页打字机书面文字中,它的记录很少.因此,尝试和错误开发.
问题:
我们目前没有模拟器的单元测试,系统测试非常简单.通过在文本终端中键入并模拟来自外部系统的数据输入,很难测试复杂的OS是否在所有方面都有效.我们现在测试的唯一方法是从外部系统(通过X.25)增加大量输入压力,并定期自动执行一些繁重的操作.但是你很想念.
我曾经为一家做类似事情的公司工作.为了测试我们的系统(实际上是一个动态二进制翻译器,而不是模拟器),我们编写了一个测试框架,它可以本地运行相同的命令并进行翻译,然后比较结果.我们开始使用用户空间程序,但是随着我们开发更复杂的产品,我们使用相同的技术来自动化模拟硬件的测试.粗略地说,你想编写一些程序来访问这些硬件并对其进行操作,将所有输出转储到终端或某个地方的日志.然后在两侧运行这些程序(实际和模拟),并比较输出.根据您的仿真精确程度,您可能需要使用某些脚本来在差异时忽略输出的某些部分 - 地址,主机名等等.
在模拟硬件时要注意的另一件事是状态更改:特定命令可能会在两端提供相同的输出,但可能以不同的方式更改内部状态.这可能很难预料到,但一般来说,您需要确定可能受影响的内部状态,并将其与每个命令的输出一起转储.
在我们购买之前,我们开始研究更聪明的东西,使用内核跟踪工具在我们运行测试时逐步监视操作系统/硬件状态,然后比较本机和已转换运行之间的一系列步骤.这从未完全发展,但看起来很有希望.
可悲的是,所有这些东西都是内部和闭源的,所以我不能指出你可以运行和玩的任何东西,但这个想法非常合理 - 我们有成千上万的自动化测试在我们的翻译人员的每一个版本上运行非常满意的结果.
编辑:我对这个问题的思考越多,我就越敏锐.我不认为你的项目是开源的,但如果它是我喜欢参与.如果有可能,请随时与我联系.