(57)【特許請求の範囲】
【請求項１】
ソースコードに含まれる関数の依存強度として、関数が他の関数に依存する与依存強度と、関数が他の関数から依存される被依存強度とを特定するソースコード解析部と、
リファクタリングによって他のサブシステムに移動する移動関数を特定し、前記移動関数について前記ソースコード解析部によって特定された前記与依存強度及び前記被依存強度から、前記リファクタリングの影響がある依存強度を特定する影響解析部と、
前記影響解析部によって特定された影響がある依存強度に基づき、前記リファクタリングの規模を算出する規模算出部と
を備える規模算出装置。
【請求項２】
前記影響解析部は、前記移動関数について特定された前記与依存強度の総計と、前記被依存強度の総計とを、前記影響がある依存強度として特定し、
前記規模算出部は、前記与依存強度の総計に与依存係数を乗じるとともに、前記被依存強度の総計に被依存係数を乗じて、前記リファクタリングの規模を算出する
請求項１に記載の規模算出装置。
【請求項３】
前記規模算出装置は、さらに、
前記リファクタリング前のサブシステム間の依存強度と、前記リファクタリング後のサブシステム間の依存強度とから、前記リファクタリングの効果を算出する効果算出部
を備える請求項１又は２に記載の規模算出装置。
【請求項４】
前記影響解析部は、前記移動関数毎に、前記リファクタリングの影響がある依存強度を特定し、
前記規模算出部は、前記移動関数毎に、その移動関数についての前記影響がある依存強度に基づき、その移動関数についての前記リファクタリングの規模を算出する
請求項１から３までのいずれか１項に記載の規模算出装置。
【請求項５】
前記影響解析部は、複数のリファクタリングそれぞれを対象として、対象のリファクタリングによって他のサブシステムに移動する移動関数を特定し、前記対象のリファクタリングの影響がある依存強度を特定し、
前記規模算出部は、前記複数のリファクタリングそれぞれを対象として、対象のリファクタリングについての前記影響がある依存強度に基づき、前記対象のリファクタリングについての規模を算出する
請求項１から４までのいずれか１項に記載の規模算出装置。
【請求項６】
前記効果算出部は、複数のリファクタリングそれぞれを対象として、前記リファクタリング前のサブシステム間の依存強度と、対象のリファクタリングをした後のサブシステム間の依存強度とから、前記対象のリファクタリングの効果を算出する
請求項３に記載の規模算出装置。
【請求項７】
前記影響解析部は、複数のリファクタリングそれぞれを対象として、対象のリファクタリングによって他のサブシステムに移動する移動関数を特定し、対象のリファクタリングについて特定された移動関数毎に、前記対象のリファクタリングの影響がある依存強度を特定し、
前記規模算出部は、前記複数のリファクタリングそれぞれを対象として、対象のリファクタリングについて特定された移動関数毎に、その移動関数についての前記影響がある依存強度に基づき、その移動関数についての前記対象のリファクタリングの規模を算出する請求項４に記載の規模算出装置。
【請求項８】
ソースコードに含まれる関数の依存強度として、関数が他の関数に依存する与依存強度と、関数が他の関数から依存される被依存強度とを特定するソースコード解析処理と、
リファクタリングによって他のサブシステムに移動する移動関数を特定し、前記移動関数について前記ソースコード解析処理によって特定された前記与依存強度及び前記被依存強度から、前記リファクタリングの影響がある依存強度を特定する影響解析処理と、
前記影響解析処理によって特定された影響がある依存強度に基づき、前記リファクタリングの規模を算出する規模算出処理と
をコンピュータに実行させる規模算出プログラム。
【請求項９】
ソースコードに含まれる関数の依存強度を特定するソースコード解析部と、
第１のサブシステムに対応する関数のうち、リファクタリングによって第２のサブシステムに移動した移動関数を特定し、前記移動関数について前記ソースコード解析部によって特定された依存強度から、前記移動関数と依存関係のあるインターフェースにおいて前記リファクタリングの影響がある依存強度を特定する影響解析部と、
前記影響解析部によって特定された影響がある依存強度に基づき、前記リファクタリングに伴う前記インターフェースの変更規模を算出する規模算出部と
を備える規模算出装置。
【請求項１０】
前記規模算出部は、前記影響解析部によって特定された影響がある依存強度との相関関係に基づき、前記リファクタリングの規模を算出する
請求項９に記載の規模算出装置。
【請求項１１】
前記影響解析部は、前記移動関数と依存関係のある前記第１のサブシステムと前記第２のサブシステムとのインターフェースにおいて前記リファクタリングの影響がある依存強度を特定する
請求項９又は１０に記載の規模算出装置。
【請求項１２】
ソースコードに含まれる関数の依存強度を特定するソースコード解析処理と、
第１のサブシステムに対応する関数のうち、リファクタリングによって第２のサブシステムに移動した移動関数を特定し、前記移動関数について前記ソースコード解析処理によって特定された依存強度から、前記移動関数と依存関係のあるインターフェースにおいて前記リファクタリングの影響がある依存強度を特定する影響解析処理と、
前記影響解析処理によって特定された影響がある依存強度に基づき、前記リファクタリングに伴う前記インターフェースの変更規模を算出する規模算出処理と
をコンピュータに実行させる規模算出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソフトウェア（以下、Ｓ／Ｗ）のリファクタリングの規模を見積もる技術に関する。
【背景技術】
【０００２】
ソースコードの流用を繰り返すと、ソースコードの継ぎ足しによりＳ／Ｗ構造が当初の想定と異なり煩雑になる。煩雑０になったＳ／Ｗ構造を整えるために、外部から見たＳ／Ｗの挙動を変更することなく、Ｓ／Ｗ内部構造を改善するリファクタリングが実施される。【０００３】
リファクタリングを実施する前に、リファクタリングに必要な改造規模を算出し、費用対効果を見極める必要がある。リファクタリングの規模とは、改造に必要なソースコードライン数や開発工数等である。
リファクタリングの規模見積りの方法としては、過去の経験に基づきファンクションポイント法又はＷＢＳ（Ｗｏｒｋ  Ｂｒｅａｋｄｏｗｎ  Ｓｔｒｕｃｔｕｒｅ）により行う方法がある。しかし、この方法では、熟練者以外が正確な見積りをすることは難しい。また、Ｓ／Ｗの複雑化及び大規模化により、大量ソースコードに対して人の手で改造規模を見積もることは困難である。【０００４】
設計情報から機械的に改造規模を見積もる方法がある。特許文献１，２には、モジュール単位の依存関係を元に、改造の影響が波及するモジュールの規模の総和を算出する方法が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−４５４２１号公報
【特許文献２】特開２０１３−１９６４３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１，２に記載された方法では、モジュールの規模単位の見積りしかできない。
この発明は、適切にリファクタリングの規模の見積りをできるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
この発明に係る規模算出装置は、
ソースコードに含まれる関数の依存強度を特定するソースコード解析部と、
リファクタリングによって他のサブシステムに移動する移動関数を特定し、前記移動関数について前記ソースコード解析部によって特定された依存強度から、前記リファクタリングの影響がある依存強度を特定する影響解析部と、
前記影響解析部によって特定された影響を受ける依存強度に基づき、前記リファクタリングの規模を算出する規模算出部と
を備える。
【発明の効果】
【０００８】
この発明では、Ｓ／Ｗの関数間の依存強度を用いて、リファクタリングの規模の見積りをする。これにより、適切にリファクタリングの規模の見積りをすることが可能である。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係る規模算出装置１０の構成図。
【図２】実施の形態１に係る規模算出装置１０の動作の流れを示す図。
【図３】実施の形態１に係るソースコード３１の例を示す図。
【図４】実施の形態１に係る、図３に示すソースコード３１のＳ／Ｗ構成要素間の依存関係の例を示す図。
【図５】実施の形態１に係る、図３に示すソースコード３１の関数依存強度対応表３２を示す図。
【図６】実施の形態１に係る、図３に示すソースコード３１の前関数サブシステム対応表３３を示す図。
【図７】実施の形態１に係る、図６に示す前関数サブシステム対応表３３から作成された後関数サブシステム対応表３４を示す図。
【図８】実施の形態１に係る、図７に示す後関数サブシステム対応表３４に基づく、影響依存強度表３５を示す図。
【図９】実施の形態１に係る、図３に示すソースコード３１をリファクタリングした後のソースコード３１を示す図。
【図１０】変形例１に係る規模算出装置１０の構成図。
【図１１】実施の形態２に係る規模算出装置１０の構成図。
【図１２】実施の形態２に係る規模算出装置１０の動作の流れを示す図。
【図１３】実施の形態２に係る、図３に示すソースコード３１の前サブシステム間依存関係表３８を示す図。
【図１４】実施の形態２に係る、図３に示すソースコード３１と、図７に示す後関数サブシステム対応表３４とに基づく、後サブシステム間依存関係表３９を示す図。
【図１５】実施の形態３に係る規模算出装置１０の動作の流れを示す図。
【図１６】実施の形態３に係る、図７に示す後関数サブシステム対応表３４に基づく、関数影響依存強度表４１を示す図。
【図１７】実施の形態４に係る規模算出装置１０の動作の流れを示す図。
【発明を実施するための形態】
【００１０】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を参照して、実施の形態１に係る規模算出装置１０の構成を説明する。
規模算出装置１０は、コンピュータである。
規模算出装置１０は、プロセッサ１１と、メモリ１２と、ストレージ１３と、通信インタフェース１４とのハードウェアを備える。プロセッサ１１は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００１１】
プロセッサ１１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ１１は、具体例としては、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１２】
メモリ１２は、データを一時的に記憶する記憶装置である。メモリ１２は、具体例としては、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１３】
ストレージ１３は、データを保管する記憶装置である。ストレージ１３は、具体例としては、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、ストレージ１３は、ＳＤ（登録商標，Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記憶媒体であってもよい。
【００１４】
通信インタフェース１４は、外部の装置と通信するためのインタフェースである。通信インタフェース１４は、具体例としては、Ｅｔｈｅｒｎｅｔ（登録商標）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＨＤＭＩ（登録商標，Ｈｉｇｈ−Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）のポートである。
【００１５】
規模算出装置１０は、機能構成要素として、ソースコード解析部２１と、影響解析部２２と、規模算出部２３とを備える。ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能はソフトウェアにより実現される。
ストレージ１３には、ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能を実現するプログラムが記憶されている。このプログラムは、プロセッサ１１によりメモリ１２に読み込まれ、プロセッサ１１によって実行される。これにより、ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能が実現される。
【００１６】
図１では、プロセッサ１１は、１つだけ示されている。しかし、規模算出装置１０は、プロセッサ１１を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能を実現するプログラムの実行を分担する。それぞれのプロセッサは、プロセッサ１１と同じように、プロセッシングを行うＩＣである。
【００１７】
＊＊＊動作の説明＊＊＊
図２を参照して、実施の形態１に係る規模算出装置１０の動作を説明する。
実施の形態１に係る規模算出装置１０の動作は、実施の形態１に係る規模算出方法に相当する。また、実施の形態１に係る規模算出装置１０の動作は、実施の形態１に係る規模算出プログラムの処理に相当する。
【００１８】
＜ソースコード解析部２１の処理＞
ソースコード解析部２１は、通信インタフェース１４を介してソースコード３１の入力を受け付け、メモリ１２に書き込む。ソースコード解析部２１は、受け付けたソースコード３１からＳ／Ｗの構成要素間の依存関係を抽出する。そして、ソースコード解析部２１は、ソースコード３１に含まれる関数毎に依存強度を集計して、関数の依存強度を示す関数依存強度対応表３２を生成する。また、ソースコード解析部２１は、関数に対応するサブシステムを示す前関数サブシステム対応表３３を生成する。ソースコード解析部２１は、関数依存強度対応表３２及び前関数サブシステム対応表３３を、メモリ１２に書き込む。
ソースコード３１は、Ｓ／Ｗ、すなわちコンピュータプログラムの元となる文字の羅列である。つまり、ソースコード３１は、コンピュータに対する一連の指示が記述されたものである。Ｓ／Ｗの構成要素は、ソースコードに記述された要素である。Ｓ／Ｗの構成要素は、例えば、関数、変数、ファイル、マクロである。Ｓ／Ｗの構成要素間の依存関係は、Ｓ／Ｗの構成要素間に定義された関係である。Ｓ／Ｗの構成要素間の依存関係は、例えば、インクルード、マクロ及び関数の呼び出し、変数への書込み、変数の参照である。依存強度は、依存する回数である。
【００１９】
図３から図５を参照して、関数依存強度対応表３２の生成処理を説明する。
まず、ソースコード解析部２１は、図３に示すソースコード３１から、図４に示すＳ／Ｗ構成要素間の依存関係を抽出する。
図４に示すように、Ｓ／Ｗ構成要素間の依存関係は、依存元のＳ／Ｗの構成要素毎に、依存先のＳ／Ｗの構成要素と、依存種類と、依存強度とを示す。
具体例としては、図４の１行目は、図３に示すソースコード３１において、依存元のＳ／Ｗ構成要素であるファイルｆｉｌｅ１．ｃから依存先のＳ／Ｗ構成要素であるファイルｆｉｌｅ１．ｈへの「インクルード」という依存種別の依存関係の依存強度が１であることを示している。また、図４の５行目は、図３に示すソースコード３１において、依存元のＳ／Ｗ構成要素であるファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ｂ（）から依存先のＳ／Ｗ構成要素であるファイルｆｉｌｅ１．ｃの変数ｖａｌ＿Ｉへの「変数の参照」という依存種別の依存関係の依存強度が２であることを示している。
【００２０】
次に、ソースコード解析部２１は、図４に示すＳ／Ｗ構成要素間の依存関係に基づき、関数毎に依存強度を集計して、図５に示す関数依存強度対応表３２を生成する。
図５に示すように、関数依存強度対応表３２は、関数毎に、関数の与依存に関する与依存強度と、関数の被依存に関する依存強度とを示す。与依存とは、対象となるＳ／Ｗ構成要素が依存元となる依存関係を指す。被依存とは、対象となるＳ／Ｗ構成要素が依存先となる依存関係を指す。
具体例としては、図５の２行目は、ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ｂ（）の与依存強度と被依存強度とを示す。ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ｂ（）は、図４の３行目と４行目と５行目とで依存元となっている。そのため、ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ｂ（）の与依存強度は、図４の３行目と４行目と５行目との依存強度を足し合わせた４となっている。また、ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ｂ（）は、図４において依存先となっていない。そのため、ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ｂ（）の被依存強度は、０となっている。
【００２１】
図３及び図６を参照して、前関数サブシステム対応表３３の生成処理を説明する。
ソースコード解析部２１は、図３に示すソースコード３１から、関数と、関数が所属するサブシステムとを抽出して、図６に示す前関数サブシステム対応表３３を生成する。
図６に示すように、前関数サブシステム対応表３３は、関数毎に、所属するサブシステムを示す。具体例としては、図６の１行目は、ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ａ（）がサブシステムＩに所属することを示す。
なお、ソースコード解析部２１は、関数がどのサブシステムに所属するかの情報は、ソースコードのコメントに記載された情報から読み取ってもよいし、外部から入力された関数とサブシステムとの対応に関するルールを元に生成してもよい。関数とサブシステムの対応に関するルールとは、例えば関数が所属しているファイルとサブシステムとの対応表である。
【００２２】
＜影響解析部２２の処理＞
影響解析部２２は、リファクタリングによって他のサブシステムに移動する関数である移動関数を特定する。そして、影響解析部２２は、移動関数についてソースコード解析部２１によって特定された依存強度から、リファクタリングの影響がある依存強度を示す影響依存強度表３５を生成する。
具体的には、影響解析部２２は、関数依存強度対応表３２と、前関数サブシステム対応表３３と、前関数サブシステム対応表３３から生成された後関数サブシステム対応表３４とをメモリ１２から読み出す。影響解析部２２は、前関数サブシステム対応表３３と、前関数サブシステム対応表３３から生成された後関数サブシステム対応表３４とを比較して、移動関数を特定する。そして、影響解析部２２は、ソースコード解析部２１によって生成された関数依存強度対応表３２に基づき、移動関数に対してリファクタリングの影響がある依存強度を特定して、影響依存強度表３５を生成する。影響解析部２２は、生成された影響依存強度表３５をメモリ１２に書き込む。
【００２３】
図６及び図７を参照して、移動関数の特定処理を説明する。
影響解析部２２は、図６に示す前関数サブシステム対応表３３と、図７に示す後関数サブシステム対応表３４との変更箇所を特定することにより、移動関数を特定する。
図７に示すように、後関数サブシステム対応表３４は、図６に示す前関数サブシステム対応表３３を元に、リファクタリングによりサブシステム間を移動する関数を、移動元のサブシステムから移動先のサブシステムに変更して作成された表である。後関数サブシステム対応表３４は、リファクタリングの内容に応じて作業者等により作成される。具体例としては、図７の１行目は、ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ａ（）が、サブシステムＩＩに移動されることを示す。
なお、後関数サブシステム対応表３４は、前関数サブシステム対応表３３の情報を含んでもよい。後関数サブシステム対応表３４が前関数サブシステム対応表３３の情報を含めば、影響解析部２２は、後関数サブシステム対応表３４だけを参照して、移動関数を特定することができる。
【００２４】
図５から図８を参照して、影響依存強度表３５の生成処理を説明する。
影響解析部２２は、移動関数について特定された依存強度の総計を、影響を受ける依存強度として特定して、影響依存強度表３５を生成する。
図８に示すように、影響依存強度表３５は、サブシステム間の移動が発生する移動関数の被依存強度の総計と与依存強度の総計とを示す。
具体例としては、図６及び図７から分かるように、ファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ａ（）のみがサブシステム間の移動を行う移動関数である。そのため、与依存強度の総計は図５のファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ａ（）の与依存強度を示す１となる。また、被依存強度の総計は、図５のファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ａ（）の被依存強度を示す２となる。
【００２５】
＜規模算出部２３の処理＞
規模算出部２３は、影響解析部２２によって特定された影響がある依存強度に基づき、リファクタリングの規模を算出して、リファクタリングの規模を示す規模見積り結果３７を生成する。
具体的には、規模算出部２３は、影響依存強度表３５をメモリ１２から読み出す。規模算出部２３は、影響依存強度表３５が示す影響を受ける依存強度に、係数３６を乗じて、リファクタリングの規模を示す規模見積り結果３７を生成する。例えば、規模算出部２３は、影響依存強度表３５における被依存強度の総計と与依存強度の総計とのそれぞれに係数３６を掛けることでリファクタリングの規模を算出する。規模算出部２３は、規模見積り結果３７を通信インタフェース１４を介して出力する。
係数３６は、依存強度からリファクタリング規模を見積もるために使用する値である。係数３６は、作業者が過去の経験から設定されてもよいし、一部のサンプルに実際にリファクタリングを行った結果に基づき、算出されてもよい。係数３６は、被依存強度の総計と与依存強度の総計とについて異なる値が設定されてもよい。
【００２６】
＊＊＊実施の形態１の効果＊＊＊
以上のように、実施の形態１に係る規模算出装置１０は、Ｓ／Ｗの関数間の依存強度を用いて、リファクタリングの規模の見積りをする。これにより、大規模なソースコード３１に対しても、機械的かつ高精度にリファクタリングの規模の見積りをすることが可能である。
【００２７】
図３及び図９を参照して、依存強度とリファクタリング規模の関係を説明する。
図９に示すリファクタリング後のソースコード３１と、図３に示すリファクタリング前のソースコード３１とを比較する。すると、図９に示すリファクタリング後のソースコード３１では、サブシステムＩのファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ａ（）が、サブシステムＩＩのファイルｆｉｌｅ２．ｃに移動されている。また、サブシステムを移動したため、関数ｆｕｎｃ＿Ｉ＿Ａ（）の関数名がｆｕｎｃ＿ＩＩ＿Ａ（）に変更されている。
リファクタリングのために必要な改造として、関数ｆｕｎｃ＿Ｉ＿Ａ（）のインタフェースの変更がある。この変更は、関数ｆｕｎｃ＿Ｉ＿Ａ（）を使用しているファイルｆｉｌｅ１．ｃの関数ｆｕｎｃ＿Ｉ＿Ｂ（）の１箇所と、ファイルｆｉｌｅ２．ｃの関数ｆｕｎｃ＿ＩＩ＿Ｃ（）の１箇所の計２箇所について行われる。この改造規模は、図５の関数ｆｕｎｃ＿Ｉ＿Ａ（）の被依存強度と相関関係を持つと考えられる。
また、リファクタリングのために必要な改造として、関数ｆｕｎｃ＿ＩＩ＿Ａ（）からファイルｆｉｌｅ１．ｃの静的変数ｖａｌ＿Ｉへのアクセスのためのインタフェースの変更がある。具体的には、図９のファイルｆｉｌｅ１．ｃの関数ｇｅｔ＿ｖａｌ＿Ｉ（）が作成され、関数ｆｕｎｃ＿ＩＩ＿Ａ（）の１箇所が変更される。この改造規模は、図５の関数ｆｕｎｃ＿Ｉ＿Ａ（）の与依存強度と相関関係を持つと考えられる。
これらの相関関係を係数によって表現することで、依存強度からリファクタリング規模を算出することが可能である。
【００２８】
＊＊＊他の構成＊＊＊
＜変形例１＞
実施の形態１では、規模算出装置１０のソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能がソフトウェアで実現された。しかし、変形例１として、ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能はハードウェアで実現されてもよい。この変形例１について、実施の形態１と異なる点を説明する。
【００２９】
図１０を参照して、変形例１に係る規模算出装置１０の構成を説明する。
ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能がハードウェアで実現される場合、規模算出装置１０は、プロセッサ１１とメモリ１２とストレージ１３とに代えて、処理回路１５を備える。処理回路１５は、ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能と、メモリ１２とストレージ１３との機能とを実現する専用の電子回路である。
【００３０】
処理回路１５は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）が想定される。
ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能を１つの処理回路１５で実現してもよいし、ソースコード解析部２１と、影響解析部２２と、規模算出部２３との機能を複数の処理回路１５に分散させて実現してもよい。
【００３１】
＜変形例２＞
変形例２として、一部の機能がハードウェアで実現され、他の機能がソフトウェアで実現されてもよい。つまり、ソースコード解析部２１と、影響解析部２２と、規模算出部２３とのうち、一部の機能がハードウェアで実現され、他の機能がソフトウェアで実現されてもよい。
【００３２】
プロセッサ１１とメモリ１２とストレージ１３と処理回路１５とを、総称して「プロセッシングサーキットリー」という。つまり、各機能構成要素の機能は、プロセッシングサーキットリーにより実現される。
【００３３】
実施の形態２．
実施の形態２は、リファクタリングの効果を算出する点が実施の形態１と異なる。実施の形態２では、この異なる点を説明し、同一の点については説明を省略する。
【００３４】
＊＊＊構成の説明＊＊＊
図１１を参照して、実施の形態２に係る規模算出装置１０の構成を説明する。
規模算出装置１０は、効果算出部２４を備える点が図１に示す規模算出装置１０と異なる。効果算出部２４は、他の機能構成要素と同様にソフトウェアによって実現される。また、効果算出部２４は、他の機能構成要素と同様にハードウェアによって実現されてもよい。
【００３５】
＊＊＊動作の説明＊＊＊
図１２を参照して、実施の形態２に係る規模算出装置１０の動作を説明する。
実施の形態２に係る規模算出装置１０の動作は、実施の形態２に係る規模算出方法に相当する。また、実施の形態２に係る規模算出装置１０の動作は、実施の形態２に係る規模算出プログラムの処理に相当する。
【００３６】
＜ソースコード解析部２１の処理＞
ソースコード解析部２１は、関数依存強度対応表３２及び前関数サブシステム対応表３３に加えて、前サブシステム間依存関係表３８を生成する。ソースコード解析部２１は、図３に示すソースコード３１からＳ／Ｗ構成要素に関するサブシステム間の依存関係と依存強度とを特定して、図１３に示す前サブシステム間依存関係表３８を生成する。
具体的には、ソースコード解析部２１は、ソースコード３１の各サブシステムを依存元とし、依存元以外の各サブシステムを依存先として、依存先のサブシステムのＳ／Ｗ構成要素に依存する依存元のサブシステムのＳ／Ｗ構成要素を抽出する。ソースコード解析部２１は、抽出されたＳ／Ｗ構成要素の依存強度の総計を、依存元のサブシステムの依存先のサブシステムに対する依存強度として特定する。ソースコード解析部２１は、各サブシステム間について、特定された依存強度を示す前サブシステム間依存関係表３８を生成する。ソースコード解析部２１は、生成された前サブシステム間依存関係表３８をメモリ１２に書き込む。
図１３に示すように、前サブシステム間依存関係表３８は、依存元のサブシステムと、依存先のサブシステムと、依存強度とを示す。具体例としては、図１３の２行目は、サブシステムＩＩからサブシステムＩへの依存強度が２であることを示している。図１３の２行目の依存強度は、サブシステムＩＩのＳ／Ｗ構成要素がサブシステムＩのＳ／Ｗ構成要素に依存している依存強度の合計である。したがって、図１３の２行目の依存強度は、図４の６行目と７行目の依存強度の総和に相当する。
【００３７】
＜影響解析部２２の処理＞
影響解析部２２は、影響依存強度表３５に加え、後サブシステム間依存関係表３９を生成する。影響解析部２２は、ソースコード３１と前サブシステム間依存関係表３８とに基づき、リファクタリング後のＳ／Ｗ構成要素に関するサブシステム間の依存関係と依存強度とを特定して、後サブシステム間依存関係表３９を生成する。
具体的には、影響解析部２２は、ソースコード３１と前サブシステム間依存関係表３８とをメモリ１２から読み出し、前サブシステム間依存関係表３８を後サブシステム間依存関係表３９として複製する。影響解析部２２は、以下の（１）から（４）の処理を行い、後サブシステム間依存関係表３９を生成する。影響解析部２２は、生成された後サブシステム間依存関係表３９をメモリ１２に書き込む。
（１）影響解析部２２は、各サブシステムを対象として、移動関数を移動させる前における、移動関数のＳ／Ｗ構成要素が依存する対象のサブシステムのＳ／Ｗ構成要素の数Ｎ１を、ソースコード３１から特定する。影響解析部２２は、後サブシステム間依存関係表３９が示す、移動前に移動関数が所属するサブシステムから対象のサブシステムへの依存強度を、特定された数Ｎ１だけ減らす。
（２）影響解析部２２は、各サブシステムを対象として、移動関数を移動させる前における、対象のサブシステムのＳ／Ｗ構成要素が依存する移動関数のＳ／Ｗ構成要素の数Ｎ２を特定する。影響解析部２２は、後サブシステム間依存関係表３９が示す、対象のサブシステムから移動前に移動関数が所属するサブシステムへの依存強度を、特定された数Ｎ２だけ減らす。
（３）影響解析部２２は、各サブシステムを対象として、移動関数を移動させた後における、移動関数のＳ／Ｗ構成要素が依存する対象のサブシステムのＳ／Ｗ構成要素の数Ｎ３を、ソースコード３１から特定する。影響解析部２２は、後サブシステム間依存関係表３９が示す、移動後に移動関数が所属するサブシステムから対象のサブシステムへの依存強度を、特定された数Ｎ３だけ増やす。
（４）影響解析部２２は、各サブシステムを対象として、移動関数を移動させた後における、対象のサブシステムのＳ／Ｗ構成要素が依存する移動関数のＳ／Ｗ構成要素の数Ｎ４を特定する。後サブシステム間依存関係表３９が示す、影響解析部２２は、対象のサブシステムから移動後に移動関数が所属するサブシステムへの依存強度を、特定された数Ｎ４だけ増やす。
【００３８】
図１４に示すように、図３に示すソースコード３１を、図７に示す後関数サブシステム対応表３４に従いリファクタリングした場合、サブシステムＩからサブシステムＩＩへの依存強度が１になっている。つまり、図１３に示す前サブシステム間依存関係表３８では、サブシステムＩのサブシステムＩＩへの依存強度が０であったが、図１４では１増加している。
これは、リファクタリングにより、関数ｆｕｎｃＩ＿Ａ（）がサブシステムＩからサブシステムＩＩに移動したためである。具体的には、サブシステムＩのサブシステムＩＩへの依存強度１は、図９に示すリファクタリング後のソースコード３１におけるファイルｆｉｌｅ１．ｃの関数ｆｕｎｃＩ＿Ｂ（）からファイルｆｉｌｅ２．ｃの関数ｆｕｎｃＩＩ＿Ａ（）への依存強度１に相当する。
【００３９】
＜効果算出部２４の処理＞
効果算出部２４は、リファクタリング前のサブシステム間の依存強度と、前記リファクタリング後のサブシステム間の依存強度とから、リファクタリングの効果を示す効果見積り結果４０を生成する。
具体的には、効果算出部２４は、前サブシステム間依存関係表３８と後サブシステム間依存関係表３９とをメモリ１２から読み出す。効果算出部２４は、前サブシステム間依存関係表３８が示すリファクタリング前のサブシステム間の依存強度と、後サブシステム間依存関係表３９が示すリファクタリング後のサブシステム間の依存強度との比較結果又は差分をリファクタリングの効果として算出する。効果算出部２４は、算出されたリファクタリングの効果を示す効果見積り結果４０を生成する。効果算出部２４は、生成された効果見積り結果４０を通信インタフェース１４を介して出力する。
【００４０】
＊＊＊実施の形態２の効果＊＊＊
以上のように、実施の形態２に係る規模算出装置１０は、Ｓ／Ｗの関数間の依存強度を用いて、リファクタリングの効果の見積りをする。これにより、リファクタリングの費用対効果を算出することが可能になる。
【００４１】
実施の形態３．
実施の形態３では、関数単位のリファクタリングの規模を算出する点が実施の形態１と異なる。実施の形態３では、この異なる点を説明し、同一の点については説明を省略する。
【００４２】
＊＊＊動作の説明＊＊＊
図１５を参照して、実施の形態３に係る規模算出装置１０の動作を説明する。
実施の形態３に係る規模算出装置１０の動作は、実施の形態３に係る規模算出方法に相当する。また、実施の形態３に係る規模算出装置１０の動作は、実施の形態３に係る規模算出プログラムの処理に相当する。
【００４３】
＜影響解析部２２の処理＞
影響解析部２２は、影響依存強度表３５に加えて、関数単位でリファクタリングの影響がある依存強度を示す関数影響依存強度表４１を生成する。
具体的には、図１６に示すように、影響解析部２２は、関数依存強度対応表３２から移動関数の行を抽出することにより、関数影響依存強度表４１を生成する。影響解析部２２は、生成された関数影響依存強度表４１をメモリ１２に書き込む。
【００４４】
＜規模算出部２３の処理＞
規模算出部２３は、規模見積り結果３７に加えて、関数単位でリファクタリングの規模を示す関数規模見積り結果４２を生成する。
具体的には、規模算出部２３は、関数影響依存強度表４１をメモリ１２から読み出す。規模算出部２３は、関数影響依存強度表４１が示す関数毎の依存強度に、係数３６を乗じて、関数毎のリファクタリングの規模を示す関数規模見積り結果４２を生成する。
【００４５】
＊＊＊実施の形態３の効果＊＊＊
以上のように、実施の形態３に係る規模算出装置１０は、関数単位のリファクタリングの規模を算出する。これにより、リファクタリングの対象とする関数の絞り込みを行うことができる。
【００４６】
実施の形態４．
実施の形態４は、複数のリファクタリングのパターンそれぞれについて、リファクタリングの規模を算出する点が実施の形態１と異なる。実施の形態４では、この異なる点を説明し、同一の点については説明を省略する。
【００４７】
＊＊＊動作の説明＊＊＊
図１７を参照して、実施の形態４に係る規模算出装置１０の動作を説明する。
実施の形態４に係る規模算出装置１０の動作は、実施の形態４に係る規模算出方法に相当する。また、実施の形態４に係る規模算出装置１０の動作は、実施の形態４に係る規模算出プログラムの処理に相当する。
【００４８】
図１７は、パターンＡとパターンＢとの２つのリファクタリングのパターンについて、リファクタリングの規模を算出する例を示している。
【００４９】
＜影響解析部２２の処理＞
影響解析部２２は、複数のリファクタリングのパターンそれぞれを対象として、対象のパターンのリファクタリングによって他のサブシステムに移動する移動関数を特定する。そして、影響解析部２２は、移動関数についてソースコード解析部２１によって特定された依存強度から、対象のパターンのリファクタリングの影響がある依存強度を示す影響依存強度表３５を生成する。
具体的には、影響解析部２２は、前関数サブシステム対応表３３と、対象のパターンの後関数サブシステム対応表３４とを比較して、対象のパターンについての移動関数を特定する。そして、影響解析部２２は、関数依存強度対応表３２に基づき、移動関数に対してリファクタリングの影響がある依存強度を特定して、対象のパターンについての影響依存強度表３５を生成する。
図１７の例であれば、影響解析部２２は、前関数サブシステム対応表３３と後関数サブシステム対応表３４Ａとを比較して、パターンＡについての移動関数を特定する。そして、影響解析部２２は、関数依存強度対応表３２に基づき、特定された移動関数に対してリファクタリングの影響がある依存強度を特定して、パターンＡについての影響依存強度表３５Ａを生成する。同様に、影響解析部２２は、前関数サブシステム対応表３３と後関数サブシステム対応表３４Ｂとを比較して、パターンＢについての移動関数を特定する。そして、影響解析部２２は、関数依存強度対応表３２に基づき、特定された移動関数に対してリファクタリングの影響がある依存強度を特定して、パターンＢについての影響依存強度表３５Ｂを生成する。
【００５０】
＜規模算出部２３の処理＞
規模算出部２３は、複数のリファクタリングのパターンそれぞれを対象として、対象のパターンのリファクタリングについて、影響解析部２２によって特定された影響がある依存強度に基づき、対象のパターンのリファクタリングについての規模を算出する。そして、各パターンのリファクタリングについての規模を示す規模見積り結果３７を生成する。
なお、規模算出部２３は、規模の最も大きい、又は、最も小さいパターンについての規模のみを示す規模見積り結果３７を生成してもよい。
【００５１】
＊＊＊実施の形態４の効果＊＊＊
以上のように、実施の形態４に係る規模算出装置１０は、複数のリファクタリングのパターンそれぞれについて、リファクタリングの規模を算出する。これにより、どのリファクタリングパターンが最も少ない工数で実施可能かといったことを検討可能である。
【００５２】
＊＊＊他の構成＊＊＊
＜変形例３＞
実施の形態２では、１つのリファクタリングのパターンについてリファクタリングの効果を算出した。実施の形態２と実施の形態４とを組み合わせ、複数のリファクタリングのパターンそれぞれについて、リファクタリングの効果を算出してもよい。
この場合、効果算出部２４は、複数のリファクタリングのパターンそれぞれを対象として、リファクタリング前のサブシステム間の依存強度と、対象のパターンのリファクタリングをした後のサブシステム間の依存強度とから、対象のパターンのリファクタリングの効果を算出する。
【００５３】
＜変形例４＞
実施の形態３では、１つのリファクタリングのパターンについて関数単位のリファクタリングの規模を算出した。実施の形態３と実施の形態４とを組み合わせ、複数のリファクタリングのパターンそれぞれについて、関数単位のリファクタリングの規模を算出してもよい。
この場合、影響解析部２２は、複数のリファクタリングのパターンそれぞれを対象として、対象のパターンのリファクタリングによって他のサブシステムに移動する移動関数を特定する。そして、影響解析部２２は、対象のパターンのリファクタリングについて特定された移動関数毎に、対象のパターンのリファクタリングの影響がある依存強度を特定する。また、規模算出部２３は、複数のパターンのリファクタリングそれぞれを対象として、対象のパターンのリファクタリングについて特定された移動関数毎に、その移動関数についての前記影響がある依存強度に基づき、その移動関数についての対象のパターンのリファクタリングの規模を算出する。
【符号の説明】
【００５４】
１０  規模算出装置、１１  プロセッサ、１２  メモリ、１３  ストレージ、１４  通信インタフェース、１５  処理回路、２１  ソースコード解析部、２２  影響解析部、２３  規模算出部、２４  効果算出部、３１  ソースコード、３２  関数依存強度対応表、３３  前関数サブシステム対応表、３４  後関数サブシステム対応表、３５  影響依存強度表、３６  係数、３７  規模見積り結果、３８  前サブシステム間依存関係表、３９  後サブシステム間依存関係表、４０  効果見積り結果、４１  関数影響依存強度表、４２  関数規模見積り結果。
【図１】
0006682036.tif 000002
【図２】
0006682036.tif 000003
【図３】
0006682036.tif 000004
【図４】
0006682036.tif 000005
【図５】
0006682036.tif 000006
【図６】
0006682036.tif 000007
【図７】
0006682036.tif 000008
【図８】
0006682036.tif 000009
【図９】
0006682036.tif 000010
【図１０】
0006682036.tif 000011
【図１１】
0006682036.tif 000012
【図１２】
0006682036.tif 000013
【図１３】
0006682036.tif 000014
【図１４】
0006682036.tif 000015
【図１５】
0006682036.tif 000016
【図１６】
0006682036.tif 000017
【図１７】
0006682036.tif 000018