Traitement en cours

Veuillez attendre...

Paramétrages

Paramétrages

Aller à Demande

1. WO2021039110 - DISPOSITIF DE PROPOSITION D'AMÉLIORATION ET PROCÉDÉ DE PROPOSITION D'AMÉLIORATION

Document

明 細 書

発明の名称 改善提案装置、および、改善提案方法

技術分野

0001  

背景技術

0002   0003  

先行技術文献

特許文献

0004  

発明の概要

発明が解決しようとする課題

0005   0006  

課題を解決するための手段

0007   0008  

発明の効果

0009   0010   0011  

図面の簡単な説明

0012  

発明を実施するための形態

0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090   0091   0092   0093   0094   0095   0096   0097   0098   0099   0100   0101   0102   0103   0104   0105   0106   0107   0108   0109   0110   0111   0112   0113   0114   0115   0116   0117   0118   0119   0120   0121   0122   0123   0124   0125   0126   0127   0128   0129   0130   0131   0132   0133   0134   0135   0136   0137   0138   0139   0140   0141   0142   0143   0144   0145   0146   0147   0148   0149   0150   0151   0152   0153   0154   0155   0156   0157   0158   0159   0160   0161   0162   0163   0164   0165   0166   0167   0168   0169   0170   0171   0172   0173   0174   0175   0176   0177   0178   0179   0180   0181   0182   0183   0184   0185   0186   0187   0188   0189   0190   0191   0192   0193   0194   0195   0196   0197   0198   0199   0200   0201   0202   0203   0204   0205   0206   0207   0208   0209   0210   0211   0212   0213   0214   0215   0216   0217   0218   0219   0220   0221   0222   0223   0224   0225   0226   0227   0228   0229   0230   0231   0232   0233   0234   0235   0236  

符号の説明

0237  

請求の範囲

1   2   3   4   5   6   7   8   9   10   11   12   13  

図面

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32  

明 細 書

発明の名称 : 改善提案装置、および、改善提案方法

技術分野

[0001]
 本願明細書に開示される技術は、ソフトウェアのリファクタリングに関する改善提案装置、および、改善提案方法に関するものである。

背景技術

[0002]
 ソースコードの流用を繰り返すと、意図せず、設計が異なるソフトウェア構造となってしまう場合がある。
[0003]
 設計の意図に沿うソフトウェア構造(または、新規のソフトウェア構造)に整えるためには、一般に、設計の意図に反するソフトウェア構造を改善するリファクタリングが実施される(たとえば、特許文献1を参照)。

先行技術文献

特許文献

[0004]
特許文献1 : 国際公開第2018/150505号

発明の概要

発明が解決しようとする課題

[0005]
 特許文献1では、1つのリファクタリングの規模が、依存強度を用いて見積られている。しかしながら、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合もあり、特許文献1では、そのような場合は考慮されていない。
[0006]
 本願明細書に開示される技術は、以上に記載されたような問題を鑑みてなされたものであり、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、適切にリファクタリング作業を行うことによって目標のソフトウェア構造を実現する技術を提供することを目的とするものである。

課題を解決するための手段

[0007]
 本願明細書に開示される技術の第1の態様は、ソースコードから第1のソフトウェア構造を解析するソースコード解析部と、前記第1のソフトウェア構造とは異なるソフトウェア構造である第2のソフトウェア構造を入力する目標入力部と、前記第1のソフトウェア構造と、前記第2のソフトウェア構造との差分を改善対象として出力する構造比較部と、前記改善対象における改善部位ごとに、前記第1のソフトウェア構造を前記第2のソフトウェア構造に近付けるための方法である改善案を検討する改善案検討部を備える。
[0008]
 本願明細書に開示される技術の第2の態様は、ソースコードから第1のソフトウェア構造を解析し、前記第1のソフトウェア構造と、前記第1のソフトウェア構造とは異なるソフトウェア構造である第2のソフトウェア構造との差分を改善対象として出力し、前記改善対象における改善部位ごとに、前記第1のソフトウェア構造を前記第2のソフトウェア構造に近付けるための方法である改善案を検討する。

発明の効果

[0009]
 本願明細書に開示される技術の第1の態様によれば、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、現状のソフトウェア構造と目標のソフトウェア構造との差分である改善対象の一部である改善部位ごとに改善案を検討することによって、それぞれの改善案を選択してリファクタリングを行うことができるため、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、段階的にリファクタリングを行うことができる。
[0010]
 本願明細書に開示される技術の第2の態様によれば、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、現状のソフトウェア構造と目標のソフトウェア構造との差分である改善対象の一部である改善部位ごとに改善案を検討することによって、段階的にリファクタリングを行うことができる。
[0011]
 また、本願明細書に開示される技術に関連する目的と、特徴と、局面と、利点とは、以下に示される詳細な説明と添付図面とによって、さらに明白となる。

図面の簡単な説明

[0012]
[図1] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図2] 現状のソフトウェア構造の例を示す図である。
[図3] 現状のソフトウェア構造データベースの例を示す図である。
[図4] 目標のソフトウェア構造の例を示す図である。
[図5] 目標のソフトウェア構造データベースの例を示す図である。
[図6] 改善案の例を示す図である。
[図7] 図6に示された改善案を入力とする改善規模見積もり結果の例を示す図である。
[図8] 改善案と改善案の工数とを出力するためのフローチャートである。
[図9] 1つの改善部位に関する改善案を複数のパターンで出力するためのフローチャートである。
[図10] 1つの改善部位に関する改善案を複数のパターンで抽出する場合の例を示す図である。
[図11] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図12] 改善範囲を指定して改善案を出力するためのフローチャートである。
[図13] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図14] 改善対象に改善優先度を付与して改善案を出力するためのフローチャートである。
[図15] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図16] 実装案検討部で改善案を入力としてそれぞれの改善案の実装案を出力するためのフローチャートである。
[図17] 実装案の例を示す図である。
[図18] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図19] 実装案依存関係解析部で実装案を入力としてそれぞれの実装案の依存関係を解析し、統合実装案を出力するためのフローチャートである。
[図20] 改善案組み合わせ表の例を示す図である。
[図21] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図22] 改善案関連度算出部に入力された改善案に優先度を付与する、また、優先度が見直された改善案を出力するためのフローチャートである。
[図23] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図24] リファクタリングする工数が検討された改善案を出力するためのフローチャートである。
[図25] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図26] 改善単位検討部に入力された改善規模見積もり結果に対して改善セット案を出力するためのフローチャートである。
[図27] 実施の形態に関する、改善提案装置の構成の例を概念的に示す図である。
[図28] 改善実績データベースの例を示す図である。
[図29] 改善実績データベースを考慮した改善規模見積もり結果を出力するためのフローチャートである。
[図30] 作業者ごとの誤差を考慮した改善規模見積もり結果を出力するためのフローチャートである。
[図31] 図1などに例が示される改善提案装置を実際に運用する場合のハードウェア構成を概略的に例示する図である。
[図32] 図1などに例が示される改善提案装置を実際に運用する場合のハードウェア構成を概略的に例示する図である。

発明を実施するための形態

[0013]
 以下、添付される図面を参照しながら実施の形態について説明する。以下の実施の形態では、技術の説明のために詳細な特徴なども示されるが、それらは例示であり、実施の形態が実施可能となるためにそれらすべてが必ずしも必須の特徴ではない。
[0014]
 なお、図面は概略的に示されるものであり、説明の便宜のため、適宜、構成の省略、または、構成の簡略化が図面においてなされるものである。また、異なる図面にそれぞれ示される構成などの大きさおよび位置の相互関係は、必ずしも正確に記載されるものではなく、適宜変更され得るものである。また、断面図ではない平面図などの図面においても、実施の形態の内容を理解することを容易にするために、ハッチングが付される場合がある。
[0015]
 また、以下に示される説明では、同様の構成要素には同じ符号を付して図示し、それらの名称と機能とについても同様のものとする。したがって、それらについての詳細な説明を、重複を避けるために省略する場合がある。
[0016]
 また、以下に記載される説明において、ある構成要素を「備える」、「含む」または「有する」などと記載される場合、特に断らない限りは、他の構成要素の存在を除外する排他的な表現ではない。
[0017]
 また、以下に記載される説明において、「第1の」または「第2の」などの序数が用いられる場合があっても、これらの用語は、実施の形態の内容を理解することを容易にするために便宜上用いられるものであり、これらの序数によって生じ得る順序などに限定されるものではない。
[0018]
 <第1の実施の形態>
 以下、本実施の形態に関する改善提案装置、および、改善提案方法について説明する。
[0019]
 <改善提案装置の構成について>
 図1は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図1に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、規模算出部25とを備える。
[0020]
 目標入力部22の入力は、ソースコード解析部21の出力と接続される。構造比較部23の入力は、目標入力部22の出力と接続される。
[0021]
 改善案検討部24の入力は、構造比較部23の出力と接続される。規模算出部25の入力は、改善案検討部24の出力と接続される。
[0022]
 ソースコード解析部21は、ソースコード31を入力として受け付ける。ソースコード解析部21は、入力されたソースコード31から現状のソフトウェア構造を解析して抽出する。そして、ソースコード解析部21は、抽出された現状のソフトウェア構造を含む現状のソフトウェア構造データベース32を出力する。
[0023]
 現状のソフトウェア構造データベース32からは、ソースコードに記述されたソフトウェアの構成要素が抽出される。ソフトウェアの構成要素は、たとえば、関数、変数、大域変数、ファイルまたはマクロなどである。
[0024]
 また、現状のソフトウェア構造データベース32からは、ソフトウェアの構成要素間の依存種別および依存強度が抽出される。ソフトウェアの構成要素間の依存種別は、たとえば、インクルード、マクロおよび関数呼び出し、変数への書込み、または、大域変数参照などである。また、ソフトウェアの構成要素間の依存強度は、たとえば、ソフトウェアの同じ構成要素間で依存する回数などである。
[0025]
 図2は、現状のソフトウェア構造の例を示す図である。図2に例が示されるように、現状のソフトウェア構造はファイルA、ファイルBおよびファイルCを備える。本例では、ソフトウェア構造におけるA、B、Cはファイルとする。
[0026]
 また、矢印は依存関係を示す。矢印の始点が依存元であり、矢印の終点が依存先である。図2に示された例では、Aは、Bの依存元であり、Bの依存先であり、かつ、Cの依存元である。また、Bは、Aの依存元であり、Aの依存先であり、かつ、Cの依存元である。また、Cは、Aの依存先であり、Bの依存先である。
[0027]
 図3は、現状のソフトウェア構造データベースの例を示す図である。現状のソフトウェア構造データベースは、それぞれの行ごとに、依存に関わる構成要素、依存種別、および、依存強度に関する情報を格納している。
[0028]
 File_B/Func_B()関数の依存先のソフトウェア構成要素はFile_A/Val_A変数であり、依存種別は大域変数参照であり、依存強度は3である。
[0029]
 また、File_B/Func_B()関数の依存先のソフトウェア構成要素はFile_C/Func_C()関数であり、依存種別は関数呼び出しであり、依存強度は2である。
[0030]
 また、File_A/Func_A()関数の依存先のソフトウェア構成要素はFile_B/Func_B()関数であり、依存種別は関数呼び出しであり、依存強度は2である。
[0031]
 また、File_A/Func_A()関数の依存先のソフトウェア構成要素はFile_C/Func_C()関数であり、依存種別は関数呼び出しであり、依存強度は2である。
[0032]
 図1の目標入力部22は、目標のソフトウェア構造データベース33の入力として受け付ける。
[0033]
 図4は、目標のソフトウェア構造の例を示す図である。図4に例が示されるように、目標のソフトウェア構造はファイルA、ファイルBおよびファイルCを備える。本例では、ソフトウェア構造におけるA、B、Cはファイルとする。
[0034]
 また、矢印は依存関係を示す。矢印の始点が依存元であり、矢印の終点が依存先である。図4に示された例では、Aは、Bの依存元であり、Cの依存元である。また、Bは、Aの依存先である。また、Cは、Aの依存先である。
[0035]
 図5は、目標のソフトウェア構造データベースの例を示す図である。
[0036]
 File_A/Func_A()関数の依存先のソフトウェア構成要素はFile_B/Func_B()関数であり、依存種別は関数呼び出しであり、依存強度は2としている。
[0037]
 また、File_A/Func_A()関数の依存先のソフトウェア構成要素はFile_C/Func_C()関数であり、依存種別は関数呼び出しであり、依存強度は2としている。
[0038]
 図1の構造比較部23は、現状のソフトウェア構造データベース32と、目標のソフトウェア構造データベース33とを入力として受け付ける。そして、構造比較部23は、現状のソフトウェア構造データベース32と目標のソフトウェア構造データベース33とを比較して、その差分を改善対象34として出力する。ここで、構造比較部23が比較する対象はソフトウェア構成要素の依存関係である。
[0039]
 差分である改善対象34は、たとえば、図2および図4に示された例では、BからAへと伸びる矢印とBからCへと伸びる矢印とが相当する。
[0040]
 図1の改善案検討部24は、改善対象34を入力として受け付ける。そして、改善案検討部24は、改善対象34を入力として、現状のソフトウェア構造データベース32を目標のソフトウェア構造データベース33に改善するための方法(プログラム要素の移動、または、関数分解など)を依存種別(インクルード、または、大域変数参照など)と依存強度とのパターンから特定し、特定された結果を改善案35として出力する。ここで、改善するための方法は、たとえば、大域変数の参照箇所移動、関数の分解、または、関数の削除などである。
[0041]
 図6は、改善案の例を示す図である。図6においては、依存種別が大域変数参照であり、依存強度が3である、BからAへと伸びる矢印の削除を改善案とする。また、依存種別が関数呼び出しであり、依存強度が2である、BからCへと伸びる矢印の削除を改善案とする。
[0042]
 図1の規模算出部25は、改善案35を入力として受け付ける。そして、規模算出部25は、改善案35の工数を算出し、算出結果を改善規模見積もり結果36として出力する。
[0043]
 工数は、たとえば、依存種別ごとの工数と、依存強度または改善項目に関するモジュール数とを掛け合わせることで算出する。なお、依存種別ごとの工数は、改善の難易度に応じてあらかじめ数値が設定される。
[0044]
 図7は、図6に示された改善案を入力とする改善規模見積もり結果の例を示す図である。図7に例が示されるように、BからAへと伸びる矢印の削除に関する改善案の工数は、30時間となる。また、BからCへと伸びる矢印の削除に関する改善案の工数は、10時間となる。
[0045]
 図8は、改善案と改善案の工数とを出力するためのフローチャートである。図8に例が示されるように、まず、改善対象34が改善案検討部24に入力される(ステップST10)。
[0046]
 次に、改善案検討部24が、改善対象34から改善部位を抽出する(ステップST11)。改善部位は、改善対象の少なくとも一部に対応する。改善部位は、ソフトウェア構造(ソフトウェアアーキテクチャ)における、たとえば、変数の参照関係、または、関数の呼び出し関係などである。本実施の形態では、改善部位は、図2に示されたBからAへと伸びる矢印、および、BからCへと伸びる矢印のそれぞれとする。
[0047]
 次に、改善案検討部24が、抽出された改善部位に基づいて、改善部位ごとの改善案を作成する(ステップST12)。
[0048]
 次に、改善案検討部24が、改善部位が他にあるか否かを判定する(ステップST13)。そして、改善部位が他にある場合、すなわち、図8に例が示されるステップST13から分岐する「YES」に対応する場合には、ステップST11に戻って、改善案検討部24が他の改善部位を抽出する。一方で、改善部位が他にない場合、すなわち、図8に例が示されるステップST13から分岐する「NO」に対応する場合には、ステップST14に進む。
[0049]
 次に、改善案検討部24が、それぞれの改善部位に対応する改善案を含む改善案35を出力する(ステップST14)。
[0050]
 次に、規模算出部25が、改善案35から改善部位を抽出する(ステップST15)。そして、規模算出部25は、抽出された改善部位に対応する改善案の工数を算出する(ステップST16)。
[0051]
 次に、規模算出部25が、改善部位が他にあるか否かを判定する(ステップST17)。そして、改善部位が他にある場合、すなわち、図8に例が示されるステップST17から分岐する「YES」に対応する場合には、ステップST15に戻って、規模算出部25が改善案35から他の改善部位を抽出する。一方で、改善部位が他にない場合、すなわち、図8に例が示されるステップST17から分岐する「NO」に対応する場合には、ステップST18に進む。
[0052]
 次に、規模算出部25が、それぞれの改善部位に対応する改善案の工数を含む改善規模見積もり結果36を出力する(ステップST18)。
[0053]
 このように、現状のソフトウェア構造データベース32と目標のソフトウェア構造データベース33とから抽出された改善対象34のそれぞれの改善部位に対して改善案を作成し、さらに、それぞれの改善案の工数を改善規模見積もり結果36として出力することによって、改善部位ごとに改善案の工数(リファクタリング規模)を算出することができる。
[0054]
 <第2の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0055]
 <改善提案装置の構成について>
 第1の実施の形態では、目標のソフトウェア構造に改善するための1つの改善部位に関する改善案が1パターン提案されている場合が示された。
[0056]
 これに対し、改善案検討部24が1つの改善部位に関する改善案を複数のパターンで提示することができれば、リファクタリングを実施するための方法を複数のパターンから検討することが可能となる。そのため、リファクタリング作業者の能力、または、ソフトウェア構造によっては不向きな改善案となる場合を回避しやすくなる。
[0057]
 図9は、1つの改善部位に関する改善案を複数のパターンで出力するためのフローチャートである。図9に例が示されるように、まず、改善対象34が改善案検討部24に入力される(ステップST20)。
[0058]
 次に、改善案検討部24が、改善対象34から改善部位を抽出する(ステップST21)。次に、改善案検討部24が、抽出された改善部位に基づいて、改善案を作成する(ステップST22)。
[0059]
 次に、改善案検討部24が、当該改善部位に対して他に改善案があるか否かを判定する(ステップST23)。そして、改善案が他にある場合、たとえば、新規に違反が増えないような改善案が見つかった場合、すなわち、図9に例が示されるステップST23から分岐する「YES」に対応する場合には、ステップST22に戻って、改善案検討部24が他の改善案を抽出する。一方で、改善案が他にない場合、すなわち、図9に例が示されるステップST23から分岐する「NO」に対応する場合には、ステップST24に進む。
[0060]
 次に、改善案検討部24が、改善部位が他にあるか否かを判定する(ステップST24)。そして、改善部位が他にある場合、すなわち、図9に例が示されるステップST24から分岐する「YES」に対応する場合には、ステップST21に戻って、改善案検討部24が他の改善部位を抽出する。一方で、改善部位が他にない場合、すなわち、図9に例が示されるステップST24から分岐する「NO」に対応する場合には、ステップST25に進む。
[0061]
 次に、改善案検討部24が、改善案35を出力する(ステップST25)。なお、規模算出部25は、改善部位ごとに、複数の改善案の工数を算出する。
[0062]
 図10は、1つの改善部位に関する改善案を複数のパターンで抽出する場合の例を示す図である。ここで、図10における改善案の改善部位は、図2に示されたBからAへと伸びる矢印、および、図2に示されたBからCへと伸びる矢印それぞれとする。
[0063]
 図10に例が示されるように、図2に示されたBからAへと伸びる矢印の依存種別は大域変数参照とし、図2に示されたBからAへと伸びる矢印の依存強度は3とする。そして、図2に示されたBからAへと伸びる矢印の改善案は削除、または、移動とする。
[0064]
 また、図10に例が示されるように、図2に示されたBからCへと伸びる矢印の依存種別は関数呼び出しとし、図2に示されたBからCへと伸びる矢印の依存強度は2とする。そして、図2に示されたBからCへと伸びる矢印の改善案は削除、または、移動とする。
[0065]
 このように、1つの改善部位に関する改善案を複数のパターンから選択可能とすることによって、自由度の高いリファクタリングが可能となる。
[0066]
 <第3の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0067]
 <改善提案装置の構成について>
 第2の実施の形態では、1つの改善部位に関する改善案が複数のパターンで出力される場合が示された。
[0068]
 一方で、いずれかの改善対象34を優先して改善案を出力することも可能である。そのようにすることで、自由度の高いリファクタリングを実施することができる。
[0069]
 上記の優先する改善案を定めるために、本実施の形態では、優先して改善する改善対象34を指定する範囲である改善範囲を設定する。この改善範囲を用いることによって、複数のパターンからなる改善案のうちから、優先して改善したい改善対象の範囲内で絞り込まれた改善案を出力することができる。
[0070]
 図11は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図11に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、規模算出部25とを備える。
[0071]
 目標入力部22の入力は、ソースコード解析部21の出力と接続される。構造比較部23の入力は、目標入力部22の出力と接続される。
[0072]
 改善案検討部24の入力は、構造比較部23の出力と接続される。規模算出部25の入力は、改善案検討部24の出力と接続される。
[0073]
 改善案検討部24は、改善対象34と改善範囲41とを入力として受け付ける。また、改善範囲として指定される項目は、たとえば、ファイル、複数のファイルをまとめたフォルダ、または、依存種別などである。
[0074]
 ソースコード解析部21は、ソースコード31を入力として受け付ける。ソースコード解析部21は、入力されたソースコード31から現状のソフトウェア構造を抽出する。そして、ソースコード解析部21は、抽出された現状のソフトウェア構造を含む現状のソフトウェア構造データベース32を出力する。
[0075]
 図12は、改善範囲を指定して改善案を出力するためのフローチャートである。図12に例が示されるように、まず、改善対象34が改善案検討部24に入力される(ステップST30)。
[0076]
 次に、改善範囲41が改善案検討部24に入力される(ステップST31)。次に、改善案検討部24が、改善対象34から改善部位を抽出する(ステップST32)。
[0077]
 次に、改善案検討部24が、抽出された改善部位が、改善範囲41内の改善対象から抽出された改善部位であるか否かを判定する(ステップST33)。そして、改善部位が、改善範囲41内の改善対象から抽出された改善部位である場合、すなわち、図12に例が示されるステップST33から分岐する「YES」に対応する場合には、ステップST34に進む。一方で、改善部位が、改善範囲41内の改善対象から抽出された改善部位でない場合、すなわち、図12に例が示されるステップST33から分岐する「NO」に対応する場合には、ステップST36に進む。
[0078]
 次に、改善案検討部24が、改善範囲41内の改善対象から抽出された改善部位に基づいて、改善部位ごとの改善案を作成する(ステップST34)。
[0079]
 次に、改善案検討部24が、改善部位が他にあるか否かを判定する(ステップST35)。そして、改善部位が他にある場合、すなわち、図12に例が示されるステップST35から分岐する「YES」に対応する場合には、ステップST32に戻って、改善案検討部24が他の改善部位を抽出する。一方で、改善部位が他にない場合、すなわち、図12に例が示されるステップST35から分岐する「NO」に対応する場合には、ステップST36に進む。
[0080]
 次に、改善案検討部24が、それぞれの改善部位に対応する改善案を含む改善案35を出力する(ステップST36)。なお、規模算出部25は、改善範囲41内の改善部位ごとに、改善案の工数を算出する。
[0081]
 このように、改善範囲41を指定することによって、改善範囲41内で絞り込まれた改善部位に対する改善案を出力することができる。そのため、自由度の高いリファクタリングが可能となる。
[0082]
 <第4の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0083]
 <改善提案装置の構成について>
 第3の実施の形態では、改善範囲41で指定された項目以外は改善案35として出力されていないが、改善優先度を指定することによって、改善対象34に改善優先度が付与された改善案を出力することができる。
[0084]
 図13は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図11に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、規模算出部25とを備える。
[0085]
 目標入力部22の入力は、ソースコード解析部21の出力と接続される。構造比較部23の入力は、目標入力部22の出力と接続される。
[0086]
 改善案検討部24の入力は、構造比較部23の出力と接続される。規模算出部25の入力は、改善案検討部24の出力と接続される。
[0087]
 改善案検討部24は、改善対象34と改善優先度42とを入力として受け付ける。また、改善優先度は、たとえば、ファイル、複数のファイルをまとめたフォルダ、または、依存種別などである。
[0088]
 図14は、改善対象に改善優先度を付与して改善案を出力するためのフローチャートである。図14に例が示されるように、まず、改善対象34が改善案検討部24に入力される(ステップST40)。
[0089]
 次に、改善優先度42が改善案検討部24に入力される(ステップST41)。次に、改善案検討部24が、改善対象34から改善部位を抽出する(ステップST42)。
[0090]
 次に、改善案検討部24が、抽出された改善部位が、優先する項目に該当するか否かを判定する(ステップST43)。そして、改善部位が、優先する項目に該当する場合、すなわち、図14に例が示されるステップST43から分岐する「YES」に対応する場合には、ステップST44に進む。一方で、改善部位が、優先する項目に該当しない場合、すなわち、図14に例が示されるステップST43から分岐する「NO」に対応する場合には、ステップST46に進む。
[0091]
 次に、改善案検討部24が、改善部位に改善優先度を付与する(ステップST44)。改善優先度は、たとえば、高、中または低の3段階を付与する。
[0092]
 次に、改善案検討部24が、改善部位が他にあるか否かを判定する(ステップST45)。そして、改善部位が他にある場合、すなわち、図14に例が示されるステップST45から分岐する「YES」に対応する場合には、ステップST42に戻って、改善案検討部24が他の改善部位を抽出する。一方で、改善部位が他にない場合、すなわち、図14に例が示されるステップST45から分岐する「NO」に対応する場合には、ステップST46に進む。
[0093]
 次に、改善案検討部24が、改善優先度が考慮された改善案35を出力する(ステップST46)。改善優先度が考慮された改善案35とは、たとえば、改善優先度の高い複数の改善部位で構成された改善案、などである。なお、規模算出部25は、改善優先度に基づいて、改善部位ごとに改善案の工数を算出する。
[0094]
 このように、改善対象34に改善優先度が付与されることによって、改善部位の優先順序などを考慮しつつリファクタリングを行うことができる。
[0095]
 <第5の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0096]
 <改善提案装置の構成について>
 第4の実施の形態では、改善優先度が付与された改善案35を出力する場合が例示された。
[0097]
 一方で、改善案のみが示される態様では、改善の効果を確認するためには、ソースコードに実装する場合の具体的な態様である実装案を再度検討する必要が生じる場合がある。
[0098]
 そこで、改善案に基づいて、目標のソフトウェア構造を満たし、かつ、現状のソフトウェアと同等の動作が可能である少なくとも1つの実装案を提示することによって、効率的にリファクタリングを行うことができる。
[0099]
 図15は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図15に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、少なくとも1つの実装案38を出力する実装案検討部28とを備える。
[0100]
 目標入力部22の入力は、ソースコード解析部21の出力と接続される。構造比較部23の入力は、目標入力部22の出力と接続される。
[0101]
 改善案検討部24の入力は、構造比較部23の出力と接続される。実装案検討部28の入力は、改善案検討部24の出力と接続される。
[0102]
 図16は、実装案検討部28で改善案を入力としてそれぞれの改善案の実装案38を出力するためのフローチャートである。図16に例が示されるように、まず、改善案35が実装案検討部28に入力される(ステップST190)。
[0103]
 次に、実装案検討部28が、目標のソフトウェア構造データベース33を参照して、改善案35を用いて目標のソフトウェア構造を実現するパスを検索する(ステップST191)。たとえば、関数呼び出しを削除する場合は、迂回する呼び出しなどがパスとして考えられる。
[0104]
 次に、実装案検討部28が、検索されたパスごとに実装案38を作成する(ステップST192)。たとえば、パスが迂回である場合は、迂回する経路を実装案38として作成する。
[0105]
 次に、実装案検討部28が、目標のソフトウェア構造データベース33を参照して、改善案35を満たすモジュール移動を検索する(ステップST193)。たとえば、呼び出し元と呼び出し先とを同じモジュールに移動させる、などが考えられる。
[0106]
 次に、実装案検討部28が、検索されたモジュール移動ごとに実装案38を作成する(ステップST194)。
[0107]
 次に、実装案検討部28が、すべての改善案に対してステップST190、ステップST191、ステップST192、ステップST193およびステップST194が行われたか否かを判定する(ステップST195)。そして、すべての改善案に対して上記のステップが行われた場合、すなわち、図16に例が示されるステップST195から分岐する「YES」に対応する場合には、動作を終了する。一方で、上記のステップが行われていない改善案がある場合、すなわち、図16に例が示されるステップST195から分岐する「NO」に対応する場合には、ステップST190へ戻る。
[0108]
 図17は、実装案38の例を示す図である。図17に示される例は、図6に例が示された改善案のうち「B→A削除」に対応する実装案38である。
[0109]
 図17には、改善案「B→A削除」、すなわち、B→Aの参照を削除するための実装案38として、4つの実装案38が例示されている。
[0110]
 具体的には、B→C(既存関数)→Aとする実装案38と、B→D(新規関数)→Aとする実装案38と、Aを呼び出ししているBをAに移動する実装案38と、BとAとを結合させる実装案38とが、それぞれ例示されている。
[0111]
 このように、1つの改善案に対して複数の実装案38を示すことができる。そして、実装案38を提示することによって改善の検討が容易となり、改善の効率化が可能となる。
[0112]
 <第6の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0113]
 <改善提案装置の構成について>
 第5の実施の形態では、改善案に基づいて、目標のソフトウェア構造を満たし、かつ、現状のソフトウェアと同等の動作が可能である実装案38が示された。
[0114]
 一方で、複数の改善案に対する1または複数の実装案38が示された場合に、複数の実装案38の間で依存関係があると、双方の実装案38をソースコードに実装することが困難となる場合がある。そこで、本実施の形態では、複数の実装案38の間の依存関係を解析して、ソフトウェア構造全体としてアーキテクチャを改善することができるような統合実装案39の作成を行う。
[0115]
 図18は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図18に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、実装案38を出力する実装案検討部28と、統合実装案39を出力する実装案依存関係解析部29とを備える。
[0116]
 目標入力部22の入力は、ソースコード解析部21の出力と接続される。構造比較部23の入力は、目標入力部22の出力と接続される。
[0117]
 改善案検討部24の入力は、構造比較部23の出力と接続される。実装案検討部28の入力は、改善案検討部24の出力と接続される。
[0118]
 実装案依存関係解析部29の入力は、実装案検討部28の出力と接続される。
[0119]
 図19は、実装案依存関係解析部29で実装案を入力としてそれぞれの実装案の依存関係を解析し、統合実装案39を出力するためのフローチャートである。図19に例が示されるように、まず、対象とする改善案(改善案Aとする)に対応する複数の実装案38が実装案依存関係解析部29に入力される(ステップST100)。
[0120]
 次に、実装案依存関係解析部29は、改善案Aに対応する複数の実装案(実装案A1、実装案A2、実装案A3および実装案A4)を順次選択する(ステップST101)。
[0121]
 次に、対象とする改善案以外の改善案(改善案Bとする)に対応する複数の実装案が実装案依存関係解析部29に入力される(ステップST102)。
[0122]
 次に、実装案依存関係解析部29は、改善案Bに対応する複数の実装案(実装案B1、実装案B2および実装案B3)のうちの1つの実装案を選択する(ステップST103)。
[0123]
 次に、実装案依存関係解析部29は、選択された実装案間に矛盾があるか否かを判定する(ステップST104)。そして、選択された実装案間に矛盾がある場合、すなわち、図19に例が示されるステップST104から分岐する「YES」に対応する場合には、ステップST105へ進む。一方で、選択された実装案間に矛盾がない場合、すなわち、図19に例が示されるステップST104から分岐する「NO」に対応する場合には、ステップST106へ進む。
[0124]
 ここで、選択された実装案間に矛盾がある場合とは、たとえば、一方の実装案で削除されている関数を他方の実装案で呼び出している場合、または、共通のモジュールをそれぞれの実装案で異なるモジュールに移動している場合などが該当する。
[0125]
 ステップST105においては、実装案依存関係解析部29は、改善案組み合わせ表を作成する。
[0126]
 図20は、改善案組み合わせ表の例を示す図である。図20に例が示されるように、改善案組み合わせ表は、複数の改善案のそれぞれに対応する複数の実装案を行と列とに並べ、実装案間で矛盾が生じている箇所にマークを付すものである。なお、当該マークは、マークとして機能する他のデータなどであってもよい。
[0127]
 実装案依存関係解析部29は、ステップST104における判定の結果に基づいて、改善案組み合わせ表における行と列とに配列される実装案同士の組み合わせに対し矛盾の有無を登録する。そして、ステップST106へ進む。
[0128]
 ステップST106においては、改善案Bに対応する他の実装案があるか否かを判定する。そして、改善案Bに対応する他の実装案がある場合、すなわち、図19に例が示されるステップST106から分岐する「YES」に対応する場合には、ステップST103へ戻る。一方で、改善案Bに対応する他の実装案がない場合、すなわち、図19に例が示されるステップST106から分岐する「NO」に対応する場合には、ステップST107へ進む。
[0129]
 ステップST107においては、改善案Aに対して比較対象となる他の改善案があるか否かを判定する。そして、改善案Aに対して比較対象となる他の改善案がある場合、すなわち、図19に例が示されるステップST107から分岐する「YES」に対応する場合には、ステップST102へ戻る。一方で、改善案Aに対して比較対象となる他の改善案がない場合、すなわち、図19に例が示されるステップST107から分岐する「NO」に対応する場合には、ステップST108へ進む。
[0130]
 ステップST108においては、すべての改善案に対してステップST104の判定を行ったか否かを判定する。そして、すべての改善案に対してステップST104の判定を行った場合、すなわち、図19に例が示されるステップST108から分岐する「YES」に対応する場合には、ステップST109へ進む。一方で、ステップST104の判定を行っていない改善案が残っている場合、すなわち、図19に例が示されるステップST108から分岐する「NO」に対応する場合には、ステップST100へ戻る。
[0131]
 ステップST109においては、実装案依存関係解析部29は、改善案組み合わせ表から、矛盾が生じていることを示すマークが付されていない実装案(すなわち、複数の実装案間に矛盾がない実装案)の組み合わせを抽出して、統合実装案39として出力する。
[0132]
 このように、複数の実装案間で生じる矛盾を解析することで、矛盾が生じる実装案同士の組み合わせを除いて実装可能な実装案を抽出することができる。
[0133]
 <第7の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0134]
 <改善提案装置の構成について>
 第4の実施の形態では、改善優先度42で指定された優先度に従って改善優先度が付与された改善案35を出力する場合が例示された。
[0135]
 一方で、改善案はそれぞれ独立して検討されているが、改善案同士の関係性を考慮することで改善案の優先度の精度を高めることができる。
[0136]
 図21は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図21に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、改善案関連度算出部26と、規模算出部25とを備える。
[0137]
 図22は、改善案関連度算出部26に入力された改善案35に優先度を付与する、また、優先度が見直された改善案35を出力するためのフローチャートである。
[0138]
 まず、改善案35が改善案関連度算出部26に入力される(ステップST80)。
[0139]
 次に、改善案関連度算出部26が、入力された改善案35のうちから未評価の改善案を選択し、さらに、優先度が未設定である場合はデフォルトの優先度を付与する(ステップST81)。デフォルトの優先度は、たとえば数値を付与する。
[0140]
 次に、改善案関連度算出部26が、選択された改善案と関連する改善案があるか判定する(ステップST82)。そして、関連する改善案がある場合、すなわち、図22に例が示されるステップST82から分岐する「YES」に対応する場合には、ステップST83に進む。一方で、関連する改善案がない場合、すなわち、図22に例が示されるステップST82から分岐する「NO」に対応する場合には、ステップST85に進む。
[0141]
 関連する改善案の判定方法は特に指定されないが、たとえば、類似の改善案、先に改善する方が望ましい改善案、または、後に改善する方が望ましい改善案などが関連する改善案の例として挙げられる。
[0142]
 次に、改善案関連度算出部26が、関連する改善案に関連度合い(依存度合い)に応じて改善優先度を付与する(ステップST83)。
[0143]
 たとえば、類似の改善案の場合は対象の改善案と同じ値を、先に改善する方が望ましい場合は対象の改善案よりも高い値を、後に改善する方が望ましい場合は対象の改善案よりも低い値をそれぞれ付与する。
[0144]
 次に、改善案関連度算出部26が、関連する改善案が他にあるか否かを判定する(ステップST84)。そして、改善案が他にある場合、すなわち、図22に例が示されるステップST84から分岐する「YES」に対応する場合には、ステップST83に戻って、他の改善案に改善優先度を付与する。一方で、改善案が他にない場合、すなわち、図22に例が示されるステップST84から分岐する「NO」に対応する場合には、ステップST85に進む。
[0145]
 次に、改善案関連度算出部26が、未評価の改善案が他にあるか否かを判定する(ステップST85)。そして、未評価の改善案が他にある場合、すなわち、図22に例が示されるステップST85から分岐する「YES」に対応する場合には、ステップST81に戻って、改善案に改善優先度を付与する。一方で、改善案が他にない場合、すなわち、図22に例が示されるステップST85から分岐する「NO」に対応する場合には、ステップST86に進む。
[0146]
 次に、改善案関連度算出部26が、改善優先度を含めた改善案35を出力する(ステップST86)。改善優先度を含めた改善案35とは、たとえば、改善優先度順に改善案を並べた改善案などである。
[0147]
 このように、改善案関連度算出部26で改善案の関連度(依存度合い)を算出し、さらに、優先度を付与または見直すことによって、類似の改善または関連の強い改善部位を優先してリファクタリングを行うことができる。
[0148]
 <第8の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0149]
 <改善提案装置の構成について>
 本実施の形態では、あらかじめ定められたしきい値としての改善工数を規模算出部25に入力することによって、作業者があらかじめ指定する工数が考慮された改善案35を出力することができる。
[0150]
 図23は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図23に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、規模算出部25とを備える。
[0151]
 目標入力部22の入力は、ソースコード解析部21の出力と接続される。構造比較部23の入力は、目標入力部22の出力と接続される。
[0152]
 改善案検討部24の入力は、構造比較部23の出力と接続される。規模算出部25の入力は、改善案検討部24の出力と接続される。
[0153]
 規模算出部25は、改善案35と改善工数43とを入力として受け付ける。また、改善工数43は、リファクタリングを実施するための作業時間である。
[0154]
 図24は、リファクタリングする工数が検討された改善案を出力するためのフローチャートである。図24に例が示されるように、まず、改善案35が規模算出部25に入力される(ステップST50)。
[0155]
 次に、改善工数43が規模算出部25に入力される(ステップST51)。次に、規模算出部25が、改善案35から改善部位を抽出する(ステップST52)。そして、規模算出部25は、改善部位に対応する改善案の工数を算出する(ステップST53)。
[0156]
 次に、規模算出部25が、算出された改善案の工数が、改善工数43以内であるか否かを判定する(ステップST54)。そして、改善部位に対応する改善案の工数が、改善工数以内である場合、すなわち、図24に例が示されるステップST54から分岐する「YES」に対応する場合には、ステップST55に進む。一方で、改善部位に対応する改善案の工数が、改善工数以内でない場合、すなわち、図24に例が示されるステップST54から分岐する「NO」に対応する場合には、ステップST57に進む。
[0157]
 次に、規模算出部25が、当該改善部位に印を付与する(ステップST55)。ここで、印は、たとえば、色、記号、下線または太字などである。
[0158]
 次に、規模算出部25が、改善部位が他にあるか否かを判定する(ステップST56)。そして、改善部位が他にある場合、すなわち、図24に例が示されるステップST56から分岐する「YES」に対応する場合には、ステップST52に戻って、規模算出部25が、改善案35から他の改善部位を抽出する。一方で、改善部位が他にない場合、すなわち、図24に例が示されるステップST56から分岐する「NO」に対応する場合には、ステップST57に進む。
[0159]
 次に、規模算出部25が、それぞれの改善部位に対応する改善案の工数を含む改善規模見積もり結果36を出力する(ステップST57)。ここで、改善規模見積もり結果36には、改善工数43以内の改善部位に印が付与されている。
[0160]
 このように、改善工数43に基づいて規模を算出することによって、作業者が許容可能な作業期間に応じた工数のリファクタリングが可能となる。
[0161]
 <第9の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0162]
 <改善提案装置の構成について>
 第8の実施の形態では、改善工数に基づいて許容可能な範囲で改善規模見積もりを算出する場合が例示されたが、複数回の改善を見越した場合では、単一の改善に対する見積もりだけでなく、それぞれの改善における改善範囲を示すことで長期的な改善を実現することができる。
[0163]
 図25は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図25に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、規模算出部25と、改善単位検討部27とを備える。
[0164]
 図26は、改善単位検討部27に入力された改善規模見積もり結果36に対して改善セット案37を出力するためのフローチャートである。
[0165]
 まず、改善規模見積もり結果36が改善単位検討部27に入力される(ステップST90)。
[0166]
 次に、改善工数52が改善単位検討部27に入力される(ステップST91)。
[0167]
 次に、改善単位検討部27が、改善規模見積もり結果36から改善案を選択する(ステップST92)。このとき、たとえば改善案に優先度がある場合には優先度の高いものから選択する。
[0168]
 次に、改善単位検討部27が、選択した改善案を格納可能な改善セットがあるか判定する(ステップST93)。そして、格納可能な改善セットがある場合、すなわち、図26に例が示されるステップST93から分岐する「YES」に対応する場合には、ステップST95に進む。一方で、格納可能な改善セットがない場合、すなわち、図26に例が示されるステップST93から分岐する「NO」に対応する場合には、ステップST94に進み、改善単位検討部27が改善案の格納先として空の改善案セットを作成する(ステップST94)。
[0169]
 格納可能な改善セットがあるかの判定方法は、たとえば、改善セットに格納されている工数と選択した改善案の工数の和があらかじめ定められた改善工数以下の場合に、格納可能な改善セットであると判定する方法がある。また、改善案の工数が改善工数を超える場合は、改善案を分割するステップを入れることなども考えらえる。
[0170]
 次に、改善単位検討部27が、格納可能な改善案セットに選択した改善案を格納する(ステップST95)。
[0171]
 次に、改善単位検討部27が、改善案セットに格納していない改善案が他にあるか否かを判定する(ステップST96)。そして、改善案セットに格納していない改善案が他にある場合、すなわち、図26に例が示されるステップST96から分岐する「YES」に対応する場合には、ステップST92に戻って、改善案を選択する。一方で、改善案が他にない場合、すなわち、図26に例が示されるステップST96から分岐する「NO」に対応する場合には、ステップST97に進む。
[0172]
 次に、改善単位検討部27が、改善セット案37を出力する(ステップST97)。改善セット案37とは、たとえば、改善工数以下の改善案の集合を複数並べたものなどである。
[0173]
 このように、改善単位検討部27が入力された改善規模見積もり結果36に対して改善セット案37を出力することによって、複数回の改善が想定される場合のそれぞれの改善における改善範囲を明確化した上で、それぞれの改善におけるリファクタリングを行うことができる。よって、全体リファクタリングにかかる工数または期間などを明確化することができる。
[0174]
 <第10の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0175]
 <改善提案装置の構成について>
 提案された改善案35に基づいて実際にリファクタリングを実施した場合の実工数(実績工数)と、あらかじめ見積もられた改善工数43(提案工数)との間に誤差が発生する場合がある。これに対し、リファクタリングを実施した結果をフィードバックすることによって、誤差の補正が可能となる。
[0176]
 図27は、本実施の形態に関する改善提案装置の構成の例を概念的に示す図である。図23に例が示されるように、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、規模算出部25とを備える。
[0177]
 目標入力部22の入力は、ソースコード解析部21の出力と接続される。構造比較部23の入力は、目標入力部22の出力と接続される。
[0178]
 改善案検討部24の入力は、構造比較部23の出力と接続される。規模算出部25の入力は、改善案検討部24の出力と接続される。
[0179]
 規模算出部25は、改善案35と改善実績データベース51とを入力として受け付ける。
[0180]
 図28は、改善実績データベースの例を示す図である。図28においては、改善IDが1であり、依存種別が大域変数参照であり、依存強度が3であり、提案工数[hr]が30であり、実績工数[hr]が25である、BからAへと伸びる矢印の削除を改善案とする。また、改善IDが2であり、依存種別が関数呼び出しであり、依存強度が2であり、提案工数[hr]が10であり、実績工数[hr]が10である、BからCへと伸びる矢印の削除を改善案とする。
[0181]
 ここで、提案工数とは、対応する改善案に要すると推測される工数であり、実績工数とは、対応する改善案を実際に実施した場合の工数である。
[0182]
 図29は、改善実績データベース51を考慮した改善規模見積もり結果を出力するためのフローチャートである。図29に例が示されるように、まず、改善案35および改善実績データベース51が規模算出部25に入力される(ステップST60)。
[0183]
 次に、規模算出部25は、改善案35に基づいて、改善部位に対応する改善案の工数を算出する(ステップST61)。
[0184]
 工数は、たとえば、依存種別ごとの工数と、依存強度または改善項目に関するモジュール数とを掛け合わせることで算出する。なお、依存種別ごとの工数は、改善の難易度に応じてあらかじめ数値を設定されてもよいし、改善実績データベース51に基づいて設定されてもよい。
[0185]
 次に、規模算出部25が、改善実績データベース51における提案工数とステップST61で算出された改善部位に対応する改善案の工数とが等しい項目があるか否かを判定する(ステップST62)。そして、提案工数と改善部位に対応する改善案の工数とが等しい項目がある場合、すなわち、図29に例が示されるステップST62から分岐する「YES」に対応する場合には、ステップST63に進む。一方で、提案工数と改善部位に対応する改善案の工数とが等しい項目がない場合、すなわち、図29に例が示されるステップST62から分岐する「NO」に対応する場合には、ステップST65に進む。
[0186]
 次に、規模算出部25が、提案工数と改善部位に対応する改善案の工数とが等しい項目において、改善実績データベース51における実績工数とステップST61で算出された改善部位に対応する改善案の工数とが異なるか否かを判定する(ステップST63)。そして、実績工数と改善部位に対応する改善案の工数とが異なる場合、すなわち、図29に例が示されるステップST63から分岐する「YES」に対応する場合には、ステップST64に進む。一方で、実績工数と改善部位に対応する改善案の工数とが等しい場合、すなわち、図29に例が示されるステップST63から分岐する「NO」に対応する場合には、ステップST65に進む。
[0187]
 次に、規模算出部25が、ステップST61で算出された改善部位に対応する改善案の工数を修正する(ステップST64)。ここで、ステップST61で算出された工数の修正は、たとえば、改善実績データベース51における実績工数の統計量、たとえば、平均値を用いて修正する。
[0188]
 次に、規模算出部25が、それぞれの改善部位に対応する改善案の工数を含む改善規模見積もり結果36を出力する(ステップST65)。
[0189]
 このように、リファクタリングを実施した結果に基づいて工数の見積もりを修正することによって、誤差を少なくすることができる。
[0190]
 <第11の実施の形態>
 本実施の形態に関する改善提案装置、および、改善提案方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
[0191]
 <改善提案装置の構成について>
 第10の実施の形態では、実際にリファクタリングを実施した作業者の能力によって、誤差が生じる場合がある。そこで、作業者の情報を、リファクタリングを実施した結果の入力に含めることによって、作業者ごとの誤差の補正が可能となる。
[0192]
 図30は、作業者ごとの誤差を考慮した改善規模見積もり結果を出力するためのフローチャートである。図30に例が示されるように、まず、改善案35および改善実績データベース51が規模算出部25に入力される(ステップST70)。
[0193]
 次に、規模算出部25は、改善案35に基づいて、改善部位に対応する改善案の工数を算出する(ステップST71)。
[0194]
 次に、規模算出部25が、改善実績データベース51に作業者の項目があるか否かを判定する(ステップST72)。そして、改善実績データベース51に作業者の項目がある場合、すなわち、図30に例が示されるステップST72から分岐する「YES」に対応する場合には、ステップST73に進む。一方で、改善実績データベース51に作業者の項目がない場合、すなわち、図30に例が示されるステップST72から分岐する「NO」に対応する場合には、ステップST77に進む。
[0195]
 次に、規模算出部25は、改善実績データベース51から作業者の項目を抽出する(ステップST73)。
[0196]
 次に、規模算出部25が、改善実績データベース51における当該作業者の提案工数とステップST71で算出された改善部位に対応する改善案の工数とが等しい項目があるか否かを判定する(ステップST74)。そして、提案工数と改善部位に対応する改善案の工数とが等しい項目がある場合、すなわち、図30に例が示されるステップST74から分岐する「YES」に対応する場合には、ステップST75に進む。一方で、提案工数と改善部位に対応する改善案の工数とが等しい項目がない場合、すなわち、図30に例が示されるステップST74から分岐する「NO」に対応する場合には、ステップST77に進む。
[0197]
 次に、規模算出部25が、提案工数と改善部位に対応する改善案の工数とが等しい項目において、改善実績データベース51における当該作業者の実績工数とステップST71で算出された改善部位に対応する改善案の工数とが異なるか否かを判定する(ステップST75)。そして、実績工数と改善部位に対応する改善案の工数とが異なる場合、すなわち、図30に例が示されるステップST75から分岐する「YES」に対応する場合には、ステップST76に進む。一方で、実績工数と改善部位に対応する改善案の工数とが等しい場合、すなわち、図30に例が示されるステップST75から分岐する「NO」に対応する場合には、ステップST77に進む。
[0198]
 次に、規模算出部25が、ステップST71で算出された改善部位に対応する改善案の工数を修正する(ステップST76)。ここで、ステップST71で算出された工数の修正は、たとえば、改善実績データベース51における実績工数の統計量、たとえば、平均値を用いて修正する。
[0199]
 次に、規模算出部25が、それぞれの改善部位に対応する改善案の工数を含む改善規模見積もり結果36を出力する(ステップST77)。
[0200]
 このように、作業者の項目に基づいて工数の見積もりを修正することによって、誤差を少なくすることができる。
[0201]
 <改善提案装置のハードウェア構成について>
 図31および図32は、図1などに例が示される改善提案装置を実際に運用する場合のハードウェア構成を概略的に例示する図である。
[0202]
 なお、図31および図32に例示されるハードウェア構成は、図1に例示される構成とは数などが整合しない場合があるが、これは図1に例示される構成が概念的な単位を示すものであることに起因する。
[0203]
 よって、少なくとも、図1に例示される1つの構成が、図31および図32に例示される複数のハードウェア構成から成る場合と、図1に例示される1つの構成が、図31および図32に例示されるハードウェア構成の一部に対応する場合と、さらには、図1に例示される複数の構成が、図31および図32に例示される1つのハードウェア構成に備えられる場合とが想定され得る。
[0204]
 図31では、図1中のソースコード解析部21、目標入力部22、構造比較部23、改善案検討部24および規模算出部25を実現するためのハードウェア構成として、演算を行う処理回路1102Aと、情報を記憶することができる記憶装置1103とが示される。これらの構成は、他の実施の形態においても同様である。
[0205]
 図32では、図1中のソースコード解析部21、目標入力部22、構造比較部23、改善案検討部24および規模算出部25を実現するためのハードウェア構成として、演算を行う処理回路1102Bが示される。当該構成は、他の実施の形態においても同様である。
[0206]
 記憶装置1103は、たとえば、ハードディスクドライブ(Hard disk drive、すなわち、HDD)、ランダムアクセスメモリ(random access memory、すなわち、RAM)、リードオンリーメモリ(read only memory、すなわち、ROM)、フラッシュメモリ、erasable programmable read only memory(EPROM)およびelectrically erasable programmable read-only memory(EEPROM)などの、揮発性または不揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスクまたはDVDなどを含むメモリ(記憶媒体)、または、今後使用されるあらゆる記憶媒体であってもよい。
[0207]
 処理回路1102Aは、記憶装置1103、外部のCD-ROM、外部のDVD-ROM、または、外部のフラッシュメモリなどに格納されたプログラムを実行するものであってもよい。すなわち、たとえば、中央演算処理装置(central processing unit、すなわち、CPU)、マイクロプロセッサ、マイクロコンピュータ、デジタルシグナルプロセッサ(digital signal processor、すなわち、DSP)であってもよい。
[0208]
 処理回路1102Aが記憶装置1103、外部のCD-ROM、外部のDVD-ROM、または、外部のフラッシュメモリなどに格納されたプログラムを実行するものである場合、ソースコード解析部21、目標入力部22、構造比較部23、改善案検討部24および規模算出部25は、記憶装置1103に格納されたプログラムが処理回路1102Aによって実行されるソフトウェア、ファームウェアまたはソフトウェアとファームウェアとの組み合わせにより実現される。なお、ソースコード解析部21、目標入力部22、構造比較部23、改善案検討部24および規模算出部25の機能は、たとえば、複数の処理回路が連携することによって実現されてもよい。
[0209]
 ソフトウェアおよびファームウェアはプログラムとして記述され、記憶装置1103に記憶されるものであってもよい。その場合、処理回路1102Aは、記憶装置1103に格納されたプログラムを読み出して実行することによって、上記の機能を実現する。すなわち、記憶装置1103は、処理回路1102Aに実行されることによって、上記の機能が結果的に実現されるプログラムを記憶するものであってもよい。
[0210]
 また、処理回路1102Bは、専用のハードウェアであってもよい。すなわち、たとえば、単一回路、複合回路、プログラム化されたプロセッサ、並列プログラム化されたプロセッサ、集積回路(application specific integrated circuit、すなわち、ASIC)、field-programmable gate array(FPGA)またはこれらを組み合わせた回路であってもよい。
[0211]
 処理回路1102Bが専用のハードウェアである場合、ソースコード解析部21、目標入力部22、構造比較部23、改善案検討部24および規模算出部25は、処理回路1102Bが動作することにより実現される。なお、ソースコード解析部21、目標入力部22、構造比較部23、改善案検討部24および規模算出部25の機能は、別々の回路で実現されてもよいし、単一の回路で実現されてもよい。
[0212]
 なお、ソースコード解析部21、目標入力部22、構造比較部23、改善案検討部24および規模算出部25の機能は、一部が記憶装置1103に格納されたプログラムを実行するものである処理回路1102Aにおいて実現され、一部が専用のハードウェアである処理回路1102Bにおいて実現されてもよい。
[0213]
 <以上に記載された実施の形態によって生じる効果について>
 次に、以上に記載された実施の形態によって生じる効果の例を示す。なお、以下の説明においては、以上に記載された実施の形態に例が示された具体的な構成に基づいて当該効果が記載されるが、同様の効果が生じる範囲で、本願明細書に例が示される他の具体的な構成と置き換えられてもよい。
[0214]
 また、当該置き換えは、複数の実施の形態に跨ってなされてもよい。すなわち、異なる実施の形態において例が示されたそれぞれの構成が組み合わされて、同様の効果が生じる場合であってもよい。
[0215]
 以上に記載された実施の形態によれば、改善提案装置は、ソースコード解析部21と、目標入力部22と、構造比較部23と、改善案検討部24と、工数算出部とを備える。ここで、工数算出部は、たとえば、規模算出部25などに対応するものである。ソースコード解析部21は、ソースコードから第1のソフトウェア構造を解析する。ここで、第1のソフトウェア構造は、たとえば、現状のソフトウェア構造などに対応するものである。目標入力部22は、第1のソフトウェア構造とは異なるソフトウェア構造である第2のソフトウェア構造を入力する。ここで、第2のソフトウェア構造は、たとえば、目標のソフトウェア構造などに対応するものである。構造比較部23は、現状のソフトウェア構造と、目標のソフトウェア構造との差分を改善対象34として出力する。改善案検討部24は、改善対象34における改善部位ごとに、現状のソフトウェア構造を目標のソフトウェア構造に近付ける(改善案にしたがって、段階的にリファクタリングする)ための方法である改善案を検討する。規模算出部25は、改善部位ごとに、改善案の工数を算出する。
[0216]
 また、以上に記載された実施の形態によれば、改善提案装置は、プログラムを実行する処理回路1102Aと、実行されるプログラムを記憶する記憶装置1103とを備える。そして、処理回路1102Aがプログラムを実行することによって、以下の動作が実現される。
[0217]
 すなわち、ソースコードから現状のソフトウェア構造が解析される。そして、現状のソフトウェア構造と、現状のソフトウェア構造とは異なるソフトウェア構造である目標のソフトウェア構造との差分が改善対象34として出力される。そして、改善対象34における改善部位ごとに、現状のソフトウェア構造を目標のソフトウェア構造に近付ける(改善案にしたがって、段階的にリファクタリングする)ための方法である改善案が検討される。そして、改善部位ごとに、改善案の工数が算出される。
[0218]
 また、以上に記載された実施の形態によれば、改善提案装置は、専用のハードウェアである処理回路1102Bを備える。そして、専用のハードウェアである処理回路1102Bは、以下の動作を行う。
[0219]
 すなわち、専用のハードウェアである処理回路1102Bは、ソースコードから現状のソフトウェア構造を解析する。そして、現状のソフトウェア構造と、現状のソフトウェア構造とは異なるソフトウェア構造である目標のソフトウェア構造との差分を改善対象34として出力する。そして、改善対象34における改善部位ごとに、現状のソフトウェア構造を目標のソフトウェア構造に近付ける(改善案にしたがって、段階的にリファクタリングする)ための方法である改善案を検討する。そして、改善部位ごとに、改善案の工数を算出する。
[0220]
 このような構成によれば、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、現状のソフトウェア構造と目標のソフトウェア構造との差分である改善対象の一部である改善部位ごとに改善案を検討し、さらに、それぞれの改善案について工数を算出することによって、それぞれの改善案を選択してリファクタリングを行うことができるため、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、段階的にリファクタリングを行うことができる。また、改善案の選択肢が増えることによって、与えられた開発期間などの都合に合わせて、リファクタリングの自由度を向上させることができる。
[0221]
 なお、上記の構成に本願明細書に例が示された他の構成を適宜追加した場合、すなわち、上記の構成としては言及されなかった本願明細書中の他の構成が適宜追加された場合であっても、同様の効果を生じさせることができる。
[0222]
 また、以上に記載された実施の形態によれば、改善案検討部24は、改善部位ごとに複数の改善案を検討する。そして、規模算出部25は、改善部位ごとに、複数の改善案の工数を算出する。このような構成によれば、リファクタリングを実施する者の都合に応じて、自由度の高いリファクタリングを行うことができる。
[0223]
 また、以上に記載された実施の形態によれば、改善対象のうち、優先される改善対象の範囲を改善範囲41とする。そして、改善案検討部24は、改善範囲41内の改善部位ごとに改善案を検討する。そして、規模算出部25は、改善範囲41内の改善部位ごとに、改善案の工数を算出する。このような構成によれば、改善範囲41内で絞り込まれた改善部位に対する改善案を出力することができる。そのため、自由度の高いリファクタリングが可能となる。
[0224]
 また、以上に記載された実施の形態によれば、改善案検討部24は、改善部位ごとに改善優先度を付与しつつ改善案を検討する。そして、規模算出部25は、改善優先度に基づいて、改善部位ごとに改善案の工数を算出する。このような構成によれば、改善対象34に改善優先度が付与されることによって、改善部位の優先順序などを考慮しつつリファクタリングを行うことができる。
[0225]
 また、以上に記載された実施の形態によれば、規模算出部25は、算出された改善案の工数があらかじめ定められたしきい値以内である場合に、対応する改善部位に印を付与する。このような構成によれば、改善工数43に基づいて規模を算出することによって、作業者が許容可能な作業期間に応じた工数のリファクタリングが可能となる。
[0226]
 また、以上に記載された実施の形態によれば、規模算出部25は、算出された改善案の工数を、対応する改善部位の実績工数に基づいて修正する。このような構成によれば、リファクタリングを実施した結果に基づいて工数の見積もりを修正することによって、誤差を少なくすることができる。
[0227]
 また、以上に記載された実施の形態によれば、規模算出部25は、算出された改善案の工数を、対応する改善部位の作業者ごとの実績工数に基づいて修正する。このような構成によれば、作業者の項目に基づいて工数の見積もりを修正することによって、誤差を少なくすることができる。
[0228]
 以上に記載された実施の形態によれば、改善提案方法において、ソースコードから現状のソフトウェア構造を解析する。そして、現状のソフトウェア構造と、現状のソフトウェア構造とは異なるソフトウェア構造である目標のソフトウェア構造との差分を改善対象34として出力する。そして、改善対象34における改善部位ごとに、現状のソフトウェア構造を目標のソフトウェア構造に近付ける(改善案にしたがって、段階的にリファクタリングする)ための方法である改善案を検討する。そして、改善部位ごとに、改善案の工数を算出する。
[0229]
 このような構成によれば、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、現状のソフトウェア構造と目標のソフトウェア構造との差分である改善対象の一部である改善部位ごとに改善案を検討し、さらに、それぞれの改善案について工数を算出することによって、それぞれの改善案を選択してリファクタリングを行うことができるため、1つのリファクタリング作業では目標のソフトウェア構造を実現することができない場合にも、段階的にリファクタリングを行うことができる。
[0230]
 なお、特段の制限がない場合には、それぞれの処理が行われる順序は変更することができる。
[0231]
 なお、上記の構成に本願明細書に例が示された他の構成を適宜追加した場合、すなわち、上記の構成としては言及されなかった本願明細書中の他の構成が適宜追加された場合であっても、同様の効果を生じさせることができる。
[0232]
 <以上に記載された実施の形態の変形例について>
 以上に記載された実施の形態では、それぞれの構成要素の寸法、形状、相対的配置関係または実施の条件などについても記載する場合があるが、これらはすべての局面においてひとつの例であって、本願明細書に記載されたものに限られることはないものとする。
[0233]
 したがって、例が示されていない無数の変形例、および、均等物が、本願明細書に開示される技術の範囲内において想定される。たとえば、少なくとも1つの構成要素を変形する場合、追加する場合または省略する場合、さらには、少なくとも1つの実施の形態における少なくとも1つの構成要素を抽出し、他の実施の形態における構成要素と組み合わせる場合が含まれるものとする。
[0234]
 また、矛盾が生じない限り、以上に記載された実施の形態において「1つ」備えられるものとして記載された構成要素は、「1つ以上」備えられていてもよいものとする。
[0235]
 また、本願明細書における説明は、本技術に関連するすべての目的のために参照され、いずれも、従来技術であると認めるものではない。
[0236]
 また、以上に記載された実施の形態で記載されたそれぞれの構成要素は、ソフトウェアまたはファームウェアとしても、それと対応するハードウェアとしても想定され、その双方の概念において、それぞれの構成要素は「部」または「処理回路」(circuitry)などと称される。

符号の説明

[0237]
 21 ソースコード解析部、22 目標入力部、23 構造比較部、24 改善案検討部、25 規模算出部、26 改善案関連度算出部、27 改善単位検討部、28 実装案検討部、29 実装案依存関係解析部、31 ソースコード、32 現状のソフトウェア構造データベース、33 目標のソフトウェア構造データベース、34 改善対象、35 改善案、36 改善規模見積もり結果、37 改善セット案、38 実装案、39 統合実装案、41 改善範囲、42 改善優先度、43,52 改善工数、51 改善実績データベース、1102A,1102B 処理回路、1103 記憶装置。

請求の範囲

[請求項1]
 ソースコードから第1のソフトウェア構造を解析するソースコード解析部と、
 前記第1のソフトウェア構造とは異なるソフトウェア構造である第2のソフトウェア構造を入力する目標入力部と、
 前記第1のソフトウェア構造と、前記第2のソフトウェア構造との差分を改善対象として出力する構造比較部と、
 前記改善対象における改善部位ごとに、前記第1のソフトウェア構造を前記第2のソフトウェア構造に近付けるための方法である改善案を検討する改善案検討部とを備える、
 改善提案装置。
[請求項2]
 請求項1に記載の改善提案装置であり、
 前記改善部位ごとに、前記改善案の工数を算出する工数算出部をさらに備える、
 改善提案装置。
[請求項3]
 請求項2に記載の改善提案装置であり、
 前記改善案検討部は、前記改善部位ごとに複数の前記改善案を検討し、
 前記工数算出部は、前記改善部位ごとに、複数の前記改善案の工数を算出する、
 改善提案装置。
[請求項4]
 請求項2または3に記載の改善提案装置であり、
 前記改善対象のうち、優先される前記改善対象の範囲を改善範囲とし、
 前記改善案検討部は、前記改善範囲内の前記改善部位ごとに前記改善案を検討し、
 前記工数算出部は、前記改善範囲内の前記改善部位ごとに、前記改善案の工数を算出する、
 改善提案装置。
[請求項5]
 請求項2から4のうちのいずれか1つに記載の改善提案装置であり、
 前記改善案検討部は、前記改善部位ごとに改善優先度を付与しつつ前記改善案を検討し、
 前記工数算出部は、前記改善優先度に基づいて、前記改善部位ごとに前記改善案の工数を算出する、
 改善提案装置。
[請求項6]
 請求項5に記載の改善提案装置であり、
 前記改善優先度を前記改善案間の関連度に応じて付与する改善案関連度算出部をさらに備え、
 前記改善案検討部は、前記改善案関連度算出部において付与された前記改善優先度に基づいて前記改善案を検討する、
 改善提案装置。
[請求項7]
 請求項2から6のうちのいずれか1つに記載の改善提案装置であり、
 前記工数算出部は、算出された前記改善案の工数があらかじめ定められたしきい値以内であることに応じて、対応する前記改善部位に印を付与する、
 改善提案装置。
[請求項8]
 請求項1から7のうちのいずれか1つに記載の改善提案装置であり、
 あらかじめ定められた工数以下の前記改善案の集合を改善単位として出力する改善単位検討部をさらに備える、
 改善提案装置。
[請求項9]
 請求項2から7のうちのいずれか1つに記載の改善提案装置であり、
 前記工数算出部は、算出された前記改善案の工数を、対応する前記改善部位の実績工数に基づいて修正する、
 改善提案装置。
[請求項10]
 請求項2から7、9のうちのいずれか1つに記載の改善提案装置であり、
 前記工数算出部は、算出された前記改善案の工数を、対応する前記改善部位の作業者ごとの実績工数に基づいて修正する、
 改善提案装置。
[請求項11]
 請求項1から10のうちのいずれか1つに記載の改善提案装置であり、
 前記改善案を前記ソースコードに実装する際の少なくとも1つの実装案を出力する実装案検討部をさらに備える、
 改善提案装置。
[請求項12]
 請求項11に記載の改善提案装置であり、
 前記実装案検討部は、複数の前記実装案を出力し、
 複数の前記実装案の間の依存関係を解析し、かつ、複数の前記実装案の間に矛盾がない前記実装案の組み合わせを統合実装案として出力する実装案依存関係解析部をさらに備える、
 改善提案装置。
[請求項13]
 ソースコードから第1のソフトウェア構造を解析し、
 前記第1のソフトウェア構造と、前記第1のソフトウェア構造とは異なるソフトウェア構造である第2のソフトウェア構造との差分を改善対象として出力し、
 前記改善対象における改善部位ごとに、前記第1のソフトウェア構造を前記第2のソフトウェア構造に近付けるための方法である改善案を検討する、
 改善提案方法。

図面

[ 図 1]

[ 図 2]

[ 図 3]

[ 図 4]

[ 図 5]

[ 図 6]

[ 図 7]

[ 図 8]

[ 図 9]

[ 図 10]

[ 図 11]

[ 図 12]

[ 図 13]

[ 図 14]

[ 図 15]

[ 図 16]

[ 図 17]

[ 図 18]

[ 図 19]

[ 図 20]

[ 図 21]

[ 図 22]

[ 図 23]

[ 図 24]

[ 図 25]

[ 図 26]

[ 図 27]

[ 図 28]

[ 図 29]

[ 図 30]

[ 図 31]

[ 図 32]