IME の基本性能を向上させる手法 - Application Verifier
こんにちは。
今回は、IMEチームで行っているソフトウェアの基本性能を向上させるための手法、Application Verifier、を紹介したいと思います。
IME が他のソフトウエアと大きく違うところの1つに、IME は単体で動作するというよりは、母体となるアプリケーションと一緒に動作するところにあります。変換結果などをアプリケーションに渡したりするためです。この性質ゆえに、IME のモジュールの一部は、アプリケーション (プロセス) 内で動作しています。これらのモジュールの動作が不安定であるとアプリケーションに影響が出てしまうこともあり、特に、クラッシュのような問題は避けなければなりません。
クラッシュの問題に対応するという作業は、意外に困難な作業です。たとえば、コード内で間違ったこと (バッファー オーバーランなど) が起こったとしても、その影響が軽微であればアプリケーションは何事もなく動いてしまうものです。そして本当にどうしようもなくなったときに初めてクラッシュするため、クラッシュした時点では何が問題なのかもはやわからない状況になっているということはよくあるケースです。また、IME の一部のモジュールのようにアプリケーションと一緒に動作していると、クラッシュした時にはIME の問題なのか、アプリケーションの問題なのか、それを適切に切り分ける作業が必要になるため、容易には結果を得ることができません。たとえば、アプリケーション側のメモリの不正アクセスにより、IME 側のメモリが破壊されるという可能性もあります。
実際、IME 2010 の開発初期の頃には、多くのクラッシュに遭遇したものです。一昔前であれば、クラッシュしてしまうとそこで作業が中断されてしまうものでした。また、もう一度再現させようと思っても再現させることができず、闇に葬られてしまうような問題もあったかもしれません。しかし、今では、100 台規模の PC 上で実行されている自動化されたテストプロセス内で発生した1つ1つのクラッシュであっても、適切にとらえ対応することが可能になりました。
Microsoft が Application Compatibility Toolkit の一部として提供している Application Verifier (AppVerifier) は、そのような困難な問題を解決する手段を提供してくれます。Application Verifier は、コード内で間違ったことが行われたその瞬間にアプリケーションを止めてくれます。その状態を解析することで、原因となったコードを適切に把握することが可能になります。検出できるコード内の誤りも多岐にわたるため、IME に限らず、アプリケーション開発の大きな助けになります。
さらに、Windows 用デバッグ ツールを併用することで、先に挙げたような問題の切り分け、問題となるコードの抽出など、昔は高い技術力を要し、数日~数週間もかかる作業だったものを、瞬時に、かつ、高い精度で自動的に行うことができます。
IME チームは、このような Microsoft 社内で開発されている技術の進歩に支えられながら、基本性能の高い IME の開発を進めています。
松原 司牧