JP5440287B2 - シンボリック実行支援プログラム、方法及び装置 - Google Patents

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

Info

Publication number
JP5440287B2
JP5440287B2 JP2010057094A JP2010057094A JP5440287B2 JP 5440287 B2 JP5440287 B2 JP 5440287B2 JP 2010057094 A JP2010057094 A JP 2010057094A JP 2010057094 A JP2010057094 A JP 2010057094A JP 5440287 B2 JP5440287 B2 JP 5440287B2
Authority
JP
Japan
Prior art keywords
program
block
storage unit
symbolic execution
path condition
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
JP2010057094A
Other languages
English (en)
Other versions
JP2011191985A (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.)
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 JP2010057094A priority Critical patent/JP5440287B2/ja
Publication of JP2011191985A publication Critical patent/JP2011191985A/ja
Application granted granted Critical
Publication of JP5440287B2 publication Critical patent/JP5440287B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Description

本技術は、シンボリック実行技術に関する。
シンボリック実行(symbolic execution)は、記号実行とも呼ばれ、例えばプログラムのテスト及び検証を行う際に用いられる。シンボリック実行についての基礎的な事項は、例えば、玉井哲雄、福永光一、「記号実行システム」、情報処理、pp18-28、1982/01/15などに詳しく述べられているので、そちらを参照されたい。
シンボリック実行は、プログラムを、そのプログラムに含まれる変数に具体的な数値を入力する代わりに、数値を代表するシンボルでプログラムを模擬的に実行し、その結果を評価する技術である。例えば図1に示すようなプログラムをシンボリック実行する場合を考える。このプログラムでは、(1)乃至(3)にif文が記述されている。また、変数x及びyがシンボリック実行におけるシンボルとして指定されているものとする。このようなプログラムをシンボリック実行すると、図2に模式的に示すような制御フローが得られる。図2において処理1乃至4を除く矩形ボックスは、シンボリック実行で代入文や条件文などを通過したときに満たすべき論理的な制約(すなわちパスコンディション)を表しており、シンボリック実行ではこのようなパスコンディションを代入文や条件文などを通過する毎に積み上げるといった処理を行う。図2の例では、zにx+5を代入したところで(z=x+5)というパスコンディションが積まれ、(1)のif文で(z=x+5且つz>=10)というパスコンディションと、(z=x+5且つz<10)というパスコンディションが積み上げられる。以下、(2)のif文でさらに2つのパスコンディションが積み上げられ、(3)のif文でさらに2つのパスコンディションが積み上げられる。
このようなシンボリック実行の後に、パスコンディションが充足可能か否かの判定を、例えばSAT(satisfiability)又はSMT(satisfiability modulo theory)ソルバを利用して行う。図2の例では、(2)の分岐の後に生成されるパスコンディション(z=x+5且つz>=10且つx<=10)は、充足不可能と判断され、処理2は実行されないことが分かる。なお、シンボリック実行は、JPF(Java(登録商標) Path Finder)などのモデル検査エンジンと組み合わせて使用される場合もある。
このように、シンボリック実行では、条件分岐においてその充足可能な全ての実行パスを自動的に発生させて、プログラムの網羅的な実行を可能としている。しかし、その網羅性ゆえに組み合せ爆発を起こす可能性があり、特に実装言語特有のアルゴリズムによりシンボリック実行上では本来必要としない組み合せを多く生成してしまい、無駄な探索を繰り返してしまうという問題がある。
図3にそのようなプログラムの例を示す。図3は、与えられたpidと同一のpidを有する商品を探し出し、その在庫が数量qnt以上であれば「在庫足りる」を出力し、在庫が数量qnt未満であれば「在庫足りない」を出力し、さらに与えられたpidと同一のpidを有する商品がなければ「該当商品なし」を出力するプログラムである。このようなプログラムに対してシンボリック実行を行うと、図4に示すような制御フローとなる。なお、data.sizeが「10」であるものと仮定している。図3のようなプログラムでは、図4に示すように、pidが1件目でマッチする場合、pidが2件目でマッチする場合、...pidが10件目でマッチする場合、そして、10件目でもマッチしない場合といったように、全てのケースについてパスコンディションが積み上げられる。
このような場合、本来何件目でマッチするかは無関心であるにもかかわらず、シンボリック実行上では、データ集合の要素数分の場合分けに応じてパスコンディションが生成されるので、論理制約の無駄な組み合わせによる組み合わせ爆発を引き起こしてしまう。
このようなfor文などの繰り返し構造に起因する組み合わせ爆発に対して、従来、有界モデル検査(BLAST)などで用いられている、繰り返し構造部分の有界実行という手法が知られている。しかし一般に、最適な長さで繰り返し回数を固定化できないという問題がある。具体的には、プログラムの全ての繰り返し構造に対して、その内容にかかわらず、「ある固定回数以内」(例えば、forループは高々5回まで)というような有界化をするため、無駄なループが残り得る。
特開2009−87355号公報 特開平11−272503号公報
よって、本技術の目的は、シンボリック実行において、無駄なパスコンディションを生成せずに適切に実行パスを把握することができるようにするための技術を提供することである。
本シンボリック実行支援方法は、(A)プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出するステップと、(B)分析対象のプログラムにおいて、抽出された繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に特定の処理を実施し且つ偽の場合に直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する変換処理ステップと、(C)二分岐構造に含まれる述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するステップと、(D)変換後プログラム格納部に格納された変換処理後のプログラムのシンボリック実行時に、パスコンディションデータ格納部に格納されている述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、述語関数の出現位置におけるパスコンディションを生成してシンボリック実行部の管理データに追加登録するステップとを含む。
シンボリック実行において、無駄なパスコンディションを生成せずに適切に実行パスを把握することができるようになる。
図1は、プログラムの一例を示す図である。 図2は、図1のプログラムの制御フローを示す図である。 図3は、プログラムの一例を示す図である。 図4は、従来技術の問題を説明するための図である。 図5は、シンボリック実行支援装置の機能ブロック図である。 図6は、シンボリック実行支援装置の機能ブロック図である。 図7は、本実施の形態のメインフローを示す図である。 図8は、前処理の処理フローを示す図である。 図9は、分析対象プログラムの一例を示す図である。 図10は、抽出されるforブロックの一例を示す図である。 図11は、抽出すべき繰り返しパターンを説明するための図である。 図12は、存在チェックテーブルへの登録について説明するための図である。 図13は、存在チェックテーブルの一例を示す図である。 図14は、前処理の処理フローを示す図である。 図15は、生成されるifブロックの一例を示す図である。 図16は、述語関数の宣言の一例を示す図である。 図17は、変換後プログラムの一例を示す図である。 図18は、パスコンディションテーブルの一例を示す図である。 図19は、シンボリック実行を模式的に説明するための図である。 図20は、シンボリック実行によって把握される実行パスの一例を示す図である。 図21は、シンボリック実行時処理の処理フローを示す図である。 図22は、図17に示したプログラムの制御フローの例を示す図である。 図23は、コンピュータの機能ブロック図である。
図5及び図6に本技術の実施の形態に係るシステムの機能ブロック図を示す。図5に、前処理段階で使用されるシンボリック実行支援装置の機能ブロック図を示す。シンボリック実行支援装置は、入力部101と、入力データ格納部102と、処理対象特定部103と、チェックパターン格納部104と、存在チェックテーブル格納部105と、二分岐構造生成部106と、変換後プログラム格納部107と、パスコンディションテーブル格納部108とを有する。
入力部101は、ユーザなどから分析対象のプログラムの指定及びシンボリック実行に係る変数の指定を受け付け、それらのデータを入力データ格納部102に格納する。チェックパターン格納部104は、本実施の形態における処理の対象となる繰り返しブロックを抽出するためのパターンについてのデータを格納する。処理対象特定部103は、ループ抽出部1031及びパターンチェック部1033を含み、入力データ格納部102及びチェックパターン格納部104に格納されているデータを用いて処理を行い、処理結果である存在チェックテーブルを生成して存在チェックテーブル格納部105に格納する。
二分岐構造生成部106は、ifブロック生成部1061及びパスコンディションテーブル生成部1063を含み、入力データ格納部102、存在チェックテーブル格納部105に格納されているデータを用いて処理を行い、処理結果として変換後プログラムを生成して変換後プログラム格納部107に格納し、同じく処理結果としてパスコンディションテーブルを生成してパスコンディションテーブル格納部108に格納する。
次に、図6に、シンボリック実行時の構成を示す。シンボリック実行部200は、既存のシンボリック実行を行うモジュールであり、分析対象のプログラムにおいて実行している関数を積む関数スタック211と、制御フローを記録するためのブランチ管理テーブル213とを管理している。ブランチ管理テーブル213は、ブランチポイント毎に、ブランチの条件が真の場合のパスコンディションと、偽の場合のパスコンディションとを登録するものとする。なお、シンボリック実行部200は、様々なものが流通しており、例えばJava(登録商標) PathFinderの拡張であるSymbolic PathFinderなどであってもよい。
シンボリック実行部200は、変換後プログラム格納部107に格納されている変換後プログラムを処理する。このシンボリック実行部200の実行中に、本実施の形態において導入されるパスコンディション動的追加部151は、パスコンディションテーブル格納部108に格納されているデータを用いて、シンボリック実行部200に対して処理を行うようになっている。なお、パスコンディション動的追加部151及びシンボリック実行部200が、シンボリック実行支援装置と一体である場合もあれば、パスコンディション動的追加部151及びシンボリック実行部200とを含むシンボリック実行装置が別途用意される場合もある。
次に、図7乃至図22を用いて図5及び図6に示したシステムの動作について説明する。本実施の形態では、最初に前処理を実施し(ステップS1)、前処理の結果を用いてシンボリック実行時処理を実施する(ステップS3)。
まず、図8乃至図20を用いて前処理について説明する。まず、入力部101は、ユーザから分析対象のプログラム及びシンボリック実行に係る変数の指定を受け付け、分析対象のプログラムを取得して上記変数のデータと共に入力データ格納部102に格納する(図8:ステップS11)。なお、分析対象のプログラムについては、当該プログラムを含むファイルを同一装置の記憶装置から読み出したり、ネットワークで接続されている他のコンピュータから取得したりする。
本実施の形態では、例えば図9に示すようなプログラムを処理する場合を考察する。図9は、プログラムの一部であるが、変数item1乃至10、pid1、qnt1は、シンボル実行に係る変数であるものとする。また、purchaseメソッドが1回呼ばれ、商品IDが入力されるpid1及び数量が入力されるqnt1が渡される。さらに、purchaseメソッドは、基本的に、図3で示したプログラムである。
そして、処理対象特定部103は、入力データ格納部102に格納されている分析対象のプログラムを読み出し(ステップS13)、処理対象特定部103のループ抽出部1031は、分析対象のプログラム内における繰り返しブロック(例えばforブロック)を抽出し、例えばメインメモリなどの記憶装置に格納する(ステップS15)。なお、言語によってはwhileなどを使う場合もあるので、分析対象のプログラムにおいて使用されているプログラム言語に応じて繰り返しブロックを検出する。図9のプログラムの場合には、図10に示すようなforブロックが抽出される。
そして、処理対象特定部103のパターンチェック部1033は、特定された繰り返しブロックのうち未処理の繰り返しブロックを1つ特定する(ステップS17)。その後、パターンチェック部1033は、チェックパターン格納部104に格納されているチェックパターンのデータを用いて、特定された繰り返しブロックが、本実施の形態において取り扱い可能な繰り返しブロックのパターンに適合するか確認する(ステップS19)。
本実施の形態では、特定のデータが存在するか否かをループを回しながら検査するようなパターンに適合するかを確認する。具体的には図11に示すように、forループ内において、特定のデータか否かを判断する条件(if文内の条件)を規定しているという条件と、繰り返し制御変数(ここではi)によって現在のデータをセットする文以外の処理に繰り返し制御変数iに関する手続が規定されていないという条件と、存在確認されるデータ集合のサイズと同じだけループが繰り返されるという条件とを含む。
これらの条件のいずれかを満たさない場合には、以下で述べるような単純な二分岐構造に直した場合に、論理的に正しくパスコンディションを積むことができるか不明であり、適合しないと判断するものとする。
特定された繰り返しブロックが上で述べたようなパターンに適合しない場合には、端子Aを介して図14のステップS33に移行する。一方、特定された繰り返しブロックが上で述べたようなパターンに適合する場合には、パターンチェック部1033は、分析対象のプログラムから、繰り返しブロック内のif文の条件部分(すなわち特定のデータか否かを判断する条件。if条件文と呼ぶ。)、繰り返し制御変数によって現在のデータをセットするカレントデータ設定文、if条件文で真とされた場合の処理ブロックと、if条件文で偽とされた場合の処理ブロックとを抽出し、それらを存在チェックテーブル格納部105内の存在チェックテーブルに登録する(ステップS23)。処理は端子Bを介して図14の処理に移行する。
例えば図12に示すように、図10に示したforブロックに関連して、if条件文Dと、カレントデータ設定文Eと、if条件文Dが真の場合に実行され且つ繰り返し制御変数iの手続を含まない処理ブロックFと、if条件文Dが偽の場合に実行され且つforブロックの直後のブロックGとを抽出して、存在チェックテーブルに登録する。
図13に、存在チェックテーブルの一例を示す。図13の例では、if条件文のための存在条件欄と、カレントデータ設定文のためのカレントデータ設定欄と、真の場合に実行される処理ブロック(真)の欄と、偽の場合に実行される処理ブロック(偽)の欄とが含まれ、図12で示したように抽出されたD乃至Gのデータが登録される。
図14の処理の説明に移行して、二分岐構造生成部106のifブロック生成部1061は、存在チェックテーブル格納部105内の存在チェックテーブルに登録されているカレントデータ設定文の繰り返し制御変数iを所定の固定値に変更する(ステップS25)。
これにより、対象とする配列やリストなどの集合データの検索範囲を1つの要素に代表させる。例えばi=0として、図13の例では、Item item = data.get(0)と変更する。但し、現在着目している繰り返しブロック全体が複数回呼ばれるような場合は、検索条件が同じ場合は同じ要素を利用し、違う場合は違う要素を利用するようにする。例えば、図9のプログラムの場合purchaseメソッドは1回だけ呼ばれるので、forブロックにおいても1つの条件pid1だけで検索される。これに対して、purchaseメソッドが2回呼ばれて、2回目にはpid2という異なる条件が渡される場合には、i=0ではなく、i=1としてカレントデータ設定文を変更する。すなわち、Item item = data.get(1)と変更する。
そして、ifブロック生成部1061は、繰り返しブロック及び繰り返しブロックの直後のブロックを、存在チェックテーブルに従ってifブロックに変換して、変換後のプログラムを変換後プログラム格納部107に格納する(ステップS27)。
具体的には、真又は偽となる述語関数を導入して、新たに導入するif条件文に当該述語関数を採用する。そして述語関数が真の場合には、存在チェックテーブルに登録されているカレントデータ設定文及び真の場合の処理ブロックを実行し、述語関数が偽の場合には、存在チェックテーブルに登録されている偽の場合の処理ブロックを実行するようなifブロックを生成して、当該ifブロックで、入力データ格納部102に格納されている分析対象のプログラムの処理対象のforブロック及び当該forブロックの直後のブロックと置換する。なお、2以上のforブロックが存在する場合には、2つ目以降のforブロック等については、変換後プログラム格納部107に格納されており且つ直前に処理されたプログラムについて置換を行う。また、入力データ格納部102に格納されているシンボリック実行に係る変数のデータについても、変換後プログラム格納部107に格納しておく。
例えば、図15に示すようなifブロックが生成される。図15の例では、_EXIST1という述語関数が導入されている。このような述語関数については、_EXIST+番号というようなルールを予め決めておき、本ステップで決定すればよい。図15の例では、_EXIST1が真の処理ブロックには、存在チェックテーブルのカレントデータ設定の欄の内容と処理ブロック(真)の欄の内容が埋め込まれており、_EXIST1が偽の処理ブロックには、存在チェックテーブルの処理ブロック(偽)の内容が埋め込まれている。
さらに、ifブロック生成部1061は、ifブロックの条件文で採用した述語関数を宣言するブロックを生成して、ifブロックの前に追加する(ステップS29)。例えば図16に示すように、述語関数をダミー関数として宣言するブロックを生成する。
このような処理を実施した後、ifブロック生成部1061は、処理後のプログラムを変換後プログラム格納部107に格納する。上で述べた例では、図17に示すような変換後プログラムが生成されて、変換後プログラム格納部107に格納される。
また、二分岐構造生成部106のパスコンディションテーブル生成部1063は、ifブロックの条件文で採用した述語関数とその論理制約とを、パスコンディションテーブル格納部108におけるパスコンディションテーブルに登録する(ステップS31)。仮に導入した述語関数であるので、論理制約についても他の論理制約と区別できるように決定すればよい。例えば、述語関数_EXIST1に対して論理制約_exist1といったものでよい。
パスコンディションテーブルは、例えば図18に示すようなテーブルである。関数名に対応付けて論理制約を登録するようになっている。
このようにすれば、プログラムの大まかな構造として図19のようなプログラムが得られて、これに対してシンボリック実行すれば、図20に示すような制御フローが把握される。すなわち、新たに導入したif文で、パスコンディション_exist1の場合と、パスコンディションnot(_exist1)の場合とに分岐するものである。以下、それぞれに異なる処理、すなわちblock1又はblock2が実行される。
その後、処理対象特定部103は、全ての繰り返しブロックを処理したかを判断し(ステップS33)、未処理の繰り返しブロックが存在する場合には端子Cを介してステップS17に戻る。一方、全ての繰り返しブロックについて処理した場合には、元の処理に戻る。
このようにして、シンボリック実行を実施する前に行うべき前処理が完了する。このような変換を行うことによって、特定の条件を満たすデータの存在を確認するようなforブロックで不必要にパスコンディションの組み合わせが増加する事態は避けられる。しかしながら、通常どおりシンボリック実行部200がシンボリック実行を行っても、新たに導入したif条件文の述語関数については、シンボルとして取り扱われることはない。
従って、シンボリック実行時処理をパスコンディション動的追加部151が実行することによって、適切な位置に適切なパスコンディションを挿入するようにする。
図21及び図22を用いてシンボリック実行時処理について説明する。シンボリック実行部200は、ユーザ等からの指示又は処理対象特定部103等からの指示に応じて、変換後プログラム格納部107に格納されている変換後プログラムの実行を開始する(ステップS41)。シンボリック実行部200は、既に知られた方法で変換後のプログラムをシンボル実行する。なお、シンボル実行時には、図6に示したように、変換後プログラムにおいて実行する関数を関数スタック211に積み、分岐点において当該分岐の条件が真の場合のパスコンディション及び偽のパスコンディションを、ブランチ管理テーブル213に登録するようになっているものとする。
そこで、シンボリック実行が終了するまで(ステップS43)、パスコンディション動的追加部151は、以下の処理を実施する。パスコンディション動的追加部151は、上で述べた関数スタック211を監視して(ステップS45)、関数スタック211に積まれた最新の関数名とパスコンディションテーブル格納部108内のパスコンディションテーブルにおける関数名の列に登録されている関数名とを比較する。そして、パスコンディション動的追加部151は、関数スタック211に積まれた最新の関数名とパスコンディションテーブル内の関数名とが一致するか判断する(ステップS47)。関数スタック211に積まれた最新の関数名とパスコンディションテーブル内の関数名と一致しない場合にはステップS43に戻る。
一方、関数スタック211に積まれた最新の関数名とパスコンディションテーブル内の関数名のいずれかと一致する場合には、パスコンディション動的追加部151は、パスコンディションテーブル格納部108内のパスコンディションテーブルにおいて、関数スタック211に積まれた最新の関数名と一致すると判断された関数名に対応付けて登録されている論理制約から、真及び偽のパスコンディションを生成して、ブランチポイントと共にブランチ管理テーブル213に登録する(ステップS49)。この処理の後にステップS43に戻る。
例えば、図18のようなパスコンディションテーブルの場合、関数名_EXIST1()であるから、ブランチポイントは、if(_EXIST1())と自動的に特定できる。さらに、対応する論理制約_exist1が得られるので、ブランチ管理テーブル213の直前のレコードに含まれる真のパスコンディション又は偽のパスコンディションと_exist1とを含む真のパスコンディションを生成し、同様にブランチ管理テーブル213の直前のレコードに含まれる真のパスコンディション又は偽のパスコンディションとnot(_exist1)とを含む偽のパスコンディションを生成し、ブランチポイントと共に、ブランチ管理テーブル213に追加登録する。
このようにブランチ管理テーブル213に、レコードを追加することによって、繰り返しブロックをifブロックに変換した影響を反映させることができるようになる。すなわち、繰り返し構造による無駄なパスコンディションの組み合わせを回避することができ、シンプルに論理的に正しい形で制御フローを把握できるようになる。
例えば図9の繰り返しブロック及び直後のブロックだけに着目すれば、図22に示すような制御フローが把握される。図3と比較すれば、該当データがある場合と該当データがない場合で分岐して、該当データがある場合には数量が足りる場合と足りない場合とに分岐するだけであるから、無駄な実行パスが除去されてシンプルに但し論理的には正しくプログラムの実行パスを表すことができるようになっている。
以上本技術の実施の形態について説明したが、本技術はこれに限定されるものではない。例えば、図5及び図6で示した機能ブロック図は一例であって、必ずしも実際のプログラムモジュール構成とは異なる場合がある。
処理フローについても処理結果が変わらない限り、ステップの順番を入れ替えたり、並列に実行するようにしても良い。
なお、上で述べたシンボリック実行支援装置等は、コンピュータ装置であって、図23に示すように、メモリ2501とプロセッサ(CPU2503)とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本実施の形態をまとめると、以下のようになる。
本シンボリック実行支援方法は、(A)プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出するステップと、(B)分析対象のプログラムにおいて、抽出された繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に特定の処理を実施し且つ偽の場合に直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する変換処理ステップと、(C)二分岐構造に含まれる述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するステップと、(D)変換後プログラム格納部に格納された変換処理後のプログラムのシンボリック実行時に、パスコンディションデータ格納部に格納されている述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、述語関数の出現位置におけるパスコンディションを生成してシンボリック実行部の管理データに追加登録するステップとを含む。
このような処理を実施することによって、無駄なパスコンディションを生成せずに適切に実行パスを把握することができるようになる。
また、上で述べた変換処理が、述語関数の宣言を分析対象のプログラムに追加する処理と、繰り返し制御変数で今回のケースを特定するためのカレントデータ設定文を、繰り返し制御変数を固定の値に設定したカレントデータ設定文に置換する処理とを含むようにしてもよい。正しい文法の下に、シンボリック実行を行うことができるようになる。
また、上で述べたパターンは、特定の処理において繰り返し制御変数を使用していないという条件を含むパターンである場合もある。繰り返し制御変数を使用している場合には、単純な二分岐構造とは異なる場合があるためである。
さらに、上で述べた変換処理ステップが、分析対象のプログラムから、繰り返し制御変数で今回のケースを特定するためのカレントデータ設定文と、抽出された繰り返しブロックに含まれる特定の処理のブロックと、抽出された繰り返しブロックの直後のブロックとを抽出し、対応付けて存在チェックテーブルに登録するステップと、存在チェックテーブルに対応付けられているデータで二分岐構造を生成するステップとを含むようにしてもよい。このようにすれば適切な二分岐構造を生成することができるようになる。
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出するステップと、
前記分析対象のプログラムにおいて、抽出された前記繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に前記特定の処理を実施し且つ偽の場合に前記直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する変換処理ステップと、
前記二分岐構造に含まれる前記述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するステップと、
前記変換後プログラム格納部に格納された前記変換処理後のプログラムのシンボリック実行時に、前記パスコンディションデータ格納部に格納されている前記述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、前記述語関数の出現位置におけるパスコンディションを生成して前記シンボリック実行部の管理データに追加登録するステップと、
を、コンピュータに実行させるためのシンボリック実行支援プログラム。
(付記2)
前記変換処理が、
前記述語関数の宣言を前記分析対象のプログラムに追加する処理と、
前記繰り返し制御変数で今回のケースを特定するためのカレントデータ設定文を、前記繰り返し制御変数を固定の値に設定したカレントデータ設定文に置換する処理と、
を含む付記1記載のシンボリック実行支援プログラム。
(付記3)
前記パターンが、前記特定の処理において繰り返し制御変数を使用していないという条件を含むパターンである
付記1又は2記載のシンボリック実行支援プログラム。
(付記4)
前記変換処理ステップが、
前記分析対象のプログラムから、前記繰り返し制御変数で今回のケースを特定するためのカレントデータ設定文と、抽出された前記繰り返しブロックに含まれる前記特定の処理のブロックと、抽出された前記繰り返しブロックの直後のブロックとを抽出し、対応付けて存在チェックテーブルに登録するステップと、
前記存在チェックテーブルに対応付けられているデータで前記二分岐構造を生成するステップと、
を含む付記1乃至3のいずれか1つ記載のシンボリック実行支援プログラム。
(付記5)
プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出するステップと、
前記分析対象のプログラムにおいて、抽出された前記繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に前記特定の処理を実施し且つ偽の場合に前記直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する変換処理ステップと、
前記二分岐構造に含まれる前記述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するステップと、
前記変換後プログラム格納部に格納された前記変換処理後のプログラムのシンボリック実行時に、前記パスコンディションデータ格納部に格納されている前記述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、前記述語関数の出現位置におけるパスコンディションを生成して前記シンボリック実行部の管理データに追加登録するステップと、
を含み、コンピュータに実行されるシンボリック実行支援方法。
(付記6)
プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出する処理対象特定部と、
前記分析対象のプログラムにおいて、抽出された前記繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に前記特定の処理を実施し且つ偽の場合に前記直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する二分岐ブロック生成部と、
前記二分岐構造に含まれる前記述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するパスコンディションテーブル生成部と、
前記変換後プログラム格納部に格納された前記変換処理後のプログラムのシンボリック実行時に、前記パスコンディションデータ格納部に格納されている前記述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、前記述語関数の出現位置におけるパスコンディションを生成して前記シンボリック実行部の管理データに追加登録するパスコンディション動的追加部と、
を有するシンボリック実行支援装置。
101 入力部 102 入力データ格納部
103 処理対象特定部 104 チェックパターン格納部
105 存在チェックテーブル格納部 106 二分岐構造生成部
107 変換後プログラム格納部
108 パスコンディションテーブル格納部
1031 ループ抽出部 1033 パターンチェック部
1061 ifブロック生成部
1063 パスコンディションテーブル生成部
151 パスコンディション動的追加部
200 シンボリック実行部

Claims (6)

  1. プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出するステップと、
    前記分析対象のプログラムにおいて、抽出された前記繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に前記特定の処理を実施し且つ偽の場合に前記直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する変換処理ステップと、
    前記二分岐構造に含まれる前記述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するステップと、
    前記変換後プログラム格納部に格納された前記変換処理後のプログラムのシンボリック実行時に、前記パスコンディションデータ格納部に格納されている前記述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、前記述語関数の出現位置におけるパスコンディションを生成してンボリック実行部の管理データに追加登録するステップと、
    を、コンピュータに実行させるためのシンボリック実行支援プログラム。
  2. 前記変換処理が、
    前記述語関数の宣言を前記分析対象のプログラムに追加する処理と、
    前記繰り返し制御変数で今回のケースを特定するためのカレントデータ設定文を、前記繰り返し制御変数を固定の値に設定したカレントデータ設定文に置換する処理と、
    を含む請求項1記載のシンボリック実行支援プログラム。
  3. 前記パターンが、前記特定の処理において繰り返し制御変数を使用していないという条件を含むパターンである
    請求項1又は2記載のシンボリック実行支援プログラム。
  4. 前記変換処理ステップが、
    前記分析対象のプログラムから、前記繰り返し制御変数で今回のケースを特定するためのカレントデータ設定文と、抽出された前記繰り返しブロックに含まれる前記特定の処理のブロックと、抽出された前記繰り返しブロックの直後のブロックとを抽出し、対応付けて存在チェックテーブルに登録するステップと、
    前記存在チェックテーブルに対応付けられているデータで前記二分岐構造を生成するステップと、
    を含む請求項1乃至3のいずれか1つ記載のシンボリック実行支援プログラム。
  5. プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出するステップと、
    前記分析対象のプログラムにおいて、抽出された前記繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に前記特定の処理を実施し且つ偽の場合に前記直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する変換処理ステップと、
    前記二分岐構造に含まれる前記述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するステップと、
    前記変換後プログラム格納部に格納された前記変換処理後のプログラムのシンボリック実行時に、前記パスコンディションデータ格納部に格納されている前記述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、前記述語関数の出現位置におけるパスコンディションを生成してンボリック実行部の管理データに追加登録するステップと、
    を含み、コンピュータに実行されるシンボリック実行支援方法。
  6. プログラムデータ格納部に格納されている分析対象のプログラムから、繰り返し制御変数を変化させて特定のケースを探索して当該特定のケースにおいて特定の処理を実施するというパターンに合致する繰り返しブロックを抽出する処理対象特定部と、
    前記分析対象のプログラムにおいて、抽出された前記繰り返しブロック及び当該繰り返しブロックの直後のブロックを、真の場合に前記特定の処理を実施し且つ偽の場合に前記直後のブロックの処理を実施し且つ当該真偽に関する述語関数を含む二分岐構造に置換する変換処理を実施し、変換処理後のプログラムを変換後プログラム格納部に格納する二分岐ブロック生成部と、
    前記二分岐構造に含まれる前記述語関数について論理制約を生成し、パスコンディションデータ格納部に格納するパスコンディションテーブル生成部と、
    前記変換後プログラム格納部に格納された前記変換処理後のプログラムのシンボリック実行時に、前記パスコンディションデータ格納部に格納されている前記述語関数を処理していることを検出すると、当該述語関数に対応付けられている論理制約から、前記述語関数の出現位置におけるパスコンディションを生成してンボリック実行部の管理データに追加登録するパスコンディション動的追加部と、
    を有するシンボリック実行支援装置。
JP2010057094A 2010-03-15 2010-03-15 シンボリック実行支援プログラム、方法及び装置 Expired - Fee Related JP5440287B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010057094A JP5440287B2 (ja) 2010-03-15 2010-03-15 シンボリック実行支援プログラム、方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010057094A JP5440287B2 (ja) 2010-03-15 2010-03-15 シンボリック実行支援プログラム、方法及び装置

Publications (2)

Publication Number Publication Date
JP2011191985A JP2011191985A (ja) 2011-09-29
JP5440287B2 true JP5440287B2 (ja) 2014-03-12

Family

ID=44796829

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010057094A Expired - Fee Related JP5440287B2 (ja) 2010-03-15 2010-03-15 シンボリック実行支援プログラム、方法及び装置

Country Status (1)

Country Link
JP (1) JP5440287B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5772607B2 (ja) * 2012-01-12 2015-09-02 富士通株式会社 生成装置、生成方法、および生成プログラム
JPWO2014168164A1 (ja) * 2013-04-10 2017-02-16 日本電気株式会社 ネットワーク検証装置、ネットワーク検証方法及びプログラム
US9483380B2 (en) * 2014-04-15 2016-11-01 Fujitsu Limited Parameterized states in symbolic execution for software testing
JP6547345B2 (ja) * 2015-03-17 2019-07-24 富士通株式会社 テストケース生成プログラム、テストケース生成方法およびテストケース生成装置
JP6574151B2 (ja) * 2016-08-19 2019-09-11 日本電信電話株式会社 プログラム解析装置、プログラム解析方法およびプログラム解析プログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3418544B2 (ja) * 1998-03-24 2003-06-23 日立ソフトウエアエンジニアリング株式会社 プログラムのテストデータ自動生成装置
JP2000259401A (ja) * 1999-03-05 2000-09-22 Ntt Communicationware Corp ソースプログラム標準化装置およびソースプログラムを標準化する方法
US20090089759A1 (en) * 2007-10-02 2009-04-02 Fujitsu Limited System and Method for Providing Symbolic Execution Engine for Validating Web Applications

Also Published As

Publication number Publication date
JP2011191985A (ja) 2011-09-29

Similar Documents

Publication Publication Date Title
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
JP5505227B2 (ja) 繰返しシンボリック実行方法、プログラム及び装置
WO2016190869A1 (en) Determining potential test actions
KR20190020363A (ko) 동적 분석과 정적 분석을 연계한 프로그램을 분석하기 위한 방법 및 장치
CN107977304B (zh) 一种系统调试方法和装置
JP6665576B2 (ja) 支援装置、支援方法及びプログラム
US11366742B2 (en) Automated identification of lines of code related to errors field
JP5414633B2 (ja) アプリケーション実行装置及びアプリケーション実行方法
WO2021205589A1 (ja) テストスクリプト生成装置、テストスクリプト生成方法及びプログラム
JP6036089B2 (ja) データ遷移トレース装置、データ遷移トレース方法、及び、データ遷移トレースプログラム
JP5900212B2 (ja) テストデータ生成装置、該プログラム、及び該方法
CN102411534A (zh) 一种断点调试方法和调试器
KR101673151B1 (ko) 프로그램 소스 및 db 스키마의 연관 관계 변화 분석 방법 및 장치
JP5755861B2 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
JP6547345B2 (ja) テストケース生成プログラム、テストケース生成方法およびテストケース生成装置
JP2016051367A (ja) データ解析装置、データ解析方法、および、プログラム。
US20090235223A1 (en) Program generation apparatus and program generation method
JP6437396B2 (ja) トレース情報管理システム、方法、及びプログラム
CN104731949B (zh) 识别网页跳转的方法和装置
JP2013206310A (ja) モデル検査装置、モデル検査方法、およびプログラム
WO2022249256A1 (ja) Api検出装置、api検出方法及びプログラム
JP6974707B2 (ja) テストプログラム、テスト装置及びテスト方法
JP2007200240A (ja) 情報処理装置及び情報処理方法
JP2018049492A (ja) 解析装置、解析プログラムおよび解析方法
JP2011113298A (ja) 流用ソースコード解析システム及びプログラム並びに記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130108

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130828

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130903

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131029

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131202

R150 Certificate of patent or registration of utility model

Ref document number: 5440287

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees