開発のアウトソーシングやオープンソース利用が進み、製品品質の担保が悩みの種となりつつある。巨大化・複雑化するソフトウェアの状況を考えてみても、手作業や目視ではなく静的解析ツールなどで自動化するのが現実解といえるだろう。
静的解析ツールの一つに、米スタンフォード大学の研究室発の「Coverity Static Analysis」という製品がある。開発を手がける米Coverity社のチーフアーキテクト Andy Chou氏に、現在の開発動向から見た静的解析ツールの需要性や、最近の米国のトレンドについて聞いた。
効果的な静的解析ツールを選ぶ3つのポイント
――静的解析ツールが必要とされる背景に、開発業界におけるどのような変化があったのでしょうか
組み込み開発においては、システム側でもデバイス側でも、ソフトウェアに対する価値が高まってきています。スマートフォンを例に挙げて考えると、ハードウェア、タッチスクリーン、ワイヤレスアクセスなどは昔から存在していましたが、対応するスマートフォンのアプリケーションは最近になってから出てきたものです。今後はそれらのソフトウェア開発に力を入れていくことで、製品の競争力が増していくと思います。
一方で、機能が増えてきたことによりコードサイズも非常に大きくなってきました。ソースコードの開発をアウトソーシングしたり、オープンソースから取り入れる場合などは、さらにコードは複雑化し、ソフトウェアの整合性を保つのが難しくなってしまうため、コストやリスクを軽減できる静的解析ツールの需要が高まってきたと言えます。
――静的解析ツールを導入する際のポイントを教えてください
静的解析ツールを効果的に使用するには、3つのキーポイントがあります。1つ目は「静的解析ツールによって出力されたバグレポートの内容が正しいかどうか」という点です。誤検出が多いと、開発者にとってバグレポートは無意味なものとなってしまいます。2つ目は「バグレポートの内容に十分な情報が記載されているか」。3つ目は「現在ある開発プロセスの中に、そのツールがシームレスにフィットするか」です。
――では、静的解析ツール「Coverity Static Analysis」では、具体的にどのようにプログラムの解析が行われるのでしょうか
「Coverity Static Analysis」では、プログラムの流れである「パス」を取り出して解析し、ソースコード中にインラインで表示します。ブランチのディレクション(各条件分岐でどちらを選択したか)は緑、エラー関係の情報は赤のイベントメッセージとしてソースコードの横に可視化されるため、開発者はプログラムのイベントやエラーの発生箇所を容易に把握できます。
――他の製品と比べてCoverity Static Analysisはどういった特長があるのでしょうか
弊社製品の一番の強みは、誤検出率が非常に低いことです。通常で誤検出率を平均20%未満に抑えることができます。また、ソースコードが1,000万行を超えるような大規模システムの解析も可能です。
速度の面でも、使用しているハードウェア次第ですが、数百万行であれば数時間以内に行うことができます。大規模システムのようにコードが1,000万行以上だと、解析に1日~数日かかる可能性もありますが、差分のみを解析することで時間を抑えることができます。
さらに、クラッシュを起こすような欠陥、セキュリティーエラーなど、さまざまなタイプの欠陥を検出できる点、また、マッピング機能により特定の欠陥を使用して作られた製品ラインおよび他のバージョンへの影響を容易に確認できる点も類似製品との違いだと言えるでしょう。
最も重要なことは、開発者にとって有益であるという結果を速くきちんと出すことなので、私たちは常に精度が高く、情報として充分な数を、高い解析技術により短期間で検出することに注力しています。