JP6682036B2 - 規模算出装置及び規模算出プログラム - Google Patents

規模算出装置及び規模算出プログラム Download PDF

Info

Publication number
JP6682036B2
JP6682036B2 JP2019500101A JP2019500101A JP6682036B2 JP 6682036 B2 JP6682036 B2 JP 6682036B2 JP 2019500101 A JP2019500101 A JP 2019500101A JP 2019500101 A JP2019500101 A JP 2019500101A JP 6682036 B2 JP6682036 B2 JP 6682036B2
Authority
JP
Japan
Prior art keywords
refactoring
function
strength
scale
influence
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
JP2019500101A
Other languages
English (en)
Other versions
JPWO2018150505A1 (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of JPWO2018150505A1 publication Critical patent/JPWO2018150505A1/ja
Application granted granted Critical
Publication of JP6682036B2 publication Critical patent/JP6682036B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

この発明は、ソフトウェア(以下、S/W)のリファクタリングの規模を見積もる技術に関する。
ソースコードの流用を繰り返すと、ソースコードの継ぎ足しによりS/W構造が当初の想定と異なり煩雑になる。煩雑0になったS/W構造を整えるために、外部から見たS/Wの挙動を変更することなく、S/W内部構造を改善するリファクタリングが実施される。
リファクタリングを実施する前に、リファクタリングに必要な改造規模を算出し、費用対効果を見極める必要がある。リファクタリングの規模とは、改造に必要なソースコードライン数や開発工数等である。
リファクタリングの規模見積りの方法としては、過去の経験に基づきファンクションポイント法又はWBS(Work Breakdown Structure)により行う方法がある。しかし、この方法では、熟練者以外が正確な見積りをすることは難しい。また、S/Wの複雑化及び大規模化により、大量ソースコードに対して人の手で改造規模を見積もることは困難である。
設計情報から機械的に改造規模を見積もる方法がある。特許文献1,2には、モジュール単位の依存関係を元に、改造の影響が波及するモジュールの規模の総和を算出する方法が記載されている。
特開2013−45421号公報 特開2013−196433号公報
しかし、特許文献1,2に記載された方法では、モジュールの規模単位の見積りしかできない。
この発明は、適切にリファクタリングの規模の見積りをできるようにすることを目的とする。
この発明に係る規模算出装置は、
ソースコードに含まれる関数の依存強度を特定するソースコード解析部と、
リファクタリングによって他のサブシステムに移動する移動関数を特定し、前記移動関数について前記ソースコード解析部によって特定された依存強度から、前記リファクタリングの影響がある依存強度を特定する影響解析部と、
前記影響解析部によって特定された影響を受ける依存強度に基づき、前記リファクタリングの規模を算出する規模算出部と
を備える。
この発明では、S/Wの関数間の依存強度を用いて、リファクタリングの規模の見積りをする。これにより、適切にリファクタリングの規模の見積りをすることが可能である。
実施の形態1に係る規模算出装置10の構成図。 実施の形態1に係る規模算出装置10の動作の流れを示す図。 実施の形態1に係るソースコード31の例を示す図。 実施の形態1に係る、図3に示すソースコード31のS/W構成要素間の依存関係の例を示す図。 実施の形態1に係る、図3に示すソースコード31の関数依存強度対応表32を示す図。 実施の形態1に係る、図3に示すソースコード31の前関数サブシステム対応表33を示す図。 実施の形態1に係る、図6に示す前関数サブシステム対応表33から作成された後関数サブシステム対応表34を示す図。 実施の形態1に係る、図7に示す後関数サブシステム対応表34に基づく、影響依存強度表35を示す図。 実施の形態1に係る、図3に示すソースコード31をリファクタリングした後のソースコード31を示す図。 変形例1に係る規模算出装置10の構成図。 実施の形態2に係る規模算出装置10の構成図。 実施の形態2に係る規模算出装置10の動作の流れを示す図。 実施の形態2に係る、図3に示すソースコード31の前サブシステム間依存関係表38を示す図。 実施の形態2に係る、図3に示すソースコード31と、図7に示す後関数サブシステム対応表34とに基づく、後サブシステム間依存関係表39を示す図。 実施の形態3に係る規模算出装置10の動作の流れを示す図。 実施の形態3に係る、図7に示す後関数サブシステム対応表34に基づく、関数影響依存強度表41を示す図。 実施の形態4に係る規模算出装置10の動作の流れを示す図。
実施の形態1.
***構成の説明***
図1を参照して、実施の形態1に係る規模算出装置10の構成を説明する。
規模算出装置10は、コンピュータである。
規模算出装置10は、プロセッサ11と、メモリ12と、ストレージ13と、通信インタフェース14とのハードウェアを備える。プロセッサ11は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
プロセッサ11は、プロセッシングを行うIC(Integrated Circuit)である。プロセッサ11は、具体例としては、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)である。
メモリ12は、データを一時的に記憶する記憶装置である。メモリ12は、具体例としては、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)である。
ストレージ13は、データを保管する記憶装置である。ストレージ13は、具体例としては、HDD(Hard Disk Drive)である。また、ストレージ13は、SD(登録商標,Secure Digital)メモリカード、CF(CompactFlash)、NANDフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ(登録商標)ディスク、DVD(Digital Versatile Disk)といった可搬記憶媒体であってもよい。
通信インタフェース14は、外部の装置と通信するためのインタフェースである。通信インタフェース14は、具体例としては、Ethernet(登録商標)、USB(Universal Serial Bus)、HDMI(登録商標,High−Definition Multimedia Interface)のポートである。
規模算出装置10は、機能構成要素として、ソースコード解析部21と、影響解析部22と、規模算出部23とを備える。ソースコード解析部21と、影響解析部22と、規模算出部23との機能はソフトウェアにより実現される。
ストレージ13には、ソースコード解析部21と、影響解析部22と、規模算出部23との機能を実現するプログラムが記憶されている。このプログラムは、プロセッサ11によりメモリ12に読み込まれ、プロセッサ11によって実行される。これにより、ソースコード解析部21と、影響解析部22と、規模算出部23との機能が実現される。
図1では、プロセッサ11は、1つだけ示されている。しかし、規模算出装置10は、プロセッサ11を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、ソースコード解析部21と、影響解析部22と、規模算出部23との機能を実現するプログラムの実行を分担する。それぞれのプロセッサは、プロセッサ11と同じように、プロセッシングを行うICである。
***動作の説明***
図2を参照して、実施の形態1に係る規模算出装置10の動作を説明する。
実施の形態1に係る規模算出装置10の動作は、実施の形態1に係る規模算出方法に相当する。また、実施の形態1に係る規模算出装置10の動作は、実施の形態1に係る規模算出プログラムの処理に相当する。
<ソースコード解析部21の処理>
ソースコード解析部21は、通信インタフェース14を介してソースコード31の入力を受け付け、メモリ12に書き込む。ソースコード解析部21は、受け付けたソースコード31からS/Wの構成要素間の依存関係を抽出する。そして、ソースコード解析部21は、ソースコード31に含まれる関数毎に依存強度を集計して、関数の依存強度を示す関数依存強度対応表32を生成する。また、ソースコード解析部21は、関数に対応するサブシステムを示す前関数サブシステム対応表33を生成する。ソースコード解析部21は、関数依存強度対応表32及び前関数サブシステム対応表33を、メモリ12に書き込む。
ソースコード31は、S/W、すなわちコンピュータプログラムの元となる文字の羅列である。つまり、ソースコード31は、コンピュータに対する一連の指示が記述されたものである。S/Wの構成要素は、ソースコードに記述された要素である。S/Wの構成要素は、例えば、関数、変数、ファイル、マクロである。S/Wの構成要素間の依存関係は、S/Wの構成要素間に定義された関係である。S/Wの構成要素間の依存関係は、例えば、インクルード、マクロ及び関数の呼び出し、変数への書込み、変数の参照である。依存強度は、依存する回数である。
図3から図5を参照して、関数依存強度対応表32の生成処理を説明する。
まず、ソースコード解析部21は、図3に示すソースコード31から、図4に示すS/W構成要素間の依存関係を抽出する。
図4に示すように、S/W構成要素間の依存関係は、依存元のS/Wの構成要素毎に、依存先のS/Wの構成要素と、依存種類と、依存強度とを示す。
具体例としては、図4の1行目は、図3に示すソースコード31において、依存元のS/W構成要素であるファイルfile1.cから依存先のS/W構成要素であるファイルfile1.hへの「インクルード」という依存種別の依存関係の依存強度が1であることを示している。また、図4の5行目は、図3に示すソースコード31において、依存元のS/W構成要素であるファイルfile1.cの関数func_I_B()から依存先のS/W構成要素であるファイルfile1.cの変数val_Iへの「変数の参照」という依存種別の依存関係の依存強度が2であることを示している。
次に、ソースコード解析部21は、図4に示すS/W構成要素間の依存関係に基づき、関数毎に依存強度を集計して、図5に示す関数依存強度対応表32を生成する。
図5に示すように、関数依存強度対応表32は、関数毎に、関数の与依存に関する与依存強度と、関数の被依存に関する依存強度とを示す。与依存とは、対象となるS/W構成要素が依存元となる依存関係を指す。被依存とは、対象となるS/W構成要素が依存先となる依存関係を指す。
具体例としては、図5の2行目は、ファイルfile1.cの関数func_I_B()の与依存強度と被依存強度とを示す。ファイルfile1.cの関数func_I_B()は、図4の3行目と4行目と5行目とで依存元となっている。そのため、ファイルfile1.cの関数func_I_B()の与依存強度は、図4の3行目と4行目と5行目との依存強度を足し合わせた4となっている。また、ファイルfile1.cの関数func_I_B()は、図4において依存先となっていない。そのため、ファイルfile1.cの関数func_I_B()の被依存強度は、0となっている。
図3及び図6を参照して、前関数サブシステム対応表33の生成処理を説明する。
ソースコード解析部21は、図3に示すソースコード31から、関数と、関数が所属するサブシステムとを抽出して、図6に示す前関数サブシステム対応表33を生成する。
図6に示すように、前関数サブシステム対応表33は、関数毎に、所属するサブシステムを示す。具体例としては、図6の1行目は、ファイルfile1.cの関数func_I_A()がサブシステムIに所属することを示す。
なお、ソースコード解析部21は、関数がどのサブシステムに所属するかの情報は、ソースコードのコメントに記載された情報から読み取ってもよいし、外部から入力された関数とサブシステムとの対応に関するルールを元に生成してもよい。関数とサブシステムの対応に関するルールとは、例えば関数が所属しているファイルとサブシステムとの対応表である。
<影響解析部22の処理>
影響解析部22は、リファクタリングによって他のサブシステムに移動する関数である移動関数を特定する。そして、影響解析部22は、移動関数についてソースコード解析部21によって特定された依存強度から、リファクタリングの影響がある依存強度を示す影響依存強度表35を生成する。
具体的には、影響解析部22は、関数依存強度対応表32と、前関数サブシステム対応表33と、前関数サブシステム対応表33から生成された後関数サブシステム対応表34とをメモリ12から読み出す。影響解析部22は、前関数サブシステム対応表33と、前関数サブシステム対応表33から生成された後関数サブシステム対応表34とを比較して、移動関数を特定する。そして、影響解析部22は、ソースコード解析部21によって生成された関数依存強度対応表32に基づき、移動関数に対してリファクタリングの影響がある依存強度を特定して、影響依存強度表35を生成する。影響解析部22は、生成された影響依存強度表35をメモリ12に書き込む。
図6及び図7を参照して、移動関数の特定処理を説明する。
影響解析部22は、図6に示す前関数サブシステム対応表33と、図7に示す後関数サブシステム対応表34との変更箇所を特定することにより、移動関数を特定する。
図7に示すように、後関数サブシステム対応表34は、図6に示す前関数サブシステム対応表33を元に、リファクタリングによりサブシステム間を移動する関数を、移動元のサブシステムから移動先のサブシステムに変更して作成された表である。後関数サブシステム対応表34は、リファクタリングの内容に応じて作業者等により作成される。具体例としては、図7の1行目は、ファイルfile1.cの関数func_I_A()が、サブシステムIIに移動されることを示す。
なお、後関数サブシステム対応表34は、前関数サブシステム対応表33の情報を含んでもよい。後関数サブシステム対応表34が前関数サブシステム対応表33の情報を含めば、影響解析部22は、後関数サブシステム対応表34だけを参照して、移動関数を特定することができる。
図5から図8を参照して、影響依存強度表35の生成処理を説明する。
影響解析部22は、移動関数について特定された依存強度の総計を、影響を受ける依存強度として特定して、影響依存強度表35を生成する。
図8に示すように、影響依存強度表35は、サブシステム間の移動が発生する移動関数の被依存強度の総計と与依存強度の総計とを示す。
具体例としては、図6及び図7から分かるように、ファイルfile1.cの関数func_I_A()のみがサブシステム間の移動を行う移動関数である。そのため、与依存強度の総計は図5のファイルfile1.cの関数func_I_A()の与依存強度を示す1となる。また、被依存強度の総計は、図5のファイルfile1.cの関数func_I_A()の被依存強度を示す2となる。
<規模算出部23の処理>
規模算出部23は、影響解析部22によって特定された影響がある依存強度に基づき、リファクタリングの規模を算出して、リファクタリングの規模を示す規模見積り結果37を生成する。
具体的には、規模算出部23は、影響依存強度表35をメモリ12から読み出す。規模算出部23は、影響依存強度表35が示す影響を受ける依存強度に、係数36を乗じて、リファクタリングの規模を示す規模見積り結果37を生成する。例えば、規模算出部23は、影響依存強度表35における被依存強度の総計と与依存強度の総計とのそれぞれに係数36を掛けることでリファクタリングの規模を算出する。規模算出部23は、規模見積り結果37を通信インタフェース14を介して出力する。
係数36は、依存強度からリファクタリング規模を見積もるために使用する値である。係数36は、作業者が過去の経験から設定されてもよいし、一部のサンプルに実際にリファクタリングを行った結果に基づき、算出されてもよい。係数36は、被依存強度の総計と与依存強度の総計とについて異なる値が設定されてもよい。
***実施の形態1の効果***
以上のように、実施の形態1に係る規模算出装置10は、S/Wの関数間の依存強度を用いて、リファクタリングの規模の見積りをする。これにより、大規模なソースコード31に対しても、機械的かつ高精度にリファクタリングの規模の見積りをすることが可能である。
図3及び図9を参照して、依存強度とリファクタリング規模の関係を説明する。
図9に示すリファクタリング後のソースコード31と、図3に示すリファクタリング前のソースコード31とを比較する。すると、図9に示すリファクタリング後のソースコード31では、サブシステムIのファイルfile1.cの関数func_I_A()が、サブシステムIIのファイルfile2.cに移動されている。また、サブシステムを移動したため、関数func_I_A()の関数名がfunc_II_A()に変更されている。
リファクタリングのために必要な改造として、関数func_I_A()のインタフェースの変更がある。この変更は、関数func_I_A()を使用しているファイルfile1.cの関数func_I_B()の1箇所と、ファイルfile2.cの関数func_II_C()の1箇所の計2箇所について行われる。この改造規模は、図5の関数func_I_A()の被依存強度と相関関係を持つと考えられる。
また、リファクタリングのために必要な改造として、関数func_II_A()からファイルfile1.cの静的変数val_Iへのアクセスのためのインタフェースの変更がある。具体的には、図9のファイルfile1.cの関数get_val_I()が作成され、関数func_II_A()の1箇所が変更される。この改造規模は、図5の関数func_I_A()の与依存強度と相関関係を持つと考えられる。
これらの相関関係を係数によって表現することで、依存強度からリファクタリング規模を算出することが可能である。
***他の構成***
<変形例1>
実施の形態1では、規模算出装置10のソースコード解析部21と、影響解析部22と、規模算出部23との機能がソフトウェアで実現された。しかし、変形例1として、ソースコード解析部21と、影響解析部22と、規模算出部23との機能はハードウェアで実現されてもよい。この変形例1について、実施の形態1と異なる点を説明する。
図10を参照して、変形例1に係る規模算出装置10の構成を説明する。
ソースコード解析部21と、影響解析部22と、規模算出部23との機能がハードウェアで実現される場合、規模算出装置10は、プロセッサ11とメモリ12とストレージ13とに代えて、処理回路15を備える。処理回路15は、ソースコード解析部21と、影響解析部22と、規模算出部23との機能と、メモリ12とストレージ13との機能とを実現する専用の電子回路である。
処理回路15は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA(Gate Array)、ASIC(Application Specific Integrated Circuit)、FPGA(Field−Programmable Gate Array)が想定される。
ソースコード解析部21と、影響解析部22と、規模算出部23との機能を1つの処理回路15で実現してもよいし、ソースコード解析部21と、影響解析部22と、規模算出部23との機能を複数の処理回路15に分散させて実現してもよい。
<変形例2>
変形例2として、一部の機能がハードウェアで実現され、他の機能がソフトウェアで実現されてもよい。つまり、ソースコード解析部21と、影響解析部22と、規模算出部23とのうち、一部の機能がハードウェアで実現され、他の機能がソフトウェアで実現されてもよい。
プロセッサ11とメモリ12とストレージ13と処理回路15とを、総称して「プロセッシングサーキットリー」という。つまり、各機能構成要素の機能は、プロセッシングサーキットリーにより実現される。
実施の形態2.
実施の形態2は、リファクタリングの効果を算出する点が実施の形態1と異なる。実施の形態2では、この異なる点を説明し、同一の点については説明を省略する。
***構成の説明***
図11を参照して、実施の形態2に係る規模算出装置10の構成を説明する。
規模算出装置10は、効果算出部24を備える点が図1に示す規模算出装置10と異なる。効果算出部24は、他の機能構成要素と同様にソフトウェアによって実現される。また、効果算出部24は、他の機能構成要素と同様にハードウェアによって実現されてもよい。
***動作の説明***
図12を参照して、実施の形態2に係る規模算出装置10の動作を説明する。
実施の形態2に係る規模算出装置10の動作は、実施の形態2に係る規模算出方法に相当する。また、実施の形態2に係る規模算出装置10の動作は、実施の形態2に係る規模算出プログラムの処理に相当する。
<ソースコード解析部21の処理>
ソースコード解析部21は、関数依存強度対応表32及び前関数サブシステム対応表33に加えて、前サブシステム間依存関係表38を生成する。ソースコード解析部21は、図3に示すソースコード31からS/W構成要素に関するサブシステム間の依存関係と依存強度とを特定して、図13に示す前サブシステム間依存関係表38を生成する。
具体的には、ソースコード解析部21は、ソースコード31の各サブシステムを依存元とし、依存元以外の各サブシステムを依存先として、依存先のサブシステムのS/W構成要素に依存する依存元のサブシステムのS/W構成要素を抽出する。ソースコード解析部21は、抽出されたS/W構成要素の依存強度の総計を、依存元のサブシステムの依存先のサブシステムに対する依存強度として特定する。ソースコード解析部21は、各サブシステム間について、特定された依存強度を示す前サブシステム間依存関係表38を生成する。ソースコード解析部21は、生成された前サブシステム間依存関係表38をメモリ12に書き込む。
図13に示すように、前サブシステム間依存関係表38は、依存元のサブシステムと、依存先のサブシステムと、依存強度とを示す。具体例としては、図13の2行目は、サブシステムIIからサブシステムIへの依存強度が2であることを示している。図13の2行目の依存強度は、サブシステムIIのS/W構成要素がサブシステムIのS/W構成要素に依存している依存強度の合計である。したがって、図13の2行目の依存強度は、図4の6行目と7行目の依存強度の総和に相当する。
<影響解析部22の処理>
影響解析部22は、影響依存強度表35に加え、後サブシステム間依存関係表39を生成する。影響解析部22は、ソースコード31と前サブシステム間依存関係表38とに基づき、リファクタリング後のS/W構成要素に関するサブシステム間の依存関係と依存強度とを特定して、後サブシステム間依存関係表39を生成する。
具体的には、影響解析部22は、ソースコード31と前サブシステム間依存関係表38とをメモリ12から読み出し、前サブシステム間依存関係表38を後サブシステム間依存関係表39として複製する。影響解析部22は、以下の(1)から(4)の処理を行い、後サブシステム間依存関係表39を生成する。影響解析部22は、生成された後サブシステム間依存関係表39をメモリ12に書き込む。
(1)影響解析部22は、各サブシステムを対象として、移動関数を移動させる前における、移動関数のS/W構成要素が依存する対象のサブシステムのS/W構成要素の数N1を、ソースコード31から特定する。影響解析部22は、後サブシステム間依存関係表39が示す、移動前に移動関数が所属するサブシステムから対象のサブシステムへの依存強度を、特定された数N1だけ減らす。
(2)影響解析部22は、各サブシステムを対象として、移動関数を移動させる前における、対象のサブシステムのS/W構成要素が依存する移動関数のS/W構成要素の数N2を特定する。影響解析部22は、後サブシステム間依存関係表39が示す、対象のサブシステムから移動前に移動関数が所属するサブシステムへの依存強度を、特定された数N2だけ減らす。
(3)影響解析部22は、各サブシステムを対象として、移動関数を移動させた後における、移動関数のS/W構成要素が依存する対象のサブシステムのS/W構成要素の数N3を、ソースコード31から特定する。影響解析部22は、後サブシステム間依存関係表39が示す、移動後に移動関数が所属するサブシステムから対象のサブシステムへの依存強度を、特定された数N3だけ増やす。
(4)影響解析部22は、各サブシステムを対象として、移動関数を移動させた後における、対象のサブシステムのS/W構成要素が依存する移動関数のS/W構成要素の数N4を特定する。後サブシステム間依存関係表39が示す、影響解析部22は、対象のサブシステムから移動後に移動関数が所属するサブシステムへの依存強度を、特定された数N4だけ増やす。
図14に示すように、図3に示すソースコード31を、図7に示す後関数サブシステム対応表34に従いリファクタリングした場合、サブシステムIからサブシステムIIへの依存強度が1になっている。つまり、図13に示す前サブシステム間依存関係表38では、サブシステムIのサブシステムIIへの依存強度が0であったが、図14では1増加している。
これは、リファクタリングにより、関数funcI_A()がサブシステムIからサブシステムIIに移動したためである。具体的には、サブシステムIのサブシステムIIへの依存強度1は、図9に示すリファクタリング後のソースコード31におけるファイルfile1.cの関数funcI_B()からファイルfile2.cの関数funcII_A()への依存強度1に相当する。
<効果算出部24の処理>
効果算出部24は、リファクタリング前のサブシステム間の依存強度と、前記リファクタリング後のサブシステム間の依存強度とから、リファクタリングの効果を示す効果見積り結果40を生成する。
具体的には、効果算出部24は、前サブシステム間依存関係表38と後サブシステム間依存関係表39とをメモリ12から読み出す。効果算出部24は、前サブシステム間依存関係表38が示すリファクタリング前のサブシステム間の依存強度と、後サブシステム間依存関係表39が示すリファクタリング後のサブシステム間の依存強度との比較結果又は差分をリファクタリングの効果として算出する。効果算出部24は、算出されたリファクタリングの効果を示す効果見積り結果40を生成する。効果算出部24は、生成された効果見積り結果40を通信インタフェース14を介して出力する。
***実施の形態2の効果***
以上のように、実施の形態2に係る規模算出装置10は、S/Wの関数間の依存強度を用いて、リファクタリングの効果の見積りをする。これにより、リファクタリングの費用対効果を算出することが可能になる。
実施の形態3.
実施の形態3では、関数単位のリファクタリングの規模を算出する点が実施の形態1と異なる。実施の形態3では、この異なる点を説明し、同一の点については説明を省略する。
***動作の説明***
図15を参照して、実施の形態3に係る規模算出装置10の動作を説明する。
実施の形態3に係る規模算出装置10の動作は、実施の形態3に係る規模算出方法に相当する。また、実施の形態3に係る規模算出装置10の動作は、実施の形態3に係る規模算出プログラムの処理に相当する。
<影響解析部22の処理>
影響解析部22は、影響依存強度表35に加えて、関数単位でリファクタリングの影響がある依存強度を示す関数影響依存強度表41を生成する。
具体的には、図16に示すように、影響解析部22は、関数依存強度対応表32から移動関数の行を抽出することにより、関数影響依存強度表41を生成する。影響解析部22は、生成された関数影響依存強度表41をメモリ12に書き込む。
<規模算出部23の処理>
規模算出部23は、規模見積り結果37に加えて、関数単位でリファクタリングの規模を示す関数規模見積り結果42を生成する。
具体的には、規模算出部23は、関数影響依存強度表41をメモリ12から読み出す。規模算出部23は、関数影響依存強度表41が示す関数毎の依存強度に、係数36を乗じて、関数毎のリファクタリングの規模を示す関数規模見積り結果42を生成する。
***実施の形態3の効果***
以上のように、実施の形態3に係る規模算出装置10は、関数単位のリファクタリングの規模を算出する。これにより、リファクタリングの対象とする関数の絞り込みを行うことができる。
実施の形態4.
実施の形態4は、複数のリファクタリングのパターンそれぞれについて、リファクタリングの規模を算出する点が実施の形態1と異なる。実施の形態4では、この異なる点を説明し、同一の点については説明を省略する。
***動作の説明***
図17を参照して、実施の形態4に係る規模算出装置10の動作を説明する。
実施の形態4に係る規模算出装置10の動作は、実施の形態4に係る規模算出方法に相当する。また、実施の形態4に係る規模算出装置10の動作は、実施の形態4に係る規模算出プログラムの処理に相当する。
図17は、パターンAとパターンBとの2つのリファクタリングのパターンについて、リファクタリングの規模を算出する例を示している。
<影響解析部22の処理>
影響解析部22は、複数のリファクタリングのパターンそれぞれを対象として、対象のパターンのリファクタリングによって他のサブシステムに移動する移動関数を特定する。そして、影響解析部22は、移動関数についてソースコード解析部21によって特定された依存強度から、対象のパターンのリファクタリングの影響がある依存強度を示す影響依存強度表35を生成する。
具体的には、影響解析部22は、前関数サブシステム対応表33と、対象のパターンの後関数サブシステム対応表34とを比較して、対象のパターンについての移動関数を特定する。そして、影響解析部22は、関数依存強度対応表32に基づき、移動関数に対してリファクタリングの影響がある依存強度を特定して、対象のパターンについての影響依存強度表35を生成する。
図17の例であれば、影響解析部22は、前関数サブシステム対応表33と後関数サブシステム対応表34Aとを比較して、パターンAについての移動関数を特定する。そして、影響解析部22は、関数依存強度対応表32に基づき、特定された移動関数に対してリファクタリングの影響がある依存強度を特定して、パターンAについての影響依存強度表35Aを生成する。同様に、影響解析部22は、前関数サブシステム対応表33と後関数サブシステム対応表34Bとを比較して、パターンBについての移動関数を特定する。そして、影響解析部22は、関数依存強度対応表32に基づき、特定された移動関数に対してリファクタリングの影響がある依存強度を特定して、パターンBについての影響依存強度表35Bを生成する。
<規模算出部23の処理>
規模算出部23は、複数のリファクタリングのパターンそれぞれを対象として、対象のパターンのリファクタリングについて、影響解析部22によって特定された影響がある依存強度に基づき、対象のパターンのリファクタリングについての規模を算出する。そして、各パターンのリファクタリングについての規模を示す規模見積り結果37を生成する。
なお、規模算出部23は、規模の最も大きい、又は、最も小さいパターンについての規模のみを示す規模見積り結果37を生成してもよい。
***実施の形態4の効果***
以上のように、実施の形態4に係る規模算出装置10は、複数のリファクタリングのパターンそれぞれについて、リファクタリングの規模を算出する。これにより、どのリファクタリングパターンが最も少ない工数で実施可能かといったことを検討可能である。
***他の構成***
<変形例3>
実施の形態2では、1つのリファクタリングのパターンについてリファクタリングの効果を算出した。実施の形態2と実施の形態4とを組み合わせ、複数のリファクタリングのパターンそれぞれについて、リファクタリングの効果を算出してもよい。
この場合、効果算出部24は、複数のリファクタリングのパターンそれぞれを対象として、リファクタリング前のサブシステム間の依存強度と、対象のパターンのリファクタリングをした後のサブシステム間の依存強度とから、対象のパターンのリファクタリングの効果を算出する。
<変形例4>
実施の形態3では、1つのリファクタリングのパターンについて関数単位のリファクタリングの規模を算出した。実施の形態3と実施の形態4とを組み合わせ、複数のリファクタリングのパターンそれぞれについて、関数単位のリファクタリングの規模を算出してもよい。
この場合、影響解析部22は、複数のリファクタリングのパターンそれぞれを対象として、対象のパターンのリファクタリングによって他のサブシステムに移動する移動関数を特定する。そして、影響解析部22は、対象のパターンのリファクタリングについて特定された移動関数毎に、対象のパターンのリファクタリングの影響がある依存強度を特定する。また、規模算出部23は、複数のパターンのリファクタリングそれぞれを対象として、対象のパターンのリファクタリングについて特定された移動関数毎に、その移動関数についての前記影響がある依存強度に基づき、その移動関数についての対象のパターンのリファクタリングの規模を算出する。
10 規模算出装置、11 プロセッサ、12 メモリ、13 ストレージ、14 通信インタフェース、15 処理回路、21 ソースコード解析部、22 影響解析部、23 規模算出部、24 効果算出部、31 ソースコード、32 関数依存強度対応表、33 前関数サブシステム対応表、34 後関数サブシステム対応表、35 影響依存強度表、36 係数、37 規模見積り結果、38 前サブシステム間依存関係表、39 後サブシステム間依存関係表、40 効果見積り結果、41 関数影響依存強度表、42 関数規模見積り結果。

Claims (12)

  1. ソースコードに含まれる関数の依存強度として、関数が他の関数に依存する与依存強度と、関数が他の関数から依存される被依存強度とを特定するソースコード解析部と、
    リファクタリングによって他のサブシステムに移動する移動関数を特定し、前記移動関数について前記ソースコード解析部によって特定された前記与依存強度及び前記被依存強度から、前記リファクタリングの影響がある依存強度を特定する影響解析部と、
    前記影響解析部によって特定された影響がある依存強度に基づき、前記リファクタリングの規模を算出する規模算出部と
    を備える規模算出装置。
  2. 前記影響解析部は、前記移動関数について特定された前記与依存強度の総計と、前記被依存強度の総計とを、前記影響がある依存強度として特定し、
    前記規模算出部は、前記与依存強度の総計に与依存係数を乗じるとともに、前記被依存強度の総計に被依存係数を乗じて、前記リファクタリングの規模を算出する
    請求項に記載の規模算出装置。
  3. 前記規模算出装置は、さらに、
    前記リファクタリング前のサブシステム間の依存強度と、前記リファクタリング後のサブシステム間の依存強度とから、前記リファクタリングの効果を算出する効果算出部
    を備える請求項1又は2に記載の規模算出装置。
  4. 前記影響解析部は、前記移動関数毎に、前記リファクタリングの影響がある依存強度を特定し、
    前記規模算出部は、前記移動関数毎に、その移動関数についての前記影響がある依存強度に基づき、その移動関数についての前記リファクタリングの規模を算出する
    請求項1からまでのいずれか1項に記載の規模算出装置。
  5. 前記影響解析部は、複数のリファクタリングそれぞれを対象として、対象のリファクタリングによって他のサブシステムに移動する移動関数を特定し、前記対象のリファクタリングの影響がある依存強度を特定し、
    前記規模算出部は、前記複数のリファクタリングそれぞれを対象として、対象のリファクタリングについての前記影響がある依存強度に基づき、前記対象のリファクタリングについての規模を算出する
    請求項1からまでのいずれか1項に記載の規模算出装置。
  6. 前記効果算出部は、複数のリファクタリングそれぞれを対象として、前記リファクタリング前のサブシステム間の依存強度と、対象のリファクタリングをした後のサブシステム間の依存強度とから、前記対象のリファクタリングの効果を算出する
    請求項に記載の規模算出装置。
  7. 前記影響解析部は、複数のリファクタリングそれぞれを対象として、対象のリファクタリングによって他のサブシステムに移動する移動関数を特定し、対象のリファクタリングについて特定された移動関数毎に、前記対象のリファクタリングの影響がある依存強度を特定し、
    前記規模算出部は、前記複数のリファクタリングそれぞれを対象として、対象のリファクタリングについて特定された移動関数毎に、その移動関数についての前記影響がある依存強度に基づき、その移動関数についての前記対象のリファクタリングの規模を算出する請求項に記載の規模算出装置。
  8. ソースコードに含まれる関数の依存強度として、関数が他の関数に依存する与依存強度と、関数が他の関数から依存される被依存強度とを特定するソースコード解析処理と、
    リファクタリングによって他のサブシステムに移動する移動関数を特定し、前記移動関数について前記ソースコード解析処理によって特定された前記与依存強度及び前記被依存強度から、前記リファクタリングの影響がある依存強度を特定する影響解析処理と、
    前記影響解析処理によって特定された影響がある依存強度に基づき、前記リファクタリングの規模を算出する規模算出処理と
    をコンピュータに実行させる規模算出プログラム。
  9. ソースコードに含まれる関数の依存強度を特定するソースコード解析部と、
    第1のサブシステムに対応する関数のうち、リファクタリングによって第2のサブシステムに移動した移動関数を特定し、前記移動関数について前記ソースコード解析部によって特定された依存強度から、前記移動関数と依存関係のあるインターフェースにおいて前記リファクタリングの影響がある依存強度を特定する影響解析部と、
    前記影響解析部によって特定された影響がある依存強度に基づき、前記リファクタリングに伴う前記インターフェースの変更規模を算出する規模算出部と
    を備える規模算出装置。
  10. 前記規模算出部は、前記影響解析部によって特定された影響がある依存強度との相関関係に基づき、前記リファクタリングの規模を算出する
    請求項9に記載の規模算出装置。
  11. 前記影響解析部は、前記移動関数と依存関係のある前記第1のサブシステムと前記第2のサブシステムとのインターフェースにおいて前記リファクタリングの影響がある依存強度を特定する
    請求項9又は10に記載の規模算出装置。
  12. ソースコードに含まれる関数の依存強度を特定するソースコード解析処理と、
    第1のサブシステムに対応する関数のうち、リファクタリングによって第2のサブシステムに移動した移動関数を特定し、前記移動関数について前記ソースコード解析処理によって特定された依存強度から、前記移動関数と依存関係のあるインターフェースにおいて前記リファクタリングの影響がある依存強度を特定する影響解析処理と、
    前記影響解析処理によって特定された影響がある依存強度に基づき、前記リファクタリングに伴う前記インターフェースの変更規模を算出する規模算出処理と
    をコンピュータに実行させる規模算出プログラム。
JP2019500101A 2017-02-16 2017-02-16 規模算出装置及び規模算出プログラム Active JP6682036B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2017/005666 WO2018150505A1 (ja) 2017-02-16 2017-02-16 規模算出装置及び規模算出プログラム

Publications (2)

Publication Number Publication Date
JPWO2018150505A1 JPWO2018150505A1 (ja) 2019-06-27
JP6682036B2 true JP6682036B2 (ja) 2020-04-15

Family

ID=63169893

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019500101A Active JP6682036B2 (ja) 2017-02-16 2017-02-16 規模算出装置及び規模算出プログラム

Country Status (4)

Country Link
US (1) US11379224B2 (ja)
JP (1) JP6682036B2 (ja)
GB (1) GB2573417B (ja)
WO (1) WO2018150505A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11301223B2 (en) * 2019-08-19 2022-04-12 International Business Machines Corporation Artificial intelligence enabled function logic infusion
US11755318B2 (en) 2019-08-28 2023-09-12 Mitsubishi Electric Corporation Proposing device and improvement proposing method

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001325100A (ja) * 2000-05-15 2001-11-22 Mitsubishi Electric Corp プログラム解析装置
JP3842592B2 (ja) 2001-07-26 2006-11-08 株式会社東芝 変更危険度測定システム、変更危険度測定方法及び変更危険度測定プログラム
US6804682B1 (en) * 2002-04-29 2004-10-12 Borland Software Corporation System and methodology providing compiler-assisted refactoring
US7451439B2 (en) * 2004-12-03 2008-11-11 Palo Alto Research Center Incorporated System and method for automatically identifying compound refactorings of program code through quantitative metric analysis
US8032876B2 (en) * 2007-07-05 2011-10-04 Cadence Design Systems, Inc. Method and apparatus for restructuring a software program hierarchy
JP5168279B2 (ja) * 2007-07-19 2013-03-21 富士通株式会社 アプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置
JP2009122754A (ja) * 2007-11-12 2009-06-04 Mitsubishi Electric Corp ソフトウェア開発支援装置
US8473902B2 (en) * 2009-08-07 2013-06-25 International Business Machines Corporation Identifying source code elements for refactoring
JP2011170697A (ja) 2010-02-19 2011-09-01 Panasonic Corp ソフトウェア構造分析装置
US8869127B2 (en) * 2011-01-03 2014-10-21 International Business Machines Corporation Refactoring programs for flexible locking
JP2013045421A (ja) 2011-08-26 2013-03-04 Toshiba Corp 保守度測定装置
JP2013196433A (ja) 2012-03-21 2013-09-30 Hitachi Systems Ltd 概算工数算出システム、概算工数の算出方法、およびプログラム
JP2014032466A (ja) 2012-08-01 2014-02-20 Ntt Comware Corp 複雑度算出装置、複雑度算出方法および複雑度算出プログラム
JP6076660B2 (ja) 2012-09-18 2017-02-08 富士電機株式会社 プログラム構造評価システム、プログラム
JP5791121B2 (ja) 2013-03-08 2015-10-07 Necソリューションイノベータ株式会社 コスト算出装置、コスト算出方法、及びプログラム
JP2016076080A (ja) 2014-10-06 2016-05-12 三菱電機株式会社 ソースコード解析装置、ソースコード解析方法、及びプログラム
JP6300710B2 (ja) 2014-12-04 2018-03-28 三菱電機株式会社 変更影響分析装置及び変更影響分析方法及びプログラム
US9740480B1 (en) * 2016-02-18 2017-08-22 King Fahd University Of Petroleum And Minerals Apparatus and methodologies for code refactoring

Also Published As

Publication number Publication date
GB2573417A (en) 2019-11-06
JPWO2018150505A1 (ja) 2019-06-27
US20210326130A1 (en) 2021-10-21
GB201908961D0 (en) 2019-08-07
WO2018150505A1 (ja) 2018-08-23
GB2573417B (en) 2021-11-24
US11379224B2 (en) 2022-07-05

Similar Documents

Publication Publication Date Title
US8578311B1 (en) Method and system for optimal diameter bounding of designs with complex feed-forward components
US8489380B2 (en) Satisfiability (SAT) based bounded model checkers
US8938703B1 (en) Method and apparatus for comprehension of common path pessimism during timing model extraction
WO2011037940A2 (en) Concurrent simulation of hardware designs with behavioral characteristics
US7765503B2 (en) Half cycle common path pessimism removal method
US10606970B2 (en) Selection of corners and/or margins using statistical static timing analysis of an integrated circuit
US10592703B1 (en) Method and system for processing verification tests for testing a design under test
US9003342B1 (en) Lumped aggressor model for signal integrity timing analysis
JP6682036B2 (ja) 規模算出装置及び規模算出プログラム
Tatsuoka et al. Physically aware high level synthesis design flow
JP5040625B2 (ja) Lsiの電力見積方法及びその装置
Goli et al. Through the looking glass: Automated design understanding of SystemC-based VPs at the ESL
JP2010033493A (ja) レイアウト配線混雑予測装置およびその方法、並びにプログラム
JP6789844B2 (ja) 類似関数抽出装置および類似関数抽出プログラム
JP5454349B2 (ja) 性能推定装置
US10223077B2 (en) Determination of signals for readback from FPGA
JP6512032B2 (ja) スタブ化対象判定装置、方法、及びプログラム
Kamal et al. Timing variation-aware custom instruction extension technique
US9600613B1 (en) Block-level code coverage in simulation of circuit designs
JP6548848B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
Rashid An efficient cycle accurate performance estimation model for hardware software co-design
US10503854B1 (en) Method and system for generating validation tests
WO2022239226A1 (ja) 組込み回路、回路品質確認装置、及び回路品質確認方法
US7971164B2 (en) Assessing resources required to complete a VLSI design
JP7091726B2 (ja) 情報処理装置,プログラム及び情報処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191029

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20191216

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200117

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: 20200225

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200324

R150 Certificate of patent or registration of utility model

Ref document number: 6682036

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250