コベリティ日本支社 安竹由起夫氏 | セガ 高橋敦俊氏 |
■「プログラマ育成+静的解析」という幸せな選択
静的解析ツールはコードを実行することなくランタイムエラーを引き起こす不具合を検知し、修正方法を示唆するツールです。これにより、膨大なソースコードから手動で不具合を探す必要が無くなり修正のコストを削減し、実開発ではよくある"不具合を含んだコードを再利用することで不具合が拡散する"ようなことも防いでくれます。エンジニアは不具合を探すという後ろ向きの行程ではなく、本来のクリエイティブな作業に注力できるようになります。
静的解析ツールを使う理由 | ワークフローの中での位置付け |
ゲームだけでなくソフトウェア開発全般で活用されていて、これまでに全世界で1100社以上が導入していて、ミッションクリティカルな現場でも活用が進みます。例えば先日話題を集めたヒッグス粒子を発見した欧州合同原子核研究所(CERN)もその一つ。CERNでは 「Coverity Static Analysis」を活用してヒッグス粒子を検出したプログラムも含めて、開発や不具合修正に活用していて、その様子はウェブサイトで公開されています。また、NASAのジェット推進研究所では火星探査機「Curiosity」を制御するプログラムでも活用しているとのこと。
「Coverity Static Analysis」では通常、構成管理ツールにチェックインされた最新のコードセットに対して静的解析を行います。単体のファイルではなく依存関係も考慮しながら、プロジェクト全体を解析するためより確かな解析結果を得る事ができます。また、エンジニア個人の手元でも随時、静的解析を行うことも可能です。チェックイン前の単体ファイルについても不具合を検知し、それが取り除かれた物だけをチェックインするようになります。手元の解析は随時、全体の解析は「だいたい各社とも1日1~2回ペース」というのが基本的なワークフローとなります。
コベリティ日本支社が「Coverity Static Analysis」を導入している国内のゲームデベロッパーを対象にアンケートを行った結果によると、総コード行数1千970万行のソースコード1000行あたりの平均不具合検出数は約1.7個でした。一方、一方、実際にアンケート実施時点までに修正した不具合は1000行あたり 0.51件で、誤検知の割合は全体の8%でした。。別の調査データによれば不具合の修正に要する工数は「Coverity Static Analysis」の導入前は1件あたり16人時間かかっていたのが、導入後には2人時間へと大幅に削減されたそうです。もしゲームが50万行あったとすると、その削減効果は447人日にもなります。
1000件あたりの不具合検出数 | 実際に修正した不具合は0.51件 |
■セガでは静的解析は当たり前
続いてセガで開発支援を担当する高橋敦俊氏が登壇。高橋氏は1991年にセガに入社。『プロサッカーチームをつくろう』や『ぷよぷよ』など開発を手掛ける一方、2年目から新人研修も担当してきました。
セガでの「Coverity Static Analysis」の導入は5年前の一つのプロジェクトチームの強い意向から始まったそうです。導入の結果は目覚しいもので、すぐに他のチームでもチームの立ち上げの最初にワークフローに組み込むのが一般化したそうです。高橋氏は静的解析ツールの威力について「大抵のプロジェクトではコーディング規約を作ったり、手動のコードレビューなどを行なってきました。これらは不具合を減少させる効果がありますが、ゲーム開発の終盤で作業量が爆発的に増加してしまうと、何もかもが追い付かなくなり、不具合が不具合を呼ぶような状況になってしまいます。Coverity Static Analysisはこれを変えました」と説明します。
セガにおけるワークフロー | 実際の運用 |
導入に際しての抵抗もそう多くなかったそうです。何よりエンジニアにとっては便利になるばかりで不便は殆どありません。「不具合を指摘されて直す際には、ツールが詳細な情報を与えてくれるので対応は簡単」とのこと。しかも、「他の人間に指摘されるよりもツールに指摘される方が人間にとっては抵抗が少ない(笑)」といった良さもあるとか。初期のサーバー導入やワークフローの整備は手間ですが、運用で大きな問題となる点は少なそうです。ただ、不具合を誰が担当するか判断が付きづらいケースもあるとのことで、それを判断する人間は必要となりそうです。
セガでは「Coverity Static Analysis」の導入によって「不具合は直ぐに潰す」というのが文化として醸成されてきたそうです。「大きなビルドでは不具合を全て修正するようにしています。ゲームの開発完了についても、全ての不具合に対応が終わった時点という風になりつつあります。社外の協力会社さんに一部の開発を委託するケースもありますが、そうした場合にも担当者の方にはCoverity Static Analysisへのアクセスを提供し、社内と同じ基準で運用してもらっています」(高橋氏)ということで、社外にもこの文化は広がりつつあるようです。
開発の終盤には平行してデバッグの作業を行なっていくことになりますが、このデバッグを簡素化する効果もあったようです。「事前に不具合を取っているので、デバッグも楽になります」(高橋氏)
また、エンジニアの教育という意味でも「Coverity Static Analysis」は大きな役割を果たしていると言います。「新入社員として入ってくるエンジニアでも学生時代にプログラムの経験があるという方は少なくありません。しかしデバッグやバグに対する意識はそう高くないのが殆どです。なかなかそれを教える機会もありません。今までは実際にプロジェクトに投入されてから、バグを量産して先輩に怒られるというのが一般的でした」。しかしツールを導入することで、手元でバグを教えてくれるため「どんな時にバグが発生するのか経験を積むことができ、バグに対する認識や意識の底上げになる」とのこと。
プログラミング初心者に見られる傾向 | バクに対する認識を変える効果があった |
一方でベテランのエンジニアにとっても意味があるようで、「長い経験の中で見落としや、ちょっとした手抜きに走ってしまった場合にもCoverity Static Analysisはきちんと指摘してくれます。他人に言われるとプライドで直しにくい場合もありますが、システムに言われると抵抗も少ないようです」(高橋氏)とのことでした。
ゲームの規模が大きくなり、ソースコードの総量は増え、チームのメンバーも増えます。それに伴って発生する不具合への対処やデバッグは工数を更に増大させています。セガの事例にもあるように導入の効果は絶大で、エンジニアが本来のクリエイティブな作業に集中できる環境を作るためにも、こうした静的解析ツールの導入を検討する必要がありそうです。
なお、コベリティ日本支社ではトライアル版の提供も行なっています。セッションに登場したセガの場合も、トライアルで導入を行い、「目からウロコ」ということで本採用が決定したそうです。ウェブサイトから申し込みが可能ですので、ぜひチェックしてみてください。