8

ハードウェア(vmWareなど)をエミュレートするプログラムの単体テストとシステムテストをどのように編成する必要がありますか?

バックグラウンド:

私たちは長年にわたり、1980年代からコンピュータと関連する周辺機器およびソフトウェアを管理してきました。このシステムはお客様にとって非常に重要であり、お客様はそれを交換することを望んでいません。そのため、一部のハードウェア用のエミュレーターを開発することを選択しました。問題は、それがタイプライターで書かれた何千ページものテキストで十分に文書化されていないことです。したがって、試行錯誤の開発です。

問題:

現在、エミュレーターの単体テストはなく、システムテストは非常に厄介です。テキスト端末に入力して外部システムからのデータ入力をシミュレートすることにより、複雑なOSがすべての面で機能するかどうかをテストすることは困難です。現在テストしている唯一の方法は、外部システムから(X.25を介して)大きな入力圧力を追加し、いくつかの重い操作を定期的に自動化することです。しかし、あなたはその時とても恋しいです。

4

1 に答える 1

5

私は以前、似たようなことをしている会社で働いていました。私たちのシステム (実際には動的バイナリ トランスレータであり、エミュレータではありませんでした) をテストするために、同じコマンドをネイティブに実行して変換し、結果を比較するテスト フレームワークを作成しました。これはユーザー空間プログラムから始めましたが、より洗練された製品を開発するにつれて、エミュレートされたハードウェアのテストを自動化するために同じ手法を使用しました。大まかに言えば、このハードウェアにアクセスして処理を実行し、すべての出力を端末またはログのどこかにダンプするプログラムを作成する必要があります。次に、これらのプログラムを両側 (実際の側とエミュレートされた側) で実行し、出力を比較します。エミュレーションがどの程度正確であることを意図しているかによっては、差分をとるときに出力の特定の部分 (アドレス、ホスト名など) を無視するスクリプトが必要になる場合があります。

ハードウェアをエミュレートする際に注意すべきもう 1 つのことは、状態の変化です。特定のコマンドは、両側で同じ出力を与える可能性がありますが、内部状態は異なる方法で変化する可能性があります。これを予測するのは難しい場合がありますが、一般的には、影響を受ける可能性が高い内部状態を特定し、各コマンドの出力とともにダンプする必要があります。

買収される前に、カーネル トレース ツールを使用して、テストを実行しながら OS/ハードウェアの状態を段階的に監視し、ネイティブの実行と翻訳された実行の間で一連の手順を比較するという、さらに巧妙な作業を開始しました。これは完全に開発されたことはありませんでしたが、非常に有望に見えました。

悲しいことに、これらはすべて内部のクローズド ソースであったため、実行して操作できるものを示すことはできませんが、アイデアは非常に健全です。非常に満足のいく結果。

編集: この問題について考えれば考えるほど、この問題に取り組みたいと思うようになります。あなたのプロジェクトがオープンソースであるとは思いませんが、もしそうならぜひ参加したいと思います。その可能性がある場合は、お気軽にお問い合わせください。

于 2012-05-10T14:24:28.630 に答える