Riverblade

 

 

PC-Lint C++コード解析の高速化

riverblade

logo_riverblade

Riverblade社の設立者Anna-Jayne Metcalfe氏によるインタビューです。(2009年)

この記事では、Visual Studio ソリューションの静的解析を完了するために、Riverblade社が PC-lint の C++ コード解析タスクを高速化するために Incredibuild を使用した方法について説明しています。

課題

Riverblade社はVisual Studioと連携したコード解析ツールを提供していますが、最もよく知られている製品はVisual Lintで、Gimpel PC-lint C++コード解析ツールをVisual Studioの開発環境に連携可能です。

静的コード解析ツール(特に PC-lint)を使ったことがある開発者なら経験があると思いますが、コードベースの完全な解析を完了するには、同じコードをコンパイルするよりも遥かに時間がかかることがあります。実行する解析の深さを考えると妥当ですが、場合によってはその長時間の解析が問題になることもあり、例えばコード解析ツールを全く使用しないという結果になりかねません。

Visual Lint の当初の設計目標の一つは、マルチコアプロセッサを利用して PC-lint コード解析を従来のコマンドライン型プロセスよりも大幅に高速実行できるようにすることでした。これは非常に優れた機能で、例えばdual coreシステム上で実行した場合、解析時間を通常の半分にすることができます。しかし、デスクトップ・プロセッサのコア数の進化は、一般的に遅いプロセスであり、ディスクやメモリI/Oのボトルネックの影響を受ける可能性もあります。このアプローチだけでは、解析時間の改善には限界があります。

現在の設計よりもコア数の多い高速プロセッサの登場を待たずに解析時間をさらに短縮するためには、グリッドコンピューティング技術を利用してネットワーク上の複数のマシンに解析タスクを分散させる必要があります。実際、当社は以前からタスク分散が出来ないかと考えていたのですが、なかなか良いツールを見つけることが出来ませんでした。

PC-lint 分析の実行を高速化する従来の方法はいくつかあります。

  • より多くのコアを搭載したより高速なマシンを購入する
  • 分析対象となるコードベースの依存関係を減らす
  • PC-lint 9.0 プリコンパイル済みのバイパスヘッダ機能を使用して、共通のインクルードファイル定義をキャッシュする

新しい PC-lint 9.0 プリコンパイル/バイパスヘッダのサポートは期待できますが、私たちの経験では、並列解析シナリオを正しく設定するのに多大な労力を必要とし、少なくとも PC-lint 9.00b では従来のPC-lint 解析では発生しないような偽の解析エラーを発生させる可能性があることが示唆されています。

以上のことから、これらのソリューションは基本的に効果が限られており、時間や多額の投資を必要とする可能性があります。

Incredibuildの導入

Incredibuildの分散コンピューティングが、外部インターフェイスをサポートすることを知りました。グリッドコンピューティング技術を使用して PC-lint の分析タスクをさらに高速化するという長期的な目的を考えると、試すべきソリューションであることは明らかでした。

利用可能なインターフェイスのうち、XMLインターフェイスは、各タスクのプロパティを詳細に指定でき、完了した解析タスクから解析結果を直接受け取ることができるため、私たちの要件に最も適していると思われました。

XMLインターフェイスが比較的簡単であることがわかり、特定のタスクからの出力を識別するのに苦労したものの、SourceFile属性とOutput属性に少し変更を加えることで解決し、Incredibuildを使用して PC-lint 分析タスクを実行できる Visual Lint の開発ビルドが完成しました。

Incredibuildを使用して実行されたテストの結果は、控えめに言っても目を見張るものでした。わずか6Agentを使用して、Visual Lint コードベースの完全な解析を約15分で完了させることができました。解析時間が大幅に短縮されました。

導入効果

Incredibuild を Visual Lint に統合することで、従来よりも大幅に短い時間で、独自のコードベースの完全な静的解析を実行できるようになりました。その結果、リグレッションをより迅速に特定して修正できるようになりました。

さらに、費用面では、グリッド・コンピューティングのコード解析ソリューションを自分たちで実装しようとした場合に発生するであろうコストのほんの一部で、この機能を当社製品に組み込むことができました。

また、Incredibuild ビルドモニターを使用して解析タスクの進捗状況を非常に明確に可視化することができますが、この機能も Visual Lint のディスプレイと一緒に開発環境に統合されています。

Visual Lint/Incredibuild ソリューションにより、PC-lint コード解析作業をほんのわずかな時間で実行でき、コード解析プロセスの効果を大幅に向上させることができました。

Riverbladeについて

Riverblade社は英国を拠点とする独立系ソフトウェアベンダーであり、コード解析ツールとVisual Studioの統合を専門とするマイクロソフトのパートナー企業です。

同社のVisual Lintは、業界標準のPC-lint C++コード解析ツールをVisual StudioとVisual C++開発環境に連携されています。2005年11月のリリース以来、Visual Lintは、これまでのコード解析製品にはなかった方法で、Visual Studio と Visual C++ の開発者に PC-lint コード解析の自動化をもたらしました。Visual Lint を導入すれば、長時間の解析作業の完了を待つ必要はなく、開発者はコードを書くことに専念できます。また、解析結果は、開発者が作業を中断することなくバックグラウンドで収集され、わかりやすく表示されます。

詳細は www.riverblade.co.uk/products/visual_lintをご覧ください。

Incredibuild時間

  • コード解析

    15 mins
    4 hours
With Incredibuild
Without Incredibuild