JP5505227B2 - Repetitive symbolic execution method, program, and apparatus - Google Patents
Repetitive symbolic execution method, program, and apparatus Download PDFInfo
- Publication number
- JP5505227B2 JP5505227B2 JP2010212679A JP2010212679A JP5505227B2 JP 5505227 B2 JP5505227 B2 JP 5505227B2 JP 2010212679 A JP2010212679 A JP 2010212679A JP 2010212679 A JP2010212679 A JP 2010212679A JP 5505227 B2 JP5505227 B2 JP 5505227B2
- Authority
- JP
- Japan
- Prior art keywords
- execution
- storage unit
- unit
- symbolic
- symbolic execution
- 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
- 238000000034 method Methods 0.000 title claims description 59
- 230000003252 repetitive effect Effects 0.000 title claims description 6
- 238000004458 analytical method Methods 0.000 claims description 67
- 238000013500 data storage Methods 0.000 claims description 55
- 238000012360 testing method Methods 0.000 claims description 36
- 230000001186 cumulative effect Effects 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 25
- 238000004364 calculation method Methods 0.000 description 14
- 238000005516 engineering process Methods 0.000 description 6
- 238000000605 extraction Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000004880 explosion Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
本技術は、シンボリック実行技術に関する。 The present technology relates to a symbolic execution technology.
コードカバレッジ(code coverage)とは、プログラムの内部構造に対してどれだけ網羅的にテストを行ったかを示す指標である。コードカバレッジには、ステートメントカバレッジ(statement coverage)やブランチカバレッジ(branch coverage)、コンディションカバレッジ(condition coverage)、パスカバレッジ(path coverage)等の種類がある。プログラムのテストを行う際には、このような指標が基準値(例えば100%)に達するようにテストデータやシナリオを設計する。 The code coverage is an index indicating how exhaustively the test is performed on the internal structure of the program. Code coverage includes types such as statement coverage, branch coverage, condition coverage, and path coverage. When testing a program, test data and scenarios are designed so that such an index reaches a reference value (for example, 100%).
例として、図1に示すような制御構造を有するプログラムのテストを行い、ブランチカバレッジを100%にすることを考える。まず、テストデータ{a=11,b=1}を用いてテスト実行を行う。すると、分岐B1、B3及びB4を実行することができる。さらに、テストデータ{a=10,b=1}を用いてテスト実行を行えば、分岐B1、B3及びB5を実行することができる。そして、残りの分岐B2及びB6を実行するために、テストデータ{a=0,b=0}を用いてテスト実行を行う。このようにすれば、(実行した分岐の数)/(全分岐の数)*100=100となり、ブランチカバレッジは100%である。但し、このようなテストデータのセットは、人間がプログラムの内部構造を把握した上で作成するのが一般的であり、非常に手間がかかる。 As an example, consider that a program having a control structure as shown in FIG. 1 is tested and branch coverage is set to 100%. First, test execution is performed using test data {a = 11, b = 1}. The branches B 1 , B 3 and B 4 can then be executed. Further, if the test execution is performed using the test data {a = 10, b = 1}, the branches B 1 , B 3 and B 5 can be executed. Then, in order to execute the remaining branches B 2 and B 6 , test execution is performed using the test data {a = 0, b = 0}. In this way, (the number of branches executed) / (the number of all branches) * 100 = 100, and the branch coverage is 100%. However, such a test data set is generally created by humans after understanding the internal structure of the program, which is very time-consuming.
一方で、シンボリック実行(symbolic execution)という技術を利用してプログラムのテストを行うことが知られている。シンボリック実行は、プログラム内の変数をシンボル化し、シンボルのまま実行を行う技術である。なお、シンボリック実行についての基礎的な事項は、例えば、玉井哲雄、福永光一、「記号実行システム」、情報処理、pp18-28、1982/01/15などに詳しく述べられているので、そちらを参照されたい。 On the other hand, it is known to test a program using a technique called symbolic execution. Symbolic execution is a technique in which variables in a program are converted into symbols and execution is performed with the symbols as they are. The basic matters regarding symbolic execution are described in detail in, for example, Tetsuo Tamai, Koichi Fukunaga, "Symbol Execution System", Information Processing, pp18-28, 1982/01/15, etc. I want to be.
ここで、図1に示すような制御構造を有するプログラムに対してシンボリック実行を行うことを考える。このプログラムには変数a及び変数bが存在するため、変数a及び変数bをシンボル化してシンボリック実行を行う。このプログラムに対してシンボリック実行を行う場合における制御フローを図2に示す。図2に示すように、シンボリック実行では、シンボル化した変数が関わる分岐では、分岐における全てのケースについて実行を行う。これにより、プログラムにおける6つの経路(パス)全てを実行することができるようになっている。すなわち、パスカバレッジは100%である。 Here, consider performing symbolic execution on a program having a control structure as shown in FIG. Since the variable a and variable b exist in this program, the variable a and variable b are symbolized and symbolic execution is performed. FIG. 2 shows a control flow when symbolic execution is performed on this program. As shown in FIG. 2, in symbolic execution, execution is performed for all cases in a branch in a branch involving a symbolized variable. As a result, all six paths in the program can be executed. That is, the path coverage is 100%.
このように、従来のシンボリック実行は、原理的には、全ての経路を実行するようになっている(但し、無限ループを有する等、プログラムの構造によっては全ての経路を実行することができない場合がある)。一方、全ての分岐を実行できればよいのであれば、必ずしも全ての経路を実行しなくてもよい場合が多い。例えば図1の例であれば、「B1→B3→B4」、「B1→B3→B5」及び「B2→B6」という3経路を実行すれば、全ての分岐を網羅することができる。 In this way, in the conventional symbolic execution, in principle, all paths are executed (however, if all paths cannot be executed depending on the structure of the program, such as having an infinite loop) There). On the other hand, as long as all branches can be executed, it is not always necessary to execute all paths. For example, in the example of FIG. 1, if three paths “B 1 → B 3 → B 4 ”, “B 1 → B 3 → B 5 ”, and “B 2 → B 6 ” are executed, all branches are taken. Can be covered.
従って、ブランチカバレッジ等について基準値を達成できればよいという場合において、従来のようにシンボリック実行を行うと、本来は行わなくてもよいテスト実行を行うことになる。これは、図1の例のような単純なプログラムであれば問題は無い。しかし、一般的なサイズのプログラムの場合、プログラム内の分岐構造に起因する組合せ爆発を起こし、膨大な数のテスト実行を行わなければならないため、テスト完了までの時間が非常に長くなる。従って、実質的にはテストが完了しているのに長時間テスト実行を続けることになるため、効率的ではない。 Therefore, when it is sufficient to achieve the reference value for branch coverage or the like, if symbolic execution is performed as in the past, test execution that is not originally performed is performed. If this is a simple program like the example of FIG. 1, there is no problem. However, in the case of a program of a general size, a combination explosion caused by a branch structure in the program occurs, and a huge number of test executions must be performed. Therefore, the time until completion of the test becomes very long. Therefore, since the test execution is continued for a long time even though the test is substantially completed, it is not efficient.
従って、本技術の目的は、一側面によれば、シンボリック実行を用いてより効率的にプログラムのテストを行うための技術を提供することである。 Therefore, the objective of this technique is to provide the technique for testing a program more efficiently using symbolic execution according to one side surface.
本繰返しシンボリック実行方法は、シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、分析対象プログラムのコード網羅率をシンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、実行結果格納部に格納されているコード網羅率が所定の基準を満たすか判断するステップと、コード網羅率が所定の基準を満たすと判断された場合、分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップとを含む。 In this iterative symbolic execution method, the symbolic execution unit that executes symbolic execution repeatedly performs symbolic execution while changing the variables to be symbolized so as to cover all variables defined in the analysis target program. The first execution step, the acquisition step of acquiring the code coverage of the analysis target program from the symbolic execution unit and storing it in the execution result storage unit, and the code coverage rate stored in the execution result storage unit satisfy a predetermined standard And a step of storing, in the output data storage unit, data indicating that the test of the analysis target program is completed when it is determined that the code coverage rate satisfies a predetermined criterion.
シンボリック実行を用いてより効率的にプログラムのテストを行うことができるようになる。 It becomes possible to test the program more efficiently by using symbolic execution.
図3に、本実施の形態に係るシステム概要図を示す。図3の例では、例えばLAN(Local Area Network)等のネットワークを介して繰返し実行支援装置1と、シンボリック実行装置3と、判定装置5とを含む。
FIG. 3 shows a system outline diagram according to the present embodiment. The example of FIG. 3 includes a repeated
繰返し実行支援装置1は、プログラム格納部101と、既定値格納部102と、抽出部103と、実行データ格納部104と、実行パターン生成部105と、ドライバ生成部106と、ドライバ格納部107と、実行要求部108と、網羅率格納部109と、解析部110と、判定要求部111と、充足値格納部112と、出力部113と、出力データ格納部114とを含む。
The repeated
抽出部103は、プログラム格納部101に格納されている分析対象のプログラム及び既定値格納部102に格納されているデータを用いて処理を行い、処理結果を実行データ格納部104に格納する。実行パターン生成部105は、実行データ格納部104に格納されているデータを用いて処理を行い実行パターンを生成してドライバ格納部107に格納したり、ドライバ生成部106にドライバの生成を指示する処理を行う。ドライバ生成部106は、ドライバ格納部107に格納されている実行パターンに対応するドライバコードを生成し、ドライバ格納部107に格納する。実行要求部108は、ドライバ格納部107に格納されているデータを用いてシンボリック実行装置3にシンボリック実行の実行要求を送信する処理等を行い、処理結果を実行データ格納部104及び網羅率格納部109に格納する。解析部110は、網羅率格納部109及び実行データ格納部104に格納されているデータを用いて処理を行い、処理結果を判定要求部111に通知したり、処理結果を出力データ格納部113に格納する処理等を行う。判定要求部111は、判定装置5に充足値の生成指示を送信したり、実行データ格納部104に格納されているデータを更新する処理等を行う。出力部114は、出力データ格納部113に格納されているデータを表示装置等に表示する処理を行う。
The
シンボリック実行装置3は、実行部31と、網羅率算出部32とを含む。実行部31は、既存のシンボリック実行を行うモジュールであり、例えばJava(登録商標) PathFinderの拡張であるSymbolic PathFinderなどであってもよい。網羅率算出部32は、実行部31によるシンボリック実行の実行結果を用いて、コード網羅率(例えばブランチカバレッジ)を算出する。網羅率算出部32は、例えばEclEmma(http://www.eclemma.org/)を用いればよい。なお、シンボリック実行部31及び網羅率算出部32は、例えばeclipse(http://www.eclipse.org/)上で実現するようにしてもよい。
The symbolic execution device 3 includes an execution unit 31 and a coverage
判定装置5は、充足可能性判定を行う装置(例えばSAT(SATisfiability)ソルバやSMT(Satisfiability Modulo Theory)ソルバ等)であり、繰返し実行支援装置1における判定要求部111からの要求に応じてパスコンディション(論理制約とも呼ばれる)を満たす充足値を生成する。例えば「(10≧x)and(5≦x)」というパスコンディションを充足する充足値の生成を要求された場合、充足値として例えば「7」を生成する。
The determination device 5 is a device that performs satisfiability determination (for example, SAT (SATisfiability) solver, SMT (Satisfiability Modulo Theory) solver, etc.), and a path condition according to a request from the determination request unit 111 in the repeated
図4に、既定値格納部102に格納されているデータの一例を示す。図4の例では、変数の型の列と、既定値の列とが含まれる。
FIG. 4 shows an example of data stored in the default
なお、本実施の形態の処理の対象となる分析対象プログラムは、図5に示したプログラムであるとする。このプログラムの制御構造及び制御フローは、図1及び図2に示したものである。本実施の形態では、図5に示したプログラムのブランチカバレッジが所定基準(例えば100%)に達するようにシンボリック実行を行う。 Assume that the analysis target program to be processed in this embodiment is the program shown in FIG. The control structure and control flow of this program are those shown in FIGS. In the present embodiment, symbolic execution is performed so that the branch coverage of the program shown in FIG. 5 reaches a predetermined standard (for example, 100%).
次に、図6乃至図21を用いて、図3に示したシステムの処理内容について説明する。まず、抽出部103は、プログラム格納部101に格納されている分析対象のプログラム(図5)から、当該分析対象のプログラムに定義されている変数及び当該変数の型を抽出し、実行データ格納部104に格納する(図6:ステップS1)。
Next, processing contents of the system shown in FIG. 3 will be described with reference to FIGS. First, the
図7に、ステップS1が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図7の例では、変数と、変数の型とが格納されるようになっている。
FIG. 7 shows an example of data stored in the execution
また、抽出部103は、ステップS1において抽出された変数の型に対応する具体値を既定値格納部102(図4)から特定し、実行データ格納部104に格納する(ステップS3)。
Further, the
図8に、ステップS3が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図8の例では、変数と、変数の型と、具体値とが格納されるようになっている。
FIG. 8 shows an example of data stored in the execution
そして、実行パターン生成部105は、実行データ格納部104(図8)に格納されている変数の各々について実行パターンを生成し、ドライバ格納部107に格納する(ステップS5)。
Then, the execution
図9に、ステップS5が行われた時点でドライバ格納部107に格納されているデータの一例を示す。図9の例に示したように、本実施の形態では、分析対象のプログラムに定義されている変数のうち1つをシンボル化し、残りの変数にはステップS3において特定した具体値を設定する。1行目の実行パターンは、変数aがシンボル化され、変数bには具体値「0」が設定された実行パターンである。2行目の実行パターンは、変数bがシンボル化され、変数aには具体値「0」が設定された実行パターンである。
FIG. 9 shows an example of data stored in the
そして、ドライバ生成部106は、ドライバ格納部107(図9)に格納されている実行パターンの各々に対応するドライバコードを生成し、ドライバ格納部107に格納する(ステップS7)。
Then, the
図10に、ステップS7が行われた時点でドライバ格納部107に格納されているデータの一例を示す。図10の例では、実行パターンと、ドライバコードとが格納されるようになっている。ここでは、「int a=$,int b=0」という実行パターンに対してはドライバコード1が生成され、「int a=0,int b=$」という実行パターンに対してはドライバコード2が生成されている。
FIG. 10 shows an example of data stored in the
図11に、ドライバコード1及びドライバコード2の一例を示す。本実施の形態では、図11に示したようなドライバコードと、分析対象のプログラムとを用いて、シンボリック実行装置3においてシンボリック実行を行う。
FIG. 11 shows an example of the
図6の説明に戻り、実行要求部108は、網羅率算出処理を実施する(ステップS9)。網羅率算出処理については、図12乃至図14を用いて説明する。
Returning to the description of FIG. 6, the
まず、実行要求部108は、ドライバ格納部107に格納されているドライバコードのうち未処理のドライバコードと、プログラム格納部101に格納されている分析対象のプログラムとを含む実行要求をシンボリック実行装置3に送信する(図12:ステップS21)。
First, the
これに応じ、シンボリック実行装置3における実行部31は、シンボリック実行を実施する。シンボリック実行では、プログラム内に定義されているパスコンディションのうちシンボル化変数が関連するパスコンディションを通過する毎に当該パスコンディションを蓄積するようになっている。例えば図11に示したドライバコード1と分析対象プログラムとを用いてシンボリック実行を行った場合、「a>0」及び「a≦0」というパスコンディションを蓄積する。そして、実行部31は、蓄積されたパスコンディションを含む実行結果を繰返し実行支援装置1に送信する。
In response to this, the execution unit 31 in the symbolic execution device 3 performs symbolic execution. In the symbolic execution, the path condition is accumulated every time the symbolized variable passes through the associated path condition among the path conditions defined in the program. For example, when symbolic execution is performed using the
また、実行部31によりシンボリック実行が行われると、網羅率算出部32は、ブランチカバレッジを算出する。シンボリック実行装置3では、シンボリック実行時に通過したパスコンディションを実行部31が管理テーブル(図示せず)にて管理しており、当該管理テーブルを用いて分析対象のプログラムの制御フローを把握できるようになっている。網羅率算出部32は、この管理テーブルを用いて分析対象のプログラムの全分岐の数を取得する。図5のプログラムの場合には、全分岐の数は6となる。一方で、図5に示した分析対象プログラムに対してドライバコード1を用いてシンボリック実行を行うと、分岐B1、B2及びB6という3つの分岐を実行することができる。従って、ブランチカバレッジは3/6*100≒50(%)となる。
Further, when symbolic execution is performed by the execution unit 31, the coverage
そして、ドライバコード1を用いてシンボリック実行を行った後、さらにドライバコード2を用いてシンボリック実行を行った場合には、さらに分岐B2、B3、B5及びB6を実行することができる。この場合、ドライバコード1を用いたシンボリック実行の結果と併せると、分岐B1、B2、B3、B5及びB6を実行することができたので、ブランチカバレッジは5/6*100≒83(%)となる。網羅率算出部32は、このようにして算出したブランチカバレッジを繰返し実行支援装置1に送信する。なお、網羅率算出部32は、実行した分岐のデータをメインメモリ等の記憶装置に格納しておき、後に再度ブランチカバレッジを算出する際に用いる。
When symbolic execution is performed using the
一方、繰返し実行支援装置1の実行要求部108は、パスコンディションをシンボリック実行装置3から受信し、実行データ格納部104に格納すると共に、ブランチカバレッジをシンボリック実行装置3から受信し、網羅率格納部109に格納する(ステップS23)。なお、網羅率格納部109には、既に受信したブランチカバレッジを更新するように新たに受信したブランチカバレッジを格納する。
On the other hand, the
図13に、ステップS23が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図13の例では、変数と、型と、具体値と、パスコンディションとが格納されるようになっている。
FIG. 13 shows an example of data stored in the execution
そして、実行要求部108は、ドライバ格納部107に未処理のドライバコードが有るか判断する(ステップS25)。未処理のドライバコードがあると判断された場合(ステップS25:Yesルート)、未処理のドライバコードについて処理するため、ステップS21に戻る。一方、ドライバ格納部107に未処理のドライバコードが無いと判断された場合(ステップS25:Noルート)、元の処理に戻る。
Then, the
以上のようにしてブランチカバレッジを取得することにより、分析対象のプログラムのテストを完了するか判断できるようになる。また、シンボル化する変数が1つであるので、例えば乗算等の非線形演算を含むプログラムであってもシンボリック実行によるプログラムテストを行うことができるようになる。 By acquiring the branch coverage as described above, it is possible to determine whether or not the test of the analysis target program is completed. In addition, since there is one variable to be symbolized, a program test by symbolic execution can be performed even for a program including a nonlinear operation such as multiplication.
図6の説明に戻り、解析部110は、網羅率格納部109に格納されているブランチカバレッジが100%であるか判断する(ステップS11)。なお、100%ではなく、予め定められた所定の基準値以上であるか判断するようにしてもよい。
Returning to the description of FIG. 6, the
そして、ブランチカバレッジが100%である場合(ステップS11:Yesルート)、解析部110は、プログラムテストが完了したことを表すテスト完了メッセージを生成し、出力データ格納部113に格納する(ステップS17)。そして、出力部114は、出力データ格納部113に格納されているテスト完了メッセージを表示装置に表示する。そして処理を終了する。
When the branch coverage is 100% (step S11: Yes route), the
一方、ブランチカバレッジが100%ではない場合(ステップS11:Noルート)、解析部110は、解析処理を実施する(ステップS13)。解析処理については、図14及び図15を用いて説明する。
On the other hand, when the branch coverage is not 100% (step S11: No route), the
まず、解析部110は、実行データ格納部104に格納されている変数のうち未処理の変数(以下、処理対象の変数と呼ぶ)を1つ特定する(図14:ステップS41)。そして、解析部110は、実行データ格納部104に、処理対象の変数に対応するパスコンディションが格納されているか判断する(ステップS43)。処理対象の変数に対応するパスコンディションが格納されていないと判断された場合(ステップS43:Noルート)、解析部110は、処理対象の変数に対応付けて判定フラグ「−1」を実行データ格納部104に格納する(ステップS45)。
First, the
一方、処理対象の変数に対応するパスコンディションが格納されていると判断された場合(ステップS43:Yesルート)、解析部110は、処理対象の変数に対応するパスコンディションのうち未処理のパスコンディション(以下、処理対象のパスコンディションと呼ぶ)を1つ特定する(ステップS47)。
On the other hand, when it is determined that a path condition corresponding to the variable to be processed is stored (step S43: Yes route), the
そして、解析部110は、処理対象の変数に設定した具体値を実行データ格納部104から特定し、当該具体値が処理対象のパスコンディションを充足するか判断する(ステップS49)。処理対象の変数に設定した具体値が処理対象のパスコンディションを充足すると判断された場合(ステップS49:Yesルート)、解析部110は、処理対象のパスコンディションに対応付けて判定フラグ「true」を実行データ格納部104に格納する(ステップS51)。一方、処理対象の変数に設定した具体値が処理対象のパスコンディションを充足しないと判断された場合(ステップS49:Noルート)、解析部110は、処理対象のパスコンディションに対応付けて判定フラグ「false」を実行データ格納部104に格納する(ステップS53)。
Then, the
図15に、ステップS53が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図15の例では、変数と、型と、具体値と、パスコンディションと、判定フラグとが格納されるようになっている。
FIG. 15 shows an example of data stored in the execution
そして、解析部110は、処理対象の変数について未処理のパスコンディションが有るか判断する(ステップS55)。未処理のパスコンディションが有ると判断された場合(ステップS55:Yesルート)、未処理のパスコンディションについて処理するため、ステップS47の処理に戻る。
Then, the
一方、未処理のパスコンディションが無いと判断された場合(ステップS55:Noルート)、解析部110は、実行データ格納部104に未処理の変数が有るか判断する(ステップS57)。未処理の変数が有ると判断された場合(ステップS57:Yesルート)、未処理の変数について処理するため、ステップS41の処理に戻る。
On the other hand, when it is determined that there is no unprocessed path condition (step S55: No route), the
一方、未処理の変数が無いと判断された場合(ステップS57:Noルート)、解析部110は、判定フラグ「false」が対応付けられているパスコンディションが実行データ格納部104に格納されているか判断する(ステップS59)。判定フラグ「false」が対応付けられているパスコンディションが実行データ格納部104に格納されていないと判断された場合(ステップS59:Noルート)、後で説明する具体値設定処理を行うことはできないため、処理は端子Aを介して終了する。一方、判定フラグ「false」が対応付けられているパスコンディションが実行データ格納部104に格納されていると判断された場合(ステップS59:Yesルート)、元の処理に戻る。
On the other hand, if it is determined that there is no unprocessed variable (step S57: No route), the
以上のような処理を実施することにより、既に行われたシンボリック実行において設定されていた具体値によっては充足できないパスコンディションを特定することができるようになる。 By performing the processing as described above, it becomes possible to specify a path condition that cannot be satisfied by the specific value set in the symbolic execution that has already been performed.
図6の説明に戻り、判定要求部111は、具体値設定処理を実施する(ステップS15)。具体値設定処理については、図16乃至図18を用いて説明する。 Returning to the description of FIG. 6, the determination requesting unit 111 performs a specific value setting process (step S <b> 15). The specific value setting process will be described with reference to FIGS.
まず、判定要求部111は、実行データ格納部104から未処理の変数(以下、処理対象の変数と呼ぶ)を1つ特定する(図16:ステップS71)。そして、判定要求部111は、処理対象の変数に判定フラグ「−1」が設定されているか判断する(ステップS73)。すなわち、処理対象の変数に関連するパスコンディションが存在するか判断する。処理対象の変数に判定フラグ「−1」が設定されていると判断された場合(ステップS73:Yesルート)、ステップS77の処理に移行する。 First, the determination request unit 111 specifies one unprocessed variable (hereinafter referred to as a variable to be processed) from the execution data storage unit 104 (FIG. 16: step S71). Then, the determination request unit 111 determines whether or not the determination flag “−1” is set in the variable to be processed (step S73). That is, it is determined whether there is a path condition related to the variable to be processed. When it is determined that the determination flag “−1” is set in the variable to be processed (step S73: Yes route), the process proceeds to step S77.
一方、処理対象の変数に判定フラグ「−1」が設定されていないと判断された場合(ステップS73:Noルート)、判定要求部111は、処理対象の変数に関連するパスコンディションに判定フラグ「false」が設定されているか判断する(ステップS75)。処理対象の変数に関連するパスコンディションに判定フラグ「false」が設定されていないと判断された場合(ステップS75:Noルート)、判定要求部111は、元の具体値(ステップS3において特定した具体値)を処理対象の変数に対応付けて充足値格納部112に格納する(ステップS77)。
On the other hand, when it is determined that the determination flag “−1” is not set for the variable to be processed (step S <b> 73: No route), the determination request unit 111 determines that the determination flag “ It is determined whether “false” is set (step S75). When it is determined that the determination flag “false” is not set in the path condition related to the variable to be processed (step S75: No route), the determination request unit 111 determines the original specific value (the specific specified in step S3). Value) is stored in the satisfaction
一方、処理対象の変数に関連するパスコンディションに判定フラグ「false」が設定されていると判断された場合(ステップS75:Yesルート)、判定要求部111は、処理対象の変数、当該変数の型及び判定フラグが「false」であるパスコンディションを含む判定要求を判定装置5に送信する(ステップS79)。 On the other hand, when it is determined that the determination flag “false” is set in the path condition related to the variable to be processed (step S75: Yes route), the determination request unit 111 displays the variable to be processed and the type of the variable And the determination request | requirement containing the path condition whose determination flag is "false" is transmitted to the determination apparatus 5 (step S79).
なお、ステップS79の処理に応じ、判定装置5は、受信したパスコンディションを充足する具体値を生成する処理を行う。例えば型が「int」(整数)である変数aについてパスコンディション「a>0」を充足する具体値を生成する場合、判定装置5は例えば「1」を生成する。そして、判定装置5は、生成した具体値を含む判定結果を繰返し実行支援装置1に送信する。
In addition, according to the process of step S79, the determination apparatus 5 performs the process which produces | generates the specific value which satisfies the received path condition. For example, when generating a specific value that satisfies the path condition “a> 0” for the variable a whose type is “int” (integer), the determination device 5 generates, for example, “1”. Then, the determination device 5 transmits the determination result including the generated specific value to the repeated
一方、繰返し実行支援装置1の判定要求部111は、生成された具体値を含む判定結果を判定装置5から受信し(ステップS81)、充足値格納部112に格納する(ステップS83)。
On the other hand, the determination request unit 111 of the repeated
図17に、ステップS83が行われた時点で充足値格納部112に格納されているデータの一例を示す。図17の例では、変数と、変数の型と、パスコンディションと、具体値とが格納されるようになっている。なお、ステップS77の処理が行われた変数については、パスコンディションの列にはデータは格納されない。
FIG. 17 shows an example of data stored in the sufficiency
そして、判定要求部111は、実行データ格納部104に未処理の変数が有るか判断する(ステップS85)。未処理の変数が有ると判断された場合(ステップS85:Yesルート)、未処理の変数について処理を実施するため、ステップS71の処理に戻る。一方、未処理の変数が無いと判断された場合(ステップS85:Noルート)、判定要求部111は、充足値格納部112に格納されている変数、型及び具体値で実行データ格納部104を更新する(ステップS87)。そして、元の処理に戻る。
Then, the determination request unit 111 determines whether there is an unprocessed variable in the execution data storage unit 104 (step S85). When it is determined that there is an unprocessed variable (step S85: Yes route), the process returns to the process of step S71 in order to perform the process on the unprocessed variable. On the other hand, when it is determined that there is no unprocessed variable (step S85: No route), the determination request unit 111 sets the execution
図18に、ステップS87が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図18の例では、変数と、変数の型と、具体値とが格納されるようになっている。
FIG. 18 shows an example of data stored in the execution
以上のようにして生成された具体値を用いて再度シンボリック実行を行えば、既に行われたシンボリック実行によっては実行できなかったパスを実行できるようになり、コード網羅率を高くすることができるようになる。 If symbolic execution is performed again using the specific values generated as described above, a path that could not be executed by symbolic execution already performed can be executed, and the code coverage rate can be increased. become.
具体値設定処理(S15)が行われると、処理はステップS5に戻り、新たに設定した具体値を用いて再び上で述べたような処理が行われる。以下では、処理がステップS5に戻った後、ステップS11において「ブランチカバレッジが100%」であると判断されるまでに行われる処理を簡単に説明する。 When the specific value setting process (S15) is performed, the process returns to step S5, and the process as described above is performed again using the newly set specific value. In the following, the process performed after the process returns to step S5 and before it is determined in step S11 that “branch coverage is 100%” will be briefly described.
まず、実行パターン生成部105は、実行データ格納部104(図18)に格納されている変数の各々について実行パターンを生成し、ドライバ格納部107に格納する(ステップS5)。
First, the execution
図19に、ステップS5の処理が行われた時点でドライバ格納部107に格納されているデータの一例を示す。1行目の実行パターンは、変数aがシンボル化され、変数bには具体値「1」(ステップS15において生成された具体値)が設定された実行パターンである。2行目の実行パターンは、変数bがシンボル化され、変数aには具体値「1」(ステップS15において生成された具体値)が設定された実行パターンである。
FIG. 19 shows an example of data stored in the
そして、ドライバ生成部106は、ドライバ格納部107(図19)に格納されている実行パターンの各々に対応するドライバコードを生成し、ドライバ格納部107に格納する(ステップS7)。
Then, the
図20に、ステップS7が行われた時点でドライバ格納部107に格納されているデータの一例を示す。図20の例では、実行パターンと、ドライバコードとが格納されるようになっている。ここでは、「int a=$,int b=1」という実行パターンにはドライバコード3が生成され、「int a=1,int b=$」という実行パターンにはドライバコード4が生成されている。なお、図21は、ドライバコード3及びドライバコード4の一例を示す図である。
FIG. 20 shows an example of data stored in the
そして、実行要求部108は、網羅率算出処理を実施する(ステップS9)。網羅率算出処理については、図12乃至図14を用いて説明したとおりである。ここでは、ドライバコード3を用いてシンボリック実行を行うと、分岐B1、B2、B3、B4及びB5を実行することができる。また、ドライバコード4を用いてシンボリック実行を行うと、分岐B1、B3、B4及びB6を実行することができる。そして、再度網羅率を算出する際には、上で述べたように、既に行ったシンボリック実行の実行結果と今回行ったシンボリック実行の実行結果とを用いる。既に行ったシンボリック実行では分岐B1、B2、B3、B5及びB6を実行しており、今回行ったシンボリック実行ではB4を新たに実行している。従って、ブランチカバレッジは6/6*100=100(%)となる。
Then, the
そして、解析部110は、ブランチカバレッジが100%であるか判断する(ステップS11)。ここでは、ブランチカバレッジが100%であると判断されるので(ステップS11:Yesルート)、処理はステップS17を経て終了する。
Then, the
以上のような処理を実施することにより、ブランチカバレッジが基準値を満たすようなテストをシンボリック実行を用いて効率的に行うことができるようになる。 By performing the processing as described above, it is possible to efficiently perform a test such that the branch coverage satisfies the reference value using symbolic execution.
以上本技術の一実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、上で説明した繰返し実行支援装置1及びシンボリック実行装置3の機能ブロック図は必ずしも実際のプログラムモジュール構成に対応するものではない。また、1台ではなく複数台のコンピュータで機能を分担するようにしてもよい。
Although one embodiment of the present technology has been described above, the present technology is not limited to this. For example, the functional block diagrams of the repeated
また、上で説明した各テーブルの構成は一例であって、必ずしも上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。 Further, the configuration of each table described above is an example, and the configuration as described above is not necessarily required. Further, in the processing flow, the processing order can be changed if the processing result does not change. Further, it may be executed in parallel.
また、上で述べた例では、ブランチカバレッジを100%にするための処理について説明したが、ステートメントカバレッジやコンディションカバレッジ等についても同様の処理にて対応することができる。 In the example described above, the processing for setting the branch coverage to 100% has been described. However, the same processing can be applied to statement coverage, condition coverage, and the like.
また、繰返し実行支援装置1、シンボリック実行装置3及び判定装置5は一体であってもよい。
Further, the repeated
なお、上で述べた繰返し実行支援装置1、シンボリック実行装置3及び判定装置5は、コンピュータ装置であって、図22に示すように、メモリ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及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
The repetitive
なお、図3に示した抽出部103及び実行パターン生成部105等の各処理部は、CPU2503及びプログラムの組み合わせ、すなわち、CPU2503がプログラムを実行することにより実現してもよい。より具体的には、CPU2503は、HDD2505又はメモリ2501に記憶されたプログラムに従った動作を行うことで、上で述べたような処理部として機能してもよい。
Note that the processing units such as the
また、図3に示したプログラム格納部101及び既定値格納部102等の各データ格納部は、図22におけるメモリ2501やHDD2505等として実現してもよい。
Each data storage unit such as the
以上述べた本技術の実施の形態をまとめると以下のようになる。 The embodiments of the present technology described above are summarized as follows.
本繰返しシンボリック実行方法は、(A)シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、(B)分析対象プログラムのコード網羅率(例えばブランチカバレッジやステートメントカバレッジ等)をシンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、(C)実行結果格納部に格納されているコード網羅率が所定の基準を満たすか判断するステップと、(D)コード網羅率が所定の基準を満たすと判断された場合、分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップとを含む。 This repetitive symbolic execution method is (A) Symbolic execution unit that executes symbolic execution Iterative symbolic execution while changing variables to be symbolized so as to cover all variables defined in the analysis target program (B) an acquisition step of acquiring a code coverage rate (for example, branch coverage or statement coverage) of the analysis target program from the symbolic execution unit and storing it in the execution result storage unit; A step of determining whether or not the code coverage rate stored in the execution result storage unit satisfies a predetermined criterion; and (D) when it is determined that the code coverage rate satisfies a predetermined criterion, the test of the analysis target program is completed Storing data representing this in the output data storage unit.
上で述べた方法では、従来のように全ての変数をシンボル化して一度にシンボリック実行を実施するのではなく、カバレッジは低いが高速に処理可能な個別のシンボリック実行を繰り返し実行するようになっている。但し、個別のシンボリック実行のカバレッジを累積した結果であるコード網羅率が所定の基準を満たせばテストとして十分であり、全ての変数をシンボル化して一度にシンボリック実行を行う場合のように、当該シンボリック実行内において余分なテストを行ってしまうというような事態が抑制されることが期待される。従って、プログラムのテストが効率化される。 In the method described above, instead of symbolizing all variables and executing symbolic execution at once as in the past, individual symbolic execution that has low coverage but can be processed at high speed is executed repeatedly. Yes. However, if the code coverage rate, which is the result of accumulating the coverage of individual symbolic executions, meets the predetermined criteria, it is sufficient as a test, and the symbolic execution is performed as if all variables were symbolized and executed at once. It is expected that the situation where an excessive test is performed in the execution is suppressed. Therefore, the test of the program is made efficient.
また、上で述べた取得ステップが、第1実行ステップにおけるシンボリック実行により得られるパスコンディションのデータをシンボリック実行部から取得し、実行結果格納部に格納するステップを含むようにしてもよい。そして、上で述べた本方法は、(E)実行結果格納部に格納されているパスコンディションの各々について、分析対象プログラムに定義されている変数毎に当該変数に設定した具体値が格納されているデータ格納部から、当該パスコンディションに関連する変数に設定した具体値を特定し、特定された当該具体値が当該パスコンディションを充足するという条件を満たすか判断する判断ステップと、(F)判断ステップにおいて条件を満たさないと判断されたパスコンディションを充足する具体値を生成する生成ステップと、(G)シンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ条件を満たさないと判断されたパスコンディションに関連する変数に具体値を設定する場合には生成ステップにおいて生成された具体値を設定して繰り返しシンボリック実行を行わせる第2実行ステップと、(H)第1実行ステップの実行結果と第2実行ステップの実行結果とを用いて算出されたコード網羅率である累積コード網羅率をシンボリック実行部から取得し、実行結果格納部に格納するステップと、(I)実行結果格納部に格納されている累積コード網羅率が所定の基準を満たすか判断するステップと、(J)累積コード網羅率が所定の基準を満たすと判断された場合、分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップとをさらに含むようにしてもよい。このようにすれば、既に行ったシンボリック実行によっては実行できていないパスを実行できるようになるので、累積コード網羅率を高くすることができる。 Further, the acquisition step described above may include a step of acquiring path condition data obtained by symbolic execution in the first execution step from the symbolic execution unit and storing the data in the execution result storage unit. In the method described above, (E) for each path condition stored in the execution result storage unit, a specific value set in the variable is stored for each variable defined in the analysis target program. A determination step of identifying a specific value set in a variable related to the path condition from a data storage unit and determining whether the specified specific value satisfies a condition that the path condition is satisfied; (F) determination A generation step for generating a specific value that satisfies the path condition determined not to satisfy the condition in the step, and (G) a symbolic execution unit that covers all variables defined in the analysis target program Variables related to path conditions that are determined not to satisfy the conditions while changing the variables to be symbolized In the case of setting a value, a second execution step in which the specific value generated in the generation step is set and symbolic execution is repeatedly performed; (H) the execution result of the first execution step and the execution result of the second execution step; A cumulative code coverage rate that is a code coverage rate calculated by using the symbolic execution unit and storing it in the execution result storage unit; and (I) a cumulative code coverage rate stored in the execution result storage unit is A step of determining whether or not a predetermined standard is satisfied; and (J) when it is determined that the accumulated code coverage rate satisfies the predetermined standard, data indicating that the test of the analysis target program is completed is stored in the output data storage unit A step may be further included. In this way, a path that cannot be executed by the symbolic execution that has already been performed can be executed, so that the cumulative code coverage rate can be increased.
また、上で述べた第1実行ステップ及び第2実行ステップにおいて、シンボル化対象の変数を1つとし、分析対象プログラムに定義されている全ての変数をカバーするように当該シンボル化対象の変数を変化させるようにしてもよい。このように、シンボル化対象の変数を1つとすれば、非線形演算(例えば変数同士の乗算等)を含むプログラムであってもシンボリック実行を行うことができるようになる。 Further, in the first execution step and the second execution step described above, one variable to be symbolized is set, and the variable to be symbolized is covered so as to cover all variables defined in the analysis target program. It may be changed. In this way, if there is one variable to be symbolized, it is possible to perform symbolic execution even for a program that includes a non-linear operation (for example, multiplication of variables).
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。 A program for causing a computer to perform the processing according to the above method can be created. The program can be a computer-readable storage medium such as a flexible disk, a CD-ROM, a magneto-optical disk, a semiconductor memory, a hard disk, or the like. It is stored in a storage device. The intermediate processing result is temporarily stored in a storage device such as a main memory.
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。 The following supplementary notes are further disclosed with respect to the embodiments including the above examples.
(付記1)
シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
を含み、コンピュータにより実行される繰返しシンボリック実行方法。
(Appendix 1)
A first execution step in which a symbolic execution unit that performs symbolic execution repeatedly performs symbolic execution while changing variables to be symbolized so as to cover all variables defined in the analysis target program;
An acquisition step of acquiring the code coverage of the analysis target program from the symbolic execution unit and storing it in the execution result storage unit;
Determining whether the code coverage rate stored in the execution result storage unit satisfies a predetermined criterion;
When it is determined that the code coverage rate satisfies the predetermined criterion, storing data indicating that the test of the analysis target program is completed in an output data storage unit;
A symbolic execution method that is executed by a computer.
(付記2)
前記取得ステップが、
前記第1実行ステップにおけるシンボリック実行により得られるパスコンディションのデータを前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップ
を含み、
前記実行結果格納部に格納されているパスコンディションの各々について、前記分析対象プログラムに定義されている変数毎に当該変数に設定した具体値が格納されているデータ格納部から、当該パスコンディションに関連する変数に設定した具体値を特定し、特定された当該具体値が当該パスコンディションを充足するという条件を満たすか判断する判断ステップと、
前記判断ステップにおいて前記条件を満たさないと判断されたパスコンディションを充足する具体値を生成する生成ステップと、
前記シンボリック実行部に対して、前記分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させ、前記条件を満たさないと判断されたパスコンディションに関連する変数に具体値を設定する場合には前記生成ステップにおいて生成された具体値を設定して繰り返しシンボリック実行を行わせる第2実行ステップと、
前記第1実行ステップの実行結果と前記第2実行ステップの実行結果とを用いて算出されたコード網羅率である累積コード網羅率を前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップと、
前記実行結果格納部に格納されている前記累積コード網羅率が前記所定の基準を満たすか判断するステップと、
前記累積コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを前記出力データ格納部に格納するステップと、
をさらに含む付記1記載の繰返しシンボリック実行方法。
(Appendix 2)
The obtaining step comprises
Including acquiring path condition data obtained by symbolic execution in the first execution step from the symbolic execution unit and storing the data in the execution result storage unit;
For each of the path conditions stored in the execution result storage unit, from the data storage unit storing the specific value set for the variable for each variable defined in the analysis target program, related to the path condition Determining a specific value set in the variable to be determined, and determining whether the specified specific value satisfies a condition that the path condition is satisfied;
A generating step for generating a specific value satisfying the path condition determined not to satisfy the condition in the determining step;
For the symbolic execution unit, the variable to be symbolized is changed so as to cover all variables defined in the analysis target program, and the variable related to the path condition determined not to satisfy the condition is set. A second execution step for setting a specific value and setting the specific value generated in the generation step to perform symbolic execution repeatedly;
The cumulative code coverage, which is the code coverage calculated using the execution result of the first execution step and the execution result of the second execution step, is acquired from the symbolic execution unit and stored in the execution result storage unit. Steps,
Determining whether the cumulative code coverage rate stored in the execution result storage unit satisfies the predetermined criterion;
When it is determined that the cumulative code coverage rate satisfies the predetermined criterion, storing data indicating that the test of the analysis target program is completed in the output data storage unit;
The repetitive symbolic execution method according to
(付記3)
前記第1実行ステップ及び前記第2実行ステップにおいて、シンボル化対象の変数を1つとし、前記分析対象プログラムに定義されている全ての変数をカバーするように当該シンボル化対象の変数を変化させる
ことを特徴とする付記2記載の繰返しシンボリック実行方法。
(Appendix 3)
In the first execution step and the second execution step, there is one variable to be symbolized, and the variable to be symbolized is changed so as to cover all variables defined in the analysis target program. The iterative symbolic execution method according to supplementary note 2, characterized by:
(付記4)
シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる実行部と、
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得部と、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断し、前記コード網羅率が前記所定の基準を満たすと判断された場合に、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納する判断部と、
を有する繰返しシンボリック実行装置。
(Appendix 4)
An execution unit that repeatedly performs symbolic execution while changing the variables to be symbolized so as to cover all the variables defined in the analysis target program with respect to the symbolic execution unit that performs symbolic execution,
An acquisition unit that acquires the code coverage of the analysis target program from the symbolic execution unit and stores the code coverage rate in an execution result storage unit;
It is determined whether the code coverage rate stored in the execution result storage unit satisfies a predetermined criterion, and when it is determined that the code coverage rate satisfies the predetermined criterion, the test of the analysis target program is completed A determination unit that stores data representing that in the output data storage unit;
A recursive symbolic execution device.
(付記5)
シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
を、コンピュータに実行させるための繰返しシンボリック実行プログラム。
(Appendix 5)
A first execution step in which a symbolic execution unit that performs symbolic execution repeatedly performs symbolic execution while changing variables to be symbolized so as to cover all variables defined in the analysis target program;
An acquisition step of acquiring the code coverage of the analysis target program from the symbolic execution unit and storing it in the execution result storage unit;
Determining whether the code coverage rate stored in the execution result storage unit satisfies a predetermined criterion;
When it is determined that the code coverage rate satisfies the predetermined criterion, storing data indicating that the test of the analysis target program is completed in an output data storage unit;
Is a repeated symbolic execution program for causing a computer to execute.
1 繰返し実行支援装置 101 プログラム格納部
102 既定値格納部 103 抽出部
104 実行データ格納部 105 実行パターン生成部
106 ドライバ生成部 107 ドライバ格納部
108 実行要求部 109 網羅率格納部
110 解析部 111 判定要求部
112 充足値格納部 113 出力データ格納部
114 出力部 3 シンボリック実行装置
31 実行部 32 網羅率算出部
5 判定装置
DESCRIPTION OF
Claims (5)
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
を含み、コンピュータにより実行される繰返しシンボリック実行方法。 A first execution step in which a symbolic execution unit that performs symbolic execution repeatedly performs symbolic execution while changing variables to be symbolized so as to cover all variables defined in the analysis target program;
An acquisition step of acquiring the code coverage of the analysis target program from the symbolic execution unit and storing it in the execution result storage unit;
Determining whether the code coverage rate stored in the execution result storage unit satisfies a predetermined criterion;
When it is determined that the code coverage rate satisfies the predetermined criterion, storing data indicating that the test of the analysis target program is completed in an output data storage unit;
A symbolic execution method that is executed by a computer.
前記第1実行ステップにおけるシンボリック実行により得られるパスコンディションのデータを前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップ
を含み、
前記実行結果格納部に格納されているパスコンディションの各々について、前記分析対象プログラムに定義されている変数毎に当該変数に設定した具体値が格納されているデータ格納部から、当該パスコンディションに関連する変数に設定した具体値を特定し、特定された当該具体値が当該パスコンディションを充足するという条件を満たすか判断する判断ステップと、
前記判断ステップにおいて前記条件を満たさないと判断されたパスコンディションを充足する具体値を生成する生成ステップと、
前記シンボリック実行部に対して、前記分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させ、前記条件を満たさないと判断されたパスコンディションに関連する変数に具体値を設定する場合には前記生成ステップにおいて生成された具体値を設定して繰り返しシンボリック実行を行わせる第2実行ステップと、
前記第1実行ステップの実行結果と前記第2実行ステップの実行結果とを用いて算出されたコード網羅率である累積コード網羅率を前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップと、
前記実行結果格納部に格納されている前記累積コード網羅率が前記所定の基準を満たすか判断するステップと、
前記累積コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを前記出力データ格納部に格納するステップと、
をさらに含む請求項1記載の繰返しシンボリック実行方法。 The obtaining step comprises
Including acquiring path condition data obtained by symbolic execution in the first execution step from the symbolic execution unit and storing the data in the execution result storage unit;
For each of the path conditions stored in the execution result storage unit, from the data storage unit storing the specific value set for the variable for each variable defined in the analysis target program, related to the path condition Determining a specific value set in the variable to be determined, and determining whether the specified specific value satisfies a condition that the path condition is satisfied;
A generating step for generating a specific value satisfying the path condition determined not to satisfy the condition in the determining step;
For the symbolic execution unit, the variable to be symbolized is changed so as to cover all variables defined in the analysis target program, and the variable related to the path condition determined not to satisfy the condition is set. A second execution step for setting a specific value and setting the specific value generated in the generation step to perform symbolic execution repeatedly;
The cumulative code coverage, which is the code coverage calculated using the execution result of the first execution step and the execution result of the second execution step, is acquired from the symbolic execution unit and stored in the execution result storage unit. Steps,
Determining whether the cumulative code coverage rate stored in the execution result storage unit satisfies the predetermined criterion;
When it is determined that the cumulative code coverage rate satisfies the predetermined criterion, storing data indicating that the test of the analysis target program is completed in the output data storage unit;
The repetitive symbolic execution method according to claim 1, further comprising:
ことを特徴とする請求項2記載の繰返しシンボリック実行方法。 In the first execution step and the second execution step, there is one variable to be symbolized, and the variable to be symbolized is changed so as to cover all variables defined in the analysis target program. The iterative symbolic execution method according to claim 2.
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得部と、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断し、前記コード網羅率が前記所定の基準を満たすと判断された場合に、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納する判断部と、
を有する繰返しシンボリック実行装置。 An execution unit that repeatedly performs symbolic execution while changing the variables to be symbolized so as to cover all the variables defined in the analysis target program with respect to the symbolic execution unit that performs symbolic execution,
An acquisition unit that acquires the code coverage of the analysis target program from the symbolic execution unit and stores the code coverage rate in an execution result storage unit;
It is determined whether the code coverage rate stored in the execution result storage unit satisfies a predetermined criterion, and when it is determined that the code coverage rate satisfies the predetermined criterion, the test of the analysis target program is completed A determination unit that stores data representing that in the output data storage unit;
A recursive symbolic execution device.
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
を、コンピュータに実行させるための繰返しシンボリック実行プログラム。 A first execution step in which a symbolic execution unit that performs symbolic execution repeatedly performs symbolic execution while changing variables to be symbolized so as to cover all variables defined in the analysis target program;
An acquisition step of acquiring the code coverage of the analysis target program from the symbolic execution unit and storing it in the execution result storage unit;
Determining whether the code coverage rate stored in the execution result storage unit satisfies a predetermined criterion;
When it is determined that the code coverage rate satisfies the predetermined criterion, storing data indicating that the test of the analysis target program is completed in an output data storage unit;
Is a repeated symbolic execution program for causing a computer to execute.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010212679A JP5505227B2 (en) | 2010-09-22 | 2010-09-22 | Repetitive symbolic execution method, program, and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010212679A JP5505227B2 (en) | 2010-09-22 | 2010-09-22 | Repetitive symbolic execution method, program, and apparatus |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2012068869A JP2012068869A (en) | 2012-04-05 |
JP5505227B2 true JP5505227B2 (en) | 2014-05-28 |
Family
ID=46166086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010212679A Expired - Fee Related JP5505227B2 (en) | 2010-09-22 | 2010-09-22 | Repetitive symbolic execution method, program, and apparatus |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5505227B2 (en) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5971116B2 (en) * | 2012-12-27 | 2016-08-17 | 富士通株式会社 | Test data generation method, program, and apparatus |
JP6003699B2 (en) | 2013-02-08 | 2016-10-05 | 富士通株式会社 | Test data generation program, method and apparatus |
US9317405B2 (en) * | 2014-01-31 | 2016-04-19 | Fujitsu Limited | Test double generation |
JP6497271B2 (en) * | 2015-08-21 | 2019-04-10 | 富士通株式会社 | Test data generation apparatus, method, and program |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3418544B2 (en) * | 1998-03-24 | 2003-06-23 | 日立ソフトウエアエンジニアリング株式会社 | Automatic test data generator for programs |
JP2000259401A (en) * | 1999-03-05 | 2000-09-22 | Ntt Communicationware Corp | Source program standardizing device and method for standardizing source program |
US20090089759A1 (en) * | 2007-10-02 | 2009-04-02 | Fujitsu Limited | System and Method for Providing Symbolic Execution Engine for Validating Web Applications |
-
2010
- 2010-09-22 JP JP2010212679A patent/JP5505227B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2012068869A (en) | 2012-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107423048B (en) | Data collection method, device, medium and computing equipment | |
US9015685B2 (en) | Code analysis for simulation efficiency improvement | |
US20070255979A1 (en) | Event trace conditional logging | |
CN112765023B (en) | Test case generation method and device | |
US8930447B2 (en) | Method, apparatus, and program for usability analysis of web applications | |
CN111538659B (en) | Interface testing method, system, electronic equipment and storage medium of business scene | |
US20130081002A1 (en) | Selective data flow analysis of bounded regions of computer software applications | |
CN110781091B (en) | Application program testing method and device, electronic equipment and storage medium | |
JP6003699B2 (en) | Test data generation program, method and apparatus | |
JP5505227B2 (en) | Repetitive symbolic execution method, program, and apparatus | |
CN111563257A (en) | Data detection method and device, computer readable medium and terminal equipment | |
CN113590454A (en) | Test method, test device, computer equipment and storage medium | |
US9442818B1 (en) | System and method for dynamic data collection | |
JP2019101582A (en) | Software quality determination device, software quality determination method, and software quality determination program | |
JP5440287B2 (en) | Symbolic execution support program, method and apparatus | |
US9996619B2 (en) | Optimizing web crawling through web page pruning | |
JP2016018233A (en) | Script caching method and information processing device utilizing the same | |
JP2019074966A (en) | Sql sentence extraction device, sql sentence extraction method, and program | |
CN113141407B (en) | Page resource loading method and device and electronic equipment | |
CN113626301B (en) | Method and device for generating test script | |
CN113139184A (en) | Method for detecting Binder communication overload vulnerability based on static analysis | |
JP6142724B2 (en) | Test data generation program, method and apparatus | |
JP6710716B2 (en) | Threat information evaluation device, threat information evaluation method and program | |
US9092723B2 (en) | Using a heuristically-generated policy to dynamically select string analysis algorithms for client queries | |
JP2015090616A (en) | Test case extraction program, method and device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130702 |
|
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: 20140218 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140303 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5505227 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |