(57)【要約】【課題】システムの改修コストおよび保守コストを算出すると共に、両コストを最も低くするリファクタリングの度合いを推定し得る、コスト算出装置、コスト算出方法、及びプログラムを提供する。【解決手段】コスト算出装置１０は、システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出するコードクローン検出部１０１と、検出された箇所を部品としてまとめる際のレベルを設定する、部品化レベル設定部１０２と、改修前のソースコードに対して、設定レベルで部品化を行なった場合に得られる、改修後のソースコードを推定する改修後ソースコード推定部１０３と、推定された改修後のソースコードを元に、システムの更新にかかる改修コストと保守コストとの算出方法を規定する算出基準に従って、改修コスト及び保守コストを算出するコスト算出部１０４とを備えている。【選択図】図１
2014174728.tif 000002
【特許請求の範囲】
【請求項１】
システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置であって、
更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、コードクローン検出部と、
前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、部品化レベル設定部と、
改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、改修後ソースコード推定部と、
推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、コスト算出部と、
を備えている、ことを特徴とするコスト算出装置。
【請求項２】
前記部品化レベル設定部が、複数のレベルを設定し、
前記改修後ソースコード推定部が、設定されたレベル毎に、改修後の前記ソースコードを推定し、
前記コスト算出部が、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
請求項１に記載のコスト算出装置。
【請求項３】
算出された前記改修コストと前記ホストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
更に備えている、請求項２に記載のコスト算出装置。
【請求項４】
前記改修後ソースコード推定部が、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
請求項１〜３のいずれかに記載のコスト算出装置。
【請求項５】
前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第１の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第２の単価を乗算して算出されている、
請求項１〜４のいずれかに記載のコスト算出装置。
【請求項６】
システムの更新にかかる改修コスト及び更新後の保守コストを算出するための方法であって、
（ａ）更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
（ｂ）前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
（ｃ）改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
（ｄ）推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を備えている、ことを特徴とするコスト算出方法。
【請求項７】
コンピュータによって、システムの更新にかかる改修コスト及び更新後の保守コストを算出するためのプログラムであって、
前記コンピュータに、
（ａ）更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
（ｂ）前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
（ｃ）改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
（ｄ）推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムを更新する際に、改修および保守にかかるコストを算出するためのコスト算出装置、コスト算出方法、及びそれらを実現するためのプログラムに関する。
【背景技術】
【０００２】
近年、企業においては、今まで使用されてきた旧システムをオープンプラットフォーム上で動作する新システムに更新する取り組みが行なわれている。そして、この取り組みとして、旧システムと同一の処理を行う新システムを開発する種々の手法が注目されている。これらの手法の特徴は、旧システムのソースコードを元に同一の処理を行なうソースコードを生成することにある。よって、従来のＳＩ（System Integration）作業と比べて、要件定義、設計段階での作業工数を減らすことができるので、結果的に新システムへの改修コスト（設計や実装、テストに伴い発生するコスト）が低くなる。
【０００３】
但し、長い保守期間を経ている旧システムでは、不具合の修正及び機能追加などの繰り返しにより、多くの場合、ソースコードが複雑化している。このため、単純にシステムリフォームの手法を適用しただけでは、保守性の低いプログラムが開発されることになり、結果的に新システムの保守コスト（不具合修正及び機能追加に伴い発生するコスト）が高くなってしまう。
【０００４】
一方、保守性の高いコードを開発するためには、旧システムの構造を再設計し、共通の処理については部品化してプログラムを単純化すること等、いわゆるリファクタリングが必要となる。このリファクタリングの度合いが多くなると、例えば、部品化の程度が多くなると、改修コストが高く、逆に保守コストが低くなり、新システムのコスト(改修コストと保守コストの合計)が変わることになる。よって、リファクタリングの度合いに応じたコスト見積りを行うことで、コストが低くなるようリファクタリングの度合いを決める必要になる。
【０００５】
一般的に、これら改修コスト及び保守コストの概算の見積りは、ソフトウェアの行数などの規模に応じて行なわれることが一般的である。例えば、特許文献１は、ソフトウェアプロダクトの保守を請け負う場合における保守コストの見積方法を開示している。特許文献１に開示された見積方法によれば、各エンティティの保守に必要となるコストと、エンティティ間の保守作業の影響を示すプロダクトモデルとに基づき、ソフトウェアプロダクトの保守コストの見積りを行なうことができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１５６８２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１は、保守コストの見積方法しか開示しておらず、旧システムから新システムに移行する際に必要となる改修コストの見積方法を開示していない。このため、リファクタリングの最適化を図りつつ、改修コストおよび保守コストを見積もることができる技術が求められている。
【０００８】
本発明の目的は、上記従来の問題を解消し、システムの改修コストおよび保守コストを算出すると共に、両コストを最も低くするリファクタリングの度合いを推定し得る、コスト算出装置、コスト算出方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の一側面におけるコスト算出装置は、システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置であって、
更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、コードクローン検出部と、
前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、部品化レベル設定部と、
改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、改修後ソースコード推定部と、
推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、コスト算出部と、
を備えている、ことを特徴とする。
【００１０】
また、上記目的を達成するため、本発明の一側面におけるコスト算出方法は、システムの更新にかかる改修コスト及び更新後の保守コストを算出するための方法であって、
（ａ）更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
（ｂ）前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
（ｃ）改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
（ｄ）推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を備えている、ことを特徴とする。
【００１１】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、コンピュータによって、システムの更新にかかる改修コスト及び更新後の保守コストを算出するためのプログラムであって、
前記コンピュータに、
（ａ）更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
（ｂ）前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
（ｃ）改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
（ｄ）推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１２】
以上のように、本発明によれば、システムの改修コストおよび保守コストを算出すると共に、両コストを最も低くするリファクタリングの度合いを推定することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の実施の形態におけるコスト算出装置の概略構成を示すブロック図である。
【図２】図２は、本発明の実施の形態におけるコスト算出装置の具体構成を示すブロック図である。
【図３】図３は、本発明の実施の形態で検出されるコードクローンの一例を示す図である。
【図４】図４は、本発明の実施の形態における部品化の一例を示す図である。
【図５】図５は、本発明の実施形態におけるコスト算出装置の動作の一例を示すフローチャートである。
【図６】図６は、図５に示したコスト算出処理を具体的に示すフローチャートである。
【図７】図７は、本発明の実施の形態におけるコスト算出装置１０を実現するコンピュータの一例を示すブロック図である。
【図８】図８は、本発明の実施例において生成されるコードクローン一覧の一例を示す図である。
【図９】図９は、本発明の実施例で用いる算出基準の一例を示す図である。
【図１０】図１０は、本発明の実施例における部品化レベルとコストとの組み合わせの一例を示す図である。
【発明を実施するための形態】
【００１４】
（実施の形態）
以下、本発明の実施の形態における、コスト算出装置、コスト算出方法、及びプログラムについて、図１〜図１０を参照しながら説明する。
【００１５】
［装置構成］
最初に、本実施の形態におけるコスト算出装置の構成について説明する。図１は、本発明の実施の形態におけるコスト算出装置の概略構成を示すブロック図である。
【００１６】
図１に示す、本実施の形態におけるコスト算出装置１０は、システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置である。図１に示すように、コスト算出装置１０は、コードクローン検出部１０１と、部品化レベル設定部１０２と、改修後ソースコード推定部１０３と、コスト算出部１０４とを備えている。
【００１７】
このうち、コードクローン検出部１０１は、更新対象となるシステムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する。部品化レベル設定部１０２は、コードクローンとして検出された箇所を部品としてまとめる際のレベル（以下「部品化レベル」と表記する。）を設定する。
【００１８】
また、改修後ソースコード推定部１０３は、改修前のソースコードに対して、設定された部品化レベルで部品化を行なった場合に得られる、改修後のソースコードを推定する。コスト算出部１０４は、推定された改修後のソースコードを元に、改修コストと保守コストとの算出方法を規定する算出基準に従って、改修コスト及び保守コストを算出する。
【００１９】
以上のように、コスト算出装置１０によれば、システムの改修コストおよび保守コストを算出することができる。また、コスト算出装置１０では、これらのコストの算出は、リファクタリングの度合いを表わす部品化レベルを設定して行なわれているので、レベル毎のコストの算出が可能になる。従って、コスト算出装置１０によれば、両コストを最も低くするリファクタリングの度合いを推定することもできる。
【００２０】
続いて、図２〜図４を用いて、本実施の形態におけるコスト算出装置の構成について更に具体的に説明する。図２は、本発明の実施の形態におけるコスト算出装置の具体構成を示すブロック図である。
【００２１】
図２に示すように、コスト算出装置１０は、コードクローン検出部１０１、部品化レベル設定部１０２、改修後ソースコード推定部１０３、及びコスト算出部１０４に加え、コスト算出基準蓄積部１０５と、部品化レベル選択部１０６とを更に備えている。また、本実施の形態では、コスト算出装置１０は、後述するように、コンピュータにプログラムを導入することによって構築されている。
【００２２】
更に、図２に示すように、本実施の形態では、コスト算出の対象となるソースコードは、外部の改修前ソースコード蓄積部３０に蓄積されている。また、本実施の形態は、図１の例と異なり、改修前ソースコードが改修前ソースコード蓄積部３０に蓄積されていない態様であっても良い。例えば、本実施の形態は、改修前ソースコードが、利用者２０の端末装置（図２において図示せず）から、インターネット等の通信ネットワークを介して、コスト算出装置１０に入力される態様であっても良い。
【００２３】
本実施の形態において、「改修前のソースコード」とは、企業で現在使用されているシステム（いわゆる旧システム）のソースコードのことである。「コードクローン」とは、ソースコード中の類似または一致した箇所の組み合わせのことである。また、コードクローンを構成する、類似または一致した箇所の組み合わせのうちの一片を「コード断片」とする。
【００２４】
図３は、本発明の実施の形態で検出されるコードクローンの一例を示す図である。図３の例では、ソースコードＡ及びソースコードＢにおける点線で囲まれた箇所が、コードクローンとなる。この場合、ソースコードＡおよびソースコードＢそれぞれ１個のコード断片がある。
【００２５】
また、図３の例では、Ｊａｖａ（登録商標）言語によって記述された２つのソースコードからコードクローンが検出されているが、本実施の形態では、コードクローンの検出元となるソースコードの記述言語は、Ｊａｖａ言語に限定されるものではない。
【００２６】
また、本実施の形態において、「部品化」とは、ソースコード中の、コードクローンとして検出された同一又は類似した箇所をまとめる処理をいい、例えば、一方のコード断片が他方のコード断片を呼び出せるように、コードを書き換えることをいう。
【００２７】
図４は、本発明の実施の形態における部品化の一例を示す図である。図４の例では、部品化により、ソースコードＢのコード断片は、ソースコードＡのコード断片の関数を呼び出すように修正されている。このように、部品化の例としては、コードクローンを構成するコード断片が関数呼び出しされるようにすることが挙げられる。
【００２８】
また、「部品化レベル」とは、部品化の度合いを示す尺度であり、本実施の形態では、部品化を行うに当たりどの程度のコードクローンを部品化するかを決める尺度である。具体的には、部品化レベルは、例えば、ソースコード中の全てのコードクローンに対する、部品化されるコードクローンの割合［％］で表わされる。この場合、全てのコードクローンに対して部品化を行った場合は、部品化レベルは１００％となり、コードクローンに対して部品化が行われなかった場合は、部品化はレベル０％となる。
【００２９】
また、本実施の形態において、「改修後ソースコード」とは、改修前ソースコードに対して、一定の部品化レベルで改修が行われたソースコードのことである。
【００３０】
コードクローン検出部１０１は、本実施の形態では、改修前ソースコード蓄積部３から、そこに蓄積されている改修前ソースコードを取得し、改修前ソースコード中のコードクローンを検出する。また、コードクローン検出部１０１は、検出したコードクローンの一覧（図７参照）を作成し、これを、改修前ソースコードと共に部品化レベル設定部１０３に送信する。
【００３１】
また、本実施の形態では、コードクローン検出部は、市販のツールを用いて構築されていても良い。具体的には、下記の参考文献に示されたツールが挙げられる。
【００３２】
［参考文献］
Toshihiro Kamiya, Shinji Kusumoto, and Katsuro Inoue, "CCFinder: A Multi-Linguistic Token-based Code Clone Detection System for Large Scale Source Code," IEEE Trans. Software Engineering, vol. 28, no. 7, pp. 654-670, (2002-7).
【００３３】
また、部品化レベル設定部１０２は、本実施の形態では、任意の刻み幅で、複数の部品化レベルを設定することができる。例えば、部品化レベル設定部１０２は、０％、１０％、２０％、・・・、１００％といったように、複数の部品化レベルを設定することができる更に、部品化レベル設定部１０２は、コードクローン検出部１０１から受信した改修前ソースコードとコードクローン一覧と共に、設定した部品化レベルを改修後ソースコード推定部１０３に通知する。
【００３４】
また、改修後ソースコード推定部１０３は、本実施の形態では、部品化レベル設定部１０２から送信されてきた、改修前ソースコード、コードクローン一覧、および部品化レベルに基づき、設定されたレベル毎に、改修後のソースレコードを推定する。更に、改修後ソースレコード推定部１０３は、推定した改修後のソースコードと、その部品化レベルとをコスト算出部１０４に送信する。
【００３５】
また、コスト算出基準蓄積部１０５は、改修コスト及び保守コストとの算出方法を規定する算出基準を蓄積している。コスト算出部１０４は、本実施の形態では、コスト算出基準蓄積部１０５から算出基準を取得して、改修コスト及び保守コストを算出する。
【００３６】
本実施の形態では、算出基準は、例えば、コスト算出装置１０を使用する企業等が保持する品質基準などのノウハウに基づいて設定され、改修コストを算出する式と保守コストを算出する式とで構成される。
【００３７】
具体的には、保守コストを算出する式としては、部品としてまとめられた箇所の個数に設定された単価を乗じて改修コストを算出する式が挙げられる。また、改修コストを算出する式としては、改修後のソースコードの行数に設定された単価を乗じて保守コストを算出する式が挙げられる。また、各式で算出されたコストの合計値が最終的なコストとなる。
【００３８】
また、コスト算出部１０４は、改修後のソースコードから、算出基準によるコストの計算に必要な計測単位の数をカウントし、カウントした値を算出基準に適用して、設定された部品化レベル毎に、改修コスト及び保守コストを算出する。更に、コスト算出部１０４は、改修コストと保守コストとの合計を算出することもできる。その後、コスト算出部１０４は、部品化レベル毎に、算出したコストと、算出時に設定された部品化レベルとの組み合わせを、部品化レベル選択部１０６に通知する。
【００３９】
部品化レベル選択部１０６は、コスト算出部１０４によって算出された改修コストとホストとの合計値が最も低くなる場合の部品化レベルを特定し、特定した部品化レベルとその場合の合計値とを、外部の利用者２０に提示する。即ち、本実施の形態では、改修コスト及び保守コストを含むコスト全体を最も低くする、最適な部品化レベルが、自動的に、利用者２０に提示される。なお、利用者２０への提示は、例えば、利用者の端末装置２１を介して行なわれる。
【００４０】
［装置動作］
次に、本発明の実施の形態におけるコスト算出装置１０の動作について図５及び図６を用いて説明する。また、本実施の形態では、コスト算出装置１０を動作させることによって、コスト算出方法が実施される。よって、本実施の形態におけるコスト算出方法の説明は、以下のコスト算出装置の動作説明に代える。また、以下の説明では、図１〜図４を適宜参酌する。
【００４１】
［装置動作：全体］
最初に、図５を用いて、コスト算出装置１０の動作全体について説明する。図５は、本発明の実施形態におけるコスト算出装置の動作の一例を示すフローチャートである。
【００４２】
図５に示すように、最初に、コードクローン検出部１０２は、改修前ソースコード蓄積部３に蓄積されている改修前ソースコードを取得し、改修前ソースコード中のコードクローンを検出する（ステップＳ１）。また、ステップＳ１では、コードクローン検出部１０２は、検出したコードクローンの一覧を生成し、この一覧と改修前のソースコードとを共に部品化レベル設定部１０３に送信する。
【００４３】
次に、部品化レベル設定部１０２、改修後ソースコード推定部１０３、及びコスト算出部１０４によって、コスト算出処理が実行される（ステップＳ２）。ステップＳ２が実行されると、コスト算出部１０４は、部品化レベル毎に、算出したコストと、算出時に設定された部品化レベルとの組み合わせを、部品化レベル選択部１０６に通知する。なお、ステップＳ２については、図６を用いて後述する。
【００４４】
次に、部品化レベル選択部１０６は、コスト算出部１０４から通知されたコストと部品化レベルとの組み合わせのうち、最もコストが低い組み合わせを選択し、そのコストと部品化レベルとを端末装置２１によって利用者２に提示する（ステップＳ３）。
【００４５】
［装置動作：コスト算出処理］
続いて、図５に示したコスト算出処理について図６を用いて更に具体的に説明する。図６は、図５に示したコスト算出処理を具体的に示すフローチャートである。
【００４６】
図６に示すように、まず、部品化レベル設定部１０２は、処理を行なう際の部品化レベルの初期値を設定する（ステップＳ２０１）。続いて、部品化レベル設定部１０２は、改修前のソースコード、コードクローンの一覧、および設定した部品化レベルを改修後ソースコード推定部１０３に渡す。
【００４７】
次に、改修後ソースコード推定部１０３は、設定された部品化レベルに従って、図４に示したように部品化を実行し、改修後のソースコードの推定を行う（ステップＳ２０２）。更に、改修後ソースレコード推定部１０３は、推定した改修後のソースコードと、その部品化レベルとをコスト算出部１０４に送信する。
【００４８】
具体的には、その後に利用者２０に対して改修後のソースコードの提示を行わないのであれば、ステップＳ２０２における推定処理では、改修後のソースコードの行数又はステップ数のみを算出するだけでも良い。この場合、処理時間の短縮化が可能となる。
【００４９】
次に、コスト算出部１０４は、コスト算出基準蓄積部１０５から算出基準（後述の図８参照）を取得する（ステップＳ２０３）。
【００５０】
次に、コスト算出部１０４は、改修後ソースコード推定部１０３から送信されてきた改修後のソースコードから、算出基準によるコストの計算に必要な計測単位の数をカウントする。そして、コスト算出部１０４は、カウントした値を算出基準に適用して、設定された部品化レベルにおける改修コスト及び保守コストを算出する（ステップＳ２０４）。
【００５１】
その後、コスト算出部１０４は、改修コストと保守コストとの合計値を算出し、算出したコストの合計値と、設定された部品化レベルとの組み合わせを、部品化レベル選択部１０６に通知する。
【００５２】
次に、部品化レベル設定部１０３は、全ての部品化レベルについて処理が行われたかどうかを判定する（ステップＳ２０５）。
【００５３】
ステップＳ２０５の判定の結果、未だ、全ての部品化レベルについて処理が行われていない場合（Ｓ２０５：Ｎｏの場合）は、部品化レベル設定部１０３は、部品化レベルの値を予め定められた刻み幅だけ増加させる（ステップＳ２０６）。その後、部品化レベル設定部１０３は、再度ステップＳ２０２を実行する。
【００５４】
一方、ステップＳ２０５の判定の結果、全ての部品化レベルについて処理が行われている場合（Ｓ２０５：Ｙｅｓの場合）は、部品化レベル設定部１０３は、コスト算出処理を終了する。その後、ステップＳ３が実行される。
【００５５】
［本実施の形態における効果］
以上のように、本実施の形態によれば、改修後のソースリストを推定することができるため、予め設定された算出基準を用いることで、確実に、ソースコードの改修に必要なコストと、改修後の保守作業に必要なコストとを算出することができる。また、これらを合計することで、全体のコストを算出することもできる。
【００５６】
また、本実施形態では、部品化レベルを変えながら、改修コストと保守コストとが自動的に算出されるので、改修コストと保守コストとを最も低下させる部品化レベルを簡単に特定でき、これを利用者に提示することができる。
【００５７】
［変形例］
上述の例では、部品化レベル選択部１０６は、利用者２０に対して、コストと部品化レベルとの２つの情報のみを提示するが、本実施の形態はこの例に限定されない。例えば、コスト算出部１０４から部品化レベル選択部１０６に通知される内容に、改修後のソースコードが含められるようにすれば、部品化レベル選択部１０６は、利用者２０に対して、改修後のソースコードの内容を提示することができる。
【００５８】
また、上述の例では、改修前のソースコードを記述しているプログラミング言語と、改修の後ソースコードを記述しているプログラミング言語とは、同一であるが、本実施の形態では、両言語は互いに異なっていても良い。つまり、改修前のソースコードの入力後に、ソースコードの言語変換処理が行なわれていても良い。
【００５９】
例えば、ＣＯＢＯＬ言語で記述されているシステムをＪａｖａ言語で記述されるシステムに改修する場合は、まず、コスト算出装置１０に、ＣＯＢＯＬ言語で記述されたソースコードが入力される。その後、Ｊａｖａ言語に変換する処理が行なわれた後に、変換後のソースコードに対して、ステップＳ１以降の処理が実行される。なお、この際の言語変換処理は、市販のツールを利用することによって実行できる。
【００６０】
［プログラム］
本実施の形態におけるプログラムは、コンピュータに、図５に示すステップＳ１〜Ｓ３、図６に示すステップＳ２０１〜Ｓ２０６を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態におけるコスト算出装置１０とコスト算出方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、コードクローン検出部１０１、部品化レベル設定部１０２、改修後ソースコード推定部１０３、コスト算出部１０４、部品化レベル選択部１０６部として機能し、処理を行なう。
【００６１】
ここで、本実施の形態におけるプログラムを実行することによって、コスト算出装置１０を実現するコンピュータについて図７を用いて説明する。図７は、本発明の実施の形態におけるコスト算出装置１０を実現するコンピュータの一例を示すブロック図である。
【００６２】
図７に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【００６３】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【００６４】
また、記憶装置１１３の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。
【００６５】
データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【００６６】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【実施例１】
【００６７】
続いて、図８〜図１０を用いて、本発明の実施例について説明する。なお、以下の実施例の説明は、図５及び図６に示した各ステップに沿って行う。
【００６８】
［ステップＳ１］
まず、コスト算出装置１０に改修前のソースコードが入力される。これにより、コードクローン検出部１０５が、コードクローンの検出を行ない、検出したコードクローンの一覧を生成する。本実施例では、合計行数が１００００行のソースコードが、改修前のソースコードとして入力されているとする。
【００６９】
また、ステップＳ１では、図８に示すコードクローンの一覧が生成される。図８は、本発明の実施例において生成されるコードクローン一覧の一例を示す図である。図８に示すように、コードクローンの一覧は、検出されたコードクローン毎に、それに付与された番号と、コードクローン中のコード断片の数と、コード断片の行数と、コードクローンの全行数とを登録している。
【００７０】
［ステップＳ２（Ｓ２０１〜Ｓ２０６）］
次に、コスト算出処理が実行される。まず、部品化レベル設定部１０２は、部品化レベルの初期値として０％を設定する（ステップＳ２０１）。
【００７１】
次に、改修後ソースコード推定部１０３は、部品化レベル０％における改修後ソースコードの推定を行う（ステップＳ２０２）。ここでは、部品化レベルは０％であるため、改修後ソースコード推定部１０３は、部品化を行なわないで、改修後のソースコードを推定する。
【００７２】
次に、コスト算出部１０４は、コスト算出基準蓄積部１０５から図９に示す算出基準を取得する（ステップＳ２０３）。図９は、本発明の実施例で用いる算出基準の一例を示す図である。図９の例では、算出基準として、「コスト＝改修コスト＋保守コスト」が示されている。また、図９に示す算出基準において、改修コストは、「部品化の個数×３万円（単価）」で算出され、保守コストは「改修後ソースコードの行数×１００円（単価）」で算出される。
【００７３】
次に、コスト算出部１０４が、コスト算出基準蓄積部１０５から取得した算出基準に従ってコストを算出し、算出したコストと部品化レベルとの組み合わせを部品化レベル選択部１０６に通知する（ステップＳ２０４）。
【００７４】
具体的には、改修コストは「部品化の個数×３万円」であるが、部品化レベルが０％であり、改修後のソースコードに対して部品化が行なわれていなので、改修コストは０円となる。また、保守コストは「改修後ソースコードの行数×１００円」であるが、部品化レベルが０％であるため、改修後のソースコードの行数は改修前のソースコードの行数と一致することになる。従って、保守コストは１００００行×１００円＝１００万円となる。
【００７５】
よって、部品化レベル０％におけるコストは、改修コスト＋保守コストとの合計で１００万円（＝０円＋１００万円）となる。このようにして得られた、算出後のコストと部品化レベルとの組み合わせが、部品化レベル選択部１０６に通知される。
【００７６】
次に、部品化レベル設定部１０２は、全ての部品化レベルについて処理が行われたかどうかを判定する（ステップＳ２０５）。ここでは、未だ全ての部品化レベルについて処理が行われていないため、部品化レベル設定部１０３は、次の処理の部品化レベルを１０％に変更し（ステップＳ２０６）、ステップＳ２０２を再度実行する。
【００７７】
次に、改修後ソースコード推定部１０３は、部品化レベル１０％における改修後のソースコードの推定を行う（ステップＳ２０２）。ここでは、部品化レベルが１０％であるため、改修後ソースコード推定部１０３は、図９に示すコードクローンのうち、コードクローンの行数が最も多いものから順に１０％分だけ部品化を行なう。図９の例では、コードクローンは１０個あるため、コードクローンの全行数が最も多い４番のコードクローンを部品化する。
【００７８】
具体的には、コードクローンの部品化は次のようにして実行される。まず、コードクローン中のコード断片のうち１個だけを残し、残りは部品化により行数が０となるものとする。即ち、部品化後のコードクローンの全行数は、１つのコード断片中の行数と一致する。よって、４番のコードクローンを部品化した場合は、コードクローンの部品化後の全行数は２１２行となる。
【００７９】
また、このときの改修後のソースコードの行数は、改修前のコードクローンの全行数から部品化により削減された行数を引いたものとなる。即ち、４番のコードクローンを部品化することによって、コードクローンの行数は６３６行から２１２行に削減されたため、改修後のソースコードの行数は、１００００行−（６３６行−２１２行）＝９５７６行となる。
【００８０】
次に、コスト算出部１０４は、コスト算出基準蓄積部１０５から図９に示す算出基準を取得する（ステップＳ２０３）。続いて、コスト算出部１０４は、取得した算出基準に従って改修コストと保守コストとを算出し、更に、両者の合計コストも算出する。その後、コスト算出部１０４は、算出したコストと部品化レベルとの組み合わせを部品化レベル選択部１０６に通知する（ステップＳ２０４）。
【００８１】
具体的には、改修コストは、部品化の個数は１個のため、１個×３万円＝３万円となる。また、保守コストは、改修後ソースコードの行数は上記の通り９５７６行のため、９５７６行×１００円＝９５万７６００円となる。従って、よって、部品化レベル１０％におけるコストの合計は、９８万７６００円（＝改修コスト＋保守コスト＝３万円＋９５万７６００円）となる。
【００８２】
以降、部品化レベルが１００％になるまで、ステップＳ２０２からＳ２０６の処理が繰り返される。部品化レベルを０％〜１００％まで１０％刻みで変化させたときのコストの算出結果と、そのときの部品化レベルとの組み合せは、図１０に示す通りとなる。図１０は、本発明の実施例における部品化レベルとコストとの組み合わせの一例を示す図である。
【００８３】
［ステップＳ３］
その後、部品化レベル選択部１０６は、コスト算出部１０４から通知されたコストと部品化レベルとの組み合わせのうち、最もコストが低い組み合わせを選択し、そのコストと部品化レベルとを端末装置２１によって利用者２０に提示する。
【００８４】
本実施例では、図１０に示す内容のうち、最もコストが低い、部品化レベル４０％とコスト９８万２０００円との組み合せが選択され、この組み合わせが利用者２０に提示される。
【００８５】
以上の本実施例におけるステップＳ１〜Ｓ３の実行により、ソースコードの改修に必要なコスト、及び改修後の保守作業に必要なコストが算出されると共に、コストを最も低くする部品化レベルの利用者への提示が行なわれる。
【００８６】
なお、上記の実施例では、部品化により、コードクローン中のコード断片のうち１個だけが残り、残りのコード断片の行数は０になったとして、部品化後のコードクローンの行数が算出されている。但し、本実施例は、上記に限定されず、より厳密にコード断片の重複している部分を特定した上で、部品化後のコードクローンの行数が算出されていても良い。また、部品化を行なった結果のソースコードの生成は、市販ツールを利用して行なわれていても良い。
【００８７】
以上、好ましい実施の形態および実施例を挙げて本発明を説明したが、本発明は必ずしも、上記の実施の形態および実施例に限定されるものではなく、その技術的思想の範囲内において様々に変形して実施することができる。その他、前記の装置構成やフローチャートは一例であり、任意に変更および修正が可能である。
【００８８】
上述した実施の形態及び実施例の一部又は全部は、以下に記載する（付記１）〜（付記１５）によって表現することができるが、以下の記載に限定されるものではない。
【００８９】
（付記１）
システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置であって、
更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、コードクローン検出部と、
前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、部品化レベル設定部と、
改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、改修後ソースコード推定部と、
推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、コスト算出部と、
を備えている、ことを特徴とするコスト算出装置。
【００９０】
（付記２）
前記部品化レベル設定部が、複数のレベルを設定し、
前記改修後ソースコード推定部が、設定されたレベル毎に、改修後の前記ソースコードを推定し、
前記コスト算出部が、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
付記１に記載のコスト算出装置。
【００９１】
（付記３）
算出された前記改修コストと前記ホストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
更に備えている、付記２に記載のコスト算出装置。
【００９２】
（付記４）
前記改修後ソースコード推定部が、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
付記１〜３のいずれかに記載のコスト算出装置。
【００９３】
（付記５）
前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第１の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第２の単価を乗算して算出されている、
付記１〜４のいずれかに記載のコスト算出装置。
【００９４】
（付記６）
システムの更新にかかる改修コスト及び更新後の保守コストを算出するための方法であって、
（ａ）更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
（ｂ）前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
（ｃ）改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
（ｄ）推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を備えている、ことを特徴とするコスト算出方法。
【００９５】
（付記７）
前記（ｂ）のステップにおいて、複数のレベルを設定し、
前記（ｃ）のステップにおいて、設定されたレベル毎に、改修後の前記ソースコードを推定し、
前記（ｄ）のステップにおいて、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
付記６に記載のコスト算出方法。
【００９６】
（付記８）
（ｅ）算出された前記改修コストと前記ホストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
更に有する、付記７に記載のコスト算出方法。
【００９７】
（付記９）
前記（ｃ）のステップにおいて、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
付記６〜８のいずれかに記載のコスト算出方法。
【００９８】
（付記１０）
前記（ｄ）のステップで用いる前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第１の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第２の単価を乗算して算出されている、
付記６〜９のいずれかに記載のコスト算出方法。
【００９９】
（付記１１）
コンピュータによって、システムの更新にかかる改修コスト及び更新後の保守コストを算出するためのプログラムであって、
前記コンピュータに、
（ａ）更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
（ｂ）前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
（ｃ）改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
（ｄ）推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を実行させるプログラム。
【０１００】
（付記１２）
前記（ｂ）のステップにおいて、複数のレベルを設定し、
前記（ｃ）のステップにおいて、設定されたレベル毎に、改修後の前記ソースコードを推定し、
前記（ｄ）のステップにおいて、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
付記１１に記載のプログラム。
【０１０１】
（付記１３）
（ｅ）算出された前記改修コストと前記ホストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
更に前記コンピュータに実行させる、付記１２に記載のプログラム。
【０１０２】
（付記１４）
前記（ｃ）のステップにおいて、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
付記１１〜１３のいずれかに記載のプログラム。
【０１０３】
（付記１５）
前記（ｄ）のステップで用いる前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第１の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第２の単価を乗算して算出されている、
付記１１〜１４のいずれかに記載のプログラム。
【産業上の利用可能性】
【０１０４】
以上のように、本発明によれば、システムの改修コストおよび保守コストを算出すると共に、両コストを最も低くするリファクタリングの度合いを推定することができる。本発明は、旧システムをオープンプラットフォーム上で動作する新システムに更新する取り組みにおいて有用である。
【符号の説明】
【０１０５】
１０  コスト算出装置
２０  利用者
２１  利用者の端末装置
３０  改修前ソースコード蓄積部
１０１  コードクローン検出部
１０２  部品化レベル設定部
１０３  改修後ソースコード推定部
１０４  コスト算出部
１０５  コスト算出基準蓄積部
１０６  部品化レベル選択部
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
【図１】
2014174728.tif 000003
【図２】
2014174728.tif 000004
【図３】
2014174728.tif 000005
【図４】
2014174728.tif 000006
【図５】
2014174728.tif 000007
【図６】
2014174728.tif 000008
【図７】
2014174728.tif 000009
【図８】
2014174728.tif 000010
【図９】
2014174728.tif 000011
【図１０】
2014174728.tif 000012