殺人的な忙しい日々がやっと終わりやっとアップデートできました。最後のポストからだいぶたったのですが、今日は、どのようにC#のコンパイラはテストするのか?について書いてみたいと思います。私は、Whidbeyでは主にAnonymous Methods, Iterators, C# Expression Evaluator (Debugger)のテストを担当しています。Genericはもう一人の同僚の担当ですが、基本的にGenericはどこでも使えますのではまったく使わないという訳には行きません。 実際のテストとなると、どのコンパイラのテストも似たようなものだと思いますが、言語仕様の一行、一文字に対してテストを書いていきます。たとえば、C# 言語の仕様 2.4.4.4 文字リテラルをテストするとなると
string s1=""; //empty
string s2="\0"; // escape chars
string s3=" "; // space
と書いていきます。Unicode,エスケープ文字などはもちろん1MB以上の文字列など特殊なケース(仕様書で特に触れられていない)についてもテストしていきます。このようなテストは意外と時間はかかりますが書いてしまえばそれで終わりです。書いたテストは毎日かってに走ってますので、ちゃんとパスしているか確認すれば済みます。テストを走らせているシステムについては、また別の機会に書いてみたいと思います。しかし、Anonymous Methods, Iterators、Genericsなどの新しいのになるとテストを書くのも一苦労です。と言うのも言語の仕様が日々変更になるからです。仕様書と言ってもメモ程度のものがあればいい方、でたまにはこう動くはずだと勝手に仕様を決めながらテストを書いていきます。書いたあとのメインテナンス、特に一度テストを書き終わってからの変更は大変です。Find&Replaceをする訳にもいきませんので一つ一つ変更を確認しながらテストを修正していきます。このようにして何とか終わらせて、いざRTMとなっても、バグがありませんようにと願う日々がつつきます。