SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

「FindBugs」「Jenkins」をサポートし、不具合検出の幅が大きく広がった静的解析ツール「Coverity Static Analysis 5.5」

開発者によるソースコード解析をサポートし、バグの未検出リスクを軽減

  • このエントリーをはてなブックマークに追加

 2011年10月4日、コベリティは、C/C++やJava、C#のソースコード解析ツールの新バージョン「Coverity Static Analysis 5.5」を発表しました。発見が難しく、誤動作の原因となるバグを効率よく検出できる同ツールの新バージョンでは、前バージョンに比べてコード解析速度が向上し、より広範囲な開発環境に対応できるよう強化が施されました。Coverity Static Analysisの特長や新機能から、ソースコード静的解析のメリットについて考えてみましょう。

  • このエントリーをはてなブックマークに追加

テストケースの用意は不要。ビルド時に不具合を発見

 「Coverity Static Analysis」は、C/C++やJava、C#の各言語で記述されたソースコードに含まれるバグを検出できるソフトウェア開発支援ツールです。大規模・複雑化するソフトウェア開発において、ソースコードの不具合は、出荷遅延や修正対応による新規開発の遅れ、品質低下、テストの煩雑化などさまざまな影響を及ぼします。

 ソフトウェア開発におけるテストは、セキュリティテスト、機能テスト、パフォーマンステストなどさまざまなものがありますが、これらは開発工程(コーディングやユニットテスト)と出荷/運用工程との間に行われることが多いと思います。テスト工程でさまざまな不具合が発見されれば、開発工程に手戻りが発生し、出荷や運用は遅れてしまいます。そこでコベリティでは、不具合の早期発見による開発期間の短縮やコストの削減のため、開発段階で不具合を発見できる環境を提供すべく、次世代静的解析ツールであるCoverity Static Analysisの開発および販売を行っています。

 このツールは、既存のビルドシステムと連携して動作するため、開発者がビルドごとに解析することも可能です。そのため、開発の早期段階で重大な不具合を検出・共有・修正し、出荷・運用開始後に発生するリスクの軽減が期待できます。解析は、コベリティの解析エンジンがソースコードを擬似的に実行することにより不具合を検出するので、解析のために開発者がテストケースを用意する必要はありません。不具合の検出は、開発チームにおけるコーディングルール違反や無害な変数初期化忘れなどの指摘ではなく、リソースリークやメモリ破壊といった実行時に深刻な結果を引き起こす不具合の発見に強みを発揮します。コベリティでは、このツールが数百人規模で開発を行うような大規模なコードをサポートし、高い検出精度を提供しています。

 Coverity Static Analysisでは、不具合の内容とそれが及ぼす影響を容易に把握するための不具合管理サーバー「Coverity Integrity Manager(CIM)」が用意されています。開発者は、CIMを利用することで解析後、不具合のレビューや優先順位付け、進捗の管理を行うことができます。Coverity Static Analysisの実行環境は、1日あれば、セットアップが可能です。事前準備として、コンパイラの設定とCIMサーバの設定が必要となります。具体的な利用手順については次ページから紹介していきます。

専用コマンドを実行するだけで、ビルド~解析~結果の送信が完了

 Coverity Static Analysis導入の事前準備であるコンパイラの設定は、GNU gcc、MS Visual Studio、Wind River C/C++、TI Code Composer、ルネサス C/C+コンパイラ、QNX C/C++、Freescale Codewarrior、ARM C/C++など、使用しているコンパイラに対して次のコマンドを1度実行するだけでOKです。

コンパイラ設定のコマンド
cov-configure -comptype <コンパイラタイプ> --compiler <コンパイラコマンド名> [<オプション>]
GNU gccでの実行例
GNU gccでの実行例

 次に、CIMサーバ上にプロジェクト/ストリームと呼ばれる解析結果の保管場所を準備します。

CIM上で、解析結果保管場所を設定
CIM上で、解析結果保管場所を設定

 準備が整ったら、解析のためのビルド処理を行います。次のように、既存のビルドコマンドを呼び出せば、ビルドを監視して解析に必要なデータを中間ディレクトリに保存します。

ビルド処理のコマンド
cov-build -dir <中間ディレクトリ> <makeやantといったビルドコマンド>
ビルド処理の実行例。ビルト用スクリプトやソースファイルの変更は不要
ビルド処理の実行例。別途スクリプトやソースファイルの変更は不要

 続いて、解析処理です。ビルド処理と同様にこちらも次のような専用コマンドを呼び出すだけ。ビルド処理で中間ディレクトリに保存されたデータの解析が始まります。

解析処理のコマンド
cov-analyze -dir <中間ディレクトリ> [オプション]
解析処理の実行例。不具合チェッカーが解析を行うため、テストケースの作成は必要ない
解析処理の実行例。不具合チェッカーが解析を行うため、テストケースの作成は必要ない

 解析結果を管理するため、CIM側に結果を送信します。これも専用のコマンドで行います。

CIMへ解析結果を送信するコマンド
cov-commit-defects -dir <中間ディレクトリ> --host <CIMホスト名> --stream <CIMストリーム名> --user <CIMユーザー名> --password <CIMパスワード>
中間ディレクトリに保存された解析結果がCIMに送信される
中間ディレクトリに保存された解析結果がCIMに送信される

 CIMに送信された不具合の情報は、WebブラウザかIDEから、閲覧・管理ができます。検出された結果は、不具合の影響度が自動判別されます。また柔軟なフィルタ機能により、不具合修正の優先順位をつけることができます。

左ペインで「影響度:高」にチェックしてフィルタした例
左ペインで「影響度:高」にチェックしてフィルタした例
不具合閲覧画面では、ソース中に分岐条件を表示し、どのパスで障害が発生するかを容易に把握できる
不具合閲覧画面では、ソース中に分岐条件を表示し、どのパスで障害が発生するかを容易に把握できる

 Coverity Static Analysisが発見可能な不具合は、リソースリーク、未初期化の変数、並列処理時の問題、メモリー破壊、不正なメモリーアクセス、APIの誤用、インデックス処理の間違い、プログラムのハングアップ、パフォーマンス、セキュリティの問題、コードの保守性など多岐に渡ります。次ページから、最新バージョンである5.5で強化された点について説明します。

解析速度はより高速に、検出対象はより広範囲になった最新バージョン

 Coverity Static Analysis最新バージョンの5.5では、さまざまな改善が施されています。まずは、主にC++の開発においてメリットを発揮する、解析時間の短縮です。解析をマルチコアCPUでの並列処理に対応することで、従来の50%~80%もの短縮を実現しています。シングルプロセスでも従来の20%~30%短縮した上で、同社による、あるソースの実測値では、シングルプロセスで2分25秒かかったものがが、4コアCPUでは1分13秒とおよそ半分になったとしています。

 次の改善点は、Java環境での不具合検出率をアップさせるための、オープンソースのJavaプログラム解析ツール「FindBugs」との統合です。Coverityの解析結果と、FindBugsの結果は、それぞれ異なるものが検出され、重複するものは少ないため、より多くの不具合を検出します。FindBugsはインストールベースで統合を行っており、FindBugsの追加インストールおよび設定は不要です。解析の実行も従来と同じコマンド「cov-analyze-java」でできます。

 続いての改善点は、デスクトッププラグインです。従来は、主に、ソースをチェックイン後にビルド用サーバ側で解析していましたが、より早期に不具合を発見できるよう、ローカル環境での解析がサポートされるようになりました。開発者個人がEclipseやエディタなどを使いながら、自分の裁量で自由に解析できます。

 最新バージョンのもうひとつの目玉は、CI(継続的インテグレーション)ツールである「Jenkins」の統合です。コベリティが提供するJenkinsプラグインにより、開発者がリポジトリにソースコードをチェックイン後、Jenkinsが自動的にCoverity Static Analysisによるビルド、解析、および解析結果の送信を行います。これにより、これまでのユニットテストでは発見されなかったより多くの不具合の検出が可能になり、アジャイル開発におけるソフトウェアの品質をより強化します。

無料トライアルで、Coverityの実力を試してみよう

 Coverity Static Analysisを使えば、これまで気がつかなかった不具合を早期に検出し、開発効率を向上させることができます。「今すぐ使ってみたい」という開発者のために、コベリティでは、無料トライアルのプログラムを用意しています。

 上記のページからオンラインで申し込むと、コベリティの担当者が訪問の上、製品紹介とデモンストレーションを行います。その後はユーザー側で、今回の記事で紹介した「コンパイラの設定」「ビルド」「解析」を行います。不具合の解析結果が出たら、再びコベリティのエンジニアが訪問し、結果の説明やフォローアップが行われます。

 なお、無料トライアルの対象は、高品質性が特に求められる複雑なコードで、通常は20万行以上(行数は応相談)の開発プロジェクトに制限させていただいています。

実際に使用しているユーザーの声

 最後に、Coverity Static Analysisを既に利用し、成果を上げているユーザー企業の声をいくつか紹介しましょう。

 「メモリの取り扱いに関するバグの発生率は限りなくゼロに……」

 ―――― 株式会社外為どっとコム

 「解析の精度で選びました」

 ―――― 株式会社コナミデジタルエンタテインメント

 「開発者が頼れる開発者のためのツールです」

 ―――― 株式会社シンプレクス・テクノロジー

 「バグ解析の精度は、“目からうろこ”でした」

 ―――― 株式会社セガ

 「見つけにくいバグを発見できる特効薬でした」

 ―――― 三菱電機株式会社

 「解析制度とレポーティングの判りやすさで、試用期間を含め1週間ほどで購入を決定しました」

 ―――― 株式会社シンプレクス・コンサルティング

 「導入したことで、これまでバグの発見に費やしていたコストを品質向上に仕向けられ、ソフトウェアの完成度をより高められました」

 ―――― 株式会社東芝

 「これまでは再現性が必要で、修正するのに多大な時間と労力がかかっていた不具合を開発の早期段階で検出できるようになりました。開発者のツールへの評価も高く、品質を保持しながら、劇的に生産性が上がりました」

 ―――― 日本電気株式会社

 「コベリティ製品の導入により、潜在的な不具合を突き止めることができました。異常系やタイミング依存部に潜む、テストでは検出が難しい不具合を、効率よく検出し、高品質ソフトの開発に貢献しています」

 ―――― 住友電工ネットワークス株式会社

 興味をもたれた方は、ぜひ一度、無料トライアル版を実際のプロジェクトに適用し、この開発生産性の効果を実感してください。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6193 2011/10/13 16:03

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング