【文献】
金近 勇治、外2名,プログラム仕様表現の自動化における図式の一手法,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2003年 3月 7日,第102巻,第703号,p.1−5
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0015】
−−−システム構成−−−
以下に本発明の実施形態について図面を用いて詳細に説明する。
図1は、本実施形態のソースコード生成支援装置100の構成例を示す図である。
図1に示すソースコード生成支援装置100は、部品を活用したソースコード生成の効率および精度を良好なものとするコンピュータ装置である。
【0016】
このソースコード生成支援装置100は、ソフト開発を行うベンダー、SIer等が運用する情報処理装置である。ソフト開発の担当者らは、このソースコード生成支援装置100を利用し、既存の部品(所定規模のコード記述。以下、既存部品)を適宜組合せるなどしてソースコード全体の生成を効率的に遂行する。また、機能が重複する、すなわち代替可能な既存部品の削除や、新たな部品登録の必要性の的確な判断等を通じて、部品規模の最適化を図ることとなる。
【0017】
こうした本実施形態のソースコード生成支援装置100は、既存部品保持部110、コード作成部111、コード保持部112、コード編集部113、変更部品特定部114、部品仕様抽出部115、変更部品仕様保持部116、部品仕様比較判定部117、部品追加部118、部品削除部119、部品結合部120、および、コード更新部121を備えている。
【0018】
このうち既存部品保持部110は、ソースコード生成に用いる上述の既存部品を保持、管理するものである。既存部品保持部110が保持する既存部品は、
図2〜4に示す、テンプレート部品125およびブロック部品126を含む。
【0019】
テンプレート部品125は、生成対象となりうるソースコードの1部または全部の雛形である。一方、ブロック部品126は、テンプレート部品125に組み込まれ、呼び出し対象となるコード記述である。
【0020】
テンプレート部品125は、
図2に示すようにブロック部品126を組み込む箇所として、「処理呼び出し」のコメントが一部に含まれている。この「処理呼び出し」箇所に、ブロック部品126が組み込まれる。
【0021】
また、コード作成部111は、ソースコード生成支援装置100にアクセスしてきたユーザ端末等に対し、ソースコード生成用のユーザインターフェイスを提供してユーザ指示を取得し、当該ユーザ指示に応じてソースコード(例えば、
図5の生成コード127)の生成を行うものである。
【0022】
上述のユーザインターフェイスは、例えば、ユーザ指示に応じたテンプレート部品を、ユーザ端末等に画面出力させ、このテンプレート部品に対するブロック部品の設定指示を受け付ける、といった一連のインターフェイスである。なお、ユーザ端末は、上述のソフト開発の担当者が操作する端末である。
【0023】
また、コード保持部112は、コード作成部111が生成したソースコードを格納、管理するものである。
【0024】
また、コード編集部113は、コード保持部112が保持するソースコードに対し、例えば、上述のユーザ端末から受けた修正要求に応じて、対応する修正処理を実行する。こ
の修正処理を経たソースコードを、変更後生成コード128(例えば、
図6の変更後生成コード128)とする。
【0025】
また、変更部品特定部114は、コード保持部112が保持するソースコードに対し、コード編集部113を介してユーザ端末から受けた修正内容、すなわちソースコードにおける変更箇所を特定する。
【0026】
また、部品仕様抽出部115は、変更部品特定部114が特定した変更箇所を含む部品に対し、記号実行を行うことで当該部品の仕様を抽出するものである。
【0027】
また、変更部品仕様保持部116は、部品使用抽出部115が抽出した仕様を保持する。
【0028】
また、部品仕様比較判定部117は、変更部品仕様保持部116が保持する仕様と、1または複数の既存部品(既存部品保持部110から呼び出す)ないし当該既存部品の1または複数の分解部品の仕様とを比較するものである。
【0029】
また、部品追加部118は、上述の部品仕様比較判定部117での比較の結果、部品使用抽出部115が抽出した、変更箇所における部品の仕様と一致する既存部品ないし分解部品を特定できなかった場合、当該変更箇所を含む部品を、新たな既存部品として既存部品保持部110に格納するものである。
【0030】
また、部品削除部119は、新たな既存部品の格納後の既存部品保持部110から、削除候補である1または複数の既存部品、および、その他の1または複数の既存部品を抽出し、ここで抽出した既存部品の間で仕様の比較を実行し、当該比較の結果、仕様の一致がみられた場合、削除候補である1または複数の既存部品を、既存部品保持部110から削除する。
【0031】
また、部品結合部120は、下記のコード更新部による置換がなされた後のコード保持部112から、所定のソースコードを抽出し、当該ソースコードを構成する部品のうち互いに所定関係を有する部品群が、コード保持部112で保持する他のソースコードでも同じ関係を持って使用されているか判定し、この判定の結果、上述の部品群が上述の他のソースコードでも同じ関係を持って使用されている場合、当該部品群を構成する各部品を結合した新たな既存部品を既存部品保持部110に格納し、また、当該部品群を既存部品保持部110から削除するものである。
【0032】
また、コード更新部121は、上述の部品仕様比較判定部117での比較の結果、上述の変更箇所を含む部品の仕様と一致する、1または複数の既存部品ないし分解部品を特定できた場合、処理対象のソースコード(コード保持部112が保持している)における対象箇所の部品を、特定した1または複数の既存部品ないし分解部品で置換するものである。
【0033】
−−−ハードウェア構成−−−
また、ソースコード生成支援装置100のハードウェア構成は以下の如くとなる。
図7は、本実施形態のソースコード生成支援装置100のハードウェア構成例を示す図である。 ソースコード生成支援装置100は、SSD(Solid State Drive)やハードディスクドライブなど適宜な不揮発性記憶素子で構成される記憶部101、RAMなど揮発性記憶素子で構成されるメモリ103、記憶部101に保持されるプログラム102をメモリ103に読み出すなどして実行し装置自体の統括制御を行なうとともに各種判定、演算及び制御処理を行なうCPUなどの演算部104、ユーザからのキー入力
や音声入力を受け付ける入力部105、処理データの表示を行うディスプレイ等の出力部106、プログラムやデータ等を外部媒体から読み取るインターフェイスたる外部媒体入出力部107、を備える。
【0034】
なお、記憶装置101内には、本実施形態のソースコード生成支援装置として必要な機能を実装する為のプログラム102に加えて、テンプレート部品125、ブロック部品126、生成コード127、変更後生成コード128、変更部品129、部品仕様130、既存部品組合せ131、分解前部品132、分解部品133、および、更新後生成コード134、が少なくとも記憶されている。
【0035】
−−−フロー例1−−−
以下、本実施形態におけるソースコード生成支援方法の実際手順について図に基づき説明する。以下で説明するソースコード生成支援方法に対応する各種動作は、ソースコード生成支援装置100がメモリ等に読み出して実行するプログラムによって実現される。そして、このプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【0036】
図8は、本実施形態におけるソースコード生成支援方法のフロー例1を示す図である。ここでは、既存部品の組合せにて作成されたソースコード(
図5の生成コード127参照)が、コード編集部113を介して開発者によって変更された状況(
図6の変更後生成コード128)を想定する。ただし、この変更の前後の当該ソースコードは、いずれもコード保持部112に保持されている。また、上述の変更は、既存部品における可変項目ではなく不変項目を対象とするものであったとする。
【0037】
そこでまず、変更部品特定部114は、コード保持部112において、上述の変更の前後のそれぞれのソースコード(以後の生成コード)を読み出し、これらソースコードの間で各行を照合するなどして差分、すなわちコード変更箇所を特定する(s10)。
【0038】
続いて、変更部品特定部114は、上述の変更後の生成コードにおいて、s10で特定したコード変更箇所の前後のコードを検索し、ラベルを表すコメント文を取得する(s11)。
図6の変更後生成コード128の例であれば、“ブロック部品「ファイル削除」ここから”と、“ブロック部品「ファイル削除」ここまで”が、コメント分に該当する。
【0039】
また、変更部品特定部114は、s11で取得したコメント文を参照することで、コード変更箇所がどの部品に含まれるかを特定し(s12)、処理を終了する。上述の例の場合、“ブロック部品「ファイル削除」ここから”と、“ブロック部品「ファイル削除」ここまで”との間にあるコード、すなわちブロック部品(
図9の変更部品129)が相当する。
【0040】
−−−フロー例2−−−
続いて、部品仕様抽出部115における処理について説明する。
図10は、本実施形態におけるソースコード生成支援方法のフロー例2を示す図である。
【0041】
上述のフロー例1における、変更部品特定部114による変更部品特定を経て、部品仕様抽出部115は以下の処理を実行する。
【0042】
すなわち部品仕様抽出部115は、s12で特定された変更部品129に対し、記号実行を行って、当該変更部品129の仕様すなわちステートメントを取得する(s20)。こうして得られるステートメントの例を
図11に示す。ここで例示するように、変更部品129の探索で特定されたパスごとに、当該パスのパス条件、変数状態、および、ファイ
ル操作、といった値が仕様が、その有無に応じて特定されることとなる。
【0043】
続いて、部品仕様抽出部115は、s20で得たステートメントが、変数状態とファイル操作のいずれについての値であるか判定する(s21)。
【0044】
上述の判定の結果、当該ステートメントが変数状態についての値である場合(s21:変数)、部品仕様抽出部115は、従来の記号実行と同様に、s20で得ているステートメントに基づいて、パス条件あるいはパス実行結果を更新する(s22)。
【0045】
一方、上述の判定の結果、当該ステートメントがファイル操作についての値である場合(s21:ファイル操作)、部品仕様抽出部115は、取得したステートメントを、ファイル操作情報として保持する(s23)。
【0046】
続いて、部品仕様抽出部115は、全てのパスについて探索を完了したか判定する(s24)。
【0047】
上述の判定の結果、全てのパスについての探索が完了していない場合(s24:n)、部品仕様抽出部115は、処理をs20に戻す。
【0048】
他方、上述の判定の結果、全てのパスについて探索を完了している場合(s24:y)、部品仕様抽出部115は、処理を終了する。
【0049】
−−−フロー例3〜5−−−
続いて、部品仕様比較判定部117における処理について説明する。
図12、
図13、および、
図17は、それぞれ本実施形態におけるソースコード生成支援方法のフロー例3、4、5を示す図である。
【0050】
まず、部品仕様比較判定部117は、上述のフロー例2において部品仕様抽出部115が得た変更部品の仕様を取得する(s30)。
【0051】
続いて、部品仕様比較判定部117は、既存部品保持部110において、例えばランダムに選定した所定の既存部品同士を組合せ、既存部品組合せ(
図14の既存部品組合せ131参照)を作成する(s31)。
【0052】
また、部品仕様比較判定部117は、s31で作成した既存部品組合せ131の仕様を、例えば部品仕様抽出部115により抽出する(s32)。
【0053】
続いて、部品仕様比較判定部117は、s32で得た既存部品組合せ131の仕様と変更部品の仕様とが一致するか判定する(s33)。この仕様の一致の判定は、例えば、
図11で例示した部品仕様130におけるパス条件、変数状態、および、ファイル操作、の各値が全て一致することをもって、「仕様が一致」と判定する。
【0054】
上述の判定の結果、仕様の一致が判明した場合(s33:y)、部品仕様比較判定部117は、処理をs36に遷移させる。
【0055】
他方、上述の判定の結果、仕様の不一致が判明した場合(s33:n)、部品仕様比較判定部117は、上述の既存部品組合せの仕様と変更部品の仕様を、出力部106にて表示させ(
図15の画面500参照)、両者の仕様は一致するとみなしてよいか否かについてユーザ指示を受け付ける。
【0056】
また、部品仕様比較判定部117は、上述の画面を介して仕様一致とみなす旨のユーザ指示を受けたか判定する(s34)。
【0057】
上述の判定の結果、仕様は一致とみなす旨のユーザ指示を受けていた場合(s34:y)、部品仕様比較判定部117は、処理をs36に遷移させる。
【0058】
他方、上述の判定の結果、仕様は一致とみなす旨のユーザ指示を受けていない場合(s34:n)、部品仕様比較判定部117は、全ての既存部品組合せを作成したか判定する(s35)。
【0059】
上述の判定の結果、既存部品の全ての組合せに関して既存部品組合せの作成を終えていない場合(s35:n)、部品仕様比較判定部117は、処理をs31に遷移させる。
【0060】
他方、上述の判定の結果、全ての既存部品組合せを作成済みである場合(s35:y)、部品仕様比較判定部117は、処理をs37(
図13のフロー)に遷移させる。
【0061】
他方、上述のs33、s34での判定の結果、処理をs36に遷移させた部品仕様比較判定部117は、当該既存部品組合せで、変更部品の代替が可能と判定する(s36)。このように変更部品と置換可能と判定された既存部品組合せの例を
図16に例示する。
【0062】
一方、上述のs35での判定の結果、s37に処理を遷移させた部品仕様比較判定部117は、既存部品保持部110における所定の既存部品を分解して、分解部品を作成する(s37)。
【0063】
この分解部品の作成手順については、
図17のフローに基づき詳細説明する。この場合、部品仕様比較判定部117は、既存部品保持部110から分解対象の既存部品(
図18の分解前の部品132参照)を取得する(s50)。
【0064】
また、部品仕様比較判定部117は、当該既存部品において、ネスト構造外の行を分解点として選択する(s51)。
【0065】
続いて、部品仕様比較判定部117は、s51で選択した分解点で当該既存部品を分解した場合、予め定めた所定条件を満たすか判定する(s52)。
【0066】
上述の判定の結果、所定条件を満たさない場合(s52:n)、部品仕様比較判定部117は、処理をs51に遷移させる。
【0067】
他方、上述の判定の結果、所定条件を満たす場合(s52:y)、部品仕様比較判定部117は、選択した分解点で既存部品を分解して分解部品(
図19の分解部品133参照)を作成し(s53)、本フローを終了する。
【0068】
ここで
図13のフローに関する説明に戻る。s37で分解部品を作成した部品仕様比較判定部117は、既存部品保持部110における所定の既存部品と、s53で得た分解部品133とを組合せることで、既存分解部品組合せを作成する(s38)。
【0069】
また、部品仕様比較判定部117は、既存分解部品組合せの仕様を、部品仕様抽出部115により抽出する(s39)。
【0070】
続いて、部品仕様比較判定部117は、s39で得た既存分解部品組合せの仕様と、s30で得ている変更部品の仕様とが一致するか判定する(s40)。
【0071】
上述の判定の結果、仕様が一致するものであった場合(s40:y)、部品仕様比較判定部117は、既存分解部品で変更部品の代替が可能と判定し(s41)、処理を終了する。
【0072】
他方、上述の判定の結果、仕様が一致しないものであった場合(s40:n)、部品仕様比較判定部117は、
図15と同様の画面を出力部106に表示させ、両者の仕様は一致するとみなしてよいか否かのユーザ指示を受け付ける。
【0073】
この場合、部品仕様比較判定部117は、仕様は一致するとみなしてよい旨のユーザ指示を受け付けたか判定する(s42)。
【0074】
上述の判定の結果、仕様は一致するとみなしてよい旨のユーザ指示を受けた場合(s42:y)、部品仕様比較判定部117は、既存分解部品で変更部品の代替が可能と判定し(s41)、処理を終了する。
【0075】
他方、上述の判定の結果、仕様は一致とみなしてよい旨のユーザ指示を受けていない場合(s42:n)、部品仕様比較判定部117は、全ての既存分解部品組合せを作成したか判定する(s43)。
【0076】
上述の判定の結果、既存分解部品の全ての組合せに関して既存分解部品組合せの作成を終えていない場合(s43:n)、部品仕様比較判定部117は、処理をs38に遷移させる。
【0077】
他方、上述の判定の結果、全ての既存分解部品組合せを作成している場合(s43:y)、部品仕様比較判定部117は、全ての分解方法を試したか判定する(s44)。
【0078】
上述の判定の結果、全ての分解方法を試し終えていない場合(s44:n)、部品仕様比較判定部117は、処理をs37に遷移させる。
【0079】
他方、上述の判定の結果、全ての分解方法を試し終えていた場合(s44:y)、部品仕様比較判定部117は、変更部品を新規の既存部品として登録すべきであると判定し(s45)、処理を終了する。
【0080】
−−−フロー例6−−−
続いて、部品追加部118における処理について説明する。
図20は、本実施形態におけるソースコード生成支援方法のフロー例6を示す図である。
【0081】
この場合、部品追加部118は、部品仕様比較判定部117による判定結果、すなわち部品仕様比較判定結果が、既存部品で代替可能、分解部品で代替可能、および、新規部品登録要、のいずれであったか判定する(s60)。
【0082】
上述の判定の結果、部品仕様比較の判定結果が、既存部品で代替可能である旨を示すものであった場合であった場合(s60:既存部品で代替可能)、部品追加部118は処理を終了する。
【0083】
他方、上述の判定の結果、部品仕様比較の判定結果が、分解部品で代替可能である旨を示すものであった場合(s60:分解部品で代替可能)、部品追加部118は、分解部品を新規部品として登録して良いとのユーザ指示を受け付けたか判定する(s61)。このユーザ指示を受け付けるインターフェイスの例として、
図21にユーザ確認画面600を
示す。
【0084】
この判定の結果、当該ユーザ指示を受けていなかった場合(s61:n)、部品追加部118は、処理を終了する。
【0085】
他方、上述の判定の結果、当該ユーザ指示を受けている場合(s61:y)、部品追加部118は、当該分解部品を新規の既存部品として既存部品保持部110に登録し(s62)、処理を終了する。
【0086】
一方、上述の判定の結果、部品仕様比較の判定結果が、新規部品登録要である旨を示すものであった場合(s60:新規部品登録要)、部品追加部118は、当該変更部品を新規部品として登録して良いとのユーザ指示を受け付けたか否か判定する(s63)。このユーザ指示を受け付けるインターフェイスの例として、
図21にユーザ確認画面600を示す。
【0087】
この判定の結果、当該ユーザ指示を受けていなかった場合(s63:n)、部品追加部118は、処理を終了する。
【0088】
他方、上述の判定の結果、当該ユーザ指示を受けている場合(s63:y)、部品追加部118は、当該変更部品を新規の既存部品として既存部品保持部110に登録し(s64)、処理を終了する。
【0089】
−−−フロー例7−−−
続いて、変更部品が複数存在する場合における、部品仕様比較判定部117ないし部品追加部118の処理について説明する。
図22は、本実施形態におけるソースコード生成支援方法のフロー例7を示す図である。ここでは、部品追加部118が処理を実行するものとして説明を行う。
【0090】
まず、部品追加部118は、複数の変更部品の全てに対して以降の処理(s71〜77)を実行したか判定する(s70)。
【0091】
上述の判定の結果、複数の変更部品全てについて処理を実行済みであることが判明した場合(s70:y)、部品追加部118は、処理を終了する。なお、部品追加部118は、各変更部品に関して、本フローの処理を完了するごとに所定のフラグを付与するなどして、処理の未済ステータスを例えばメモリ上で管理しているものとする。
【0092】
一方、上述の判定の結果、複数の変更部品のうち未処理のものが残っている場合(s70:n)、未処理の変更部品を1つ選択する(s71)。
【0093】
また、部品追加部118は、s71で選択した変更部品の他の、残りの変更部品(未処理のもの)が存在するか、すなわちs71で選択したもの以外に未処理のものが残っておらず、他の変更部品は直近までのフローにおけるs73で全て取得したか判定する(s72)。
【0094】
この判定の結果、他の全ての変更部品を取得済みであった場合(s72:y)、部品追加部118は、処理をs70に遷移させる。
【0095】
他方、上述の判定の結果、他の全ての変更部品を取得済みではなかった場合(s72:n)、未処理である他の変更部品を取得する(s73)。
【0096】
また、部品追加部118は、s71で選択した変更部品を新規部品として登録することで、s73で選択した他の変更部品と仕様が一致する既存部品組合せ、あるいは分解部品組合せを作成できるか判定する(s74)。
【0097】
この判定の結果、s71で選択した変更部品を新規部品として登録することで、s73で選択した他の変更部品と仕様が一致する既存部品組合せ、あるいは分解部品組合せを作成できない場合(s74:n)、処理をs72に遷移させる。
【0098】
他方、上述の判定の結果、s71で選択した変更部品を新規部品として登録することで、s73で選択した他の変更部品と仕様が一致する既存部品組合せ、あるいは分解部品組合せを作成できる場合(s74:y)、当該変更部品に関して管理している置換可能数をインクリメントし、処理をs72に遷移させる。この置換可能数は、変更部品のうち、既存部品や分解部品などとの置換可能性がより高いもの、すなわち部品間の置換に関しての汎用性が高い、ことを示す値と言える。
【0099】
こうした一連の処理を繰り返し実行した結果、上述のs70における判定にて、全ての変更部品について実行したことが判明した場合(s70:y)、部品追加部118は、置換可能数が最も大きい変更部品を新規部品として既存部品保持部110に登録する(s76)。
【0100】
また、部品追加部118は、新規部品として登録しなかった変更部品、つまり、置換可能数が最大ではなかった変更部品について、部品仕様比較判定部117を呼び出して該当処理を再実行し(s77)、処理を終了する。
【0101】
−−−フロー例8−−−
続いて、部品削除部119における処理について説明する。
図23は、本実施形態におけるソースコード生成支援方法のフロー例8を示す図である。
【0102】
この場合、部品削除部119は、既存部品保持部110で保持する既存部品のうち、例えば、入力部105を介して受けた削除候補部品に関する選択指示に基づき、対応する既存部品を抽出する(s80)。
【0103】
続いて、部品削除部119は、s80で選択した削除候補部品とは別の既存部品を、既存保持部110から適宜ルールで複数抽出し、既存部品組合せを作成する(s81)。
【0104】
また、部品削除部119は、s80で選択した削除候補部品、および、s81で得た既存部品組合せ、のそれぞれの仕様を部品仕様抽出部115により特定する(s82)。
【0105】
続いて、部品削除部119は、s82で得た、削除候補部品の仕様と既存部品組合せの仕様とが一致するか判定する(s83)。
【0106】
上述の判定の結果、仕様が一致しない場合(s83:n)、部品削除部119は、全ての既存部品組合せを作成したか判定する(s84)。
【0107】
この判定の結果、全ての既存部品に関して組合せを作成済みでなかった場合(s84:n)、部品削除部119は、処理をs81に遷移させる。
【0108】
他方、上述の判定の結果、全ての既存部品組合せを作成済みである場合(s84:y)、部品削除部119は、処理をs87に遷移させる。
【0109】
一方、上述のs83での判定の結果、仕様が一致するものである場合(s83:y)、部品削除部119は、削除候補部品を削除してよいとのユーザ指示を受けているか判定する(s85)。このユーザ指示を受け付けるインターフェイスの例は、
図21のユーザ確認画面600が該当する。
【0110】
上述の判定の結果、ユーザ指示を受けている場合(s85:y)、部品削除部119は、s80で選択した削除候補部品を既存部品保持部110から削除する(s86)。
【0111】
他方、上述の判定の結果、ユーザ指示を受けていない場合(s85:n)、部品削除部119は、処理をs87に遷移させる。
【0112】
s87における部品削除部119は、全ての削除候補部品を既存部品保持部110から選択したか判定する(s87)。
【0113】
この判定の結果、全ての削除候補部品を選択済みではなかったる場合(s87:n)、部品削除部119は、処理をs80に遷移させる。
【0114】
一方、上述の判定の結果、全ての削除候補部品を選択済みであった場合(s87:y)、部品削除部119は、処理を終了する。
【0115】
−−−フロー例9−−−
続いて、部品結合部120における処理について説明する。
図24は、本実施形態におけるソースコード生成支援方法のフロー例9を示す図である。
【0116】
この場合まず、部品結合部120は、コード保持部112が保持する全てのソースコードについて、以下のs91〜97の各処理を実行したか判定する(s90)。
【0117】
上述の判定の結果、全てのソースコードについて処理を完了している場合(s90:y)、部品結合部120は、処理を終了する。
【0118】
一方、上述の判定の結果、コード保持部112におけるソースコードのうち未処理のものが残されている場合(s90:n)、部品結合部120は、コード保持部112から未処理のソースコードを所定ルールで1つ取得する(s91)。部品結合部120は、コード保持部112における各ソースコードについて、本フローの完了に伴う所定のフラグを付与する制御を行い、この結果を例えばメモリ上で管理しているものとする。
【0119】
また、部品結合部120は、s91で得たソースコードに関して、当該ソースコードに含まれる全ての部品について以下のs93〜s97を実行したか判定する(s92)。
【0120】
上述の判定の結果、当該ソースコードが含む全ての部品に関して処理が完了している場合(s92:y)、部品結合部120は、処理をs90に遷移させる。
【0121】
他方、上述の判定の結果、当該ソースコードが含む部品のうち処理が未完了のものが存在している場合(s92:n)、部品結合部120は、当該ソースコードを構成する部品で未処理のものの中から所定の部品“A”を取得する(s93)。部品結合部120は、処理対象のソースコードが含む各部品について、本フローの完了に伴う所定のフラグを付与する制御を行い、この結果を例えばメモリ上で管理しているものとする。
【0122】
また、部品結合部120は、上述のソースコードにおいて、s93で得た部品Aの直後に配置されている部品“B”を取得する(s94)。
【0123】
続いて、部品結合部120は、上述の部品“A”を使用している、すなわち含んでいる他のソースコードをコード保持部112から取得する(s95)。
【0124】
また、部品結合部120は、部品“A”を使用している他の全てのソースコードにおいて、部品“A”の直後に部品“B”が使用されているか判定する(s96)。
【0125】
この判定の結果、他のソースコードのうち部品“A”の直後に部品“B”が使用されていないものも存在する場合(s96:n)、部品結合部120は、処理をs92に遷移させる。
【0126】
他方、上述の判定の結果、他の全てのソースコードにおいて、部品“A”の直後に部品“B”が使用されていることが判明した場合(s96:y)、部品結合部120は、部品“A”と部品“B”の組合せを新規の既存部品として、既存部品保持部110に登録し(s97)、処理を終了する。
【0127】
−−−フロー例10−−−
続いて、コード更新部121における処理について説明する。
図25は、本実施形態におけるソースコード生成支援方法のフロー例10を示す図である。
【0128】
この場合、コード更新部121は、部品仕様比較判定部117における処理結果、すなわち部品仕様比較判定結果が、新規部品登録要、分解部品で代替可能、および、既存部品で代替可能、のいずれであったか判定する(s100)。
【0129】
上述の判定の結果、部品仕様比較判定結果が「新規部品登録要」であった場合(s100:)、コード更新部121は、処理を終了する。
【0130】
他方、上述の判定の結果、部品仕様比較判定結果が「分解部品で代替可能」であった場合(s100:分解部品で代替可能)、コード更新部121は、変更後生成コード128における変更部品を分解部品で置換し(s101)、処理を終了する。
【0131】
一方、上述の判定の結果、部品仕様比較判定結果が「既存部品で代替可能」であった場合(s100:既存部品で代替可能)、コード更新部121は、変更後生成コード128における変更部品を既存部品で置換し(s102)、処理を終了する。
【0132】
こうしたコード更新部121による、ソースコードにおける変更部品の、分解部品ないし既存部品での置換、の具体例については、
図26の更新後生成コード134に示す。
【0133】
以上、本発明を実施するための最良の形態などについて具体的に説明したが、本発明はこれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【0134】
こうした本実施形態によれば、部品を活用したソースコード生成の効率および精度を良好なものとできる。
【0135】
本明細書の記載により、少なくとも次のことが明らかにされる。すなわち、本実施形態のソースコード生成支援装置において、前記記憶部は、前記既存部品を保持するものであり、前記演算部は、前記比較の結果、前記特定した1または複数の分解部品を、新たな前記既存部品として記憶部に格納する処理を更に実行するものである、としてもよい。
【0136】
これによれば、既存部品を分解して得た分解部品を既存部品として以後活用可能となり
、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【0137】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記新たな既存部品の格納後の記憶部から、削除候補である1または複数の既存部品、および、その他の1または複数の既存部品を抽出し、前記抽出した既存部品の間で前記仕様の比較を実行し、当該比較の結果、仕様の一致がみられた場合、前記削除候補である1または複数の既存部品を、前記記憶部から削除する処理を更に実行するものである、としてもよい。
【0138】
これによれば、既存部品として記憶部に格納したもののうち、幅広く活用できる有用なものを残すことが可能となり、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【0139】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記置換がなされた後の記憶部から、所定のコードを抽出し、当該コードを構成する部品のうち互いに所定関係を有する部品群が、前記記憶部で保持する前記コード以外の他のコードでも同じ関係を持って使用されているか判定し、前記判定の結果、前記部品群が前記他のコードでも同じ関係を持って使用されている場合、当該部品群を構成する各部品を結合した新たな既存部品を記憶部に格納し、前記部品群を記憶部から削除する処理を更に実行するものである、としてもよい。
【0140】
これによれば、常に記述されやすい部品群を既存部品として記憶部に格納し、以後活用可能でき、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【0141】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記比較の結果、前記特定ができなかった前記部品が複数存在する場合、当該複数の前記部品のうち所定の1つとそれ以外の他部品に関して、前記1つの部品により、前記他部品と仕様が同じ既存部品の組合せを作成できるか、および、前記1つの部品を分解して作成した分解部品により、前記他部品と仕様が同じ既存部品の組合せを作成できるか、を判定する処理と、前記判定の結果、既存部品の組合せを作成できる事象の数を、前記1つの部品に関する置換可能数としてカウントする処理と、前記複数の前記部品のうち、前記置換可能数が最大のものを、新たな前記既存部品として記憶部に格納する処理と、を更に実行するものである、としてもよい。
【0142】
これによれば、ユーザ作成の部品で既存部品の置換対象とできなかったもののうち、他の部品との関係において、最も幅広く活用可能なものを特定し、既存部品として活用することが可能となる。ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【0143】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記比較の結果、前記部品の仕様と部分一致する1または複数の既存部品ないし分解部品を特定できた場合、当該特定した1または複数の既存部品ないし分解部品に関するユーザ判断を所定装置から受け付け、当該ユーザ判断が仕様は一致しているとみなす旨を示すものであれば、前記コードにおける前記対象箇所の部品を前記特定した1または複数の既存部品ないし分解部品で置換するものである、としてもよい。
【0144】
これによれば、既存部品等の仕様との完全一致をみないがユーザが認めた部品について、既存部品との置換を行うことが可能となり、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【0145】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記部品に対する前記記号実行において、プログラム実行パスを探索する際に、変数値に関する条件に加え、当該プログラム実行パスで実行されるファイル操作をパス条件として抽出し、前記変数値に関する条件および前記パス条件を、前記部品の仕様として抽出するものである、としてもよい。
【0146】
これによれば、仕様として重要な観点であるファイル操作についても考慮可能となり、ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。
【0147】
また、本実施形態のソースコード生成支援装置において、前記演算部は、前記既存部品から1または複数の分解部品を生成する処理を更に実行するものであって、当該分解部品の生成に際し、前記既存部品のコードにおけるネスト構造外の行を分解点として取得し、当該分解点のうち所定の分解点にてコードを分解した場合に得られる分解部品が規定の条件を満たすか判定し、前記判定の結果、前記規定の条件を満たす場合、前記所定の分解点にて既存部品を分解することで分解部品を生成するものである、としてもよい。
【0148】
これによれば、部品として所定の意義を備える規模のコードを分解部品として適宜に生成し、これを仕様の一致判定等の所定処理に適用可能となる。ひいては、部品を活用したソースコード生成の効率および精度をさらに良好なものとできる。