![]() |
![]() |
|
Loading
|
@IT > 数百万行におよぶソースコードをすばやく解析 誤検知を制御し、不具合が検出できるツール |
![]() |
|
電子機器から社会インフラまで、さまざまな製品を支えているソースコード。電子機器が多機能になって便利になる一方で、その元となるソースコードは増大し、複雑になり続けている。 例えば、携帯電話のケースを考えてみよう。この携帯電話の中には、数百万行におよぶプログラムが入っている。その数百万行のコードの中に、たった1行のエラーや脆弱性があるだけで、さまざまな障害を起こす可能性がある。データが消えるような障害であれば、ユーザーに大きな損害を与え、回収作業が発生して社会にも多大な影響を及ぼす。そして、最も大きな損害は企業が信頼を失う点だろう。このような事態を避けるためには、「いかにすばやくソースコードを検証し、効率よくバグや脆弱性をなくしていけるか?」が求められる。 このようなニーズに応え、あらゆる企業のテストに掛かる負担を軽減できるのがcoverityの静的解析ツールだ。その魅力を紹介する。
開発現場では、「バグの発生によって開発が遅れ、新機能の開発に支障が出る」といったことが頻繁に起こる。その状況を改善するために静的解析ツールを活用するものの、これまでは統合化が困難であったり、大掛かりな設定と調整が必要なうえに、大規模なコードベースは扱えないなど、「効果の割には、所有コストが高いもの」という印象が強いのではないだろうか。
そういった既成概念を打ち破るべく、「ソースコードに含まれている重大なバグやセキュリティ上の脆弱性を検出すること」をミッションに挙げ、コンパイル時にこれらの問題の検出を行うことができる静的解析ツールを提供するのがcoverityだ。そのコアとなる技術は、技術者が使いたくなるようなツールの開発に興味を持った米スタンフォード大学の教授と博士課程の学生たちが開発したものだ。 フォールスポジティブ(誤検知)を最低限に抑え、実際のバグを見付けることに的を絞ったこの研究では、アルゴリズムをテストするために、世界で公開されているものの中で最も巨大なソースコードの1つといえる「Linux OS」を解析。その結果、2000個以上のバグを発見し、オープンソースコミュニティで公表した。その後、2002年にcoverityを設立し、その信頼性と高い技術力により急成長を続けている。
coverityが提供するツールの最大の特長は、欠陥の根本的な原因をすばやく正確に特定できることだ。 コンパイル時にこれらの問題を検出するため、ソースコードの実行やテストケースはまったく必要ない。つまり、テスト環境が不要で、開発サイクルにおいて問題点を早期発見できるのだ。この点は、テストやバグつぶしに膨大な時間や人材が割かれている開発現場において、大きなアドバンテージになるはずだ。 coverityが開発した新しいアルゴリズムでは、数百万行におよぶソースコードの解析も行える。ソースコード解析は実に精密で、あらゆるパスの解析はもちろん、プロシージャ間解析を行えるのも特長の1つだ。
プロシージャ間解析とは、各機能を個別に取り扱わずに、プログラム全体にわたって実行フローを追跡することができる解析手法。各機能を個別に取り扱うと、次のファイルまたはモジュールへと解析を進める際に情報が失われるため、バグの見落しや問題のない部分をバグとして認識されることがあるが、プロシージャ間解析を行うことでそういった問題をなくすことができる。 また、ムダを省く機能として、すべてのパスを解析できる点が挙げられる。なぜそれが可能なのかというと、coverityは問題を検出する際に、コードを「実行」するのではなく、「解析」しているからだ。 すべてのパスを調べることにより、バグの原因となり得る不明りょうな条件や、入力がないことが確認できる。そして、その誤検知発生率は20%以下を誇る。コード内の最も有意な特長や欠陥だけが報告され、「ノイズ」は報告されないため、ムダな作業が軽減し、生産性が大幅に向上することにも繋がるのだ。
現在coverityでは、「Coverity Prevent」と「Coverity Extend」の2製品を提供している。「Coverity Prevent」は導入してすぐに使用できる欠陥検出システムで、56種類の欠陥に対応する。一方の「Coverity Extend」は、検出ツールのカスタマイズに使用するSDK(ソフトウェア開発キット)だ。 coverityのツールではまず、仮想のビルド環境で既存のビルドが実行される。これは、既存のビルドシステムやソースコードに変更を加えずに、ビルド環境と統合することを目的として行うものだ。 次いでビルドの処理が監視され、OSレベルでコンパイラへの呼び出しが検出される。検出されたOS呼び出しがcoverityのコンパイラへの呼び出しに変換されると、解析可能なデータが生成される。
このツールでは、「どのコンパイラを使用しているか?」や、「それをcoverityのコンパイラとエミュレートさせるためにどうすべきか?」を特定するために、自動構成を使用する。また、ソースファイルの場所を特定するために、既存のビルドシステムも使用する。出力としてコードの正確な表現が返され、それを解析していくことになる。そして、これらの動作はスピーディに行われ、ビルド情報のコンパイルにかかる4〜6倍の速さでソースコードの解析が完了するのだ。 現在coverityが提供するツールは、C/C++とJavaをサポートしている。そして、最も重要なことは、「その利便性や効率性を一番実感できるのは、実際にソースコードを解析してみることだ」という点だ。 coverityでは試用版を用意しているほか、イベントやセミナーを通じてデモを行っている。直近では、5月16日(水)〜5月18日(金)に東京ビッグサイトにて開催される「第10回 組込みシステム開発技術展」に出展が決まっている。数百万行におよぶソースコードに対応し、プロシージャ間の解析も行い、的確に重大なバグやセキュリティ上の脆弱性をスピーディに検出できる素晴らしさを、ぜひ皆さんにも体感してほしい。
提供:Coverity,Inc.
企画:アイティメディア 営業局 制作:@IT 編集部 掲載内容有効期限:2007年5月17日 |
|