静的解析ツールのゲーム開発への導入事例

セガの「ファンタシースターZERO」の開発に、静的解析ツールの Coverity Prevent を導入したというITmedia の記事がありました。CEDEC の「バグを限りなくゼロにする方法」というセッションでも、CI の紹介と共に、ちょっとだけ触れられていた気がします。

静的解析ツールは、その名の通り、ソースコードを実際には動かさずに(静的に)解析して、各種のプログラムミスを検出するツールです。安いものでは、初期化忘れなど、コンパイラの警告でも出してくれそうなものや、コーディングルールに沿っているか、みたいな単純なものしか検出できません。しかし、Coverity を始めとした、理論に裏打ちされた専門の会社が作っているようなものは、メソッドをまたがったデッドロックを始めとした、様々なミスを検出してくれます。

このあたりのソフト品質を上げるタイプのツールは、効く部分が限定的な割には高いので、従来はバグが起こると致命的なアプリケーションの開発に主に使われてきたと認識しています。

しかし、いよいよ、ゲーム開発にも静的解析ツールを導入する時代なんですね。Prevent なんて高い製品はなかなか手が出ませんけれども……。

なお、OCaml などの型推論言語を使えば、静的解析ツールが指摘しそうな間違いのいくらかは、型が合わないとコンパイラが指摘してくれるようになります。が、デッドロック検出といったAPIの使用順の解析などは、まだ型推論コンパイラにまでは降りてきてないはず。小林研究室で研究しているのは知っているんですが、最近はとんと離れてしまったので、最新動向はわかりません。

あ、ちなみに、静的解析ツールは、誤検知するのが当たり前なので、ただ買って導入すればいいというものではなく、ツールが吐いた警告を吟味して、駄目な人に直させる役の人が必要だ、というのが一般的な認識です。それでも、人間が付きっきりでコードレビューするよりはよっぽどコストは安いんですけれども。