アットマーク・アイティ @IT@IT情報マネジメント@IT自分戦略研究所QA@ITイベントカレンダー  
 
 @IT > 数百万行におよぶソースコードをすばやく解析 誤検知を制御し、不具合が検出できるツール
 
@IT Special

 

PR

数百万行におよぶソースコードをすばやく解析
誤検知を制御し、不具合が検出できるツール

 電子機器から社会インフラまで、さまざまな製品を支えているソースコード。電子機器が多機能になって便利になる一方で、その元となるソースコードは増大し、複雑になり続けている。

 例えば、携帯電話のケースを考えてみよう。この携帯電話の中には、数百万行におよぶプログラムが入っている。その数百万行のコードの中に、たった1行のエラーや脆弱性があるだけで、さまざまな障害を起こす可能性がある。データが消えるような障害であれば、ユーザーに大きな損害を与え、回収作業が発生して社会にも多大な影響を及ぼす。そして、最も大きな損害は企業が信頼を失う点だろう。このような事態を避けるためには、「いかにすばやくソースコードを検証し、効率よくバグや脆弱性をなくしていけるか?」が求められる。

 このようなニーズに応え、あらゆる企業のテストに掛かる負担を軽減できるのがcoverityの静的解析ツールだ。その魅力を紹介する。

バグつぶしに膨大なコストが掛かる開発手法からは
もう卒業しよう

 開発現場では、「バグの発生によって開発が遅れ、新機能の開発に支障が出る」といったことが頻繁に起こる。その状況を改善するために静的解析ツールを活用するものの、これまでは統合化が困難であったり、大掛かりな設定と調整が必要なうえに、大規模なコードベースは扱えないなど、「効果の割には、所有コストが高いもの」という印象が強いのではないだろうか。

熱心に説明をする米coverity 日本アジア担当ディレクター リチャード・セルート(Rich Cerruto)氏は、在日9年で日本語もベラベラだ
 しかも、限られた範囲のコードパスを解析しているにすぎない割には、多くの警告を発する。さらにそれらの警告がバグではないことが多いなど、結果もかなり厳しいものだ。いわゆる誤検知が多いのである。こういった経緯もあり、技術者はそのツールを信用しなくなる傾向があった。

 そういった既成概念を打ち破るべく、「ソースコードに含まれている重大なバグやセキュリティ上の脆弱性を検出すること」をミッションに挙げ、コンパイル時にこれらの問題の検出を行うことができる静的解析ツールを提供するのがcoverityだ。そのコアとなる技術は、技術者が使いたくなるようなツールの開発に興味を持った米スタンフォード大学の教授と博士課程の学生たちが開発したものだ。

 フォールスポジティブ(誤検知)を最低限に抑え、実際のバグを見付けることに的を絞ったこの研究では、アルゴリズムをテストするために、世界で公開されているものの中で最も巨大なソースコードの1つといえる「Linux OS」を解析。その結果、2000個以上のバグを発見し、オープンソースコミュニティで公表した。その後、2002年にcoverityを設立し、その信頼性と高い技術力により急成長を続けている。

数百万行におよぶソースコードに対応する解析ツール

 coverityが提供するツールの最大の特長は、欠陥の根本的な原因をすばやく正確に特定できることだ。

 コンパイル時にこれらの問題を検出するため、ソースコードの実行やテストケースはまったく必要ない。つまり、テスト環境が不要で、開発サイクルにおいて問題点を早期発見できるのだ。この点は、テストやバグつぶしに膨大な時間や人材が割かれている開発現場において、大きなアドバンテージになるはずだ。

 coverityが開発した新しいアルゴリズムでは、数百万行におよぶソースコードの解析も行える。ソースコード解析は実に精密で、あらゆるパスの解析はもちろん、プロシージャ間解析を行えるのも特長の1つだ。

coverityで静的解析を行って発見したバグ(FORWARD_NULL)の一例。FORWRD_NULL チェッカーは特定のパスでのポインタが NULL であることがわかっていて、そのポインタが逆参照されるケースがないかどうかを調べる。 349行目の正しいシンタックスは “if (table && *table)” (画像をクリックすると拡大)

 プロシージャ間解析とは、各機能を個別に取り扱わずに、プログラム全体にわたって実行フローを追跡することができる解析手法。各機能を個別に取り扱うと、次のファイルまたはモジュールへと解析を進める際に情報が失われるため、バグの見落しや問題のない部分をバグとして認識されることがあるが、プロシージャ間解析を行うことでそういった問題をなくすことができる。

 また、ムダを省く機能として、すべてのパスを解析できる点が挙げられる。なぜそれが可能なのかというと、coverityは問題を検出する際に、コードを「実行」するのではなく、「解析」しているからだ。

 すべてのパスを調べることにより、バグの原因となり得る不明りょうな条件や、入力がないことが確認できる。そして、その誤検知発生率は20%以下を誇る。コード内の最も有意な特長や欠陥だけが報告され、「ノイズ」は報告されないため、ムダな作業が軽減し、生産性が大幅に向上することにも繋がるのだ。

coverityの静的解析ツールの魅力を体感してほしい

 現在coverityでは、「Coverity Prevent」と「Coverity Extend」の2製品を提供している。「Coverity Prevent」は導入してすぐに使用できる欠陥検出システムで、56種類の欠陥に対応する。一方の「Coverity Extend」は、検出ツールのカスタマイズに使用するSDK(ソフトウェア開発キット)だ。

 coverityのツールではまず、仮想のビルド環境で既存のビルドが実行される。これは、既存のビルドシステムやソースコードに変更を加えずに、ビルド環境と統合することを目的として行うものだ。

 次いでビルドの処理が監視され、OSレベルでコンパイラへの呼び出しが検出される。検出されたOS呼び出しがcoverityのコンパイラへの呼び出しに変換されると、解析可能なデータが生成される。

coverityで静的解析を行って発見したバグについて、それぞれのバグの数と不具合のタイプを示したチャート (画像をクリックすると拡大)

 このツールでは、「どのコンパイラを使用しているか?」や、「それをcoverityのコンパイラとエミュレートさせるためにどうすべきか?」を特定するために、自動構成を使用する。また、ソースファイルの場所を特定するために、既存のビルドシステムも使用する。出力としてコードの正確な表現が返され、それを解析していくことになる。そして、これらの動作はスピーディに行われ、ビルド情報のコンパイルにかかる4〜6倍の速さでソースコードの解析が完了するのだ。

 現在coverityが提供するツールは、C/C++とJavaをサポートしている。そして、最も重要なことは、「その利便性や効率性を一番実感できるのは、実際にソースコードを解析してみることだ」という点だ。

 coverityでは試用版を用意しているほか、イベントやセミナーを通じてデモを行っている。直近では、5月16日(水)〜5月18日(金)に東京ビッグサイトにて開催される「第10回 組込みシステム開発技術展」に出展が決まっている。数百万行におよぶソースコードに対応し、プロシージャ間の解析も行い、的確に重大なバグやセキュリティ上の脆弱性をスピーディに検出できる素晴らしさを、ぜひ皆さんにも体感してほしい。

ホワイトペーパーダウンロード
ホワイトペーパー「開発早期段階でのソフトウェア不具合の修復
−−Coverityの静的コード解析技術」
が、TechTargetジャパン
ホワイトペーパーダウンロードセンターで入手できます。



ESEC(組込みシステム開発技術展)出展決定!
5月16日(水)〜5月18日(金)に東京ビッグサイトにて開催される「第10回 組込みシステム開発技術展」に、coverityの出展が決定しました。

専用ブース(ブースNo. East Hall 56−26)では、本稿で紹介した静的解析ツールのデモも行う予定です。 また、期間中2回、以下のセッションを行いますので、ぜひご来場ください。



●セッション1
静的解析ツールと動的解析ツールの比較

会場 : 東5ホール2階 1会場
日時 : 5月16日 11:00-12:00
講演内容
近年注目されている動的及び静的コード解析ツールを、ソースコード解析の進化(Lintから2007年の最新技術等)を交え、Coverity社CTO:Ben Shelf(ベン・シェルフ)が解説します。


●セッション2
コンパイル時のソフトウェア不具合の修正

会場 : 東6ホール2階 3会場
日時 : 5月17日 11:00-12:00
講演内容
Coverity社の静的解析ツールのコンポーネントである以下3つの技術について解説します。

  1. ソフトウェア構造の正しいマッピング
  2. 重大なバグの発見
  3. バグ、不具合の修正

 


提供:Coverity,Inc.
企画:アイティメディア 営業局
制作:@IT 編集部
掲載内容有効期限:2007年5月17日
 
ホワイトペーパー ダウンロード
ホワイトペーパー「開発早期段階でのソフトウェア不具合の修復−−Coverityの静的コード解析技術」が、TechTargetジャパン ホワイトペーパー ダウンロードセンターで入手できます。


ESEC(組込みシステム開発技術展)出展決定!
5月16日(水)〜5月18日(金)に東京ビッグサイトにて開催される「第10回 組込みシステム開発技術展」に、coverityの出展が決定しました。

専用ブース(ブースNo. East Hall 56−26)では、本稿で紹介した静的解析ツールのデモも行う予定です。 また、期間中2回、以下のセッションを行いますので、ぜひご来場ください。



●セッション1
静的解析ツールと動的解析ツールの比較

会場 : 東5ホール2階 1会場
日時 : 5月16日 11:00-12:00
講演内容
近年注目されている動的及び静的コード解析ツールを、ソースコード解析の進化(Lintから2007年の最新技術等)を交え、Coverity社CTO:Ben Shelf(ベン・シェルフ)が解説します。


●セッション2
コンパイル時のソフトウェア不具合の修正

会場 : 東6ホール2階 3会場
日時 : 5月17日 11:00-12:00
講演内容
Coverity社の静的解析ツールのコンポーネントである以下3つの技術について解説します。

  1. ソフトウェア構造の正しいマッピング
  2. 重大なバグの発見
  3. バグ、不具合の修正

関連リンク

coverity

Coverity Prevent

Coverity Extend


@IT記事リンク
6月版 怒りのLinus、「カーネル開発者のふりはやめろ」(@IT Linux Square)

Javaプログラムにおけるデバッグのパターンは?(@IT Java Solution)

スタックトレースからデバッグのヒントを読み取る(@IT Java Solution)

リモートデバッグとリモートツールの活用(@IT 組み込み開発)

開発作業の70%はデバッグ?(@IT NewsInsight)

組み込み開発環境の仮想化で「デバッグを短縮」(@IT NewsInsight)


 
@ITトップ@IT Special インデックス会議室利用規約プライバシーポリシーサイトマップ