JP6714742B1 - プログラム生成システム、そのコンピュータプログラム及び記録媒体 - Google Patents
プログラム生成システム、そのコンピュータプログラム及び記録媒体 Download PDFInfo
- 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
Links
- 238000004590 computer program Methods 0.000 title claims description 5
- 238000007781 pre-processing Methods 0.000 claims description 25
- 238000012805 post-processing Methods 0.000 claims description 17
- 238000012545 processing Methods 0.000 claims description 14
- 238000006243 chemical reaction Methods 0.000 claims description 11
- 238000001514 detection method Methods 0.000 claims description 9
- 230000006835 compression Effects 0.000 claims description 7
- 238000007906 compression Methods 0.000 claims description 7
- 238000004422 calculation algorithm Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 abstract description 56
- 238000010586 diagram Methods 0.000 abstract description 9
- 238000000034 method Methods 0.000 description 43
- 238000013500 data storage Methods 0.000 description 9
- 238000007405 data analysis Methods 0.000 description 4
- 238000005259 measurement Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000012508 change request Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000003909 pattern recognition Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
旧システムの記録データより生成されたデータ列に基づいて、前記旧システムのロジックを新システムでも再現するためのプログラム生成システムであって、
推論アルゴリズムを実行する推論エンジンを備え、
前記推論エンジンが、前記データ列にデータの繰り返しなどのパターンを見つけるループ発見プログラムを実行して、前記データ列を解析して中間データに変換し、
前記中間データを元に前記旧システムの動作を前記新システムにおいて再現する再現プログラムを生成する
ことを特徴とするプログラム生成システム。
前記ループ発見プログラムは、
前記データ列に含まれる複数のデータ項目のうちの、処理対象として着目する最初の部分区間の先頭のデータ項目を指し示す開始点ポインタを、データ列の先頭のデータ項目に位置づけ、
最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じではない場合は比較する部分区間の長さを1つ増やす動作を、後続の部分区間の末尾または開始点ポインタがデータ列の終わりに達するまで反復し、
後続の部分区間の末尾がデータ列の終わりに達した場合は、開始点ポインタの指すデータ項目を中間データに追記し、開始点ポインタを1つ進める
ことを特徴とする構成1のプログラム生成システム。
前記ループ発見プログラムは、さらに
前記最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じである場合は、前記後続の部分区間の次にさらに同じ長さの部分区間を追加して比較する動作を反復して、ループの繰り返し回数を確定し、
前記中間データにループの繰り返し回数とループ長さを追記する
ことを特徴とする構成2のプログラム生成システム。
前記ループ発見プログラムは、さらに
ループとして認識された部分区間のデータ列を処理対象のデータ列として、別の開始点ポインタを割り当て設定し、ループ検出の動作を再度行う
ことを特徴とする構成3のプログラム生成システム。
前記再現プログラムは前記中間データのパラメータを変更して再生する再現プログラムである
ことを特徴とする構成1から4のいずれか1項に記載のプログラム生成システム。
前記データ列は前記旧システムにおける記録データに、連長圧縮または文字列変換の少なくともいずれかを含む前処理を行ったデータ列であり、
前記中間データに前記前処理の逆変換に相当する後処理を行い、前記再現プログラムを生成する
ことを特徴とする構成1から5のいずれか1項に記載のプログラム生成システム。
構成1から6のいずれか1項に記載のプログラム生成システムにおいて、
前記推論エンジンおよび前記ループ発見プログラムとして動作する
ことを特徴とするコンピュータプログラム。
構成7に記載のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
図1は、本発明の一実施形態にかかるプログラム生成システム7を含む全体の構成を説明する概念図である。
・一般的なプログラムの制御構造は、「分岐」、「サブプログラム」、「ループ」などで構成されている。
・この内、「ループ」を使用することにより、プログラム行数を少なくできる。
・本システムは、通信モニターなどの通信ログの記録データ列から、データの繰り返しを発見して「ループ」を推論し、中間データ9を作成する。
なお、図2の(a)に示すように、以下に説明するデータ列の例では、データ列記憶再生部10において生の通信ログの前処理として、同じ値のデータ要素の単純な反復は、データ要素の値と反復する長さ(いわゆる連長、ランレングス)の値を組にしたデータ項目に変換(連長圧縮)して、以後の反復パターン検出の演算量を節減している。
<DATA>A5</DATA>
とある行が、下図の2〜4行目の
<LOOP Count=5 Length=1>
<DATA>A</DATA>
<LOOP>
のようにループに展開されて、連長圧縮の逆変換を表現している。
前処理が文字列変換の場合には、表引きなどにより単に文字列の逆変換を行えばよい。
図3には、この様な推論アルゴリズムによるプログラム生成システム7のプログラム実装例、特にデータの繰り返しを見つけるループ発見プログラム8を含む推論エンジン5のプログラム言語Python(パイソン)による実装コードの一例を示し、以下の表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()
以下の図4〜21に、通信ログデータ列の一例(ABCDBCDBCDAEFG:データ列1とする)について、上記のプログラム生成システムのプログラムコードにより、繰り返しを見つけるループ発見プログラム8を含む推論エンジン5を実行した場合の、中間データ9の状態の変化を順に説明する。なお、以下同様であるが、データ列の各アルファベットA〜Gは、前述のような前処理をした最小単位のデータ項目を表している。
<Program>
</Program>
の識別子(タグ)のみが記録されている。後述するように、本プログラム生成システムの入力データ解析の進行につれて、解析されたデータ構造が<Program>のタグと、</Program>のタグの間に追記されていく。したがって、この中間データは、階層構造を表現できるデータ形式を用いる。
<DATA>A</DATA>
のように中間データ格納領域にタグを追記する。(図8(b))
<LOOP Count=3 Length=3>
</LOOP>
のように中間データ格納領域にループのタグが挿入追記される。(図13(b))
self._推論エンジン(0,ループデータ,通信ログデータ列[ 開始点 : 開始点 + ループ長さの一時保存])
とある推論エンジンの呼び出しが相当する。
<LOOP Count=3 Length=3></LOOP>
タグの中に
<DATA>B</DATA>
<DATA>C</DATA>
<DATA>D</DATA>
のように挿入追記されてゆく。(図14(b)〜図16(b))
<LOOP Count=3 Length=3>・・・</LOOP>
タグの後ろに、データ項目A,E,F,Gが順に格納されてゆく。(図21(b))
以下の図22〜24には、データ列処理の別例として、異なる長さの複数の繰り返し候補がある場合(ABCBCBCBCBCDAEFG:データ列2)について、上記のプログラム生成システムのコードにより、繰り返しを見つけるステップ8、推論エンジン5を実行した場合の中間データ9の状態の変化を順に説明する。データ列2では、BCが5個連なったパターン(BCBCBCBCBC)を含んでいる。
<LOOP Count=5 Length=2>
<DATA>B</DATA>
<DATA>C</DATA>
</LOOP>
として示している。
以下の図25〜34には、データ列処理の更に別例として、繰り返しの中に繰り返しがある場合(ABCBCDBCBCDAEFG:データ列3)について、推論エンジン5を実行した場合の中間データ9の状態の変化を順に説明する。
(BCBCDBCBCD)
のループパターン(BCBCD)中に更に、長さ2の2回のループ(BCBC)が含まれている。
<LOOP Count=2 Length=5>
</LOOP>
として示している。
<LOOP Count=2 Length=5>
<LOOP Count=2 Length=2>
<DATA>B</DATA>
<DATA>C</DATA>
<LOOP>
<DATA>D</DATA>)
として示されている。
図35には、本発明の実施形態のプログラム生成システムの全体のシーケンス図を示す。シーケンス図左のActor1とあるフローは、図1のプログラム生成システム7の全体動作のための計算モデルにおけるActorと呼ばれるオブジェクトであって、推論する、XMLファイルプリント、検証、の各動作を実行する。
2 既存プログラム
3 制御対象物
4 通信モニター
5 推論エンジン
6 再現プログラム
7 プログラム生成システム
8 ループ発見プログラム
9 中間データ
10 データ列記憶再生部
11 後処理システム
Claims (7)
- 旧システムの記録データより生成されたデータ列に基づいて、前記旧システムのロジックを新システムでも再現するためのプログラム生成システムであって、
推論アルゴリズムを実行する推論エンジンを備え、
前記推論エンジンが、前記データ列にデータの繰り返しのパターンを見つけるループ発見プログラムを実行して、前記データ列を解析して中間データに変換し、
前記中間データを元に前記旧システムの動作を前記新システムにおいて再現する再現プログラムを生成する
ことを特徴とするプログラム生成システムにおいて、
前記ループ発見プログラムは、
前記データ列に含まれる複数のデータ項目のうちの、処理対象として着目する最初の部分区間の先頭のデータ項目を指し示す開始点ポインタを、データ列の先頭のデータ項目に位置づけ、
最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じではない場合は比較する部分区間の長さを1つ増やす動作を、後続の部分区間の末尾または開始点ポインタがデータ列の終わりに達するまで反復し、
後続の部分区間の末尾がデータ列の終わりに達した場合は、開始点ポインタの指すデータ項目を中間データに追記し、開始点ポインタを1つ進める
ことを特徴とするプログラム生成システム。 - 前記ループ発見プログラムは、さらに
前記最初の部分区間と、同じ長さの後続の部分区間のデータ項目の値を比較して、同じである場合は、前記後続の部分区間の次にさらに同じ長さの部分区間を追加して比較する動作を反復して、ループの繰り返し回数を確定し、
前記中間データにループの繰り返し回数とループ長さを追記する
ことを特徴とする請求項1のプログラム生成システム。 - 前記ループ発見プログラムは、さらに
ループとして認識された部分区間のデータ列を処理対象のデータ列として、別の開始点ポインタを割り当て設定し、ループ検出の動作を再度行う
ことを特徴とする請求項2のプログラム生成システム。 - 前記再現プログラムは前記中間データのパラメータを変更して再生する再現プログラムである
ことを特徴とする請求項1から3のいずれか1項に記載のプログラム生成システム。 - 前記データ列は前記旧システムにおける記録データに、連長圧縮または文字列変換の少なくともいずれかを含む前処理を行ったデータ列であり、
前記中間データに前記前処理の逆変換に相当する後処理を行い、前記再現プログラムを生成する
ことを特徴とする請求項1から4のいずれか1項に記載のプログラム生成システム。 - 請求項1から5のいずれか1項に記載のプログラム生成システムにおいて、
前記推論エンジンおよび前記ループ発見プログラムとして動作する
ことを特徴とするコンピュータプログラム。 - 請求項6に記載のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022185535A1 (ja) * | 2021-03-05 | 2022-09-09 | 日本電信電話株式会社 | 原因工程特定装置、原因工程特定方法及びプログラム |
-
2019
- 2019-03-18 JP JP2019049954A patent/JP6714742B1/ja not_active Expired - Fee Related
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 |