(57)【要約】【課題】部品を活用したソースコード生成の効率および精度を良好なものとする。【解決手段】ソースコード生成支援装置１００において、ユーザによる変更が施されたコードを保持する記憶部１０１と、コードにおける変更の対象箇所を含む部品に対し、記号実行を行うことで当該部品の仕様を抽出し、抽出した仕様と１または複数の既存部品ないし当該既存部品の１または複数の分解部品の仕様とを比較し、比較の結果、部品の仕様と一致する１または複数の既存部品ないし分解部品を特定できた場合、コードにおける対象箇所の部品を前記１または複数の既存部品ないし分解部品で置換する演算部１０４を含む構成とする。【選択図】図２
2020038521.tif 000002
【特許請求の範囲】
【請求項１】
ユーザによる変更が施されたコードを保持する記憶部と、
前記コードにおける前記変更の対象箇所を含む部品に対し、記号実行を行うことで当該部品の仕様を抽出する処理と、前記抽出した仕様と、１または複数の既存部品ないし当該既存部品の１または複数の分解部品の仕様とを比較する処理と、前記比較の結果、前記部品の仕様と一致する１または複数の既存部品ないし分解部品を特定できた場合、前記コードにおける前記対象箇所の部品を前記特定した１または複数の既存部品ないし分解部品で置換する処理と、を実行する演算部と、
を含むことを特徴とするソースコード生成支援装置。
【請求項２】
前記記憶部は、前記既存部品を保持するものであり、
前記演算部は、前記比較の結果、前記特定した１または複数の分解部品を、新たな前記既存部品として記憶部に格納する処理を更に実行するものである、
ことを特徴とする請求項１に記載のソースコード生成支援装置。
【請求項３】
前記演算部は、
前記新たな既存部品の格納後の記憶部から、削除候補である１または複数の既存部品、および、その他の１または複数の既存部品を抽出し、前記抽出した既存部品の間で前記仕様の比較を実行し、当該比較の結果、仕様の一致がみられた場合、前記削除候補である１または複数の既存部品を、前記記憶部から削除する処理を更に実行するものである、
ことを特徴とする請求項２に記載のソースコード生成支援装置。
【請求項４】
前記演算部は、
前記置換がなされた後の記憶部から、所定のコードを抽出し、当該コードを構成する部品のうち互いに所定関係を有する部品群が、前記記憶部で保持する前記コード以外の他のコードでも同じ関係を持って使用されているか判定し、前記判定の結果、前記部品群が前記他のコードでも同じ関係を持って使用されている場合、当該部品群を構成する各部品を結合した新たな既存部品を記憶部に格納し、前記部品群を記憶部から削除する処理を更に実行するものである、
ことを特徴とする請求項１に記載のソースコード生成支援装置。
【請求項５】
前記演算部は、
前記比較の結果、前記特定ができなかった前記部品が複数存在する場合、
当該複数の前記部品のうち所定の１つとそれ以外の他部品に関して、前記１つの部品により、前記他部品と仕様が同じ既存部品の組合せを作成できるか、および、前記１つの部品を分解して作成した分解部品により、前記他部品と仕様が同じ既存部品の組合せを作成できるか、を判定する処理と、
前記判定の結果、既存部品の組合せを作成できる事象の数を、前記１つの部品に関する置換可能数としてカウントする処理と、
前記複数の前記部品のうち、前記置換可能数が最大のものを、新たな前記既存部品として記憶部に格納する処理と、
を更に実行するものである、
ことを特徴とする請求項１に記載のソースコード生成支援装置。
【請求項６】
前記演算部は、
前記比較の結果、前記部品の仕様と部分一致する１または複数の既存部品ないし分解部品を特定できた場合、当該特定した１または複数の既存部品ないし分解部品に関するユーザ判断を所定装置から受け付け、当該ユーザ判断が仕様は一致しているとみなす旨を示すものであれば、前記コードにおける前記対象箇所の部品を前記特定した１または複数の既
存部品ないし分解部品で置換するものである、
ことを特徴とする請求項１に記載のソースコード生成支援装置。
【請求項７】
前記演算部は、
前記部品に対する前記記号実行において、プログラム実行パスを探索する際に、変数値に関する条件に加え、当該プログラム実行パスで実行されるファイル操作をパス条件として抽出し、前記変数値に関する条件および前記パス条件を、前記部品の仕様として抽出するものである、
ことを特徴とする請求項１に記載のソースコード生成支援装置。
【請求項８】
前記演算部は、
前記既存部品から１または複数の分解部品を生成する処理を更に実行するものであって、当該分解部品の生成に際し、前記既存部品のコードにおけるネスト構造外の行を分解点として取得し、当該分解点のうち所定の分解点にてコードを分解した場合に得られる分解部品が規定の条件を満たすか判定し、前記判定の結果、前記規定の条件を満たす場合、前記所定の分解点にて既存部品を分解することで分解部品を生成するものである、
ことを特徴とする請求項１に記載のソースコード生成支援装置。
【請求項９】
ユーザによる変更が施されたコードを保持する記憶部を備える情報処理装置が、
前記コードにおける前記変更の対象箇所を含む部品に対し、記号実行を行うことで当該部品の仕様を抽出する処理と、
前記抽出した仕様と、１または複数の既存部品ないし当該既存部品の１または複数の分解部品の仕様とを比較する処理と、
前記比較の結果、前記部品の仕様と一致する１または複数の既存部品ないし分解部品を特定できた場合、前記コードにおける前記対象箇所の部品を前記特定した１または複数の既存部品ないし分解部品で置換する処理と、
を実行することを特徴とするソースコード生成支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード生成支援装置およびソースコード生成支援方法に関するものである。
【背景技術】
【０００２】
従来、ソフト開発の効率や品質を向上する手段として、コード記述を部品化し、それら部品の組合せによってコード全体を作成する技術がある。
【０００３】
この技術には、部品を活用することでコード記述工数を削減できる利点がある。また、部品およびその組合せを事前にテストしておくことで、テストを省略できるという利点もある。
【０００４】
このようなコード生成に関連する従来技術としては、例えば、ソフトウェアを部品化したソフトウェア部品の機能を実現するための典型的な処理の内容を示す処理内容情報と見出語とが対応付けられたテンプレートデータを記憶するテンプレート記憶手段と、前記ソフトウェア部品に対応するソースコード内から前記見出語を検出し、検出した見出語を含む部分と前記テンプレートデータ内で該見出語に対応付けられている処理内容情報とをマッピングし、マッピングした結果を保持するマッピングテーブルを作成する処理・ソースマッピング手段と、前記マッピングテーブルを参照して、前記ソースコードの所定部分と該所定部分に対応する処理内容情報とを、両者の対応関係がわかるように表示する処理・ソースマッピング結果表示手段と、を備えることを特徴とするソフトウェア再利用支援装置（特許文献１参照）などが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５８００６５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述の従来技術では、ユーザが入力したコードを部品として登録する際、構文解析を行うことで可変項目の自動設定が可能となり、汎用性の高い部品を効率的に作成することができる。
【０００７】
ところが、上述の技術を採用し一定数の部品を揃えたとしても、顧客や機種ごとの細かいカスタマイズが求められるケースが存在する。この場合、部品の組合せにて作成したコードを開発者が直接変更する事態も起こりうる。
【０００８】
また上述の変更が、部品の可変項目ではなく不変項目を対象とするものであれば、変更後のコードに対するテストが必要になる。しかしながら、この変更が軽微であると認識された場合、必要であるはずのテストが省略される恐れがある。テストの省略は、不具合の見逃しにつながる可能性が高い。
【０００９】
また変更後のコードを新たな部品として登録する際、使用頻度の低い部品まで闇雲に登録するケースもある。こうした登録を行うとすれば、部品登録の際のレビューやテストにかかるコストが徒に増加する。また登録部品の検索効率も低下する。
【００１０】
そこで本発明の目的は、部品を活用したソースコード生成の効率および精度を良好なも
のとする技術を提供することにある。
【課題を解決するための手段】
【００１１】
上記課題を解決する本発明のソースコード生成支援装置は、ユーザによる変更が施されたコードを保持する記憶部と、前記コードにおける前記変更の対象箇所を含む部品に対し、記号実行を行うことで当該部品の仕様を抽出する処理と、前記抽出した仕様と、１または複数の既存部品ないし当該既存部品の１または複数の分解部品の仕様とを比較する処理と、前記比較の結果、前記部品の仕様と一致する１または複数の既存部品ないし分解部品を特定できた場合、前記コードにおける前記対象箇所の部品を前記特定した１または複数の既存部品ないし分解部品で置換する処理と、を実行する演算部と、を含むことを特徴とする。
【００１２】
また、本発明のソースコード生成支援方法は、ユーザによる変更が施されたコードを保持する記憶部を備える情報処理装置が、前記コードにおける前記変更の対象箇所を含む部品に対し、記号実行を行うことで当該部品の仕様を抽出する処理と、前記抽出した仕様と、１または複数の既存部品ないし当該既存部品の１または複数の分解部品の仕様とを比較する処理と、前記比較の結果、前記部品の仕様と一致する１または複数の既存部品ないし分解部品を特定できた場合、前記コードにおける前記対象箇所の部品を前記特定した１または複数の既存部品ないし分解部品で置換する処理と、を実行することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、部品を活用したソースコード生成の効率および精度を良好なものとできる。
【図面の簡単な説明】
【００１４】
【図１】本実施形態のソースコード生成支援装置の構成例を示す図である。
【図２】本実施形態のテンプレート部品例を示す図である。
【図３】本実施形態のブロック部品の例１を示す図である。
【図４】本実施形態のブロック部品の例２を示す図である。
【図５】本実施形態の生成コードの例１を示す図である。
【図６】本実施形態の変更後生成コードの例を示す図である。
【図７】本実施形態におけるソースコード生成支援装置のハードウェア構成例を示す図である。
【図８】本実施形態のソースコード生成支援方法のフロー例１を示す図である。
【図９】本実施形態の変更部品の例を示す図である。
【図１０】本実施形態のソースコード生成支援方法のフロー例２を示す図である。
【図１１】本実施形態の部品の仕様例を示す図である。
【図１２】本実施形態のソースコード生成支援方法のフロー例３を示す図である。
【図１３】本実施形態のソースコード生成支援方法のフロー例４を示す図である。
【図１４】本実施形態の既存部品組合せの例を示す図である。
【図１５】本実施形態の画面例１を示す図である。
【図１６】本実施形態のブロック部品の例３を示す図である。
【図１７】本実施形態のソースコード生成支援方法のフロー例５を示す図である。
【図１８】本実施形態の分解前の部品の例を示す図である。
【図１９】本実施形態の分解部品の例を示す図である。
【図２０】本実施形態のソースコード生成支援方法のフロー例６を示す図である。
【図２１】本実施形態の画面例２を示す図である。
【図２２】本実施形態のソースコード生成支援方法のフロー例７を示す図である。
【図２３】本実施形態のソースコード生成支援方法のフロー例８を示す図である。
【図２４】本実施形態のソースコード生成支援方法のフロー例９を示す図である。
【図２５】本実施形態のソースコード生成支援方法のフロー例１０を示す図である。
【図２６】本実施形態の生成コード２の例を示す図である。
【発明を実施するための形態】
【００１５】
−−−システム構成−−−
以下に本発明の実施形態について図面を用いて詳細に説明する。図１は、本実施形態のソースコード生成支援装置１００の構成例を示す図である。図１に示すソースコード生成支援装置１００は、部品を活用したソースコード生成の効率および精度を良好なものとするコンピュータ装置である。
【００１６】
このソースコード生成支援装置１００は、ソフト開発を行うベンダー、ＳＩｅｒ等が運用する情報処理装置である。ソフト開発の担当者らは、このソースコード生成支援装置１００を利用し、既存の部品（所定規模のコード記述。以下、既存部品）を適宜組合せるなどしてソースコード全体の生成を効率的に遂行する。また、機能が重複する、すなわち代替可能な既存部品の削除や、新たな部品登録の必要性の的確な判断等を通じて、部品規模の最適化を図ることとなる。
【００１７】
こうした本実施形態のソースコード生成支援装置１００は、既存部品保持部１１０、コード作成部１１１、コード保持部１１２、コード編集部１１３、変更部品特定部１１４、部品仕様抽出部１１５、変更部品仕様保持部１１６、部品仕様比較判定部１１７、部品追加部１１８、部品削除部１１９、部品結合部１２０、および、コード更新部１２１を備えている。
【００１８】
このうち既存部品保持部１１０は、ソースコード生成に用いる上述の既存部品を保持、管理するものである。既存部品保持部１１０が保持する既存部品は、図２〜４に示す、テンプレート部品１２５およびブロック部品１２６を含む。
【００１９】
テンプレート部品１２５は、生成対象となりうるソースコードの１部または全部の雛形である。一方、ブロック部品１２６は、テンプレート部品１２５に組み込まれ、呼び出し対象となるコード記述である。
【００２０】
テンプレート部品１２５は、図２に示すようにブロック部品１２６を組み込む箇所として、「処理呼び出し」のコメントが一部に含まれている。この「処理呼び出し」箇所に、ブロック部品１２６が組み込まれる。
【００２１】
また、コード作成部１１１は、ソースコード生成支援装置１００にアクセスしてきたユーザ端末等に対し、ソースコード生成用のユーザインターフェイスを提供してユーザ指示を取得し、当該ユーザ指示に応じてソースコード（例えば、図５の生成コード１２７）の生成を行うものである。
【００２２】
上述のユーザインターフェイスは、例えば、ユーザ指示に応じたテンプレート部品を、ユーザ端末等に画面出力させ、このテンプレート部品に対するブロック部品の設定指示を受け付ける、といった一連のインターフェイスである。なお、ユーザ端末は、上述のソフト開発の担当者が操作する端末である。
【００２３】
また、コード保持部１１２は、コード作成部１１１が生成したソースコードを格納、管理するものである。
【００２４】
また、コード編集部１１３は、コード保持部１１２が保持するソースコードに対し、例えば、上述のユーザ端末から受けた修正要求に応じて、対応する修正処理を実行する。こ
の修正処理を経たソースコードを、変更後生成コード１２８（例えば、図６の変更後生成コード１２８）とする。
【００２５】
また、変更部品特定部１１４は、コード保持部１１２が保持するソースコードに対し、コード編集部１１３を介してユーザ端末から受けた修正内容、すなわちソースコードにおける変更箇所を特定する。
【００２６】
また、部品仕様抽出部１１５は、変更部品特定部１１４が特定した変更箇所を含む部品に対し、記号実行を行うことで当該部品の仕様を抽出するものである。
【００２７】
また、変更部品仕様保持部１１６は、部品使用抽出部１１５が抽出した仕様を保持する。
【００２８】
また、部品仕様比較判定部１１７は、変更部品仕様保持部１１６が保持する仕様と、１または複数の既存部品（既存部品保持部１１０から呼び出す）ないし当該既存部品の１または複数の分解部品の仕様とを比較するものである。
【００２９】
また、部品追加部１１８は、上述の部品仕様比較判定部１１７での比較の結果、部品使用抽出部１１５が抽出した、変更箇所における部品の仕様と一致する既存部品ないし分解部品を特定できなかった場合、当該変更箇所を含む部品を、新たな既存部品として既存部品保持部１１０に格納するものである。
【００３０】
また、部品削除部１１９は、新たな既存部品の格納後の既存部品保持部１１０から、削除候補である１または複数の既存部品、および、その他の１または複数の既存部品を抽出し、ここで抽出した既存部品の間で仕様の比較を実行し、当該比較の結果、仕様の一致がみられた場合、削除候補である１または複数の既存部品を、既存部品保持部１１０から削除する。
【００３１】
また、部品結合部１２０は、下記のコード更新部による置換がなされた後のコード保持部１１２から、所定のソースコードを抽出し、当該ソースコードを構成する部品のうち互いに所定関係を有する部品群が、コード保持部１１２で保持する他のソースコードでも同じ関係を持って使用されているか判定し、この判定の結果、上述の部品群が上述の他のソースコードでも同じ関係を持って使用されている場合、当該部品群を構成する各部品を結合した新たな既存部品を既存部品保持部１１０に格納し、また、当該部品群を既存部品保持部１１０から削除するものである。
【００３２】
また、コード更新部１２１は、上述の部品仕様比較判定部１１７での比較の結果、上述の変更箇所を含む部品の仕様と一致する、１または複数の既存部品ないし分解部品を特定できた場合、処理対象のソースコード（コード保持部１１２が保持している）における対象箇所の部品を、特定した１または複数の既存部品ないし分解部品で置換するものである。
【００３３】
−−−ハードウェア構成−−−
また、ソースコード生成支援装置１００のハードウェア構成は以下の如くとなる。図７は、本実施形態のソースコード生成支援装置１００のハードウェア構成例を示す図である。  ソースコード生成支援装置１００は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）やハードディスクドライブなど適宜な不揮発性記憶素子で構成される記憶部１０１、ＲＡＭなど揮発性記憶素子で構成されるメモリ１０３、記憶部１０１に保持されるプログラム１０２をメモリ１０３に読み出すなどして実行し装置自体の統括制御を行なうとともに各種判定、演算及び制御処理を行なうＣＰＵなどの演算部１０４、ユーザからのキー入力
や音声入力を受け付ける入力部１０５、処理データの表示を行うディスプレイ等の出力部１０６、プログラムやデータ等を外部媒体から読み取るインターフェイスたる外部媒体入出力部１０７、を備える。
【００３４】
なお、記憶装置１０１内には、本実施形態のソースコード生成支援装置として必要な機能を実装する為のプログラム１０２に加えて、テンプレート部品１２５、ブロック部品１２６、生成コード１２７、変更後生成コード１２８、変更部品１２９、部品仕様１３０、既存部品組合せ１３１、分解前部品１３２、分解部品１３３、および、更新後生成コード１３４、が少なくとも記憶されている。
【００３５】
−−−フロー例１−−−
以下、本実施形態におけるソースコード生成支援方法の実際手順について図に基づき説明する。以下で説明するソースコード生成支援方法に対応する各種動作は、ソースコード生成支援装置１００がメモリ等に読み出して実行するプログラムによって実現される。そして、このプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００３６】
図８は、本実施形態におけるソースコード生成支援方法のフロー例１を示す図である。ここでは、既存部品の組合せにて作成されたソースコード（図５の生成コード１２７参照）が、コード編集部１１３を介して開発者によって変更された状況（図６の変更後生成コード１２８）を想定する。ただし、この変更の前後の当該ソースコードは、いずれもコード保持部１１２に保持されている。また、上述の変更は、既存部品における可変項目ではなく不変項目を対象とするものであったとする。
【００３７】
そこでまず、変更部品特定部１１４は、コード保持部１１２において、上述の変更の前後のそれぞれのソースコード（以後の生成コード）を読み出し、これらソースコードの間で各行を照合するなどして差分、すなわちコード変更箇所を特定する（ｓ１０）。
【００３８】
続いて、変更部品特定部１１４は、上述の変更後の生成コードにおいて、ｓ１０で特定したコード変更箇所の前後のコードを検索し、ラベルを表すコメント文を取得する（ｓ１１）。図６の変更後生成コード１２８の例であれば、“ブロック部品「ファイル削除」ここから”と、“ブロック部品「ファイル削除」ここまで”が、コメント分に該当する。
【００３９】
また、変更部品特定部１１４は、ｓ１１で取得したコメント文を参照することで、コード変更箇所がどの部品に含まれるかを特定し（ｓ１２）、処理を終了する。上述の例の場合、“ブロック部品「ファイル削除」ここから”と、“ブロック部品「ファイル削除」ここまで”との間にあるコード、すなわちブロック部品（図９の変更部品１２９）が相当する。
【００４０】
−−−フロー例２−−−
続いて、部品仕様抽出部１１５における処理について説明する。図１０は、本実施形態におけるソースコード生成支援方法のフロー例２を示す図である。
【００４１】
上述のフロー例１における、変更部品特定部１１４による変更部品特定を経て、部品仕様抽出部１１５は以下の処理を実行する。
【００４２】
すなわち部品仕様抽出部１１５は、ｓ１２で特定された変更部品１２９に対し、記号実行を行って、当該変更部品１２９の仕様すなわちステートメントを取得する（ｓ２０）。こうして得られるステートメントの例を図１１に示す。ここで例示するように、変更部品１２９の探索で特定されたパスごとに、当該パスのパス条件、変数状態、および、ファイ
ル操作、といった値が仕様が、その有無に応じて特定されることとなる。
【００４３】
続いて、部品仕様抽出部１１５は、ｓ２０で得たステートメントが、変数状態とファイル操作のいずれについての値であるか判定する（ｓ２１）。
【００４４】
上述の判定の結果、当該ステートメントが変数状態についての値である場合（ｓ２１：変数）、部品仕様抽出部１１５は、従来の記号実行と同様に、ｓ２０で得ているステートメントに基づいて、パス条件あるいはパス実行結果を更新する（ｓ２２）。
【００４５】
一方、上述の判定の結果、当該ステートメントがファイル操作についての値である場合（ｓ２１：ファイル操作）、部品仕様抽出部１１５は、取得したステートメントを、ファイル操作情報として保持する（ｓ２３）。
【００４６】
続いて、部品仕様抽出部１１５は、全てのパスについて探索を完了したか判定する（ｓ２４）。
【００４７】
上述の判定の結果、全てのパスについての探索が完了していない場合（ｓ２４：ｎ）、部品仕様抽出部１１５は、処理をｓ２０に戻す。
【００４８】
他方、上述の判定の結果、全てのパスについて探索を完了している場合（ｓ２４：ｙ）、部品仕様抽出部１１５は、処理を終了する。
【００４９】
−−−フロー例３〜５−−−
続いて、部品仕様比較判定部１１７における処理について説明する。図１２、図１３、および、図１７は、それぞれ本実施形態におけるソースコード生成支援方法のフロー例３、４、５を示す図である。
【００５０】
まず、部品仕様比較判定部１１７は、上述のフロー例２において部品仕様抽出部１１５が得た変更部品の仕様を取得する（ｓ３０）。
【００５１】
続いて、部品仕様比較判定部１１７は、既存部品保持部１１０において、例えばランダムに選定した所定の既存部品同士を組合せ、既存部品組合せ（図１４の既存部品組合せ１３１参照）を作成する（ｓ３１）。
【００５２】
また、部品仕様比較判定部１１７は、ｓ３１で作成した既存部品組合せ１３１の仕様を、例えば部品仕様抽出部１１５により抽出する（ｓ３２）。
【００５３】
続いて、部品仕様比較判定部１１７は、ｓ３２で得た既存部品組合せ１３１の仕様と変更部品の仕様とが一致するか判定する（ｓ３３）。この仕様の一致の判定は、例えば、図１１で例示した部品仕様１３０におけるパス条件、変数状態、および、ファイル操作、の各値が全て一致することをもって、「仕様が一致」と判定する。
【００５４】
上述の判定の結果、仕様の一致が判明した場合（ｓ３３：ｙ）、部品仕様比較判定部１１７は、処理をｓ３６に遷移させる。
【００５５】
他方、上述の判定の結果、仕様の不一致が判明した場合（ｓ３３：ｎ）、部品仕様比較判定部１１７は、上述の既存部品組合せの仕様と変更部品の仕様を、出力部１０６にて表示させ（図１５の画面５００参照）、両者の仕様は一致するとみなしてよいか否かについてユーザ指示を受け付ける。
【００５６】
また、部品仕様比較判定部１１７は、上述の画面を介して仕様一致とみなす旨のユーザ指示を受けたか判定する（ｓ３４）。
【００５７】
上述の判定の結果、仕様は一致とみなす旨のユーザ指示を受けていた場合（ｓ３４：ｙ）、部品仕様比較判定部１１７は、処理をｓ３６に遷移させる。
【００５８】
他方、上述の判定の結果、仕様は一致とみなす旨のユーザ指示を受けていない場合（ｓ３４：ｎ）、部品仕様比較判定部１１７は、全ての既存部品組合せを作成したか判定する（ｓ３５）。
【００５９】
上述の判定の結果、既存部品の全ての組合せに関して既存部品組合せの作成を終えていない場合（ｓ３５：ｎ）、部品仕様比較判定部１１７は、処理をｓ３１に遷移させる。
【００６０】
他方、上述の判定の結果、全ての既存部品組合せを作成済みである場合（ｓ３５：ｙ）、部品仕様比較判定部１１７は、処理をｓ３７（図１３のフロー）に遷移させる。
【００６１】
他方、上述のｓ３３、ｓ３４での判定の結果、処理をｓ３６に遷移させた部品仕様比較判定部１１７は、当該既存部品組合せで、変更部品の代替が可能と判定する（ｓ３６）。このように変更部品と置換可能と判定された既存部品組合せの例を図１６に例示する。
【００６２】
一方、上述のｓ３５での判定の結果、ｓ３７に処理を遷移させた部品仕様比較判定部１１７は、既存部品保持部１１０における所定の既存部品を分解して、分解部品を作成する（ｓ３７）。
【００６３】
この分解部品の作成手順については、図１７のフローに基づき詳細説明する。この場合、部品仕様比較判定部１１７は、既存部品保持部１１０から分解対象の既存部品（図１８の分解前の部品１３２参照）を取得する（ｓ５０）。
【００６４】
また、部品仕様比較判定部１１７は、当該既存部品において、ネスト構造外の行を分解点として選択する（ｓ５１）。
【００６５】
続いて、部品仕様比較判定部１１７は、ｓ５１で選択した分解点で当該既存部品を分解した場合、予め定めた所定条件を満たすか判定する（ｓ５２）。
【００６６】
上述の判定の結果、所定条件を満たさない場合（ｓ５２：ｎ）、部品仕様比較判定部１１７は、処理をｓ５１に遷移させる。
【００６７】
他方、上述の判定の結果、所定条件を満たす場合（ｓ５２：ｙ）、部品仕様比較判定部１１７は、選択した分解点で既存部品を分解して分解部品（図１９の分解部品１３３参照）を作成し（ｓ５３）、本フローを終了する。
【００６８】
ここで図１３のフローに関する説明に戻る。ｓ３７で分解部品を作成した部品仕様比較判定部１１７は、既存部品保持部１１０における所定の既存部品と、ｓ５３で得た分解部品１３３とを組合せることで、既存分解部品組合せを作成する（ｓ３８）。
【００６９】
また、部品仕様比較判定部１１７は、既存分解部品組合せの仕様を、部品仕様抽出部１１５により抽出する（ｓ３９）。
【００７０】
続いて、部品仕様比較判定部１１７は、ｓ３９で得た既存分解部品組合せの仕様と、ｓ３０で得ている変更部品の仕様とが一致するか判定する（ｓ４０）。
【００７１】
上述の判定の結果、仕様が一致するものであった場合（ｓ４０：ｙ）、部品仕様比較判定部１１７は、既存分解部品で変更部品の代替が可能と判定し（ｓ４１）、処理を終了する。
【００７２】
他方、上述の判定の結果、仕様が一致しないものであった場合（ｓ４０：ｎ）、部品仕様比較判定部１１７は、図１５と同様の画面を出力部１０６に表示させ、両者の仕様は一致するとみなしてよいか否かのユーザ指示を受け付ける。
【００７３】
この場合、部品仕様比較判定部１１７は、仕様は一致するとみなしてよい旨のユーザ指示を受け付けたか判定する（ｓ４２）。
【００７４】
上述の判定の結果、仕様は一致するとみなしてよい旨のユーザ指示を受けた場合（ｓ４２：ｙ）、部品仕様比較判定部１１７は、既存分解部品で変更部品の代替が可能と判定し（ｓ４１）、処理を終了する。
【００７５】
他方、上述の判定の結果、仕様は一致とみなしてよい旨のユーザ指示を受けていない場合（ｓ４２：ｎ）、部品仕様比較判定部１１７は、全ての既存分解部品組合せを作成したか判定する（ｓ４３）。
【００７６】
上述の判定の結果、既存分解部品の全ての組合せに関して既存分解部品組合せの作成を終えていない場合（ｓ４３：ｎ）、部品仕様比較判定部１１７は、処理をｓ３８に遷移させる。
【００７７】
他方、上述の判定の結果、全ての既存分解部品組合せを作成している場合（ｓ４３：ｙ）、部品仕様比較判定部１１７は、全ての分解方法を試したか判定する（ｓ４４）。
【００７８】
上述の判定の結果、全ての分解方法を試し終えていない場合（ｓ４４：ｎ）、部品仕様比較判定部１１７は、処理をｓ３７に遷移させる。
【００７９】
他方、上述の判定の結果、全ての分解方法を試し終えていた場合（ｓ４４：ｙ）、部品仕様比較判定部１１７は、変更部品を新規の既存部品として登録すべきであると判定し（ｓ４５）、処理を終了する。
【００８０】
−−−フロー例６−−−
続いて、部品追加部１１８における処理について説明する。図２０は、本実施形態におけるソースコード生成支援方法のフロー例６を示す図である。
【００８１】
この場合、部品追加部１１８は、部品仕様比較判定部１１７による判定結果、すなわち部品仕様比較判定結果が、既存部品で代替可能、分解部品で代替可能、および、新規部品登録要、のいずれであったか判定する（ｓ６０）。
【００８２】
上述の判定の結果、部品仕様比較の判定結果が、既存部品で代替可能である旨を示すものであった場合であった場合（ｓ６０：既存部品で代替可能）、部品追加部１１８は処理を終了する。
【００８３】
他方、上述の判定の結果、部品仕様比較の判定結果が、分解部品で代替可能である旨を示すものであった場合（ｓ６０：分解部品で代替可能）、部品追加部１１８は、分解部品を新規部品として登録して良いとのユーザ指示を受け付けたか判定する（ｓ６１）。このユーザ指示を受け付けるインターフェイスの例として、図２１にユーザ確認画面６００を
示す。
【００８４】
この判定の結果、当該ユーザ指示を受けていなかった場合（ｓ６１：ｎ）、部品追加部１１８は、処理を終了する。
【００８５】
他方、上述の判定の結果、当該ユーザ指示を受けている場合（ｓ６１：ｙ）、部品追加部１１８は、当該分解部品を新規の既存部品として既存部品保持部１１０に登録し（ｓ６２）、処理を終了する。
【００８６】
一方、上述の判定の結果、部品仕様比較の判定結果が、新規部品登録要である旨を示すものであった場合（ｓ６０：新規部品登録要）、部品追加部１１８は、当該変更部品を新規部品として登録して良いとのユーザ指示を受け付けたか否か判定する（ｓ６３）。このユーザ指示を受け付けるインターフェイスの例として、図２１にユーザ確認画面６００を示す。
【００８７】
この判定の結果、当該ユーザ指示を受けていなかった場合（ｓ６３：ｎ）、部品追加部１１８は、処理を終了する。
【００８８】
他方、上述の判定の結果、当該ユーザ指示を受けている場合（ｓ６３：ｙ）、部品追加部１１８は、当該変更部品を新規の既存部品として既存部品保持部１１０に登録し（ｓ６４）、処理を終了する。
【００８９】
−−−フロー例７−−−
続いて、変更部品が複数存在する場合における、部品仕様比較判定部１１７ないし部品追加部１１８の処理について説明する。図２２は、本実施形態におけるソースコード生成支援方法のフロー例７を示す図である。ここでは、部品追加部１１８が処理を実行するものとして説明を行う。
【００９０】
まず、部品追加部１１８は、複数の変更部品の全てに対して以降の処理（ｓ７１〜７７）を実行したか判定する（ｓ７０）。
【００９１】
上述の判定の結果、複数の変更部品全てについて処理を実行済みであることが判明した場合（ｓ７０：ｙ）、部品追加部１１８は、処理を終了する。なお、部品追加部１１８は、各変更部品に関して、本フローの処理を完了するごとに所定のフラグを付与するなどして、処理の未済ステータスを例えばメモリ上で管理しているものとする。
【００９２】
一方、上述の判定の結果、複数の変更部品のうち未処理のものが残っている場合（ｓ７０：ｎ）、未処理の変更部品を１つ選択する（ｓ７１）。
【００９３】
また、部品追加部１１８は、ｓ７１で選択した変更部品の他の、残りの変更部品（未処理のもの）が存在するか、すなわちｓ７１で選択したもの以外に未処理のものが残っておらず、他の変更部品は直近までのフローにおけるｓ７３で全て取得したか判定する（ｓ７２）。
【００９４】
この判定の結果、他の全ての変更部品を取得済みであった場合（ｓ７２：ｙ）、部品追加部１１８は、処理をｓ７０に遷移させる。
【００９５】
他方、上述の判定の結果、他の全ての変更部品を取得済みではなかった場合（ｓ７２：ｎ）、未処理である他の変更部品を取得する（ｓ７３）。
【００９６】
また、部品追加部１１８は、ｓ７１で選択した変更部品を新規部品として登録することで、ｓ７３で選択した他の変更部品と仕様が一致する既存部品組合せ、あるいは分解部品組合せを作成できるか判定する（ｓ７４）。
【００９７】
この判定の結果、ｓ７１で選択した変更部品を新規部品として登録することで、ｓ７３で選択した他の変更部品と仕様が一致する既存部品組合せ、あるいは分解部品組合せを作成できない場合（ｓ７４：ｎ）、処理をｓ７２に遷移させる。
【００９８】
他方、上述の判定の結果、ｓ７１で選択した変更部品を新規部品として登録することで、ｓ７３で選択した他の変更部品と仕様が一致する既存部品組合せ、あるいは分解部品組合せを作成できる場合（ｓ７４：ｙ）、当該変更部品に関して管理している置換可能数をインクリメントし、処理をｓ７２に遷移させる。この置換可能数は、変更部品のうち、既存部品や分解部品などとの置換可能性がより高いもの、すなわち部品間の置換に関しての汎用性が高い、ことを示す値と言える。
【００９９】
こうした一連の処理を繰り返し実行した結果、上述のｓ７０における判定にて、全ての変更部品について実行したことが判明した場合（ｓ７０：ｙ）、部品追加部１１８は、置換可能数が最も大きい変更部品を新規部品として既存部品保持部１１０に登録する（ｓ７６）。
【０１００】
また、部品追加部１１８は、新規部品として登録しなかった変更部品、つまり、置換可能数が最大ではなかった変更部品について、部品仕様比較判定部１１７を呼び出して該当処理を再実行し（ｓ７７）、処理を終了する。
【０１０１】
−−−フロー例８−−−
続いて、部品削除部１１９における処理について説明する。図２３は、本実施形態におけるソースコード生成支援方法のフロー例８を示す図である。
【０１０２】
この場合、部品削除部１１９は、既存部品保持部１１０で保持する既存部品のうち、例えば、入力部１０５を介して受けた削除候補部品に関する選択指示に基づき、対応する既存部品を抽出する（ｓ８０）。
【０１０３】
続いて、部品削除部１１９は、ｓ８０で選択した削除候補部品とは別の既存部品を、既存保持部１１０から適宜ルールで複数抽出し、既存部品組合せを作成する（ｓ８１）。
【０１０４】
また、部品削除部１１９は、ｓ８０で選択した削除候補部品、および、ｓ８１で得た既存部品組合せ、のそれぞれの仕様を部品仕様抽出部１１５により特定する（ｓ８２）。
【０１０５】
続いて、部品削除部１１９は、ｓ８２で得た、削除候補部品の仕様と既存部品組合せの仕様とが一致するか判定する（ｓ８３）。
【０１０６】
上述の判定の結果、仕様が一致しない場合（ｓ８３：ｎ）、部品削除部１１９は、全ての既存部品組合せを作成したか判定する（ｓ８４）。
【０１０７】
この判定の結果、全ての既存部品に関して組合せを作成済みでなかった場合（ｓ８４：ｎ）、部品削除部１１９は、処理をｓ８１に遷移させる。
【０１０８】
他方、上述の判定の結果、全ての既存部品組合せを作成済みである場合（ｓ８４：ｙ）、部品削除部１１９は、処理をｓ８７に遷移させる。
【０１０９】
一方、上述のｓ８３での判定の結果、仕様が一致するものである場合（ｓ８３：ｙ）、部品削除部１１９は、削除候補部品を削除してよいとのユーザ指示を受けているか判定する（ｓ８５）。このユーザ指示を受け付けるインターフェイスの例は、図２１のユーザ確認画面６００が該当する。
【０１１０】
上述の判定の結果、ユーザ指示を受けている場合（ｓ８５：ｙ）、部品削除部１１９は、ｓ８０で選択した削除候補部品を既存部品保持部１１０から削除する（ｓ８６）。
【０１１１】
他方、上述の判定の結果、ユーザ指示を受けていない場合（ｓ８５：ｎ）、部品削除部１１９は、処理をｓ８７に遷移させる。
【０１１２】
ｓ８７における部品削除部１１９は、全ての削除候補部品を既存部品保持部１１０から選択したか判定する（ｓ８７）。
【０１１３】
この判定の結果、全ての削除候補部品を選択済みではなかったる場合（ｓ８７：ｎ）、部品削除部１１９は、処理をｓ８０に遷移させる。
【０１１４】
一方、上述の判定の結果、全ての削除候補部品を選択済みであった場合（ｓ８７：ｙ）、部品削除部１１９は、処理を終了する。
【０１１５】
−−−フロー例９−−−
続いて、部品結合部１２０における処理について説明する。図２４は、本実施形態におけるソースコード生成支援方法のフロー例９を示す図である。
【０１１６】
この場合まず、部品結合部１２０は、コード保持部１１２が保持する全てのソースコードについて、以下のｓ９１〜９７の各処理を実行したか判定する（ｓ９０）。
【０１１７】
上述の判定の結果、全てのソースコードについて処理を完了している場合（ｓ９０：ｙ）、部品結合部１２０は、処理を終了する。
【０１１８】
一方、上述の判定の結果、コード保持部１１２におけるソースコードのうち未処理のものが残されている場合（ｓ９０：ｎ）、部品結合部１２０は、コード保持部１１２から未処理のソースコードを所定ルールで１つ取得する（ｓ９１）。部品結合部１２０は、コード保持部１１２における各ソースコードについて、本フローの完了に伴う所定のフラグを付与する制御を行い、この結果を例えばメモリ上で管理しているものとする。
【０１１９】
また、部品結合部１２０は、ｓ９１で得たソースコードに関して、当該ソースコードに含まれる全ての部品について以下のｓ９３〜ｓ９７を実行したか判定する（ｓ９２）。
【０１２０】
上述の判定の結果、当該ソースコードが含む全ての部品に関して処理が完了している場合（ｓ９２：ｙ）、部品結合部１２０は、処理をｓ９０に遷移させる。
【０１２１】
他方、上述の判定の結果、当該ソースコードが含む部品のうち処理が未完了のものが存在している場合（ｓ９２：ｎ）、部品結合部１２０は、当該ソースコードを構成する部品で未処理のものの中から所定の部品“Ａ”を取得する（ｓ９３）。部品結合部１２０は、処理対象のソースコードが含む各部品について、本フローの完了に伴う所定のフラグを付与する制御を行い、この結果を例えばメモリ上で管理しているものとする。
【０１２２】
また、部品結合部１２０は、上述のソースコードにおいて、ｓ９３で得た部品Ａの直後に配置されている部品“Ｂ”を取得する（ｓ９４）。
【０１２３】
続いて、部品結合部１２０は、上述の部品“Ａ”を使用している、すなわち含んでいる他のソースコードをコード保持部１１２から取得する（ｓ９５）。
【０１２４】
また、部品結合部１２０は、部品“Ａ”を使用している他の全てのソースコードにおいて、部品“Ａ”の直後に部品“Ｂ”が使用されているか判定する（ｓ９６）。
【０１２５】
この判定の結果、他のソースコードのうち部品“Ａ”の直後に部品“Ｂ”が使用されていないものも存在する場合（ｓ９６：ｎ）、部品結合部１２０は、処理をｓ９２に遷移させる。
【０１２６】
他方、上述の判定の結果、他の全てのソースコードにおいて、部品“Ａ”の直後に部品“Ｂ”が使用されていることが判明した場合（ｓ９６：ｙ）、部品結合部１２０は、部品“Ａ”と部品“Ｂ”の組合せを新規の既存部品として、既存部品保持部１１０に登録し（ｓ９７）、処理を終了する。
【０１２７】
−−−フロー例１０−−−
続いて、コード更新部１２１における処理について説明する。図２５は、本実施形態におけるソースコード生成支援方法のフロー例１０を示す図である。
【０１２８】
この場合、コード更新部１２１は、部品仕様比較判定部１１７における処理結果、すなわち部品仕様比較判定結果が、新規部品登録要、分解部品で代替可能、および、既存部品で代替可能、のいずれであったか判定する（ｓ１００）。
【０１２９】
上述の判定の結果、部品仕様比較判定結果が「新規部品登録要」であった場合（ｓ１００：）、コード更新部１２１は、処理を終了する。
【０１３０】
他方、上述の判定の結果、部品仕様比較判定結果が「分解部品で代替可能」であった場合（ｓ１００：分解部品で代替可能）、コード更新部１２１は、変更後生成コード１２８における変更部品を分解部品で置換し（ｓ１０１）、処理を終了する。
【０１３１】
一方、上述の判定の結果、部品仕様比較判定結果が「既存部品で代替可能」であった場合（ｓ１００：既存部品で代替可能）、コード更新部１２１は、変更後生成コード１２８における変更部品を既存部品で置換し（ｓ１０２）、処理を終了する。
【０１３２】
こうしたコード更新部１２１による、ソースコードにおける変更部品の、分解部品ないし既存部品での置換、の具体例については、図２６の更新後生成コード１３４に示す。
【０１３３】
以上、本発明を実施するための最良の形態などについて具体的に説明したが、本発明はこれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【０１３４】
こうした本実施形態によれば、部品を活用したソースコード生成の効率および精度を良好なものとできる。
【０１３５】
本明細書の記載により、少なくとも次のことが明らかにされる。すなわち、本実施形態のソースコード生成支援装置において、前記記憶部は、前記既存部品を保持するものであり、前記演算部は、前記比較の結果、前記特定した１または複数の分解部品を、新たな前記既存部品として記憶部に格納する処理を更に実行するものである、としてもよい。
【０１３６】
これによれば、既存部品を分解して得た分解部品を既存部品として以後活用可能となり
、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【０１３７】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記新たな既存部品の格納後の記憶部から、削除候補である１または複数の既存部品、および、その他の１または複数の既存部品を抽出し、前記抽出した既存部品の間で前記仕様の比較を実行し、当該比較の結果、仕様の一致がみられた場合、前記削除候補である１または複数の既存部品を、前記記憶部から削除する処理を更に実行するものである、としてもよい。
【０１３８】
これによれば、既存部品として記憶部に格納したもののうち、幅広く活用できる有用なものを残すことが可能となり、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【０１３９】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記置換がなされた後の記憶部から、所定のコードを抽出し、当該コードを構成する部品のうち互いに所定関係を有する部品群が、前記記憶部で保持する前記コード以外の他のコードでも同じ関係を持って使用されているか判定し、前記判定の結果、前記部品群が前記他のコードでも同じ関係を持って使用されている場合、当該部品群を構成する各部品を結合した新たな既存部品を記憶部に格納し、前記部品群を記憶部から削除する処理を更に実行するものである、としてもよい。
【０１４０】
これによれば、常に記述されやすい部品群を既存部品として記憶部に格納し、以後活用可能でき、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【０１４１】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記比較の結果、前記特定ができなかった前記部品が複数存在する場合、当該複数の前記部品のうち所定の１つとそれ以外の他部品に関して、前記１つの部品により、前記他部品と仕様が同じ既存部品の組合せを作成できるか、および、前記１つの部品を分解して作成した分解部品により、前記他部品と仕様が同じ既存部品の組合せを作成できるか、を判定する処理と、前記判定の結果、既存部品の組合せを作成できる事象の数を、前記１つの部品に関する置換可能数としてカウントする処理と、前記複数の前記部品のうち、前記置換可能数が最大のものを、新たな前記既存部品として記憶部に格納する処理と、を更に実行するものである、としてもよい。
【０１４２】
これによれば、ユーザ作成の部品で既存部品の置換対象とできなかったもののうち、他の部品との関係において、最も幅広く活用可能なものを特定し、既存部品として活用することが可能となる。ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【０１４３】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記比較の結果、前記部品の仕様と部分一致する１または複数の既存部品ないし分解部品を特定できた場合、当該特定した１または複数の既存部品ないし分解部品に関するユーザ判断を所定装置から受け付け、当該ユーザ判断が仕様は一致しているとみなす旨を示すものであれば、前記コードにおける前記対象箇所の部品を前記特定した１または複数の既存部品ないし分解部品で置換するものである、としてもよい。
【０１４４】
これによれば、既存部品等の仕様との完全一致をみないがユーザが認めた部品について、既存部品との置換を行うことが可能となり、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【０１４５】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記部品に対する前記記号実行において、プログラム実行パスを探索する際に、変数値に関する条件に加え、当該プログラム実行パスで実行されるファイル操作をパス条件として抽出し、前記変数値に関する条件および前記パス条件を、前記部品の仕様として抽出するものである、としてもよい。
【０１４６】
これによれば、仕様として重要な観点であるファイル操作についても考慮可能となり、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【０１４７】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記既存部品から１または複数の分解部品を生成する処理を更に実行するものであって、当該分解部品の生成に際し、前記既存部品のコードにおけるネスト構造外の行を分解点として取得し、当該分解点のうち所定の分解点にてコードを分解した場合に得られる分解部品が規定の条件を満たすか判定し、前記判定の結果、前記規定の条件を満たす場合、前記所定の分解点にて既存部品を分解することで分解部品を生成するものである、としてもよい。
【０１４８】
これによれば、部品として所定の意義を備える規模のコードを分解部品として適宜に生成し、これを仕様の一致判定等の所定処理に適用可能となる。ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【符号の説明】
【０１４９】
１００  ソースコード生成支援装置
１０１  記憶部
１０２  プログラム
１０３  メモリ
１０４  演算部
１０５  入力部
１０６  出力部
１０７  外部媒体入出力部
１１０  既存部品保持部
１１１  コード作成部
１１２  コード保持部
１１３  コード編集部
１１４  変更部品特定部
１１５  部品仕様抽出部
１１６  変更部品仕様保持部
１１７  部品仕様比較判定部
１１８  部品追加部
１１９  部品削除部
１２０  部品結合部
１２１  コード更新部
１２５  テンプレート部品
１２６  ブロック部品
１２７  生成コード
１２８  変更後生成コード
１２９  変更部品
１３０  部品仕様
１３１  既存部品組合せ
１３２  分解前部品
１３３  分解部品
１３４  更新後生成コード
【図１】
2020038521.tif 000003
【図２】
2020038521.tif 000004
【図３】
2020038521.tif 000005
【図４】
2020038521.tif 000006
【図５】
2020038521.tif 000007
【図６】
2020038521.tif 000008
【図７】
2020038521.tif 000009
【図８】
2020038521.tif 000010
【図９】
2020038521.tif 000011
【図１０】
2020038521.tif 000012
【図１１】
2020038521.tif 000013
【図１２】
2020038521.tif 000014
【図１３】
2020038521.tif 000015
【図１４】
2020038521.tif 000016
【図１５】
2020038521.tif 000017
【図１６】
2020038521.tif 000018
【図１７】
2020038521.tif 000019
【図１８】
2020038521.tif 000020
【図１９】
2020038521.tif 000021
【図２０】
2020038521.tif 000022
【図２１】
2020038521.tif 000023
【図２２】
2020038521.tif 000024
【図２３】
2020038521.tif 000025
【図２４】
2020038521.tif 000026
【図２５】
2020038521.tif 000027
【図２６】
2020038521.tif 000028