JP7468209B2 - プログラム生成装置、プログラム生成方法及びプログラム - Google Patents

プログラム生成装置、プログラム生成方法及びプログラム Download PDF

Info

Publication number
JP7468209B2
JP7468209B2 JP2020120376A JP2020120376A JP7468209B2 JP 7468209 B2 JP7468209 B2 JP 7468209B2 JP 2020120376 A JP2020120376 A JP 2020120376A JP 2020120376 A JP2020120376 A JP 2020120376A JP 7468209 B2 JP7468209 B2 JP 7468209B2
Authority
JP
Japan
Prior art keywords
program
composite
input
programs
synthesis
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020120376A
Other languages
English (en)
Other versions
JP2022017685A (ja
Inventor
利行 倉林
弘之 切貫
優 吉村
芳樹 肥後
真佑 ▲松▼本
真二 楠本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2020120376A priority Critical patent/JP7468209B2/ja
Publication of JP2022017685A publication Critical patent/JP2022017685A/ja
Application granted granted Critical
Publication of JP7468209B2 publication Critical patent/JP7468209B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、プログラム生成装置、プログラム生成方法及びプログラムに関する。
近年、社会全体のIT化が進む一方で、IT人材の不足が大きな問題となっている。経済産業省の試算によると、2025年には約36万人のIT人材が不足すると予測されている。特に専門的な知識を必要とする実装工程におけるIT人材の不足は喫緊の課題であり、自動でプログラミングを行う自動プログラミング技術の研究開発が求められている。
従来、自動プログラミング技術としては、ユーザがプログラムの入出力例を与え、それを満たすようにプログラムの部品を合成する技術が有る。
例えば、非特許文献1には、入出力例とプログラムの部品の関係性を学習し、与えられた入出力例に対して使用される確率の高いプログラムの部品を推定して、当該部品をプログラムの合成に用いることで、効率的なプログラム合成を実現する技術が開示されている。
Matej Balog, Alexander L. Gaunt, Marc Brockschmidt, Sebastian Nowozin, Daniel Tarlow、 " DeepCoder: Learning to Write Programs" Proceedings of ICLR'17、[online]、インターネット<URL:https://www.microsoft.com/en-us/research/publication/deepcoder-learning-write-programs/>
しかしながら、入出力例は、プログラムが満たす仕様の一例にすぎず、情報量が少ないといった欠点がある。そのため入出力例にオーバーフィッティングしたプログラムが生成されてしまうことがあり、ユーザの所望するプログラムが生成されないという課題が存在する。
本発明は、上記の点に鑑みてなされたものであって、所望のプログラムが生成される可能性を高めることを目的とする。
そこで上記課題を解決するため、プログラム生成装置は、1以上のプログラム部品をランダムに組み合わせて複数の合成プログラムを生成する生成部と、前記生成部が複数の合成プログラムを生成するたびに、前記複数の合成プログラムの内容を順番に可視化する可視化部と、可視化された全ての前記合成プログラムについてユーザによって所定の指示が入力されない場合に、前記合成プログラムが1以上の入力値及び出力値の組を満たすか否かを判定する判定部と、を有し、前記生成部は、可視化された前記合成プログラムについてユーザによって前記所定の指示が入力された時点で、前記1以上のプログラム部品をランダムに組み合わせて複数の合成プログラムを再生成し、前記可視化されたいずれかの合成プログラムが前記1以上の入力値及び出力値の組のうちのいずれかの組を満たさない場合には、可視化された合成プログラムの一部を変更して複数の合成プログラムを再生成する

所望のプログラムが生成される可能性を高めることができる。
本発明の実施の形態におけるプログラム生成装置10のハードウェア構成例を示す図である。 本発明の実施の形態におけるプログラム生成装置10の機能構成例を示す図である。 プログラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。 プログラム部品リストの一例を示す図である。 入出力例セットの一例を示す図である。 合成コードの変更処理によって生成される合成コードの一例を示す図である。
以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態におけるプログラム生成装置10のハードウェア構成例を示す図である。図1のプログラム生成装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、インタフェース装置105、表示装置106、及び入力装置107等を有する。
プログラム生成装置10での処理を実現するプログラムは、CD-ROM等の記録媒体101によって提供される。プログラムを記憶した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってプログラム生成装置10に係る機能を実現する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。表示装置106はプログラムによるGUI(Graphical User Interface)等を表示する。入力装置107はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
図2は、本発明の実施の形態におけるプログラム生成装置10の機能構成例を示す図である。図2において、プログラム生成装置10は、プログラム合成部11、合成プログラム実行部12、可視化部13及び入出力結果判定部14を有する。これら各部は、プログラム生成装置10にインストールされた1以上のプログラムが、CPU104に実行させる処理により実現される。
以下、プログラム生成装置10が実行する処理手順について説明する。図3は、プログラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。
ステップS101において、プログラム合成部11は、例えば、補助記憶装置102に記憶されているプログラム部品リストの中の1以上のプログラム部品を、例えば、ランダムに組み合わせて合成することで、複数(N個)のプログラムのソースコード(以下、「合成コード」という。)を生成する。
図4は、プログラム部品リストの一例を示す図である。図4に示されるプログラム部品リストのデータ構造をBNF(Backus-Naur form)記法に基づく形式によって記すと以下の通りである。
<プログラム部品リスト>::=プログラム部品+
すなわち、プログラム部品リストは、1以上のプログラム部品(のソースコード)を含む。図4では、定数とメソッドとにプログラム部品が分類されている。ここで、1つの定数が1つのプログラム部品に相当し、1つのメソッドが1つのプログラム部品に相当する。すなわち、図4において破線で囲まれた単位が、1つのプログラム部品の単位に相当する。
ステップS101では、ランダムに複数のプログラム部品を選択し、当該複数のプログラム部品を合成することで1つの合成コードを生成するといった処理がN回繰り返される。その結果、N個の合成コードが生成される。なお、プログラム部品の合成とは、複数のプログラム部品の計算が組み合わされることをいい、例えば、非特許文献1に記載された技術等、公知技術を用いて行うことができる。例えば、各プログラム部品を、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現し、いずれかのプログラム部品の木構造のノードを、他のプログラム部品の木構造によって置換することで、これらのプログラム部品を合成することができる。なお、合成コードは、プログラム部品と同様に、値を入力とし、入力された値に関する計算を実行し、値の計算結果を出力するといった定義を含む。
続いて、合成コードごとにステップS102~S105を含むループ処理L1が実行される。以下、ループ処理L1において処理対象とされている合成コードを「対象コード」という。
ステップS102において、合成プログラム実行部12は対象コードのプログラム情報(例えば、対象コードの内容そのもの)を可視化部13へ入力すると、可視化部13は、対象コードの内容をユーザに対して可視化する。可視化の方法は、所定の方法に限定されない。例えば、表示装置106に合成コードが表示されてもよい。
ユーザは、可視化された対象コードを参照して、対象コードを所望のプログラムの合成元として利用可能か否かを判定する。すなわち、プログラムの合成がユーザの所望する方向に合成が進んでいるか否かが判定される。
例えば、正方形の面積を求めるプログラムを生成したいとする。ユーザが、後述される入出力例として、入出力例セット[1→1,2→4](入力値が1の場合、出力値が1であり、入力値が2の場合、出力値が4)を与えたとする。この場合、x×xというプログラムが出力されるべきである。しかし、合成過程において[if(x==1) return 1]という合成コードが生成された場合、入出力例セットを1つ満たすため、当該合成コードをベースに合成が繰り返されることになる。それにより、[if(x==1) return 1; else return 4;]といった入出力例は満たすが正しくないプログラムが生成されうる。このような問題を防ぐためには、[if(x==1) return 1]という合成コードができた時点で合成をリセット(再実行)するべきである。
したがって、ユーザは、対象コードがこのような正しくない合成コードであるか否かを確認する。対象コードが合成元として適切でない場合(すなわち、合成をリセットすべきである場合)、ユーザは、合成のリセット指示を入力する。一方、対象コードが合成元として適切である場合、ユーザは、合成の継続指示を入力する。
合成のリセット指示が入力された場合(S103でYes)、可視化部13は、プログラム合成部11に対してリセット指示を入力する。その結果、ステップS101以降が再実行され、合成コードが再生成される。
一方、合成のリセット継続指示が入力された場合(S103でNo)、合成プログラム実行部12は、対象コードをコンパイル及びリンク等することで、実行形式のプログラム(以下「合成プログラム」という。)を生成する(S104)。
続いて、合成プログラム実行部12は、当該合成プログラム(以下「対象合成プログラム」という。)に対し、予め用意されている入出力例セットに含まれる各入出力例を入力して対象合成プログラムを実行し、入出力例ごとに出力を得る(S105)。入出力例セットは、入出力に関して生成対象のプログラム(以下「対象プログラム」という。)が満たすべき条件を示す情報であり、例えば、予め設定されて補助記憶装置102に記憶されている。
図5は、入出力例セットの一例を示す図である。図5に示される入出力例セットのデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<入出力例セット>::=<入出力例>+
<入出力例>::=<入力例><出力例>
<入力例>::=入力値+
<出力例>::=出力値+
すなわち、入出力例セットは1以上の入出力例を含む。1つの入出力例は入力例及び出力例の組である。入力例とは1以上の入力値をいい、出力例とは1以上の出力値をいう。
例えば、入出力例セットに含まれる入出力例がM個である場合、合成プログラム実行部12は、ステップS105において、M個の入力値ごとに当該入力値を入力として対象合成プログラムを実行し、M個の出力値を得る。
ループ処理L1が終了すると、入出力結果判定部14は、全ての出力値が、当該出力値に対応する入力値が属する入出力例の出力例に一致する合成プログラムの有無を判定する(S106)。すなわち、ループ処理L1において処理対象とされた合成プログラムの中で、ステップS105において得られた全ての出力値が期待通りであった(正しかった)合成プログラムの有無が判定される。
該当する合成プログラムが無い場合(S106でNo)、プログラム合成部11は、合成コードの変更処理を実行する(S107)。合成コードの変更処理では、元の合成コード(すなわち、可視化された合成コード)の一部を変更して、複数(N個)の合成コードが生成(再生成)される。合成コードの一部の変更には、例えば、遺伝的アルゴリズムが用いられてもよい。すなわち、前世代の合成コードに対してN回の遺伝的操作が行われて、N個の次世代の合成コードが生成されてもよい。ここで、Nは、遺伝的アルゴリズムの一世代における個体(ソースコード)の個数である。この際、遺伝的アルゴリズムの適用対象とされる各合成コードは、例えば、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現され、木構造の部分木が遺伝的操作の対象とされる。N回の遺伝的操作において対象とされる個体の選択のための評価には、出力値の合格率(出力値が正解だった割合)が用いられてもよい。
また、突然変異において前世代の合成コードの一部に置き換わる候補として、例えば、プログラム部品リストに含まれるプログラム部品が用いられる。
図6は、合成コードの変更処理によって生成される合成コードの一例を示す図である。図6に示されるように、1回の合成処理によってN個の合成コードが生成される。
なお、遺伝的アルゴリズムを用いたプログラムの合成処理には、DEAP(https://deap.readthedocs.io/en/master/)等、既存のライブラリを用いられてもよい。
続いて、N個の合成コードについてループ処理L1以降が実行される。したがって、この場合、ステップS102~S105はたかだかN回実行される。
一方、ステップS106の条件を満たす合成プログラム(以下、「入出力合格プログラム」という。)が1以上有る場合(S106でYes)、ループ処理L1が終了し、ステップS108へ進む。すなわち、ループ処理L1では、予め生成された入出力例を満たすプログラム生成されるまで合成コードの一部の変更が繰り返される(合成コードが一部ずつ累積的に変更される)ことで、入出力例セットを満たすような入出力合格プログラムが自動生成される。
ステップS108において、入出力結果判定部14は、当該入出力合格プログラムのソースコード(合成コード)を出力する。すなわち、当該入出力合格プログラムが、対象プログラムであると判定される。なお、入出力合格プログラムが複数有る場合、それぞれの入出力合格プログラムのソースコードが出力されればよい。
上述したように、本実施の形態によれば、合成過程(合成途中)において、合成コードが可視化されることで、プログラムの合成がユーザの所望する方向に進んでいるかについての確認の機会をユーザに与えることができる。この機会において、ユーザによって合成の継続が指示された場合に、合成プログラムの生成が継続される。したがって、本実施の形態によれば、所望のプログラムが生成される可能性を高めることができる。また、無駄な合成処理(不適切な合成元に基づく合成)が回避されるため、プログラムの生成を効率化することができる。
なお、本実施の形態において、プログラム合成部11は、生成部及び再生成部の一例である。入出力結果判定部14は、判定部の一例である。合成のリセット指示は、所定の指示の一例である。
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
10 プログラム生成装置
11 プログラム合成部
12 合成プログラム実行部
13 可視化部
14 入出力結果判定部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
106 表示装置
107 入力装置
B バス

Claims (5)

  1. 1以上のプログラム部品をランダムに組み合わせて複数の合成プログラムを生成する生成部と、
    前記生成部が複数の合成プログラムを生成するたびに、前記複数の合成プログラムの内容を順番に可視化する可視化部と、
    可視化された全ての前記合成プログラムについてユーザによって所定の指示が入力されない場合に、前記合成プログラムが1以上の入力値及び出力値の組を満たすか否かを判定する判定部と、
    を有し、
    前記生成部は、可視化された前記合成プログラムについてユーザによって前記所定の指示が入力された時点で、前記1以上のプログラム部品をランダムに組み合わせて複数の合成プログラムを再生成し、前記可視化されたいずれかの合成プログラムが前記1以上の入力値及び出力値の組のうちのいずれかの組を満たさない場合には、可視化された合成プログラムの一部を変更して複数の合成プログラムを再生成する、
    こと特徴とするプログラム生成装置。
  2. 前記可視化部は、前記合成プログラムの内容を表示装置に表示する、
    ことを特徴とする請求項記載のプログラム生成装置。
  3. 1以上のプログラム部品をランダムに組み合わせて複数の合成プログラムを生成する生成手順と、
    前記生成手順が複数の合成プログラムを生成するたびに、前記複数の合成プログラムの内容を順番に可視化する可視化手順と、
    可視化された全ての前記合成プログラムについてユーザによって所定の指示が入力されない場合に、前記合成プログラムが1以上の入力値及び出力値の組を満たすか否かを判定する判定手順と、
    をコンピュータが実行し、
    前記生成手順は、可視化された前記合成プログラムについてユーザによって前記所定の指示が入力された時点で、前記1以上のプログラム部品をランダムに組み合わせて複数の合成プログラムを再生成し、前記可視化されたいずれかの合成プログラムが前記1以上の入力値及び出力値の組のうちのいずれかの組を満たさない場合には、可視化された合成プログラムの一部を変更して複数の合成プログラムを再生成する、
    こと特徴とするプログラム生成方法。
  4. 前記可視化手順は、前記合成プログラムの内容を表示装置に表示する、
    ことを特徴とする請求項記載のプログラム生成方法。
  5. 請求項3又は4記載のプログラム生成方法をコンピュータに実行させることを特徴とするプログラム。
JP2020120376A 2020-07-14 2020-07-14 プログラム生成装置、プログラム生成方法及びプログラム Active JP7468209B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2020120376A JP7468209B2 (ja) 2020-07-14 2020-07-14 プログラム生成装置、プログラム生成方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020120376A JP7468209B2 (ja) 2020-07-14 2020-07-14 プログラム生成装置、プログラム生成方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2022017685A JP2022017685A (ja) 2022-01-26
JP7468209B2 true JP7468209B2 (ja) 2024-04-16

Family

ID=80185972

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020120376A Active JP7468209B2 (ja) 2020-07-14 2020-07-14 プログラム生成装置、プログラム生成方法及びプログラム

Country Status (1)

Country Link
JP (1) JP7468209B2 (ja)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007304685A (ja) 2006-05-09 2007-11-22 Hitachi Ltd ソフトウェア部品の検索システム及びプログラム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007304685A (ja) 2006-05-09 2007-11-22 Hitachi Ltd ソフトウェア部品の検索システム及びプログラム

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
倉林利行ほか,過去の実装情報を活用したプログラム自動生成,情報処理学会 研究報告 ソフトウェア工学(SE)[online],情報処理学会,2020年02月24日,第2020-SE-204巻、第8号,第1-8頁
富田裕也ほか,遺伝的アルゴリズムを用いた自動プログラム修正手法を応用したプログラミングコンテストの回答の自動生成に向けて,情報処理学会 研究報告 ソフトウェア工学(SE)[online],情報処理学会,2020年02月24日,第2020-SE-204巻、第7号,第1-8頁
竹内勝ほか,進化論的計算手法による業務アプリケーション自動生成,電子情報通信学会技術研究報告,社団法人電子情報通信学会,2006年05月11日,第106巻、第38号,第7-12頁

Also Published As

Publication number Publication date
JP2022017685A (ja) 2022-01-26

Similar Documents

Publication Publication Date Title
JP7351352B2 (ja) プログラム生成装置、プログラム生成方法及びプログラム
WO2021161426A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JP2021071823A (ja) 予測モデル説明方法、予測モデル説明プログラム、予測モデル説明装置
JP2005522772A5 (ja)
US6360355B1 (en) Hardware synthesis method, hardware synthesis device, and recording medium containing a hardware synthesis program recorded thereon
JP2009181446A (ja) プログラム生成装置およびブロック線図生成装置
JP7131277B2 (ja) システム移行支援装置、システム移行支援方法及びプログラム
JPH10507016A (ja) ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ
JP7468209B2 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JP2007128378A (ja) プログラマブルコントローラのプログラミング装置
JP4770657B2 (ja) パイプライン合成システム、方法及びプログラム
JP6172145B2 (ja) 並列割当最適化装置、並列割当最適化方法および並列割当最適化プログラム
JP4660381B2 (ja) 計算機システムの性能評価装置、性能評価方法、及び性能評価プログラム
WO2021161427A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JP5275087B2 (ja) プログラム生成装置およびブロック線図生成装置
JP2011065576A (ja) テストケース生成装置およびその方法
KR101867866B1 (ko) 프로그램의 동적 최적화 방법 및 장치
JP4898365B2 (ja) 組み込み用プログラム開発装置、及びプログラム自動生成方法
JP2008299423A (ja) 情報処理装置および情報処理プログラム
JP4891807B2 (ja) 高位合成装置および高位合成方法
WO2021161428A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
WO2022249255A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JP3246043B2 (ja) コンパイラ装置
JP5571928B2 (ja) 集積回路設計方法及びプログラム
JP2009205239A (ja) ソフトウェア検証システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221128

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20231114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240118

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240305

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240318

R150 Certificate of patent or registration of utility model

Ref document number: 7468209

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150