[Squeak-ja: 2886] Re: VM全体のテストについて

Yoshiki Ohshima yoshiki @ squeakland.org
2006年 3月 17日 (金) 03:13:48 JST


  おおしまです。

> 今回の本題ですが、FreeBSD用のVMを作ったりしていると、本当にこのVMは正
> しく動いているのかが気になります。

  そういうことはありますね。

> 例えば、FFIプラグインだと、
> 	FFITester class >> testAll
> でチェックすればいいのかと思うのですが、VM全体に渡ってテストをしてくれ
> るようなものってありませんでしょうか?

  VM全体にわたってのテスト、というものは今のところないと思います。

  Squeak VMの成り立ちは、VMのほとんどの部分をSqueakで書いて、それを
ANSI Cに変換して、それをコンパイルしています。マシンおよびOSに期待され
ている部分は32ビットの演算ができることと32ビットアドレス空間が取れるこ
とだけで、endianの違いなどはCのヘッダファイルに書かれたマクロで吸収し
ています。つまり、VM記述のCへの変換そのものは完全に機種非依存です。

  というわけで、Cに変換したコードをコンパイルしてVMを作り、そのVMでイ
メージが立ち上がるところまで行ったとすれば、それはVMのほとんどの箇所は
期待したとおりに動いている、ということになります。

  問題は、機種・OS依存の部分、特に入出力に関わる部分ですが、これはやっ
ぱり自動化されたテストはやや難しいでしょうね。「期待されたとおりにコン
ピュータのスクリーンにビットマップが表示されたかどうか」ということは、
人間が目で見るのが最善でしょうし。

  コードでテストできるのは、Pluginに入っているプリミティブがちゃんと呼
べたかどうか、もし返り値などに意味があるなら正しい値が帰ってきたかどう
か、というところまでかもしれません。これは、primitiveのバックアップコー
ド(primitive呼び出しが失敗したときに自動的に実行されるコード)を適切に
書き換えてやることになるでしょうか。

> VMにかかわっている方も多いと思いますので、教えていただければ幸いです。

  というわけで、あまり役に立てなくてすみません。上記のように、
primitiveが失敗したかどうかを調べることには大いに意義があると思います。
Squeak 2.4のころも、Dan Ingallsがいつのまにかtext scanningのprimitive 
に渡す定義を変えたために、通常のtext scanningがみなfailしていた、とい
うことがありました。バックアップコードが適切に書かれていたのでなかなか
誰も気にしていなかったのですが(遅い遅い機械でベンチマークを走らせてい
た僕のような人が文句を言うまで)、やっぱり人間見落としはありますからね。

  参考になれば幸いです。

-- Yoshiki



Squeak-ja メーリングリストの案内