JP5779077B2 - プログラムの生成を支援する装置及び方法 - Google Patents
プログラムの生成を支援する装置及び方法 Download PDFInfo
- Publication number
- JP5779077B2 JP5779077B2 JP2011255577A JP2011255577A JP5779077B2 JP 5779077 B2 JP5779077 B2 JP 5779077B2 JP 2011255577 A JP2011255577 A JP 2011255577A JP 2011255577 A JP2011255577 A JP 2011255577A JP 5779077 B2 JP5779077 B2 JP 5779077B2
- Authority
- JP
- Japan
- Prior art keywords
- information
- naming
- instruction
- code
- generation
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
Description
特許文献1は、演算ブロックにおいて各種演算の演算順序を入力する各種設定入力部により入力された演算順序を、記憶装置が各種パラメータに関連付けて記憶し、記述された制御モデルに対応するプログラムコードを各種パラメータの入力順に生成するコード生成処理部が、記憶装置に記憶された演算順序を入力順として、プログラムコードを生成するプログラムコード生成装置を開示する。
ところが、全ての対象オブジェクトに機械的に命名したのでは、操作者の意図が反映されたプログラムコードを生成できない。
具体的には、第一に、全ての対象オブジェクトに命名することにより、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したいという意図が反映されたプログラムコードを生成できない。その結果、無駄な変数宣言を行うことになり、宣言のリソースが無駄に使用されるという問題が生じる。また、例えば、インラインで表現できる値が、別の箇所で変数として宣言されることにもなり、理解の妨げになるという問題も生じる。
また、特許文献2、3は、プログラムコードの可読性を向上するものであるが、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
更に、特許文献4は、プログラムソースの無駄を省くものではあるが、やはり、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
本発明の他の目的は、操作対象のオブジェクトをユーザが指定した名前で記述したプログラムコードを生成することにある。
また、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを宣言するコードを生成し、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていなければ、引数オブジェクトの値を用いて、オブジェクトを宣言するコードを生成する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が生成命令を示す場合に、オブジェクトに名前が付けられておらず、オブジェクトが後続の操作命令で参照されている状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更に、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更にまた、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない第3の状況が発生すれば、第3の状況の発生数である第3の発生数を計数し、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない第4の状況が発生すれば、第4の状況の発生数である第4の発生数を計数し、表示部は、生成部により計数された第3の発生数と第4の発生数との和が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
[プログラム生成装置の機能構成]
図1は、本実施の形態におけるプログラム生成装置10の機能構成例を示した図である。
図示するように、プログラム生成装置10は、対象オブジェクト記憶部11と、対象オブジェクト管理部12と、操作インターフェイス部13と、実行履歴記憶部14と、コード生成部15と、コード表示部16とを備える。
また、操作対象モデルは、対象オブジェクトへの命名が指示された名前のフィールドも持つ。尚、操作対象モデルは対象オブジェクトに対応付けられているので、対象オブジェクトへの命名が指示された名前は、操作対象モデルに付けられた名前と捉えることができる。
コード生成部15は、実行履歴記憶部14に記憶された実行履歴をプログラムコードに変換する。本実施の形態では、操作命令情報を順次取得する取得部、コードを生成する生成部の一例として、コード生成部15を設けている。
コード表示部16は、コード生成部15が生成したプログラムコードを表示機構90d(図14参照)に出力する。本実施の形態では、コードを表示する表示部の一例として、コード表示部16を設けている。
命令実行順序表21は、操作命令が実行される都度生成された命令情報を実行された順に保持する表形式のデータである。
名前−モデルマッピング表22は、操作対象モデルに付けられた名前と、操作対象モデルとの対応情報を保持する表形式のデータである。
命令情報−モデルマッピング表23は、命令情報と、その命令情報によって生成された操作対象モデルとの対応情報を保持する表形式のデータである。
図2は、プログラム生成装置の第1の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部12が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
そして、ステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名を指示する(ステップ3)。
そして、ステップ4で生成されたjava.lang.StringクラスのインスタンスBへの“newTitle”の命名を指示する(ステップ5)。
また、ステップ1で生成されたjava.lang.StringクラスのインスタンスAをステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行する(ステップ7)。
更に、コード307は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ7の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているが、java.lang.StringクラスのインスタンスAは命名されていないので、前者のインスタンスだけが変数として書き出され、後者のインスタンスとしては“指定された文字列”がインライン展開されたコード307が書き出される。
一方、java.lang.StringクラスのインスタンスBは、java.lang.StringクラスのインスタンスAと同じ文字列であるが、命名されているので、変数としてアクセスする対象となっている。
図4は、プログラム生成装置の第2の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部12が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
まず、ユーザは、図2のステップ1〜ステップ7で示した操作を行う。
そして最後に、ステップ1で生成されたjava.lang.StringクラスのインスタンスAへの“barTitle”の命名を指示する(ステップ8)。
更に、コード357は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ7の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているが、java.lang.StringクラスのインスタンスAは命名されていなかったので、前者のインスタンスだけが変数として書き出され、後者のインスタンスは図3のようにインライン展開された。しかし、後者のインスタンスも、ステップ8で“barTitle”と命名されると、変数として書き出される。
プログラム生成装置10は、大きく分けて以下の2つの動作を行う。
第一に、操作インターフェイス部13での対象オブジェクトに対する操作に応じた動作である。この操作中に必要に応じて対象オブジェクトに対する命名操作が行われるので、その命名操作に応じた動作も行う。
第二に、最新のプログラムコードを生成して表示画面に表示する動作である。
以下、この2つの動作について順に説明する。
ユーザの指示により操作インターフェイス部13が対象オブジェクト管理部12に操作命令を伝えると、対象オブジェクト管理部12はこの操作命令に基づく動作を行う。ここで、操作命令は、関数の実行、フィールド値の取得、配列要素の取り出し等の操作命令に加えて、特に、対象オブジェクトに対する命名命令を含むものとする。
図示するように、まず、対象オブジェクト管理部12は、操作インターフェイス部13から伝えられた操作命令を表す命令情報を生成する(ステップ101)。
次に、対象オブジェクト管理部12は、操作インターフェイス部13から伝えられた操作命令が対象オブジェクトに対する命名命令であるかどうかを判定する(ステップ102)。
図示するように、命令実行順序表21には、順序情報と命令情報との対応が登録される。ここで、順序情報は、対応する命令情報で表される操作命令が何番目に実行されたものであるかを示す情報である。また、命令情報は、ユーザが指示した操作命令を表す情報であり、(操作対象モデル,命令,引数)という書式で示す。但し、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
そして、ステップ3でjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名が指示されたので、順序情報“3”と命令情報(javax.swing.JFrameクラスのインスタンスX,命名,“fooFrame”)との対応が登録されている。
そして、ステップ5でjava.lang.StringクラスのインスタンスBへの“newTitle”の命名が指示されたので、順序情報“5”と命令情報(java.lang.StringクラスのインスタンスB,命名,“newTitle”)との対応が登録されている。
また、ステップ7でjava.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドが実行されたので、順序情報“7”と命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスA)との対応が登録されている。
図示するように、名前−モデルマッピング表22には、名前と操作対象モデルとの対応が登録される。ここで、名前は、命名命令によって対象オブジェクトへの命名が指示された名前である。また、操作対象モデルは、その名前の命名が指示された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
また、ステップ5でjava.lang.StringクラスのインスタンスBへの“newTitle”の命名が指示されたので、名前“newTitle”と操作対象モデル“java.lang.StringクラスのインスタンスB”との対応が登録されている。
図示するように、命令情報−モデルマッピング表23には、命令情報と操作対象モデルとの対応が登録される。ここで、命令情報は、対象オブジェクトを生成した操作命令を表す情報である。また、操作対象モデルは、その命令情報が表す操作命令によって生成された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
また、ステップ2でjavax.swing.JFrameクラスのインスタンスXが生成されたので、命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)と操作対象モデル“javax.swing.JFrameクラスのインスタンスX”との対応が登録されている。
更に、ステップ4でjava.lang.StringクラスのインスタンスBが生成されたので、命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)と操作対象モデル“java.lang.StringクラスのインスタンスB”の対応が登録されている。
ユーザが例えば図2に示すような操作を行った後、プログラムコードの生成を指示すると、コード生成部15はプログラムコードを生成する動作を行う。或いは、コンピュータの指示により、コード生成部15はプログラムコードを生成する動作を行ってもよい。
コード生成部15は、動作を開始すると、まず、コードが格納されていないコードバッファを用意する。
まず、図8の名前−モデルマッピング表22を参照すると、この表に登録されている操作対象モデルは“javax.swing.JFrameクラスのインスタンスX”及び“java.lang.StringクラスのインスタンスB”である。次に、図9の命令情報−モデルマッピング表23を参照すると、これらを生成した命令情報はそれぞれ(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)及び(java.lang.Stringクラス,宣言,“指定された別文字列”)である。従って、図7の命令実行順序表21に対して、順序情報“2”のレコードを削除して順序情報“3”のレコードをその位置に移動させ、かつ、順序情報“4”のレコードを削除して順序情報“5”のレコードがその位置に移動させる変更を施すことにより、図10の命令実行順序表21を生成する。尚、ここで命名された操作対象モデルを生成する命令情報を削除したことは、操作命令情報がオブジェクトを生成する生成命令を示す場合にコードを生成しないことの一例である。
図11は、このときのコード生成部15の動作例を示したフローチャートである。
図示するように、コード生成部15は、まず、命令実行順序表21から命令情報の総数を得て、この命令情報の総数を、処理中の命令情報の位置をカウントする変数iに代入する(ステップ121)。
次に、コード生成部15は、変数iを1ずつ減らしながら0になるまで、ステップ122〜132の処理を繰り返し実行する。以下、変数iについてのステップ122〜132の処理内容について説明する。
そして、コード生成部15は、命令情報コード化処理を呼び出し、コード断片を取得する(ステップ126)。尚、この命令情報コード化処理の呼び出しは、ステップ125で取り出した操作対象モデルを生成した命令情報(モデル生成命令情報)をパラメータとして行われる。このパラメータはステップ126の括弧内にも示している。また、命令情報コード化処理から返されるコード断片は、命令や値等を表すものであり、図2の例で言えば、“new javax.swing.JFrame(“指定された文字列”)”、“指定された別文字列”が該当する。以下、命令情報コード化処理から返されたコード断片は、命令情報コード化処理を呼ぶことで得られたコード断片という意味で「命令情報コード断片」と称する。
図12は、命令情報コード化処理の流れを示したフローチャートである。
図示するように、コード生成部15は、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報であるかどうかを判定する(ステップ141)。ここで、宣言命令とは、操作対象モデルを宣言する命令であり、図2の例で言えば、命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)で表される命令が該当する。
ここで、渡された命令情報に引数がないと判定されれば、何もしないが、渡された命令情報に引数があると判定されれば、コード生成部15は、モデルコード化処理を呼び出す(ステップ146)。尚、このモデルコード化処理の呼び出しは、その引数をパラメータとして行われる。このパラメータはステップ146の括弧内にも示している。また、モデルコード化処理から返されるモデルコード断片は、変数名や値等を表すものであり、図2の例で言えば、“指定された文字列”等が該当する。但し、ここで返されたコード断片は、引数をパラメータとしてモデルコード化処理を呼ぶことで得られたコード断片であるので、特に「引数コード断片」と称する。
図13は、モデルコード化処理の流れを示したフローチャートである。
図示するように、コード生成部15は、名前−モデルマッピング表22を参照し、呼び出されるときに渡された対象(操作対象モデル又は引数)に名前が付いているかどうかを確認し(ステップ161)、対象が命名済みかどうかを判定する(ステップ162)。
次に、コード生成部15は、命令情報コード化処理を呼び出し、命令情報コード断片を取得する(ステップ165)。尚、この命令情報コード化処理の呼び出しは、ステップ164で取り出した対象を生成した命令情報をパラメータとして行われる。このパラメータはステップ165の括弧内にも示している。また、命令情報コード化処理から返される命令情報コード断片は、命令、値等を表すものであり、図2の例で言えば、“指定された文字列”等が該当する。
次いで、コード生成部15は、名称が未決定の状態で対象がコード化されたことを示す参照カウンタCNTに1を加算する(ステップ166)。
その後、コード生成部15は、ステップ165で取得した命令情報コード断片をモデルコード断片として返す(ステップ167)。
ここでは、図10に示した命令実行順序表21の各行の命令情報を図11のステップ122で取り出した場合のステップ123〜132の動作(図12及び図13の各ステップの動作を含む)について、具体的に説明する。
図11において、コード生成部15は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ131で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスX”に名前が付いているかどうかを確認し、ステップ162で、“fooFrame”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスA”に名前が付いているかどうかを確認し、ステップ162で、命名済みでないと判定し、ステップ164で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ165で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された文字列”を返す。
これにより、図13に戻り、コード生成部15は、ステップ166で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算し、ステップ167で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
これにより、図11に戻り、コード生成部15は、ステップ132で、コード行“fooFrame.setTitle(“指定された文字列”)”をコードバッファの最初の行に追加する。
図11において、コード生成部15は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ131で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスX”に名前が付いているかどうかを確認し、ステップ162で、“fooFrame”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスB”に名前が付いているかどうかを確認し、ステップ162で、“newTitle”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“newTitle”を返す。ここで、“newTitle”は、引数オブジェクトに対応付けられた名前の一例である。
これにより、図11に戻り、コード生成部15は、ステップ132で、コード行“fooFrame.setTitle(newTitle)”をコードバッファの最初の行に追加する。
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ124で、変数名宣言コード断片“String newTitle =”を生成し、ステップ125で、操作対象モデル“java.lang.StringクラスのインスタンスB”を生成した命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ126で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ124で、変数名宣言コード断片“javax.swing.JFrame fooFrame =”を生成し、ステップ125で、操作対象モデル“javax.swing.JFrameクラスのインスタンスX”を生成した命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)を命令情報−モデルマッピング表23から取り出し、ステップ126で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスA”に名前が付いているかどうかを確認し、ステップ162で、命名済みでないと判定し、ステップ164で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ165で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された文字列”を返す。
これにより、図13に戻り、コード生成部15は、ステップ166で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算し、ステップ167で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
これにより、図11に戻り、コード生成部15は、ステップ127で、コード行“javax.swing.JFrame fooFrame = new javax.swing.JFrame(“指定された文字列”)”を生成し、ステップ132で、このコード行をコードバッファの最初の行に追加する。
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されたと判定し、ステップ129で、操作対象モデル“java.lang.StringクラスのインスタンスA”が命名されておらず、後続の命令情報で参照されていると判定し、ステップ130で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算する。
その後、上記(5)の代わりに、順序情報“1”に対応する命令情報(java.lang.StringクラスのインスタンスA,命名,“barTitle”)を取り出した場合の処理を行う。
このような処理を行うことにより、図5に示したプログラムコードが生成される。
また、本実施の形態では、後で使われない対象オブジェクトに対して命名しないことを許容した。これにより、自然に記述したプログラムコードにより近いプログラムコードを生成できるようになった。
Claims (13)
- オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。 - 前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、前記オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、前記オブジェクトを操作する前記コードを生成する、請求項1の装置。
- 前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成する、請求項1又は請求項2の装置。
- 前記生成部は、前記オブジェクトの値を用いて前記コードが生成された箇所の数を計数し、
前記表示部は、前記生成部により計数された前記箇所の数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。 - 前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。 - 前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。 - 前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。 - 前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。 - オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトを生成する生成命令である場合に、当該オブジェクトに当該生成命令を示す生成命令情報を対応付けた生成情報を記録する生成情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記生成命令を示す場合には、前記コードを生成せず、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令が宣言命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いると共に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた当該生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において前記オブジェクトに対応付けられた前記生成命令情報に基づいて得られた前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた前記生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。 - 前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている第1の状況が発生すれば、当該第1の状況の発生数である第1の発生数を計数し、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない第2の状況が発生すれば、当該第2の状況の発生数である第2の発生数を計数し、
前記表示部は、前記生成部により計数された前記第1の発生数と前記第2の発生数との和が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項9の装置。 - 前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第3の状況が発生すれば、当該第3の状況の発生数である第3の発生数を計数し、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第4の状況が発生すれば、当該第4の状況の発生数である第4の発生数を計数し、
前記表示部は、前記生成部により計数された前記第3の発生数と前記第4の発生数との和が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項10の装置。 - オブジェクトを操作する操作命令を再現するプログラムの生成を支援する方法であって、
ユーザが入力した前記操作命令を受け付けるステップと、
受け付けた前記操作命令を示す操作命令情報を記録するステップと、
受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録するステップと、
前記プログラムのコードの生成指示に応じて、記録された前記操作命令情報を順次取得するステップと、
取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成するステップと、
生成された前記コードを表示するステップと
を含む、方法。 - オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
として機能させる、プログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011255577A JP5779077B2 (ja) | 2011-11-22 | 2011-11-22 | プログラムの生成を支援する装置及び方法 |
US13/649,304 US9021422B2 (en) | 2011-11-22 | 2012-10-11 | Method and system for processing instruction information |
US14/619,172 US9513875B2 (en) | 2011-11-22 | 2015-02-11 | Processing instruction information |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011255577A JP5779077B2 (ja) | 2011-11-22 | 2011-11-22 | プログラムの生成を支援する装置及び方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013109675A JP2013109675A (ja) | 2013-06-06 |
JP5779077B2 true JP5779077B2 (ja) | 2015-09-16 |
Family
ID=48428092
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011255577A Expired - Fee Related JP5779077B2 (ja) | 2011-11-22 | 2011-11-22 | プログラムの生成を支援する装置及び方法 |
Country Status (2)
Country | Link |
---|---|
US (2) | US9021422B2 (ja) |
JP (1) | JP5779077B2 (ja) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5779077B2 (ja) | 2011-11-22 | 2015-09-16 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | プログラムの生成を支援する装置及び方法 |
US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
US10613862B2 (en) | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
US10255068B2 (en) | 2017-03-03 | 2019-04-09 | International Business Machines Corporation | Dynamically selecting a memory boundary to be used in performing operations |
US10564965B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Compare string processing via inline decode-based micro-operations expansion |
US10620956B2 (en) | 2017-03-03 | 2020-04-14 | International Business Machines Corporation | Search string processing via inline decode-based micro-operations expansion |
US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
CN107358099B (zh) * | 2017-06-09 | 2020-05-05 | 南京邮电大学 | 基于llvm中间表示程序切片技术的无用变量检测方法 |
CN110764779B (zh) | 2019-10-21 | 2023-09-15 | 百度在线网络技术(北京)有限公司 | 封装方法、注册方法、装置和渲染设备 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2585311B2 (ja) * | 1987-11-06 | 1997-02-26 | 株式会社日立製作所 | プログラム作成方法 |
JPH05233241A (ja) | 1992-02-25 | 1993-09-10 | Shimadzu Corp | プログラム作成装置 |
JP3177105B2 (ja) | 1994-10-03 | 2001-06-18 | 株式会社東芝 | プログラム作成方法及びプログラムを用いた制御装置 |
JP3634379B2 (ja) * | 1996-01-24 | 2005-03-30 | サン・マイクロシステムズ・インコーポレイテッド | スタックキャッシングのための方法及び装置 |
JPH09244880A (ja) * | 1996-03-13 | 1997-09-19 | Toshiba Corp | コンピュータシステム及びその指示操作方法 |
JP2001273125A (ja) | 2000-03-24 | 2001-10-05 | Hitachi Information Systems Ltd | ソースプログラム自動生成方法およびシステム、ならびにそのプログラム記録媒体 |
JP2001282537A (ja) | 2000-03-30 | 2001-10-12 | Hitachi Software Eng Co Ltd | 抽象クラスの自動生成方法および装置 |
JP2002304295A (ja) | 2001-04-05 | 2002-10-18 | Linx Corp | 画像処理アプリケーション開発のためのブロック線図ベースのグラフィカルなアルゴリズム記述方法 |
JP2003173256A (ja) * | 2001-12-06 | 2003-06-20 | Denso Corp | プログラムコード生成装置及びプログラム |
JP2005346578A (ja) | 2004-06-04 | 2005-12-15 | Ricoh Co Ltd | ファイル抽出システムおよびプログラム |
JP4887814B2 (ja) | 2006-02-10 | 2012-02-29 | 株式会社デンソー | プログラムコード生成装置 |
JP5233241B2 (ja) | 2007-10-22 | 2013-07-10 | 株式会社デンソー | 炭化珪素ウェハの製造方法 |
JP2009223843A (ja) | 2008-03-19 | 2009-10-01 | Nomura Research Institute Ltd | コンピュータプログラムのソースコード自動生成装置及び方法 |
JP2011034419A (ja) | 2009-08-04 | 2011-02-17 | Hitachi Ltd | モデルを用いたモデリング装置、およびソフトウェアシステムのシステム構築方法 |
JP5779077B2 (ja) | 2011-11-22 | 2015-09-16 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | プログラムの生成を支援する装置及び方法 |
-
2011
- 2011-11-22 JP JP2011255577A patent/JP5779077B2/ja not_active Expired - Fee Related
-
2012
- 2012-10-11 US US13/649,304 patent/US9021422B2/en not_active Expired - Fee Related
-
2015
- 2015-02-11 US US14/619,172 patent/US9513875B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20130132709A1 (en) | 2013-05-23 |
US20150154009A1 (en) | 2015-06-04 |
JP2013109675A (ja) | 2013-06-06 |
US9513875B2 (en) | 2016-12-06 |
US9021422B2 (en) | 2015-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5779077B2 (ja) | プログラムの生成を支援する装置及び方法 | |
JP5629239B2 (ja) | ソフトウェアの動作をテストする装置及び方法 | |
US10437574B2 (en) | System and method for providing code completion features for code modules | |
US7908588B2 (en) | Program presentation with reviewer feedback maintenance | |
CN102947791B (zh) | 用户增强的反向工程 | |
JP2007004734A (ja) | 情報処理装置及び情報処理方法、並びにコンピュータ・プログラム | |
JP2007025497A (ja) | 教育支援プログラムおよび教育支援装置 | |
US8700380B2 (en) | Method for generating performance evaluation model | |
JPWO2020008991A1 (ja) | 検証自動化装置、検証自動化方法、およびプログラム | |
US20110167047A1 (en) | Editing apparatus, method, and storage medium | |
JP5038036B2 (ja) | テスト実行システム、テスト実行装置、情報処理装置、テスト実行方法、プログラム、及び記憶媒体 | |
JP5405684B1 (ja) | ソースプログラムのプログラミング言語変換装置 | |
US8024158B2 (en) | Management system and management method of CAD data used for a structural analysis | |
JP5345020B2 (ja) | クローンコード検出評価装置、クローンコード検出評価方法及びプログラム | |
JP2006185055A (ja) | 計算機システムの設計支援システムおよび設計支援プログラム | |
JP2018124901A (ja) | プログラム分析装置、プログラム分析方法及びプログラム分析プログラム | |
JP7116313B2 (ja) | 修正候補特定プログラム | |
JP5702265B2 (ja) | プログラム自動生成装置およびプログラム自動生成方法 | |
JP2007018313A (ja) | 回路設計プログラム、回路設計装置、回路設計方法 | |
KR100846203B1 (ko) | 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체 | |
JP6819360B2 (ja) | 表示制御プログラム、表示制御装置及び表示制御方法 | |
WO2021149368A1 (ja) | 処理ユニット及び処理システム | |
JP6818568B2 (ja) | 通信装置、通信仕様差分抽出方法及び通信仕様差分抽出プログラム | |
CN114022105A (zh) | 数据处理方法、装置、电子设备和可读存储介质 | |
JP2009217720A (ja) | プログラム生成装置およびプログラム生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20140606 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150610 |
|
TRDD | Decision of grant or rejection written | ||
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20150623 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20150623 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20150710 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5779077 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |