人間の“限界”を補完する、 誤検出率15%以下の静的解析ツールとは 〜 ApacheのPortable Runtimeライブラリの コードを「Coverity 5」で解析してみた 〜 |
コベリティが提供する「Coverity Static Analysis」は誤検出率15%以下を誇るソースコードの静的解析ツールだ。本稿では、オープンソースソフトウェア「Apache Portable Runtime」で静的解析した結果を例に、最新バージョン「Coverity 5」のCoverity Static Analysisの概要と特徴、そして、その無料トライアルを紹介する。
入念にテストしても、 1000ステップ当たり、平均1.5件のバグが残存!? |
「バグをなくすためにテストを行う」。それは、ソフトウェア開発における常識だ。一方で、「テストさえ行えばバグがなくなる」というわけではないのも事実である。「単体テスト」「結合テスト」「総合テスト」「導入テスト」と、きちんとしたテスト工程を経て出荷されたソフトウェアであっても、バグはなかなか根絶できない。一般的には、C/C++言語で組まれたソフトウェアの場合、たとえテストを入念に行ったものであっても、「1000ステップ当たり、平均1.5件のバグが残存している」といわれる。当然その中には、システム全体に多大な影響を及ぼす致命的なバグを含むこともあり得る。
こうした、通常のテストでは見つけられないバグを検出する手段として、昨今注目を集めているのが、ソースコードの静的解析ツールだ。ソースコード内のすべての実行パスを自動的にチェックし、問題点を検出できる。通常のテストでは、実際にプログラムを動かしながら手動でチェックを行うが、どうしてもテスト項目から漏れてしまう実行パスが存在するのは避けられない。静的解析ツールはプログラムのソースコードを対象に、全実行パスをチェックするため、こうしたテスト漏れを防ぐことができるのだ。
現在、さまざまなベンダから静的解析ツールが提供されているが、その中でもコベリティが提供する「Coverity Static Analysis」は、大規模プロジェクトやミッションクリティカルなシステム開発において高い実績を誇る製品の1つである。
大規模プロジェクトでの用途に適した さまざまな機能をApacheで試したら…… |
Coverity Static Analysisの第一の特徴は、その高い精度だ。数ある静的解析ツールの中には、ソースコードの内容が単にコーディング規約に沿っているかどうかだけをチェックするものもある。しかし、それだけではバグ以外の問題点(コーディング規約に沿わない表記など)も大量に検出してしまう。解析対象が大規模なソフトウェアの場合、その中から重要なバグだけを抜き出すのは至難の技だ。
その点、Coverity Static Analysisは独自の処理方式により、重要なバグだけを効率的に検出できるようになっている。この手のツールの性として、誤検出が皆無というわけにはいかないが、誤検出率は15%以下に抑えられている。これは、現在市場に出回っているほかの静的解析ツールと比べ、極めて高い検出精度といえるだろう。
また、複数バージョンのソフトウェアを対象にした開発プロジェクトでも、同製品は大きな威力を発揮する。一例を挙げて説明しよう。「Apache Portable Runtime」(以下、APR)をご存じだろうか? Apache HTTP Serverのサポートライブラリの1つで、OSプラットフォームの違いを吸収することでマルチプラットフォーム向けのソフトウェア開発を支援するオープンソースソフトウェアだ。このAPRの異なる2つのバージョン、「0.9.18」「1.4.2」に対して、Coverity Static Analysisでソースコード解析を行ってみると、0.9.1.8では17件、1.4.2では22件のバグが検出される(図1)。
図1 Coverity Static AnalysisでAPRのソースコード解析を行った結果(画像をクリックすると、拡大します) |
特筆すべきは、1.4.2で検出された22件のバグのうち、14件が0.9.1.8から引き継がれたもので、残りの8件が新バージョンで混入したものだということが、明確に切り分けられる点だ。この機能は、同じソフトウェアの複数のバージョンを同時に開発するようなプロジェクトや、既存のプログラムを多数流用して開発を行うような場合に威力を発揮する。
特に、大規模な組み込みソフトウェアでは、1つのソフトウェアから複数のバージョンを派生させていくことが多いため、もともと旧バージョンにあった問題なのか、新バージョンで混入した問題なのかを明確に切り分けられるのは、大きなメリットだといえよう。
バグの検出結果と修正状況を 一元管理するツールも用意 |
さらに最新バージョン「Coverity 5」では、解析結果をより詳細に管理するためのツール「Coverity Integrity Manager」も用意している。これは、検出したバグに関する情報を一元管理し、その統計データをレポート表示するとともに、バグ修正の進ちょく管理までも行えるツールだ(図2)。
図2 Coverity Integrity Managerのレポート画面(不具合密度分布)(画像をクリックすると、拡大します) |
Coverity Static Analysisとともに、Coverity Integrity Managerも併せて活用することにより、大規模プロジェクトで開発するソフトウェアの品質をより確かなものにすることができるだろう。
Coverity Static Analysisの有用性を体験できる 無料トライアル |
このように、Coverity Static Analysisは大規模プロジェクトでの用途に適したさまざまな機能を備えている。事実、セガや三菱電機などさまざまなメーカー企業が、すでに同製品を導入・活用していて、まず同製品を無料トライアルで試用し、その有用性を確認した後に正式に導入することを決めたという。
もしトライアルを希望する場合は、まずは解析対象のC/C++/Java/C#のソースコード(およびビルド環境)を用意する。大規模プロジェクトにおけるCoverity Static Analysisの使い勝手を確認するためにも、テスト用のプログラムではなく、実際のプロジェクトで開発したプログラムを解析対象にすることをぜひお勧めしたい。
次に、使用しているコンパイラの種類とOSの種類を同社に通知する。すると、同社からトライアル用製品のダウンロードサイトのURLと、その操作手順を記したドキュメントが送られてくる。後は、そのドキュメントの内容に沿って解析処理を実行するだけだ。この際、ソースコードやMakeファイルといったビルド環境の内容には一切手を加える必要がないのも、Coverity Static Analysisの大きな特徴だ。そのため、トライアル用の製品をダウンロードしたら、すぐに試用できる。さらに、解析処理が完了した後には、同社の技術者がトライアルユーザー先を訪問し、解析結果を分析する方法を直接レクチャーしてくれる。
無料トライアルは、コベリティのサイトから申し込み可能だ。大規模開発や組み込み開発におけるソフトウェア品質管理に悩みを抱えている方は、これを機に一度気軽に試してみてはいかがだろうか。
提供:コベリティ 日本支社
企画:アイティメディア 営業本部
制作:@IT 編集部
2010年6月30日
関連リンク |
関連記事 |
・GUIのデバッガで追うようにコードの問題個所を正確に特定できる静的解析ツールとは (@IT Special) ・ビルドプロセスの「ブラックボックス」を解消する解析ツール (@IT MONOist) ・コベリティ、開発の問題発見・未然防止を実現する2製品を発売〜開発の初期段階で問題を解決し、コスト効率に貢献〜 (@IT NewsInsight) ・C#用の静的解析ツール、コベリティが提供へ〜C、Javaに続いて対応〜 (@IT NewsInsight) ・関数の平均長と欠陥の量に相関なし、米コベリティ〜オープンソースで5500万行を解析〜 (@IT NewsInsight) ・マルチスレッドアプリのコードを動的に解析するツール、米コベリティ〜Javaのデッドロックや競合状態に困っている人の強い味方?〜 (@IT NewsInsight) ・500万行のソースコードを一晩で解析できるソフト〜誤検知率も20%以下を実現〜 (@IT NewsInsight) |