Coverityの日本支社は5月12日、マルチスレッド・アプリケーション向けの動的解析ツール「Coverity Thread Analyzer for Java」の販売を開始した。出荷開始は6月の予定。

データ破壊やアプリケーション不具合の原因となる並列処理に起因する欠陥を自動的に検出する。主な特徴は、

  1. 実行時のコードを観察し、独自のスレッド解析を行なうことで競合状態やデッドロックの発生を予測、特定する
  2. マルチコア環境で効果的に作用する初の動的解析ソリューション
  3. 同社の既存製品である静的解析ツール「Coverity Prevent」との連携

となる。ライセンス価格は解析対象となるコードの量に応じた体系となっており、Preventでは50万行のソースコードに対して年間450万円、Thread Analyzer for Javaはその110%ということで、500万円程度だという。

まず企業概要の説明を行なった日本アジア担当 マネージングディレクターのリッチ・セルート(Rich Cerruto)氏は「早い段階での不具合発見がソフトウェア開発コストの軽減に直結し、ソフトウェアの品質向上をもたらす」とした。

Coverity アジアパシフィック マネージングディレクター リッチ・セルート氏

さらに、マルチコア・プロセッサの急速な普及によってマルチスレッド・アプリケーションを開発する必要性が高まっていることを指摘し、同社製品の潜在的な市場の大きさを強調した。

同社は米スタンフォード大学のコンピュータ・システム・ラボからのスピンアウトとして2002年に設立されたソースコード解析ツール企業だ。主力製品であるPreventは静的ソースコード解析を行なうツールで、1.0でC言語、2.0でC++をサポートし、2006年の3.3からJavaをサポートしている。

Preventは3.3からJavaをサポート

Preventにおける同社の技術面での強みについてセルート氏は、「プロシージャ間解析の技術」と「あらゆるパスを解析する技術」「数百万行にも対応する解析容量と15%以下という低い誤検知率」の3点だという。

Coverity製品のメリット

続いて、初期の研究開発メンバーで共同創業者でもあり、現在はCoverityのCTOを務めるベン・シェルフ(Ben Chelf)氏がThread Analyzer for Javaの概要について説明を行なった。

Coverity CTO ベン・シェルフ氏

同氏は「シングルスレッドからマルチスレッドに移行すると、スレッド間のコミュニケーションが発生することによって複雑さが指数関数的に増大する」ことがマルチスレッド・アプリケーション開発の難しさの原因だとし、マルチスレッド開発に関する充分なトレーニングを受けた開発者が不足しているにもかかわらず、市場からはマルチコア・プロセッサを生かすマルチスレッド・アプリケーション開発が強く求められている現状があり、Thread Analyzer for Javaはその需要に応えるツールだと位置づけた。

同氏はマルチスレッド・アプリケーションの"2大欠陥"として"デッドロック(Deadlock)"と"競合(race condition)"の2種を挙げ、このいずれも、コードの実行時に実際に発生しなくてもその発生可能性を予測して指摘できるという。

また、オーバーヘッドが少ない点も技術的なアドバンテージであり、同種の競合ツールが現状コード実行時の10~100倍程度のメモリを要するのに対し、Thread Analyzer for Javaでは2倍で済むという。

マルチスレッド開発の課題と欠陥

さらに同氏は、静的分析ツールであるPreventは「100%のパスをもれなく調査するが、調査の深さには限界がある」とし、調査対象となるパスの範囲は狭くなるものの、その範囲内ではより掘り下げた深い調査ができるThread Analyzerと組み合わせることでより確実に並列処理特有の深刻な欠陥を回避できるようになるという。

静的解析と動的解析の複合解析

なお、PreventがC、C++から始まったのに対し、Thread AnalyzerがまずJava向けに提供されたのは「マルチスレッド・アプリケーション開発の需要が強いから」だと言い、C、C++対応版については現在開発中だとした。

Thread Analyzerの特長