JP2008117280A - ソフトウェアソースコードの検索方法及びシステム - Google Patents
ソフトウェアソースコードの検索方法及びシステム Download PDFInfo
- Publication number
- JP2008117280A JP2008117280A JP2006301647A JP2006301647A JP2008117280A JP 2008117280 A JP2008117280 A JP 2008117280A JP 2006301647 A JP2006301647 A JP 2006301647A JP 2006301647 A JP2006301647 A JP 2006301647A JP 2008117280 A JP2008117280 A JP 2008117280A
- Authority
- JP
- Japan
- Prior art keywords
- source code
- search
- software
- information
- knowledge base
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
【課題】ソフトウェアの異常及び誤り、影響のあるコードの部分並びに関連する問題の検索処理を改善することができる方法及びシステムを提供する。
【解決手段】知識ベース(101)はソフトウェアプロジェクト、バグレポート及び処理に関連する指標を含み、ソースコード情報(102)はソースコードを含む。検索コードの方法は、検索クエリを入力し(S1)、入力した検索クエリを解析して処理し、知識ベース(101)を参照して入力した検索クエリと一致するまたは関連しているソースコードの中の文または一節を検索し(S2−S4)、知識ベースを参照して、検索された文または一節との関連性を考慮して検索結果をランク付けし(S7)、ランク付けされた検索結果を報告する(S8)。
【選択図】図2
【解決手段】知識ベース(101)はソフトウェアプロジェクト、バグレポート及び処理に関連する指標を含み、ソースコード情報(102)はソースコードを含む。検索コードの方法は、検索クエリを入力し(S1)、入力した検索クエリを解析して処理し、知識ベース(101)を参照して入力した検索クエリと一致するまたは関連しているソースコードの中の文または一節を検索し(S2−S4)、知識ベースを参照して、検索された文または一節との関連性を考慮して検索結果をランク付けし(S7)、ランク付けされた検索結果を報告する(S8)。
【選択図】図2
Description
本発明は、ソフトウェアの欠陥の修正やソースコードの特定部分の検出のためのソフトウェアソースコードの検索方法及びシステムに関する。
ソフトウェアの欠陥(以下「バグ」という。)を修正すること、または大規模なソフトウェアプロジェクトにおいて特定部分のソースコードを検出することは開発者に大きな負担である。コードベースが大規模になるにつれ、プロジェクトやソースコード全体の複雑さが増加していく。よって、全体を把握し、これらのバグを修正し、コードの変更により影響されるソースコード内の位置(特にコードの変更や欠陥/誤りの訂正により間接的に影響を受けるソースコードの部分の位置)を検出することは、益々困難になってきている。
ソフトウェアの欠陥を修正したことにより影響される関連部分を検出するためにソースコードを調査する場合、ソフトウェア開発者は特定の部分を検出するための検索ユーティリティ(例えば「grep」のようなユーティリティ)をよく利用する。この種のツールは、検索クエリにより記述される一致したものを返すのみであり、それは、通常、決まった表現またはキーワードリストの形式で与えられる。その結果、返された、一致の可能性のあるもののリストは、調べるべき数百の結果を含む膨大なリストとなる。また、検索が単純であるため、報告された一致結果のほとんどは初期の問題には関係がない。このような問題により、開発者は、ソフトウェアの欠陥に直接的または間接的に関連性を持つ、全ての関連する適合結果を除外できるように、コードベース全体の深い知識を持つことが要求される。
さらに、開発者は、単純な検索ツールを用いている間は、間接的に関連するソフトウェアの部分を検索することはできない。ましてや、ソフトウェア部分が直接的または間接的に関連していない場合、同じソフトウェアの欠陥を有している場合もある。
なお、本願に関連する先行技術文献として以下のものがある。
特開2002−278791号公報
特開2005−228241号公報
より正確な検索結果を得るために構文の解析や情報に関連する他のソースを考慮した、開発者を支援するツールが存在するが、これらのツールによっても、開発者が、検索クエリに間接的に関連する部分または検索クエリに類似する問題を含む部分を検索することは困難である。
本発明は、検索されるソースコードに間接的または直接的に関連する種々の入力ソースを考慮することで上述の問題を解決する。
本発明は、ソフトウェアの異常及び誤り、影響のあるコードの部分、関連する問題についての検索処理を改善することができる方法及びシステムを提供する。
構文の解析、データフロー情報、知識ベース及び関連性によるランク付けを用いて、より正確にソースコード文、異常及び誤りを検出するのに利用されるであろう、ソフトウェアソースコードの検索及びソフトウェア異常及び誤りの検出の方法及びシステムを開示する。追加の情報と同様に検索クエリ及び検索結果により知識ベースを常に更新してもよい。ソフトウェアの誤り、異常及び正しい文(statement)に関する情報での知識ベースを更新すること及び統計モデルを使用することによって、知識ベースを使用して、文(statement)またはソースコードの一節(passage)が誤りであり、または異常または正しいと考えられることを予測することの精度をさらに増加させることができる。知識ベース、データフロー情報及び様々なソフトウェア指標の値を考慮したランク付けアルゴリズムを用いて、検索クエリに対する関連性にしたがい検索結果が順序づけられる。
すなわち、本発明の第1の特徴において、検索クエリを含み、及び/または、(異常、誤り、文及び一節として)検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索する方法を提供する。上記方法は、ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む知識ベースを準備するステップと、ソースコードを含むソースコード情報を準備するステップと、検索クエリを入力するステップと、入力した検索クエリを解析処理し、知識ベースを参照してソースコード情報から入力した検索クエリと一致し、または関連するソースコードの中の文または一節を検索するステップと、知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするステップと、ランク付けステップによって決定されたランク順に検索結果を報告するステップとを含む。
ソースコード情報はデータフローに関する情報を含んでもよい。
ソースコードの中の検索はソースコードの構文に従ってもよい。
上記方法は、入力した検索クエリの情報で知識ベースを更新するステップをさらに含んでもよい。
前記報告するステップは類似を表す情報またはソフトウェア文を示してもよい。
1つ以上の結果がソースコードの中で異常、誤り及び/または正しい文と見なされるか否かに関しての情報で知識ベースを更新するステップをさらに含んでもよい。
前記報告するステップは誤りを引き起こしたソフトウェア文、類似するソフトウェアの誤りであるソフトウェア文または類似するソフトウェア文であるソフトウェア文を示してもよい。
前記ソースコード情報はソースコードにおける変更に関する情報を含んでもよい。
前記ソースコード指標の値または前記知識ベースからの情報に基づいてランク付けが行われてもよい。
上記方法は、検索結果で知識ベースを更新するステップを含んでもよい。
統計モデルを用いて知識ベースを更新してもよい。
本発明の第2の特徴において、コンピュータに上記方法を実行させることを可能とするコンピュータプログラムを提供する。
本発明の第3の特徴において、検索クエリを含み、及び/または、(異常、誤り、文及び一節として)検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索するシステム。上記システムは、ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む知識ベースと、ソースコードを含むソースコード情報と、検索クエリを入力し、前記入力した検索クエリを解析処理して、知識ベースを参照してソースコード情報から、入力した検索クエリと一致するまたは関連するソースコードの中の文または一節を検索する検索ユニットと、知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするランク付けユニットと、ランク付けユニットによって決定されたランク順に検索結果を表示する表示ユニットとを含む。
本発明によれば、ソースコードにおいて、検索クエリに間接的に関連する部分または検索クエリに類似する問題を含む部分を正確に検索し、その検索結果をランク付けして提供する。これにより、開発者は、検索されたソフトウェアの異常及び誤り、影響のあるコードの部分並びに関連する問題の重要性を容易にかつ正確に把握することができる。
以下、添付の図面を参照して本発明の好ましい実施形態を説明する。
第1の実施形態
1.1 構成
図1は本発明の第1の実施形態におけるソフトウェア異常及び依存性検索システムの構成を示す図である。ソフトウェア異常及び依存性検索システム10は検索ユニット100、ランク付けユニット103、及び表示ユニット104を有する。システム10はさらに知識ベース101とソースコード情報102を含むデータベース110を有する。
1.1 構成
図1は本発明の第1の実施形態におけるソフトウェア異常及び依存性検索システムの構成を示す図である。ソフトウェア異常及び依存性検索システム10は検索ユニット100、ランク付けユニット103、及び表示ユニット104を有する。システム10はさらに知識ベース101とソースコード情報102を含むデータベース110を有する。
検索ユニット100は検索クエリを入力、解析して、検索クエリに一致するまたは関連するセンテンスやコードを抽出する。
ソースコード情報102は、ソースコード、構文の解析、データフロー、ソースコードに対する変更に関する情報(但し、これらに限定されるものではない)を格納する。ソースコードは1つ以上のソースファイルにおいて表現される。
ランク付けユニット103はランク付けの順番に関する情報を提供する一方、ランク付けアルゴリズムは検索クエリについて関連性を考慮する。一番上にランク付けされた結果は検索クエリと密接な関係にある結果を表す。つまり、その結果は検索クエリに関連していると考えられる。一番上にランク付けされた結果は、検索クエリ自体によって表現された文であると考えられ、関連性の程度が異なるが、直接的または間接的に検索クエリにおいて記述されているソフトウェアの欠陥またはソフトウェアの誤りの原因となり得る結果がその後に続く。また、この原因の可能性(likelihood)はランク付けの順番に影響を及ぼし得る。
表示ユニット104は、検索の結果を、文のリスト、ソースコードファイルを参照する行番号、テキスト形式での視覚的な表現、ハイパーリンクテキスト、フローチャート、関数グラフまたは他のグラフィカルな手段として報告することができる。
例えばハイパーリンクテキストの場合、表示結果は結果の位置に関する詳細情報を含むことができる。その表示結果は、類似の結果、データフロー情報及び統計値情報の検索を可能にするための付加情報とともに、関数、行、ソースコードファイルを含んでいるが、これらに制限されるものではない。知識ユニット101は、ソフトウェアの誤り、一般的なソフトウェア問題、規定、プログラミングガイドライン、ソフトウェアの専門家の評価結果並びに以前の検索クエリとその結果に関する情報及び選択された結果を報告することによって、開発者またはユーザが直接システムに入力可能な付加情報を含めることができる。
最終的な検索結果はデータまたは書類の形式で報告されてもよい。
本発明の第1の実施形態において、検索ユニット100は入力クエリ(すなわち、検索要求)を解析し、知識ベース101及びソースコード情報102を検索する。次に、これらの検索の結果を収集し、ランク付けユニット103によってランク付けされる。表示ユニット104は、ランク付けユニット103から受け取った結果に従って、ランク付けユニット103によって定義された順で、検索結果を出力する。
1.2 動作
図2はソフトウェア異常またはソフトウェアコードの文若しくは部分を記述する与えられた入力クエリに対する検索結果を示すことができるソフトウェア異常検索システム10のフローチャートを示す図である。
図2はソフトウェア異常またはソフトウェアコードの文若しくは部分を記述する与えられた入力クエリに対する検索結果を示すことができるソフトウェア異常検索システム10のフローチャートを示す図である。
最初に、検索クエリを検索ユニット100に入力する(S1)。検索ユニット100は入力クエリを解析し、正規化し、トークン化する(S2)。正規化及びトークン化は必須ではない。
検索ユニット100は検索クエリトークン(トークン化された検索クエリ)を知識ベース101及びソースコード情報102に関連付ける(S3)。
検索ユニット100によって、知識ベース101及びソースコード情報102においてステップS3により与えられる情報セットに基づいて検索が実行される(S4)。この処理(S4)において、検索ユニット100は2つの処理(S41及びS42)を実行する。
すなわち、知識ベース101を、知識ベース101に関連付けられた検索クエリトークンで検索する(S41)。また、ソースコード情報102を、ソースコード情報102に関連付けられた検索クエリトークンで検索する(S42)。
次に、上記処理S4から検索結果を収集する(S5)。検索ユニット100によって入力クエリに一致する結果が見つけられたか否かを検出する(S6)。結果が見つけられない場合、検索ユニット100は検索処理を終了する。結果が見つけられた場合、表示ユニット104上に表示する前にその結果をランク付けするため、検索ユニット100はランク付けユニット103にその結果を出力する。
ランク付けステップS7において、3つのステップS71,S72及びS73を実行する。
ランク付けのために知識ベース101及びソースコード情報102から付加情報を集める(S71及びS72)。次に、ステップS71及びS72からの付加情報及びソースコードの指標の値を考慮して、ランク付けアルゴリズムをステップS5から出力される結果に適用する。
最後に、その結果をステップS73で定義されたランク順で表示ユニット104上に表示する。
本実施形態のシステムによれば、ソースコードにおいて、検索クエリに間接的に関連する部分または検索クエリと類似する問題を含む部分を正確に検索し、その検索結果をランク付けして提供する。これにより、開発者は、検索されたソフトウェアの異常及び誤り、影響のあるコードの部分並びに関連する問題の重要性を容易にかつ正確に把握することができる。
以下、各ステップの処理を詳述する。
1.2.1 検索クエリ入力処理(S1)
検索クエリ入力処理ステップ(S1)はシステム10によるさらなる処理のため入力(検索クエリ)を準備し、配置する。入力処理自体は以下で概説する様々なステップを含む。検索クエリ入力処理ステップは、特に以下のステップを含む。
システムへの入力を準備するステップ(例えば、コマンドライン、グラフィカルユーザインタフェース、…);
入力クエリ(検索クエリ)を解析するステップ;
入力をトークン化するステップ;
各トークンを1つ以上のデータベースに割当てるステップ。
検索クエリ入力処理ステップ(S1)はシステム10によるさらなる処理のため入力(検索クエリ)を準備し、配置する。入力処理自体は以下で概説する様々なステップを含む。検索クエリ入力処理ステップは、特に以下のステップを含む。
システムへの入力を準備するステップ(例えば、コマンドライン、グラフィカルユーザインタフェース、…);
入力クエリ(検索クエリ)を解析するステップ;
入力をトークン化するステップ;
各トークンを1つ以上のデータベースに割当てるステップ。
従来の”grep”コマンドまたは同様のユーティリティ(例えば、単純なストリング検索または検索に基づいた正規表現(regular expression))とは違って、本発明の検索クエリはより記述的にすることができる。例えば、有効な検索クエリは以下のようなものであってもよい。
"file=foo.c line=122 symbol=x symbol=y functioncall=memcpy"
"file=foo.c line=122 symbol=x symbol=y functioncall=memcpy"
この検索クエリの例では、その情報は、関数呼出し”memcpy”と記号”x”及び”y”を含むソースファイル”foo.c”の122行目のバグを記述する。
上記例に示されるように、テキスト形式の検索クエリは用語トークン(例えば、”x”)の文字を記述する属性トークン(例えば、”symbol”)を含んでもよい。そのような属性トークンは検索をサポートし、より良好な対象の検索を可能にする。また、検索領域を、ファイル、関数、クラス等に制限するために近接検索オプションが提供されてもよい。
また、実装に応じて、以下の検索範囲を広くするために検索クエリは標準的な表現(例えば、ワイルドカード”*”及び”?”)を含むことができる。
"file= foo.c line=122 symbol=x symbol=y functioncall=mem*"
"file= foo.c line=122 symbol=x symbol=y functioncall=mem*"
比較すると、最初の例が明確に”memcpy”を提示する一方、ワイルドカード”*”のある上記例は”mem”から始まるどんな関数呼出しも含む。
検索クエリ自体はテキスト入力のみに制限されず以下のような、様々な方法でシステム10に検索クエリを提供できる。
コマンドラインストリング(例えば、”searsh -file foo.c -line 122 -symbol x”);
グラフィカルユーザインタフェースコンポーネントを通して(ウェブ検索インタフェースと同様);
インタフェースのようなソースコード/テキストエディタを通して”視覚的に”;または、
任意の他の適当な手段。
コマンドラインストリング(例えば、”searsh -file foo.c -line 122 -symbol x”);
グラフィカルユーザインタフェースコンポーネントを通して(ウェブ検索インタフェースと同様);
インタフェースのようなソースコード/テキストエディタを通して”視覚的に”;または、
任意の他の適当な手段。
単純な”視覚的な”クエリ入力の一例を図3に示す。
1.2.2 入力クエリの解析及びトークン化(ステップS2)
システム10が与えられた情報で動作できるように、システム10への入力は解析され処理される必要がある。検索クエリを解析する処理は、1つのクエリコンポーネントを認識し、システム10における他のコンポーネントによって使用される内部的に使用されるデータ構造を作成する。
システム10が与えられた情報で動作できるように、システム10への入力は解析され処理される必要がある。検索クエリを解析する処理は、1つのクエリコンポーネントを認識し、システム10における他のコンポーネントによって使用される内部的に使用されるデータ構造を作成する。
検索クエリとしての入力ストリングの場合、ストリングは、データを処理するより前に個々のトークン(例えば、属性トークン、検索用語及び制御トークン)に分けられる必要がある。
データの入力ストリング標準化の形式に依存して、情報が最も単純に、かつ最も効率的な構造になるようにデータが正規化される必要がある。これにより、複雑さを低減し、最も効率的な検索クエリを作成する。
1.2.3 データベースへのトークンの割当て(ステップS3)
入力を解析した後、システム10は各クエリコンポーネントを1つ以上のデータベースまたは知識ベースに割当てる。割当て処理をできるだけ効率的でかつ正確にするために、各データベースを検索に使用されるオブジェクトを記述する属性に関連付ける。例えば、データベースの属性リストは、図4に示されるようになる。
入力を解析した後、システム10は各クエリコンポーネントを1つ以上のデータベースまたは知識ベースに割当てる。割当て処理をできるだけ効率的でかつ正確にするために、各データベースを検索に使用されるオブジェクトを記述する属性に関連付ける。例えば、データベースの属性リストは、図4に示されるようになる。
図4に示された属性リストは、関連データベースがファイル(例えば、ファイル名)と関数名に関する情報で検索できること示す。
以下の入力クエリの場合、図4に示す属性リストに示された属性に関連付けられたデータベースが用語”foo.c”及び”memcpy”により検索される。
"file=foo.c line=122 symbol=x smbol=y functioncall= memcpy"
"file=foo.c line=122 symbol=x smbol=y functioncall= memcpy"
なお、上記説明は検索クエリトークンをシステム10によって使用されるデータベースに割当てるための単純な方法を記述しているだけである。
1.2.4 データベース検索(ステップS4)
どのようにしてデータベースを検索するかについては多数の可能な方法が存在し、それらは使用されるデータベースシステムに大きく依存する。一候補として、1970年代にIBMによって開発された、リレーショナル・データベース・マネージメント・システムからデータを作成して、変更して、検索するのに使用される周知の言語であるSQL(Structured Query Language)がある。
どのようにしてデータベースを検索するかについては多数の可能な方法が存在し、それらは使用されるデータベースシステムに大きく依存する。一候補として、1970年代にIBMによって開発された、リレーショナル・データベース・マネージメント・システムからデータを作成して、変更して、検索するのに使用される周知の言語であるSQL(Structured Query Language)がある。
標準的な検索は検索クエリで定義されるように特定の用語の存在すべてを抽出するが、本発明は検索用語、追加の特性及び検索クエリで設定される基準に一致するソースコードの特定の要素を抽出する。関連情報(例えば、データフロー)の系統的な検査によって、抽出された結果は、検索クエリと直接的に一致しないが、関連する要素を含むことができる。
例えば、特定のファイルの中で変数”X”の存在を検索すると、その結果として検索用語(例えば、”symbol=X file=foo.c line=122”)に一致するすべての”X”が列挙される。
図5はソースコードの抜粋を示す。図5において、同じファイルに現れるが、検索用語で定義された”X”と関係のない変数”X”は、一覧表に表示されない。代わりに、変数”Y”が一致した”X”に依存するなら、”Y”の存在は報告される。図5において、一致した変数”X”を122,123及び125行目に見つけることができる。151行目の変数”X”は検索クエリで記述された”X”と無関係であることをはっきりと示すので、151行目の変数”X”は報告されない。しかしながら、123,124及び125行目の変数”Y”の存在は、”X”との関係によって報告される。これに対して、標準的な検索ツールは、122,123,125及び151行目に現れた”X”の存在すべてを報告する。
ソースコードの中に一致するものが見つからない場合、検索は終了したものとみなされる。
本発明において、システム10は少なくとも2つのデータベース、すなわち知識ベース101及びソースコード情報102を使用する。
検索範囲を狭くすること(例えば、ファイル”foo.c”及び”bar.c”だけ)、
依存関係を除くこと(例えば、”Y”と無関係のときの記号”X”)、
検索範囲を1つ以上のデータベースに制限すること、
データベースから特定の情報を抽出すること等により、検索を制御するための1セットの制御が適用されてもよい。
依存関係を除くこと(例えば、”Y”と無関係のときの記号”X”)、
検索範囲を1つ以上のデータベースに制限すること、
データベースから特定の情報を抽出すること等により、検索を制御するための1セットの制御が適用されてもよい。
<知識ベース>
知識ベース101は、ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む蓄積された情報を含むデータベースである。情報自体は開発者とバグ追跡システムによって広く集められる。
知識ベース101は、ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む蓄積された情報を含むデータベースである。情報自体は開発者とバグ追跡システムによって広く集められる。
検索処理中に知識ベース101から抽出した項目は、検索処理において後で行われる結果のランク付けのための有用な入力を提供する。
知識ベース101に格納した情報は、
バグレポートと、
処理指標と、
公知の問題のリスト等を含む。
バグレポートと、
処理指標と、
公知の問題のリスト等を含む。
バグレポートは、バグに関する情報以外に、他のソースファイルの中で影響を受けるソースコードの一節のリストと同様に、ソフトウェアの欠陥を解消するための費用及び時間、欠陥がどれくらい深刻であるかに関する数値等の付加データを含むことができる。
ソフトウェアを生成するための処理の制御を支援するために使用される処理指標は、以下の指標データを含む。
テスト中見つけられた欠陥の数;
要求に対する変更の数;
1週間あたりの費やされたプログラミング回数(時間);
1週間あたりの費やされたデバッギング回数(時間);等。
テスト中見つけられた欠陥の数;
要求に対する変更の数;
1週間あたりの費やされたプログラミング回数(時間);
1週間あたりの費やされたデバッギング回数(時間);等。
さらにソフトウェアの欠陥の検索をサポートするために、公知の問題及び会社/開発チームに関連する問題のリストを知識ベース101に含めることもできる。
<ソースコード情報>
ソースコード情報102は、
ソースコードと、
ソースコードに関する付加情報とを含む1つ以上のコンポーネントで表すことができる。
ソースコード情報102は、
ソースコードと、
ソースコードに関する付加情報とを含む1つ以上のコンポーネントで表すことができる。
ソースコード・コンポーネントは通常、言語仕様(例えば、C、C++、Pascal)に従ったテキストのコード表示を含む。ソースコードファイル自体は単独のファイルとして、記憶媒体上、またはソースコードになされた変更履歴に関する記録とともにバージョニング・システムの中に格納される。バージョニング・システムを使ってソースファイルの変更履歴記録が格納された場合、その記録された変更履歴は検索システム10によって使用可能なさらなる情報を提供するであろう。
さらに、ソースコード及びソースファイルに関するまとめられた情報は、システム10に提供される。そのような情報は、
データフローと、
ソフトウェア指標と、
ソースコード部分の複製と、
ソースコードファイルの中の関数リストと、
ソースコードファイルの中のオブジェクトのリスト等を含むであろう。
データフローと、
ソフトウェア指標と、
ソースコード部分の複製と、
ソースコードファイルの中の関数リストと、
ソースコードファイルの中のオブジェクトのリスト等を含むであろう。
データフロー(プログラムまたはシステムの中のデータの流れ)の情報はシステム10に、変数間の依存性と、どのようにデータがプログラムで使用されるかについての見識を提供する。本発明によると、この情報は、間接的に検索クエリに関連するか、関連性のある結果(ソースコード部分)を特定するのに、使用される。その関連性は、検索クエリで提供された変数に関するデータフローに従うことにより、決定される。変数Xを他の変数Yに割当てる場合、YはXに依存し、それ故、関連性が与えられる。また、データフロー情報は1つ以上の変数の近接性を決定するのに使用される。変数Xは、変数XとZの関係より近い近接性を共有している変数Yに割当てられる一方、XをYに割当て、YをZに割当てる。この近接性情報(近接性スコア)は、その後ランク付けステップの中で使用される。
図6A及び図6Bはデータフローの単純な例を示す。これらの図面は、与えられた関数においてデータがどのように”流れている”かを視覚的に示したデータフローの単純な例を示す。また、この例では、データフローは、どのようにデータが操作されるか(例えば、使用する、他の記号に割当てる、…)に関する情報を有している。それは、さらにX−Y、Y−Z及びX−Z間の近接性を示す一方、X−Z組が最も大きい距離を有していることを示している。
ソフトウェア指標は、統計的にプログラムの構造または内容について記述し、一般的にソフトウェア(品質)テストに使用される。例えば、ソフトウェア指標は、コードの1000行あたりの(推定)バグ/欠陥の数、関数中の独立した経路の最小の数のような複雑さのレベル等について記述する。
必要なデータ(例えば、データフロー、指標、…)を出力するソースコード・スキャン・ソフトウェアを用いて、”ソースコード情報”の範囲内の情報を蓄積することができる。
1.2.5 情報収集(ステップS5)
データベースが検索されると、すべてのデータベースから結果が抽出され蓄積されて、互いに割当てられる。各データベースから互いに抽出された結果を関連づけるために使用される属性は、ファイル名、関数名、記号名、関数呼出し及び特定の命令か制御文であり得る。多くの場合、ファイル名及び行番号情報が、抽出された結果を関連づけるために十分であるべきである。
データベースが検索されると、すべてのデータベースから結果が抽出され蓄積されて、互いに割当てられる。各データベースから互いに抽出された結果を関連づけるために使用される属性は、ファイル名、関数名、記号名、関数呼出し及び特定の命令か制御文であり得る。多くの場合、ファイル名及び行番号情報が、抽出された結果を関連づけるために十分であるべきである。
ソースコードデータからの結果を他のデータベース(知識ベース、まとめられたソースコード情報、…)からの1つ以上のエントリに関連づけることができる。
図7は、他のデータベースから抽出されたエントリに関連する結果のセットからの検索の一致性を示す。
結果の最終リストまたは結果のセットが空である場合(ステップS6で「No」)、適当な一致が見つけられず、検索を終了したと見なす。そうでなければ、結果のセットはユーザへ表示する前にランク付けされる。
1.2.6 ランク付け(ステップS7)
このシステムの実用性は、大部分はデータベース(特に、知識ベース及びまとめられたソースコード情報)さらに結果のセットのランク付けに依存する。結果のセットの中に何百または何千ものソースコードの位置があるかもしれないが、ランク付けステップは、最初の入力クエリに関連してどの一致が「ベスト」と考えられるかを決定する。
このシステムの実用性は、大部分はデータベース(特に、知識ベース及びまとめられたソースコード情報)さらに結果のセットのランク付けに依存する。結果のセットの中に何百または何千ものソースコードの位置があるかもしれないが、ランク付けステップは、最初の入力クエリに関連してどの一致が「ベスト」と考えられるかを決定する。
ランク付けユニット103は、結果のセットにおける抽出された要素毎にランク付けの値を算出する。このランク付けの値を算出するために、ランク付けユニット103は種々のデータベースから集めた情報を使用する。ソフトウェアの欠陥を検索する場合、ランク付けアルゴリズムは、ソースコードのより複雑なまたはより誤りのありそうな領域を示唆する値及び指標を使用し、ランク付けの値を増加させる。
ランク付けに影響を及ぼす値は、以下のものを含む。
複雑さ等の指標(複雑さが増すほど、通常ソースコードの一部をテストすることをより難しくするので、ソフトウェアの欠陥の可能性は、その複雑さに従って増加する。);
同様の欠陥がどれくらい重大であるかまたは費用がかかるかについてのバグレポートからの情報;
データフロー情報から収集した近接性スコア。
複雑さ等の指標(複雑さが増すほど、通常ソースコードの一部をテストすることをより難しくするので、ソフトウェアの欠陥の可能性は、その複雑さに従って増加する。);
同様の欠陥がどれくらい重大であるかまたは費用がかかるかについてのバグレポートからの情報;
データフロー情報から収集した近接性スコア。
収集した情報からランク付けの値を決定するため、あらかじめ計算されたテーブルが最終的なランク付けの値を調べるのに使用されるか、またはランキングがカスタマイズされた式を用いて計算される。さらに、特定のソフトウェアプロジェクト、開発者または企業方針等に対するそれらの重要性を表ために、ランク付けの値を生成するコンポーネントにそれぞれ異なる重み付けがなされてもよい。
単純な例として、欠陥が、図8Aに示されるように記号”Y”及び関数呼出し”Copy”に関連して認識されると仮定する。欠陥部分及び欠陥の真の理由であり得る関連する文を見つけようと試みるために、システムに以下の検索クエリを入力することができる。
"symbol=Y + functioncall =Copy"
"symbol=Y + functioncall =Copy"
ランク付けされた、検索クエリからの結果出力は、図8Bに示されるようになる。
図8Bに見られるように、最上位にランク付けされた結果は、”Copy”と”Y”が一緒に現れる文である。2番目にランク付けされたものは、用語”Y”も”Copy”も含まれない”KnownProblemFunction(X)”である。それは符号”Y”が現れる3番目のエントリよりもさらに高くランク付けされている。図8Aで示されるようなソースコードを参照すれば、YがXに依存することを示している(3番目にランク付けされた文においても見られるように)。そして、知識ベースの検索中、システムは、” KnownProblemFunction()”が公知の問題として、おそらく重大な問題としてリストアップされたことを検出した。
これらの情報、”Y”と”X”との関係、それらの近接性及び公知の問題としての”KnownProblemFunction()”の特性は、関連する”Y”図8Bにおいて3番目にランク付けされた文の適合性より高いランク付けの値をもたらす。
従って、この単純な例で適用された可能なランク付けアルゴリズムを以下のように定義できる。
1)直接的一致は、常に最上位のランク付けの値を有する。
2)部分的一致は、ランク付けの値を所定の比率(%)で減少させる。
3)検索用語記号と別の記号との関係はそれらの近接性で表現される(遠ければ遠いほどランク付けの値は減少する)。
4)公知の問題(または課題)が結果のセットからの現在の要素に関連している場合、その問題の重大さをランク付けの値に乗算する。
5)ランク付けの値に、正規化された、関連するソースコードファイルの開発コストが乗算される。
1)直接的一致は、常に最上位のランク付けの値を有する。
2)部分的一致は、ランク付けの値を所定の比率(%)で減少させる。
3)検索用語記号と別の記号との関係はそれらの近接性で表現される(遠ければ遠いほどランク付けの値は減少する)。
4)公知の問題(または課題)が結果のセットからの現在の要素に関連している場合、その問題の重大さをランク付けの値に乗算する。
5)ランク付けの値に、正規化された、関連するソースコードファイルの開発コストが乗算される。
1.2.7 表示(ステップS8)
表示は事前にランク付けされた結果がユーザに表示される検索方法の最終ステップである。表示された結果の順番は、ユーザの選択によるまたは初期の検索クエリで述べたように、ランク付けの値の昇順または降順であり得る。
表示は事前にランク付けされた結果がユーザに表示される検索方法の最終ステップである。表示された結果の順番は、ユーザの選択によるまたは初期の検索クエリで述べたように、ランク付けの値の昇順または降順であり得る。
前のステップから表示ステップに、結果を表示するためのすべての必要な情報が転送される。また、より詳細な出力を可能にするために、表示ステップが利用可能なデータベースを検索することも可能である。
結果自体は様々な方法でユーザに表示されることができる。それらの中には
結果のテキスト形式のリスト、
テーブル形式のもの、
ハイパーリンク、等がある。
結果のテキスト形式のリスト、
テーブル形式のもの、
ハイパーリンク、等がある。
図9にハイパーリンクを用いた結果表示例を示す。
第2の実施形態
2.1 構成
図10は本発明の第2の実施形態におけるソフトウェア異常及び依存性検索システムの構成を示す図である。第2の実施形態のシステム10bは第1の実施形態のシステム10と同じ構成を有する。
2.1 構成
図10は本発明の第2の実施形態におけるソフトウェア異常及び依存性検索システムの構成を示す図である。第2の実施形態のシステム10bは第1の実施形態のシステム10と同じ構成を有する。
本発明の第2の実施形態によれば、知識ベース101は統計モデル(例えば、マルコフ連鎖またはベイズ分類)を用いて収集した統計情報を含む。統計的方法は、ソースコード内のデータフローをモデル化するのに使用することができる。統計モデルを用いて、データフローの異常を効果的にまたは正確に検出することができる。例えば、マルコフ連鎖の場合、変数宣言の後の変数定義の可能性は、変数におけるいかなる他の動作よりもはるかに高い。同様に、異常をマルコフ連鎖で考慮することができる(例えば、宣言されたが定義されていない変数の使用)。そして、できるだけ早く異常を検出するために、公知の異常なソフトウェアソースコード及び公知の正しいソフトウェアソースコードにおいて学習を実行され得る。
第2の実施形態によれば、検索ユニット100は検索要求を解析して、知識ベース101及びソースコード情報102を検索する。次に、これらの検索の結果は収集され、ランク付けユニット103によってランク付けされる。表示ユニット104は、ランク付けユニット103によって定義された順番で、ランク付けユニット103から受け取った結果に基づいて検索結果を出力する。
2.2 動作
図11は、ソフトウェア異常またはソフトウェアコードの文若しくは部分を記述する、与えられた入力クエリに対する検索結果を示す、本発明の第2の実施形態のソフトウェア異常検索システムのフローチャートを示す図である。
図11は、ソフトウェア異常またはソフトウェアコードの文若しくは部分を記述する、与えられた入力クエリに対する検索結果を示す、本発明の第2の実施形態のソフトウェア異常検索システムのフローチャートを示す図である。
ステップS1からS8までの処理は、図2で示される第1の実施形態のものと同じである。
ランク付けとともに結果を表示した(S8)後に、検索を終了するか否かを検出する(S9)。
検索を終了しない場合、表示された結果のセットの中に、ソフトウェア異常、ソフトウェア誤りまたは正しい文があるか否かを検出する(S10)。すなわち、ソースコードにおいて1つ以上の結果が異常、誤り及び/または正当であるか否かを決定する。結果のセットの中に上述の項目のいずれもない場合、次のセットを表示することができる(S15)。他の場合、検索動作はステップS11に継続し得る。
ステップS11において、表示された検索結果のセットの中の1つ以上の結果を、異常、誤りまたは正しい文としてマークを付すことができる。
次に、知識ベース101を、1つ以上のマークが付された結果に関連する情報で更新する(S12)。例えば、更新処理は統計モデル(例えば、マルコフモデルまたはベイズ分類等)を用いることができる。また、知識ベース101を入力検索クエリで更新してもよい。
知識ベース101の更新の後、同様のソースコード部分または文の検索を開始するか否かを検出する(S13)。開始しない場合は、検索を終了し、他の場合は、ステップS14に継続する。
ステップS14において、ステップS11でマークが付されたように、同様のソースコード部分または文を検索するために初期の検索クエリを更新する。
ステップS15から移動したステップS15において、現在表示された結果のセットの中にソフトウェアの異常、誤りまたは文があった後、複数の結果のセットが利用可能か否かを決定する。得られない場合は、検索を終了し、他の場合はS16に継続する。
ステップS16において、次のセットを選択して、その検索を開始する。例えば、表示がカウンタ値以上の結果から表示を始めることを示すクエリにカウンタを加えることによって、次のセットを選択することができる。
図12は、表示結果の一例を示す図である。この表示結果は第1及び第2の実施形態に適用することができる。表示ユニット104は結果を表示する。例えば、表示された結果701は検索クエリの2つの一致を表示する一方、ランク付けインデックスまたは一致性または関連性の表示としてランク順表示702が与えられる。例に示されるように、付加情報にはその中に、一致が検出されたファイル名(例えば、”File:...”)、一致の場所を位置付けるための行番号(例えば、”Line:...”)、一致する文自体(例えば、”Statement:...”)及び一致に関連する報告メッセージ(例えば、”Report:...”)を含めることができる。さらに、結果は、ユーザが結果にマークを付けることができ、フィードバック情報を検索システム10bに提供することを可能にする任意のセレクタ703,704及び705を有することができる。図12に示されたこの例において、ソフトウェアの誤り703または正しい文705として、結果にマークを付けることができる。また、同様の文、異常または誤りの検索を可能にするまたは初期の検索クエリの絞り込みを可能にするためのコマンド704を結果に組み込むこともできる。
本発明は、ソフトウェアの欠陥の修正やソースコードの特定部分の検出のためのソフトウェアソースコードの検索システムまたは検索方法に有用である。
10、10b ソフトウェア異常及び依存性検索システム
100 検索ユニット
101 知識ベース
102 ソースコード情報
103 ランク付けユニット
104 表示ユニット
100 検索ユニット
101 知識ベース
102 ソースコード情報
103 ランク付けユニット
104 表示ユニット
Claims (17)
- 検索クエリを含み及び/または検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索する方法であって、
ソフトウェアプロジェクト、バグレポート及び処理に関連する指標(metric)に関する情報を含む知識ベースを準備するステップと、
ソースコードを含むソースコード情報を準備するステップと、
検索クエリを入力するステップと、
入力した検索クエリを解析処理し、知識ベースを参照して、ソースコード情報から入力した検索クエリと一致しまたは関連するソースコードの中の文または一節を検索するステップと、
知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするステップと、
前記ランク付けステップによって決定されたランク順に検索結果を報告するステップと
を含むことを特徴とするソフトウェアソースコードを検索する方法。 - ソースコード情報はデータフローに関する情報を含むことを特徴とする請求項1に記載の方法。
- ソースコードの中の検索はソースコードの構文に従うことを特徴とする請求項1に記載の方法。
- 入力した検索クエリの情報で知識ベースを更新するステップをさらに含むことを特徴とする請求項1に記載の方法。
- 前記報告するステップは類似を表す情報を示すことを特徴とする請求項1に記載の方法。
- 前記報告するステップはソフトウェア文を示すことを特徴とする請求項1に記載の方法。
- 1つ以上の結果がソースコードの中で異常、誤り及び/または正しい文と見なされるか否かに関しての情報で知識ベースを更新するステップをさらに含むことを特徴とする請求項1に記載の方法。
- 前記報告するステップは誤りを引き起こしたソフトウェア文を示すことを特徴とする請求項1に記載の方法。
- 前記報告するステップは類似するソフトウェアの誤りであるソフトウェア文を示すことを特徴とする請求項1に記載の方法。
- 前記報告するステップは類似するソフトウェア文であるソフトウェア文を示すことを特徴とする請求項1に記載の方法。
- 前記ソースコード情報はソースコードにおける変更に関する情報を含むことを特徴とする請求項1に記載の方法。
- 前記ソースコード指標の値に基づいてランク付けが行われることを特徴とする請求項1に記載の方法。
- 前記知識ベースからの情報に基づいてランク付けが行われることを特徴とする請求項1に記載の方法。
- 検索結果で知識ベースを更新するステップをさらに含むことを特徴とする請求項1に記載の方法。
- 統計モデルを用いて知識ベースを更新するステップをさらに含むことを特徴とする請求項1に記載の方法。
- コンピュータに請求項1乃至15のいずれか1つに記載の方法を実行させることを可能とするコンピュータプログラム。
- 検索クエリを含み及び/または検索クエリと関連するソースコードの部分をソフトウェアソースコードから検索するシステムであって、
ソフトウェアプロジェクト、バグレポート及び処理に関連する指標に関する情報を含む知識ベースと、
ソースコードを含むソースコード情報と、
検索クエリを入力し、前記入力した検索クエリを解析処理して、知識ベースを参照してソースコード情報から、入力した検索クエリと一致するまたは関連するソースコードの中の文または一節を検索する検索ユニットと、
知識ベースを参照して、検索された文または一節との関連性を考慮して、検索結果をランク付けするランク付けユニットと、
前記ランク付けユニットによって決定されたランク順に検索結果を表示する表示ユニットと
を備えたことを特徴とするソフトウェアソースコードを検索するシステム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006301647A JP2008117280A (ja) | 2006-11-07 | 2006-11-07 | ソフトウェアソースコードの検索方法及びシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006301647A JP2008117280A (ja) | 2006-11-07 | 2006-11-07 | ソフトウェアソースコードの検索方法及びシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008117280A true JP2008117280A (ja) | 2008-05-22 |
Family
ID=39503126
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006301647A Pending JP2008117280A (ja) | 2006-11-07 | 2006-11-07 | ソフトウェアソースコードの検索方法及びシステム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008117280A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013008304A (ja) * | 2011-06-27 | 2013-01-10 | Nec System Technologies Ltd | プログラム分析装置、プログラム分析方法、及びプログラム |
JP2016189128A (ja) * | 2015-03-30 | 2016-11-04 | ファナック株式会社 | プログラム中のあいまい検索機能を備えた数値制御装置 |
CN109669942A (zh) * | 2018-11-29 | 2019-04-23 | 杭州仟金顶信息科技有限公司 | 一种java代码结构化检索方法 |
-
2006
- 2006-11-07 JP JP2006301647A patent/JP2008117280A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013008304A (ja) * | 2011-06-27 | 2013-01-10 | Nec System Technologies Ltd | プログラム分析装置、プログラム分析方法、及びプログラム |
JP2016189128A (ja) * | 2015-03-30 | 2016-11-04 | ファナック株式会社 | プログラム中のあいまい検索機能を備えた数値制御装置 |
CN109669942A (zh) * | 2018-11-29 | 2019-04-23 | 杭州仟金顶信息科技有限公司 | 一种java代码结构化检索方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10891218B2 (en) | Automatic pre-detection of potential coding issues and recommendation for resolution actions | |
US9280908B2 (en) | Results of question and answer systems | |
Shokripour et al. | Why so complicated? simple term filtering and weighting for location-based bug report assignment recommendation | |
US9063975B2 (en) | Results of question and answer systems | |
US8752001B2 (en) | System and method for developing a rule-based named entity extraction | |
US8566789B2 (en) | Semantic-based query techniques for source code | |
Canfora et al. | Impact analysis by mining software and change request repositories | |
Leopold et al. | Detection of naming convention violations in process models for different languages | |
US9703536B2 (en) | Debugging code using a question and answer system based on documentation and code change records | |
US7562344B1 (en) | Method, system, and computer program product for providing real-time developer feedback in an integrated development environment | |
US20080162456A1 (en) | Structure extraction from unstructured documents | |
US20080162455A1 (en) | Determination of document similarity | |
US20080313616A1 (en) | Methods and systems for testing tool with comparative testing | |
CA2701046A1 (en) | Analysis of a system for matching data records | |
TW201421395A (zh) | 用以遞迴檢閱網際網路及其他來源以識別、收集、管理、判定及鑑定商業身分與相關資料之系統及方法 | |
US6374261B1 (en) | Expert system knowledge-deficiency reduction through automated database updates from semi-structured natural language documents | |
US7627551B2 (en) | Retrieving case-based reasoning information from archive records | |
Cleve et al. | Data reverse engineering using system dependency graphs | |
JP2017041171A (ja) | テストシナリオ生成支援装置およびテストシナリオ生成支援方法 | |
JP2007011604A (ja) | 不具合診断システム及びプログラム | |
CN111183421A (zh) | 服务提供系统、业务分析支援系统、方法以及程序 | |
Singh et al. | Exploring automatic search in digital libraries: A caution guide for systematic reviewers | |
CN111143370B (zh) | 用于分析多个数据表之间关系的方法、设备和计算机可读存储介质 | |
JP2005301859A (ja) | コード検索プログラム及びコード検索装置 | |
Dakrory et al. | Automated ETL testing on the data quality of a data warehouse |