(57)【要約】【課題】  依存関係探索実施の際、その探索範囲を限定し、保守作業者が読解する総量を削減する。【解決手段】  本発明は、構成要素をノード、依存関係をエッジとする有向グラフで表現された探索対象のソフトウェアから依存関係を抽出して依存関係記憶手段に格納し、ソフトウェアの構成要素に対して、前記エッジが前記ノードに対して向かう方向に基づいて点数を付与し、点数記憶手段に格納し、点数に対する閾値を設定し、該点数が該閾値以上の構成要素のみを探索範囲として限定し、探索範囲リストに出力する。【選択図】  図５
2013218637.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの対象機能の実装箇所（以下、Feature Location）特定実行時に、ソフトウェアの設計者が計算機に処理させようとする機能であるFeatureの有無を確認するために探索範囲を限定するための探索範囲限定装置であって、
探索対象のソフトウェアから依存関係を抽出して依存関係記憶手段に格納する依存関係特定手段と、
前記ソフトウェアの構成要素に対して、前記エッジが前記ノードに対して向かう方向に基づいて点数を付与し、点数記憶手段に格納する点数付与手段と、
前記点数に対する閾値を設定し、該点数が該閾値以上の構成要素のみを探索範囲として限定し、探索範囲リストに出力する範囲決定手段と、
を有することを特徴とする探索範囲限定装置。
【請求項２】
前記点数付与手段は、
あるノードを正の向きに通るエッジの本数をノードの出次数とし、あるノードを負の向きに通るエッジの本数をノードの入次数とし、入次数が少なく、出次数が多い構成要素を、Featureを実現する実装が含まれている確率が高いものとして点数を付与する手段を含む
請求項１記載の探索範囲限定装置。
【請求項３】
前記範囲決定手段は、
限定した前記探索範囲内に目的のFeatureが見つからなかった場合に、前記閾値を変更して探索範囲を広げてFeatureを探索する手段を含む
請求項１記載の探索範囲限定装置。
【請求項４】
前記範囲決定手段で決定した探索範囲をグラフ形式で表示する表示手段を更に有する
請求項１記載の探索範囲限定装置。
【請求項５】
ソフトウェアの対象機能の実装箇所（以下、Feature Location）特定実行時に、ソフトウェアの設計者が計算機に処理させようとする機能であるFeatureの有無を確認するために探索範囲を限定するための探索範囲限定方法であって、
依存関係特定手段が、構成要素をノード、依存関係をエッジとする有向グラフで表現された探索対象のソフトウェアから依存関係を抽出して依存関係記憶手段に格納する依存関係特定ステップと、
点数付与手段が、前記ソフトウェアの構成要素に対して、前記エッジが前記ノードに対して向かう方向に基づいて点数を付与し、点数記憶手段に格納する点数付与ステップと、
範囲決定手段が、前記点数に対する閾値を設定し、該点数が該閾値以上の構成要素のみを探索範囲として限定し、探索範囲リストに出力する範囲決定ステップと、
を行うことを特徴とする探索範囲限定方法。
【請求項６】
前記点数付与ステップにおいて、
あるノードを正の向きに通るエッジの本数をノードの出次数とし、あるノードを負の向きに通るエッジの本数をノードの入次数とし、入次数が少なく、出次数が多い構成要素を、Featureを実現する実装が含まれている確率が高いものとして点数を付与する
請求項５記載の探索範囲限定方法。
【請求項７】
前記範囲決定ステップにおいて、
限定した前記探索範囲内に目的のFeatureが見つからなかった場合に、前記閾値を変更して探索範囲を広げてFeatureを探索する
請求項５記載の探索範囲限定方法。
【請求項８】
コンピュータを、
請求項１乃至４のいずれか１項に記載の探索範囲限定装置の各手段として機能させるための探索範囲限定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、探索範囲限定装置及び方法及びプログラムに係り、特に、ソフトウェアの対象機能の実装箇所特定（Feature Location）技術における静的Feature Locationのための探索範囲限定装置及び方法及びプログラムに関する。
【０００２】
本発明は、Feature Location技術の一分野である静的Feature Location技術群を技術分野とする。この技術はソフトウェアの変更や機能拡充等の際に用いられることがある。
【０００３】
以下に、本発明の技術分野であるFeature Location技術の詳細を説明する。
【０００４】
ソフトウェア(以下、「SW」と記す)はこれが使用される環境の変化等に応じて変更や機能拡充が必要になることがある。
【０００５】
SWを変更、機能拡充するためには保守作業者がドキュメントやソースコード等の資材を基に、そのプログラムの構造や処理内容を理解する必要がある。このような理解のための行為をリバースエンジニアリング(以下、［Rev.Eng］と記す)と呼ぶ。
【０００６】
SWには少なくとも1つ以上、そのSWを設計した者が計算機に処理させようとする機能(以下、「Feature」と記す)をもっており、それらはソースコードに記述されている。
【０００７】
従ってRev.Engによる既存プログラム理解の際には、対象プログラムが持っているFeatureに対応するコード片を特定する作業が必要になることがある。
【０００８】
・「変更」、「機能拡充」とFeatureの関係は以下の通り。
【０００９】
−−「変更」とは実装されている既存のFeatureを修正することを意味する。
【００１０】
−−「機能拡充」とはSWに実装されていないFeatureを新規に追加することを指す。
【００１１】
・この際、既存のFeatureと関連のあるFeatureを追加する場合と、既存のFeatureとは関連がない全く新しいFeatureを新規追加する場合が存在する。
【００１２】
・既存のFeatureと関連するFeatureを追加する場合には、既存Featureへの影響を調べ、必要に応じてそれを変更する必要がある。
【００１３】
・変更の際は変更対象となるFeatureに対応するコード片を、機能拡充の際は新規に実装するFeatureに関連するFeatureに対応するコード片を特定する必要がある。
【００１４】
そのための技術としてFeature Location(以下、「FL」と記す)技術群が存在する。
【００１５】
図１に示すようにFLには大別して動的FL技術と静的FL技術が存在する。
【００１６】
・動的FL技術は、これを使用する過程でプログラムを実行し、それによって習得した実行履歴等を分析してFeatureの場所を特定するものである。
【００１７】
・静的FL技術は、プログラムを実行すること無しに、ソースコードの構造や振舞いを分析することによりFeatureの場所を特定するものである。
【００１８】
静的FL技術を行い、目的のFeatureがプログラムのどこに含まれるかを特定する手法が本発明の属する技術分野である。
【背景技術】
【００１９】
本発明が属する技術分野である、静的FLを実施しFeatureに対応するコード片を特定する従来手法としては非特許文献１が存在する。
【００２０】
プログラムの構造を分析し、静的FLを行うために非特許文献１では構成要素間の依存関係を探索する方法が示されており、これを「Dependency Search」と呼んでいる。
【００２１】
ここで、「探索」するとは、構成要素名やソースコードの内容を基に目的のFeatureの有無を確認していくことを指す。「構成要素」とはSWを構成する様々な単位を指し、例えば手続き型言語における関数、サブルーチンや、オブジェクト指向言語におけるクラス、メソッドなどを指す。「依存関係」とは、ある構成要素が実行されるために、別の構成要素が関与している状態を指す。例えば、手続き型言語における関数、サブルーチンの呼出しや、オブジェクト指向言語におけるクラスの呼出し、継承、実装、変数アクセス等が行われている状態がこれにあたる。
【００２２】
プログラムは図２に表されるように、構成要素をノード、依存関係をエッジとして有向グラフで表すことが出来る。プログラムは有向グラフで表現できる一方、作業者の探索経路は図３のようにグラフから閉路を除いた有向グラフ上の木構造として表現できる。
【００２３】
非特許文献１で開示された静的FLの従来手法では、図４のフローに示すように「Dependency Search」が行われる。図４の処理を以下に示す。
【００２４】
ステップ１）「保守作業者が、Featureが存在すると確信する構成要素群」のうち最上位の構成要素を探索の開始点として指定する。
【００２５】
図２、３において、例えばJava（登録商標）言語で書かれたSW中に保守作業者が或るFeatureを見つけようとしているとする。作業者に目的のFeatureの所在に関する情報が無く、おおよその位置についても確信がないとき、探索範囲を狭めることは出来ないがプログラム全体の木構造のどこかにそのFeatureは含まれているので、最上位の構成要素として保守作業者はmain()を指定することが多い。
【００２６】
ステップ２）探索範囲に含まれる構成要素をリストに列挙する。
【００２７】
リストに列挙する手法は非特許文献１では詳しく開示されていないが、一般には深さ優先探索によりFLを実施することが多い。
【００２８】
探索の「開始点」と「深さ優先探索を実施する事」を決定すると、開始点からその子要素、孫要素、葉へと順次探索を行うことになる。選択中の構成要素から次の要素に移る際、複数存在する子要素のうちどれから先に探索するかという任意性は存在するが、開始点から末端の要素まで探索し、再度開始点に戻って異なる枝の葉要素まで探索を行うという順番をリストに起こすことができる。
【００２９】
ステップ３）リストの未探索の構成要素のうち、上位から一つを選択する。
【００３０】
ステップ４）選択した構成要素に対応する構成要素名やソースコードを読解し、Featureが含まれているかどうかを確認する。
【００３１】
ステップ５）Featureが含まれていれば探索を終了し、含まれていなければステップ３に戻る。
【先行技術文献】
【非特許文献】
【００３２】
【非特許文献１】The Role of Concepts in Program Comprehension, Rajlich, V.; Wilde, N.; in Proceedings of the 10th International Workshop on Program Comprehension (IWPC'02).
【発明の概要】
【発明が解決しようとする課題】
【００３３】
上記の非特許文献１の従来手法では、Featureが含まれると確信する構成要素群の最上位の構成要素を探索開始点とし、そこを基点としたプログラムの全範囲を探索することを前提としてFLを行っていた。
【００３４】
また、開始点決定後は探索範囲を限定する過程が存在しないため、読解すべき構成要素名やコードの総量が多いという課題が存在していた。
【００３５】
FLでは目的とするFeatureの有無の判断のため構成要素名やコードを読解するので、以上の課題により、読解し終えるのに時間がかかり、従ってFLに時間がかかることが問題であった。
【００３６】
本発明は、上記の点に鑑みなされたもので、依存関係探索実施の際、その探索範囲を限定し、保守作業者が読解する総量を削減することが可能な探索範囲限定装置及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００３７】
上記の課題を解決するため、本発明（請求項１）は、ソフトウェアの対象機能の実装箇所（以下、Feature Location）特定実行時に、ソフトウェアの設計者が計算機に処理させようとする機能であるFeatureの有無を確認するために探索範囲を限定するための探索範囲限定装置であって、
探索対象のソフトウェアから依存関係を抽出して依存関係記憶手段に格納する依存関係特定手段と、
前記ソフトウェアの構成要素に対して、前記エッジが前記ノードに対して向かう方向に基づいて点数を付与し、点数記憶手段に格納する点数付与手段と、
前記点数に対する閾値を設定し、該点数が該閾値以上の構成要素のみを探索範囲として限定し、探索範囲リストに出力する範囲決定手段と、を有する。
【００３８】
また、本発明（請求項２）は、前記点数付与手段において、
あるノードを正の向きに通るエッジの本数をノードの出次数とし、あるノードを負の向きに通るエッジの本数をノードの入次数とし、入次数が少なく、出次数が多い構成要素を、Featureを実現する実装が含まれている確率が高いものとして点数を付与する手段を含む。
【００３９】
また、本発明（請求項３）は、前記範囲決定手段において、
限定した前記探索範囲内に目的のFeatureが見つからなかった場合に、前記閾値を変更して探索範囲を広げてFeatureを探索する手段を含む。
【００４０】
また、本発明（請求項４）は、前記範囲決定手段で決定した探索範囲をグラフ形式で表示する表示手段を更に有する。
【発明の効果】
【００４１】
上記のように、本発明によれば、各構成要素に点数を与えて閾値を動的に設定してリストを制限するので、探索範囲が従来手法に比べ少なくなる。例えば、図６の例では、従来技術ではn個の構成要素(全構成要素数)が探索範囲としてリストに挙がっていたが、本発明では図６の閾値1を設定した場合にはe個、閾値iでは(e+f)個、閾値i+1では(e+f+g)個のようになり、定量的な効果は特定されないが明らかに探索範囲リストに挙がる構成要素数が減少する(ここで、e、f、g、hは正の整数、n=e+f+g+hとする)。このように、探索範囲を限定し構成要素名及びコード読解量を少なくするため、FLにかかる時間が短縮される。
【図面の簡単な説明】
【００４２】
【図１】Feature Location技術の分類を示す図である。
【図２】グラフとして表現されるプログラムの依存関係の有向グラフである。
【図３】木構造で表現される作業者のプログラムの探索経路である。
【図４】従来手法の実施手順のフローチャートである。
【図５】本発明の一実施の形態における探索範囲限定装置の構成図である。
【図６】本発明の一実施の形態における入出次数の説明のための図である。
【図７】本発明の一実施の形態における点数A(x)付与後のプログラムの構成要素リストである。
【図８】本発明の一実施の形態における探索範囲限度装置のフローチャートである。
【図９】本発明の一実施例における依存関係記録ファイルの構成要素間野依存関係データの例である。
【図１０】本発明の一実施例におけるメモリ上に記録される配列のデータ格納様式である。
【図１１】本発明の一実施例の点数Ａ（ｘ）を求めるためのアルゴリズムである。
【発明を実施するための形態】
【００４３】
以下、図面と共に本発明の実施の形態を説明する。
【００４４】
本発明においても従来手法同様、探索の開始点を指定した後、探索範囲をリストに列挙し、目的のFeatureが見つかるまでそのリストにある構成要素を順次探索してFeatureの有無を確認するという手順を実施する。
【００４５】
従来手法との差異は、本発明では各構成要素に点数を付与し、それに閾値を設けることで、図４のステップ２「探索範囲をリストにする」においてリストに列挙される構成要素数を削減することである。つまり、従来手法では探索空間の全てのノードに深さ優先(もしくは幅優先)で順序をつけてリストアップしていたのに対し、本発明ではこれを行った上で各構成要素に点数を付与し、閾値に基づいてリストに載せるか載せないかを判定する。
【００４６】
図５は、本発明の一実施の形態における探索範囲限定装置の構成を示す。
【００４７】
同図に示す装置のハードウェア構成は、ＣＰＵ１００、メモリ２００、磁気ディスク３００、表示部４００から構成される。
【００４８】
ＣＰＵ１００は、依存関係特定部１１０、点数付与部１２０、範囲決定部１３０として機能する。メモリ２００は、点数A(x)記憶部２１０、出次数記録部２２０、入次数記録部２３０、依存関係記録部２４０、探索範囲リスト記録部２５０を格納する。磁気ディスク３００は、依存関係記録ファイル３１０を有する。
【００４９】
依存関係特定部１１０は、理解の対象となるソースコードが入力されると、既存技術を用いて、ソースコードの各構成要素間の依存関係を特定し、依存関係記録ファイル３１０に格納する。
【００５０】
点数付与部１２０は、依存関係記録ファイル３１０をメモリ２００の依存関係記録部２４０に読み込み、各構成要素が関わる依存関係の数(後述する入次数Ini(x)と出次数Outi(x))を数え、それに基づいて点数を付与する。
【００５１】
範囲決定部１３０は、各構成要素に付与された点数に対する閾値を設定し、閾値以上の構成要素を列挙してリスト化し、探索範囲リスト記録部２５０に格納する。
【００５２】
表示部４００は、探索範囲リスト記憶部２５０に格納された最終的な探索範囲リストを表示する。
【００５３】
まず、点数付与部１２０の処理について説明する。
【００５４】
入力されるプログラムは図２に表されるように、構成要素をノード、依存関係をエッジとして有向グラフで表すことが出来る。図６（ａ）に示すように、有向グラフが存在し、これに含まれる複数のノードやエッジの中に、ノードA、ノードB、及びこれらを結ぶエッジCが含まれていたとする。同図の例のように、このエッジCがノードAからノードBに向かっているとき、エッジはノードAを「正の向きに通る」、またはノードBを「負の向きに通る」という。あるノードを、「正の向きに通る」エッジの本数を数えたものを、そのノードの「出次数」と呼ぶ。また、あるノードを、「負の向きに通る」エッジの本数を数えたものを、そのノードの「入次数」と呼ぶ。図６（ｂ）に示すように、例えば、ノードを正の向きに通るエッジは実線で表され、負の向きに通るエッジは点線で表されている。同図の例の場合のノードの出次数は「５」となり、入次数は「２」となる。
【００５５】
点数付与部１２０は、上記のような方法により、出次数と入次数を求め、それぞれ、メモリ２００の出次数記録部２２０、入次数記録部２３０に記録し、これらを用いて点数を付与する。
【００５６】
上記のように、本発明は各構成要素の入出次数を利用するものである。
【００５７】
SWの有向グラフにおいて、入次数が少なく、出次数が多いような構成要素は、積極的に他の構成要素を集約しており、様々なFeatureを実現する実装が含まれている傾向がある。逆に、入次数が多く、出次数が少ないような構成要素は、様々な構成要素から共通に利用されており、Featureを実現する実装が含まれている確率が低い。点数付与部１２０は、このような傾向を利用し、出次数記録部２２０と入次数記録部２３０から読み出した入出次数を利用して以下に述べるような式に基づいて点数を付与することを特徴とする。
【００５８】
・プログラムを構成する要素間の「関係」の種類をmとする。
【００５９】
・このmの最大値は言語仕様により決定されるものである(言語仕様によって決定される関係の中から、どの関係を用いるかは発明を利用する際に選択するものとする)。
【００６０】
・ある構成要素x(xは構成要素のIDで1〜nの値をとる正の整数)における、関係iの(iは関係の種別IDで1〜mの値をとる正の整数)の入次数をIni(x)、出次数をOuti(x)とする。
【００６１】
・整数a、bがあったとき、aに関して減少、bに関して増加する、f(a，b)という関数を定義する。
【００６２】
・各構成要素の点数A(x)を、
【００６３】
【数１】
2013218637.tif 000003
で与える(Ciは実数の結合定数)。
【００６４】
上記の式（１）により求められた点数A(x)に対して、範囲決定部１３０は、A(x)に適当な閾値を課し、閾値以下のものは探索範囲のリストから排除する。
【００６５】
以下に上記の点数付与方法の具体例を示す。
【００６６】
Java（登録商標）言語で記述されたあるプログラムがある。このプログラムでは構成要素間の関係には継承関係、実装関係、呼出し関係、オーバーライド、変数のアクセス等、Java（登録商標）の言語仕様で規定される関係が存在する。
【００６７】
本発明を使用するにあたり、上記のような関係を全て用いてもよいが、ここでは例として継承関係、実装関係、呼出し関係の3種類に限定して具体例の提示を進める。この場合、構成要素間の依存関係は3種類なので、関係の全種別数m=3となる。
【００６８】
当該プログラムの構成要素xにおける3番目の関係の種別(i=3)である呼出し関係に着目したとき、選択した構成要素xは5個のクラスから呼出されていて、7個のクラスを呼出しているとする。このとき、
In3(x)=5、Out3(x)=7
となる。
【００６９】
継承関係、実装関係も同様に、例えば、
In1(x)=3，Out1(x)=1，In2(x)=9，Out2(x)=6
と決められたとする。
【００７０】
ここでf(a、b)に、具体例の一つとして、例えば、
【００７１】
【数２】
2013218637.tif 000004
という関数を用いる。
【００７２】
結合定数Ciに関しても、例えば、C1=C2=C3=1を用いると、各構成要素の点数A(x)は、
【００７３】
【数３】
2013218637.tif 000005
を用いて、
【００７４】
【数４】
2013218637.tif 000006
となり、構成要素xに点数A(x)が付与できる。
【００７５】
各構成要素において上記の計算を行い、図７のように構成要素名と点数A(x)をリストとして探索範囲リスト記録部２５０に格納することが出来る。この際、リストはA(x)の値に関して降順で並んでいるものとする。
【００７６】
範囲決定部１３０は、A(x)の値に閾値を設定し、閾値以上の構成要素を探索範囲として列挙する。本発明は、従来手法と異なり、探索範囲を限定するため、限定した範囲内に目的のFeatureを発見できない場合が存在する。その様な場合は、探索範囲を再設定して再度探索しなおす必要がある。図７は各構成要素に点数を付与して降順に並べたリストを示す。本発明では、図７に示すように閾値を低く設定しなおし、未探索の部分のみを次の探索範囲としてリストに列挙し作業者に表示する。同図では、i番目に設定した閾値iより点数の高い構成要素に目的のFeatureが存在しない場合、閾値を閾値i+1に下げ、閾値iと閾値i+1の間に存在する構成要素のみを次の探索範囲とすることを示している。
【００７７】
図８は、本発明の一実施の形態における探索範囲限定装置のフローチャートである。
【００７８】
同図に示す処理は、図４の従来手法の実施手順に、以下２項目（ａ，ｂ）の改良を加えたものであり、それ以外は図４と同様であるのでその説明を省略する。
【００７９】
ａ）  図８のフローチャートのステップ１１０において、
図４のステップ２の「探索範囲をリストにする」のプロセスに、
[1] 各構成要素に式（１）に沿って点数を付与する：
[2] 付与した点数に閾値を設け、閾値以上の構成要素のみを探索範囲としてリストにする：
という２つのプロセスを付け加えた。
【００８０】
ｂ）  図８のフローチャートのステップ１２０，１３０において、Featureが探索リストに見つからなかったとき、閾値を下げて探索範囲を広げ、差分のみをリストアップして、探索を再開できるように変更した。
【００８１】
また、図８のステップ１１０において探索範囲を検索者に対して表示する際、表示部４００は、これを図２のような有向グラフ上に閾値以上の構成要素をハイライトして表示する。
【実施例】
【００８２】
以下に、上記の実施の形態について具体的に説明する。
【００８３】
まず、理解の対象となるソースコードとして、例えば、C言語やJava（登録商標）言語で記述されたソースコードが該当する。
【００８４】
依存関係特定部１１０の例としては、ソースコードから構成要素の依存関係を抽出してくるツールが複数存在し、inFamix(例えば、http://www.intooitus.com/products/infamix/参照)やSapid(例えば、http://www.sapid.org/index-ja.html参照)がオープンソースプログラムとして存在している。
【００８５】
点数付与部１２０は、上記の依存関係特定部１１０で抽出される構成要素について、依存性ファイル３１０からデータを読み込み、データ格納順に逐次処理を行い、各構成要素がどの依存関係のソースとして何回出現するかを数えることによりOuti(x)の値を求め、ターゲットとして何回出現するかを数えることによりIni(x)の値を求める。これらの情報を用いてA(x)を計算することが可能である。なお、Outi(x)の値、Ini(x)の値の値は、それぞれ出次数記録部２２０、入次数記録部２３０に格納され、点数A(x)を求める際に、これらの記録部２２０、２３０から読み出すものとする。
【００８６】
範囲決定部１３０の一例としては、上記点数付与部１２０で求めた値と構成要素名を表計算ツール等で降順にソートし、閾値以下の構成要素を非表示のマークを付与する等してリストを構成し、探索範囲リスト記録部２５０に格納する。
【００８７】
表示部４００は、探索範囲リスト記録部２５０から探索範囲リストを読み込み、このリストをそのまま表示する、もしくはgraphviz(http://www.graphviz.org/参照)やGephi(http://gephi.org/参照)といったグラフ描画ツールで表示することが可能である。
【００８８】
次に、上記の点数付与部１２０について詳細に説明する。
【００８９】
以下で説明する配列要素の指定は全て1から始まるものとする(0からではない)。
【００９０】
依存関係特定部１１０の処理の実施後、各構成要素間の依存関係は、磁気ディスク３００上の依存関係記録ファイルA３１０に格納されており、点数付与部１２０の処理実施の時に、メモリ２００上の依存関係記録部２４０に図９のように格納する。
【００９１】
プログラムに含まれる全関係の数をrとすると、依存関係記録部２４０には図９に示すようなr行3列の構成要素間の依存関係データが格納されているとする。このデータの各列に記録されるデータは以下に示すとおりである。
【００９２】
・1列目には依存関係の依存元の各構成要素示すxの値が記録されているものとする。
【００９３】
・2列目には、call(呼び出し関係)、inherit(継承関係)、implement(実装関係)等の依存関係の種別を示すiの値が記録されているものとする。
【００９４】
・3列目には、依存関係の依存先の構成要素を示すxの値が記録されているものとする。
【００９５】
例えばJava（登録商標）言語で記述されたプログラムにおいて、class(1)がclass(2)を継承しているとき、図９のように、依存関係記録部２４０には、p行目(1≦p≦r)では、p行1列目に継承しているclass(1)を示す値x'が、p行3列目に継承されているclass(2)を示す値x"が、p行2列目には依存関係の種別を示す値i'が記述されている。
【００９６】
メモリ２００上の入次数記録部２３０Dに図１０の(a)に示すようなn行m+1列の配列2-aを用意する。行は1〜n個の各構成要素を表し、列はm種類存在する依存関係の種別の入次数を表している。2列目〜m+1列目の要素には初期値として0が格納されているものとする。
【００９７】
メモリ２００上の出次数記録部２２０に、図１０の(b)に示すようなn行m+1列の配列2-bを用意する。行は1〜n個の各構成要素を表し、列はm種類存在する依存関係の種別の出次数を表している。2列目〜m+1列目の要素には初期値として0が格納されているものとする。
【００９８】
メモリ２００上の点数A(x)記録部２１０に、図１０の(c)に示すようなn行2列の配列3を用意する。行は1〜n個の各構成要素を表し、2列目には計算後の各構成要素のA(x)の値が格納される。
【００９９】
点数付与部１２０にてA(x)を求める演算を行う為、以下の変数を用意する。
【０１００】
・ループのカウンタ用整数型変数"c1"、"c2"及び"c3"。いずれも初期値は0とする。
【０１０１】
・図９の依存関係記録部２４０の各変数を、
−1列目を逐次格納する整数型変数"s"；
−2列目を逐次格納する整数型変数"rel"；
−3列目を逐次格納する整数型変数"t"；
−A(x)を計算する際、総和を取るための実数型変数"a"；
−読込んだ値を一時的に保持する実数型変数"r1"、"r2"；
とする。
【０１０２】
点数付与部１２０にて点数A(x)を求めるアルゴリズムを図１１に示す。
【０１０３】
ステップ２０１）  先ず、全関係数rの数だけ繰り返される1重ループ(ループ変数jは0≦j≦r-1)を用意する．このループでは、構成要素の依存関係データから、各構成要素における各関係種別の入出次数を求める。ループ内では以下の順で処理が実行される。
【０１０４】
ステップ２０２）  カウンタ変数c1をインクリメントする。
【０１０５】
ステップ２０３）  配列1のc1行1列目要素を変数"s"に格納する。
【０１０６】
ステップ２０４）  配列1のc1行2列目要素を変数"rel"に格納する。
【０１０７】
ステップ２０５）  配列1のc1行3列目要素を変数"t"に格納する。
【０１０８】
ステップ２０６）  配列2-aのs行rel+1列目の要素に格納されている整数値を読込み、インクリメントして元の要素に格納しなおす。
【０１０９】
ステップ２０７）  配列2-bのt行rel+1列目の要素に格納されている整数値を読込み、インクリメントして元の要素に格納しなおす。
【０１１０】
ステップ２０８）  次に、2重ループを用意する。外側のループ(ループ変数kは0≦k≦n-1)は全構成要素数nの数だけ繰り返され、内側のループ(ループ変数jは0≦j≦m-1)は関係の種別数mの数だけ繰り返される。また、"c3"は外側ループのカウンタ、"c2"は内側ループのカウンタとする。この２重ループでは、各構成要素の入出次数の値から点数A(x)を求める。２重ループ内の処理内容は以下の順で実行される。
【０１１１】
内側ループ内では以下の順に処理が実行される。
【０１１２】
ステップ２２１）カウンタ変数c2をインクリメントする。
【０１１３】
ステップ２２２）  配列2-aのc3行c2列目に格納されている整数値を読込み実数型変数r1に代入する。この際整数型から実数型にキャストを行う。
【０１１４】
ステップ２２３）  配列2-bのc3行c2列目に格納されている整数値を読込み実数型変数r2に代入する．この際整数型から実数型にキャストを行う。
【０１１５】
ステップ２２４）  ａ＝ａ＋ｆ（ｒ１，ｒ２）を演算する。
【０１１６】
外側ループ内では以下の順に処理が実行される。
【０１１７】
ステップ２０９）  カウンタ変数c3をインクリメントする。
【０１１８】
ステップ２１０）  内側ループに入る前に、変数aの値を0に初期化する。
【０１１９】
ステップ２１１）  内側ループから出てきた後に、aの値を配列3のc3行2列目に格納する。
【０１２０】
なお、上記の図５に示す探索範囲限定装置のＣＰＵ１００内の構成要素の動作をプログラムとして構築し、探索範囲限定装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【０１２１】
本発明は、上記の実施の形態及び実施例に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【産業上の利用可能性】
【０１２２】
情報処理システムを構成するプログラムの内容を変更、機能拡充するといった保守を行う場合、ソースコードのどの部分に対象機能が実装されているか特定しなければならない。現行プログラムと対応が取れている(最新版の)設計書等のドキュメントが残っていれば、それを基に保守対象のコード片を特定できる可能性が高いが、実際の開発現場では残っていないことや、残っていても最新でない場合が多い。従って、開発現場では保守作業者がソースコードのみを手掛かりに対象コード片を探すことがある。保守対象となるシステムが大規模であるとき、この行為は非常に手間と時間を要するプロセスとなる。
【０１２３】
以上の様な場合に、保守者によるプログラム構造の理解を支援する従来技術や、本発明を使用することが、産業上の利用方法として想定される。
【０１２４】
保守対象SWのソースコードが保守者の手元にあり、ターミナル画面等でエディタを開き、C言語でいうmain()等からはじめ片端からコードを探索しなければならないような場面を想定する。この様なとき、保守者が本発明を用いて探索する範囲を決定することにより、従来手法より構成要素名やソースコードの読解量が削減され、人件費の削減等の産業上の効果が期待される。
【符号の説明】
【０１２５】
１００  ＣＰＵ
１１０  依存関係特定部
１２０  点数付与部
１３０  範囲決定部
２００  メモリ
２１０  点数A(x)記録部
２２０  出次数記録部
２３０  入次数記録部
２４０  依存関係記録部
３００  磁気ディスク
３１０  依存関係記録ファイル
４００  表示部
【図１】
2013218637.tif 000007
【図２】
2013218637.tif 000008
【図３】
2013218637.tif 000009
【図４】
2013218637.tif 000010
【図５】
2013218637.tif 000011
【図６】
2013218637.tif 000012
【図７】
2013218637.tif 000013
【図８】
2013218637.tif 000014
【図９】
2013218637.tif 000015
【図１０】
2013218637.tif 000016
【図１１】
2013218637.tif 000017