(57)【特許請求の範囲】
【請求項１】
コンピュータによって実行される、ソフトウェアコードの品質分析方法であって、
複数の分析ツールからなる分析ツールセット内のそれぞれの分析ツールについての性能統計を計算するステップと、
前記分析ツールセットに含まれる複数の分析ツールを用いて、コードベースを分析するステップと、
前記複数の分析ツールのそれぞれについて、対応する分析ツールによって特定される誤りおよび正しさを示す分析結果を生成するステップと、
前記複数の分析ツールのそれぞれと関連付けられた前記分析結果と前記複数の分析ツールのそれぞれに関連付けられた性能統計とに基づいて、前記コードベースにおける欠陥の期待数を推定するステップと、
を含み、
前記コードベースにおける欠陥の期待数を推定するステップは、
前記コードベースを分析するステップにおいて検出された１つまたは複数の誤りを、前記複数の分析ツールに関連付けられた前記性能統計に基づいて、実誤りと擬似誤りに分類するステップを更に含む、
方法。
【請求項２】
請求項１に記載の方法であって、前記１つまたは複数の誤りを実誤りと擬似誤りに分類するステップは、
前記複数の分析ツールに関連付けられた前記性能統計に基づいて、１つまたは複数のラインに欠陥がある集計確率を計算するステップと、
前記複数の分析ツールに関連付けられた前記性能統計に基づいて、１つまたは複数のラインに欠陥がない集計確率を計算するステップと、
前記欠陥がある集計確率と前記欠陥がない集計確率とを比較して、前記１つまたは複数の誤りを実誤りと擬似誤りに分類するステップと、
を含む、方法。
【請求項３】
請求項１または２に記載の方法であって、
前記分析ツールセットの性能統計を決定するための複数のソフトウェアコードベースであって、既知の誤りが意図的に含められたソフトウェアコードベースを格納するステップ
と、
前記複数のソフトウェアコードベースに意図的に含められた既知の誤りを反映した検証データを格納するステップと、
前記分析ツールセットのそれぞれの分析ツールを用いて前記複数のソフトウェアコードベースを分析するステップと、
前記分析ツールセットのそれぞれの分析ツールの出力を前記検証データと比較して、当該分析ツールの前記性能統計を決定するステップと、
を含む、方法。
【請求項４】
請求項１〜３のいずれか１項に記載の方法であって、
前記コードベースにおける欠陥の期待数を推定するステップは、
前記コードベースにおけるライン総数を決定するステップと、
前記コードベース内の１ラインあたりの欠陥の確率を計算するステップと、
前記コードベースにおけるライン総数と前記コードベース内の１ラインあたりの欠陥の確率とに基づいて、前記コードベース内の欠陥の期待数を計算するステップと、
を含む、方法。
【請求項５】
請求項１〜４のいずれか１項に記載の方法であって、
前記複数の分析ツールのそれぞれと関連付けられた前記分析結果と前記複数の分析ツールのそれぞれと関連付けられた前記性能統計とに基づいて、前記コードベースにおける隠れた欠陥の期待数を推定するステップを、更に含み、
前記隠れた欠陥の期待数は、前記複数の分析ツールによって欠陥がないまたは分析不能であると決定された１つまたは複数のラインに含まれる欠陥の期待数を示す、
方法。
【請求項６】
請求項１〜５のいずれか１項に記載の方法であって、
前記コードベースの推定された欠陥の期待数に基づいて、品質保証タスクを実行するステップを更に含む、方法。
【請求項７】
請求項６に記載の方法であって、前記品質保証タスクは、最適なリソース割当または優先付けされたバグチケットの発行を含む、方法。
【請求項８】
請求項１〜７のいずれか１項に記載の方法であって、
前記性能統計は、前記分析ツールセット内の各分析ツールについての、欠陥検出率、偽陽性検出率、前記欠陥検出率の補数、前記偽陽性検出率の補数、の少なくともいずれかを含む、
方法。
【請求項９】
請求項１〜８のいずれか１項に記載の方法の各ステップをコンピュータに実行させるためのコンピュータプログラム。
【請求項１０】
１つまたは複数のプロセッサと、
１つまたは複数のメモリであって、請求項９に記載のコンピュータプログラムを格納したメモリと、
を備える、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、静的分析および性能データを使用するコードベースのリスク分析に関する。
【背景技術】
【０００２】
ソースコードに存在するバグを特定することは、厄介な問題である場合が多い。いくつかの既存の静的分析ツールは、ソースコードを分析してそのようなバグを発見することができるが、一般に、これらのツールによって生成された分析結果には、何らかの偽陽性（バクであると検出されるが実際にはバグではない）が常に存在する。その結果、ソースコードをバグのないコードやバグの多いコードに分類には、手動の介入および分析が必要とされる場合が多く、その対処に時間がかかるばかりではなく、かなりの技術的労力が不都合なほどに必要とされる。さらに、既存の分析ツールを使用すると、分析ツールによって生成された分析結果は偽陽性の表示を含むため、ソースコードが実際に欠陥を含むかどうかを評価する全体的なリスク評価の正確な生成が難しい。これにより、ソフトウェア品質保証プロセスは、非常にリソース集約的で、管理が難しいものになり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、ソースコードが実際に欠陥を含むかどうかを正確に評価可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００４】
この開示で説明される対象物の革新的な一態様によれば、システムは、１つまたは複数のプロセッサと、１つまたは複数のメモリとを含む。当該メモリは、１つまたは複数のプロセッサによって実行される際に、複数の分析ツールからな分析ツールセットの性能統計を計算するステップと、分析ツールセット内の１つまたは複数の分析ツールを使用してコードベースを分析するステップと、１つまたは複数の分析ツールのそれぞれについて、対応する分析ツールによって特定される誤りおよび正しさを示す分析結果を生成する誤りステップと、１つまたは複数の分析ツールのそれぞれと関連付けられた分析結果と１つまたは複数の分析ツールのそれぞれと関連付けられた性能統計に基づいて、コードベースにおける欠陥のリスクを推定するステップと、をシステムに実行させる命令を格納する。
【０００５】
一般に、この開示で説明される対象物の別の革新的な態様は、１つまたは複数のコンピューティングデバイスによって実行される、ソフトウェアコードの品質分析方法である。当該方法は、複数の分析ツールからなる分析ツールセットの性能統計を計算するステップと、分析ツールセットに含まれる１つまたは複数の分析ツールを用いて、コードベースを分析するステップと、１つまたは複数の分析ツールのそれぞれについて、対応する分析ツールによって特定される誤りおよび正しさを示す分析結果を生成するステップと、１つまたは複数の分析ツールのそれぞれと関連付けられた分析結果と１つまたは複数の分析ツールのそれぞれに関連付けられた性能統計とに基づいて、コードベースにおける欠陥のリスクを推定するステップと、を含む方法。誤りとして具体化することができる。
【０００６】
他の態様は、これらのおよび他の革新的な態様に対応する方法、システム、装置およびコンピュータプログラム製品を含む。
【０００７】
これらのおよび他の実施形態は各々、場合により、以下の特徴および／または動作のうちの１つまたは複数を含み得る。例えば、上記方法は、１つまたは複数のコンピューティ
ングデバイスを使用して、分析ツールセットの性能統計を決定するための複数のソフトウェアコードベースであって、既知の誤りが意図的に含められたソフトウェアコードベースを格納するステップと、複数のソフトウェアコードベースに意図的に含められた既知の誤りを反映した検証データを格納するステップ誤りと、分析ツールセットのそれぞれの分析ツールを用いて前記複数のソフトウェアコードベースを分析するステップと、分析ツールセットのそれぞれの分析ツールの出力を検証データと比較して、分析ツールの性能統計を決定するステップと、を含み得る。
【０００８】
また、上記方法は、コードベースにおけるライン総数を決定するステップと、コードベース内の各ラインについての欠陥の確率を計算するステップと、コードベースにおけるライン総数とコードベース内の各ラインについての欠陥の確率とに基づいて、コードベース内の欠陥の期待数を計算するステップと、を含み得る。
【０００９】
また、上記方法は、１つまたは複数の分析ツールのそれぞれと関連付けられた分析結果と１つまたは複数の分析ツールのそれぞれと関連付けられた前記性能統計とに基づいて、コードベースにおける隠れた欠陥のリスクを推定するステップを、含み得る。隠れた欠陥のリスクは、１つまたは複数の分析ツールによって欠陥がないまたは分析不能であると決定された１つまたは複数のラインが、欠陥を有することを示す。
【００１０】
また、上記方法は、コードベースの推定された欠陥のリスクに基づいて、品質保証タスクを実行するステップを更に含み得る。ここで、上記品質保証タスクは、最適なリソース割当または優先付けされたバグチケットの発行を含み得る。
【００１１】
また、上記方法における性能統計は、ツールセット内の各分析ツールについて、欠陥検出率、偽陽性検出率、前記検出率の補数、前記偽陽性検出率の補数、の少なくともいずれかを含み得る。
【００１２】
また、上記方法は、１つまたは複数の誤りを、１つまたは複数の分析ツールに関連付けられた前記性能統計に基づいて、実誤りと擬似誤りに分類するステップを更に含み得る。さらに、１つまたは複数の分析ツールに関連付けられた性能統計に基づいて、１つまたは複数のラインに欠陥がある集計確率を計算するステップと、１つまたは複数の分析ツールに関連付けられた性能統計に基づいて、１つまたは複数のラインに欠陥がない集計確率を計算するステップと、欠陥がある集計確率と欠陥がない集計確率とを比較して、１つまたは複数の誤りを実誤りと擬似誤りに分類するステップと、を含み得る。
【００１３】
本開示は、多くの点において特に有利である。例えば、本明細書に記載される技術を使用して、分析ツールセットによって生成される偽陽性結果を緩和し、ソフトウェアプログラムのソースコードにおける実誤りを検出することができる。さらに、本技術は、ソースコードにおける隠れた誤りがあるラインも特定することができ、それらのラインが分析ツールセットによって安全なものまたは誤りのないものとして特定されているか否かに関係ない。それに加えて、本技術は、例えば、バッファオーバーラン、ゼロ除算、ヌルポインタ参照などを含む、異なるタイプの誤りに対する性能情報に基づいて、分析ツールセットによって特定された誤りのうちの１つまたは複数を高い可能性の誤りに分類することができる。前述の利点は例示として提供され、本技術は他の多くの利点や利益を有し得ることを理解すべきである。
【発明の効果】
【００１４】
本発明によれば、ソースコードが実際に欠陥を含むかどうかを従来よりも正確に評価することができる。
【図面の簡単な説明】
【００１５】
【図１】コードベースにおける欠陥のリスクを推定するための例示的なシステムを示すブロック図である。
【図２】例示的な品質分析アプリケーションを有する例示的なコンピューティングシステムを示すブロック図である。
【図３】分析ツールセットと関連付けられた分析結果および性能統計に基づいて、コードベースにおける欠陥のリスクを推定するための例示的な方法のフローチャートである。
【図４Ａ】分析ツールセットと関連付けられた分析結果および性能統計に基づいて、コードベースにおける欠陥のリスクを推定するための例示的な方法のフローチャートである。
【図４Ｂ】分析ツールセットと関連付けられた分析結果および性能統計に基づいて、コードベースにおける欠陥のリスクを推定するための例示的な方法のフローチャートである。
【図５】例示的なコードベースにおける全体的な欠陥のリスクを推定するための例示的な方法のフローチャートである。
【図６】例示的なコードベースと関連付けられた全体的な欠陥のリスクを演算するための例示的な方法を示すグラフ表現である。
【図７】例示的なコードベースと、コードベースを分析することに基づいて生成された分析結果とを示す。
【図８】例示的な分析ツールを用いて例示的なコード集合体を評価することに基づいて生成された例示的な性能統計を示す。
【図９】分析ツールセットに対する性能統計を決定するための例示的な方法のフローチャートである。
【図１０】例示的なソフトウェアテストの間に発見された欠陥の累積数に基づく例示的な信頼度曲線を描写するグラフ表現である。
【図１１】２つの例示的なソースコードと関連付けられた隠れた欠陥のリスクと、各ソースコードと関連付けられた隠れた欠陥のリスクに基づく、これらのソースコードへのリソース配分とを表すグラフ表現である。
【図１２】異なる欠陥タイプによる異なる分析ツールに対する検出率を表す一連のクモの巣グラフを描写する。
【図１３】異なる欠陥タイプによる異なる分析ツールに対する偽陽性率を表す一連のクモの巣グラフを描写する。
【図１４】欠陥を有するものとして検出されたコードベースの例示的なラインを安全なラインまたは欠陥があるラインに分類するための例示的な方法を示すグラフ表現である。
【図１５】分析ツールセットと関連付けられた性能統計に基づいて、誤りを実誤りまたは疑似誤りに分類するための例示的な方法のフローチャートである。
【発明を実施するための形態】
【００１６】
本開示は、添付の図面の図において、限定としてではなく、例示として示され、添付の図面では、同様の参照番号を使用して、同様の要素を指す。
【００１７】
＜概要＞
図１は、コードベースにおける欠陥（defect）のリスクを推定するための例示的なシステム１００を示すブロック図である。図示されるシステム１００は、コンピューティングシステム１０１、クライアントデバイス１３５および実行プラットホーム１１５を含む。いくつかの実施形態では、システム１００の各エンティティは、ネットワーク１０５を介して通信可能に結合される。コンピューティングシステム１０１は、ネットワーク１０５を介しておよび／またはより直接的に信号線１１０を介して、実行プラットホーム１１５
と通信可能に結合することができる。ユーザ１２５は、クライアントデバイス１３５、コンピューティングシステム１０１および／または実行プラットホーム１１５と相互作用する（例えば、使用する、入力を提供する、結果を閲覧するなど）ことができる。
【００１８】
ネットワーク１０５は、有線や無線の従来のタイプのものであってよく、スター構成、トークンリング構成または他の構成を含む多くの異なる構成を有し得る。その上、ネットワーク１０５は、１つまたは複数のローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）（例えば、インターネット）、パブリックネットワーク、プライベートネットワーク、仮想ネットワークおよび／またはその間で複数のデバイスが通信可能な他の相互接続データ経路を含み得る。いくつかの実施形態では、ネットワーク１０５は、ピアツーピアネットワークであり得る。また、ネットワーク１０５は、種々の異なる通信プロトコルでデータを送信するための電気通信ネットワークの一部と結合することも、同ネットワークの一部を含めることもできる。いくつかの実施形態では、ネットワーク１０５は、近距離（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標））通信ネットワーク、または、ショートメッセージサービス（ＳＭＳ）、マルチメディアメッセージングサービス（ＭＭＳ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、直接的なデータ接続、ＷＡＰ、Ｅメールなどを介してデータを送信および受信するためのセルラ通信ネットワークを含む。図１は、コンピューティングシステム１０１、クライアントデバイス１３５および実行プラットホーム１１５と結合された１つのネットワーク１０５を示しているが、実際には、１つまたは複数のネットワーク１０５をこれらの実体に接続することができる。
【００１９】
コンピューティングシステム１０１は、例えば、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、サーバ、タブレットコンピュータ、携帯電話、携帯情報端末（ＰＤＡ）、モバイルＥメールデバイス、または、情報の処理およびネットワーク１０５へのアクセスが可能な他の任意の電子デバイスなど、メモリとプロセッサとを含み得るコンピューティングデバイス（コンピュータ）であり得る。描写されるように、コンピューティングシステム１０１は、信号線１０４を介してネットワーク１０５に接続される。いくつかの実施形態では、コンピューティングシステム１０１は、実行プラットホーム１１５および／またはクライアントデバイス１３５にデータを送信したり、実行プラットホーム１１５および／またはクライアントデバイス１３５からデータを受信したりすることができる。例えば、コンピューティングシステム１０１は、ソフトウェアアプリケーション１０３ａまたはコンピューティングシステム１０１に対する様々な更新をソフトウェアアプリケーション１０３ｂとして実行プラットホーム１１５にダウンロードし、ソフトウェアアプリケーション１０３ｂを実行プラットホーム１１５に実行させることができる。ユーザ１２５は、コンピューティングシステム１０１と相互作用することができる。図１は、１つのコンピューティングシステム１０１を示しているが、システム１００は、１つまたは複数のコンピューティングシステム１０１を含み得る。
【００２０】
いくつかの実施形態では、ユーザは、様々な入力および出力デバイス（例えば、キーボード、ポインタデバイスなど）を使用して直接コンピューティングシステム１０１にアクセスすることも、ネットワーク１０５およびクライアントデバイス１３５を介してリモート操作でシステムにアクセスすることもできる。いくつかの事例では、コンピューティングシステム１０１は、クライアントデバイス１３５を使用してネットワーク１０５を介してアクセス可能なサーバを含み得る。さらなる事例では、コンピューティングシステム１０１は、ユーザ１２５がソフトウェアアプリケーション１０３ａのテストおよび／または開発を行うように動作することができるワークステーションを含み得る。また、他の変形例も可能である。
【００２１】
描写されるように、コンピューティングシステム１０１は、品質分析アプリケーション１０９、開発中のソフトウェアアプリケーション１０３ａ、複数の分析ツール１１７ａ、
１１７ｂ…１１７ｎ（本明細書では、個別におよび／またはまとめて１１７とも呼ぶ）を含み得る。ソフトウェアアプリケーション１０３ａは、様々な定義、関数、ルーチン、メソッド、ロジックなどを含むコードの複数のラインを有するコードベースまたはソースコード（同義で使用）によって具体化される。コードのラインは、１つまたは複数の文字に続いて、行端マーカー（例えば、キャリッジリターン、ネクストライン、ラインフィードなど）を含み得るが、他の変形例も可能である。それに加えて、ソフトウェアアプリケーション１０３ａは、複数のコードモジュール１０７ａ、１０７ｂ…１０７ｎ（本明細書では、個別におよび／またはまとめて１０７とも呼ぶ）を含み得る。各コードモジュール１０７ａ、１０７ｂ…１０７ｎは、ソフトウェアアプリケーション１０３ａに対する１つまたは複数の機能を実装することができる。モジュール１０７は、コードベースを具体化する単一のファイル、複数のファイルなどに含めることができる。
【００２２】
ソフトウェアアプリケーション１０３ａは、開発中のものであり得、開発者は、分析ツール１１７を品質分析アプリケーション１０９と協働して使用し、アプリケーションソフトウェア１０３ａにバグが含まれるかどうかをテストすることができる。いくつかの実施形態では、ソフトウェアアプリケーション１０３ａは、実行プラットホーム１１５のような組み込みシステム用に設計され実行されることができる。例えば、十分にテストした時点で、ソフトウェアアプリケーション１０３ａは、正式なリリースの準備が整い、ソフトウェアアプリケーション１０３ｂとして実行プラットホーム１１５にロードすることができる。
【００２３】
品質分析アプリケーション１０９は、１つまたは複数の分析ツール１１７によって生成された分析結果、および、１つまたは複数の分析ツール１１７と関連付けられた性能統計を使用して、ソフトウェアコードベースにおける欠陥のリスク（risk of defects）を推
定するためのロジックを含み得る。例えば、分析ツールによって生成された分析結果は、コードベースの各ラインに対して、誤り（fault）がある状態（faulty）、誤りのない状
態（fault-free）、および分析不可能な状態（non-analyzable）のうちの１つを含み得、分析ツールに対する性能統計（performance statistics）は、ツールの検出率（detection rate）および／または偽陽性率（false positive rate）を含み得る。品質分析アプリ
ケーション１０９は、少なくとも図２〜５を参照して以下でさらに詳細に説明されるように、分析結果および性能統計を使用して、コードベースにおける全体的な欠陥のリスク（overall risk of defects）を推定することができる。
【００２４】
いくつかの実施形態では、品質分析アプリケーション１０９は、１つまたは複数のコンピュータデバイスの１つまたは複数のプロセッサによって実行可能なソフトウェアを使用して実装することができる。いくつかの実施形態では、品質分析アプリケーション１０９は、デバイスとサーバの両方に格納してデバイスとサーバの間で分散させることも、デバイスまたはサーバのいずれか一方に格納することもできる。例えば、インターフェースモジュール２１０または他のコンポーネントなどの品質分析アプリケーション１０９の様々なコンポーネントは、クライアントデバイス１３５上、コンピューティングシステム１０１上、ネットワーク１０５と結合された別のコンピューティングデバイス上などに含めることができる。
【００２５】
分析ツール１１７は、ソフトウェアコードベースおよび／またはモジュールがそれらと関連付けられた誤り（例えば、エラー、バグ、欠陥など）を有するかどうかを決定するために、ソフトウェアコードベースおよび／またはモジュール（例えば、ソフトウェアソースコードの１つまたは複数のラインを有する）を分析するためのツールを含み得る。簡単のために、本明細書でソフトウェアコードベースについて一般に言及する場合に、コードベースが１つまたは複数のモジュールを含み得ることを理解すべきである。いくつかの実施形態では、分析ツール１１７は、１つまたは複数のセマンティックベースの静的分析ツ
ールを含み得る。分析ツール１１７ａ…１１７ｎは、スタンドアロンの分析ツールを含んでもよく、品質分析アプリケーション１０９と統合し品質分析アプリケーション１０９のデバッグ機能性を拡大することができるプラグインなどを含んでもよい。例示的な分析ツール１１７は、これらに限定されないが、ＭａｔｈＷｏｒｋｓ  ＰｏｌｙＳｐａｃｅ、ＡｂｓＩｎｔ  Ａｓｔｒｅｅ、Ｋｌｏｃｗｏｒｋ  Ｉｎｓｉｇｈｔ、Ｃｏｖｅｒｉｔｙなどを含み得る。
【００２６】
いくつかの実施形態では、分析ツール１１７は、ラインが、安全な（すなわち、誤りのない）ラインか、危険な（すなわち、誤りがある）ラインかおよび／または分析不可能な（すなわち、安全なもの／危険なものかを決定できない）ラインかを決定するため、ソフトウェアコードベースの各ラインを分析することができる。いくつかの実施形態では、分析ツール１１７は、その安全な状態、危険な状態および／または分析不可能な状態を示すため、色分けされたマークアップを使用して、コードベースの各ラインをハイライトすることができる。例えば、分析ツール１１７は、誤りのないコードラインを緑色で、分析されていないコードラインを黒色で、そして、誤りがあるコードラインを赤色で、マーク付けすることができる。
【００２７】
いくつかの実施形態では、分析ツール１１７の各々は、ソースコードベースにおいて検出された誤りの概要、コードベース内の誤りの各インスタンスの場所、分析可能または分析不可能であったコードベースの部分など、そのツールの発見事項について記述する分析結果を生成することができる。特定できる誤りの非限定的なタイプは、スタティックメモリ欠陥、ダイナミックメモリ欠陥、リソース管理欠陥、ポインタ関連欠陥、並行処理欠陥、不適切なコード欠陥、その他の欠陥などを含むが、これらに限定されない。
【００２８】
分析ツール１１７は、品質分析アプリケーション１０９がアクセスおよび／または取得できるように、生成した結果をファイルシステムまたはデータベースなどのデータストアに格納してもよいし、品質分析アプリケーション１０９による処理のために、上記結果を品質分析アプリケーション１０９に直接提供してもよい。いくつかの実施形態では、分析ツール１１７は、記憶装置２４５、ツールデータベース２４９、メモリ２３７などに、その結果を格納することもできるし、別のコンポーネントに直接、その結果を提供することもできる。いくつかの実施形態では、品質分析アプリケーション１０９は、ツール出力結果を受信するため、関連データストアおよび／または分析ツール１１７と結合することができる。いくつかの実施形態では、各結果は、品質分析アプリケーション１０９のインターフェースモジュール２１０（例えば、図２を参照）を介して提示するために提供することができる。いくつかの実施形態では、分析結果は、ラインごとに提供してもよいし、サブルーチンごと、関数ごと、メソッドごと、変数ごと、前述の組合せごとなどに提供してもよい。
【００２９】
実行プラットホーム１１５は、ソフトウェアコードベースを実装して実行するためのプラットホームであり得る。いくつかの実施形態では、実行プラットホーム１１５は、ハードウェア、ソフトウェアまたは前述の組合せを含む組み込みシステム実行プラットホーム１１５である。いくつかの実施形態では、実行プラットホーム１１５は、組み込みソフトウェアコードベースを実行することができるハードウェアデバイス、組み込みソフトウェアコードベースを実行するためのハードウェアおよび／またはソフトウェアエミュレータなどを含み得る。実行プラットホーム１１５の例は、これらに限定されないが、インフォマティクスシステム、音声認識システム、情報エンターテインメント（インフォテインメント）システム、タイヤ空気圧モニタリングシステム、適応走行制御システム、衝突警報システム、暗視および車線警報システムまたは車両に設置された他の任意の組み込みシステムを含み得る。さらなる例は、タブレット、ラップトップ、デスクトップコンピュータ、携帯電話などのユーザデバイスを含む。本明細書では、いくつかの実施例および実施形
態は、車両の組み込みシステムおよびソフトウェアの文脈で説明されているが、他の実施形態では、この技術は、他の任意の組み込みシステムおよび／またはソフトウェアに適用可能であることを理解すべきである。
【００３０】
いくつかの実施形態では、ソフトウェアアプリケーション１０３ａは、実行のためにコンピューティングシステム１０１から実行プラットホーム１１５にダウンロードし、製造中のソフトウェアアプリケーション１０３ｂとして格納することができる。いくつかの実施形態では、ソフトウェアアプリケーション１０３ａおよびソフトウェアアプリケーション１０３ｂは、異なる段階（開発中と製造中）にある同じソフトウェアアプリケーションのインスタンスを反映することができる。例えば、ソフトウェアアプリケーション１０３ｂは、テストが行われリリースに適していると見なされるのに対し、ソフトウェアアプリケーション１０３ａは、ソフトウェアアプリケーションの次のバージョンを反映し得、リリースのためにテストが行われている様々な改善または新機能を含み得る。
【００３１】
さらなる例として、ソフトウェア更新または初期開発の間、ソフトウェアアプリケーション１０３ａは、品質分析が実行された後で生産準備が整うものとして見なすことができ、次いで、製造中のソフトウェアアプリケーション１０３ｂとして、開発のために実行プラットホーム１１５にダウンロードすることができる。実行プラットホーム１１５は、ソフトウェアアプリケーション１０３ｂを実行して、必要に応じて、様々な結果および／または出力を提供することができる。様々な実施形態では、製造中のソフトウェアアプリケーション１０３ｂは、テスト、ベータ、フルリリースなどのソフトウェアであり得る。
【００３２】
クライアントデバイス１３５は、メモリ、プロセッサおよび他の様々なコンポーネントを含むコンピューティングデバイスであり得る。例えば、クライアントデバイス１３５は、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、携帯電話、携帯情報端末（ＰＤＡ）、モバイルＥメールデバイス、または、情報の処理およびネットワーク１０５へのアクセスが可能な他の任意の電子デバイスであり得る。クライアントデバイス１３５は、信号線１０６を介してネットワーク１０５と通信可能に結合することができる。いくつかの実施形態では、ユーザ１２５は、クライアントデバイス１３５と相互作用することができる。いくつかの実施形態では、クライアントデバイス１３５は、コンピューティングシステム１０１および実行プラットホーム１１５のうちの１つまたは複数にデータを送信したり、コンピューティングシステム１０１および実行プラットホーム１１５のうちの１つまたは複数からデータを受信したりすることができる。例えば、クライアントデバイス１３５は、品質分析アプリケーション１０９から、ソフトウェアコードベースにおいて推定される誤りの総数を記述するデータを受信し、ユーザインターフェースを介してユーザ１２５に情報を提示することができる。図１は、１つのクライアントデバイス１３５を示しているが、システム１００は、１つまたは複数のクライアントデバイス１３５を含み得る。
【００３３】
＜例示的な品質分析アプリケーション＞
ここで、図２を参照すると、例示的な品質分析アプリケーション１０９を有する例示的なコンピューティングシステム１０１がさらに詳細に示されている。図示されるように、コンピューティングシステム１０１は、いくつかの実施形態によれば、品質分析アプリケーション１０９、プロセッサ２３５、メモリ２３７、通信ユニット２４１、記憶装置２４５、コードデータベース２４７、ツール性能データベース２４９、ソフトウェアアプリケーション１０３ａおよび分析ツール１１７ａ、１１７ｂ…１１７ｎを含み得る。コンピューティングシステム１０１のコンポーネントは、バス２２０によって通信可能に結合される。バス２２０は、コンピューティングデバイスのコンポーネント間またはコンピューティングデバイス間でデータを転送するためのいかなるタイプの従来の通信バスも含み得る。
【００３４】
プロセッサ２３５は、算術論理演算ユニット、マイクロプロセッサ、汎用コントローラ、専門処理装置、または、演算を実行して表示デバイスに電子表示信号を提供する何らかの他のプロセッサアレイなどの１つまたは複数の処理装置を含み得る。プロセッサ２３５は、データ信号を処理することができ、複合命令セットコンピュータ（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャ、これらの命令セットの組合せを実装するアーキテクチャなどを含む様々なコンピューティングアーキテクチャを含み得る。いくつかの実施形態では、プロセッサ２３５は、汎用プロセッサ、専用プロセッサ、例えば、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサまたは同様のもののうちの１つであり得る。図２は、単一のプロセッサ２３５を描写しているが、複数のプロセッサを含めることができる。他のプロセッサ、オペレーティングシステム、センサ、ディスプレイおよび物理的な構成も可能である。
【００３５】
メモリ２３７は、プロセッサ２３５によって実行することができる命令および／またはデータを格納するための１つまたは複数の非一時的なコンピュータ可読媒体を含む。命令および／またはデータは、本明細書に記載される技法を実行するためのコードを含み得る。いくつかの実施形態では、メモリ２３７は、品質分析アプリケーション１０９を格納することができる。メモリ２３７は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、エンベディッドメモリ、フラッシュメモリまたは何らかの他のメモリデバイスを含み得る。また、いくつかの実施形態では、メモリ２３７は、ハードディスクドライブ、フロッピーディスクドライブ、ＣＤ−ＲＯＭデバイス、ＤＶＤ−ＲＯＭデバイス、ＤＶＤ−ＲＡＭデバイス、ＤＶＤ−ＲＷデバイス、フラッシュメモリデバイスまたはより永久的に情報を格納するための何らかの他の大容量記憶装置を含む不揮発性メモリまたは同様の永久記憶装置および媒体も含み得る。
【００３６】
通信ユニット２４１は、実行プラットホーム１１５および／またはクライアントデバイス１３５などの、ネットワーク１０５と結合された他のコンピューティングデバイスにデータを送信したり、同コンピューティングデバイスからデータを受信したりすることができる。通信ユニット２４１は、ネットワーク１０５を形成する他の実体と通信するため、ネットワーク１０５と結合することができる（有線、無線など）。いくつかの実施形態では、通信ユニット２４１は、ネットワーク１０５または別の通信チャネルへの直接的な物理接続のための１つまたは複数のポートを含み得る。例えば、通信ユニット２４１は、実行プラットホーム１１５および／またはクライアントデバイス１３５との有線通信のためのＵＳＢ、ＳＤ、ＣＡＴタイプ、Ｔｈｕｎｄｅｒｂｏｌｔまたは同様のポートを含み得る。いくつかの実施形態では、通信ユニット２４１は、ＩＥＥＥ８０２．１１、ＩＥＥＥ８０２．１６、ＢＬＵＥＴＯＯＴＨ（登録商標）、専用短距離通信（ＤＳＲＣ）または別の適切な無線通信方法を含む１つまたは複数の無線通信方法を使用して、実行プラットホーム１１５または他の通信チャネルとデータを交換するための無線トランシーバを含み得る。いくつかの実施形態では、通信ユニット２４１は、いかなる世代（３Ｇ、４Ｇ、５Ｇ＋など）のモバイルネットワークも含むセルラ通信ネットワーク上でデータを送信および受信するためのセルラ通信トランシーバを含み得る。いくつかの実施形態では、通信ユニット２４１は、１つまたは複数の有線ポートおよび無線トランシーバを含み得る。また、通信ユニット２４１は、ＴＣＰ／ＩＰ、ＨＴＴＰ、ＨＴＴＰＳおよびＳＭＴＰなどを含む標準ネットワークプロトコルを使用して、ファイルおよび／またはメディアオブジェクトの分配のための、ネットワーク１０５への他の従来の接続を提供することもできる。
【００３７】
記憶装置２４５は、データの格納およびデータへのアクセスの提供のためのハードウェアおよび／またはソフトウェアを含み得る。記憶装置２４５は、コンピューティングシス
テム１０１に含めることも、コンピューティングシステム１０１とは異なるがコンピューティングシステム１０１と結合されるかまたはコンピューティングシステム１０１によってアクセス可能な別のコンピューティングデバイスおよび／またはストレージシステムを備えるか、あるいは、同コンピューティングデバイスおよび／またはストレージシステムに含めることもできる。いくつかの実施形態では、記憶装置２４５は、メモリ２３７と組み合わせることも、メモリ２３７と区別することもできる。いくつかの実施形態では、記憶装置２４５は、データの格納およびデータへのアクセスの提供のための、データベース管理システム（ＤＢＭＳ）、１つまたは複数のファイルシステムパーティションなどを含み得る。記憶装置２４５は、ソリッドステートメモリ（例えば、フラッシュメモリ、ＲＡＭなど）、ハードドライブ、テープシステム、フロッピーディスクドライブ、ＣＤ−ＲＯＭデバイス、ＤＶＤ−ＲＯＭデバイス、ＤＶＤ−ＲＡＭデバイス、ＤＶＤ−ＲＷデバイスまたは情報を格納するための何らかの他の大容量記憶装置などの１つまたは複数の非一時的なコンピュータ可読媒体を含み得る。いくつかの実施形態では、記憶装置２４５は、分析ツール１１７によって生成されたツール生成分析結果、品質分析アプリケーション１０９によって生成された品質分析結果、ユーザデータ、好み、システムファイル、様々なアプリケーションおよびオペレーティングシステムファイルなどのうちの１つまたは複数を格納することができる。
【００３８】
コードデータベース２４７は、ソフトウェアコードベース（例えば、ソースコード、コードのライン、コードモジュール１０７、コンパイルされたオブジェクトなど）の格納およびソフトウェアコードベースへのアクセスの提供のための情報源を含む。コードデータベース２４７は、コンピューティングシステム１０１に含めることも、コンピューティングシステム１０１とは異なるがコンピューティングシステム１０１と結合されるかまたはコンピューティングシステム１０１によってアクセス可能な別のコンピューティングデバイスおよび／またはストレージシステムを備えるか、あるいは、同コンピューティングデバイスおよび／またはストレージシステムに含めることもできる。コードデータベース２４７は、ソフトウェアアプリケーション１０３ａなどの様々なソフトウェアアプリケーションのソフトウェアコードベースの格納および同ソフトウェアコードベースへのアクセスの提供のためのハードウェアおよび／またはソフトウェアを含み得る。いくつかの実施形態では、コードデータベース２４７は、メモリ２３７および／または記憶装置２４５と組み合わせることも、メモリ２３７および／または記憶装置２４５と区別することもできる。いくつかの実施形態では、コードデータベース２４７は、それにより格納されたソフトウェアに対する変更を管理するための、コンピューティングシステム１０１によって動作可能なバージョン管理システム（ＶＣＳ）を含み得る。ＶＣＳの例は、ＣＶＳ、Ｓｕｂｖｅｒｓｉｏｎ、Ｇｉｔなどを含み得る。いくつかの実施形態では、コードデータベース２４７は、コンピューティングシステム１０１によって動作可能なデータベース管理システム（ＤＢＭＳ）を含むことも、同データベース管理システム（ＤＢＭＳ）に含めることもできる。例えば、ＤＢＭＳは、構造化照会言語（ＳＱＬ）ＤＢＭＳ、ＮｏＳＱＬ  ＤＭＢＳ、その様々な組合せなどを含む可能性がある。いくつかの例では、ＤＢＭＳは、行と列からなる多次元表にデータを格納し、プログラム演算を使用してデータの行を操作（すなわち、挿入、クエリ、更新および／または削除）することができる。コードデータベース２４７は、ソリッドステートメモリ（例えば、フラッシュメモリ、ＲＡＭなど）、ハードドライブ、テープシステム、フロッピーディスクドライブ、ＣＤ−ＲＯＭデバイス、ＤＶＤ−ＲＯＭデバイス、ＤＶＤ−ＲＡＭデバイス、ＤＶＤ−ＲＷデバイスまたは情報を格納するための何らかの他の大容量記憶装置などの１つまたは複数の非一時的なコンピュータ可読媒体を含むことも、同コンピュータ可読媒体に含めることもできる。
【００３９】
ツール性能データベース２４９は、分析ツール１１７と関連付けられたデータを格納することができる非一時的な記憶媒体を含み得る。いくつかの実施形態では、ツール性能データベース２４９は、データの格納およびデータへのアクセスの提供のためのデータベー
ス管理システム（ＤＢＭＳ）および／またはファイルシステムを含み得る。ツール性能データベース２４９は、ソリッドステートメモリ（例えば、フラッシュメモリ、ＲＡＭなど）、ハードドライブ、テープシステム、フロッピーディスクドライブ、ＣＤ−ＲＯＭデバイス、ＤＶＤ−ＲＯＭデバイス、ＤＶＤ−ＲＡＭデバイス、ＤＶＤ−ＲＷデバイスまたは情報を格納するための何らかの他の大容量記憶装置を含むことも、同デバイス等に含めることもできる。
【００４０】
いくつかの実施形態では、ツール性能データベース２４９は、分析ツール１１７と関連付けられた性能統計を格納することができる。例えば、ツール性能データベース２４９は、分析ツール１１７の各々に対する検出率および偽陽性率のうちの１つまたは複数を格納することができる。分析ツール１１７に対する検出率は、分析ツール１１７が誤りを検出できる割合を記述することができる。分析ツール１１７に対する偽陽性率は、誤りが存在しない場合に分析ツール１１７が陽性判定（例えば、誤りの表示）を生成する割合を記述することができる。いくつかの実施形態では、ツール性能データベース２４９、コードデータベース２４７および／または記憶装置２４５は、単一のデータ格納コンポーネントまたはシステムに統合することも、異なる格納コンポーネントもしくはシステムであり得るかまたは異なる格納コンポーネントもしくはシステムに含めることもできる。
【００４１】
いくつかの実施形態では、ツール性能データベース２４９は、各分析ツール１１７に対する検出率（ＤＲ）、偽陽性率（ＦＰＲ）を格納するとともに、ツールの各レートに対する補数値を格納することもできる。例えば、ツール性能データベース２４９は、検出率の補数の割合（すなわち、１−ＤＲ）を（ＤＲ’）として、および／または、偽陽性率補数の割合（すなわち、１−ＦＰＲ）を（ＦＰＲ’）として、格納することができる。いくつかの実施形態では、各ツールに対する検出率、偽陽性率およびそれらの補数を含むツール性能統計は、以下で統計モジュール２０４を参照して説明されるように、統計モジュール２０４で計算して格納することができる。
【００４２】
図２に描写されるように、品質分析アプリケーション１０９は、いくつかの実施形態では、分析モジュール２０２、統計モジュール２０４、期待モジュール２０６、品質モジュール２０８、分類モジュール２０９およびインターフェースモジュール２１０を含み得る。これらのコンポーネントは、バス２２０および／またはプロセッサ２３５を介して通信可能に結合することができる。いくつかの実施形態では、分析モジュール２０２、統計モジュール２０４、期待モジュール２０６、品質モジュール２０８、分類モジュール２０９およびインターフェースモジュール２１０は、プロセッサ２３５によって実行可能な命令列であり得る。いくつかの実施形態では、分析モジュール２０２、統計モジュール２０４、期待モジュール２０６、品質モジュール２０８、分類モジュール２０９およびインターフェースモジュール２１０は、コンピューティングシステム１０１のメモリ２３７に格納することができ、プロセッサ２３５によるアクセスおよび実行が可能であり得る。分析モジュール２０２、統計モジュール２０４、期待モジュール２０６、品質モジュール２０８、分類モジュール２０９およびインターフェースモジュール２１０は、コンピューティングシステム１０１のプロセッサ２３５および他のコンポーネントとの協働および通信のために適合させることができる。
【００４３】
分析モジュール２０２は、ソフトウェアコードベースを分析してコードベースにおける誤りを決定するためのソフトウェアおよび／またはハードウェア論理を含み得る。１つまたは複数の分析ツール１１７は、所定のソースコードベースを分析するために適用することができる。各分析ツール１１７は、分析による発見結果を記述する分析結果を生成することができ、発見結果には、コードベースのどのラインが誤りを有するものか、コードベースのどのラインが誤りのないものか、コードベースのどのラインが分析不可能なものかなどが含まれる。分析モジュール２０２は、分析ツール１１７から、および／または、ツ
ール性能データベース２４９、ストレージ２４５などのデータストアから直接、分析結果を受信するために結合することができる。分析モジュール２０２は、１つまたは複数の分析ツールセット１１７によって生成された分析結果セットを受信したり、期待モジュール２０６に分析結果を送信したりすることができ、次いで、期待モジュール２０６は、本明細書の他の場所で説明されるように、その結果を使用して、その作用および／または機能性を実行することができる。いくつかの実施形態では、分析モジュール２０２は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、分析ツール１１７によって生成された分析結果を記憶装置２４５、ツール性能データベース２４９などのデータストアに格納することができる。
【００４４】
いくつかの実施形態では、分析ツールセット１１７によって生成された分析結果は、例えば、セットの１つまたは複数の分析ツール１１７によって誤りがあるものとして決定されたソフトウェアコードベースにおけるラインの表示、誤りのないものとして決定されたコードベースにおけるラインの表示、分析不可能なものとして決定されたラインの表示、誤りがあるもの、誤りのないものおよび／または分析不可能なものとしてコードベースにおける各ラインを示す色分けされたマークアップなどを含み得る。いくつかの実施形態では、分析モジュール２０２は、分析ツールセット１１７の１つまたは複数のツールから分析結果を受信し、ソフトウェアコードベース品質について記述する全体的な分析概要を生成することができる。例えば、全体的な分析概要は、分析ツールのセットのうちコードベースのあるラインが安全であると特定する分析ツール１１７の数に対する、分析ツールのセットのうちコードベースの当該ラインが誤りを含むと特定する分析ツール１１７の数や、誤り分析ツールセット１１７によって特定された欠陥の総数や、分析ツール１１７によって特定された欠陥のタイプや、分析ツール１１７間での比較などを非限定的に含むことができる。
【００４５】
いくつかの実施形態では、分析モジュール２０２は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、全体的な分析概要を記憶装置２４５などのデータストアに格納することができる。いくつかの実施形態では、分析モジュール２０２は、ユーザ１２５への提示のために、インターフェースモジュール２１０に分析概要を提供することができる。ユーザに提示するために概要の提供することは有利である。なぜならば、ユーザは、概要を使用して各ツールの相対的な長所および短所を理解することができ、十分な情報を得た上で、あるラインに誤りがあるなどと特定した分析ツール１１７の総数に基づいて、誤りがあると特定されたラインが実際に対処する必要があるかどうかを決定できるためである。
【００４６】
さらなる例示として、図７は、例示的なコードベース７００と、コードベース７００を分析することに応答して生成された分析結果６１０とを示す。描写されるように、コードベース７００は、６つのラインのコードを使用する２つの関数宣言を含む。具体的には、ライン１〜３は、第１の関数「ｉｎｔ  ｍａｉｎ（…）」（例えば、整数値を返す関数）を表し、変数「ｃ」に対する整数値が宣言される。ライン４〜６は、第２の関数「ｖｏｉｄ  ｆｕｎｃＡ（…）」（例えば、値を返さない関数）を表し、変数ｃの値の設定に対する条件が指定される。いくつかの実施形態では、第１の関数および第２の関数は各々、コードモジュールと呼ぶことができる。
【００４７】
いくつかの実施形態では、分析モジュール２０２は、１つまたは複数の分析ツール１１７を使用することによって、コードベース７００の各ラインを分析することができる。分析ツール１１７は、１つまたは複数の分析結果を生成し、処理および／または格納のために、それらの結果を分析モジュール２０２に提供することができる。例えば、図７に描写されるように、分析ツール１１７は、コードベース７００を分析し、分析結果６１０を生成し、その結果を分析モジュール２０２に提供することができる。いくつかの実施形態で
は、分析モジュール２０２は、所定の分析ツール１１７によるコードベースの分析を指示することができ、分析ツール１１７は、分析を実行し、その結果を分析モジュール２０２に返すことができるが、ユーザが独立して分析ツール１１７を使用してその結果を分析モジュール２０２に供給する（例えば、結果をインポートすることによって）など、他の変形例も可能である。
【００４８】
分析結果６１０は、コードベース７００における各ラインに対して、ラインが、誤りがあるラインか、誤りのないラインかおよび／または分析不可能なラインかを示し得る。分析結果６１０で描写されるように、参照番号７０２は、ライン２は誤りのあるラインであることを示し、参照番号７０４は、ライン４〜６は分析不可能なラインであることを示す。いくつかの実施形態では、分析結果６１０は、１つまたは複数の偽陽性結果の指標など、他の欠陥および／または妥当さ（正しさ）の指標を含み得る。例えば、誤りがあるものとして分析ツール１１７によって示されるライン２は、実際には、誤りがあるものではない場合があり、したがって、ツールによって生成された誤警報（false alarm）または偽
陽性であり得る。
【００４９】
いくつかの実施形態では、分析結果６１０のコードベース７００のラインは、異なる色でハイライトして、それらの誤りがある状態、誤りのない状態および／または分析不可能な状態を示すことができる。例えば、ラインを赤色でハイライトして誤りのあるラインであることを示すこと、ラインを緑色でハイライトして誤りのないラインであることを示すこと、および／または、ラインを黒色でハイライトして分析不可能なラインであることを示すことができる。この例を使用することで、参照番号７０２によって示される誤りがあるラインを赤色で提示したり、参照番号７０４によって示される分析不可能なラインを黒色で提示したりすることができる。分析モジュール２０２は、分析ツール１１７から結果６１０を受信し、次いで、データストア（例えば、記憶装置２４５）に結果６１０を格納するか、または、さらなる処理のために、期待モジュール２０６に結果６１０を送信することができる。
【００５０】
統計モジュール２０４は、分析ツールセット１１７に対する性能統計を計算するためのソフトウェアおよび／またはハードウェア論理を含み得る。性能統計は、本明細書の他の場所で説明されるように、検出率、偽陽性率ならびに検出率および／または偽陽性率の各々に対する補数を含み得る。いくつかの実施形態では、統計モジュール２０４は、統計モジュール２０４が計算する性能統計を期待モジュール２０６および／または分類モジュール２０９に提供することができ、次いで、期待モジュール２０６および／または分類モジュール２０９は、本明細書の他の場所で説明されるように、その統計を使用して、その作用および／または機能性を実行することができる。いくつかの実施形態では、統計モジュール２０４は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、分析ツール１１７の各々に対して計算された性能統計を、記憶装置２４５またはツール性能データベース２４９などのデータストアに格納することができる。
【００５１】
いくつかの実施形態では、性能統計は、分析ツール１１７の各々に対して、ソフトウェアコードベースにおいて正しく誤りを特定することにおいて分析ツール１１７がどれほど優れているかについて記述することができる。例えば、分析ツール１１７の検出率は、分析ツール１１７が誤りを検出できる割合について記述することができる。例えば、８０％の検出率は、分析ツール１１７がソフトウェアコードベースにおいて誤りの８０％を検出できることを示し得る。分析ツール１１７の偽陽性率は、誤りが存在しない場合に分析ツール１１７が陽性判定（例えば、誤りの表示）を生成する割合について記述することができる。また、偽陽性結果は、誤警報と呼ぶこともできる。例えば、５％の偽陽性率は、分析ツール１１７が実際には誤りではない箇所を５％の確率で誤りであると誤検出（誤警報
）することを示し得る。
【００５２】
いくつかの実施形態では、統計モジュール２０４は、検出率および／または偽陽性率の各々に対する補数のレートを計算することができる。例えば、統計モジュール２０４は、図１４のツール性能統計６２０表において、検出率に対する補数を１−検出率として、偽陽性率に対する補数を１−偽陽性率として、計算することができる。さらなる例として、分析ツールの検出率が８０％であり偽陽性率が１０％であれば、統計モジュール２０４は、検出率に対する補数を２０％（１−０．８＝０．２）として、そして、偽陽性率に対する補数を９０％（１−０．１＝０．９）として、計算することができる。
【００５３】
いくつかの実施形態では、統計モジュール２０４は、分析ツールセット１１７の性能統計を計算する目的のために、様々なツール検証コードベースをコードデータベース２４７に格納することができる。統計モジュール２０４によって格納された各検証コードベースは、誤りのないコードラインと、既知の誤りが意図的に含められたコードラインとを含み得る。統計モジュール２０４は、例えば、コードベースにおける誤りの場所、誤りのタイプ、長さ、構成など、意図的に含められた既知の誤りの特性を反映する検証データを維持することができる。検証コードベースおよび対応する検証データは、分析ツール１１７の各々の性能を評価するために使用することができる。いくつかの実施形態では、意図的な誤りは、ユーザ入力に基づいて、所定のコードベースに挿入することができる。例えば、ユーザは、異なるタイプの誤りおよび／または誤りの変形例を定義することができ、次いで、統計モジュール２０４は、インターフェースモジュール２１０を介して、ユーザが定義した誤りを受信し、ソフトウェアコードベースに誤りを挿入し、検証データを生成して、それらの誤りを追跡することができる。さらなる実施形態では、統計モジュール２０４は、誤りを自動的に生成してソフトウェアコードベースに挿入し、検証データを使用して誤りを追跡することが可能であり得る。
【００５４】
次いで、統計モジュール２０４は、分析ツールセット１１７を使用して、検証コードベースのうちの１つまたは複数を分析するように分析モジュール２０２に指示することができる。各分析ツール１１７は、誤りを見つけるためにコードベースを分析し、分析ツール１１７によって特定された誤りについて記述するツール出力結果を生成することができる。分析モジュール２０２は、分析ツールセット１１７からツール出力結果を受信し、その結果を統計モジュール２０４に送信することができる。結果の受信と同時に、統計モジュール２０４は、ツール出力結果を検証データと比較して、各分析ツール１１７の評価結果を生成することができる。例えば、統計モジュール２０４は、検証データにおける意図的に含まれた既知の誤りをツール出力結果と比較して、分析ツール１１７の結果においてどの分析ツール１１７が実際に誤りとしてこれらの誤りを特定したかを決定することができる。この比較を使用することで、統計モジュール２０４は、各分析ツール１１７の検出率（例えば、誤りとして正しく特定された既知の誤りの数）、偽陽性率（例えば、誤りがあるものとして特定された既知の誤りのないラインの数）を決定することができる。いくつかの実施形態では、統計モジュール２０４は、各分析ツール１１７に対するこれらの割合（検出、偽陽性など）を、評価結果またはツール性能統計として、ツール性能データベース２４９に格納することができる。
【００５５】
例示として、図８は、例示的な分析ツール８０２を用いて例示的なコード集合体８０４を評価することによって生成された例示的な性能統計６２０を示す。統計モジュール２０４は、コード集合体８０４を生成して、記憶装置２４５などのデータストアに格納することができる。コード集合体８０４は、所定の数の、意図的に含められた誤りがあるコードラインおよび誤りのないコードライン、ならびに、特に、本明細書の他の場所で説明されるような分析ツール８０２の検出率および／または偽陽性率を決定する目的のための異なるタイプの欠陥（例えば、欠陥１…欠陥Ｍ）を含み得る。次いで、統計モジュール２０４
は、コード集合体８０４を分析するように分析モジュール２０２に指示することができる。
【００５６】
分析モジュール２０２は、分析ツール８０２を使用してコード集合体８０４を分析し、分析の結果を統計モジュール２０４に送信することができる。次いで、統計モジュール２０４は、その結果および対応する検証データを使用して、ツール性能統計６２０を計算することができる。描写されるように、ツール性能統計６２０は、分析ツール８０２に対する検出率（ＤＲ）および偽陽性率（ＦＰＲ）を提供することができる。図８に描写されるようなツール８０２に対する検出率ＤＲは、既知の欠陥があるラインの総数に対する、ツール８０２によって欠陥があると正しく検出されたラインの数について記述する。同様に、図に描写されるようなツール８０２に対する偽陽性率ＦＰＲは、既知の欠陥のないラインの総数に対する、ツール８０２によって欠陥があると間違って検出されたラインの数について記述する。いくつかの実施形態では、統計モジュール２０４は、ユーザへの提示のために、インターフェースモジュール２１０にツール性能統計６２０を提供すること、期待モジュール２０６によるさらなる処理のために、期待モジュール２０６に統計６２０を送信すること、ツール性能統計６２０をツール性能データベース２４９に格納することなどを行うことができる。
【００５７】
期待モジュール２０６は、ソフトウェアコードベースにおける全体的な欠陥のリスクおよびコードベースにおける隠れた欠陥（hidden defects）のリスクを推定するためのソフトウェアおよび／または論理であり得る。全体的な欠陥のリスクは、コードベースにおける欠陥（例えば、誤り、バグ、エラーなど）の期待される数を含み得る。いくつかの実施形態では、全体的なリスクは、コードベース全体をカバーするものであり得る。いくつかの実施形態では、全体的なリスクは、コードベースのあるモジュールまたはその部分をカバーするものであり得る。隠れた欠陥のリスクは、１つまたは複数の分析ツール１１７によって誤りのないものおよび／または分析不可能なものとして決定されたコードベースのラインが実際には欠陥である確率を表すものであり得る。いくつかの実施形態では、期待モジュール２０６は、分析ツール１１７によって生成された分析結果および分析ツール１１７に対して計算された性能統計に基づいて、全体的な欠陥のリスクおよび隠れた欠陥のリスクを推定することができる。期待モジュール２０６は、分析結果を受信するために分析モジュール２０２と、そして、性能統計を受信するために統計モジュール２０４と、通信可能に結合することができる。いくつかの実施形態では、期待モジュール２０６は、記憶装置２４５から分析ツール１１７に対する分析結果を、そして、ツール性能データベース２４９から分析ツール１１７に対する性能統計を、受信することができる。また、他の変形例も可能である。
【００５８】
グラフ図解として、図６は、例示的なコードベースと関連付けられた全体的な欠陥のリスクおよび隠れた欠陥のリスクを演算するための例示的な方法６００を描写する。描写されるように、期待モジュール２０６は、ソフトウェアコードベースにおける全体的な欠陥のリスク６３０および隠れた欠陥のリスク６４０を推定するため、１つまたは複数の分析ツール１１７と関連付けられた１つまたは複数の分析結果６１０およびツール性能統計６２０を受信することができる。いくつかの実施形態では、分析ツール１１７に対する分析結果は、本明細書の他の場所で説明されるように、コードベースにおける各ラインに対して、ラインが、安全な（すなわち、誤りのない）ラインか、危険な（すなわち、誤りがある）ラインかおよび／または分析不可能なラインかを示し得るが、他の事例では、本開示の範囲から逸脱しない限りにおいて、出力が異なってもよい。いくつかの実施形態では、分析ツール１１７に対するツール性能統計は、本明細書の他の場所で説明されるように、ツールの検出率、偽陽性率などについて記述することができる。
【００５９】
いくつかの実施形態では、期待モジュール２０６は、図６に描写されるように、二段階
プロセスで全体的な欠陥のリスク６３０を推定することができる。第１の段階では、期待モジュール２０６は、コードベースの各ラインの欠陥のリスク（例えば、コードベースの１ラインあたりの欠陥の確率）を演算することができる。分析ツール１１７が欠陥（赤色ライン）であると判定する確率（Ｐｒｏｂ（赤色ライン））は、
Ｐｒｏｂ（赤色ライン）
＝  Ｐｒｏｂ（欠陥）×ＤＲ  ＋  （１−Ｐｒｏｂ（欠陥））×ＦＰＲ
と表せることから、いくつかの実施形態では、ラインにおける欠陥の確率（Ｐｒｏｂ（欠陥））は、以下の数式を使用することによって計算することができる。
Ｐｒｏｂ（欠陥）＝｛Ｐｒｏｂ（赤色ライン）−ＦＰＲ｝／｛ＤＲ−ＦＰＲ｝
ここで、Ｐｒｏｂ（ｘ）は事象ｘの確率であるため、０≦Ｐｒｏｂ（欠陥）≦１でなければならない。この条件を満足するには、ＤＲ＞ＦＰＲ、かつ、ＦＰＲ≦Ｐｒｏｂ（赤色ライン）≦ＤＲが必要である。これら二つの条件が意味するのは、正検出率が誤検出を上回り、かつ、検出結果が示す欠陥確率（密度）は、誤検出率と正検出率の間の値となる事であり、一般的な分析ツールはこれら二つの条件を満足出来ると見なす事ができる。
【００６０】
上記の数式では、ＦＰＲは分析ツールの偽陽性率であり、ＤＲは分析ツールの検出率であり、赤色ラインは誤りがあるライン（例えば、欠陥があるライン、エラーを有するライン）を示し、赤色ラインの確率は以下の数式に基づいて計算される。
Ｐｒｏｂ（赤色ライン）＝［赤色ラインの数］／［ラインの総数］
【００６１】
第２の段階では、期待モジュール２０６は、コードベースに存在するラインの総数および第１の段階で推定されるような欠陥の確率に基づいて、コードベースにおける（例えば、全コードベースにおける）欠陥の期待数を演算することができる。いくつかの実施形態では、期待モジュール２０６は、単に、コードベースに存在するラインの総数と、第１の段階で推定されるような各ラインにおける欠陥の確率との積を取ることによって（以下に示されるように）、欠陥の期待数を演算することができる。例えば、
全コードベースにおける欠陥の期待数＝［ラインの総数］×Ｐｒｏｂ（欠陥）
【００６２】
いくつかの実施形態では、期待モジュール２０６は、上記で論じられるような、欠陥の確率、赤色ラインの確率および検出率に基づいて、隠れた欠陥のリスク６４０を推定することができる。
【００６３】
隠れた欠陥のリスク６４０の推定は有利であり、その理由は、その推定は、別の反復において１つまたは複数の分析ツール１１７によって決定されなかった誤り、省略された誤り、および／または分析できなかった誤りを決定する上で役立てることができるためである。このリスクの推定は、分析ツール１１７によってコードベースにおいて安全なもの（誤りのないもの）であると決定されたラインが実際に安全か否かを決定する上でさらに役立てることができる。いくつかの実施形態では、期待モジュール２０６は、以下の数式を使用することによって、安全なラインや分析不可能なラインにおける欠陥のリスクを演算することができる。
Ｐｒｏｂ（欠陥｜¬赤色ライン）
＝Ｐｒｏｂ（¬赤色ライン｜欠陥）×Ｐｒｏｂ（欠陥）／Ｐｒｏｂ（¬赤色ライン）
＝（１−ＤＲ）×Ｐｒｏｂ（欠陥）／（１−Ｐｒｏｂ（赤色ライン））
なお、Ｐｒｏｂ（Ｂ｜Ａ）は事象Ａのもとでの事象Ｂの確率を表し、¬は論理否定（Ｎｏｔ）を表す。
【００６４】
いくつかの実施形態では、全体的な欠陥のリスク６３０および／または隠れた欠陥のリスク６４０の推定に応答して、期待モジュール２０６は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、全体的な欠陥のリスク６３０および／または隠れた欠陥のリスク６４０を記憶装置２４５などのデータストアに格納することができる。例えば、品質モジュール２０８は、全体的な欠陥のリスク６３０および／または隠れた欠陥のリスク６４０を取得して、１つまたは複数の品質保証タスク６４４を実行すること、および／または、それに基づいてコードベースの全体的な品質６４６を決定することができ、ならびに／あるいは、インターフェースモジュール２１０は、リスク計算を取得して、ユーザに提供される概要に含めることなどができる。いくつかの実施形態では、期待モジュール２０６は、ユーザへの提示のために、全体的な欠陥のリスク６３０および／または隠れた欠陥のリスク６４０をインターフェースモジュール２１０に送信することができる（例えば、単独でまたは他のコンポーネントによって生成された結果と併せて）。全体的な欠陥のリスク６３０および／または隠れた欠陥のリスク６４０のユーザへの提示は有利であり、その理由は、ユーザは、以前に分析モジュール２０２によって誤って伝達されたコードベースに存在する真の／正しい誤りを理解し、それに応じて誤りを修正するための是正措置や行動を取ることができるためである。
【００６５】
品質モジュール２０８は、コードベースで発見された欠陥の期待数に基づいて、ソフトウェアコードベースに対して品質保証タスクを実行するためのソフトウェアおよび／またはハードウェア論理を含み得る。いくつかの実施形態では、品質モジュール２０８は、期待モジュール２０６からの期待データの受信に応答して品質保証タスクを実行し、次いで、そのデータを使用してタスクを実行することができる。いくつかの実施形態では、品質モジュール２０８は、インターフェースモジュール２１０から受信された入力および／または要求に基づいて、品質保証タスクを実行することができる。例えば、ユーザは、１つまたは複数の品質保証タスクをソフトウェア上で実行するように要求することができ、インターフェースモジュール２１０は、その要求を受信して、その要求を処理するために品質モジュール２０８にその要求をさらにルーティングすることができる。品質モジュール２０８は、インターフェースモジュール２１０上でユーザに提示するために、品質モジュール２０８によって実行された１つまたは複数の品質保証タスクの概要をインターフェースモジュール２１０に提供することができる。いくつかの実施形態では、品質モジュール２０８は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、品質保証タスクの概要を記憶装置２４５などのデータストアに格納することができる。
【００６６】
いくつかの実施形態では、品質モジュール２０８は、期待モジュール２０６および／またはストレージ２４５から期待データを受信することができ、そのデータを使用して、ソフトウェア上で品質保証タスクを実行することができる。本明細書の他の場所で述べられるように、期待データは、コードベースにおける欠陥および隠れた欠陥のリスクを含み得る。品質モジュール２０８は、このデータを使用して、ソフトウェアが開発されている間に（実装段階で）、ソフトウェア品質を確実にモニタすることができる。
【００６７】
いくつかの実施形態では、品質モジュール２０８は、誤りの推定数に基づいて、ソフトウェアに対するソフトウェア信頼度成長（software reliability growth）を決定するこ
とができる。ソフトウェア信頼度成長は、時間の関数としてソフトウェアコードベースにおいて検出された誤りの累積数について記述することができる。いくつかの実施形態では、品質モジュール２０８は、ソフトウェア信頼度成長情報をインターフェースモジュール２１０に送信することができ、次いで、インターフェースモジュール２１０は、その情報を使用して、例えば、図１０に描写されるようなソフトウェア信頼度成長曲線を生成することができる。
【００６８】
分類モジュール２０９は、誤りを実誤り（actual fault）と疑似誤り（false fault）
に分類するためのソフトウェアおよび／または論理であり得る。誤りは、分析ツール１１７のうちの１つまたは複数によって特定された１つまたは複数の誤りを含み得る。例えば、図１４に描写されるように、分析ツール１１７のグループＧｊは、コード断片１４０２のライン２が、グループによって生成された分析結果６１０にゼロ除算誤り１４０４を含むことを示し得る。これらの分析ツール１１７によって特定された誤りは、偽陽性を含み得る。分類モジュール２０９は、ツール１１７によって特定された誤りのうちの１つまたは複数を、実誤りと疑似誤り（間違って特定された欠陥）として分類することができる。この分類は有利であり、その理由は、分析ツール１１７のうちの１つまたは複数によって生成された偽陽性結果を排除することができ、より信頼できる結果を得ることができ、より良い品質保証タスクを実行する上でさらに役立つためである。
【００６９】
いくつかの実施形態では、分類モジュール２０９は、１つまたは複数の分析ツール１１７と関連付けられた分析結果および性能統計データに基づいて、その分類を実行することができる。例えば、分類モジュール２０９は、分析結果を受信するために分析モジュール２０２と、そして、性能統計を受信するために統計モジュール２０４と、通信可能に結合することができる。いくつかの実施形態では、分類モジュール２０９は、記憶装置２４５から分析ツール１１７と関連付けられた分析結果を、そして、ツール性能データベース２４９から分析ツール１１７と関連付けられた性能統計を、受信することができる。また、他の変形例も可能である。
【００７０】
図解として、図１４は、欠陥１４０４を有するものとして分析ツール１１７のグループＧｊによって特定されたコードベース１４０２の例示的なラインを、実際に欠陥があるものまたは安全なものとして分類するための例示的な方法を描写する。描写されるように、分類モジュール２０９は、分類プロセス１４０６を実行するため、ツールグループＧｊの１つまたは複数の分析ツールと関連付けられた１つまたは複数の分析結果６１０およびツール性能統計６２０を受信することができる。描写されるように、ツールグループＧｊによって生成された分析結果６１０は、ライン２がゼロ除算欠陥、すなわち欠陥ｊ（１４０４とラベル付けされる）を含むことを示す。ツールグループＧｊのツール性能統計６２０は、ツールグループＧｊ内の様々なツールの確率および検出率を含み得るものであり、分類モジュール２０９がこのツール性能統計６２０使用して、二段階プロセス１４０６を用いて潜在的欠陥１４０４を実欠陥（actual defect）または疑似欠陥（false defect）に
分類することができる。
【００７１】
第１の段階１４０６ａでは、集計検出率（aggregate detection rate）、すなわち、ツールグループＧｊによって欠陥があると特定されたライン（または赤色ライン）における実欠陥の集計確率が演算される。また、集計偽陽性率（aggregated false positive rate）、すなわち、第１の段階でツールグループＧｊによって特定された赤色ラインに実欠陥が無い集計確率も演算される。いくつかの実施形態では、集計検出率および集計偽陽性率は、期待モジュール２０６によって演算することができる。例えば、分類モジュール２０９は、分析結果６１０およびツール性能統計６２０に基づいて集計検出率および集計偽陽性率を演算するように期待モジュール２０６に信号を送信することができる。いくつかの実施形態では、期待モジュール２０６は、以下の数式を使用することによって、集計検出
率（例えば、赤色ラインにおける欠陥の確率）および集計偽陽性率（例えば、赤色ラインにおける欠陥無しの確率）を演算することができる。
【数１】
0006428070.tif 000002
【数２】
0006428070.tif 000003
【００７２】
上記の数式では、Ｇｊは、赤色ラインを生成したツールセットを含み、赤色ラインを生成しなかったツールセットを含まない。また、オーバーラインのついたＧｉは、Ｇｉの補集合、すなわち、赤ラインを生成しなかったツールセットである。集計確率が演算された時点で、期待モジュール２０６は、第２の段階１４０６ｂでその分類プロセスを実行するため、これらの確率を分類モジュール２０９に送信することができる。第２の段階１４０６ｂでは、分類モジュール２０９は、実欠陥としてまたは安全なもの（欠陥ではない）として欠陥１４０４を分類することができる。描写されるように、分類モジュール２０９は、第１の段階１４０６ａで演算された集計確率を比較することによって、第２の段階１４０６ｂにおけるその分類を実行することができる。例えば、分類モジュール２０９は、実際に欠陥を含む赤色ラインの集計確率（集計検出率）を、実際に欠陥を含まない赤色ラインの集計確率（集計偽陽性率）と比較して、集計検出率が集計偽陽性率以上かどうかを決定することができる。集計検出率が集計偽陽性率以上であれば、分類モジュール２０９は、実欠陥として欠陥１４０４を分類することができる。そうでなければ、分類モジュール２０９は、安全なもの（欠陥ではない、疑似欠陥など）として欠陥１４０４を分類することができる。
【００７３】
いくつかの実施形態では、欠陥のうちの１つまたは複数を実欠陥または疑似欠陥に分類することに応答して、分類モジュール２０９は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、その分類の結果を記憶装置２４５などのデータストアに格納することができる。例えば、品質モジュール２０８は、分類結果を取得して、１つまたは複数の品質保証タスクを実行することができる。いくつかの実施形態では、分類モジュール２０９は、ユーザへの提示のために、インターフェースモジュール２１０に分類結果を送信することができる。
【００７４】
インターフェースモジュール２１０は、要求を受信、解釈およびルーティングし、結果を提供するためのソフトウェアおよび／またはハードウェア論理を含み得る。例示的な要求は、これらに限定されないが、分析関連の要求、統計関連の要求、全体的な誤り推定関連の要求、品質関連の要求、分類関連の要求などを含み得る。分析関連の要求は、ソフトウェアアプリケーション（例えば、ソフトウェアアプリケーション１０３ａ）のソースコードベースに対して誤り分析を実行するという要求、分析に基づいて概要を生成するという要求などを含み得る。統計関連の要求は、分析ツール１１７に対する検出率を計算するという検出率要求、分析ツール１１７に対する偽陽性率を計算するという偽陽性要求、検出率および偽陽性率に対する補数値を計算するという要求などを含み得る。全体的な誤り推定関連の要求は、コードベース全体における誤りの期待数を推定するという要求、コードベースにおける隠れた欠陥の確率を推定するという隠れた欠陥要求などを含み得る。品
質関連の要求は、コードベース全体において発見された欠陥の期待数に基づいて品質保証タスクを実行するという品質保証要求などを含み得る。分類関連の要求は、１つまたは複数の（例えば、潜在的な）誤りを実誤りまたは疑似誤りに分類するという要求などを含み得る。
【００７５】
インターフェースモジュール２１０は、品質分析アプリケーション１０９に対する要求を受信し解釈し、その要求を適切なコンポーネントにルーティングすることができる。例えば、インターフェースモジュール２１０は、分析関連の要求を分析モジュール２０２に、統計関連の要求を統計モジュール２０４に、全体的な誤り推定関連の要求を期待モジュール２０６に、品質関連の要求を品質モジュール２０８に、そして、分類関連の要求を分類モジュール２０９に、ルーティングすることができる。いくつかの実施形態では、インターフェースモジュール２１０は、インターフェースモジュール２１０によって提供される様々な作用および／または機能性を実行するための単一のまたは異種のモジュールを含み得る。いくつかの実施形態では、インターフェースモジュール２１０の様々な作用および／または機能性は、品質分析アプリケーション１０９の他のコンポーネントに含めることができる。また、他の変形例も可能である。
【００７６】
いくつかの実施形態では、インターフェースモジュール２１０は、分析モジュール２０２、統計モジュール２０４、期待モジュール２０６、品質モジュール２０８および／または分類モジュール２０９のうちの１つまたは通常は複数によって生成された異なる結果を要約する包括的な概要を生成するため、これらのモジュール２０２、２０４、２０６、２０８および／または２０９と協働することができる。いくつかの実施形態では、インターフェースモジュール２１０は、異なる結果を、ダッシュボード（ＧＵＩ）を介してユーザへ提示するために適切なフォーマットにすることができる。例えば、ダッシュボードは、ソフトウェアコードベースにおいて分析ツール１１７によって発見された様々なタイプの欠陥、誤り分類の際に実際に欠陥として分類された欠陥の数、正しく欠陥を特定した分析ツール、全体的な誤り推定の間に発見された隠れた欠陥の数およびタイプ、ソフトウェアコードベースにおける全体的な欠陥の確率、分析の際に発生した偽陽性または誤警報、それらの偽陽性または誤警報を発生させた分析ツール、最良の検出率を有する分析ツール、最悪の検出率を有する分析ツール、最も少ない偽陽性率を有する分析ツール、最も高い偽陽性を有する分析ツール、ソフトウェアコードベースにおいて発見された誤りの推定数に基づくソフトウェア信頼度成長情報、全体的な誤り推定に基づくソフトウェアの全体的な品質などについての詳細な情報をユーザに提供することができる。
【００７７】
いくつかの実施形態では、ダッシュボードは、ユーザがデータを容易に掘り下げてより粒度の細かいセグメントで閲覧できるカスケーディングレベルの詳細もユーザに提供することができる。例えば、上記で説明されるような包括的な概要は、分析モジュール２０２、統計モジュール２０４、期待モジュール２０６、品質モジュール２０８および／または分類モジュール２０９に対してセグメント化することができる。例示として、ダッシュボードは、分析モジュール２０２によって生成されたソフトウェアの誤り分析概要、統計モジュール２０４によって生成されたツール性能統計概要、期待モジュール２０６によって生成された全体的な欠陥および隠れた欠陥概要、品質モジュール２０８によって実行された１つまたは複数の品質保証タスク、分類モジュール２０９によって生成された分類概要などをユーザが閲覧できるようにすることができる。いくつかの実施形態では、ダッシュボードは、グラフ、表、データ、記述などの形式でこれらの概要を提示することができる。
【００７８】
インターフェースモジュール２１０は、ユーザへ提示するために、結果を、適切なフォーマットにすることができる。例えば、インターフェースモジュール２１０は、分析モジュール２０２、統計モジュール２０４、期待モジュール２０６、品質モジュール２０８お
よび／または分類モジュール２０９によって生成された結果が組み入れられたユーザインターフェースをユーザに提供するための提示データを生成することができる。別の例では、インターフェースモジュール２１０は、ある形式（例えば、ＸＭＬ、ＪＳＯＮ、ＨＴＭＬ、ＰＤＦなど）に結果を変換し、その結果をユーザに提供することができる。結果は、ネイティブに（品質分析アプリケーション１０９によって）、または、ユーザ１２５によって使用されているコンピューティングデバイスによって動作可能な別のアプリケーション（ウェブブラウザ、オフィスアプリケーション、ポータブルなドキュメントビューア、テキストエディタ、ＩＤＥなど）を介して、提供することができる。
【００７９】
いくつかの実施形態では、インターフェースモジュール２１０は、ユーザインターフェースをユーザに提供するためのグラフィカルデータを生成することができる。例えば、インターフェースモジュール２１０は、ユーザのクライアントデバイス１３５上、コンピューティングシステム１０１上などでの表示のためにユーザに提供可能な図１０〜１３に描写されるようなグラフィカルデータを生成することができる。いくつかの実施形態では、インターフェースモジュール２１０は、コンピューティングシステム１０１と結合された表示デバイス（図示せず）にグラフィカルデータを送信し、ユーザにユーザインターフェースを提示することを表示デバイスに行わせることができる。いくつかの実施形態では、ユーザは、リモート操作でコンピューティングシステム１０１にアクセスすることができる。インターフェースモジュール２１０は、ネットワーク１０５を介してクライアントデバイス１３５にグラフィカルデータを送信し、クライアントデバイス１３５と結合された表示デバイス上でユーザにユーザインターフェースを提示することをクライアントデバイス１３５に行わせることができる（例えば、ネイティブアプリケーションおよび／またはウェブブラウザを介して）。インターフェースモジュール２１０は、他のユーザインターフェースをユーザに提供するためのグラフィカルデータを生成できることを理解すべきである。
【００８０】
＜方法＞
図３は、分析ツールセットと関連付けられた分析結果および性能統計に基づいて、コードベースにおける欠陥のリスクを推定するための例示的な方法３００のフローチャートである。統計モジュール２０４は、分析ツールセット１１７に関して性能統計を計算する（３０１）ことができる。いくつかの実施形態では、性能統計は、本明細書の他の場所で説明されるように、セット内の各分析ツールの検出率および／または偽陽性率を含み得る。性能統計を決定するための例示的な方法３０１は、少なくとも図８および９を基準にして示される。分析モジュール２０２は、分析ツールセット１１７からの１つまたは複数の分析ツールを使用して、ソフトウェアコードベースを分析する（３０２）ことができる。いくつかの実施形態では、ソフトウェアコードベースは、コードおよび／またはコードモジュール１０７の１つまたは複数のラインを含み得る。
【００８１】
方法３００は、１つまたは複数の分析ツール１１７の各々に対する分析結果を生成する（３０４）ことができる。いくつかの実施形態では、分析結果は、本明細書の他の場所でさらに詳細に論じられるように、分析ツール１１７によって生成され、分析モジュール２０２に提供される。分析結果は、分析ツール１１７によって特定された１つもしくは複数の誤りおよび／または１つもしくは複数の妥当さ（正しさ）について記述することができる。期待モジュール２０６は、セットの１つまたは複数の分析ツールと関連付けられた１つまたは複数の分析結果および性能統計に基づいて、コードベースにおける欠陥のリスクを推定する（３０６）ことができる。いくつかの実施形態では、ブロック３０６で推定された欠陥のリスクは、本明細書の他の場所で説明されるように、コードベース全体に存在する欠陥の実際の数の期待値および／またはコードベースにおける隠れた欠陥のリスクも示し得る。
【００８２】
図４Ａ〜４Ｂは、分析ツールセットと関連付けられた分析結果および性能統計に基づいて、コードベースにおける欠陥のリスクを推定するための例示的な方法４００のフローチャートである。図４Ａを参照すると、分析モジュール２０２は、既知の意図的に含められた誤りがあるコードラインおよび誤りのないコードラインを含むコード集合体を受信する（４０２）こと、ならびに、分析ツールセット１１７を使用してコード集合体を分析する（４０４）ことができる。いくつかの実施形態では、コード集合体は、本明細書の他の場所で説明されるように、統計モジュール２０４が準備し、分析のために分析モジュール２０２に提供／送信することができる。統計モジュール２０４は、ブロック４０４で実行された分析の結果を受信し、それらを使用して、分析ツールセット１１７のツール性能統計を生成する（４０６）ことができる。次いで、統計モジュール２０４は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、セットの各分析ツールに対するツール性能統計をツール性能データベース２４９に格納する（４０８）ことができる。期待モジュール２０６は、本明細書の他の場所で説明されるように、統計モジュール２０４またはツール性能データベース２４９からツール性能統計を受信し、そのツール性能統計を使用して、期待モジュール２０６によって提供される作用および／または機能性を行うことができる。
【００８３】
分析モジュール２０２は、１つまたは複数のコードラインを含むコードベースを決定する（４１０）こと、および、分析ツールセット１１７からの１つまたは複数の分析ツールを使用して当該コードベースを分析する（４１２）ことができる。各分析ツール１１７は、本明細書の他の場所で説明されるように、分析ツール１１７によって特定された１つもしくは複数の誤りおよび／または１つもしくは複数の妥当さ（正しさ）について記述する分析結果を生成する（４１４）ことができる。いくつかの実施形態では、分析モジュール２０２は、１つまたは複数の分析ツール１１７と関連付けられた１つまたは複数の分析結果を受信し、品質分析アプリケーション１０９の１つまたは複数のコンポーネントが使用および取得できるように、データストア（例えば、ストレージ２４５）に格納することができる。いくつかの実施形態では、分析モジュール２０２は、１つまたは複数の分析結果を期待モジュール２０６に送信することができ、次いで、期待モジュール２０６は、本明細書の他の場所で説明されるように、その結果を使用して、その作用および／または機能性を実行することができる。
【００８４】
次いで、期待モジュール２０６は、１つまたは複数の分析ツール１１７と関連付けられた１つまたは複数の分析結果およびツール性能統計に基づいて、コードベースにおける欠陥のリスクを推定する（４１６）ことおよびコードベースにおける隠れた欠陥のリスクを推定する（４１７）ことができる。いくつかの実施形態では、期待モジュール２０６は、動作４１６および４１７を実行するため、ストレージ２４５から１つまたは複数の分析結果を、そして、ツール性能データベース２４９から１つまたは複数のツール性能統計を取得することができる。いくつかの実施形態では、期待モジュール２０６は、本明細書の他の場所で説明されるように、分析モジュール２０２から１つまたは複数の分析結果を、そして、統計モジュール２０４から１つまたは複数のツール性能統計を、直接、受信することができる。コードベースにおける欠陥のリスクおよび／または隠れた欠陥のリスクを推定するための例示的な方法は、少なくとも図６を基準にして示される。
【００８５】
コードベースにおける欠陥のリスクおよび／または隠れた欠陥のリスクが推定された時点で、品質モジュール２０８は、例えば、最適なテストリソース割り当て、優先的なバグチケット発行などを含む品質保証タスクを実行する（４１８）ことができる。ブロック４２０では、追加のコードベースを処理するかどうかに関する決定が行われる。決定の結果が肯定的であれば、方法４００は、ブロック４１２に戻り、別のコードベース分析および関連動作を実行する。そうでなければ、方法４００は、終了すること、様々な動作を反復すること、他の動作に進むことなどを行うことができる。
【００８６】
図５は、例示的なコードベースにおける全体的な欠陥のリスクを推定するための例示的な方法４１６のフローチャートである。期待モジュール２０６は、コードベースに存在するラインの総数を決定する（５０２）ことができる。期待モジュール２０６は、コードベースにおける各ラインにおける欠陥の確率を演算する（５０４）ことができる。いくつかの実施形態では、期待モジュール２０６は、図６のボックス６３０内の第１の工程に描写される数式を使用して、欠陥の確率を演算することができる。コードベースにおける各ラインに対する欠陥の確率が演算された時点で、期待モジュール２０６は、ラインの総数および各ラインの欠陥の確率に基づいて、コードベースにおける欠陥の期待数を演算する（５０８）ことができる。いくつかの実施形態では、期待モジュール２０６は、図６のボックス６３０内の第２の工程に描写される数式を使用して、欠陥の期待数を演算することができる。欠陥の期待数は、コードベース全体に存在する全体的な欠陥のリスクの推定を示し得る。
【００８７】
図９は、分析ツールセット１１７に対する性能統計を決定するための例示的な方法３０１のフローチャートである。ブロック９０２では、統計モジュール２０４は、様々な検証コードベースをデータストア（例えば、コードデータベース２４７）に格納することができる。本明細書の他の場所で論じられるように、検証コードベースは、分析ツールセット１１７に対する性能統計を決定するために特に管理される。例えば、これらのソフトウェアコードベースは、その場所および特性が知られ、対応する検証データによって反映される特定の誤りを意図的に含む。ブロック９０４では、統計モジュール２０４は、検証コードベースに含まれる既知の意図的に含められた誤りを反映する検証データを、コードデータベース２４７などのデータストアに格納することができる。統計モジュール２０４は、１つまたは複数の分析ツール１１７を使用して、検証データを含むソフトウェアコードベースを分析するように分析ツール２０２に信号を送信することができる。ブロック９０６では、分析モジュール２０２は、各分析ツール１１７によってソフトウェアコードベースの分析を促進する。いくつかの実施形態では、分析モジュール２０２は、統計モジュール２０４が取得できるように、ツールによって生成された結果をデータストア（データストア２４５）に格納し、その分析結果を統計モジュール２０４に送信することができる。ブロック９０８では、統計モジュール２０４は、各分析ツール１１７の分析結果を検証データと比較して、そのツールに対するツール性能統計を決定することができる。ツール性能統計は、これらに限定されないが、本明細書の他の場所でさらに詳細に論じられるように、偽陽性率、検出率などを含み得る。いくつかの実施形態では、統計モジュール２０４は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントが使用および取得できるように、分析ツールの各々に対するツール性能統計を、ツール性能データベース２４９に格納することも、それらのコンポーネントにデータを直接提供することもできる。
【００８８】
図１５は、分析ツールセットと関連付けられた性能統計に基づいて、誤りを実誤りまたは疑似誤りに分類するための例示的な方法１５００のフローチャートである。いくつかの実施形態では、方法１５００を使用して、少なくとも図３を参照して上記で論じられるように、１つまたは複数の分析ツールと関連付けられた分析結果および性能統計に基づいて、コードベースにおける欠陥のリスクの推定を促進することができる。欠陥のリスクの推定を促進するため、方法１５００は、いくつかの実施形態では、１つまたは複数の分析ツールと関連付けられた性能統計に基づいて、誤りを実誤りまたは疑似誤りに分類することができる。具体的には、統計モジュール２０４は、ツールの検出率および偽陽性率に基づいて、セットの各分析ツールに対する検出率および偽陽性率の補数を演算する（１５０２）ことができる。いくつかの実施形態では、統計モジュール２０４は、ツール性能データベース２４９に格納される各分析ツールに対する検出率および偽陽性率を含むツール性能統計を取得するため、ツール性能データベース２４９にアクセスし（例えば、図４Ａ〜４Ｂで説明されるように）、次いで、それらの統計を使用して、ツールに対する検出率およ
び偽陽性率の補数の割合を演算することができる。いくつかの実施形態では、統計モジュール２０４は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、各分析ツールに対する検出率および偽陽性率の補数のレートをツール性能データベース２４９に格納することができる。
【００８９】
期待モジュール２０６は、セットの１つまたは複数の分析ツールと関連付けられた検出率および検出率の補数に基づいて、分析ツールセットに対する集計検出率（または欠陥があるとされたラインにおける真の欠陥の確率）を演算する（１５０４）ことができる。期待モジュール２０６は、セットの１つまたは複数の分析ツールと関連付けられた偽陽性率および偽陽性率の補数に基づいて、分析ツールセットに対する集計偽陽性率（または欠陥があるとされたラインにおける欠陥無しの確率）を演算する（１５０６）ことができる。集計検出率および集計偽陽性率が演算された時点で、期待モジュール２０６は、そのそれぞれの動作を実行するため、分類モジュール２０９に集計率を送信することができる。いくつかの実施形態では、期待モジュール２０６は、品質分析アプリケーション１０９の１つまたは複数のコンポーネントがアクセスおよび取得できるように、ツールセットに対して期待モジュール２０６によって演算された集計検出率および集計偽陽性率をツール性能データベース２４９に格納することができる。
【００９０】
分類モジュール２０９は、集計検出率を集計偽陽性率と比較し（１５０８）、ブロック１５１０において、集計検出率が集計偽陽性率以上かどうかを決定することができる。ブロック１５１０での決定の結果が肯定的であれば、分類モジュール２０９は、１つまたは複数の誤り（例えば、図３の分析結果３０４で生成されるような）を実誤りとして分類することができる。他方では、ブロック１５１０での決定の結果が否定的であれば、分類モジュール２０９は、１つまたは複数の誤りを疑似誤りまたは誤警報として分類することができる。
【００９１】
＜グラフ表現＞
図１０は、例示的なソフトウェアテストの際に発見された欠陥の累積数に基づく例示的な信頼度曲線を描写するグラフ表現である。描写されるように、信頼度曲線１００２は、特定の時間内のソフトウェアテストの間に発生したと推定される欠陥の推定数を表す。曲線上の星形の記号１００４は、ソフトウェアテストの終了を示す。終了点は、欠陥の推定数が一定の閾値を満たす時点と一致する。例えば、テストは、欠陥の推定数が２０に達した際に終了され得る。いくつかの実施形態では、信頼度曲線１００２は、本明細書の他の場所で説明されるように、インターフェースモジュール２１０によって生成することができる。
【００９２】
図１１Ａおよび１１Ｂは、２つの例示的なソースコードと関連付けられた隠れた欠陥のリスクと、各コードと関連付けられた隠れた欠陥のリスクに基づくこれらのソースコードへのリソース配分とを表すグラフ表現である。具体的には、図１１Ａは、ソースコードＡおよびソースコードＢと関連付けられた隠れた欠陥のリスクを表す。描写されるように、コードＡは、ａ％の隠れた欠陥のリスクを有し、コードＢは、ｂ％の隠れた欠陥のリスクを有する。いくつかの実施形態では、期待モジュール２０６は、本明細書の他の場所でさらに詳細に論じられるように、各コードに対して隠れた欠陥のリスクを推定することができる。
【００９３】
いくつかの実施形態では、期待モジュール２０６は、隠れた欠陥のリスクの推定を品質モジュール２０８に送信することができ、次いで、品質モジュール２０８は、図１１Ｂに描写されるように、これらの推定を使用して、これらのコード上で品質保証を実行するため、ソースコードＡおよびＢに様々なリソースを最適に割り当てることができる。描写されるように、コードＢよりもコードＡに対して、より多くのリソース（例えば、試験者お
よび／または開発者の数、開発時間、処理時間および／またはリソースなど）が割り当てられており、その理由は、コードＡには、より大きな隠れた欠陥のリスクが存在しているためである。いくつかの実施形態では、ユーザ（例えば、ソフトウェア試験者）は、これらのリソースをコードＡおよびＢのそれぞれに手動で割り当てることができる場合がある。
【００９４】
図１２は、異なる欠陥タイプに対する各分析ツールの検出率を表す一連のレーダーチャート（スパイダーチャート）１２０２〜１２１４を描写する。具体的には、グラフ１２０２は、欠陥タイプ１〜８の各々に対するＣｏｖｅｒｉｔｙ分析ツールの検出率を表し、グラフ１２０４は、欠陥タイプ１〜８の各々に対するＧｒａｍｍａＴｅｃｈ分析ツールの検出率を表し、グラフ１２０６は、欠陥タイプ１〜８の各々に対するＫｌｏｃｗｏｒｋ分析ツールの検出率を表し、グラフ１２０８は、欠陥タイプ１〜８の各々に対するＬＤＲＡ分析ツールの検出率を表し、グラフ１２１０は、欠陥タイプ１〜８の各々に対するＭａｔｈＷｏｒｋｓ分析ツールの検出率を表し、グラフ１２１２は、欠陥タイプ１〜８の各々に対するＭｏｎｏｉｄｉｃｓ分析ツールの検出率を表し、グラフ１２１４は、欠陥タイプ１〜８の各々に対するＰＲＱＡ分析ツールの検出率を表す。いくつかの実施形態では、欠陥タイプ１〜８は、これらに限定されないが、スタティックメモリ欠陥、ダイナミックメモリ欠陥、リソース管理欠陥、ポインタ関連欠陥、並行処理欠陥、不適切なコード欠陥、その他の欠陥などを含み得る。
【００９５】
グラフ１２０２〜１２１４から分かるように、番号順に、Ｃｏｖｅｒｉｔｙ分析ツールは、タイプ４の欠陥に対する検出率は良いが、他の欠陥タイプに対する検出率は平均的である。ＧｒａｍｍａＴｅｃｈ分析ツールは、タイプ１および４の欠陥に対する検出率は最良であり、タイプ２および５〜８の欠陥に対する検出率は良く、タイプ３の欠陥に対する検出率は低い。Ｋｌｏｃｗｏｒｋ分析ツールは、タイプ４および５の欠陥に対する検出率は良く、タイプ１、２、７および８の欠陥に対する検出率は平均的であり、タイプ３および６の欠陥に対する検出率は非常に低い。ＬＤＲＡ分析ツールは、タイプ８の欠陥に対する検出率は良く、タイプ１、３および４の欠陥に対する検出率は平均的であり、タイプ２、５および７の欠陥に対する検出率は非常に低く、タイプ６の欠陥に対する検出率はほぼゼロである。ＭａｔｈＷｏｒｋｓ分析ツールは、タイプ１の欠陥に対する検出率は最良であり、タイプ２、３、５および８の欠陥に対する検出率は良く、タイプ４および７の欠陥に対する検出率は低く、タイプ６の欠陥に対する検出率はほぼゼロである。Ｍｏｎｏｉｄｉｃｓ分析ツールは、タイプ４の欠陥に対する検出率は最良であり、タイプ１および５の欠陥に対する検出率は良く、タイプ２および８の欠陥に対する検出率は平均的であり、タイプ３の欠陥に対する検出率は非常に低く、タイプ６および７の欠陥に対する検出率はほぼゼロである。ＰＲＱＡ分析ツールは、タイプ５の欠陥に対する検出率は最良であり、タイプ１および３の欠陥に対する検出率は良く、タイプ７および８の欠陥に対する検出率は平均的であり、タイプ２および４の欠陥に対する検出率は非常に低く、タイプ６の欠陥に対する検出率はほぼゼロである。
【００９６】
図１３は、異なる欠陥タイプに対する各分析ツールの偽陽性率を表す一連のレーダーチャート１３０２〜１３１４を描写する。具体的には、グラフ１３０２は、欠陥タイプ１〜８の各々に対するＣｏｖｅｒｉｔｙ分析ツールの偽陽性率を表し、グラフ１３０４は、欠陥タイプ１〜８の各々に対するＧｒａｍｍａＴｅｃｈ分析ツールの偽陽性率を表し、グラフ１３０６は、欠陥タイプ１〜８の各々に対するＫｌｏｃｗｏｒｋ分析ツールの偽陽性率を表し、グラフ１３０８は、欠陥タイプ１〜８の各々に対するＬＤＲＡ分析ツールの偽陽性率を表し、グラフ１３１０は、欠陥タイプ１〜８の各々に対するＭａｔｈＷｏｒｋｓ分析ツールの偽陽性率を表し、グラフ１３１２は、欠陥タイプ１〜８の各々に対するＭｏｎｏｉｄｉｃｓ分析ツールの偽陽性率を表し、グラフ１３１４は、欠陥タイプ１〜８の各々に対するＰＲＱＡ分析ツールの偽陽性率を表す。いくつかの実施形態では、所定の分析ツ
ールの偽陽性率が低い程、分析ツールにおける信頼度は高く、ツールによって生成される偽陽性は、全くないかまたは少数である。全体的に、グラフ１３０２〜１３１４によって描写されるレートは比較的に低いが、これらのツールによって生成された分析結果における偽陽性欠陥の存在は、欠陥のすべてを綿密に調べるために開発者がかなりの調査および補修時間を費やすことにつながり得る。それに加えて、各ツールは、図１３に示されるように、偽陽性が生じる欠陥のタイプは各ツールに特有である。したがって、複数のこれらのツールからの相互参照結果を、本明細書で論じられる方法と関連付けることで、テスト結果における偽陽性欠陥の数を軽減することができ、テストが行われているコードベースの実態のより正確な描写を提供することができる。
【００９７】
上記の説明では、本発明を十分に理解できるように、多くの詳細について説明した。しかしながら、各実施形態はこれらの具体的な詳細無しでも良いことは当業者にとって明らかであろう。他の実施形態では、構造や装置は、説明の曖昧化を避けるために、ブロック図の形式で示される。たとえば、本実施形態は、ユーザインタフェースと特定のハードウェアを主に参照して以下の一実施形態で示される。しかしながら、本実施形態は、データと命令を受信可能な任意の演算装置と、サービスを提供する任意の周辺装置に適用することができる。
【００９８】
本明細書における「一実施形態」または「ある実施形態」等という用語は、その実施形態と関連づけて説明される特定の特徴・構造・性質が少なくとも一つの実施形態に含まれることを意味する。「一実施形態における」等という用語は本明細書内で複数用いられるが、これらは必ずしも同一の実施形態を示すものとは限らない。
【００９９】
以下の詳細な説明の一部は、有形（非一時的）なコンピュータ可読記憶媒体に記憶されたデータビットに対する動作のアルゴリズムおよび記号的表現として提供される。これらのアルゴリズム的な説明および表現は、データ処理技術分野の当業者によって、他の当業者に対して自らの成果の本質を最も効果的に説明するために用いられるものである。なお、本明細書において（また一般に）アルゴリズムとは、所望の結果を得るための論理的な手順を意味する。処理のステップは、物理量を物理的に操作するものである。必ずしも必須ではないが、通常は、これらの量は記憶・伝送・結合・比較およびその他の処理が可能な電気的または磁気的信号の形式を取る。通例にしたがって、これらの信号をビット・値・要素・エレメント・シンボル・キャラクタ・項・数値などとして称することが簡便である。
【０１００】
なお、これらの用語および類似する用語はいずれも、適切な物理量と関連付いているものであり、これら物理量に対する簡易的なラベルに過ぎないということに留意する必要がある。以下の説明から明らかなように、特に断らない限りは、本明細書において「処理」「計算」「コンピュータ計算（処理）」「判断」「表示」等の用語を用いた説明は、コンピュータシステムや類似の電子的計算装置の動作および処理であって、コンピュータシステムのレジスタやメモリ内の物理的（電子的）量を、他のメモリやレジスタまたは同様の情報ストレージや通信装置、表示装置内の物理量として表される他のデータへ操作および変形する動作および処理を意味する。
【０１０１】
本明細書中の実施形態は、本明細書中で説明される動作を実行する装置にも関連する。この装置は要求される目的のための特別に製造されるものであっても良いし、汎用コンピュータを用いて構成しコンピュータ内に格納されるプログラムによって選択的に実行されたり再構成されたりするものであっても良い。このようなコンピュータプログラムは、コンピュータ可読記憶媒体に格納されてもよい。コンピュータ可読記憶媒体は、コンピュータのシステムバスに接続可能な、フロッピー（登録商標）ディスク・光ディスク・ＣＤ−ＲＯＭ・磁気ディスク、読み込み専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡ
Ｍ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード、光学式カード、非一時的なメモリを有するＵＳＢキーを含むフラッシュメモリ、電子的命令を格納するのに適したその他の任意のメディア媒体を含むが、これらに限定される訳ではない。
【０１０２】
本明細書は、完全なハードウェア実施形態の形式であってもよいし、完全なソフトウェア実施形態の形式であってもよいし、ハードウェア要素とソフトウェア要素を含む実施形態の形式であってもよい。好ましい実施形態では、本明細書はソフトウェアによって実装される。ソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むが、これらには限定されない。
【０１０３】
さらに、ある実施形態は、コンピュータが利用あるいは読み込み可能な記憶媒体からアクセス可能なコンピュータプログラムプロダクトの形態を取る。この記憶媒体は、コンピュータや任意の命令実行システムによってあるいはそれらと共に利用されるプログラムコードを提供する。コンピュータが利用あるいは読み込み可能な記憶媒体とは、命令実行システムや装置によってあるいはそれらと共に利用されるプログラムを、保持、格納、通信、伝搬および転送可能な任意の装置を指す。
【０１０４】
プログラムコードを格納・実行するために適したデータ処理システムは、システムバスを介して記憶素子に直接または間接的に接続された少なくとも１つのプロセッサを有する。記憶素子は、プログラムコードの実際の実行に際して使われるローカルメモリや、大容量記憶装置や、実行中に大容量記憶装置からデータを取得する回数を減らすためにいくつかのプログラムコードを一時的に記憶するキャッシュメモリなどを含む。
【０１０５】
入力／出力（Ｉ／Ｏ）装置は、例えばキーボード、ディスプレイ、ポインティング装置などであるが、これらはＩ／Ｏコントローラを介して直接あるいは間接的にシステムに接続される。
【０１０６】
システムにはネットワークアダプタも接続されており、これにより、私的ネットワークや公共ネットワークを介して他のデータ処理システムやリモートにあるプリンタや記憶装置に接続される。モデム、ケーブルモデム、イーサネット（登録商標）は、現在利用可能なネットワークアダプタのほんの一例である。
【０１０７】
最後に、本明細書において提示されるアルゴリズムおよび表示は特定のコンピュータや他の装置と本来的に関連するものではない。本明細書における説明にしたがってプログラムを有する種々の汎用システムを用いることができるし、また要求された処理ステップを実行するための特定用途の装置を製作することが適した場合もある。これら種々のシステムに要求される構成は、以下の説明において明らかにされる。さらに、  本発明は、任意の特定のプログラミング言語と関連づけられるものではない。本明細書で説明される内容を実装するために、種々のプログラミング言語を利用できることは明らかであろう。
【０１０８】
実施形態の前述の説明は、例示と説明を目的として行われたものである。したがって、開示された実施形態が本発明の全てではないし、本発明を上記の実施形態に限定するものでもない。本発明は、上記の開示にしたがって、種々の変形が可能である。本発明の範囲は上述の実施形態に限定解釈されるべきではなく、特許請求の範囲にしたがって解釈されるべきである。本発明の技術に詳しい者であれば、本発明はその思想や本質的特徴から離れることなくその他の種々の形態で実現できることを理解できるであろう。同様に、モジュール・処理・特徴・属性・方法およびその他の本発明の態様に関する名前付けや分割方法は必須なものでものないし重要でもない。また、本発明やその特徴を実装する機構は異なる名前や分割方法や構成を備えていても構わない。さらに、当業者であれば、モジュール・処理・特徴・属性・方法およびその他の本発明の態様は、ソフトウェア、ハードウェ
ア、ファームウェアもしくはこれらの組合せとして実装できることを理解できるであろう。また、本発明をソフトウェアとして実装する場合には、モジュールなどの各要素は、どのような様式で実装されても良い。例えば、スタンドアロンのプログラム、大きなプログラムの一部、異なる複数のプログラム、静的あるいは動的なリンクライブラリー、カーネルローダブルモジュール、デバイスドライバー、その他コンピュータプログラミングの当業者にとって既知な方式として実装することができる。さらに、実施形態は特定のプログラミング言語に限定されるものではないし、特定のオペレーティングシステムや環境に限定されるものでもない。以上のように、上記の本発明の説明は限定的なものではなく例示的なものであり、本発明の範囲は添付の特許請求の範囲にしたがって定められる。
【符号の説明】
【０１０９】
１０３  ソフトウェアアプリケーション
１０９  品質分析アプリケーション
１１７  分析ツール
２０２  分析モジュール
２０４  統計モジュール
２０６  期待モジュール
２０８  品質モジュール
２０９  分類モジュール
２１０  インターフェースモジュール
２３５  プロセッサ
２３７  メモリ
２４１  通信ユニット
２４５  ストレージ
２４７  コードデータベース
２４９  ツール性能データベース
【図１】
0006428070.tif 000004
【図２】
0006428070.tif 000005
【図３】
0006428070.tif 000006
【図４Ａ】
0006428070.tif 000007
【図４Ｂ】
0006428070.tif 000008
【図５】
0006428070.tif 000009
【図６】
0006428070.tif 000010
【図７】
0006428070.tif 000011
【図８】
0006428070.tif 000012
【図９】
0006428070.tif 000013
【図１０】
0006428070.tif 000014
【図１１】
0006428070.tif 000015
【図１２】
0006428070.tif 000016
【図１３】
0006428070.tif 000017
【図１４】
0006428070.tif 000018
【図１５】
0006428070.tif 000019