(57)【要約】【課題】ソフトウェアの異常及び誤り、影響のあるコードの部分並びに関連する問題の検索処理を改善することができる方法及びシステムを提供する。【解決手段】知識ベース（１０１）はソフトウェアプロジェクト、バグレポート及び処理に関連する指標を含み、ソースコード情報（１０２）はソースコードを含む。検索コードの方法は、検索クエリを入力し（Ｓ１）、入力した検索クエリを解析して処理し、知識ベース（１０１）を参照して入力した検索クエリと一致するまたは関連しているソースコードの中の文または一節を検索し（Ｓ２−Ｓ４）、知識ベースを参照して、検索された文または一節との関連性を考慮して検索結果をランク付けし（Ｓ７）、ランク付けされた検索結果を報告する（Ｓ８）。【選択図】図２
2008117280.tif 000002
【特許請求の範囲】
【請求項１】
検索クエリを含み及び／または検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索する方法であって、
ソフトウェアプロジェクト、バグレポート及び処理に関連する指標(metric)に関する情報を含む知識ベースを準備するステップと、
ソースコードを含むソースコード情報を準備するステップと、
検索クエリを入力するステップと、
入力した検索クエリを解析処理し、知識ベースを参照して、ソースコード情報から入力した検索クエリと一致しまたは関連するソースコードの中の文または一節を検索するステップと、
知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするステップと、
前記ランク付けステップによって決定されたランク順に検索結果を報告するステップと
を含むことを特徴とするソフトウェアソースコードを検索する方法。
【請求項２】
ソースコード情報はデータフローに関する情報を含むことを特徴とする請求項１に記載の方法。
【請求項３】
ソースコードの中の検索はソースコードの構文に従うことを特徴とする請求項１に記載の方法。
【請求項４】
入力した検索クエリの情報で知識ベースを更新するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記報告するステップは類似を表す情報を示すことを特徴とする請求項１に記載の方法。
【請求項６】
前記報告するステップはソフトウェア文を示すことを特徴とする請求項１に記載の方法。
【請求項７】
１つ以上の結果がソースコードの中で異常、誤り及び／または正しい文と見なされるか否かに関しての情報で知識ベースを更新するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記報告するステップは誤りを引き起こしたソフトウェア文を示すことを特徴とする請求項１に記載の方法。
【請求項９】
前記報告するステップは類似するソフトウェアの誤りであるソフトウェア文を示すことを特徴とする請求項１に記載の方法。
【請求項１０】
前記報告するステップは類似するソフトウェア文であるソフトウェア文を示すことを特徴とする請求項１に記載の方法。
【請求項１１】
前記ソースコード情報はソースコードにおける変更に関する情報を含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記ソースコード指標の値に基づいてランク付けが行われることを特徴とする請求項１に記載の方法。
【請求項１３】
前記知識ベースからの情報に基づいてランク付けが行われることを特徴とする請求項１に記載の方法。
【請求項１４】
検索結果で知識ベースを更新するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１５】
統計モデルを用いて知識ベースを更新するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１６】
コンピュータに請求項１乃至１５のいずれか１つに記載の方法を実行させることを可能とするコンピュータプログラム。
【請求項１７】
検索クエリを含み及び／または検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索するシステムであって、
ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む知識ベースと、
ソースコードを含むソースコード情報と、
検索クエリを入力し、前記入力した検索クエリを解析処理して、知識ベースを参照してソースコード情報から、入力した検索クエリと一致するまたは関連するソースコードの中の文または一節を検索する検索ユニットと、
知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするランク付けユニットと、
前記ランク付けユニットによって決定されたランク順に検索結果を表示する表示ユニットと
を備えたことを特徴とするソフトウェアソースコードを検索するシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの欠陥の修正やソースコードの特定部分の検出のためのソフトウェアソースコードの検索方法及びシステムに関する。
【背景技術】
【０００２】
ソフトウェアの欠陥（以下「バグ」という。）を修正すること、または大規模なソフトウェアプロジェクトにおいて特定部分のソースコードを検出することは開発者に大きな負担である。コードベースが大規模になるにつれ、プロジェクトやソースコード全体の複雑さが増加していく。よって、全体を把握し、これらのバグを修正し、コードの変更により影響されるソースコード内の位置（特にコードの変更や欠陥／誤りの訂正により間接的に影響を受けるソースコードの部分の位置）を検出することは、益々困難になってきている。
【０００３】
ソフトウェアの欠陥を修正したことにより影響される関連部分を検出するためにソースコードを調査する場合、ソフトウェア開発者は特定の部分を検出するための検索ユーティリティ（例えば「grep」のようなユーティリティ）をよく利用する。この種のツールは、検索クエリにより記述される一致したものを返すのみであり、それは、通常、決まった表現またはキーワードリストの形式で与えられる。その結果、返された、一致の可能性のあるもののリストは、調べるべき数百の結果を含む膨大なリストとなる。また、検索が単純であるため、報告された一致結果のほとんどは初期の問題には関係がない。このような問題により、開発者は、ソフトウェアの欠陥に直接的または間接的に関連性を持つ、全ての関連する適合結果を除外できるように、コードベース全体の深い知識を持つことが要求される。
【０００４】
さらに、開発者は、単純な検索ツールを用いている間は、間接的に関連するソフトウェアの部分を検索することはできない。ましてや、ソフトウェア部分が直接的または間接的に関連していない場合、同じソフトウェアの欠陥を有している場合もある。
【０００５】
なお、本願に関連する先行技術文献として以下のものがある。
【特許文献１】特開２００２−２７８７９１号公報
【特許文献２】特開２００５−２２８２４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
より正確な検索結果を得るために構文の解析や情報に関連する他のソースを考慮した、開発者を支援するツールが存在するが、これらのツールによっても、開発者が、検索クエリに間接的に関連する部分または検索クエリに類似する問題を含む部分を検索することは困難である。
【０００７】
本発明は、検索されるソースコードに間接的または直接的に関連する種々の入力ソースを考慮することで上述の問題を解決する。
【０００８】
本発明は、ソフトウェアの異常及び誤り、影響のあるコードの部分、関連する問題についての検索処理を改善することができる方法及びシステムを提供する。
【課題を解決するための手段】
【０００９】
構文の解析、データフロー情報、知識ベース及び関連性によるランク付けを用いて、より正確にソースコード文、異常及び誤りを検出するのに利用されるであろう、ソフトウェアソースコードの検索及びソフトウェア異常及び誤りの検出の方法及びシステムを開示する。追加の情報と同様に検索クエリ及び検索結果により知識ベースを常に更新してもよい。ソフトウェアの誤り、異常及び正しい文（statement）に関する情報での知識ベースを更新すること及び統計モデルを使用することによって、知識ベースを使用して、文（statement）またはソースコードの一節(passage)が誤りであり、または異常または正しいと考えられることを予測することの精度をさらに増加させることができる。知識ベース、データフロー情報及び様々なソフトウェア指標の値を考慮したランク付けアルゴリズムを用いて、検索クエリに対する関連性にしたがい検索結果が順序づけられる。
【００１０】
すなわち、本発明の第１の特徴において、検索クエリを含み、及び／または、（異常、誤り、文及び一節として）検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索する方法を提供する。上記方法は、ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む知識ベースを準備するステップと、ソースコードを含むソースコード情報を準備するステップと、検索クエリを入力するステップと、入力した検索クエリを解析処理し、知識ベースを参照してソースコード情報から入力した検索クエリと一致し、または関連するソースコードの中の文または一節を検索するステップと、知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするステップと、ランク付けステップによって決定されたランク順に検索結果を報告するステップとを含む。
【００１１】
ソースコード情報はデータフローに関する情報を含んでもよい。
【００１２】
ソースコードの中の検索はソースコードの構文に従ってもよい。
【００１３】
上記方法は、入力した検索クエリの情報で知識ベースを更新するステップをさらに含んでもよい。
【００１４】
前記報告するステップは類似を表す情報またはソフトウェア文を示してもよい。
【００１５】
１つ以上の結果がソースコードの中で異常、誤り及び／または正しい文と見なされるか否かに関しての情報で知識ベースを更新するステップをさらに含んでもよい。
【００１６】
前記報告するステップは誤りを引き起こしたソフトウェア文、類似するソフトウェアの誤りであるソフトウェア文または類似するソフトウェア文であるソフトウェア文を示してもよい。
【００１７】
前記ソースコード情報はソースコードにおける変更に関する情報を含んでもよい。
【００１８】
前記ソースコード指標の値または前記知識ベースからの情報に基づいてランク付けが行われてもよい。
【００１９】
上記方法は、検索結果で知識ベースを更新するステップを含んでもよい。
【００２０】
統計モデルを用いて知識ベースを更新してもよい。
【００２１】
本発明の第２の特徴において、コンピュータに上記方法を実行させることを可能とするコンピュータプログラムを提供する。
【００２２】
本発明の第３の特徴において、検索クエリを含み、及び／または、（異常、誤り、文及び一節として）検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索するシステム。上記システムは、ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む知識ベースと、ソースコードを含むソースコード情報と、検索クエリを入力し、前記入力した検索クエリを解析処理して、知識ベースを参照してソースコード情報から、入力した検索クエリと一致するまたは関連するソースコードの中の文または一節を検索する検索ユニットと、知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするランク付けユニットと、ランク付けユニットによって決定されたランク順に検索結果を表示する表示ユニットとを含む。
【発明の効果】
【００２３】
本発明によれば、ソースコードにおいて、検索クエリに間接的に関連する部分または検索クエリに類似する問題を含む部分を正確に検索し、その検索結果をランク付けして提供する。これにより、開発者は、検索されたソフトウェアの異常及び誤り、影響のあるコードの部分並びに関連する問題の重要性を容易にかつ正確に把握することができる。
【発明を実施するための最良の形態】
【００２４】
以下、添付の図面を参照して本発明の好ましい実施形態を説明する。
【００２５】
第１の実施形態
１．１  構成
図１は本発明の第１の実施形態におけるソフトウェア異常及び依存性検索システムの構成を示す図である。ソフトウェア異常及び依存性検索システム１０は検索ユニット１００、ランク付けユニット１０３、及び表示ユニット１０４を有する。システム１０はさらに知識ベース１０１とソースコード情報１０２を含むデータベース１１０を有する。
【００２６】
検索ユニット１００は検索クエリを入力、解析して、検索クエリに一致するまたは関連するセンテンスやコードを抽出する。
【００２７】
ソースコード情報１０２は、ソースコード、構文の解析、データフロー、ソースコードに対する変更に関する情報（但し、これらに限定されるものではない）を格納する。ソースコードは１つ以上のソースファイルにおいて表現される。
【００２８】
ランク付けユニット１０３はランク付けの順番に関する情報を提供する一方、ランク付けアルゴリズムは検索クエリについて関連性を考慮する。一番上にランク付けされた結果は検索クエリと密接な関係にある結果を表す。つまり、その結果は検索クエリに関連していると考えられる。一番上にランク付けされた結果は、検索クエリ自体によって表現された文であると考えられ、関連性の程度が異なるが、直接的または間接的に検索クエリにおいて記述されているソフトウェアの欠陥またはソフトウェアの誤りの原因となり得る結果がその後に続く。また、この原因の可能性(likelihood)はランク付けの順番に影響を及ぼし得る。
【００２９】
表示ユニット１０４は、検索の結果を、文のリスト、ソースコードファイルを参照する行番号、テキスト形式での視覚的な表現、ハイパーリンクテキスト、フローチャート、関数グラフまたは他のグラフィカルな手段として報告することができる。
【００３０】
例えばハイパーリンクテキストの場合、表示結果は結果の位置に関する詳細情報を含むことができる。その表示結果は、類似の結果、データフロー情報及び統計値情報の検索を可能にするための付加情報とともに、関数、行、ソースコードファイルを含んでいるが、これらに制限されるものではない。知識ユニット１０１は、ソフトウェアの誤り、一般的なソフトウェア問題、規定、プログラミングガイドライン、ソフトウェアの専門家の評価結果並びに以前の検索クエリとその結果に関する情報及び選択された結果を報告することによって、開発者またはユーザが直接システムに入力可能な付加情報を含めることができる。
【００３１】
最終的な検索結果はデータまたは書類の形式で報告されてもよい。
【００３２】
本発明の第１の実施形態において、検索ユニット１００は入力クエリ（すなわち、検索要求）を解析し、知識ベース１０１及びソースコード情報１０２を検索する。次に、これらの検索の結果を収集し、ランク付けユニット１０３によってランク付けされる。表示ユニット１０４は、ランク付けユニット１０３から受け取った結果に従って、ランク付けユニット１０３によって定義された順で、検索結果を出力する。
【００３３】
１．２  動作
図２はソフトウェア異常またはソフトウェアコードの文若しくは部分を記述する与えられた入力クエリに対する検索結果を示すことができるソフトウェア異常検索システム１０のフローチャートを示す図である。
【００３４】
最初に、検索クエリを検索ユニット１００に入力する（Ｓ１）。検索ユニット１００は入力クエリを解析し、正規化し、トークン化する（Ｓ２）。正規化及びトークン化は必須ではない。
【００３５】
検索ユニット１００は検索クエリトークン（トークン化された検索クエリ）を知識ベース１０１及びソースコード情報１０２に関連付ける（Ｓ３）。
【００３６】
検索ユニット１００によって、知識ベース１０１及びソースコード情報１０２においてステップＳ３により与えられる情報セットに基づいて検索が実行される（Ｓ４）。この処理（Ｓ４）において、検索ユニット１００は２つの処理（Ｓ４１及びＳ４２）を実行する。
【００３７】
すなわち、知識ベース１０１を、知識ベース１０１に関連付けられた検索クエリトークンで検索する（Ｓ４１）。また、ソースコード情報１０２を、ソースコード情報１０２に関連付けられた検索クエリトークンで検索する（Ｓ４２）。
【００３８】
次に、上記処理Ｓ４から検索結果を収集する（Ｓ５）。検索ユニット１００によって入力クエリに一致する結果が見つけられたか否かを検出する（Ｓ６）。結果が見つけられない場合、検索ユニット１００は検索処理を終了する。結果が見つけられた場合、表示ユニット１０４上に表示する前にその結果をランク付けするため、検索ユニット１００はランク付けユニット１０３にその結果を出力する。
【００３９】
ランク付けステップＳ７において、３つのステップＳ７１，Ｓ７２及びＳ７３を実行する。
【００４０】
ランク付けのために知識ベース１０１及びソースコード情報１０２から付加情報を集める（Ｓ７１及びＳ７２）。次に、ステップＳ７１及びＳ７２からの付加情報及びソースコードの指標の値を考慮して、ランク付けアルゴリズムをステップＳ５から出力される結果に適用する。
【００４１】
最後に、その結果をステップＳ７３で定義されたランク順で表示ユニット１０４上に表示する。
【００４２】
本実施形態のシステムによれば、ソースコードにおいて、検索クエリに間接的に関連する部分または検索クエリと類似する問題を含む部分を正確に検索し、その検索結果をランク付けして提供する。これにより、開発者は、検索されたソフトウェアの異常及び誤り、影響のあるコードの部分並びに関連する問題の重要性を容易にかつ正確に把握することができる。
【００４３】
以下、各ステップの処理を詳述する。
【００４４】
１．２．１  検索クエリ入力処理（Ｓ１）
検索クエリ入力処理ステップ（Ｓ１）はシステム１０によるさらなる処理のため入力（検索クエリ）を準備し、配置する。入力処理自体は以下で概説する様々なステップを含む。検索クエリ入力処理ステップは、特に以下のステップを含む。
システムへの入力を準備するステップ（例えば、コマンドライン、グラフィカルユーザインタフェース、…）；
入力クエリ（検索クエリ）を解析するステップ；
入力をトークン化するステップ；
各トークンを１つ以上のデータベースに割当てるステップ。
【００４５】
従来の”grep”コマンドまたは同様のユーティリティ（例えば、単純なストリング検索または検索に基づいた正規表現(regular expression)）とは違って、本発明の検索クエリはより記述的にすることができる。例えば、有効な検索クエリは以下のようなものであってもよい。
"file=foo.c line=122 symbol=x symbol=y functioncall=memcpy"
【００４６】
この検索クエリの例では、その情報は、関数呼出し”memcpy”と記号”x”及び”y”を含むソースファイル”foo.c”の１２２行目のバグを記述する。
【００４７】
上記例に示されるように、テキスト形式の検索クエリは用語トークン（例えば、”x”）の文字を記述する属性トークン（例えば、”symbol”）を含んでもよい。そのような属性トークンは検索をサポートし、より良好な対象の検索を可能にする。また、検索領域を、ファイル、関数、クラス等に制限するために近接検索オプションが提供されてもよい。
【００４８】
また、実装に応じて、以下の検索範囲を広くするために検索クエリは標準的な表現（例えば、ワイルドカード”*”及び”?”）を含むことができる。
"file= foo.c line=122 symbol=x symbol=y functioncall=mem*"
【００４９】
比較すると、最初の例が明確に”memcpy”を提示する一方、ワイルドカード”*”のある上記例は”mem”から始まるどんな関数呼出しも含む。
【００５０】
検索クエリ自体はテキスト入力のみに制限されず以下のような、様々な方法でシステム１０に検索クエリを提供できる。
コマンドラインストリング（例えば、”searsh -file foo.c -line 122 -symbol x”）；
グラフィカルユーザインタフェースコンポーネントを通して（ウェブ検索インタフェースと同様）；
インタフェースのようなソースコード／テキストエディタを通して”視覚的に”；または、
任意の他の適当な手段。
【００５１】
単純な”視覚的な”クエリ入力の一例を図３に示す。
【００５２】
１．２．２  入力クエリの解析及びトークン化（ステップＳ２）
システム１０が与えられた情報で動作できるように、システム１０への入力は解析され処理される必要がある。検索クエリを解析する処理は、１つのクエリコンポーネントを認識し、システム１０における他のコンポーネントによって使用される内部的に使用されるデータ構造を作成する。
【００５３】
検索クエリとしての入力ストリングの場合、ストリングは、データを処理するより前に個々のトークン（例えば、属性トークン、検索用語及び制御トークン）に分けられる必要がある。
【００５４】
データの入力ストリング標準化の形式に依存して、情報が最も単純に、かつ最も効率的な構造になるようにデータが正規化される必要がある。これにより、複雑さを低減し、最も効率的な検索クエリを作成する。
【００５５】
１．２．３  データベースへのトークンの割当て（ステップＳ３）
入力を解析した後、システム１０は各クエリコンポーネントを１つ以上のデータベースまたは知識ベースに割当てる。割当て処理をできるだけ効率的でかつ正確にするために、各データベースを検索に使用されるオブジェクトを記述する属性に関連付ける。例えば、データベースの属性リストは、図４に示されるようになる。
【００５６】
図４に示された属性リストは、関連データベースがファイル（例えば、ファイル名）と関数名に関する情報で検索できること示す。
【００５７】
以下の入力クエリの場合、図４に示す属性リストに示された属性に関連付けられたデータベースが用語”foo.c”及び”memcpy”により検索される。
"file=foo.c line=122 symbol=x smbol=y functioncall= memcpy"
【００５８】
なお、上記説明は検索クエリトークンをシステム１０によって使用されるデータベースに割当てるための単純な方法を記述しているだけである。
【００５９】
１．２．４  データベース検索（ステップＳ４）
どのようにしてデータベースを検索するかについては多数の可能な方法が存在し、それらは使用されるデータベースシステムに大きく依存する。一候補として、１９７０年代にＩＢＭによって開発された、リレーショナル・データベース・マネージメント・システムからデータを作成して、変更して、検索するのに使用される周知の言語であるＳＱＬ（Structured Query Language）がある。
【００６０】
標準的な検索は検索クエリで定義されるように特定の用語の存在すべてを抽出するが、本発明は検索用語、追加の特性及び検索クエリで設定される基準に一致するソースコードの特定の要素を抽出する。関連情報（例えば、データフロー）の系統的な検査によって、抽出された結果は、検索クエリと直接的に一致しないが、関連する要素を含むことができる。
【００６１】
例えば、特定のファイルの中で変数”X”の存在を検索すると、その結果として検索用語（例えば、”symbol=X file=foo.c line=122”）に一致するすべての”X”が列挙される。
【００６２】
図５はソースコードの抜粋を示す。図５において、同じファイルに現れるが、検索用語で定義された”Ｘ”と関係のない変数”Ｘ”は、一覧表に表示されない。代わりに、変数”Ｙ”が一致した”Ｘ”に依存するなら、”Ｙ”の存在は報告される。図５において、一致した変数”Ｘ”を１２２，１２３及び１２５行目に見つけることができる。１５１行目の変数”Ｘ”は検索クエリで記述された”Ｘ”と無関係であることをはっきりと示すので、１５１行目の変数”Ｘ”は報告されない。しかしながら、１２３，１２４及び１２５行目の変数”Ｙ”の存在は、”Ｘ”との関係によって報告される。これに対して、標準的な検索ツールは、１２２，１２３，１２５及び１５１行目に現れた”Ｘ”の存在すべてを報告する。
【００６３】
ソースコードの中に一致するものが見つからない場合、検索は終了したものとみなされる。
【００６４】
本発明において、システム１０は少なくとも２つのデータベース、すなわち知識ベース１０１及びソースコード情報１０２を使用する。
【００６５】
検索範囲を狭くすること（例えば、ファイル”foo.c”及び”bar.c”だけ）、
依存関係を除くこと（例えば、”Y”と無関係のときの記号”X”）、
検索範囲を１つ以上のデータベースに制限すること、
データベースから特定の情報を抽出すること等により、検索を制御するための１セットの制御が適用されてもよい。
【００６６】
＜知識ベース＞
知識ベース１０１は、ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む蓄積された情報を含むデータベースである。情報自体は開発者とバグ追跡システムによって広く集められる。
【００６７】
検索処理中に知識ベース１０１から抽出した項目は、検索処理において後で行われる結果のランク付けのための有用な入力を提供する。
【００６８】
知識ベース１０１に格納した情報は、
バグレポートと、
処理指標と、
公知の問題のリスト等を含む。
【００６９】
バグレポートは、バグに関する情報以外に、他のソースファイルの中で影響を受けるソースコードの一節のリストと同様に、ソフトウェアの欠陥を解消するための費用及び時間、欠陥がどれくらい深刻であるかに関する数値等の付加データを含むことができる。
【００７０】
ソフトウェアを生成するための処理の制御を支援するために使用される処理指標は、以下の指標データを含む。
テスト中見つけられた欠陥の数；
要求に対する変更の数；
１週間あたりの費やされたプログラミング回数（時間）；
１週間あたりの費やされたデバッギング回数（時間）；等。
【００７１】
さらにソフトウェアの欠陥の検索をサポートするために、公知の問題及び会社／開発チームに関連する問題のリストを知識ベース１０１に含めることもできる。
【００７２】
＜ソースコード情報＞
ソースコード情報１０２は、
ソースコードと、
ソースコードに関する付加情報とを含む１つ以上のコンポーネントで表すことができる。
【００７３】
ソースコード・コンポーネントは通常、言語仕様（例えば、C、C++、Pascal）に従ったテキストのコード表示を含む。ソースコードファイル自体は単独のファイルとして、記憶媒体上、またはソースコードになされた変更履歴に関する記録とともにバージョニング・システムの中に格納される。バージョニング・システムを使ってソースファイルの変更履歴記録が格納された場合、その記録された変更履歴は検索システム１０によって使用可能なさらなる情報を提供するであろう。
【００７４】
さらに、ソースコード及びソースファイルに関するまとめられた情報は、システム１０に提供される。そのような情報は、
データフローと、
ソフトウェア指標と、
ソースコード部分の複製と、
ソースコードファイルの中の関数リストと、
ソースコードファイルの中のオブジェクトのリスト等を含むであろう。
【００７５】
データフロー（プログラムまたはシステムの中のデータの流れ）の情報はシステム１０に、変数間の依存性と、どのようにデータがプログラムで使用されるかについての見識を提供する。本発明によると、この情報は、間接的に検索クエリに関連するか、関連性のある結果（ソースコード部分）を特定するのに、使用される。その関連性は、検索クエリで提供された変数に関するデータフローに従うことにより、決定される。変数Ｘを他の変数Ｙに割当てる場合、ＹはＸに依存し、それ故、関連性が与えられる。また、データフロー情報は１つ以上の変数の近接性を決定するのに使用される。変数Ｘは、変数ＸとＺの関係より近い近接性を共有している変数Ｙに割当てられる一方、ＸをＹに割当て、ＹをＺに割当てる。この近接性情報（近接性スコア）は、その後ランク付けステップの中で使用される。
【００７６】
図６Ａ及び図６Ｂはデータフローの単純な例を示す。これらの図面は、与えられた関数においてデータがどのように”流れている”かを視覚的に示したデータフローの単純な例を示す。また、この例では、データフローは、どのようにデータが操作されるか（例えば、使用する、他の記号に割当てる、…）に関する情報を有している。それは、さらにＸ−Ｙ、Ｙ−Ｚ及びＸ−Ｚ間の近接性を示す一方、Ｘ−Ｚ組が最も大きい距離を有していることを示している。
【００７７】
ソフトウェア指標は、統計的にプログラムの構造または内容について記述し、一般的にソフトウェア（品質）テストに使用される。例えば、ソフトウェア指標は、コードの１０００行あたりの（推定）バグ／欠陥の数、関数中の独立した経路の最小の数のような複雑さのレベル等について記述する。
【００７８】
必要なデータ（例えば、データフロー、指標、…）を出力するソースコード・スキャン・ソフトウェアを用いて、”ソースコード情報”の範囲内の情報を蓄積することができる。
【００７９】
１．２．５  情報収集（ステップＳ５）
データベースが検索されると、すべてのデータベースから結果が抽出され蓄積されて、互いに割当てられる。各データベースから互いに抽出された結果を関連づけるために使用される属性は、ファイル名、関数名、記号名、関数呼出し及び特定の命令か制御文であり得る。多くの場合、ファイル名及び行番号情報が、抽出された結果を関連づけるために十分であるべきである。
【００８０】
ソースコードデータからの結果を他のデータベース（知識ベース、まとめられたソースコード情報、…）からの１つ以上のエントリに関連づけることができる。
【００８１】
図７は、他のデータベースから抽出されたエントリに関連する結果のセットからの検索の一致性を示す。
【００８２】
結果の最終リストまたは結果のセットが空である場合（ステップＳ６で「Ｎｏ」）、適当な一致が見つけられず、検索を終了したと見なす。そうでなければ、結果のセットはユーザへ表示する前にランク付けされる。
【００８３】
１．２．６  ランク付け（ステップＳ７）
このシステムの実用性は、大部分はデータベース（特に、知識ベース及びまとめられたソースコード情報）さらに結果のセットのランク付けに依存する。結果のセットの中に何百または何千ものソースコードの位置があるかもしれないが、ランク付けステップは、最初の入力クエリに関連してどの一致が「ベスト」と考えられるかを決定する。
【００８４】
ランク付けユニット１０３は、結果のセットにおける抽出された要素毎にランク付けの値を算出する。このランク付けの値を算出するために、ランク付けユニット１０３は種々のデータベースから集めた情報を使用する。ソフトウェアの欠陥を検索する場合、ランク付けアルゴリズムは、ソースコードのより複雑なまたはより誤りのありそうな領域を示唆する値及び指標を使用し、ランク付けの値を増加させる。
【００８５】
ランク付けに影響を及ぼす値は、以下のものを含む。
複雑さ等の指標（複雑さが増すほど、通常ソースコードの一部をテストすることをより難しくするので、ソフトウェアの欠陥の可能性は、その複雑さに従って増加する。）；
同様の欠陥がどれくらい重大であるかまたは費用がかかるかについてのバグレポートからの情報；
データフロー情報から収集した近接性スコア。
【００８６】
収集した情報からランク付けの値を決定するため、あらかじめ計算されたテーブルが最終的なランク付けの値を調べるのに使用されるか、またはランキングがカスタマイズされた式を用いて計算される。さらに、特定のソフトウェアプロジェクト、開発者または企業方針等に対するそれらの重要性を表ために、ランク付けの値を生成するコンポーネントにそれぞれ異なる重み付けがなされてもよい。
【００８７】
単純な例として、欠陥が、図８Ａに示されるように記号”Ｙ”及び関数呼出し”Ｃｏｐｙ”に関連して認識されると仮定する。欠陥部分及び欠陥の真の理由であり得る関連する文を見つけようと試みるために、システムに以下の検索クエリを入力することができる。
"symbol=Y + functioncall =Copy"
【００８８】
ランク付けされた、検索クエリからの結果出力は、図８Ｂに示されるようになる。
【００８９】
図８Ｂに見られるように、最上位にランク付けされた結果は、”Ｃｏｐｙ”と”Ｙ”が一緒に現れる文である。２番目にランク付けされたものは、用語”Ｙ”も”Ｃｏｐｙ”も含まれない”ＫｎｏｗｎＰｒｏｂｌｅｍＦｕｎｃｔｉｏｎ（Ｘ）”である。それは符号”Ｙ”が現れる３番目のエントリよりもさらに高くランク付けされている。図８Ａで示されるようなソースコードを参照すれば、ＹがＸに依存することを示している（３番目にランク付けされた文においても見られるように）。そして、知識ベースの検索中、システムは、” ＫｎｏｗｎＰｒｏｂｌｅｍＦｕｎｃｔｉｏｎ（）”が公知の問題として、おそらく重大な問題としてリストアップされたことを検出した。
【００９０】
これらの情報、”Ｙ”と”Ｘ”との関係、それらの近接性及び公知の問題としての”ＫｎｏｗｎＰｒｏｂｌｅｍＦｕｎｃｔｉｏｎ（）”の特性は、関連する”Ｙ”図８Ｂにおいて３番目にランク付けされた文の適合性より高いランク付けの値をもたらす。
【００９１】
従って、この単純な例で適用された可能なランク付けアルゴリズムを以下のように定義できる。
１）直接的一致は、常に最上位のランク付けの値を有する。
２）部分的一致は、ランク付けの値を所定の比率（％）で減少させる。
３）検索用語記号と別の記号との関係はそれらの近接性で表現される(遠ければ遠いほどランク付けの値は減少する)。
４）公知の問題（または課題）が結果のセットからの現在の要素に関連している場合、その問題の重大さをランク付けの値に乗算する。
５）ランク付けの値に、正規化された、関連するソースコードファイルの開発コストが乗算される。
【００９２】
１．２．７  表示（ステップＳ８）
表示は事前にランク付けされた結果がユーザに表示される検索方法の最終ステップである。表示された結果の順番は、ユーザの選択によるまたは初期の検索クエリで述べたように、ランク付けの値の昇順または降順であり得る。
【００９３】
前のステップから表示ステップに、結果を表示するためのすべての必要な情報が転送される。また、より詳細な出力を可能にするために、表示ステップが利用可能なデータベースを検索することも可能である。
【００９４】
結果自体は様々な方法でユーザに表示されることができる。それらの中には
結果のテキスト形式のリスト、
テーブル形式のもの、
ハイパーリンク、等がある。
【００９５】
図９にハイパーリンクを用いた結果表示例を示す。
【００９６】
第２の実施形態
２．１  構成
図１０は本発明の第２の実施形態におけるソフトウェア異常及び依存性検索システムの構成を示す図である。第２の実施形態のシステム１０ｂは第１の実施形態のシステム１０と同じ構成を有する。
【００９７】
本発明の第２の実施形態によれば、知識ベース１０１は統計モデル（例えば、マルコフ連鎖またはベイズ分類）を用いて収集した統計情報を含む。統計的方法は、ソースコード内のデータフローをモデル化するのに使用することができる。統計モデルを用いて、データフローの異常を効果的にまたは正確に検出することができる。例えば、マルコフ連鎖の場合、変数宣言の後の変数定義の可能性は、変数におけるいかなる他の動作よりもはるかに高い。同様に、異常をマルコフ連鎖で考慮することができる（例えば、宣言されたが定義されていない変数の使用）。そして、できるだけ早く異常を検出するために、公知の異常なソフトウェアソースコード及び公知の正しいソフトウェアソースコードにおいて学習を実行され得る。
【００９８】
第２の実施形態によれば、検索ユニット１００は検索要求を解析して、知識ベース１０１及びソースコード情報１０２を検索する。次に、これらの検索の結果は収集され、ランク付けユニット１０３によってランク付けされる。表示ユニット１０４は、ランク付けユニット１０３によって定義された順番で、ランク付けユニット１０３から受け取った結果に基づいて検索結果を出力する。
【００９９】
２．２  動作
図１１は、ソフトウェア異常またはソフトウェアコードの文若しくは部分を記述する、与えられた入力クエリに対する検索結果を示す、本発明の第２の実施形態のソフトウェア異常検索システムのフローチャートを示す図である。
【０１００】
ステップＳ１からＳ８までの処理は、図２で示される第１の実施形態のものと同じである。
【０１０１】
ランク付けとともに結果を表示した（Ｓ８）後に、検索を終了するか否かを検出する（Ｓ９）。
【０１０２】
検索を終了しない場合、表示された結果のセットの中に、ソフトウェア異常、ソフトウェア誤りまたは正しい文があるか否かを検出する（Ｓ１０）。すなわち、ソースコードにおいて１つ以上の結果が異常、誤り及び／または正当であるか否かを決定する。結果のセットの中に上述の項目のいずれもない場合、次のセットを表示することができる（Ｓ１５）。他の場合、検索動作はステップＳ１１に継続し得る。
【０１０３】
ステップＳ１１において、表示された検索結果のセットの中の１つ以上の結果を、異常、誤りまたは正しい文としてマークを付すことができる。
【０１０４】
次に、知識ベース１０１を、１つ以上のマークが付された結果に関連する情報で更新する（Ｓ１２）。例えば、更新処理は統計モデル（例えば、マルコフモデルまたはベイズ分類等）を用いることができる。また、知識ベース１０１を入力検索クエリで更新してもよい。
【０１０５】
知識ベース１０１の更新の後、同様のソースコード部分または文の検索を開始するか否かを検出する（Ｓ１３）。開始しない場合は、検索を終了し、他の場合は、ステップＳ１４に継続する。
【０１０６】
ステップＳ１４において、ステップＳ１１でマークが付されたように、同様のソースコード部分または文を検索するために初期の検索クエリを更新する。
【０１０７】
ステップＳ１５から移動したステップＳ１５において、現在表示された結果のセットの中にソフトウェアの異常、誤りまたは文があった後、複数の結果のセットが利用可能か否かを決定する。得られない場合は、検索を終了し、他の場合はＳ１６に継続する。
【０１０８】
ステップＳ１６において、次のセットを選択して、その検索を開始する。例えば、表示がカウンタ値以上の結果から表示を始めることを示すクエリにカウンタを加えることによって、次のセットを選択することができる。
【０１０９】
図１２は、表示結果の一例を示す図である。この表示結果は第１及び第２の実施形態に適用することができる。表示ユニット１０４は結果を表示する。例えば、表示された結果７０１は検索クエリの２つの一致を表示する一方、ランク付けインデックスまたは一致性または関連性の表示としてランク順表示７０２が与えられる。例に示されるように、付加情報にはその中に、一致が検出されたファイル名（例えば、”File:...”）、一致の場所を位置付けるための行番号（例えば、”Line:...”）、一致する文自体（例えば、”Statement:...”）及び一致に関連する報告メッセージ（例えば、”Report:...”）を含めることができる。さらに、結果は、ユーザが結果にマークを付けることができ、フィードバック情報を検索システム１０ｂに提供することを可能にする任意のセレクタ７０３，７０４及び７０５を有することができる。図１２に示されたこの例において、ソフトウェアの誤り７０３または正しい文７０５として、結果にマークを付けることができる。また、同様の文、異常または誤りの検索を可能にするまたは初期の検索クエリの絞り込みを可能にするためのコマンド７０４を結果に組み込むこともできる。
【産業上の利用可能性】
【０１１０】
本発明は、ソフトウェアの欠陥の修正やソースコードの特定部分の検出のためのソフトウェアソースコードの検索システムまたは検索方法に有用である。
【図面の簡単な説明】
【０１１１】
【図１】本発明の第１の実施形態におけるソフトウェア異常及び依存性検索システムの概略構成図
【図２】第１の実施形態の検索システムの検索動作の概略を示すフローチャート
【図３】単純な”視覚的な”クエリ入力の一例を示す図
【図４】データベースに対する属性リストの一例を示す図
【図５】ソースコードの抜粋を示す図
【図６Ａ】データフローの単純な例を示す図
【図６Ｂ】データフローの単純な例を示す図
【図７】他のデータベース抽出されたエントリに関連する結果のセットからの検索の一致性を示す図
【図８Ａ】ソースコードの一部を示す図
【図８Ｂ】ランク付けされた検索結果の表示例を示す図
【図９】ハイパーリンクを用いた表示例を示す図
【図１０】本発明の第２の実施形態におけるソフトウェア異常及び依存性検索システムの概略構成図
【図１１】第２の実施形態の検索システムの検索動作の概略を示すフローチャート
【図１２】第２の実施形態における検索結果の表示例を示す図
【符号の説明】
【０１１２】
１０、１０ｂ  ソフトウェア異常及び依存性検索システム
１００  検索ユニット
１０１  知識ベース
１０２  ソースコード情報
１０３  ランク付けユニット
１０４  表示ユニット
【図１】
2008117280.tif 000003
【図２】
2008117280.tif 000004
【図３】
2008117280.tif 000005
【図４】
2008117280.tif 000006
【図５】
2008117280.tif 000007
【図６Ａ】
2008117280.tif 000008
【図６Ｂ】
2008117280.tif 000009
【図７】
2008117280.tif 000010
【図８Ａ】
2008117280.tif 000011
【図８Ｂ】
2008117280.tif 000012
【図９】
2008117280.tif 000013
【図１０】
2008117280.tif 000014
【図１１】
2008117280.tif 000015
【図１２】
2008117280.tif 000016
【外国語明細書】
2008117280.tif 000017
2008117280.tif 000018
2008117280.tif 000019
2008117280.tif 000020
2008117280.tif 000021
2008117280.tif 000022
2008117280.tif 000023
2008117280.tif 000024
2008117280.tif 000025
2008117280.tif 000026
2008117280.tif 000027
2008117280.tif 000028
2008117280.tif 000029
2008117280.tif 000030
2008117280.tif 000031
2008117280.tif 000032
2008117280.tif 000033
2008117280.tif 000034
2008117280.tif 000035
2008117280.tif 000036
2008117280.tif 000037
2008117280.tif 000038
2008117280.tif 000039
2008117280.tif 000040
2008117280.tif 000041
2008117280.tif 000042
2008117280.tif 000043
2008117280.tif 000044
2008117280.tif 000045
2008117280.tif 000046
2008117280.tif 000047
2008117280.tif 000048
2008117280.tif 000049
2008117280.tif 000050
2008117280.tif 000051
2008117280.tif 000052
2008117280.tif 000053
2008117280.tif 000054
2008117280.tif 000055
2008117280.tif 000056
2008117280.tif 000057
2008117280.tif 000058