JP6714742B1 - プログラム生成システム、そのコンピュータプログラム及び記録媒体 - Google Patents

プログラム生成システム、そのコンピュータプログラム及び記録媒体 Download PDF

Info

Publication number
JP6714742B1
JP6714742B1 JP2019049954A JP2019049954A JP6714742B1 JP 6714742 B1 JP6714742 B1 JP 6714742B1 JP 2019049954 A JP2019049954 A JP 2019049954A JP 2019049954 A JP2019049954 A JP 2019049954A JP 6714742 B1 JP6714742 B1 JP 6714742B1
Authority
JP
Japan
Prior art keywords
data
program
loop
generation system
data string
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
Application number
JP2019049954A
Other languages
English (en)
Other versions
JP2020154421A (ja
Inventor
隆 新保
隆 新保
正寛 佐々木
正寛 佐々木
Original Assignee
菊水電子工業株式会社
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 菊水電子工業株式会社 filed Critical 菊水電子工業株式会社
Priority to JP2019049954A priority Critical patent/JP6714742B1/ja
Application granted granted Critical
Publication of JP6714742B1 publication Critical patent/JP6714742B1/ja
Publication of JP2020154421A publication Critical patent/JP2020154421A/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】旧システムの通信モニター記録などに基づいて、旧システムのロジックを新システムでも再現するためのプログラム生成システム、およびそのプログラムを提供する【解決手段】システムのプロセッサが推論エンジンを実行し、通信モニター記録のデータ列にデータの繰り返しのパターンを見つけるループ発見プログラムを実行して、通信モニター記録を解析して中間データに変換し、中間データを元に新システムの動作を再現する再現プログラムを生成するプログラム生成システムとした。【選択図】図1

Description

本発明は、プログラム生成システム及びそのプログラムに関し、詳細には例えば、既存システムの実行記録や通信記録等の記録データ列から、その既存システムと同等の動作をするシステムを生成するためのプログラム生成システム及びそのシステムのプログラムに関する。
従来、情報処理・通信技術の高度化に伴い、企業や工場等の制御システムにおいて、例えば制御システムのコントローラやPCの置き換えなどが必要となり、既存の制御プログラムがそのままでは動かないため、既存プログラムと同じ動作をする新たな制御プログラムの開発が必要となることがしばしば発生する。
このような際に、移行前の旧制御システムが長年にわたって使用されていた場合などには、当該旧制御システムの仕様書、設計ドキュメントやソースコードなどは、何らかの原因によって既に滅失または特定不能になっており、移行すべき新システムの開発が困難となることがしばしばある。
旧制御システムが現用のシステムであれば、その制御通信の内容をオンラインでモニターして記録することができる場合があり、あるいは、旧制御システムが既に廃止されている場合であっても、旧制御システムの制御出力などを含む通信の大量のモニター記録、通信ログなどの記録データなどが残されている場合もあり、これらのデータを元に同等な新システムを開発したい場合もある。
特開2018−88216号公報
上記のような、旧システムから新システムへの移行に際して、システムの仕様が不明な場合に、旧システムの通信モニター記録をそのまま再生するシステムとして対応することは可能だが、これではモニター記録に無い場合の対応や、部分的なシステム変更などへの対応が難しい。
従って、旧システムのロジックを新システムでも再現するためには、モニター記録やログデータの整理、解析が必要となるが、通常データ量が膨大となるため人力による処理には限界がある。
本発明は、このような問題に鑑みてなされたもので、その目的とするところは、旧システムの記録データ列に基づいて、旧システムのロジックを新システムでも再現するためのプログラム生成システム、およびそのプログラムを提供することにある。
本発明は、このような目的を達成するために、実施形態の一例として以下のような構成を備えることを特徴とする。
(構成1)
旧システムの記録データより生成されたデータ列に基づいて、前記旧システムのロジックを新システムでも再現するためのプログラム生成システムであって、
推論アルゴリズムを実行する推論エンジンを備え、
前記推論エンジンが、前記データ列にデータの繰り返しなどのパターンを見つけるループ発見プログラムを実行して、前記データ列を解析して中間データに変換し、
前記中間データを元に前記旧システムの動作を前記新システムにおいて再現する再現プログラムを生成する
ことを特徴とするプログラム生成システム。
(構成2)
前記ループ発見プログラムは、
前記データ列に含まれる複数のデータ項目のうちの、処理対象として着目する最初の部分区間の先頭のデータ項目を指し示す開始点ポインタを、データ列の先頭のデータ項目に位置づけ、
最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じではない場合は比較する部分区間の長さを1つ増やす動作を、後続の部分区間の末尾または開始点ポインタがデータ列の終わりに達するまで反復し、
後続の部分区間の末尾がデータ列の終わりに達した場合は、開始点ポインタの指すデータ項目を中間データに追記し、開始点ポインタを1つ進める
ことを特徴とする構成1のプログラム生成システム。
(構成3)
前記ループ発見プログラムは、さらに
前記最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じである場合は、前記後続の部分区間の次にさらに同じ長さの部分区間を追加して比較する動作を反復して、ループの繰り返し回数を確定し、
前記中間データにループの繰り返し回数とループ長さを追記する
ことを特徴とする構成2のプログラム生成システム。
(構成4)
前記ループ発見プログラムは、さらに
ループとして認識された部分区間のデータ列を処理対象のデータ列として、別の開始点ポインタを割り当て設定し、ループ検出の動作を再度行う
ことを特徴とする構成3のプログラム生成システム。
(構成5)
前記再現プログラムは前記中間データのパラメータを変更して再生する再現プログラムである
ことを特徴とする構成1から4のいずれか1項に記載のプログラム生成システム。
(構成6)
前記データ列は前記旧システムにおける記録データに、連長圧縮または文字列変換の少なくともいずれかを含む前処理を行ったデータ列であり、
前記中間データに前記前処理の逆変換に相当する後処理を行い、前記再現プログラムを生成する
ことを特徴とする構成1から5のいずれか1項に記載のプログラム生成システム。
(構成7)
構成1から6のいずれか1項に記載のプログラム生成システムにおいて、
前記推論エンジンおよび前記ループ発見プログラムとして動作する
ことを特徴とするコンピュータプログラム。
(構成8)
構成7に記載のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
以上記載したように、本発明によれば、旧システムの記録データ列に基づいて、旧システムのロジックを新システムでも再現するためのプログラム生成システム、およびプログラムを提供することが可能となる。
本発明のシステムの一実施形態にかかる全体を示す構成図である。 本発明のシステムの前処理および後処理の例を説明する図である。 本発明のプログラム生成システムのプログラムコードの一例を示す図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程を説明する図である。 本発明のプログラム生成システムの実行過程の別例を説明する図である。 本発明のプログラム生成システムの実行過程の別例を説明する図である。 本発明のプログラム生成システムの実行過程の別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程の更に別例を説明する図である。 本発明のプログラム生成システムの実行過程のシーケンス図である。 本発明のプログラム生成システムの推論エンジンの概略フローを説明する図である。 本発明のプログラム生成システムの繰り返しを見つける処理の概略フローを説明する図である。
以下、図面を参照しながら本発明の実施形態について詳細に説明する。
(システムの全体構成)
図1は、本発明の一実施形態にかかるプログラム生成システム7を含む全体の構成を説明する概念図である。
図1において、PC1は旧制御システムのコントローラ、制御装置などであって、その上で既存プログラム2が動作して、制御対象物3を通信回線を介して制御する。既存プログラム2は旧システムのPC1に内蔵されており、通信回線を介して制御対象物3(例えば制御可能な計測装置や電源装置などを想定しているが、これに限らない)へ制御コマンドやデータなどを送信するが、既存プログラム2の内容自体は、いわゆるリバースエンジニアリング(内容解析)が困難ないしは不可能な状況にあると仮定する。
PC1からの制御通信の内容は、例えば通信ログのような通信モニター記録として通信回線上の通信モニター4によりモニターされて、プログラム生成システム7のデータ列記憶再生部10に記録され、データ列として再生される。通信モニター記録としては、例えばPC1の発するコマンドやデータが記録され、データ項目(データ要素、例えば測定装置の測定項目、測定範囲、電源装置の設定電圧など)からなる時系列のデータ列として再生することができる。データ列記憶再生部10は、データ量の削減のために通信モニター記録に後述のような前処理を行ったデータ列として記録することができる。
図1では、旧システムは現用システムとして表示されているが、旧システムが既に廃止されたシステムであっても、このような記録データ(通信ログ)があれば本発明は適用可能である。
図1のプログラム生成システム7は、本発明の一実施形態にかかるシステムであって、ハードウェアは通常のコンピュータシステムとして、プロセッサ、メモリ、入出力装置などを備えている。プログラム生成システム7は、そのプロセッサが後述のソフトウェアを実行することによって実装され、推論アルゴリズムを実行する推論エンジン5を有している。この推論エンジン5が、データ列記憶再生部10から記録されたデータ列を受け取り、これを解析、変換処理する。
推論エンジン5は概略、データの繰り返しなどのパターンを見つけるループ発見プログラム8を実行してデータ列を解析して、中間データ9に変換する。この中間データ9を元に新システムの動作を再現する再現プログラム6が動作して、既存プログラム2と同じ動作を新システムにおいて再現する。データ列記憶再生部10において、前述のような前処理を行っている場合には、後処理システム11において、前処理に対応する後処理を中間データ9に行ってから再現プログラム6に渡す。
推論エンジン5が実行する推論アルゴリズムによる記録データ列のデータ解析の概要は、以下のような考え方によるものである。
・一般的なプログラムの制御構造は、「分岐」、「サブプログラム」、「ループ」などで構成されている。
・この内、「ループ」を使用することにより、プログラム行数を少なくできる。
・本システムは、通信モニターなどの通信ログの記録データ列から、データの繰り返しを発見して「ループ」を推論し、中間データ9を作成する。
ここで言う、データの繰り返しとは、通信モニター記録(通信ログ)のデータ列の中の、同じ値のデータ項目(データ要素)の単純な連続や反復のみでなく、異なる値を含む複数のデータ項目の列(パターン)の反復や、そのような反復パターンを構成要素として含む階層的な反復パターンを含むことに留意されたい。
(前処理と後処理)
なお、図2の(a)に示すように、以下に説明するデータ列の例では、データ列記憶再生部10において生の通信ログの前処理として、同じ値のデータ要素の単純な反復は、データ要素の値と反復する長さ(いわゆる連長、ランレングス)の値を組にしたデータ項目に変換(連長圧縮)して、以後の反復パターン検出の演算量を節減している。
例えば、前処理する前の生の通信ログデータに「AAABBBBB」とあれば、「A3」、「B5」として変換し、これを2つのデータ項目「AB」のように推論エンジンの入力データ列においては表現する。このため、以下に説明するデータ列の例では、同じ値のデータ項目が連続することは無い。
また別の通信ログの前処理として、生の通信ログの中に例えば頻出する長いキーワードなどの文字列があれば、これを1つのデータ項目に変換(文字列変換)しておくことも可能である。あるいは前処理としては、このような文字列変換と前述の連長圧縮と組み合わせても良い。この様な前処理を行っておくと、後述のループ発見処理の効率を大幅に向上することができる。
なお、データ列記憶再生部10においてこのような前処理を行っている場合には、前処理の逆変換に当たる後処理を行う必要があり、読み出した中間データ9に後処理システム11において、図2(b)に示すような処理を行っている。中間データ9の詳細については後述するが、図2(b)においては、上図のたとえば2行目の
<DATA>A5</DATA>
とある行が、下図の2〜4行目の
<LOOP Count=5 Length=1>
<DATA>A</DATA>
<LOOP>
のようにループに展開されて、連長圧縮の逆変換を表現している。
前処理が文字列変換の場合には、表引きなどにより単に文字列の逆変換を行えばよい。
確実な再現動作を可能とするためには、通信ログのデータ列の取得は、なるべくシステムの初期状態、すなわちPC1や制御対象物3がリセットないし電源投入時の状態から開始されるのが望ましいが、必ずしもこれに限定されるものではない。
(プログラム実装例)
図3には、この様な推論アルゴリズムによるプログラム生成システム7のプログラム実装例、特にデータの繰り返しを見つけるループ発見プログラム8を含む推論エンジン5のプログラム言語Python(パイソン)による実装コードの一例を示し、以下の表1にその一部を示す。
[表1]
class プログラム生成システム:
def __init__(self):
self.中間データ = ET.Element('program')

def 推論開始(self,通信ログデータ列,前処理=False,後処理=False):
データ列 = []
if 前処理:
データ列 = self.前処理(通信ログデータ列)
else:
データ列 = 通信ログデータ列
self._推論エンジン(0,self.中間データ,データ列)
if 後処理:
self.後処理(self.中間データ)

def 前処理(self,通信ログデータ列): # 省略

def _推論エンジン(self, 開始点,中間データ,通信ログデータ列):
def 次の開始点とループ回数(開始点,ループ長さ,通信ログデータ列):
for ループ回数 in range(1,int(len(通信ログデータ列)/2 + 1)):
if (通信ログデータ列[ 開始点 : 開始点 + ループ長さ]
!= 通信ログデータ列[ 開始点 + (ループ回数+1) * ループ長さ : 開始点 + (ループ回数+2) * ループ長さ]) :
return 開始点 + (ループ回数+1) * ループ長さ, ループ回数
return 開始点 + ループ長さ*2, ループ回数

次の開始点の一時保存 = 0
ループ長さの一時保存 = 0
ループ回数の一時保存 = 0
基の開始点 = 次の開始点の一時保存
while 開始点 < len(通信ログデータ列):
for ループ長さ in range(1,int(len(通信ログデータ列)/2 + 1)):
if (通信ログデータ列[ 開始点 : 開始点 + ループ長さ]
== 通信ログデータ列[ 開始点 + ループ長さ : 開始点 + 2 * ループ長さ]) :
次の開始点候補,ループ回数 = 次の開始点とループ回数(開始点,ループ長さ,通信ログデータ列)
if 次の開始点の一時保存 < 次の開始点候補:
次の開始点の一時保存 = 次の開始点候補
ループ長さの一時保存 = ループ長さ
ループ回数の一時保存 = ループ回数
if 基の開始点 == 次の開始点の一時保存:
単発データ = ET.SubElement(中間データ,'line')
単発データ.text = str(通信ログデータ列[ 開始点 ])
開始点 += 1
else:
if 開始点 + 1 < 次の開始点の一時保存:
ループデータ = ET.SubElement(中間データ,'loop')
ループデータ.set('count',str(ループ回数の一時保存 + 1))
ループデータ.set('length',str(ループ長さの一時保存))
self._推論エンジン(0,ループデータ,通信ログデータ列[ 開始点 : 開始点 + ループ長さの一時保存])
開始点 = 次の開始点の一時保存
基の開始点 = 次の開始点の一時保存
else:
開始点 += 1

def 後処理(self,中間データ): # 省略
def 中間データ読み出し(self): # 省略
def 再現プログラム生成(self, 中間データ, インデント, 変数採番): # 省略

def main():
通信ログデータ列 =
["A","A","A","A","A","B","C","B","C","D","B","C","B","C","D","A","E","F","G"]
推論機 = プログラム生成システム()
推論機.推論開始(通信ログデータ列,前処理=True,後処理=True)
print(推論機.中間データ読み出し())

# 正誤チェック.
再現結果 = {}
exec(推論機.再現プログラム生成(推論機.中間データ,"",0),globals(),再現結果)
print(通信ログデータ列)
print(再現結果['ans'])
print( "verify OK") if 再現結果['ans'] == 通信ログデータ列 else print( "verify NG")

if "__main__" == __name__:
main()
(データ列1:基本繰り返しパターンの場合)
以下の図4〜21に、通信ログデータ列の一例(ABCDBCDBCDAEFG:データ列1とする)について、上記のプログラム生成システムのプログラムコードにより、繰り返しを見つけるループ発見プログラム8を含む推論エンジン5を実行した場合の、中間データ9の状態の変化を順に説明する。なお、以下同様であるが、データ列の各アルファベットA〜Gは、前述のような前処理をした最小単位のデータ項目を表している。
図4は、本プログラム生成システムのプログラムコードを開始した初期状態を示す。
図4(a)は、本プログラム生成システムの入力データとして、解析対象となるデータ列であって、通信モニター4などで得られた既存プログラムの動作記録(通信モニター記録のログデータ)に基づくデータ列1が示されている。図4(a)の左端に「開始点」として示される下向き矢印は、現在の処理対象データとして着目するデータ列の、部分区間の先頭のデータ項目の位置を指し示すポインタ(開始点ポインタ)であって、図2および表1に示す「開始点」とある変数に相当し、初期状態においては、入力データ列の先頭(左端)のデータ項目「A」に位置づけられている。
図4(b)は、本プログラム生成システムの入力データ解析の途中結果を記録する、中間データ格納領域(図1の中間データ9)の状態を示しており、初期状態においては、中間データ格納領域が確保されて、最終的に出力される生成プログラムの空の初期状態として、
<Program>
</Program>
の識別子(タグ)のみが記録されている。後述するように、本プログラム生成システムの入力データ解析の進行につれて、解析されたデータ構造が<Program>のタグと、</Program>のタグの間に追記されていく。したがって、この中間データは、階層構造を表現できるデータ形式を用いる。
さて、本プログラム生成システムの入力データ解析の基本動作の一つは、データ列の中にある同じパターンの繰り返しを有するデータ項目の列、すなわちループの検出である。このため、部分区間の長さ(部分区間に含まれるデータ項目の数)が2の場合から始めて、同じ長さの後続の部分区間が同じ値かどうかを比較してゆく。前述のように前処理によって、同じ値のデータ項目の連続は取り除かれているので、部分区間の長さが2の場合から始めることでループ検出の処理を効率化できる。
図4(a)においては最初の部分区間(A,B)と後続の(C,D)の2つの部分区間が比較されており、同じではないので、比較する部分区間の長さ(ループ長さ)を1つ増やして3として図5の状態に遷移する。
同様にして、図5〜9まで順次、比較する区間の幅を増やして繰り返してゆくが、同じ部分区間の反復パターンが見つからず、図9では比較する後続の部分区間の末尾が入力データ列の終わりまで達してしまう。この状態で、開始点ポインタが指すデータ項目Aと同じデータ項目Aは、入力データ列の終わりから3つ手前にもう一つ存在するが、後続の部分区間の先頭がそこまでは達する前に、後続の部分区間の末尾が入力データ列の終わりのデータ項目Gまで達してしまうので、認識されないことに留意されたい。
さて、この状態において、データ項目Aから始まる繰り返しデータ列が入力データの中に無いことが確定するので、データ項目Aを最初に認識された単独のデータ要素として、
<DATA>A</DATA>
のように中間データ格納領域にタグを追記する。(図8(b))
つぎの、図10においては、開始点を1つ進めて同じループ検出動作を行う。すると、図11に示すように、データ項目Bから始まるループ長さ3の部分区間(B,C,D)に同じパターンの後続部分区間(B,C,D)が検出され、ループと認識される。
図11に示す状態においては、今度はループの繰り返し回数(ループ回数)の検出動作に移行する。すなわち、ループパターンとして検出された後続の部分区間の次に、さらに同じ長さの部分区間を設定して比較する動作を反復する。すると、図12に示すように、同じ長さ3の部分区間(B,C,D)は3つあることが判明する。
しかし、図13に示すように4つ目の部分区間の値は(A,E,F)であるので、(B,C,D)の4回目の繰り返しはないことが判明する。ここで検出されたループパターンの繰り返し回数(ループ回数)が確定し、ループ回数=3、ループ長さ3として、
<LOOP Count=3 Length=3>
</LOOP>
のように中間データ格納領域にループのタグが挿入追記される。(図13(b))
但し、図13のこの段階では、繰り返すループパターンの具体的な部分区間のデータの値(B,C,D)は、まだ確定しない。繰り返すパターンの部分区間中に、階層的に更に繰り返しが含まれる場合があるからである。このループの中にあるループを検出するステップは、本発明の実施形態のプログラムコードにおいては、いわゆる再帰呼び出しとして実装されている。具体的には、図3または表1のプログラムコードにおいて、推論エンジンの定義中にある
self._推論エンジン(0,ループデータ,通信ログデータ列[ 開始点 : 開始点 + ループ長さの一時保存])
とある推論エンジンの呼び出しが相当する。
次の図14〜16が、この繰り返すパターンの中にある繰り返しを検出するステップを説明する図である。繰り返すパターンのデータ列(B,C,D)を、図4における入力データ列とみなして、図4からと同様なループの検出動作を行う。
但し、図14〜16に示される開始点ポインタは、再帰呼び出しされる推論エンジンの手続の側で新たに割り当て設定される、別のインスタンスとしての開始点ポインタであって、最初に図4において設定される開始点ポインタとは別の値をもつ変数であることに留意が必要である。多重のループ構造が入れ子構造となっている場合は、多重に再帰呼び出しされたそれぞれのレベルの推論エンジンの手続きにおいて、それぞれ別のインスタンスとしての開始点ポインタが設定されることとなる。
さて、入力データ列として設定された(B,C,D)の中には繰り返しは存在しないので、図14〜16において後続データ列との同一判定はいずれも失敗し、繰り返すパターンのデータ列(B,C,D)を指し示す開始点ポインタが進められる毎に、繰り返すパターンのデータ列を構成するデータ項目の具体的な値が、B,C,Dの順に確定し、中間データ格納領域にある
<LOOP Count=3 Length=3></LOOP>
タグの中に
<DATA>B</DATA>
<DATA>C</DATA>
<DATA>D</DATA>
のように挿入追記されてゆく。(図14(b)〜図16(b))
図16において、再帰呼び出しされた推論エンジンの手続きにおいて、開始ポインタがデータ列の最後に到達すると、再帰呼び出しされた推論エンジンの手続きは終了して、プログラムの制御は再帰呼び出しした側の推論エンジンの手続き処理に戻る。
図17において、もとの処理に戻ると、図17(b)のように、中間データ格納領域にはループの具体的なデータ項目の値が確定した繰り返し処理が格納されている。もとの処理の開始点ポインタは図18(a)に示すように、当初の入力データ列において繰り返しが終わった点の次の、データ項目Aをさす位置へ移動される。
図19〜21に示すように、残った入力データ列(A,E,F,G)について、図4からと同様なループ検出処理が実行される。残った入力データ列(A,E,F,G)の中には繰り返しパターンは存在しないので、同一判定が失敗して開始点ポインタが進められる毎に、残ったデータ列の値が順に確定し、中間データ格納領域の
<LOOP Count=3 Length=3>・・・</LOOP>
タグの後ろに、データ項目A,E,F,Gが順に格納されてゆく。(図21(b))
このようにして、データ列1についての推論エンジン5による処理が完了して、中間データ9が確定する。
(データ列2:異なる長さの複数のループを含む場合)
以下の図22〜24には、データ列処理の別例として、異なる長さの複数の繰り返し候補がある場合(ABCBCBCBCBCDAEFG:データ列2)について、上記のプログラム生成システムのコードにより、繰り返しを見つけるステップ8、推論エンジン5を実行した場合の中間データ9の状態の変化を順に説明する。データ列2では、BCが5個連なったパターン(BCBCBCBCBC)を含んでいる。
図22は、データ列1の図4と同じ初期状態であって、開始点Aで始まるループはこの場合も存在しないので、途中の状態は省略するがデータ列1の図4〜9の場合と同様にデータ列2が処理されて、最終的にデータ列1の図10と同様にデータ「A」が最初に認識された単独のデータ項目となる。(図23(b))
図23では、開始点が1つ進められて開始点ポインタは2番目のデータ項目Bをさしているが、このデータ列2の場合、データ列1の場合の図10の状態と異なり、図23(a1)と図23(a2)に示すように、ループ長さ(部分区間の幅)が2と4で異なる、2通りの繰り返しパターンの認識が可能である。
この様な異なる長さのループ候補が検出される場合に、どちらの長さのループとして認識するのかを、図24で説明する。
図24(a1)は、データ列2の場合、ループ長さ2のパターン(B,C)が5回認識可能であることを示している。図24(b)には、この場合の中間データ格納領域の状態を
<LOOP Count=5 Length=2>
<DATA>B</DATA>
<DATA>C</DATA>
</LOOP>
として示している。
一方、図24(a2)には、データ列2の場合、ループ長さ4のパターン(B,C,B,C)を2回認識することも可能であることが示されている。本実施例では、この2つの例では、長さ2の繰り返しの終了地点の方が長さ4の繰り返し終了地点より後ろにあるので、より後ろにある長さ2の方を採用する。
このようにすれば、より長いデータ列をループとして認識可能となり、生成プログラムが効率的となる。
(データ列3:繰り返しの中に繰り返しがある場合)
以下の図25〜34には、データ列処理の更に別例として、繰り返しの中に繰り返しがある場合(ABCBCDBCBCDAEFG:データ列3)について、推論エンジン5を実行した場合の中間データ9の状態の変化を順に説明する。
このデータ列3の例では、2番目のデータ項目Bから始まる長さ5の2回のループ
(BCBCDBCBCD)
のループパターン(BCBCD)中に更に、長さ2の2回のループ(BCBC)が含まれている。
以下の図25〜34に、このような場合の動作説明を補足する。
図25は、データ列1の図4、データ列2の図22と同様な、データ列3の初期状態である。
図26では、開始点が一つ進められた結果、データ列3の場合、ループ長さの異なる2つのパターンが認識可能であることを示している。図26(a1)では、ループ長さ2のパターン(BC)が2回、図26(a2)では、ループ長さ5のパターン(BCBCD)が2回、認識可能である。この例では、長さ5の繰り返しの終了地点の方が、長さ2の繰り返し終了地点より後ろにあるので、前述のようにより後ろにある図26(a2)の長さ5の方を採用する。
図26(b)の3〜4行目には、この場合の中間データ格納領域の状態を
<LOOP Count=2 Length=5>
</LOOP>
として示している。
図27では、この様にして認識された図26(a2)のループ長さ5のパターン(BCBCD)に対して、再帰的に呼び出された、繰り返しの中の繰り返しを検出する手続の動作を示している。長さ5のパターン(BCBCD)の中には、長さ2のパターン(BC)の繰り返しが2回検出可能であるが、それ以上の長さのパターンは検出されない。そして、長さ2のパターン(BC)の中には、もはやループは無い。
従って図28(b)に示すように、長さ5のループの中に長さ2のループ(BC)が2回含まれていることが確定し、入れ子となったデータ構造が、以下の中間データとして確定する。
<LOOP Count=2 Length=5>
<LOOP Count=2 Length=2>
<DATA>B</DATA>
<DATA>C</DATA>
<LOOP>
図29では、ループ長さ5のパターンの開始点ポインタが進められて、末尾のデータ要素Dが確定した状態が、図29(b)8行目の
<DATA>D</DATA>)
として示されている。
図30では、トップレベルのパターン認識の手続に戻り、開始点ポインタがループ長さ5の2回の繰り返しの後のデータ要素Aを指している。
以下、図31〜34では残りのデータ要素の検査がトップレベルで行われるが、ループは含まれていないので、各々のデータ要素A、E、F、Gが順次トップレベルの中間データに追加されて、データ列3の末尾に到達して、推論エンジン5の繰り返しを見つけるステップ8が終了する。
(全体のシーケンス図)
図35には、本発明の実施形態のプログラム生成システムの全体のシーケンス図を示す。シーケンス図左のActor1とあるフローは、図1のプログラム生成システム7の全体動作のための計算モデルにおけるActorと呼ばれるオブジェクトであって、推論する、XMLファイルプリント、検証、の各動作を実行する。
シーケンス図右の「繰り返し性」から始まる流れは、プログラムコードの実行する具体的手続の流れであって、例えばActorの推論する動作における、前処理、推論エンジン、次の開始点を探す、推論エンジン、後処理などの各動作を示している。
実施形態のプログラムコードでは動作の検証のため、推論エンジン5が作成した中間データ9をそのまま再生する、いわば雛形の再現プログラム6としており、これをプロセッサが実行して入力データ列(Input)が再現されていることを検証している。
実際のシステムへの適用にあたっては、再現すべき新システムの変更要求などに合わせて、中間データのパラメータ(例えばループ回数、ループ長さやループを構成するデータ項目の値など)を変更して、新システムの要求仕様に適合したデータを再生する再現プログラム6とすることができる。
データ列が、前述のような生の通信ログデータに連長圧縮または文字列変換などの前処理を行ったものである場合には、後処理システム11において中間データ9に、連長圧縮または文字列変換の逆変換に相当する後処理を行う必要がある。
図36には、図4〜34に説明した推論エンジンの動作フローとログデータ列の状態の全体の関係をまとめて示す。
図37には、同様に図4〜34に説明した繰り返しパターンを見つけるループ発見プログラム8のフローチャートの全体構造を示す。
以上のように本発明によれば、旧システムのログデータや通信モニター記録を解析して、階層的なループ構造を検出して中間データを作成し、これに基づいて旧システムのロジックを新システムでも再現するためのプログラムを生成することができる。
本発明によれば旧システムの通信モニター記録などに基づいて、旧システムのロジックを新システムでも再現するためのプログラム、およびそのプログラムをもちいたシステムを提供することができる。
1 旧システム(PC)
2 既存プログラム
3 制御対象物
4 通信モニター
5 推論エンジン
6 再現プログラム
7 プログラム生成システム
8 ループ発見プログラム
9 中間データ
10 データ列記憶再生部
11 後処理システム

Claims (7)

  1. 旧システムの記録データより生成されたデータ列に基づいて、前記旧システムのロジックを新システムでも再現するためのプログラム生成システムであって、
    推論アルゴリズムを実行する推論エンジンを備え、
    前記推論エンジンが、前記データ列にデータの繰り返しのパターンを見つけるループ発見プログラムを実行して、前記データ列を解析して中間データに変換し、
    前記中間データを元に前記旧システムの動作を前記新システムにおいて再現する再現プログラムを生成する
    ことを特徴とするプログラム生成システムにおいて、
    前記ループ発見プログラムは、
    前記データ列に含まれる複数のデータ項目のうちの、処理対象として着目する最初の部分区間の先頭のデータ項目を指し示す開始点ポインタを、データ列の先頭のデータ項目に位置づけ、
    最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じではない場合は比較する部分区間の長さを1つ増やす動作を、後続の部分区間の末尾または開始点ポインタがデータ列の終わりに達するまで反復し、
    後続の部分区間の末尾がデータ列の終わりに達した場合は、開始点ポインタの指すデータ項目を中間データに追記し、開始点ポインタを1つ進める
    ことを特徴とするプログラム生成システム。
  2. 前記ループ発見プログラムは、さらに
    前記最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じである場合は、前記後続の部分区間の次にさらに同じ長さの部分区間を追加して比較する動作を反復して、ループの繰り返し回数を確定し、
    前記中間データにループの繰り返し回数とループ長さを追記する
    ことを特徴とする請求項のプログラム生成システム。
  3. 前記ループ発見プログラムは、さらに
    ループとして認識された部分区間のデータ列を処理対象のデータ列として、別の開始点ポインタを割り当て設定し、ループ検出の動作を再度行う
    ことを特徴とする請求項のプログラム生成システム。
  4. 前記再現プログラムは前記中間データのパラメータを変更して再生する再現プログラムである
    ことを特徴とする請求項1からのいずれか1項に記載のプログラム生成システム。
  5. 前記データ列は前記旧システムにおける記録データに、連長圧縮または文字列変換の少なくともいずれかを含む前処理を行ったデータ列であり、
    前記中間データに前記前処理の逆変換に相当する後処理を行い、前記再現プログラムを生成する
    ことを特徴とする請求項1からのいずれか1項に記載のプログラム生成システム。
  6. 請求項1からのいずれか1項に記載のプログラム生成システムにおいて、
    前記推論エンジンおよび前記ループ発見プログラムとして動作する
    ことを特徴とするコンピュータプログラム。
  7. 請求項6に記載のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
JP2019049954A 2019-03-18 2019-03-18 プログラム生成システム、そのコンピュータプログラム及び記録媒体 Expired - Fee Related JP6714742B1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019049954A JP6714742B1 (ja) 2019-03-18 2019-03-18 プログラム生成システム、そのコンピュータプログラム及び記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019049954A JP6714742B1 (ja) 2019-03-18 2019-03-18 プログラム生成システム、そのコンピュータプログラム及び記録媒体

Publications (2)

Publication Number Publication Date
JP6714742B1 true JP6714742B1 (ja) 2020-06-24
JP2020154421A JP2020154421A (ja) 2020-09-24

Family

ID=71103979

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019049954A Expired - Fee Related JP6714742B1 (ja) 2019-03-18 2019-03-18 プログラム生成システム、そのコンピュータプログラム及び記録媒体

Country Status (1)

Country Link
JP (1) JP6714742B1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022185535A1 (ja) * 2021-03-05 2022-09-09 日本電信電話株式会社 原因工程特定装置、原因工程特定方法及びプログラム

Also Published As

Publication number Publication date
JP2020154421A (ja) 2020-09-24

Similar Documents

Publication Publication Date Title
CN108549605B (zh) 一种自动化测试方法
US7647577B2 (en) Editing, creating, and verifying reorganization of flowchart, and transforming between flowchart and tree diagram
CN113238932B (zh) 测试用例自动生成方法
JP2010287213A (ja) ファイル変換装置、ファイル変換方法およびファイル変換プログラム
WO2021161429A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
CN112035588A (zh) 构建空间数据规则库引擎的方法及gis数据质量检查方法
JP6714742B1 (ja) プログラム生成システム、そのコンピュータプログラム及び記録媒体
US8286141B2 (en) Instruction-trace generation program, instruction-trace generating device, and instruction-trace generating method
CN1996239A (zh) 一种生成测试脚本的方法及装置
US20180150382A1 (en) Determining similarities in computer software codes for performance analysis
van den Bos et al. Domain-specific optimization in digital forensics
JP2010218333A (ja) 解析ルール生成装置、解析ルール生成方法、解析ルール生成プログラム及び記録媒体
Tang et al. Software defect prediction via gcn based on structural and context information
Xavier et al. An interactive learning approach on digital twin for deriving the controller logic in IEC 61499 standard
CN114546836A (zh) 基于下推自动机引导的公共组件库自动化测试方法及装置
JP2007079906A (ja) ソースコード生成装置
JP2016042317A (ja) ソフトウェア設計支援装置、および方法
JPH06110733A (ja) プログラムのテストケース生成装置
JP5514682B2 (ja) バッチ処理プログラム分析方法および装置
CN112597156B (zh) 无编程化动态数据存储及表格绘制方法及装置
JP4698943B2 (ja) プログラム生産方法、プログラム生産装置、プログラム自動変換方法、およびプログラム
JP4782315B2 (ja) 影響解析装置および方法、記録媒体、プログラム
KR102066022B1 (ko) 실행 코드 상의 함수 시그니처 생성 장치 및 방법
US20240202522A1 (en) Device and method for generating deep learning model graph and abstract syntax tree for integrated compiler
JP3602231B2 (ja) テストパターン作成装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190318

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200217

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200225

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200413

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: 20200526

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200605

R150 Certificate of patent or registration of utility model

Ref document number: 6714742

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees
S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350