JP5791121B2 - コスト算出装置、コスト算出方法、及びプログラム - Google Patents

コスト算出装置、コスト算出方法、及びプログラム Download PDF

Info

Publication number
JP5791121B2
JP5791121B2 JP2013046585A JP2013046585A JP5791121B2 JP 5791121 B2 JP5791121 B2 JP 5791121B2 JP 2013046585 A JP2013046585 A JP 2013046585A JP 2013046585 A JP2013046585 A JP 2013046585A JP 5791121 B2 JP5791121 B2 JP 5791121B2
Authority
JP
Japan
Prior art keywords
cost
source code
level
componentization
code
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.)
Active
Application number
JP2013046585A
Other languages
English (en)
Other versions
JP2014174728A (ja
Inventor
宮崎 徹
徹 宮崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Solutions Innovators Ltd
Original Assignee
NEC Solutions Innovators Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NEC Solutions Innovators Ltd filed Critical NEC Solutions Innovators Ltd
Priority to JP2013046585A priority Critical patent/JP5791121B2/ja
Priority to US14/772,789 priority patent/US20160019609A1/en
Priority to PCT/JP2014/054452 priority patent/WO2014136611A1/ja
Priority to CN201480013080.2A priority patent/CN105190546B/zh
Publication of JP2014174728A publication Critical patent/JP2014174728A/ja
Application granted granted Critical
Publication of JP5791121B2 publication Critical patent/JP5791121B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q30/00Commerce
    • G06Q30/02Marketing; Price estimation or determination; Fundraising
    • G06Q30/0283Price estimation or determination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Development Economics (AREA)
  • Theoretical Computer Science (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Strategic Management (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Entrepreneurship & Innovation (AREA)
  • General Business, Economics & Management (AREA)
  • Marketing (AREA)
  • Economics (AREA)
  • Game Theory and Decision Science (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Description

本発明は、システムを更新する際に、改修および保守にかかるコストを算出するためのコスト算出装置、コスト算出方法、及びそれらを実現するためのプログラムに関する。
近年、企業においては、今まで使用されてきた旧システムをオープンプラットフォーム上で動作する新システムに更新する取り組みが行なわれている。そして、この取り組みとして、旧システムと同一の処理を行う新システムを開発する種々の手法が注目されている。これらの手法の特徴は、旧システムのソースコードを元に同一の処理を行なうソースコードを生成することにある。よって、従来のSI(System Integration)作業と比べて、要件定義、設計段階での作業工数を減らすことができるので、結果的に新システムへの改修コスト(設計や実装、テストに伴い発生するコスト)が低くなる。
但し、長い保守期間を経ている旧システムでは、不具合の修正及び機能追加などの繰り返しにより、多くの場合、ソースコードが複雑化している。このため、単純にシステムリフォームの手法を適用しただけでは、保守性の低いプログラムが開発されることになり、結果的に新システムの保守コスト(不具合修正及び機能追加に伴い発生するコスト)が高くなってしまう。
一方、保守性の高いコードを開発するためには、旧システムの構造を再設計し、共通の処理については部品化してプログラムを単純化すること等、いわゆるリファクタリングが必要となる。このリファクタリングの度合いが多くなると、例えば、部品化の程度が多くなると、改修コストが高く、逆に保守コストが低くなり、新システムのコスト(改修コストと保守コストの合計)が変わることになる。よって、リファクタリングの度合いに応じたコスト見積りを行うことで、コストが低くなるようリファクタリングの度合いを決める必要になる。
一般的に、これら改修コスト及び保守コストの概算の見積りは、ソフトウェアの行数などの規模に応じて行なわれることが一般的である。例えば、特許文献1は、ソフトウェアプロダクトの保守を請け負う場合における保守コストの見積方法を開示している。特許文献1に開示された見積方法によれば、各エンティティの保守に必要となるコストと、エンティティ間の保守作業の影響を示すプロダクトモデルとに基づき、ソフトウェアプロダクトの保守コストの見積りを行なうことができる。
特開2007−156820号公報
しかしながら、特許文献1は、保守コストの見積方法しか開示しておらず、旧システムから新システムに移行する際に必要となる改修コストの見積方法を開示していない。このため、リファクタリングの最適化を図りつつ、改修コストおよび保守コストを見積もることができる技術が求められている。
本発明の目的は、上記従来の問題を解消し、システムの改修コストおよび保守コストを算出すると共に、両コストを最も低くするリファクタリングの度合いを推定し得る、コスト算出装置、コスト算出方法、及びプログラムを提供することにある。
上記目的を達成するため、本発明の一側面におけるコスト算出装置は、システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置であって、
更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、コードクローン検出部と、
前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、部品化レベル設定部と、
改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、改修後ソースコード推定部と、
推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、コスト算出部と、
を備えている、ことを特徴とする。
また、上記目的を達成するため、本発明の一側面におけるコスト算出方法は、システムの更新にかかる改修コスト及び更新後の保守コストを算出するための方法であって、
(a)更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
(b)前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
(c)改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
(d)推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を備えている、ことを特徴とする。
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、コンピュータによって、システムの更新にかかる改修コスト及び更新後の保守コストを算出するためのプログラムであって、
前記コンピュータに、
(a)更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
(b)前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
(c)改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
(d)推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を実行させることを特徴とする。
以上のように、本発明によれば、システムの改修コストおよび保守コストを算出すると共に、両コストを最も低くするリファクタリングの度合いを推定することができる。
図1は、本発明の実施の形態におけるコスト算出装置の概略構成を示すブロック図である。 図2は、本発明の実施の形態におけるコスト算出装置の具体構成を示すブロック図である。 図3は、本発明の実施の形態で検出されるコードクローンの一例を示す図である。 図4は、本発明の実施の形態における部品化の一例を示す図である。 図5は、本発明の実施形態におけるコスト算出装置の動作の一例を示すフローチャートである。 図6は、図5に示したコスト算出処理を具体的に示すフローチャートである。 図7は、本発明の実施の形態におけるコスト算出装置10を実現するコンピュータの一例を示すブロック図である。 図8は、本発明の実施例において生成されるコードクローン一覧の一例を示す図である。 図9は、本発明の実施例で用いる算出基準の一例を示す図である。 図10は、本発明の実施例における部品化レベルとコストとの組み合わせの一例を示す図である。
(実施の形態)
以下、本発明の実施の形態における、コスト算出装置、コスト算出方法、及びプログラムについて、図1〜図10を参照しながら説明する。
[装置構成]
最初に、本実施の形態におけるコスト算出装置の構成について説明する。図1は、本発明の実施の形態におけるコスト算出装置の概略構成を示すブロック図である。
図1に示す、本実施の形態におけるコスト算出装置10は、システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置である。図1に示すように、コスト算出装置10は、コードクローン検出部101と、部品化レベル設定部102と、改修後ソースコード推定部103と、コスト算出部104とを備えている。
このうち、コードクローン検出部101は、更新対象となるシステムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する。部品化レベル設定部102は、コードクローンとして検出された箇所を部品としてまとめる際のレベル(以下「部品化レベル」と表記する。)を設定する。
また、改修後ソースコード推定部103は、改修前のソースコードに対して、設定された部品化レベルで部品化を行なった場合に得られる、改修後のソースコードを推定する。コスト算出部104は、推定された改修後のソースコードを元に、改修コストと保守コストとの算出方法を規定する算出基準に従って、改修コスト及び保守コストを算出する。
以上のように、コスト算出装置10によれば、システムの改修コストおよび保守コストを算出することができる。また、コスト算出装置10では、これらのコストの算出は、リファクタリングの度合いを表わす部品化レベルを設定して行なわれているので、レベル毎のコストの算出が可能になる。従って、コスト算出装置10によれば、両コストを最も低くするリファクタリングの度合いを推定することもできる。
続いて、図2〜図4を用いて、本実施の形態におけるコスト算出装置の構成について更に具体的に説明する。図2は、本発明の実施の形態におけるコスト算出装置の具体構成を示すブロック図である。
図2に示すように、コスト算出装置10は、コードクローン検出部101、部品化レベル設定部102、改修後ソースコード推定部103、及びコスト算出部104に加え、コスト算出基準蓄積部105と、部品化レベル選択部106とを更に備えている。また、本実施の形態では、コスト算出装置10は、後述するように、コンピュータにプログラムを導入することによって構築されている。
更に、図2に示すように、本実施の形態では、コスト算出の対象となるソースコードは、外部の改修前ソースコード蓄積部30に蓄積されている。また、本実施の形態は、図1の例と異なり、改修前ソースコードが改修前ソースコード蓄積部30に蓄積されていない態様であっても良い。例えば、本実施の形態は、改修前ソースコードが、利用者20の端末装置(図2において図示せず)から、インターネット等の通信ネットワークを介して、コスト算出装置10に入力される態様であっても良い。
本実施の形態において、「改修前のソースコード」とは、企業で現在使用されているシステム(いわゆる旧システム)のソースコードのことである。「コードクローン」とは、ソースコード中の類似または一致した箇所の組み合わせのことである。また、コードクローンを構成する、類似または一致した箇所の組み合わせのうちの一片を「コード断片」とする。
図3は、本発明の実施の形態で検出されるコードクローンの一例を示す図である。図3の例では、ソースコードA及びソースコードBにおける点線で囲まれた箇所が、コードクローンとなる。この場合、ソースコードAおよびソースコードBそれぞれ1個のコード断片がある。
また、図3の例では、Java(登録商標)言語によって記述された2つのソースコードからコードクローンが検出されているが、本実施の形態では、コードクローンの検出元となるソースコードの記述言語は、Java言語に限定されるものではない。
また、本実施の形態において、「部品化」とは、ソースコード中の、コードクローンとして検出された同一又は類似した箇所をまとめる処理をいい、例えば、一方のコード断片が他方のコード断片を呼び出せるように、コードを書き換えることをいう。
図4は、本発明の実施の形態における部品化の一例を示す図である。図4の例では、部品化により、ソースコードBのコード断片は、ソースコードAのコード断片の関数を呼び出すように修正されている。このように、部品化の例としては、コードクローンを構成するコード断片が関数呼び出しされるようにすることが挙げられる。
また、「部品化レベル」とは、部品化の度合いを示す尺度であり、本実施の形態では、部品化を行うに当たりどの程度のコードクローンを部品化するかを決める尺度である。具体的には、部品化レベルは、例えば、ソースコード中の全てのコードクローンに対する、部品化されるコードクローンの割合[%]で表わされる。この場合、全てのコードクローンに対して部品化を行った場合は、部品化レベルは100%となり、コードクローンに対して部品化が行われなかった場合は、部品化はレベル0%となる。
また、本実施の形態において、「改修後ソースコード」とは、改修前ソースコードに対して、一定の部品化レベルで改修が行われたソースコードのことである。
コードクローン検出部101は、本実施の形態では、改修前ソースコード蓄積部3から、そこに蓄積されている改修前ソースコードを取得し、改修前ソースコード中のコードクローンを検出する。また、コードクローン検出部101は、検出したコードクローンの一覧(図7参照)を作成し、これを、改修前ソースコードと共に部品化レベル設定部103に送信する。
また、本実施の形態では、コードクローン検出部は、市販のツールを用いて構築されていても良い。具体的には、下記の参考文献に示されたツールが挙げられる。
[参考文献]
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).
また、部品化レベル設定部102は、本実施の形態では、任意の刻み幅で、複数の部品化レベルを設定することができる。例えば、部品化レベル設定部102は、0%、10%、20%、・・・、100%といったように、複数の部品化レベルを設定することができる更に、部品化レベル設定部102は、コードクローン検出部101から受信した改修前ソースコードとコードクローン一覧と共に、設定した部品化レベルを改修後ソースコード推定部103に通知する。
また、改修後ソースコード推定部103は、本実施の形態では、部品化レベル設定部102から送信されてきた、改修前ソースコード、コードクローン一覧、および部品化レベルに基づき、設定されたレベル毎に、改修後のソースレコードを推定する。更に、改修後ソースレコード推定部103は、推定した改修後のソースコードと、その部品化レベルとをコスト算出部104に送信する。
また、コスト算出基準蓄積部105は、改修コスト及び保守コストとの算出方法を規定する算出基準を蓄積している。コスト算出部104は、本実施の形態では、コスト算出基準蓄積部105から算出基準を取得して、改修コスト及び保守コストを算出する。
本実施の形態では、算出基準は、例えば、コスト算出装置10を使用する企業等が保持する品質基準などのノウハウに基づいて設定され、改修コストを算出する式と保守コストを算出する式とで構成される。
具体的には、保守コストを算出する式としては、部品としてまとめられた箇所の個数に設定された単価を乗じて改修コストを算出する式が挙げられる。また、改修コストを算出する式としては、改修後のソースコードの行数に設定された単価を乗じて保守コストを算出する式が挙げられる。また、各式で算出されたコストの合計値が最終的なコストとなる。
また、コスト算出部104は、改修後のソースコードから、算出基準によるコストの計算に必要な計測単位の数をカウントし、カウントした値を算出基準に適用して、設定された部品化レベル毎に、改修コスト及び保守コストを算出する。更に、コスト算出部104は、改修コストと保守コストとの合計を算出することもできる。その後、コスト算出部104は、部品化レベル毎に、算出したコストと、算出時に設定された部品化レベルとの組み合わせを、部品化レベル選択部106に通知する。
部品化レベル選択部106は、コスト算出部104によって算出された改修コストと保守コストとの合計値が最も低くなる場合の部品化レベルを特定し、特定した部品化レベルとその場合の合計値とを、外部の利用者20に提示する。即ち、本実施の形態では、改修コスト及び保守コストを含むコスト全体を最も低くする、最適な部品化レベルが、自動的に、利用者20に提示される。なお、利用者20への提示は、例えば、利用者の端末装置21を介して行なわれる。
[装置動作]
次に、本発明の実施の形態におけるコスト算出装置10の動作について図5及び図6を用いて説明する。また、本実施の形態では、コスト算出装置10を動作させることによって、コスト算出方法が実施される。よって、本実施の形態におけるコスト算出方法の説明は、以下のコスト算出装置の動作説明に代える。また、以下の説明では、図1〜図4を適宜参酌する。
[装置動作:全体]
最初に、図5を用いて、コスト算出装置10の動作全体について説明する。図5は、本発明の実施形態におけるコスト算出装置の動作の一例を示すフローチャートである。
図5に示すように、最初に、コードクローン検出部102は、改修前ソースコード蓄積部3に蓄積されている改修前ソースコードを取得し、改修前ソースコード中のコードクローンを検出する(ステップS1)。また、ステップS1では、コードクローン検出部102は、検出したコードクローンの一覧を生成し、この一覧と改修前のソースコードとを共に部品化レベル設定部103に送信する。
次に、部品化レベル設定部102、改修後ソースコード推定部103、及びコスト算出部104によって、コスト算出処理が実行される(ステップS2)。ステップS2が実行されると、コスト算出部104は、部品化レベル毎に、算出したコストと、算出時に設定された部品化レベルとの組み合わせを、部品化レベル選択部106に通知する。なお、ステップS2については、図6を用いて後述する。
次に、部品化レベル選択部106は、コスト算出部104から通知されたコストと部品化レベルとの組み合わせのうち、最もコストが低い組み合わせを選択し、そのコストと部品化レベルとを端末装置21によって利用者2に提示する(ステップS3)。
[装置動作:コスト算出処理]
続いて、図5に示したコスト算出処理について図6を用いて更に具体的に説明する。図6は、図5に示したコスト算出処理を具体的に示すフローチャートである。
図6に示すように、まず、部品化レベル設定部102は、処理を行なう際の部品化レベルの初期値を設定する(ステップS201)。続いて、部品化レベル設定部102は、改修前のソースコード、コードクローンの一覧、および設定した部品化レベルを改修後ソースコード推定部103に渡す。
次に、改修後ソースコード推定部103は、設定された部品化レベルに従って、図4に示したように部品化を実行し、改修後のソースコードの推定を行う(ステップS202)。更に、改修後ソースレコード推定部103は、推定した改修後のソースコードと、その部品化レベルとをコスト算出部104に送信する。
具体的には、その後に利用者20に対して改修後のソースコードの提示を行わないのであれば、ステップS202における推定処理では、改修後のソースコードの行数又はステップ数のみを算出するだけでも良い。この場合、処理時間の短縮化が可能となる。
次に、コスト算出部104は、コスト算出基準蓄積部105から算出基準(後述の図8参照)を取得する(ステップS203)。
次に、コスト算出部104は、改修後ソースコード推定部103から送信されてきた改修後のソースコードから、算出基準によるコストの計算に必要な計測単位の数をカウントする。そして、コスト算出部104は、カウントした値を算出基準に適用して、設定された部品化レベルにおける改修コスト及び保守コストを算出する(ステップS204)。
その後、コスト算出部104は、改修コストと保守コストとの合計値を算出し、算出したコストの合計値と、設定された部品化レベルとの組み合わせを、部品化レベル選択部106に通知する。
次に、部品化レベル設定部103は、全ての部品化レベルについて処理が行われたかどうかを判定する(ステップS205)。
ステップS205の判定の結果、未だ、全ての部品化レベルについて処理が行われていない場合(S205:Noの場合)は、部品化レベル設定部103は、部品化レベルの値を予め定められた刻み幅だけ増加させる(ステップS206)。その後、部品化レベル設定部103は、再度ステップS202を実行する。
一方、ステップS205の判定の結果、全ての部品化レベルについて処理が行われている場合(S205:Yesの場合)は、部品化レベル設定部103は、コスト算出処理を終了する。その後、ステップS3が実行される。
[本実施の形態における効果]
以上のように、本実施の形態によれば、改修後のソースリストを推定することができるため、予め設定された算出基準を用いることで、確実に、ソースコードの改修に必要なコストと、改修後の保守作業に必要なコストとを算出することができる。また、これらを合計することで、全体のコストを算出することもできる。
また、本実施形態では、部品化レベルを変えながら、改修コストと保守コストとが自動的に算出されるので、改修コストと保守コストとを最も低下させる部品化レベルを簡単に特定でき、これを利用者に提示することができる。
[変形例]
上述の例では、部品化レベル選択部106は、利用者20に対して、コストと部品化レベルとの2つの情報のみを提示するが、本実施の形態はこの例に限定されない。例えば、コスト算出部104から部品化レベル選択部106に通知される内容に、改修後のソースコードが含められるようにすれば、部品化レベル選択部106は、利用者20に対して、改修後のソースコードの内容を提示することができる。
また、上述の例では、改修前のソースコードを記述しているプログラミング言語と、改修の後ソースコードを記述しているプログラミング言語とは、同一であるが、本実施の形態では、両言語は互いに異なっていても良い。つまり、改修前のソースコードの入力後に、ソースコードの言語変換処理が行なわれていても良い。
例えば、COBOL言語で記述されているシステムをJava言語で記述されるシステムに改修する場合は、まず、コスト算出装置10に、COBOL言語で記述されたソースコードが入力される。その後、Java言語に変換する処理が行なわれた後に、変換後のソースコードに対して、ステップS1以降の処理が実行される。なお、この際の言語変換処理は、市販のツールを利用することによって実行できる。
[プログラム]
本実施の形態におけるプログラムは、コンピュータに、図5に示すステップS1〜S3、図6に示すステップS201〜S206を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態におけるコスト算出装置10とコスト算出方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、コードクローン検出部101、部品化レベル設定部102、改修後ソースコード推定部103、コスト算出部104、部品化レベル選択部106部として機能し、処理を行なう。
ここで、本実施の形態におけるプログラムを実行することによって、コスト算出装置10を実現するコンピュータについて図7を用いて説明する。図7は、本発明の実施の形態におけるコスト算出装置10を実現するコンピュータの一例を示すブロック図である。
図7に示すように、コンピュータ110は、CPU111と、メインメモリ112と、記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。
CPU111は、記憶装置113に格納された、本実施の形態におけるプログラム(コード)をメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。
また、記憶装置113の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。
データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
また、記録媒体120の具体例としては、CF(Compact Flash(登録商標))及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記憶媒体、又はCD−ROM(Compact Disk Read Only Memory)などの光学記憶媒体が挙げられる。
続いて、図8〜図10を用いて、本発明の実施例について説明する。なお、以下の実施例の説明は、図5及び図6に示した各ステップに沿って行う。
[ステップS1]
まず、コスト算出装置10に改修前のソースコードが入力される。これにより、コードクローン検出部105が、コードクローンの検出を行ない、検出したコードクローンの一覧を生成する。本実施例では、合計行数が10000行のソースコードが、改修前のソースコードとして入力されているとする。
また、ステップS1では、図8に示すコードクローンの一覧が生成される。図8は、本発明の実施例において生成されるコードクローン一覧の一例を示す図である。図8に示すように、コードクローンの一覧は、検出されたコードクローン毎に、それに付与された番号と、コードクローン中のコード断片の数と、コード断片の行数と、コードクローンの全行数とを登録している。
[ステップS2(S201〜S206)]
次に、コスト算出処理が実行される。まず、部品化レベル設定部102は、部品化レベルの初期値として0%を設定する(ステップS201)。
次に、改修後ソースコード推定部103は、部品化レベル0%における改修後ソースコードの推定を行う(ステップS202)。ここでは、部品化レベルは0%であるため、改修後ソースコード推定部103は、部品化を行なわないで、改修後のソースコードを推定する。
次に、コスト算出部104は、コスト算出基準蓄積部105から図9に示す算出基準を取得する(ステップS203)。図9は、本発明の実施例で用いる算出基準の一例を示す図である。図9の例では、算出基準として、「コスト=改修コスト+保守コスト」が示されている。また、図9に示す算出基準において、改修コストは、「部品化の個数×3万円(単価)」で算出され、保守コストは「改修後ソースコードの行数×100円(単価)」で算出される。
次に、コスト算出部104が、コスト算出基準蓄積部105から取得した算出基準に従ってコストを算出し、算出したコストと部品化レベルとの組み合わせを部品化レベル選択部106に通知する(ステップS204)。
具体的には、改修コストは「部品化の個数×3万円」であるが、部品化レベルが0%であり、改修後のソースコードに対して部品化が行なわれていなので、改修コストは0円となる。また、保守コストは「改修後ソースコードの行数×100円」であるが、部品化レベルが0%であるため、改修後のソースコードの行数は改修前のソースコードの行数と一致することになる。従って、保守コストは10000行×100円=100万円となる。
よって、部品化レベル0%におけるコストは、改修コスト+保守コストとの合計で100万円(=0円+100万円)となる。このようにして得られた、算出後のコストと部品化レベルとの組み合わせが、部品化レベル選択部106に通知される。
次に、部品化レベル設定部102は、全ての部品化レベルについて処理が行われたかどうかを判定する(ステップS205)。ここでは、未だ全ての部品化レベルについて処理が行われていないため、部品化レベル設定部103は、次の処理の部品化レベルを10%に変更し(ステップS206)、ステップS202を再度実行する。
次に、改修後ソースコード推定部103は、部品化レベル10%における改修後のソースコードの推定を行う(ステップS202)。ここでは、部品化レベルが10%であるため、改修後ソースコード推定部103は、図9に示すコードクローンのうち、コードクローンの行数が最も多いものから順に10%分だけ部品化を行なう。図9の例では、コードクローンは10個あるため、コードクローンの全行数が最も多い4番のコードクローンを部品化する。
具体的には、コードクローンの部品化は次のようにして実行される。まず、コードクローン中のコード断片のうち1個だけを残し、残りは部品化により行数が0となるものとする。即ち、部品化後のコードクローンの全行数は、1つのコード断片中の行数と一致する。よって、4番のコードクローンを部品化した場合は、コードクローンの部品化後の全行数は212行となる。
また、このときの改修後のソースコードの行数は、改修前のコードクローンの全行数から部品化により削減された行数を引いたものとなる。即ち、4番のコードクローンを部品化することによって、コードクローンの行数は636行から212行に削減されたため、改修後のソースコードの行数は、10000行−(636行−212行)=9576行となる。
次に、コスト算出部104は、コスト算出基準蓄積部105から図9に示す算出基準を取得する(ステップS203)。続いて、コスト算出部104は、取得した算出基準に従って改修コストと保守コストとを算出し、更に、両者の合計コストも算出する。その後、コスト算出部104は、算出したコストと部品化レベルとの組み合わせを部品化レベル選択部106に通知する(ステップS204)。
具体的には、改修コストは、部品化の個数は1個のため、1個×3万円=3万円となる。また、保守コストは、改修後ソースコードの行数は上記の通り9576行のため、9576行×100円=95万7600円となる。従って、よって、部品化レベル10%におけるコストの合計は、98万7600円(=改修コスト+保守コスト=3万円+95万7600円)となる。
以降、部品化レベルが100%になるまで、ステップS202からS206の処理が繰り返される。部品化レベルを0%〜100%まで10%刻みで変化させたときのコストの算出結果と、そのときの部品化レベルとの組み合せは、図10に示す通りとなる。図10は、本発明の実施例における部品化レベルとコストとの組み合わせの一例を示す図である。
[ステップS3]
その後、部品化レベル選択部106は、コスト算出部104から通知されたコストと部品化レベルとの組み合わせのうち、最もコストが低い組み合わせを選択し、そのコストと部品化レベルとを端末装置21によって利用者20に提示する。
本実施例では、図10に示す内容のうち、最もコストが低い、部品化レベル40%とコスト98万2000円との組み合せが選択され、この組み合わせが利用者20に提示される。
以上の本実施例におけるステップS1〜S3の実行により、ソースコードの改修に必要なコスト、及び改修後の保守作業に必要なコストが算出されると共に、コストを最も低くする部品化レベルの利用者への提示が行なわれる。
なお、上記の実施例では、部品化により、コードクローン中のコード断片のうち1個だけが残り、残りのコード断片の行数は0になったとして、部品化後のコードクローンの行数が算出されている。但し、本実施例は、上記に限定されず、より厳密にコード断片の重複している部分を特定した上で、部品化後のコードクローンの行数が算出されていても良い。また、部品化を行なった結果のソースコードの生成は、市販ツールを利用して行なわれていても良い。
以上、好ましい実施の形態および実施例を挙げて本発明を説明したが、本発明は必ずしも、上記の実施の形態および実施例に限定されるものではなく、その技術的思想の範囲内において様々に変形して実施することができる。その他、前記の装置構成やフローチャートは一例であり、任意に変更および修正が可能である。
上述した実施の形態及び実施例の一部又は全部は、以下に記載する(付記1)〜(付記15)によって表現することができるが、以下の記載に限定されるものではない。
(付記1)
システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置であって、
更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、コードクローン検出部と、
前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、部品化レベル設定部と、
改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、改修後ソースコード推定部と、
推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、コスト算出部と、
を備えている、ことを特徴とするコスト算出装置。
(付記2)
前記部品化レベル設定部が、複数のレベルを設定し、
前記改修後ソースコード推定部が、設定されたレベル毎に、改修後の前記ソースコードを推定し、
前記コスト算出部が、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
付記1に記載のコスト算出装置。
(付記3)
算出された前記改修コストと前記保守コストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
更に備えている、付記2に記載のコスト算出装置。
(付記4)
前記改修後ソースコード推定部が、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
付記1〜3のいずれかに記載のコスト算出装置。
(付記5)
前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第1の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第2の単価を乗算して算出されている、
付記1〜4のいずれかに記載のコスト算出装置。
(付記6)
システムの更新にかかる改修コスト及び更新後の保守コストを算出するための方法であって、
(a)更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
(b)前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
(c)改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
(d)推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を備えている、ことを特徴とするコスト算出方法。
(付記7)
前記(b)のステップにおいて、複数のレベルを設定し、
前記(c)のステップにおいて、設定されたレベル毎に、改修後の前記ソースコードを推定し、
前記(d)のステップにおいて、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
付記6に記載のコスト算出方法。
(付記8)
(e)算出された前記改修コストと前記保守コストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
更に有する、付記7に記載のコスト算出方法。
(付記9)
前記(c)のステップにおいて、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
付記6〜8のいずれかに記載のコスト算出方法。
(付記10)
前記(d)のステップで用いる前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第1の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第2の単価を乗算して算出されている、
付記6〜9のいずれかに記載のコスト算出方法。
(付記11)
コンピュータによって、システムの更新にかかる改修コスト及び更新後の保守コストを算出するためのプログラムであって、
前記コンピュータに、
(a)更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
(b)前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
(c)改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
(d)推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
を実行させるプログラム。
(付記12)
前記(b)のステップにおいて、複数のレベルを設定し、
前記(c)のステップにおいて、設定されたレベル毎に、改修後の前記ソースコードを推定し、
前記(d)のステップにおいて、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
付記11に記載のプログラム。
(付記13)
(e)算出された前記改修コストと前記保守コストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
更に前記コンピュータに実行させる、付記12に記載のプログラム。
(付記14)
前記(c)のステップにおいて、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
付記11〜13のいずれかに記載のプログラム。
(付記15)
前記(d)のステップで用いる前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第1の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第2の単価を乗算して算出されている、
付記11〜14のいずれかに記載のプログラム。
以上のように、本発明によれば、システムの改修コストおよび保守コストを算出すると共に、両コストを最も低くするリファクタリングの度合いを推定することができる。本発明は、旧システムをオープンプラットフォーム上で動作する新システムに更新する取り組みにおいて有用である。
10 コスト算出装置
20 利用者
21 利用者の端末装置
30 改修前ソースコード蓄積部
101 コードクローン検出部
102 部品化レベル設定部
103 改修後ソースコード推定部
104 コスト算出部
105 コスト算出基準蓄積部
106 部品化レベル選択部
110 コンピュータ
111 CPU
112 メインメモリ
113 記憶装置
114 入力インターフェイス
115 表示コントローラ
116 データリーダ/ライタ
117 通信インターフェイス
118 入力機器
119 ディスプレイ装置
120 記録媒体
121 バス

Claims (7)

  1. システムの更新にかかる改修コスト及び更新後の保守コストを算出するための装置であって、
    更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、コードクローン検出部と、
    前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、部品化レベル設定部と、
    改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、改修後ソースコード推定部と、
    推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、コスト算出部と、
    を備えている、ことを特徴とするコスト算出装置。
  2. 前記部品化レベル設定部が、複数のレベルを設定し、
    前記改修後ソースコード推定部が、設定されたレベル毎に、改修後の前記ソースコードを推定し、
    前記コスト算出部が、設定された前記レベル毎に、前記改修コスト及び前記保守コストを算出する、
    請求項1に記載のコスト算出装置。
  3. 算出された前記改修コストと前記保守コストとの合計値が最も低くなる場合の前記レベルを特定し、特定した前記レベルとその場合の前記合計値とを、外部に提示する、部品化レベル選択部を、
    更に備えている、請求項2に記載のコスト算出装置。
  4. 前記改修後ソースコード推定部が、改修後の前記ソースコードとして、改修後の前記ソースコードの行数又はステップ数を推定する、
    請求項1〜3のいずれかに記載のコスト算出装置。
  5. 前記算出基準において、前記改修コストは、部品としてまとめられた箇所の数に第1の単価を乗算して算出され、前記保守コストは、改修後の前記ソースコードの行数に第2の単価を乗算して算出されている、
    請求項1〜4のいずれかに記載のコスト算出装置。
  6. システムの更新にかかる改修コスト及び更新後の保守コストを算出するための方法であって、
    (a)更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
    (b)前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
    (c)改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
    (d)推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
    を備えている、ことを特徴とするコスト算出方法。
  7. コンピュータによって、システムの更新にかかる改修コスト及び更新後の保守コストを算出するためのプログラムであって、
    前記コンピュータに、
    (a)更新対象となる前記システムの改修前のソースコードに含まれる、同一又は類似した箇所の組み合せをコードクローンとして検出する、ステップと、
    (b)前記コードクローンとして検出された箇所を部品としてまとめる際のレベルを設定する、ステップと、
    (c)改修前の前記ソースコードに対して、設定された前記レベルで部品化を行なった場合に得られる、改修後の前記ソースコードを推定する、ステップと、
    (d)推定された改修後の前記ソースコードを元に、前記改修コストと前記保守コストとの算出方法を規定する算出基準に従って、前記改修コスト及び前記保守コストを算出する、ステップと、
    を実行させるプログラム。
JP2013046585A 2013-03-08 2013-03-08 コスト算出装置、コスト算出方法、及びプログラム Active JP5791121B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2013046585A JP5791121B2 (ja) 2013-03-08 2013-03-08 コスト算出装置、コスト算出方法、及びプログラム
US14/772,789 US20160019609A1 (en) 2013-03-08 2014-02-25 Cost computation device, cost computation method, and computer-readable recording medium
PCT/JP2014/054452 WO2014136611A1 (ja) 2013-03-08 2014-02-25 コスト算出装置、コスト算出方法、及びコンピュータ読み取り可能な記録媒体
CN201480013080.2A CN105190546B (zh) 2013-03-08 2014-02-25 成本计算装置、成本计算方法及计算机可读记录介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013046585A JP5791121B2 (ja) 2013-03-08 2013-03-08 コスト算出装置、コスト算出方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2014174728A JP2014174728A (ja) 2014-09-22
JP5791121B2 true JP5791121B2 (ja) 2015-10-07

Family

ID=51491132

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013046585A Active JP5791121B2 (ja) 2013-03-08 2013-03-08 コスト算出装置、コスト算出方法、及びプログラム

Country Status (4)

Country Link
US (1) US20160019609A1 (ja)
JP (1) JP5791121B2 (ja)
CN (1) CN105190546B (ja)
WO (1) WO2014136611A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170350718A1 (en) * 2016-06-03 2017-12-07 Toyota Motor Sales, U.S.A., Inc. Information-attainment system based on monitoring an occupant
JP6897111B2 (ja) * 2017-01-24 2021-06-30 株式会社リコー 管理装置、情報処理システム及び制御プログラム
WO2018150505A1 (ja) 2017-02-16 2018-08-23 三菱電機株式会社 規模算出装置及び規模算出プログラム
JP6892053B2 (ja) * 2018-12-10 2021-06-18 株式会社One Act Aiを使用したソースコード売買システム
JP7258158B2 (ja) * 2019-08-28 2023-04-14 三菱電機株式会社 改善提案装置、および、改善提案方法
CN111240740B (zh) * 2020-01-23 2021-09-17 复旦大学 基于演化历史分析的代码克隆危害性评估方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5189606A (en) * 1989-08-30 1993-02-23 The United States Of America As Represented By The Secretary Of The Air Force Totally integrated construction cost estimating, analysis, and reporting system
US6175957B1 (en) * 1997-12-09 2001-01-16 International Business Machines Corporation Method of, system for, and computer program product for providing efficient utilization of memory hierarchy through code restructuring
JP2001312419A (ja) * 2000-02-22 2001-11-09 Fujitsu Ltd ソフトウェア重複度評価装置およびソフトウェア重複度評価プログラムを記録した記録媒体
JP2004199119A (ja) * 2002-12-16 2004-07-15 Toshiba Corp ソフトウェアの開発・運用・保守コスト予測方法及びシステム
JP2006085663A (ja) * 2004-03-02 2006-03-30 Teikoku Databank Ltd ソフトウェア開発工数費用の評価装置
JP2005301859A (ja) * 2004-04-15 2005-10-27 Fujitsu Ltd コード検索プログラム及びコード検索装置
JP2007156820A (ja) * 2005-12-05 2007-06-21 Fujitsu Ltd 保守コスト見積プログラム、保守コスト見積方法および保守コスト見積装置
JP2009176064A (ja) * 2008-01-24 2009-08-06 Fuji Electric Holdings Co Ltd ソフトウェアリファクタリング支援装置および方法
JP5027765B2 (ja) * 2008-09-02 2012-09-19 新日鉄ソリューションズ株式会社 クローンコード検出装置、クローンコード検出方法及びプログラム
CN101697121A (zh) * 2009-10-26 2010-04-21 哈尔滨工业大学 一种基于程序源代码语义分析的代码相似度检测方法
US9110769B2 (en) * 2010-04-01 2015-08-18 Microsoft Technology Licensing, Llc Code-clone detection and analysis

Also Published As

Publication number Publication date
CN105190546B (zh) 2018-08-31
US20160019609A1 (en) 2016-01-21
CN105190546A (zh) 2015-12-23
JP2014174728A (ja) 2014-09-22
WO2014136611A1 (ja) 2014-09-12

Similar Documents

Publication Publication Date Title
JP5791121B2 (ja) コスト算出装置、コスト算出方法、及びプログラム
US20120311550A1 (en) Method for optimizing binary codes in language having access to zoned decimal type variable, optimization apparatus and computer program for the same
US9471468B2 (en) System, method, and computer program to improve the productivity of unit testing
JP6111543B2 (ja) 類似サブ時系列の抽出方法及び装置
WO2017188419A1 (ja) 計算資源管理装置、計算資源管理方法、及びコンピュータ読み取り可能な記録媒体
JP2019512126A (ja) 機械学習システムをトレーニングする方法及びシステム
JP6309795B2 (ja) 情報処理装置、情報処理方法およびプログラム
JP6366033B2 (ja) プログラム中のif文の最適化方法
US20150379410A1 (en) Method and apparatus for generating data in a missing segment of a time data sequence
CN106709621A (zh) 技术趋势预测方法及系统
JP2014123249A (ja) 情報処理装置、プログラム、及び情報処理方法
JP5560220B2 (ja) 工数見積装置、工数見積方法、工数見積プログラム
JP6471615B2 (ja) 性能情報生成プログラム、性能情報生成方法及び情報処理装置
JPWO2009011057A1 (ja) アプリケーション解析プログラム、アプリケーション解析方法およびアプリケーション解析装置
US20130030863A1 (en) Trend-based target setting for process control
JP2007179446A (ja) 情報処理装置及びその制御方法、並びにプログラム
JP5911831B2 (ja) 生産管理装置および生産管理プログラム
JP2018018197A (ja) ソースコード評価プログラム
JP5678729B2 (ja) 情報処理装置、作業重視度算出方法、および作業重視度算出プログラム
JP6677068B2 (ja) 実行時間推定装置、実行時間推定方法、及びプログラム
US20170083843A1 (en) Risk evaluation in parallelizing projects
JP7302434B2 (ja) コスト予測方法およびコスト予測プログラム
JP2018041262A (ja) コスト算出プログラム
WO2024029189A1 (ja) 開発支援システム
CN111967781B (zh) 系统改造的影响评估方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140707

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20150123

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150527

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150707

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150730

R150 Certificate of patent or registration of utility model

Ref document number: 5791121

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150