シミュレータに期待されるのは、エミュレータもどきではありません。
間抜けな話をしばしば眼にします。
デバッグ用のシミュレータの挙動が、リアルシステムと異なることについて指摘をすると、シミュレータの担当者が・・・
シミュレータは実物ではないので、そんなトリビアな挙動まで再現できません!!
とキレルのです。中堅技術者の切れは、もっと別の場面で見たいものです。
よくわからないのですが、リアルシステムで再現できないようなことを再現テストしたりするためにシミュレータは使うものだと思うのです。
たとえば、航空機パイロットは、フライトシミュレータを使って、エンジン停止時の飛行訓練を行います。実際に飛んでいる最中にエンジンを停めてみれば済む話ですが、あまりにも危険なのでシミュレーションのみおこないます。
たとえば、自動車の衝突シミュレータは、自動車を壊さずにテストできるのですが、実際の挙動とあまりにも違うので、長年、絵に描いたもちでした。
たとえば、月面着陸シミュレータは、誰も行ったことが無い月面に着陸する訓練のために用いられました。月面の地形データがうそばっかりだったことを除けば、概ね役に立ったとのことです。
さて、パイロットも、自動車も、月着陸船も、未完成状態でシミュレーションを受けます。そうして問題点や不具合箇所をあぶりだすわけです。それはハードだけでなく、ソフトウェア、さらに言えば、運用面にまでおよびます。
シミュレータがしょぼくても、端折ってテストすればよろしい。そのテストが製品の完成度に及ぼす影響をアセスメントした上であれば何も問題ないでしょう。
前にも書きましたが、リアルシステムの一部をシミュレータにかける場合、どちらがどちらのテストをおこなうのかに気を配る必要があります。
そうでないと、手書きの目盛りで定規を校正するハメに陥るのです。現場風に言えば、「どれがカミサマか」よく考えて仕事をする必要があります。
仕様や機能があいまいなシミュレータを用いてリアルシステムのテストをするくらい危険なことはありません。もっと言えば、まったくの無駄かもしれません。
シミュレータが実物と違うのは当たり前です。それは、「実物では再現が難しい環境」をテストターゲットのために提供することができる利点そのものです。そこが理解できていない連中にシミュレータを任せると不幸が始まります。
エミュレータはターゲットそのものをまねればよろしいがシミュレータは、それがテストターゲットなのか、テストホストなのか、あるいはテスト環境なのかでぜんぜん求められるものが違うのです。