Coverity Static Analysis(静的解析)

  • 関数呼出しの状況をインライン展開し表示するため、関数コール間で発生する不具合の根本原因を容易に特定可能。
  • 開発共通ブランチに発生している不具合のビュー
  • プロジェクトと製品に発生しているリアルタイムの不具合状況のビュー
  • ここの開発者に割り当てられた不具合のビュー

コベリティのデベロップメントテスト・プラットフォームで中核の構成要素となっているCoverity® Static Analysis(静的解析)は、発見が難しくクラッシュの原因となりうる不具合を、ソフトウェア開発ライフサイクルの早期段階で検出し、ソフトウェアエラーに関連するコストの低減、時間の短縮、リスクの軽減化を図ります。Coverity Static Analysisの業界最高の解析エンジンはC/C++やJava、C#の各言語で記述されたソースコードに潜む重大な不具合をつきとめ、地理的に離れた組織で作業する何千人の開発者、数千個の不具合、数百万行のソースコードが対象であっても一度で解析できます。業界一を誇る高精度な解析とと誤検出率の低さにより、お客様は開発時間をプログラム・エラーの修正に浪費することなく、より重要な不具合の対応に集中できます。C/C++言語向けの並列解析および増分解析により、多くの場合ソースコードを数分で解析できるため、開発者はソースコードの解析をより頻繁に、かつ効率的に行えます。最大8コアまで同時に解析が実行でき、その対象も、変更のあったファイルだけか、変更で影響を受けるファイルかを選べます。

Coverity Static Analysisには直観的に使えるユーザー・インターフェイスCoverity Integrity Managerが用意されており、これを使えば、開発者や開発マネージャーはコード上で不具合を素早く、簡単に管理することができます。

Coverity Integrity Manager の使用で下記が可能になります。

  • 不具合を重大性に基づいて優先順位付け
  • 関係のある特定の不具合だけを見えるように不具合情報をフィルター
  • 自動的にプロジェクトやコードブランチにまたがって存在する不具合を特定
  • 分散したチームや地理的に離れたチームにまたがってトリアージ情報を他の開発者と共有

Coverity Integrity Managerで提供されるCWEへのリンクにより、各種類の不具合に関して詳しい情報を得られます。

「ソフトウエア開発サイクルの早期段階でCoverity社製品を使ってバグを検出することで、製品をスケジュール通りに市場投入できました。Coverity社製品によって検出された全バグの25%が、そのままでは製品の発売時期を延期せざるを得ないような重大なバグでした。検出されたバグのすべてにテスト・チームや品質保証部門が目を通していれば、この値はさらに高くなっていたことでしょう」 – システムエンジニアマネジャー Dan Rose

'業界トップの解析エンジン

Coverity Static Analysisは特許取得済の革新的で高性能な手法に基づいて、ほかの手段では不可能ではないにしても見つけるのが難しいソースコード内の不具合を検出します。Coverity Static Analysisは、市場で最高精度の解析エンジンを備えており、業界で最も低いレベルの誤検出率を実現しています。

検出可能な不具合の種類のサンプルはこちら

コベリティの解析エンジンならではの特長は、機械的な解析とは異なり、人間と同じようにソースコードを理解し、解析することです。以下はこのことを実現しる要素です。

  1. カバレッジの広さ: ソースコード内にあるさまざまな種類の不具合を、複数の方法を使って探します。
  2. コーディング動作: ソフトウェア開発者のコーディング動作とコードに込めた意図を考慮し、「何を言ったか」でなく「何を言わんとしているか」を理解します。
  3. 継続的な調整: 企業顧客やオープンソース・コミュニティの何兆行ものソースコードを解析して得た情報を活用して、解析エンジンを調整します。

この高機能なガイダンスにより、どのような不具合がどこで発生したかを素早く検知できるので、時間短縮と、より多くの不具合の迅速な修正につながり、ソースコード開発における中核的なタスクに集中できます。

100%のソースコード・カバレッジ

Coverity Static Analysisは、最高レベルの精度を誇ります。テスト・ケースを作成する必要なく、ソースコードの各行にわたって隠れた不具合を見つけていきます。しかも、論理的な誤りが原因で到達できなくなっている箇所を明らかにすることさえ可能です。

ブール式の充足可能性(SATソルバー)

この革新的な技術では、実行不可能なパスの実行および排除によって、起こりえない不具合を抑制するので、検出漏れを起こすことなく誤検出率を低く抑えています。

プロシージャ間解析

多くのエラーは、関数の境界をまたいではじめて検出できます。この解析技法では、すべての関数にわたってソースコードを追跡し、無限のレベルまで踏み込んで不具合を見つけ、問題の証拠としてその不具合を明示する実行パスをずばりと提示します。

統計解析とプログラマーの意図

特許取得済みのこのコベリティの手法は、パターンを検索し、特定のパターンからの逸脱があったときに報告します。解析エンジンは、ユーザーの動作を追跡することで、単にソースコードが持つ意味ではなくプログラマーの意図を認識します。

FindBugs™ 解析

Java向けの主要なオープンソースデベロップメントテスト・ツールであるFindBugsは、すぐに使える形でコベリティ製品に搭載されました。コベリティはFindBugsチェッカーを微調整し解析精度を向上するとともに、その結果を不具合の集中管理システムであるCoverity Integrity Managerに統合しています。これにより、開発者にはあらゆる不具合の優先順位付け、管理、閲覧ができる単一のロケーションが提供されます。開発者どうしおよび、地理的に分散したチームにまたがって共有トリアージデータストアからトリアージ履歴を共有できるため、より効率的に開発の共同作業を進められます。

並列解析

C/C++およびJava向けのコベリティ並列解析は、最大8コア上で同時に解析が実行できるため、複雑なソースコードベースを定期的に解析でき、コベリティのデベロップメントテストを夜間ビルドまたは継続的インテグレーションのプロセスに組み込むことが可能です。並列解析を使っているお客様は、ソースコードの解析を逐次解析に比べ最大10倍の速度で実行可能です。

増分解析

C/C++およびJava向けのコベリティ増分解析により、変更されたファイル、および変更で影響を受けたかもしれないファイルのみを自動的に検知し解析でき、ソースコードの解析がスピードアップされました。

カスタマイズ可能な解析

使用するチェッカーの数の変更、または個々のチェッカー固有の設定を変更することで、解析を微調整します。Coverity Static Analysisの設定は、特定のコード分割やアプリケーションに合わせて変更できるため、最適なパフォーマンス・レベルを選択でき、より精度が高く信頼できる結果が得られます。

Coverity Static Analysisソフトウェア開発キット(SDK)

今までExtendと呼ばれていたCoverity Static Analysis SDKを使うと、開発者はお客様のソースコードベース特有のニーズに合わせてカスタム・チェッカーを作成できます。詳細はこちらを参照ください。

不具合管理

「多くの場合、エラーについて説明するのは、エラーを見つけることよりも難しいものです。説明が正しく理解されないと、エラーが無視され、さらには誤検出にもつながりかねません」A Few Billion Lines of Code Later(数十億行のコード解析から得たもの)

数千件もの不具合に直面した場合、何から始めたらよいのでしょうか。Coverity Integrity Managerは、発見された不具合のひとつひとつに関して、その不具合のわかりやすい説明、重大性、不具合の場所を示し、次の3つの重要な問いに答えられるようにします。

  1. どの不具合が最も重大か?
  2. どの不具合を最初に修正すべきか(それとも修正しなくていいのか)?
  3. この不具合を含むプロジェクトや製品が他にあるか?

この可視性によって、開発者はトリアージ時間を大幅に短縮できます。1つのプロジェクト内での影響のほか、全てのプロジェクトにわたる影響や、ビジネスへの影響に基づいて不具合修正の要否を決定するための実践的な情報がもたらされます。これにより、スケジュールの遅れや品質に関連した問題が起きるリスクを低減できます。トリアージ情報は中央で蓄積され開発者が世界中の他の同僚と情報を共有でき、深刻な不具合をより素早く修正できるようになります。

不具合の説明

Coverity Integrity Managerは、不具合の分かり易い説明、重大性、不具合がビジネスにおよぼす潜在的影響を指摘するので、開発者はどの不具合を最初に修正すべきか素早く割り出せます。

Common Weakness Enumeration(CWE)とのマッピング

不具合はすべて、Coverity Integrity Managerを通じてCWEへマッピングされます。CWE とはコミュニティが開発した不具合に関する辞書で、不具合情報の収集と重大性についての理解の推進、その不具合に対する既知の攻撃の特定、修正案のガイダンスの提供を行っています。情報豊富な知識ベースにクリックひとつでアクセスでき、見慣れない不具合を調査する際の憶測を排除し、根本原因を迅速に特定できるようになります。

不具合ナビゲーション

ソースコード内の不具合の場所をピンポイントで特定して、実際のソースコードを表示するので、不具合の前後関係がよくわかります。また、複数のプロジェクト、コード・ブランチ、製品バージョンにわたって不具合の発生回数がわかります。

関数呼び出しのインライン展開

プロシージャ間にかかわる不具合の場合は、関数呼び出しをインライン展開し、多重の入れ子構造になっている実行パスを把握して、不具合に関する包括的な説明が得られます。このような方法は、マニュアルでソースコードを調査するときには不可能です。

チェッカーの分類

クラッシュの原因となるエラーや、セキュリティ脆弱性、予期せぬ動作、パフォーマンス低下といったカテゴリーごとにチェッカーをまとめることで、不具合を容易に優先順位付けできます。この分類機能では、メモリー破損や、リソース・リーク、セキュリティのベスト・プラクティス違反、安全性を欠いたデータ処理など、問題の症状がどのように現れるかに基づいて、各チェッカーを適切なカテゴリーにマッピングします。次いで、数百万行ものオープンソースコードを解析してきた当社の豊富な経験に基づいて、これらの不具体の種類を高インパクト、中インパクト、低インパクトのいずれかに優先順位付けします。チェッカーの分類とインパクトの種類はカスタマイズが可能で、開発者の組織特有なワークフローに合うように設定できます。

ソースコードのナビゲーション

直感的なナビゲーションを提供しており、元のファイルやディレクトリ構造を使用して、ソースコードの残りの部分で問題が及ぶ範囲を評価したり、理解することができます。

柔軟な不具合フィルタリング

Coverity Integrity Managerは柔軟な不具合フィルタリング機能を備えており、ユーザーにとってもっとも重要な情報に素早くアクセスできます。

不具合のインパクト・マッピング(「プロジェクト・インパクト・マッピング」を代替案として検討すること)

開発の現場では時間短縮のため、ソースコードの再利用がよく行われています。ただし、コードベースが増大するに伴い、ソースコードの共有やブランチ作成に際し複雑性が増し、不具合の検出が困難になってきます。他のソリューションでは、不具合の一覧は提供されても、その影響に関する詳細は得られません。また、同じ不具合が複数の異なる不具合であるかのようにみえることがあり、複数のプロジェクトや製品に対するその不具合の影響を見抜くには、手作業が必要になります。

Coverity Integrity Managerはコードベース全体にわたって不具合の影響をマッピングし、ソースコードを共有している別のプロジェクトや製品に含まれる不具合を警告します。

複数のプロジェクトに発生する不具合の影響を素早く特定できるため、不具合の修正プロセスが明確で扱いやすいものになります。また、複数のプロジェクトに共通して含まれる不具合を1つの不具合として扱うので、効率よく迅速に不具合を修正できるようになると同時に、可視性が高まるため、より大きな影響を及ぼす優先度の高い不具合の修正に集中的に取り組めるようになります。

開発ワークフローへの統合

コベリティは使い勝手がよく、標準的な開発ワークフローにシームレスに統合できます。

デスクトップ解析

Coverity Static Analysisは、お客様の開発環境で簡単に使えます。開発者は自分のデスクトップ上のEclipseやVisual Studio、WindRiver Workbench IDEからすぐさま、不具合の解析、トリアージ、修正ができます。これにより、中央のビルド・システムでチェックする前に、開発者の記憶が新しいうちに自分が書いたソースコードをデバッグすることが可能になります。

Jenkinsとの統合

コベリティは、設定の必要なしにJenkins 継続 Integration Serverと統合できます。これにより、継続的プロセスを自動的に適用し、品質向上が図れます。

プロセス統合

コベリティはお客様の環境開発における重要なコンポーネントとシームレスに統合します。統合できる開発ツールの例は、SCM、バグ管理システム、IDE、Jenkinsのような継続したビルドシステムです。我々の拡張プラットフォームの使用により、お客様はFindBugsのようなサードパーティテストソリューション(Java向けの主要なオープンソース静的解析エンジン)と統合できます。JenkinsとFindBugsに追加して、コベリティはその他多くのソリューションと統合することができます。統合の例はこちらでご覧ください。

不具合レポート

ブランチ単位やプロジェクトごと、あるいは複数のプロジェクトにわたって不具合の履歴と解決状態を把握し追跡することは、より適切な意思決定と、長期にわたる開発者の生産性や品質の向上の測定に不可欠です。Coverity Integrity Managerのレポートは、次の3つの重要な質問に答えるための情報を提供します。

  1. どの不具合が修正されているか?そして重大な不具合はすべて修正されているか?
  2. 共有ソースコードに存在する不具合のすべてがトリアージされ、修正されているか(あるいは修正不要になったか)?
  3. 不具合の数と品質の推移を、長期にわたり、製品ごとやリリースごと、チェッカー/不具合タイプごと、ユーザーごとに見た場合、どのようなトレンドが認められるか?

マトリックスとトレンド分析

コベリティは、組織全体にわたる品質、セキュリティ、効率性のトレンドについて、たぐいまれな可視性を提供します。Coverity Integrity Managerを使えば前回の解析以降の不具合の数、中央のビルドで見つかった不具合の数、デスクトップ解析で見つかった不具合の数などについて、詳細な情報が得られます。

マネージャーやエグゼクティブはCoverity Integrity Controlを使うことで、チームごとやソフトウェア・コンポーネントごとの長期にわたる品質およびセキュリティのトレンドを幅広く把握できます。そしてマネージャーは、組織内にどのようなリスクがあるかをより深く理解するために、素早く詳細ビューを掘り下げることが可能です。