開発のアウトソーシングやオープンソース利用が進み、製品品質の担保が悩みの種となりつつある。巨大化・複雑化するソフトウェアの状況を考えてみても、手作業や目視ではなく静的解析ツールなどで自動化するのが現実解といえるだろう。
静的解析ツールの一つに、米スタンフォード大学の研究室発の「Coverity Static Analysis」という製品がある。開発を手がける米Coverity社のチーフアーキテクト Andy Chou氏に、現在の開発動向から見た静的解析ツールの需要性や、最近の米国のトレンドについて聞いた。
![米Coverity チーフアーキテクト Andy Chou氏](http://cz-cdn.shoeisha.jp/static/images/article/5237/1s.jpg)
効果的な静的解析ツールを選ぶ3つのポイント
――静的解析ツールが必要とされる背景に、開発業界におけるどのような変化があったのでしょうか
組み込み開発においては、システム側でもデバイス側でも、ソフトウェアに対する価値が高まってきています。スマートフォンを例に挙げて考えると、ハードウェア、タッチスクリーン、ワイヤレスアクセスなどは昔から存在していましたが、対応するスマートフォンのアプリケーションは最近になってから出てきたものです。今後はそれらのソフトウェア開発に力を入れていくことで、製品の競争力が増していくと思います。
一方で、機能が増えてきたことによりコードサイズも非常に大きくなってきました。ソースコードの開発をアウトソーシングしたり、オープンソースから取り入れる場合などは、さらにコードは複雑化し、ソフトウェアの整合性を保つのが難しくなってしまうため、コストやリスクを軽減できる静的解析ツールの需要が高まってきたと言えます。
――静的解析ツールを導入する際のポイントを教えてください
静的解析ツールを効果的に使用するには、3つのキーポイントがあります。1つ目は「静的解析ツールによって出力されたバグレポートの内容が正しいかどうか」という点です。誤検出が多いと、開発者にとってバグレポートは無意味なものとなってしまいます。2つ目は「バグレポートの内容に十分な情報が記載されているか」。3つ目は「現在ある開発プロセスの中に、そのツールがシームレスにフィットするか」です。
――では、静的解析ツール「Coverity Static Analysis」では、具体的にどのようにプログラムの解析が行われるのでしょうか
「Coverity Static Analysis」では、プログラムの流れである「パス」を取り出して解析し、ソースコード中にインラインで表示します。ブランチのディレクション(各条件分岐でどちらを選択したか)は緑、エラー関係の情報は赤のイベントメッセージとしてソースコードの横に可視化されるため、開発者はプログラムのイベントやエラーの発生箇所を容易に把握できます。
![パスを解析してイベントメッセージを表示している画面](http://cz-cdn.shoeisha.jp/static/images/article/5237/p1s.gif)
――他の製品と比べてCoverity Static Analysisはどういった特長があるのでしょうか
弊社製品の一番の強みは、誤検出率が非常に低いことです。通常で誤検出率を平均20%未満に抑えることができます。また、ソースコードが1,000万行を超えるような大規模システムの解析も可能です。
速度の面でも、使用しているハードウェア次第ですが、数百万行であれば数時間以内に行うことができます。大規模システムのようにコードが1,000万行以上だと、解析に1日~数日かかる可能性もありますが、差分のみを解析することで時間を抑えることができます。
さらに、クラッシュを起こすような欠陥、セキュリティーエラーなど、さまざまなタイプの欠陥を検出できる点、また、マッピング機能により特定の欠陥を使用して作られた製品ラインおよび他のバージョンへの影響を容易に確認できる点も類似製品との違いだと言えるでしょう。
最も重要なことは、開発者にとって有益であるという結果を速くきちんと出すことなので、私たちは常に精度が高く、情報として充分な数を、高い解析技術により短期間で検出することに注力しています。
![静的解析ツール「Coverity Static Analysis」(最新版Coverity 5)スクリーンショット](http://cz-cdn.shoeisha.jp/static/images/article/5237/sc.gif)
米国における静的解析ツールのトレンド
――最近のUS市場におけるトレンドには、どのようなものがありますか?
Coverity Static Analysisが使われている主な市場には、通信事業者、軍隊・宇宙航空関係、モバイル関係があります。どれもソフトウェアに欠陥があった場合の修正コストが高く、リコールも現実的に難しい市場なため、静的解析技術の需要が高く、非常に早期から取り入れられてきました。
最近、ソースコードの品質を重視し始めた市場としては、金融、電子機器、ソフトウェアベンダー、Eコマースなどが挙げられます。
また先ほどの話と重複しますが、ソフトウェア開発の大半は1社だけで行っている訳ではありません。機能の多様化によるコードサイズの増加に加え、ソースコードの開発をアウトソーシングしたり、オープンソースから取り入れるケースが増えたことで、より複雑さが増しています。現状、これら多くのソース管理は難しく、製品全体の品質を維持することが難しい状態になってきています。
ソフトウェアの整合性を保つためには、ソフトウェアのサプライチェーン全体を見通して管理・チェックする必要があります。社内・社外ともにソフトウェアの品質に対してきちんと目を配っていかなければならないという点が、現在の課題と言えるでしょう。
その他のトレンドとして、大規模システム開発の際に、企業によっては一部は日本、一部はインドと、グローバルに分散して開発を行っている場合があります。こういったケースで欠陥情報の同期を図りたいというニーズも増えてきているようです。
――静的解析ツールの投資対効果(ROI)については?
投資対効果(ROI)を考えるとき、2つの側面から考えることができます。1つは、コスト削減です。Coverity Static Analysisの利用により、ソフト開発の早い段階で問題を見つけることができるため、コストを削減できます。2つは、リスク低減です。一度発見したバグに関しては、以降の開発でもあらかじめ見つけることができるため、時間的なリスクを回避できます。
投資対効果の一例として、航空関係システムなどでは運用後に発見された1つの欠陥を修正するまでに6か月かかることもあります。Coverity Static Analysisを使うとあらかじめより多くの欠陥を発見することができ、1~2か所の欠陥を修正しておくだけでもかなりのROIを見込むことができます。
その他にも、開発者が修正にかかる時間を2,520時間削減したり、製品のローンチを遅らせずに済んだケースなどもあり、Coverity Static Analysisの導入によって時間の削減に貢献できたように思います。
――ありがとうございました。