JP2015064696A - シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラム - Google Patents

シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラム Download PDF

Info

Publication number
JP2015064696A
JP2015064696A JP2013197540A JP2013197540A JP2015064696A JP 2015064696 A JP2015064696 A JP 2015064696A JP 2013197540 A JP2013197540 A JP 2013197540A JP 2013197540 A JP2013197540 A JP 2013197540A JP 2015064696 A JP2015064696 A JP 2015064696A
Authority
JP
Japan
Prior art keywords
node
file
symbol variable
storage unit
writing
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.)
Granted
Application number
JP2013197540A
Other languages
English (en)
Other versions
JP6201567B2 (ja
Inventor
朝子 片山
Asako Katayama
朝子 片山
忠弘 上原
Tadahiro Uehara
忠弘 上原
翔一朗 藤原
Shoichiro Fujiwara
翔一朗 藤原
一樹 宗像
Kazuki Munakata
一樹 宗像
スッパシット モンプラターンチャイ
Monpratarnchai Supasit
スッパシット モンプラターンチャイ
晋 徳本
Susumu Tokumoto
晋 徳本
前田 芳晴
Yoshiharu Maeda
芳晴 前田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013197540A priority Critical patent/JP6201567B2/ja
Publication of JP2015064696A publication Critical patent/JP2015064696A/ja
Application granted granted Critical
Publication of JP6201567B2 publication Critical patent/JP6201567B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】バックトラック後に移行する別経路のノードにおいて適切に入出力処理をすること。【解決手段】作成部111は、クラス121から作成された複数のモデルクラス122に基づき、実行ツリーを作成する。判断部112は、ノードにおいて書込処理または読込処理が含まれる場合にシンボル変数が含まれるか否かを判断する。格納部113は、対象ファイル123に対して書込処理を実行する。格納部113は、対象ファイル123に書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120に記憶する。取得部114は、バックトラックして他の経路に移行した後に読込処理を実行する際、ノードに対応する退避ファイル124に対して読込処理を実行する。実行部115は、実行ツリーにおいてノードを探索する。実行部115は、書込処理および読込処理以外のメソッドを実行する。【選択図】図5

Description

本発明は、シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラムに関する。
シンボリック実行技術とは、プログラム中の変数を具体化せず、シンボル変数のままでプログラムにおける処理を実行する技術である。一般的に、プログラムは冒頭部分においてシンボル変数aが整数型で、シンボル変数bが浮動小数点数型である等のようにシンボル変数のデータ型を定義する。また、プログラムは処理部分においてプログラム文中に記述されている具体的な値をシンボル変数に挿入することがある。さらに、プログラムは外部のテキストファイル等を読込んで取得した値をシンボル変数に挿入することもある。
一方、処理装置がシンボリック実行技術をモデル検査エンジンに実行させる場合、モデル検査エンジンは、シンボル変数に具体的な値を挿入せずに、変数が満たすべき条件、いわゆるパス条件を記憶部に保持する。モデル検査エンジンは、プログラムのソースコードに対して具体的なテストデータを与えなくてもシンボル変数のまま、プログラムでなされる様々な動作を実行するプログラムである。モデル検査エンジンは、プログラムに記述されているパス条件を全て実行するためのテストデータを生成する。そして、モデル検査エンジンは生成したテストデータを使用してプログラムをテストすることにより、当該プログラムが指定されたアプリケーションの仕様を満たしているか否かを確認する。なお、モデル検査エンジンの例としては、JAVA(登録商標)で記述されたプログラミングに対してはJPF(Java Path Finder)が挙げられる。以下、モデル検査エンジンの処理について説明する。
図1は、条件式を有するプログラムの第1の例を示す図である。また、図2は、第1の例に係るプログラムにおける処理を模式的に示した説明図である。図2を用いてモデル検査エンジンの処理について具体的に説明する。図1のプログラムにおいて、プログラムは、(1)の部分でシンボル変数であるa、b、およびcのデータ型がint型であることを定義している。また、プログラムは(2)の部分に第一の条件式「if(a>5)」を含む。この第一の条件式は図2の(i)の分岐に対応する。プログラムは(i)の分岐においてaが5より大きい場合に、左側の経路の「a=a+1」の処理(ステップS10)と後述する第二の条件式とを実行する。一方、プログラムは(i)の分岐においてaが5以下の場合に、右側の経路の「a=a+2」の処理(ステップS13)を実行する。
プログラムは(3)の部分に第二の条件式「if(a==0)」を含む。第二の条件式は図2の(ii)の分岐に対応する。プログラムは、(ii)の分岐でaが0である場合に、左側の経路の「a=a+b」の処理(ステップS11)を実行する。一方、プログラムは、(ii)の分岐でaが0以外である場合に、右側の経路の「a=a+c」の処理(ステップS12)を実行する。次いで、プログラムは(4)の部分で第三の条件式「if(b<=0)」を含む。第三の条件式は図2の(iii)の分岐に対応する。プログラムは、(iii)の分岐でbが0以下である場合に、左側の経路の「b=b-1」の処理(ステップS14)を実行する。一方、プログラムは、(iii)の分岐でbが0より大きい場合に、右側の経路の「b=b+3」の処理(ステップS15)を実行する。
ここで、当該プログラムにおいて第二の条件式は、図1に示されるように第一の条件式の入れ子になっている。図2によると、プログラムは第一の条件式に対応する(i)の分岐においてaが5より大きい場合に、第二の条件式に対応する(ii)の分岐に到達する。次いで、プログラムは(ii)の分岐においてaが0の場合に左側の経路に移行する。ここで、シンボリック変数aは(i)の分岐で5より大きいという条件と、(ii)の分岐でaが0であるという条件とを同時に満たすことができないので、プログラムが(ii)の分岐で左側の経路に進むことはない。モデル検査エンジンはこのような実行不可能なパスを検出する。
また、モデル検査エンジンはシンボリック実行により図1のプログラムの正当性を検証する際、各経路におけるパス条件を保持する。例えば、図2においてモデル検査エンジンは(i)の右側と(iii)の左側の経路を探索した場合にパス条件「(a<=5) AND (b<=0)」を保持する。
また、モデル検査エンジンは(i)の左側と(ii)の左側と(iii)の左側の経路を探索した場合に、パス条件「(a>5) AND (a==0) AND (b<=0)」を保持する。このとき、モデル検査エンジンは当該パス条件に矛盾があり、テストケースを作成することができないのでプログラムに実行不可能なパスがあることを検知する。なお、モデル検査エンジンはパス条件「(a>5) AND (a==0) AND (b>0)」の経路についても同様に実行不可能なパスとして検知する。このようにして、モデル検査エンジンはプログラムに含まれるパス条件の正当性を検証する。
特開2011−013792号公報
しかしながら、バックトラック後に移行する別経路のノードにおいて、シンボル変数値を格納した対象ファイルに対して適切に入出力処理をすることができないという問題がある。
モデル検査エンジンは、検査対象のプログラムに基づき、複数のノードで構成される実行ツリーを作成する。次いで、モデル検査エンジンは、作成した実行ツリーを深さ優先探索し、各ノードにおける処理を実行していく。モデル検査エンジンは、実行ツリーの各ノードを探索するとき、まず、実行ツリーの一つの経路における葉ノードまでを優先して探索する。モデル検査エンジンは、葉ノードに至るまでに対象ファイルに入出力処理があった場合、適宜、対象ファイルに対して書込処理または読込処理を実行する。そして、モデル検査エンジンは、実行ツリーの末端にある葉ノードに到達したとき、ノードから経路に分岐を有するノードまでバックトラックして別経路を探索する。モデル検査エンジンは、バックトラックする際に、書込処理により変更された対象ファイルをバックトラック前の状態に戻そうとする。ところが、モデル検査エンジンがバックトラックする際に、対象ファイルがバックトラック前の状態に戻っていないことがある。例えば、モデル検査エンジンがバックトラックすることにより、対象ファイルの状態が書込前の状態に戻ったのに対象ファイルの書込みが削除されないで残る場合がある。このため、モデル検査エンジンがバックトラックして別経路に移行する際に、当該別経路の各ノードにおいて正しい結果が得られないことがある。
一つの側面では、バックトラック後に移行する別経路のノードにおいて適切に入出力処理をすることができるシンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラムを提供することを目的とする。
第1の案では、シンボリック実行方法ではコンピュータが以下の処理を実行する。コンピュータが、第一のノードで第一のファイルに対して、該第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、第一のファイルを複製した第二のファイルを記憶部に格納する処理を実行させる。コンピュータが、第一のノードを経由する第一の経路から第一のノードにバックトラックして、第一のノードを経由する第二の経路に移行する処理を実行させる。このとき、コンピュータが、該第二の経路で最初に第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードにおいて、読込処理を実行する際に第二のファイルからシンボル変数値を取得する処理を実行させる。
バックトラック後に探索する別経路のノードにおいて適切に入出力処理をすることができる。
図1は、条件式を有するプログラムの第1の例を示す図である。 図2は、第1の例に係るプログラムにおける処理を模式的に示した説明図である。 図3は、対象ファイルへの書込処理または読込処理を有するプログラムの第2の例を示す図である。 図4は、第2の例に係るプログラムにおける処理の一部を模式的に示した説明図である。 図5は、処理装置の構成を示す機能ブロック図の一例を示す説明図である。 図6は、シンボル変数リストのデータ構造の一例を示す図である。 図7は、ファイル入出力テーブルのデータ構造の一例を示す図である。 図8は、バックトラック管理テーブルのデータ構造の一例を示す図である。 図9は、本実施形態に係る実行ツリーの第1の模式図を示す図である。 図10は、ファイルへの書込処理または読込処理を有するプログラムの第3の例を示す図である。 図11は、本実施形態に係る実行ツリーの第2の模式図を示す図である。 図12は、ノード1に状態が移行した際のバックトラック管理テーブルの一例を示す図である。 図13は、ノード3に状態が移行した際のバックトラック管理テーブルの一例を示す図である。 図14は、ノード4に状態が移行した際のバックトラック管理テーブルの一例を示す図である。 図15は、ノード6に状態が移行した際のバックトラック管理テーブルの一例を示す図である。 図16は、ノード7に状態が移行した際のバックトラック管理テーブルの一例を示す図である。 図17は、各ノードにおける処理の流れの一例を示したフロー図である。 図18は、処理装置のハードウェア構成の一例を示す図である。
以下に、本願の開示するシンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの権利が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
(ファイル書込、読込処理を含む場合のシンボル変数の引継ぎ)
プログラムは、テキストファイルから値を読込み、読込んだ値をプログラム内で使用するシンボル変数に挿入する場合がある。図3は、対象ファイルへの書込処理または読込処理を有するプログラムの第2の例を示す図である。図3のプログラムはJAVAで記述されている。図3のプログラムにおいて(1)の部分は、シンボリック変数であるaおよびbのデータ型がint型であることを定義している。(2)の部分と(7)の部分とは対応しており、(2)の「try{}」括弧中の処理に例外が発生した場合に(7)の「catch{}」括弧中の処理をおこなう。図3に記載の(3)以降のプログラムの処理に関する詳細は、次に図4の模式図を用いて具体的に説明する。
図4は、第2の例に係るプログラムにおける処理の一部を模式的に示した説明図である。図3の(3)から(7)の部分の処理は図4に示される。プログラムは(3)の部分に第一の条件式「if(b==0)」を含む。第一の条件式は図4の(i)の分岐に対応する。プログラムは、(i)の分岐でbが0である場合に、左側の経路の「b=b-2」の処理(ステップS21)を実行する。一方、プログラムは、(i)の分岐でbが0以外である場合に、右側の経路の「b=b+10」の処理(ステップS22)を実行する。次いで、プログラムは、(4)の部分でシンボル変数bに挿入されている値をテキストファイル等の対象ファイルに書き込む処理をおこなう(ステップS23)。次いで、プログラムは、(5)の部分で対象ファイルに書き込まれた値を読み取る処理をおこなう(ステップS24)。プログラムは(6)の部分で第二の条件式「if(dis.readInt()<5)」を含む。第二の条件式は図4の(ii)の分岐に対応する。プログラムは、(ii)の分岐でbが5より小さい場合に、左側の経路の「a=a-1」の処理(ステップS25)を実行する。一方、プログラムは(ii)の分岐でbが5以上の場合に、右側の経路の「a=a+1」の処理(ステップS26)を実行する。次いで、プログラムは、(7)の部分で「try{}」括弧中の処理に例外が生じた場合にスタックトレースを出力する(ステップS27)。なお、スタックトレースは、例外が発生したメソッド名と各メソッドが格納されている対象ファイルのファイル名等の情報を含む。
すなわち、図3のプログラムは、図4のステップS21またはステップS22の処理が終了した後、シンボル変数bを対象ファイルに書き込むことにより、シンボル変数bを永続化させる。しかし、モデル検査エンジンは、ステップS24において対象ファイルから値を読み込む際にファイル出力されたbの値がシンボル値であることを認識できない。このため、モデル検査エンジンが生成したテストケースには、第一の条件式「if(b==0)」が考慮されるので「b=0」と「b=1」とは含まれるが、第二の条件式「if(dis.readInt()<5)」は考慮されないので「b=5」は含まれないことになる。つまり、モデル検査エンジンは、プログラムに含まれる入出力処理によりシンボル変数が永続化された場合に、入出力処理前に宣言されたシンボル変数を、入出力処理後に認識できない。したがって、図4の(ii)の分岐に係るパス条件を検証するためのテストケースを生成できないという問題がある。
(処理装置の構成)
次に、処理装置100の機能構成について説明する。図5は、処理装置の構成を示す機能ブロック図である。処理装置100は、処理対象のプログラムに含まれるパス条件の正当性を検証することにより、処理対象のプログラムが、指定されたアプリケーションの仕様を満たしているかを確認する。処理装置100は入力部101と、出力部102と、制御部110と、記憶部120とを有する。入力部101は、処理装置100を操作するためのキーボード、マウス等の入力機器である。出力部102は、処理装置100における処理結果を出力するためのモニタ、プリンタ等の出力機器である。
(処理装置の記憶部の各構成)
図5に示すように処理装置100の記憶部120はクラス121と、モデルクラス122と、対象ファイル123と、退避ファイル124と、シンボル変数リスト125とを記憶する。さらに、記憶部120はファイル入出力テーブル126と、バックトラック管理テーブル127と、パス条件128とを記憶する。記憶部120は例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、ハードディスクや光ディスクなどの記憶装置に対応する。
クラス121は、例えば、処理対象のプログラムである。クラス121は、シンボル変数を用いた演算式、条件式、対象ファイルへの入出力処理等の各種メソッドを含む。モデルクラス122は、クラス121から抽出されたメソッドの1つもしくは抽出されたメソッドを複数組み合わせたものである。モデルクラス122とは、例えば、図3の(4)の「DataOutputStream」メソッドと「writeInt」メソッドとを組み合わせたものである。この場合においてモデルクラス122は、「writeInt」メソッドに含まれるシンボル変数bに挿入されている値を「text1.txt」に係るテキストファイルに書き込む。なお、この場合においてモデルクラス122は「DataOutputStream」メソッドと「writeInt」メソッドとに加えて「FileOutputStream」メソッドを組み合わせてもよい。
対象ファイル123は、プログラムが入出力処理を実行する際に使用するファイルである。例えば、プログラムは書込処理を実行する際にプログラムにしたがい対象ファイル123に書き込む処理をおこなう。また、プログラムは書込処理にシンボル変数が含まれる場合、シンボル変数に挿入された値を対象ファイル123に書き込んでもよい。一方、プログラムは読込処理を実行する際にプログラムの記述にしたがい対象ファイル123を読み込む処理をおこなう。また、プログラムは読込処理にシンボル変数が含まれる場合、シンボル変数に対象ファイル123から読み込んだ値を挿入してもよい。
退避ファイル124は、あるノードで書込処理を実行する前に対象ファイル123を複製したものである。退避ファイル124は、書込処理をおこなう各ノードでそれぞれ作成される。また、退避ファイル124は、最も直近に書込処理をしたノードに対応付けられる。例えば、処理装置100は、対象ファイル123のファイル名に、最も直近に書込処理をしたノードのノード名を付記したものを、退避ファイル124のファイル名としてもよい。例えば、処理装置100は、退避ファイルのファイル名を「node1text1.txt」とする。なお、退避ファイル124を作成する際の処理、作成する時期等に関する詳細は後述する。
シンボル変数リスト125は、クラス121で使用される全てのシンボル変数を保持し、保持したシンボル変数のデータ型を示したリストである。図6は、シンボル変数リストのデータ構造の一例を示す図である。図6に示すようにシンボル変数リスト125は、シンボル変数と、データ型とを対応付ける。「シンボル変数」は、クラス121で使用されるシンボル変数を示す。「データ型」は、各シンボル変数に対応するデータ型を示す。例えば、シンボル変数リスト125は、データ型が「int」であった場合、シンボル変数に挿入される値が32ビットで表される整数であることを示す。また、シンボル変数リスト125は、データ型が「float」であった場合、シンボル変数に挿入される値が32ビットで表される浮動小数点数であることを示す。また、シンボル変数リスト125は、データ型が「byte」であった場合、シンボル変数に挿入される値が8ビットで表される整数であることを示す。
シンボル変数リスト125に記憶されているデータについて具体例を挙げて説明する。例えば、図6のシンボル変数リスト125は表示行1行目においてシンボル変数が「a」、データ型が「int」、すなわち、整数型であることを示す。また、シンボル変数リスト125は表示行2行目においてシンボル変数が「b」、データ型が「int」、すなわち、整数型であることを示す。
ファイル入出力テーブル126は、対象ファイルへ書込処理を実行するメソッドにシンボル変数が含まれる場合に書込処理をしたファイル名、書き込んだ位置等の情報を記憶したものである。図7は、ファイル入出力テーブルのデータ構造の一例を示す図である。ファイル入出力テーブル126は、ファイル名と、位置と、値とを対応付ける。「ファイル名」は、書込処理を実行した対象ファイルのファイル名を示す。「位置」は、シンボル変数の値を書き込んだファイルの先頭からの位置を示す。例えば、「位置」は、ファイルの先頭から何バイトの位置にシンボル変数の値を書き込んだかを示してもよい。「値」は、シンボル変数を含む入出力処理を実行する際に使用する値を示す。
ファイル入出力テーブル126に記憶されているデータについて具体例を挙げて説明する。例えば、ファイル入出力テーブル126は表示行1行目においてシンボル変数aが格納された対象ファイルのファイル名が「text1.txt」で、シンボル変数の値を「text1.txt」に係るファイルの先頭から「0-4byte」の位置に書き込んだことを示す。また、ファイル入出力テーブル126は表示行1行目においてシンボル変数aを含む入出力処理を実行する際に「s_a_3_SYMINT_STATIC_FIELD + CONST_1」を使用することを示す。例えば、処理装置100は、シンボル変数aを読み込む際に「s_a_3_SYMINT_STATIC_FIELD + CONST_1」に返り値を挿入する。一方、ファイル入出力テーブル126は表示行2行目においてシンボル変数bが格納された対象ファイルのファイル名が「text1.txt」で、シンボル変数の値を「text1.txt」に係るファイルの先頭から「5-8byte」の位置に書き込んだことを示す。また、ファイル入出力テーブル126は表示行2行目においてシンボル変数bを含む入出力処理を実行する際に「s_b_3_SYMINT_STATIC_FIELD + CONST_1」を使用することを示す。例えば、処理装置100は、シンボル変数bを読み込む際に「s_b_3_SYMINT_STATIC_FIELD + CONST_1」に返り値を挿入する。
バックトラック管理テーブル127は、入出力処理を含むノードが参照すべき対象ファイル123および退避ファイル124のアドレスを示す。後述するように格納部113または取得部114は、バックトラック後に別経路を探索する場合に退避ファイル124のアドレスを参照する。また、バックトラック管理テーブル127は、入出力処理を含むノードが参照すべき対象ファイル123のアドレスを示す。なお、格納部113または取得部114は、バックトラックする際以外の通常時には対象ファイル123のアドレスを参照する。
図8は、バックトラック管理テーブルのデータ構造の一例を示す図である。バックトラック管理テーブル127は、ノードと、対象ファイルと、退避ファイルとを対応付ける。「ノード」は、対象ファイルに対して書込処理を実行したノード名を示す。「対象ファイル」は、各ノードが書込処理をおこなった対象ファイル123のアドレスを示す。「退避ファイル」は、作成された退避ファイル124のアドレスを示す。なお、バックトラック管理テーブル127の各行は、バックトラックする際に適宜削除される。また、図8において各ノードは同一の対象ファイル123に書込処理をおこなっているが、各ノードは別の対象ファイル123に書込処理をおこなってもよい。また、退避ファイル124の作成に関する詳細は後述する。
パス条件128は、実行ツリーの各経路においてシンボル変数が満たすべき条件を示す。パス条件128は、実行ツリーで経路が分岐する部分における条件式に基づいて作成される。例えば、パス条件128は、「a>3」で左側の経路に進み、「a<=3」で右側の経路に進むという条件式がある場合に、左側の経路に進むためのパス条件128は「a>3」となる。パス条件128は、経路に条件式が複数ある場合、各パス条件を、論理積を示す「AND」演算子を使って表される。例えば、パス条件128は「a>3 AND a<6」というように表される。
(処理装置の制御部の各構成)
図5に示すように、処理装置100の制御部110は作成部111と、判断部112と、格納部113と、取得部114と、実行部115とを有する。処理装置100の制御部110の機能は例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路により実現することができる。また、制御部110の機能は例えば、CPU(Central Processing Unit)が所定のプログラムを実行することで実現することができる。
処理装置100は、各ノードにおいてシンボリック変数に格納された値または所定の値を書き込む書込処理が実行された第一のファイルと、書込処理を実行する前の第一のファイルを複製した第二のファイルとを記憶する記憶部120を有する。また、処理装置100は第一のノードで第一のファイルに対して、第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、第一のファイルを複製した第二のファイルを記憶部に格納する格納部113を有する。また、処理装置100は第一のノードを経由する第一の経路から第一のノードにバックトラックして、第一のノードを経由する第二の経路に移行する。処理装置100は、この場合において第二の経路で最初に第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードにおいて、読込処理を実行する際に第二のファイルからシンボル変数値を取得する取得部114を有する。これにより、バックトラック後に移行する別経路のノードにおいて適切に読込処理をすることができるという効果が得られる。なお、処理装置100はシンボリック実行装置の一例である。また、対象ファイルは第一のファイルの一例である。また、後述する退避ファイル124は第二のファイルの一例である。
また、格納部113は、第一のノードを経由する第一の経路から第一のノードにバックトラックして、第一のノードを経由する第二の経路に移行する際に、第二のファイルを第一のファイルに反映する。格納部113は、該第二の経路で最初に第一のファイルにシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する第二のノードにおいて、第一のファイルに対してシンボリック変数に格納された値または所定の値を書き込む。これにより、バックトラック後に探索する別経路のノードにおいて適切に書込処理をすることができるという効果が得られる。
制御部110の各構成について説明する。作成部111は、クラス121から、1または2以上のメソッドを含む複数のモデルクラス122を作成する。作成部111は、作成された複数のモデルクラス122に基づき、複数のノードで構成される実行ツリーを作成する。作成部111は、モデルクラス122に含まれる条件式に基づき、実行ツリーを構成する各ノードに分岐を設ける。なお、作成部111における各処理は、例えば、JPF等のモデル検査エンジンがおこなってもよい。
判断部112は、ノードにおいて書込処理または読込処理に含まれる文字列が、シンボル変数リスト125に登録されているか否かにより、書込処理または読込処理にシンボル変数が含まれるか否かを判断する。例えば、判断部112は、書込処理に「c」という文字列があった場合に、シンボル変数リスト125を参照する。判断部112は、シンボル変数リスト125に「シンボル変数c」が登録されていた場合、当該書込処理にシンボル変数が含まれると判断する。また、判断部112は、後述する格納部113が対象ファイル123に対して書込処理を実行する際に上記処理をおこなう。もしくは、後述する取得部114が対象ファイル123に対して読込処理を実行する際に上記処理をおこなう。なお、実行ツリーの探索は、例えば、JPF等のモデル検査エンジンがおこなってもよい。
格納部113は、対象ファイル123に対して書込処理を実行する。格納部113は、対象ファイル123に書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120に記憶する。さらに、格納部113は、書込処理を実行する際にバックトラック管理テーブル127を更新する。具体的には、格納部113は、バックトラック管理テーブル127に、直近に書込処理を実行したノードのノード名と、対象ファイル123のアドレスと、当該ノードに係る退避ファイル124のアドレスとを対応付けた行を追加する。
また、格納部113は、実行する書込処理にシンボル変数が含まれる場合にファイル入出力テーブル126を更新する。具体的には、格納部113は、ファイル入出力テーブル126に、シンボル変数の値を格納したファイルのファイル名、書き込んだファイルの位置、およびシンボル変数を含む入出力処理を実行する際に使用する値を対応付けた行を追加する。なお、格納部113は、書込処理にシンボル変数が含まれない場合、プログラムにしたがい対象ファイル123に書込処理をおこなう。
取得部114は、実行する読込処理にシンボル変数が含まれる場合、ファイル入出力テーブル126を参照して対象ファイル123のアドレスを確認する。そして、取得部114は対象ファイル123に対して読込処理を実行する。一方、後述する実行部115は、バックトラックした後に他の経路を探索する場合がある。この場合において取得部114は、当該他の経路に存在するノードにおいて読込処理を実行するときに、バックトラック管理テーブル127を参照して対応する退避ファイル124のアドレスを確認する。そして、取得部114は、確認した退避ファイル124に対して読込処理を実行することにより、シンボル変数に挿入する値を取得する。なお、取得部114は、読込処理にシンボル変数が含まれない場合、プログラムにしたがい対象ファイル123に読込処理をおこなう。
実行部115は、実行ツリーにおいてノードを探索し、ノードにおいてなされる書込処理および読込処理以外の各種メソッドを実行する。例えば、実行部115は、加算処理、減算処理等の演算処理に係るメソッドを実行する。また、実行部115は、対象ファイル123が作成されていない場合に、対象ファイル123を作成するメソッドを実行する。また、実行部115は、実行ツリーの各経路におけるパス条件128を作成し、それぞれ記憶部120に記憶する。実行部115は、実行ツリーに複数の条件式が含まれる場合、パス条件128を論理積「AND」で表してもよい。なお、実行部115における加算処理、減算処理等の演算処理に係るメソッドの実行は、例えば、JPF等のモデル検査エンジンがおこなってもよい。
(制御部における処理)
すなわち、制御部110の各構成は以下の処理をおこなう。図9は、本実施形態に係る実行ツリーの第1の模式図を示す図である。図9において楕円形の図形に付された番号はノード番号を示す。第1の段階において制御部110は、クラス121に基づき実行ツリーを作成する。具体的には、作成部111は、クラス121から複数のモデルクラス122を作成する。次いで、作成部111は、作成された複数のモデルクラス122に基づき、複数のノードで構成される図9の実行ツリーを作成する。
第2の段階において制御部110は、根ノードであるノード1から葉ノードであるノード6までを探索する。具体的には、まず、実行部115は、ノード1において対象ファイル123を作成する処理をおこなう。次いで、実行部115は、ノード2においてシンボル変数aに所定の数値を加算する演算式が含まれていた場合、シンボル変数aに対して加算する演算処理をおこなう。なお、各ノードにおいておこなわれる加算、減算等の演算処理は、例えば、JPF等のモデル検査エンジンによっておこなわれてもよい。以降についても同様である。
次いで、格納部113は、ノード3において書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120に記憶する。さらに、格納部113は、バックトラック管理テーブル127にノードを「ノード1」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「c:\taihi\node1text1.txt」とする行を1行追加する。つまり、格納部113は、ノード3において書込処理をおこなう前に退避ファイル124を作成して、バックトラック管理テーブル127に、退避ファイル124のアドレスをノード1に対応付けて記憶させる。また、格納部113は、退避ファイル124のファイル名を「text1.txt」に「node1」を付記して「node1text1.txt」とする。なお、格納部113は、他のノードで退避ファイルを作成する場合においても「text1.txt」にノード名を付記する。
次いで、格納部113は、ノード3においてシンボル変数aの数値を対象ファイル123に書き込む書込処理をおこなう。なお、図9は、当該退避ファイル124をノード1に対応する退避ファイル124として、長方形の図形10で示す。また、図9は、ノード3およびノード4においても、それぞれ図形11、図形12で退避ファイル124を示す。
次いで、格納部113は、ノード4において書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120に記憶する。さらに、格納部113は、バックトラック管理テーブル127にノードを「ノード3」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「c:\taihi\node3text1.txt」とする行を1行追加する。次いで、格納部113は、ノード4においてシンボル変数bの数値を対象ファイル123に書き込む書込処理をおこなう。
次いで、実行部115は、ノード5においてシンボル変数bに所定の数値を減算する演算式が含まれていた場合、シンボル変数bに所定の数値を減算する演算処理をおこなう。次いで、格納部113は、ノード6において書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120に記憶する。さらに、格納部113は、バックトラック管理テーブル127にノードを「ノード4」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「c:\taihi\node4text1.txt」とする行を1行追加する。次いで、格納部113は、ノード6においてシンボル変数bの数値を対象ファイル123に書き込む書込処理をおこなう。
このとき、実行部115は、ノード1からノード6までの経路に対応するパス条件128を記憶部120に記憶する。例えば、実行部115は、ノード1からノード2に移行する際のパス条件が「b>1」で、ノード3からノード4に移行する際のパス条件が「b>3」である場合、パス条件128として「b>1 AND b>3」を記憶部120に記憶する。
第3の段階において制御部110は、葉ノードであるノード6に最も直近であり、別経路への分岐を有するノード3にバックトラックする。実行部115は、ノード4からノード3にバックトラックする際に、記憶部120からノード4に対応する図形12の退避ファイル124を削除する。さらに、格納部113は、バックトラック管理テーブル127に追加されたノード4に係る行を削除する。
第4の段階において制御部110は、ノード3から別経路のノード7まで探索する。ノード7はシンボル変数bに挿入する値を対象ファイル123から読み込む読込処理を有する。このとき、取得部114は、ノード7においてシンボル変数bに挿入する値を対象ファイル123からではなく、ノード3に対応する図形11の退避ファイル124から読み込む。次いで、取得部114は、退避ファイル124から読み込んだ値をシンボル変数bに挿入する。
そして、実行部115は、ノード1からノード2に移行する際のパス条件が「b>1」で、ノード3からノード7に移行する際のパス条件が「b<=3」である場合、パス条件128として「b>1 AND b<=3」を記憶部120に記憶する。
第5の段階において制御部110は、ノード3の一つ前の分岐を有するノード1にバックトラックする。実行部115は、ノード3からノード2にバックトラックする際にノード3に対応する図形11の退避ファイル124を削除する。さらに、格納部113は、バックトラック管理テーブル127に追加されたノード3に係る行を削除する。
第6の段階において制御部110は、ノード1から別経路のノード9まで探索する。実行部115は、ノード8において対象ファイル123が存在するか否かを確認する処理をおこなう。実行部115は、記憶部120に対象ファイル123が存在するのでファイルが存在する旨の応答を取得する。次いで、実行部115は、ノード9において対象ファイル123を削除する処理をおこなう。このとき、実行部115は、ノード1からノード8に移行する際のパス条件が「b<=1」である場合、パス条件128として「b<=1」を記憶部120に記憶する。
第7の段階において制御部110は、処理を終了させる。このとき、実行部115は、全ての退避ファイル124を削除する。また、実行部115は、バックトラック管理テーブル127の全ての行を削除する。なお、ファイル入出力テーブル126の参照および更新、バックトラック管理テーブル127の参照および更新、シンボル変数リスト125の参照等の処理の詳細に関しては、次の具体例にて説明する。
(制御部における処理の具体例)
図10は、ファイルへの書込処理または読込処理を有するプログラムの第3の例を示す図である。図10に示されるプログラムは、例えばクラス121である。第1の段階において制御部110は、クラス121に基づき実行ツリーを作成する。まず、作成部111は、当該プログラムに基づきモデルクラス122を作成する。例えば、作成部111は、図10中の「a値の書込処理1」をモデルクラス122とする。具体的には、作成部111は、「DataOutputStream」メソッドと「readInt」メソッドとを一つのモデルクラス122とする。次いで、作成部111は、作成された複数のモデルクラス122に基づき、複数のノードで構成される実行ツリーを作成する。図11は、本実施形態に係る実行ツリーの第2の模式図を示す図である。作成部111は、例えば図11に示された実行ツリーを作成する。なお、図11の実行ツリーを構成する各ノードは図9の実行ツリーに対応している。
第2の段階において制御部110は、根ノードであるノード1から葉ノードであるノード6までを探索する。具体的には、まず、実行部115は、ノード1において対象ファイル123を作成する処理をおこなう。図12は、ノード1に状態が移行した際のバックトラック管理テーブルの一例を示す図である。格納部113は、図12のようにバックトラック管理テーブル127にノードを「ノード1」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「−」とする行を1行追加する。
次いで、実行部115は、ノード2において「a=a+5」の加算処理を実行する。次いで、格納部113は、ノード3において書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120のアドレス「c:\taihi\」の配下に記憶する。また、格納部113は、退避ファイル124のファイル名をノード1に対応付けて「node1text1.txt」とする。図13は、ノード3に状態が移行した際のバックトラック管理テーブルの一例を示す図である。図13のように格納部113は、バックトラック管理テーブル127の1行目において、ノードを「ノード1」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「c:\taihi\node1text1.txt」に更新する。さらに、格納部113は、バックトラック管理テーブル127にノードを「ノード3」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「−」とする行を1行追加する。
次いで、判断部112は、図6のシンボル変数リスト125に「シンボル変数a」が登録されているので、ノード3の書込処理に含まれる文字列「a」がシンボル変数であると判断する。次いで、格納部113は、シンボル変数aに挿入されている数値を対象ファイル123に書き込む書込処理をおこなう。このとき、格納部113はファイル入出力テーブル126にファイル名を「text1.txt」、位置を「0-4」、値を「s_a_3_SYMINT_STATIC_FIELD + CONST_1」とする行を1行追加する。なお、格納部113は、判断部112が書込処理にシンボル変数が含まれないと判断した場合、プログラムの記述にしたがい対象ファイル123に書込処理をおこなう。
次いで、格納部113は、ノード4において書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120のアドレス「c:\taihi\」の配下に記憶する。また、格納部113は、退避ファイル124のファイル名をノード3に対応付けて「node3text1.txt」とする。図14は、ノード4に状態が移行した際のバックトラック管理テーブルの一例を示す図である。図14のように格納部113は、バックトラック管理テーブル127の2行目において、ノードを「ノード3」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「c:\taihi\node3text1.txt」に更新する。さらに、格納部113は、バックトラック管理テーブル127にノードを「ノード4」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「−」とする行を1行追加する。
次いで、判断部112は、図6のシンボル変数リスト125に「シンボル変数b」が登録されているので、ノード4の書込処理に含まれる文字列「b」がシンボル変数であると判断する。次いで、格納部113は、シンボル変数bに挿入されている数値を対象ファイル123に書き込む書込処理をおこなう。このとき、格納部113はファイル入出力テーブル126にファイル名を「text1.txt」、位置を「5-8」、値を「s_b_3_SYMINT_STATIC_FIELD + CONST_1」とする行を1行追加する。
次いで、実行部115は、ノード5において「b=b-1」の加算処理を実行する。次いで、格納部113は、ノード6において書込処理を実行する前に、対象ファイル123を複製した退避ファイル124を記憶部120のアドレス「c:\taihi\」の配下に記憶する。また、格納部113は、退避ファイル124のファイル名をノード4に対応付けて「node4text1.txt」とする。図15は、ノード6に状態が移行した際のバックトラック管理テーブルの一例を示す図である。図15のように格納部113は、バックトラック管理テーブル127の3行目において、ノードを「ノード4」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「c:\taihi\node4text1.txt」に更新する。さらに、格納部113は、バックトラック管理テーブル127にノードを「ノード6」、対象ファイル123を「c:\temp\text1.txt」、退避ファイル124を「−」とする行を1行追加する。
次いで、判断部112は、図6のシンボル変数リスト125に「シンボル変数b」が登録されているので、ノード6の書込処理に含まれる文字列「b」がシンボル変数であると判断する。次いで、格納部113は、ファイル入出力テーブル126を参照し、シンボル変数bがファイル入出力テーブル126に登録されていることを確認する。格納部113は、ファイル入出力テーブル126に基づき対象ファイル123を上書きする。
このとき、実行部115は、ノード1からノード6までの経路に対応するパス条件128を記憶部120に記憶する。実行部115は、ノード1からノード2に移行する際のパス条件が「b>1」で、ノード3からノード4に移行する際のパス条件が「b>3」であるので、パス条件128として「b>1 AND b>3」を記憶部120に記憶する。
第3の段階において制御部110は、葉ノードであるノード6に最も直近であり、別経路への分岐を有するノード3にバックトラックする。実行部115は、ノード4からノード3にバックトラックする際にノード4に対応する退避ファイル124を削除する。さらに、格納部113は、バックトラック管理テーブル127からノード4およびノード6に係る行を削除する。
第4の段階において制御部110は、ノード3から別経路のノード7までを探索する。ノード7は、対象ファイル123からシンボル変数bに挿入する値を読み込む読込処理を有する。まず、判断部112は、図6のシンボル変数リスト125に「シンボル変数b」が登録されているので、ノード7の読込処理に含まれる文字列「b」がシンボル変数であると判断する。
次いで、取得部114は、ノード7においてシンボル変数bに挿入する値を、対象ファイル123からではなく、ノード3に対応する退避ファイル124から読み込む。そのために、取得部114は、バックトラック管理テーブル127を参照してノード3に対応する退避ファイル124のアドレスを確認する。図16は、ノード7に状態が移行した際のバックトラック管理テーブルの一例を示す図である。取得部114は、バックトラック管理テーブル127の表示行2行目からノード3に対応する退避ファイル124のアドレス「c:\taihi\node3test1.txt」を確認する。さらに、取得部114は、ファイル入出力テーブル126に基づき退避ファイル124からシンボル変数bの数値を読み込む。なお、取得部114は、判断部112が読込処理にシンボル変数が含まれないと判断した場合、プログラムの記述にしたがい退避ファイル124に対して読込処理をおこなう。
このとき、実行部115は、ノード1からノード2に移行する際のパス条件が「b>1」で、ノード3からノード7に移行する際のパス条件が「b<=3」であるので、パス条件128として「b>1 AND b<=3」を記憶部120に記憶する。
第5の段階において制御部110は、ノード3の一つ前の分岐を有するノード1にバックトラックする。実行部125は、ノード3からノード2にバックトラックする際にノード3に対応する退避ファイル124を削除する。さらに、格納部113は、バックトラック管理テーブル127からノード3およびノード7に係る行を削除する。
第6の段階において制御部110は、ノード1から別経路のノード9まで探索する。実行部125は、ノード8において対象ファイル123が存在するかを確認する処理をおこなう。実行部125は、記憶部120に対象ファイル123が存在するのでファイルが存在する旨の応答を取得する。次いで、実行部125は、ノード9において対象ファイル123を削除する処理をおこなう。
このとき、実行部115は、ノード1からノード8に移行する際のパス条件が「b<=1」であるので、パス条件128として「b<=1」を記憶部120に記憶する。
第7の段階において制御部110は、処理を終了させる。このとき、実行部125は、全ての退避ファイル124を削除する。また、実行部125は、バックトラック管理テーブル127の全ての行を削除する。
記憶部120は、第7の段階を終了した時点でパス条件128に「b>1 AND b>3」、「b>1 AND b<=3」、「b<=1」の3つのパス条件を記憶している。これにより、処理装置100はパス条件に基づきテストケースを生成することが可能である。例えば、処理装置100は、「b=1」「b=3」「b=4」の3つのテストケースを生成する。このように、処理装置100は、処理対象のプログラムに対象ファイルへシンボル変数を書き込む処理および読み込む処理が含まれ、シンボル変数を永続化する場合であっても適切にテストケースを生成することができる。また、以上説明したように、取得部114は、バックトラック後に移行する別経路のノードにおいて退避ファイル124を用いて入出力処理をするので、当該ノードで適切に入出力処理をすることができる。
(処理装置おける処理の流れ)
次に、処理装置100における処理の流れについて説明する。図17は、各ノードにおける処理の流れの一例を示したフロー図である。まず、作成部111は、クラス121から複数のモデルクラス122を作成する(ステップS30)。次いで、格納部113および取得部114は、あるノードにおいて対象ファイル123への入出力処理があるか否かを判定する(ステップS31)。
次いで、取得部114は、ノードにおいて対象ファイル123への読込処理がない場合(ステップS32No)、ステップS37に移行する。一方、取得部114は、ノードにおいて対象ファイル123への読込処理がある場合(ステップS32Yes)、バックトラック管理テーブル127を参照する(ステップS33)。このとき、取得部114は、バックトラック後に別ノードへ移行した場合、直近に対象ファイルに書込処理をおこなったノードに対応する退避ファイル124のアドレスを参照する。一方、取得部114は、それ以外の場合、直近に対象ファイルに書込処理をおこなったノードに対応する対象ファイル123のアドレスを参照する。
次いで、取得部114は、判断部112がシンボル変数リスト125を参照して読込処理にシンボル変数が含まれないと判定した場合(ステップS34No)、プログラムにしたがい対象ファイル123または退避ファイル124に対して読込処理をおこなう。一方、取得部114は、判断部112がシンボル変数リスト125を参照して読込処理にシンボル変数が含まれると判定した場合(ステップS34Yes)、ファイル入出力テーブル126を参照する(ステップS35)。取得部114は、ファイル入出力テーブル126からシンボル変数が格納されているファイルのファイル名、ファイルの位置等を確認する。次いで、取得部114は、対象ファイル123または退避ファイル124を読み込む読込処理をおこなう(ステップS36)。
次いで、格納部113は、ノードにおいて対象ファイル123への書込処理がない場合(ステップS37No)、処理を終了させる。一方、格納部113は、ノードにおいて対象ファイル123への書込処理がある場合(ステップS37Yes)、バックトラック管理テーブル127を参照する(ステップS38)。このとき、格納部113は、バックトラック管理テーブル127において直近に対象ファイル123に書込処理をおこなったノードを確認する。次いで、格納部113は、当該書込処理をおこなったノードに対応する退避ファイル124を作成する(ステップS39)。次いで、格納部113は、バックトラック管理テーブル127に、直近に書込処理を実行したノード名と、対象ファイル123のアドレスと、退避ファイル124のアドレスとを対応付けた行を追加することによりバックトラック管理テーブル127を更新する(ステップS40)。
次いで、格納部113は、判断部112が書込処理にシンボル変数が含まれないと判定した場合(ステップS41No)、プログラムの記述にしたがい対象ファイル123に対して書込処理をおこなう(ステップS43)。一方、格納部113は、判断部112が書込処理にシンボル変数が含まれると判定した場合(ステップS41Yes)、書き込んだファイルのファイル名、ファイルの位置等を含む行を追加することによりファイル入出力テーブル126を更新する(ステップS42)。次いで、格納部113は、対象ファイル123にシンボル変数に格納されている値を書き込む書込処理をおこなう(ステップS43)。
(実施例1に関連する他の実施例)
上記実施態様においては、作成部111は、書込処理、読込処理、演算処理等のように1または複数のメソッドを含むノードを設定した。これに限られず、作成部111はノードに含まれるメソッド数を変更してもよい。
上記実施態様においては、作成部111が実行ツリーを作成した。これに限られず、例えば、JPF等のモデル検査エンジンが実行ツリーを作成してもよい。すなわち、判断部112、格納部113、取得部114および実行部115は、モデル検査エンジンが作成した実行ツリーに対して上記処理をおこなってもよい。
上記実施態様においては、実行部115が各ノードに含まれる加算、減算等の演算処理を実行した。これに限られず、例えば、JPF等のモデル検査エンジンが加算、減算等の演算処理を実行してもよい。
上記実施態様においては、作成部111がプログラムに相当するクラス121から実行ツリーを作成する旨を説明した。これに限られず、作成部111は、プログラム自体が各処理にノードを設定している場合に、プログラムにより設定された実行ツリーを使用してもよい。
上記実施態様においては、制御部110が各ノードにおいて数値の演算処理、入出力処理をする旨を説明した。これに限られず、制御部110が各ノードにおいて文字データに対して各種処理をおこなってもよい。
上記実施態様においては、処理装置100はJAVAに係るプログラムを取り扱う旨を説明した。これに限定されず、処理装置100はJAVA以外のプログラムを取り扱ってもよい。
上記実施態様においては、各ノードが同一の対象ファイル123に入出力処理をおこなう旨を説明した。これに限られず、各ノードは異なる対象ファイル123に入出力処理をおこなってもよい。
上記実施態様においては、処理装置100はモデル検査エンジンにJPFを使用してもよい旨を説明した。これに限られず、処理装置100はJPF以外のモデル検査エンジンを使用してもよい。
(バックトラック後に移行する別経路のノードにおける書込処理)
図9において格納部113が、ノード6からノード3にバックトラックした後、ノード7で書込処理をおこなう場合について説明する。格納部113は、ノード7において書込処理を実行する前に、ノード3に対応する退避ファイル124を対象ファイル123に反映させる。すなわち、格納部113は、退避ファイル124の内容を対照ファイル123に上書きする等して、対象ファイル123の内容を退避ファイル124の内容に一致させる。そして、格納部113は、対象ファイル123に対して書込処理を実行する。これにより、バックトラック後に探索する別経路のノードにおいて適切に書込処理をすることができるという効果が得られる。
また、実施例1に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図5に示した処理装置100の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、処理装置100の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
(表示端末のハードウェア構成)
図18は、処理装置のハードウェア構成を示す図である。図18が示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータ入力を受け付ける入力装置202と、モニタ203とを有する。また、コンピュータ200は、記憶媒体からプログラム等を読み取る媒体読取装置204と、他の装置と接続するためのインターフェース装置205と、他の装置と無線により接続するための無線通信装置206とを有する。また、コンピュータ200は、各種情報を一時記憶するRAM(Random Access Memory)207と、ハードディスク装置208とを有する。また、各装置201〜208は、バス209に接続される。
ハードディスク装置208には、図5に示した制御部110の作成部111、判断部112、格納部113、取得部114、および実行部115の各処理部と同様の機能を有する情報処理画面出力プログラムが記憶される。また、ハードディスク装置208には、情報処理画面出力プログラムを実現するための各種データが記憶される。
CPU201は、ハードディスク装置208に記憶された各プログラムを読み出して、RAM207に展開して実行することで、各種の処理を行う。また、これらのプログラムは、コンピュータ200を図5に示した作成部111、判断部112、格納部113、取得部114、および実行部115として機能させることができる。
なお、上記の情報処理画面出力プログラムは、必ずしもハードディスク装置208に記憶されている必要はない。例えば、コンピュータ200が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ200が読み出して実行するようにしてもよい。コンピュータ200が読み取り可能な記憶媒体は、例えば、CD−ROMやDVDディスク、USB(Universal Serial Bus)メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、LAN(Local Area Network)等に接続された装置にこのプログラムを記憶させておき、コンピュータ200がこれらからプログラムを読み出して実行するようにしてもよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータが、
第一のノードで第一のファイルに対して、該第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、前記第一のファイルを複製した第二のファイルを記憶部に格納し、
前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、該第二の経路で最初に前記第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードにおいて、前記読込処理を実行する際に前記第二のファイルからシンボル変数値を取得する
処理を実行することを特徴とするシンボリック実行方法。
(付記2)前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、前記第二のファイルを前記第一のファイルに反映し、
前記第二の経路で最初に前記第一のファイルにシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する第二のノードにおいて、前記第一のファイルに対して前記シンボリック変数に格納された値または前記所定の値を書き込む処理を、さらに実行することを特徴とする付記1に記載のシンボリック実行方法。
(付記3)前記書込処理において書き込む内容にシンボル変数が含まれているか否か、または前記読込処理において読み込む内容にシンボル変数が含まれているか否かを判断する処理をさらに実行することを特徴とする付記1または2に記載のシンボリック実行方法。
(付記4)前記第一の経路上にある前記第一のノードの子ノードから前記第一のノードにバックトラックする際に、前記記憶部に格納されており、前記子ノードに対応する前記第二のファイルを削除することを特徴とする付記1〜3のいずれか一に記載のシンボリック実行方法。
(付記5)前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、該第二の経路で最初に前記第一のファイルに書込処理を実行する第二のノードが、前記第二のファイルを前記第一のファイルに一致させてから第二のファイルに書き込む処理をさらに実行することを特徴とするシンボリック実行方法。
(付記6)各ノードにおいてシンボリック変数に格納された値または所定の値を書き込む書込処理が実行された第一のファイルと、前記書込処理を実行する前の前記第一のファイルを複製した第二のファイルとを記憶する記憶部と、
第一のノードで前記第一のファイルに対して、該第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、前記第一のファイルを複製した第二のファイルを前記記憶部に格納する格納部と、
前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、該第二の経路で最初に前記第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードが、前記読込処理を実行する際に前記第二のファイルからシンボル変数値を取得する取得部と
を有することを特徴とするシンボリック実行装置。
(付記7)コンピュータに、
第一のノードで第一のファイルに対して、該第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、前記第一のファイルを複製した第二のファイルを記憶部に格納し、
前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、該第二の経路で最初に前記第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードが、前記読込処理を実行する際に前記第二のファイルからシンボル変数値を取得する
処理を実行させることを特徴とするシンボリック実行プログラム。
100 処理装置
101 入力部
102 出力部
110 制御部
111 作成部
112 判断部
113 格納部
114 取得部
115 実行部
120 記憶部
121 クラス
122 モデルクラス
123 対象ファイル
124 退避ファイル
125 シンボル変数リスト
126 ファイル入出力テーブル
127 バックトラック管理テーブル
128 パス条件

Claims (6)

  1. コンピュータが、
    第一のノードで作成した第一のファイルに対して、他ノードにおいて該第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、前記第一のファイルを複製した第二のファイルを記憶部に格納し、
    前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、該第二の経路で最初に前記第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードにおいて、前記読込処理を実行する際に前記第二のファイルからシンボル変数値を取得する
    処理を実行することを特徴とするシンボリック実行方法。
  2. 前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、前記第二のファイルを前記第一のファイルに反映し、
    前記第二の経路で最初に前記第一のファイルにシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する第二のノードにおいて、前記第一のファイルに対して前記シンボリック変数に格納された値または前記所定の値を書き込む処理を、さらに実行することを特徴とする請求項1に記載のシンボリック実行方法。
  3. 前記書込処理において書き込む内容にシンボル変数が含まれているか否か、または前記読込処理において読み込む内容にシンボル変数が含まれているか否かを判断する処理をさらに実行することを特徴とする請求項1又は2に記載のシンボリック実行方法。
  4. 前記第一の経路上にある前記第一のノードの子ノードから前記第一のノードにバックトラックする際に、前記記憶部に格納されており、前記子ノードに対応する前記第二のファイルを削除することを特徴とする請求項1〜3のいずれか一に記載のシンボリック実行方法。
  5. 各ノードにおいてシンボリック変数に格納された値または所定の値を書き込む書込処理が実行された第一のファイルと、前記書込処理を実行する前の前記第一のファイルを複製した第二のファイルとを記憶する記憶部と、
    第一のノードで作成された前記第一のファイルに対して、他ノードにおいて該第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、前記第一のファイルを複製した第二のファイルを前記記憶部に格納する格納部と、
    前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、該第二の経路で最初に前記第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードが、前記読込処理を実行する際に前記第二のファイルからシンボル変数値を取得する取得部と
    を有することを特徴とするシンボリック実行装置。
  6. コンピュータに、
    第一のノードで作成された第一のファイルに対して、他ノードにおいて該第一のノードで使用されたシンボリック変数に格納された値または所定の値を書き込む書込処理を実行する際に、前記第一のファイルを複製した第二のファイルを記憶部に格納し、
    前記第一のノードを経由する第一の経路から前記第一のノードにバックトラックして、前記第一のノードを経由する第二の経路に移行する際に、該第二の経路で最初に前記第一のファイルからシンボル変数に挿入する値を読み込む読込処理を実行する第二のノードが、前記読込処理を実行する際に前記第二のファイルからシンボル変数値を取得する
    処理を実行させることを特徴とするシンボリック実行プログラム。
JP2013197540A 2013-09-24 2013-09-24 シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラム Expired - Fee Related JP6201567B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013197540A JP6201567B2 (ja) 2013-09-24 2013-09-24 シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013197540A JP6201567B2 (ja) 2013-09-24 2013-09-24 シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラム

Publications (2)

Publication Number Publication Date
JP2015064696A true JP2015064696A (ja) 2015-04-09
JP6201567B2 JP6201567B2 (ja) 2017-09-27

Family

ID=52832527

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013197540A Expired - Fee Related JP6201567B2 (ja) 2013-09-24 2013-09-24 シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラム

Country Status (1)

Country Link
JP (1) JP6201567B2 (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01129333A (ja) * 1987-11-16 1989-05-22 Hitachi Vlsi Eng Corp 半導体記憶装置
JPH05108388A (ja) * 1991-10-16 1993-04-30 Toshiba Corp プロセス復旧方式
JP2001166966A (ja) * 1999-12-09 2001-06-22 Hitachi Software Eng Co Ltd デバッガにおける被テストプログラムの実行環境管理方法
JP2013156961A (ja) * 2012-01-31 2013-08-15 Fujitsu Ltd 生成装置、生成プログラム、および生成方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01129333A (ja) * 1987-11-16 1989-05-22 Hitachi Vlsi Eng Corp 半導体記憶装置
JPH05108388A (ja) * 1991-10-16 1993-04-30 Toshiba Corp プロセス復旧方式
JP2001166966A (ja) * 1999-12-09 2001-06-22 Hitachi Software Eng Co Ltd デバッガにおける被テストプログラムの実行環境管理方法
JP2013156961A (ja) * 2012-01-31 2013-08-15 Fujitsu Ltd 生成装置、生成プログラム、および生成方法

Also Published As

Publication number Publication date
JP6201567B2 (ja) 2017-09-27

Similar Documents

Publication Publication Date Title
US10162738B2 (en) System, method, and computer readable medium for universal software testing
CN105144088B (zh) 元数据与源代码的关联以及基于其的应用和服务
US8707156B2 (en) Render engine for spreadsheet
US9660962B2 (en) Network-attached storage gateway validation
US10698681B2 (en) Parallel development of a software system
CN107122295B (zh) 测试用例脚本的生成方法和装置
JP6486574B2 (ja) プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム
Kuć et al. Mastering elasticsearch
JP6201567B2 (ja) シンボリック実行方法、シンボリック実行装置、およびシンボリック実行プログラム
JP7163966B2 (ja) 変換方法、変換装置および変換プログラム
JP2012088940A (ja) 情報処理装置、情報処理方法、及びプログラム
US9824175B1 (en) Method and system of evaluation of validity of a refinement rule for a hardware emulation
JP2006235899A (ja) Umlモデル作成支援方法及びその装置
JP5578625B2 (ja) プログラム分析装置、プログラム分析方法、及びプログラム
JP6748357B2 (ja) 解析装置、解析プログラムおよび解析方法
JP2004532483A (ja) 連立微分方程式における不一致性に関する誤り情報の提供方法
JP2015133031A (ja) プログラム分析装置及びプログラム分析方法
JP2004532483A5 (ja)
WO2014064545A1 (en) Maintaining integrity of output of code generators
JP2020038482A (ja) プログラム検証プログラム、プログラム検証方法およびプログラム検証装置
JP2015022356A (ja) テストシナリオバリエーション生成装置及び方法及びプログラム
US8930759B2 (en) Stream generation
JP6556091B2 (ja) システム仕様検証支援装置及びシステム仕様検証支援方法
JP6699433B2 (ja) データ管理プログラム、装置、及び方法
JP2012088874A (ja) プログラムバグ管理システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160606

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170310

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170321

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170516

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170814

R150 Certificate of patent or registration of utility model

Ref document number: 6201567

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees