JPWO2013161195A1 - Program unit test support device - Google Patents
Program unit test support device Download PDFInfo
- Publication number
- JPWO2013161195A1 JPWO2013161195A1 JP2014512321A JP2014512321A JPWO2013161195A1 JP WO2013161195 A1 JPWO2013161195 A1 JP WO2013161195A1 JP 2014512321 A JP2014512321 A JP 2014512321A JP 2014512321 A JP2014512321 A JP 2014512321A JP WO2013161195 A1 JPWO2013161195 A1 JP WO2013161195A1
- Authority
- JP
- Japan
- Prior art keywords
- function
- path
- target
- dependent
- target function
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
プログラム単体テスト支援装置10は、対象関数において下位関数の出力変数値の影響を受ける部分を特定する構文解析部13と、対象関数の部分において、下位関数からの復帰後の経路を分析し、当該経路を実行するために下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部14と、経路依存下位事後条件に基づいて、対象関数における下位関数からの復帰後に経路を実行するための対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部15と、経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部16とを備える。The program unit test support apparatus 10 analyzes the path after the return from the lower function in the target function part, the syntax analysis unit 13 that identifies the part affected by the output variable value of the lower function in the target function, and the path And a stub function output analysis unit 14 that calculates a constraint that should be satisfied by the output variable value of the lower function as a path-dependent sub-post condition, and after the return from the lower function in the target function based on the path-dependent sub-post condition A target function input analysis unit 15 that calculates a constraint on an input value of a target function for executing a path as a path-dependent target precondition; a driver function that provides an input variable value that satisfies the path-dependent target precondition; and a path-dependent subordinate And a test case generation unit 16 that generates a stub function that outputs an output variable value that satisfies a condition.
Description
本発明は、プログラムの単体テストを支援するプログラム単体テスト支援装置に関する。 The present invention relates to a program unit test support apparatus that supports a unit test of a program.
C言語等の高級プログラミング言語で作成された一般的なプログラムは、関数が他の関数を呼び出すことにより実現される。以下、特定の関数を呼び出す関数を上位関数、当該特定の関数から呼び出される関数を下位関数と呼ぶ。 A general program created in a high-level programming language such as C language is realized by a function calling another function. Hereinafter, a function that calls a specific function is called an upper function, and a function that is called from the specific function is called a lower function.
また、高級プログラミング言語で記述したプログラムの一般的な単体テスト方法では、テスト対象である関数(対象関数)の上位関数を模擬する関数(ドライバ関数)の実装と、対象関数の下位関数を模擬する関数(スタブ関数)の実装とのうちの少なくとも一方が必要となる。 Also, in a general unit test method for a program written in a high-level programming language, a function (driver function) that simulates a higher function of the function to be tested (target function) and a function that simulates a lower function of the target function At least one of the implementation of (stub function) is required.
ドライバ関数は、対象関数が実行しうる何通りかの振舞いのうち、検査したい振舞いを実行するような入力変数値を与えて対象関数を実行し、期待どおりの振舞いが行われたことを調べるために、対象関数の実行結果を期待結果と比較する。または、ドライバ関数は、期待どおりの振舞いが行われたことを作業者に確認させるために、対象関数の実行結果を出力する。 The driver function executes the target function by giving an input variable value that executes the behavior to be checked among several behaviors that the target function can execute, and checks that the expected behavior has been performed. Then, the execution result of the target function is compared with the expected result. Alternatively, the driver function outputs the execution result of the target function in order to make the operator confirm that the expected behavior has been performed.
スタブ関数は、スタブ関数からの復帰後に対象関数が検査したい振舞いの実行を継続できるように、戻り値や引数の値を設定する。関数によって値が設定される戻り値や引数を合わせて、出力変数と呼ぶ。 The stub function sets the return value and argument value so that the target function can continue executing the behavior that the target function wants to check after returning from the stub function. The return value and arguments that are set by the function are collectively called an output variable.
対象関数の内部構造を考慮する単体テスト(ホワイトボックスの単体テスト)では、テストが十分に行われたかどうかが、網羅基準を100%達成したかどうかによって判断される。例えば、判定網羅(decision coverage)基準では、条件分岐文や繰り返し文の制御式のそれぞれが、真の場合と偽の場合とを実行することを調べる。全ての制御式の個数を2倍した数を分母とし、実行できた制御式の真・偽の場合の数を分子とした割り算の値が網羅度であり、1(100%)となることが求められる。 In a unit test that takes into account the internal structure of the target function (a white box unit test), whether or not the test has been sufficiently performed is determined by whether or not the coverage standard has been achieved 100%. For example, in the decision coverage criteria, it is checked that each of the conditional branch statement and the iteration statement control expression is true and false. The value of division with the number of all control expressions doubled as the denominator and the number of control expressions that can be executed as true or false is the numerator, which is 1 (100%). Desired.
単体テストにおいて網羅基準を達成するためには、作業者が、対象関数に、ドライバ関数が与える入力変数値やスタブ関数が与える出力変数値を、対象関数の検査したい振舞いに応じて与える必要がある。以下、ドライバ関数とスタブ関数を合わせて、テストプログラムと呼ぶ。ドライバ関数やスタブ関数等のテストプログラムの作成は、一般的には主に作業者により行われる。 In order to achieve the coverage standard in the unit test, the worker needs to give the target function the input variable value given by the driver function and the output variable value given by the stub function according to the behavior to be examined by the target function. Hereinafter, the driver function and the stub function are collectively referred to as a test program. Test programs such as driver functions and stub functions are generally created by an operator.
特許文献1に記載された技術は、対象関数が下位関数の出力変数値を定数と比較して振舞いを変える場合に、比較に用いた定数値を出力変数値とするスタブ関数を自動生成する。しかし、特許文献1に記載された技術では、対象関数が下位関数の出力変数値を変数と比較する場合を考慮していない。
The technique described in
対象関数の内部構造を考慮しない単体テスト(ブラックボックスの単体テスト)では、テストが十分に行われたかどうかが、対象関数の関数仕様に対して入力値の場合分けを尽くしたかどうかによって判断される。関数仕様は、関数の入力値に関する制約を示す論理式である事前条件(pre−condition)、関数が値を設定する変数の情報、関数の出力値に関する制約を示す論理式である事後条件(post−condition)の集まりである。 In a unit test that does not consider the internal structure of the target function (black box unit test), whether or not the test has been sufficiently performed is determined based on whether or not the case of the input value is exhausted with respect to the function specification of the target function. The function specification includes a precondition (pre-condition) that is a logical expression indicating a constraint on the input value of the function, information on variables for which the function sets values, and a postcondition (post) that indicates a constraint on the output value of the function. -Condition).
以下、論理式に関して、論理和および論理積の演算子を含まない式を項とし、項を論理積のみでつないだ式を連現節とし、連言説を論理和のみでつないだ式の形式を、選言標準形(disjunctive normal form, DNF)と呼ぶ。任意の論理式は選言標準形で表せるので、事後条件は選言標準形であるとする。 In the following, regarding logical expressions, an expression that does not include the operators of logical sum and logical product is a term, an expression in which terms are connected only by logical product is a continuous clause, and a conjunctive theory is a form of expression that is connected only by logical sum. , Called disjunctive normal form (DNF). Since any logical expression can be expressed in the disjunctive standard form, the postcondition is assumed to be the disjunctive standard form.
非特許文献1では、事後条件の連言節において、入力変数のみを含む項の積をガード条件(guard condition)と呼び、出力変数を含む項の積を定義条件(defining condition)と呼ぶ。事前条件をP、事後条件の各連言節を添え字iで区別し、連言節がガード条件Giと定義条件Diの論理積からなるとすると、非特許文献1では、連言節ごとに、事前条件Pとガード条件Giの論理積(P∧Gi)であるテスト条件を考え、テスト条件ごとに入力値を生成することによって、事後条件の連言節を尽くすテストが行われる。つまり、非特許文献1に記載された技術の考え方は、テスト条件ごとに、対象関数が特定の振舞いを行い、その出力変数値が期待結果であるDiを満たせばよい、という考え方である。
In
非特許文献1に記載された方法を用いると、事後条件の連言節に応じた振舞いを期待する入力変数値を与え、対象関数の出力変数値を前記連言節の定義条件と比較し、期待どおりの振舞いが行われたことを調べるドライバ関数を生成することができる。しかし、非特許文献1では、ドライバ関数の作成に必要となる対象関数の入力変数値は得られるが、スタブ関数の作成に必要となる対象関数の下位関数の出力変数値については何ら情報を得ることができない。
Using the method described in Non-Patent
第1の問題点は、特許文献1に記載されている単体テストにおけるスタブ関数を生成する方法では、対象関数が下位関数の出力変数値を変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、前記実行経路を選択するようなスタブ関数を生成できない。その理由は、特許文献1に記載されている方法では、下位関数の出力変数値を定数と比較する場合しか考慮していないためである。
The first problem is that, in the method for generating a stub function in the unit test described in
第2の問題点は、非特許文献1に記載された単体テストにおけるドライバ関数を生成する方法では、対象関数が下位関数の出力変数値を定数値あるいは変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなドライバ関数を生成できない。その理由は、上記非特許文献1に記載された方法では、対象関数の開始箇所から下位関数からの復帰後の前記実行経路までの経路を調べずに、関数仕様だけから対象関数の入力変数値と期待結果を求めるためである。
The second problem is that in the method for generating a driver function in the unit test described in Non-Patent
そこで、本発明は、プログラムの内部構造を考慮した網羅度を向上させることができるプログラムの単体テスト支援装置を提供することを目的とする。 Accordingly, an object of the present invention is to provide a unit test support apparatus for a program that can improve the degree of coverage in consideration of the internal structure of the program.
本発明によるプログラム単体テスト支援装置は、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援装置であって、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構文解析部と、前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部と、前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部と、前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部とを備えたことを特徴とする。 The program unit test support apparatus according to the present invention is a function that simulates the operation of a driver function that gives an input variable value to a target function that is a target function of a program unit test and calls the target function, and a lower function that the target function calls. A program unit test support apparatus for supporting a program unit test performed using a stub function to be replaced with the lower function, wherein the parsing unit identifies a portion affected by the output variable value of the lower function in the target function Then, in the part of the target function, the path after return from the lower function is analyzed, and the constraint that the output variable value of the lower function should satisfy to execute the path is calculated as a path dependent sub post condition. Based on the stub function output analysis unit and the path-dependent sub-postcondition, A target function input analysis unit that calculates a constraint on an input value of the target function for executing the path after returning from the lower function as a path-dependent target precondition; and an input variable value that satisfies the path-dependent target precondition And a test case generation unit that generates a stub function that outputs an output variable value that satisfies the path-dependent sub-postage condition.
本発明によるプログラム単体テスト支援方法は、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援方法であって、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定し、前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出し、前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出し、前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成することを特徴とする。 The program unit test support method according to the present invention is a function that simulates the operation of a driver function that gives an input variable value to a target function that is a target function of a program unit test and calls the target function, and a lower function that the target function calls. A program unit test support method for supporting a program unit test performed using a stub function that is replaced with the lower function, wherein a portion affected by an output variable value of the lower function is specified in the target function, and the target In the part of the function, the path after the return from the subordinate function is analyzed, and the constraint that the output variable value of the subordinate function must satisfy to execute the path is calculated as a path dependent subordinate condition, and the path dependent Based on the sub-postconditions, the path after the return from the sub-function in the target function A driver function that calculates a constraint on the input value of the target function to be executed as a path-dependent target precondition and gives an input variable value that satisfies the path-dependent target precondition, and an output variable value that satisfies the path-dependent sub-postcondition A stub function that outputs is generated.
本発明によるプログラム単体テスト支援プログラムは、コンピュータに、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援する処理を実行させるプログラム単体テスト支援プログラムであって、コンピュータに、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構造解析処理と、前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析処理と、前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析処理と、前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成処理とを実行させることを特徴とする。 The program unit test support program according to the present invention simulates the operation of a driver function that gives an input variable value to a target function that is a target function of the program unit test and calls the target function, and a lower function that the target function calls. A program unit test support program that executes a process for supporting a program unit test performed using a stub function that is a function and a stub function that is replaced with the lower function, and that causes a computer to output an output variable value of the lower function in the target function The structure analysis process for identifying the affected part, and the part after the return from the lower function in the part of the target function is analyzed, and the output variable value of the lower function should satisfy to execute the path Stub function output for calculating constraints as path-dependent sub-postconditions An object function that calculates, as a path-dependent target precondition, a restriction on an input value of the target function for executing the path after returning from the lower-level function in the target function based on the processing and the path-dependent sub-post condition Executing an input analysis process, a driver function that provides an input variable value that satisfies the path-dependent target pre-condition, and a test case generation process that generates a stub function that outputs an output variable value that satisfies the path-dependent sub-post condition It is characterized by.
本発明によれば、プログラムの内部構造を考慮した網羅度を向上させることができる。 According to the present invention, it is possible to improve the degree of coverage in consideration of the internal structure of a program.
以下、本発明の実施の形態について図面を参照して詳細に説明する。 Hereinafter, embodiments of the present invention will be described in detail with reference to the drawings.
図1は、本発明によるプログラム単体テスト支援装置10の実施形態の構成を示すブロック図である。図1に示すように、本実施形態のプログラム単体テスト支援装置10は、入出力装置11と、処理制御部12と、構文解析部13と、スタブ関数出力分析部14と対象関数入力分析部15と、テストケース生成部16と、永続記憶部17と、一時記憶部18とを備える。なお、入出力装置11、処理制御部12、永続記憶部17および一時記憶部18は、プログラム単体テスト支援装置10の外部に設けられていてもよい。
FIG. 1 is a block diagram showing a configuration of an embodiment of a program unit
本実施形態のプログラム単体テスト支援装置10は、C言語等の高級プログラミング言語により記述されたプログラムにおける構成単位であるモジュールに対する単体テストを行うものである。以下では、簡単のために関数を用いて説明を行うが、プログラム単体テスト支援装置10は、一般的なプログラムのモジュールに適用可能であり、明細書中では、C言語等における関数を明示的に意味する場合を除けば、本発明における関数はモジュールという、より広い概念を意味するものとする。
The program unit
図2は、プログラム単体テスト対象の関数(対象関数)の例を示す説明図である。本実施形態のプログラム単体テスト支援装置10に適用する単体テストの対象の関数(以下、対象関数と呼ぶ)は、例えば、図2に例示するようなC言語で記述されたプログラム中の関数である。図2に記述されたプログラムには、入力変数としてxとyを有し出力変数を持たない関数targetが、定義されている。関数targetは、対象関数の一例である。関数targetは、内部で関数fooを呼び出している。関数fooは、対象関数の下位関数の一例である。
FIG. 2 is an explanatory diagram showing an example of a function (target function) to be tested as a program unit test. A unit test target function (hereinafter referred to as a target function) applied to the program unit
図2に示すプログラムにおいて、関数の直前のコメント(「/**」と「*/」との間に記載された文)には、関数仕様が定義されている。関数仕様は、関数の開始時点で上位関数が満たすべき条件(以下、事前条件と呼ぶ)、関数が値を変更する変数(以下、出力変数と呼ぶ)の情報、および関数の終了時点で当該関数が満たすべき条件(以下、事後条件と呼ぶ)を含む。図2に示すプログラムでは、コメント内の@preに続く論理式が事前条件であり、@postに続く論理式が事後条件である。 In the program shown in FIG. 2, a function specification is defined in a comment immediately before the function (a sentence described between “/ **” and “* /”). The function specification includes a condition that the upper function must satisfy at the start of the function (hereinafter referred to as a precondition), information on a variable whose value changes (hereinafter referred to as an output variable), and the function at the end of the function. Includes a condition to be satisfied (hereinafter referred to as a post-condition). In the program shown in FIG. 2, a logical expression following @pre in the comment is a precondition, and a logical expression following @post is a postcondition.
また、図2に示すプログラムには使用されていないが、@param[out]に続く出力変数名が、出力変数情報である。図2の事後条件では、関数の戻り値が、予約語__returnと表されている。なお、戻り値が出力変数であることは自明なので、戻り値について、@param[out] __returnという出力変数情報を記述する必要はない。 Further, although not used in the program shown in FIG. 2, the output variable name following @param [out] is output variable information. In the postcondition of FIG. 2, the return value of the function is represented as reserved word__return. Since it is obvious that the return value is an output variable, it is not necessary to describe output variable information such as @param [out] __ return for the return value.
入出力装置11は、プログラム単体テスト支援装置10と利用者との間のインタフェースであり、入力装置および出力装置を含む。入出力装置11は、例えば、ディスプレイ、キーボード、およびマウス等により実現される。
The input /
永続記憶部17は、入出力装置11を介して入力された単体テストの対象プログラムを記憶する。対象プログラムは、対象関数の定義と、下位関数の宣言と、各関数の関数仕様とを含む。また、永続記憶部17は、テストケース生成部16によって生成されるスタブ関数とドライバ関数とを記憶する。
The
一時記憶部18は、スタブ関数とドライバ関数とを生成するために対象プログラムから生成した、後述する様々な情報を記憶する。これらの情報は、スタブ関数およびドライバ関数が生成された後は不要となる。
The
構文解析部13は、対象関数を構文解析して、処理の流れを表す制御フローグラフ(control flow graph)を作成し、一時記憶部18に出力する。また、構文解析部13は、制御フローグラフから、関数呼出しに関して、プログラム上の位置(例えば、行番号)と、呼出関係情報と、依存関係情報とを抽出し、一時記憶部18に出力する。呼出関係情報は、対象関数を呼出す上位関数と、対象関数から呼ばれる下位関数との組を管理する情報である。依存関係情報は、対象関数の変数の依存関係を管理する情報である。
The
スタブ関数出力分析部14は、呼出関係情報の下位関数において、その出力変数値によって選択されるプログラムの実行経路(以下、経路と記載する)を特定し、その経路を実行し得るような下位関数の事後条件(経路依存下位事後条件)を計算し、計算した結果を一時記憶部18に出力する。
The stub function
対象関数入力分析部15は、下位関数の呼出し箇所から対象関数の開始箇所へと制御フローグラフをプログラム実行とは逆向きに辿り、経路依存下位事後条件と下位関数の事前条件の積を元に、逆向きに辿る経路における代入式や制御式を考慮して、対象関数の開始箇所で成立すべき条件(以下、経路依存対象最弱事前条件と呼ぶ)を計算する。また、対象関数入力分析部15は、経路依存対象最弱事前条件と対象関数の事前条件との論理積(以下、経路依存対象事前条件と呼ぶ)を計算する。そして、対象関数入力分析部15は、経路依存対象最弱事前条件と、経路依存対象事前条件とを一時記憶部18に出力する。
The target function
テストケース生成部16は、経路依存対象事前条件を充足する値を計算し、この値を入力変数値として対象関数に与えるドライバ関数を生成する。また、テストケース生成部16は、経路依存対象事前条件に対応する経路依存下位事後条件を充足する値を計算し、この値を出力変数値とするスタブ関数を生成する。そして、テストケース生成部16は、ドライバ関数とスタブ関数との組をテストケースとして永続記憶部17に出力する。
The test
処理制御部12は、入出力装置11を介して入力された指示情報をもとに、構文解析部13、スタブ関数出力分析部14、対象関数入力分析部15、およびテストケース生成部16等に対する制御を行う。
Based on the instruction information input via the input /
処理制御部12、構文解析部13、スタブ関数出力分析部14、対象関数入力分析部15、およびテストケース生成部16は、プログラムにしたがって処理を実行する、コンピュータ内のCPU(Central Processing Unit:中央処理装置)等の演算装置によって実現される。演算装置により実行されるプログラムは、ハードディスク等の記憶装置に記憶され、演算される際にはメモリ装置等の一時記憶領域に記憶される。永続記憶部17は、ハードディスク等の記憶装置により実現される。一時記憶部18はメモリ装置またはハードディスク等の記憶装置により実現される。
The
次に、本実施形態の動作を説明する。図3は、本実施形態のプログラム単体テスト支援装置の動作を示すフローチャートである。図3を参照して、図2に示すプログラム中に定義されている関数targetを対象関数として単体テストのテストケースが生成されるまでの流れを説明する。 Next, the operation of this embodiment will be described. FIG. 3 is a flowchart showing the operation of the program unit test support apparatus of this embodiment. With reference to FIG. 3, a flow until a test case of a unit test is generated using the function target defined in the program shown in FIG. 2 as a target function will be described.
ステップS201において、利用者は、単体テストの対象関数と対象関数の定義およびその関数仕様を含むプログラムと、対象関数から呼ばれる下位関数の宣言およびその関数仕様を含むプログラムとを指定する。入出力装置11は、利用者に指定された、例えば図2に示す対象関数targetの定義および関数仕様を含むプログラムと、targetから呼ばれる下位関数fooの宣言および関数仕様を含むプログラムとを入力し、これらのプログラムを永続記憶部17に記憶させる。
In step S201, the user specifies a unit test target function, a program including the definition of the target function and its function specification, and a program including a declaration of a lower function called from the target function and its function specification. The input /
ステップS202において、構文解析部13は、対象関数を定義したプログラムコードを構文解析し、制御フローグラフを生成し、一時記憶部18に記憶させる。図4は、対象関数targetを構文解析して生成した制御フローグラフである。図4に示す制御フローグラフでは、処理の開始および終了を丸みのある矩形ノードで表し、式の実行を矩形ノード(以下、実行ノードと呼ぶ)で表し、式からの値の取得(以下、式の判定と呼ぶ)をひし形ノード(以下、判定ノードと呼ぶ)で表している。
In step S202, the
図4に示す各ノード内には、行番号等で示されるプログラム上での位置と、実行または判定すべき式とが「位置:式」という形式で記述されている。ノード間の矢印は、矢尻側のノードの式を実行または判定した後に矢頭側のノードの制御を実行することを示す。判定ノードから出る矢印に書いてある値は、その値と当該判定ノードの式を判定した結果を示す値とが同じである場合にのみ、次のノードの制御を実行することを示す。実行ノードの式に何も書かれていない場合には、何も実行せずに次のノードの制御を実行する。 In each node shown in FIG. 4, the position on the program indicated by the line number and the expression to be executed or determined are described in the form of “position: expression”. The arrow between the nodes indicates that the control of the arrowhead side node is executed after executing or determining the expression of the arrowhead side node. The value written on the arrow from the determination node indicates that the control of the next node is executed only when the value and the value indicating the result of determining the expression of the determination node are the same. If nothing is written in the expression of the execution node, control of the next node is executed without executing anything.
ステップS203において、構文解析部13は、ステップS202で生成した制御フローグラフを用いて、対象関数における関数呼出しの箇所を特定する。そして、構文解析部13は、プログラム上における関数呼び出しの位置と、対象関数を呼びだす側である上位関数と、対象関数から呼ばれる側である下位関数との組を呼出関係情報として一時記憶部18に記憶させる。図5は、制御フローグラフから抽出した呼出関係情報の例を示す説明図である。図5に示す例では、プログラムの3行目で関数targetが関数fooを呼び出すことが示されている。
In step S203, the
ステップS204において、構文解析部13は、依存関係情報を抽出する。具体的には、構文解析部13は、ステップS202で生成した制御フローグラフを終了ノードから開始ノードへと辿り、あるノードを依存元ノードとみなして、依存元ノードにおける代入式の右辺に出現する変数あるいは制御式に出現する変数を依存元変数として特定する。また、構文解析部13は、依存元ノードよりも矢印を逆に辿って前にあるノードのうち、依存元変数の値が参照あるいは設定されるような最も近いノードを依存先ノードとして特定する。
In step S204, the
図6は、制御フローグラフから抽出した依存関係情報の例を示す説明図である。図7は、制御フローグラフから依存関係情報を抽出するためのルールの例を示す図である。構文解析部13は、各ノードに図7に示す依存関係抽出ルールを適用して依存関係情報を抽出し、一時記憶部18に記憶させる。例えば、図4に示す制御フローグラフの例では、6:z==yと記載された判定ノードがある。その制御式z==yに出現する変数のうちzに着目すると、矢印を1個分逆向きに辿った判定ノードは、5:z<=yである。そのため、構文解析部13は、図7に示す番号4のルールにしたがって、6行目のzが5行目のzに依存していること(図6の番号12の依存関係)と、6行目のzが5行目のyに依存していること(図6の番号11の依存関係)を依存関係情報として抽出する。
FIG. 6 is an explanatory diagram illustrating an example of dependency relationship information extracted from the control flow graph. FIG. 7 is a diagram illustrating an example of rules for extracting dependency relationship information from the control flow graph. The
続くステップS210からステップS212までは、構文解析部13は、呼出関係情報に登録された下位関数の1つを選択して、ステップS211およびステップS220からステップS227の処理を繰り返す。図5に示す呼出関係情報には、下位関数としてfooが登録されているので、構文解析部13は、下位関数としてfooを選択し、ステップS211の処理を行う。
In subsequent steps S210 to S212, the
ステップS211において、構文解析部13は、依存関係情報から、選択された下位関数の出力変数および出力変数が代入された変数を依存先変数とし、依存種別が制御であり依存元変数が依存先変数とは異なる依存関係を特定する。そして、構文解析部13は、下位関数の呼び出しを実行するノードから特定された依存関係情報の依存元変数に対応するノードまでを、ステップS202で抽出した制御フローグラフから部分グラフ(以下、復帰後部分制御フローグラフ)として抽出する。
In step S211, the
さらに、構文解析部13は、抽出した復帰後部分制御フローグラフの末端のノードから矢印を逆に辿り下位関数の呼び出しを行う実行ノードまでの経路を求める。経路の求める手順を、図6を用いて詳しく説明する。図6に示す番号4の依存関係では、下位関数fooの戻り値が変数tに代入される。さらに、番号6の依存関係では、変数tが変数zに代入される。つまり、下位関数fooの出力変数値が直接的または間接的に代入される変数は、tおよびzである。
Further, the
構文解析部13は、図6に示す依存関係情報から、下位関数fooの呼出し後に変数tおよび変数zが依存先変数であり、依存元変数が依存先変数とは異なり、依存種別が制御である依存関係として、番号14、番号16および番号18の依存関係を抽出する。そして、構文解析部13は、下位関数fooを呼び出す実行ノードから、抽出された依存関係における依存元変数に相当するノードまでを、図4の制御フローグラフから部分的に切り出した制御フローグラフを、部分制御フローグラフとして抽出する。図8は、対象関数全体の制御フローグラフから下位関数の出力変数値が影響する範囲を切り出した部分制御フローグラフの例を示す説明図である。
Based on the dependency relationship information shown in FIG. 6, the
図8に示すように、関数fooを呼び出す実行ノードから矢印の方向に進むと末端のノードが3個あり、それぞれの末端のノードに至る3つの経路path−1,path−2,path−3が存在する。ステップS220からステップS227までの処理では、切り出された上記経路のそれぞれに関してステップS221からステップS226の処理が実行される。以下、図8で示すpath−1に関するステップS221からステップS226の処理を説明する。 As shown in FIG. 8, when the execution node that calls the function foo proceeds in the direction of the arrow, there are three terminal nodes, and three paths path-1, path-2, and path-3 to each terminal node are displayed. Exists. In the processing from step S220 to step S227, the processing from step S221 to step S226 is executed for each of the extracted routes. Hereinafter, the processing from step S221 to step S226 regarding path-1 shown in FIG. 8 will be described.
ステップS221において、スタブ関数出力分析部14は、ステップS220で選択された経路に関して、下位関数から対象関数への復帰箇所において、出力変数が満足すべき制約条件、すなわち経路に依存した下位関数の事後条件(以下、経路依存下位事後条件と呼ぶ)を以下に記すように算出する。まず、スタブ関数出力分析部14は、ステップS211で切り出された部分制御フローグラフから、下位関数の出力変数値が直接的または間接的に代入された変数に関係する実行ノードまたは判定ノードを抽出し、ノードに付されたプログラム上の位置と式を経路毎に抽出する(以下、経路情報と呼ぶ)。制御式についてはその判定結果も含めて抽出する。
In step S221, the stub function
スタブ関数出力分析部14は、例えば、制御式がx==0であり、その後の矢印に付された値が偽(false)であれば、(x==0)==falseという式を、x!=0と置き換える。スタブ関数出力分析部14は、さらに、経路情報において、プログラム上の位置(行番号)が小さい方から大きい方へと移動し、ある式の変数を、その式より小さい位置で最も近い代入式の右辺で置き換えることを繰り返す。最後に、スタブ関数出力分析部14は、書き換えた経路情報から制御式を抽出し、これらの論理積をとり、予め用意された書き換えルールを用いて、簡潔な式に直す。
For example, if the control expression is x == 0 and the value attached to the subsequent arrow is false (false), the stub function
以下、ステップS221の処理を、図8のpath−1に適用した例を説明する。図9は、部分制御フローグラフにおける経路情報の例を示す図である。図9において、各矩形内の情報は「行番号:式」を表す。下位関数fooの出力変数値が直接的または間接的に代入される変数はtとzである。スタブ関数出力分析部14は、図8に示す部分制御フローグラフのノードから、tとzが出現するこれらが出現するノードの式を抽出する。その結果、図9に示すようなpath−1の経路情報が得られる。
Hereinafter, an example in which the process of step S221 is applied to path-1 in FIG. 8 will be described. FIG. 9 is a diagram illustrating an example of route information in the partial control flow graph. In FIG. 9, the information in each rectangle represents “line number: expression”. Variables into which the output variable value of the lower function foo is directly or indirectly substituted are t and z. The stub function
図10は、出力変数が直接的あるいは間接的に代入される変数を、出力変数を用いて書き換えた経路情報の例を示す説明図である。図9に示すpath−1の経路情報において、プログラム上の位置(行番号)がもっとも小さい代入式は番号3のt=fooである。スタブ関数出力分析部14は、この右辺fooを用いて後続の番号4の式の右辺に出現するtを書き換える。そして、プログラム上の位置が次に小さい代入式はz=foo+1であるので、スタブ関数出力分析部14は、この右辺foo+1を用いて後続の番号5および番号6に出現するzを書き換える。この結果、図10に示すpath−1の経路情報が得られる。
FIG. 10 is an explanatory diagram illustrating an example of route information in which a variable to which an output variable is directly or indirectly substituted is rewritten using the output variable. In the path information of path-1 shown in FIG. 9, the assignment expression with the smallest position (line number) on the program is t = foo of
図11は、部分制御フローグラフにおいて経路ごとに下位関数が満たすべき事後条件(経路依存下位事後条件)の例を示す説明図である。図12は、論理式を単純な表現に書き換えるルールの例を示す図である。図12において、l,m,nは、整数値または整数型の変数または式を表し、x、yは変数または定数で表し、eは式を表し、e[y/x]はeに出現するxをyで置換した式を表す。また、P,Qは論理式を表し、∧は論理和を表し、¬は論理否定を表し、⇒は論理合意を表す。 FIG. 11 is an explanatory diagram illustrating an example of a post-condition (path-dependent sub-post condition) that should be satisfied by the sub-function for each path in the partial control flow graph. FIG. 12 is a diagram illustrating an example of a rule for rewriting a logical expression into a simple expression. In FIG. 12, l, m and n represent integer values or integer type variables or expressions, x and y represent variables or constants, e represents an expression, and e [y / x] appears in e. A formula in which x is replaced by y is represented. P and Q represent logical expressions, ∧ represents logical sum, ¬ represents logical negation, and ⇒ represents logical agreement.
スタブ関数出力分析部14は、図10に示す書き換えられたpath−1の経路情報にある制御式の論理積を計算し、その結果、foo+1<=y∧foo+1==yが得られる。スタブ関数出力分析部14は、この式に図12に示す番号3の書き換えルールを適用し、foo+1==yを得る。そして、スタブ関数出力分析部14は、下位関数名fooを、戻り値を表す__returnで書きかえる。その結果、下位関数fooからの復帰後に経路path−1を実行するようなfooの事後条件として、図11に示すpath−1の経路依存下位事後条件__return+1==yが得られる。
The stub function
ステップS222において、対象関数入力分析部15は、ステップS221で得た経路依存下位事後条件と、下位関数の事後条件(下位事後条件)から選択した1つの定義条件の論理積を算出し、図12の書き換えルールを用いて単純な式に書き換える。もし、戻り値__returnが残っていれば、対象関数入力分析部15は、さらに書き換え後の式を真(true)に書き換える。対象関数入力分析部15は、この書き換え後の式と選択した前記定義条件に対応するガード条件と下位関数の事前条件との論理積を算出し、図12の書き換えルールを用いて単純な式に書き換えた式を、経路に依存した下位関数の事前条件(以下、経路依存下位事前条件と呼ぶ)を得る。
In step S222, the target function
図13は、経路依存下位事後条件から経路依存対象事前条件を計算する例を示す説明図である。以下、図13の見出し行の1つ下の行を参照して、図11の経路path−1に関するステップS222の計算例を示す。 FIG. 13 is an explanatory diagram illustrating an example of calculating the route-dependent target precondition from the route-dependent sub-post condition. Hereinafter, with reference to the row immediately below the heading row in FIG. 13, an example of calculation in step S222 regarding the path path-1 in FIG. 11 will be described.
対象関数入力分析部15は、図11のpath−1の経路依存下位事後条件__return+1==yと図2の下位関数fooの定義条件__return==1との論理積を算出し、図12の番号9の書き換えルールを用いて式を単純にするとy==2を得る。次に、対象関数入力分析部15は、この式y==2とガード条件x==0とfooの事前条件x>=0との論理積を算出し、図12の番号3の書き換えルールを用いて式を単純にすると、経路依存下位事前条件x==0 && y==2を得る。
The target function
ステップS223において、対象関数入力分析部15は、ステップS222で得た経路依存下位事前条件を満たす状態に至るような対象関数の開始点における制約条件(以下、経路依存対象最弱事前条件と呼ぶ)を計算し、一時記憶部18に出力する。以下、ステップS223の処理を具体的に説明する。
In step S223, the target function
図14は、図4に示す対象関数全体の制御フローグラフから、対象関数targetの開始から下位関数fooの呼び出しまでの部分制御フローグラフを切り出した例を示す説明図である。図15は、最弱事前条件を計算するルールの例を示す説明図である。図15において、式の列は、前のノードに付された式と後のノードで成立する式とを「;」でつないだものを表す。また、P,Qは論理式を表し、Q[e/x]は、Qに出現するxをeで置換した式を表す。 FIG. 14 is an explanatory diagram showing an example in which a partial control flow graph from the start of the target function target to the call of the lower function foo is cut out from the control flow graph of the entire target function shown in FIG. FIG. 15 is an explanatory diagram illustrating an example of a rule for calculating the weakest precondition. In FIG. 15, the expression column represents an expression obtained by connecting an expression attached to the previous node and an expression established at the subsequent node with “;”. P and Q represent logical expressions, and Q [e / x] represents an expression in which x appearing in Q is replaced with e.
ステップS223において対象関数入力分析部15は、図14に示すような、対象関数の制御フローグラフから、対象関数の開始箇所から下位関数の呼出箇所までを抽出した部分的な制御フローグラフを作る。そして、対象関数入力分析部15は、その部分的な制御フローグラフにおいて、下位関数の呼び出しを実行するノードから矢印を逆向きに辿る。そして、対象関数入力分析部15は、経路依存下位事前条件を初期の式として、各ノードに付された式と図15に示すような最弱事前条件計算ルールを用いて、各ノードにおいて下位関数の呼び出しに至る制約条件を求め、これを開始箇所のノードまで繰り返す。
In step S223, the target function
以下、図13の見出し行の1つ下の行の例を参照して、図14の制御フローグラフに関するステップS223の計算例を示す。図14において、下位関数の呼び出しと開始点との間には判定ノードが1個のみであり、その制御式は0<yである(図13における経路情報)。対象関数入力分析部15は、前記制御式0<yとステップS222で得た経路依存下位事前条件x==0 && y==2をつないだ式の列に対して、図15の番号2の最弱事前条件計算ルールを用いると0<y && x==0 && y==2を得る。さらに、対象関数入力分析部15は、図12の番号15と番号8の書き換えルールを用いて式を単純にすると、経路path−1に対する経路依存対象最弱事前条件x==0 && y==2を得る。
Hereinafter, an example of calculation in step S223 related to the control flow graph of FIG. 14 will be described with reference to an example of a row immediately below the heading row of FIG. In FIG. 14, there is only one decision node between the call of the lower function and the start point, and the control expression is 0 <y (route information in FIG. 13). The target function
ステップS224において、対象関数入力分析部15は、ステップS223で得た経路依存対象最弱事前条件と対象関数の事前条件との論理積を算出し、経路依存対象事前条件として一時記憶部18に出力する。また、対象関数入力分析部15は、経路依存対象事前条件が偽(false)で無ければ、1つのテストケース番号を付与する。以下、図13の見出し行の1つ下の行に関して、図11の経路path−1についての経路依存対象事前条件の計算例を示す。経路依存対象最弱事前条件x==0 && y==2と図2における対象関数の事前条件x+y>0の論理積は、x==0 && y==2 && x+y>0となる。この計算結果に対して、対象関数入力分析部15は、テストケース番号としてTid−1を付与する。
In step S224, the target function
ステップS225において、テストケース生成部16は、ステップS224で得られた経路依存対象事前条件を充足する対象関数の入力変数値と、ステップS221で得られた経路依存下位事後条件を充足する下位関数の出力変数値とを、一般の制約充足アルゴリズムを用いて計算する。
In step S225, the test
図16は、テストケースごとに対象関数の入力変数値と下位関数の出力変数値の例を示す説明図である。テストケース生成部16は、テストケース番号Tid−1について、経路依存対象事前条件x==0 && y==2 && x+y>0を充足する変数xおよびyの値として、それぞれ0および2を得る。また、テストケース生成部16は、経路依存事後条件__return+1==yを充足する下位関数fooの戻り値__returnとして1を得る。
FIG. 16 is an explanatory diagram illustrating an example of the input variable value of the target function and the output variable value of the lower function for each test case. The test
ステップS226において、テストケース生成部16は、ステップS225で得た対象関数の入力変数値と下位関数の出力変数値を用いて、当該入力変数値を与えて対象関数を呼び出すドライバ関数と、下位関数に代わって当該出力変数値を出力するスタブ関数を生成する。図17は、テストケースごとに生成したドライバ関数とスタブ関数の例を示す説明図である。図17は、図13および図16に示したテストケース番号Tid−1に対するドライバ関数とスタブ関数の生成例である。
In step S226, the test
なお、図3のステップS226におけるテストプログラムの生成は、ステップS210からステップS212までの一連の処理の後で行うことができる。図18は、本発明によるプログラム単体テスト支援装置の実施形態の別の動作例を示すフローチャートである。図19は、テストケース全体について生成したドライバ関数とスタブ関数の別の例を示す説明図である。図18のステップS1801〜ステップS1812の処理は、図3のステップS201〜ステップS212の処理と同様であり、図18のステップS1820〜ステップS1827の処理は、図3のステップS220〜ステップS225およびステップS227の処理と同様である。 Note that the generation of the test program in step S226 in FIG. 3 can be performed after a series of processing from step S210 to step S212. FIG. 18 is a flowchart showing another operation example of the embodiment of the program unit test support apparatus according to the present invention. FIG. 19 is an explanatory diagram showing another example of driver functions and stub functions generated for the entire test case. 18 are the same as the processes in steps S201 to S212 in FIG. 3, and the processes in steps S1820 to S1827 in FIG. 18 are the same as those in steps S220 to S225 and S227 in FIG. This is the same as the process.
図3に示す動作では、ステップS226において、テストケース生成部16は、図17に示すようなテストケース番号ごとのテストプログラムを生成したが、図18に示す動作では、テストケース生成部16は、経路毎の一連の処理の後で、テストプログラムを生成する。これにより、図18に示す動作を行った場合は、テストケース生成部16は、図19に示すような全てのテストケース番号をまとめたテストプログラムを生成することができる。
In the operation shown in FIG. 3, in step S226, the test
本実施形態のプログラム単体テスト支援装置によれば、対象関数が下位関数の出力変数値を変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなスタブ関数を生成できる。その理由は、本実施形態のプログラム単体テスト支援装置は、下位関数の出力変数値を変数と比較する場合も考慮して、下位関数の出力変数値が充足すべき下位関数の事後条件(経路依存下位事後条件)を計算し、経路依下位事後条件を充足する値を出力変数値とするスタブ関数を生成するからである。 According to the program unit test support apparatus of the present embodiment, when the target function selects a specific execution path after returning from the lower function by comparing the output variable value of the lower function with the variable value, the execution path is A stub function can be generated to select. The reason for this is that the program unit test support apparatus of this embodiment takes into account the case where the output variable value of the lower function is compared with the variable, and the post-condition of the lower function that the output variable value of the lower function should satisfy (path-dependent lower level). This is because a stub function is generated in which a value satisfying the path-dependent sub-post condition is calculated as an output variable value.
また、本実施形態のプログラム単体テスト支援装置によれば、対象関数が下位関数の出力変数値を定数値あるいは変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなドライバ関数を生成することができる。その理由は、本実施形態のプログラム単体テスト支援装置は、対象関数の開始箇所から下位関数からの復帰後の前記実行経路までの経路を調べて、この経路を実行するような最弱事前条件(経路依存対象最弱事前条件)を計算し、経路依存対象最弱事前条件と対象関数の事前条件と対象関数のガード条件の論理積を充足する値を対象関数への入力変数値とするドライバ関数を生成するからである。 Further, according to the program unit test support apparatus of this embodiment, when the target function selects a specific execution path after returning from the lower function by comparing the output variable value of the lower function with a constant value or a variable value. A driver function that selects the execution path can be generated. The reason for this is that the program unit test support apparatus of the present embodiment examines the path from the start point of the target function to the execution path after returning from the lower function, and executes the weakest precondition (path) Driver function with the value satisfying the logical product of the path-dependent target weakest precondition, the target function precondition, and the guard function of the target function as the input variable value to the target function. It is because it produces | generates.
本実施形態のプログラム単体テスト支援装置によれば、上記のようなスタブ関数およびドライバ関数を生成するので、プログラムの単体テストの作業効率を向上させ、プログラムの内部構造を考慮した網羅度を向上させることできる。 According to the program unit test support device of the present embodiment, the stub function and driver function as described above are generated, so that the work efficiency of the unit test of the program can be improved, and the coverage considering the internal structure of the program can be improved. .
図20は、本発明によるプログラム単体テスト支援装置の主要部の構成を示すブロック図である。図20に示すように、本発明によるプログラム単体テスト支援装置10は、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援装置であって、主要な構成要素として、対象関数において下位関数の出力変数値の影響を受ける部分を特定する構造解析部13と、対象関数の部分において、下位関数からの復帰後の経路を分析し、当該経路を実行するために下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部14と、経路依存下位事後条件に基づいて、対象関数における下位関数からの復帰後に経路を実行するための対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部15と、経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部16とを備える。
FIG. 20 is a block diagram showing the configuration of the main part of the program unit test support apparatus according to the present invention. As shown in FIG. 20, the program unit
また、上記の実施形態では、以下の(1)〜(4)に示すようなプログラム単体テスト支援装置も開示されている。 In the above embodiment, the program unit test support apparatus as shown in the following (1) to (4) is also disclosed.
(1)プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援装置(例えば、プログラム単体テスト支援装置10)であって、対象関数において下位関数の出力変数値の影響を受ける部分を特定する構文解析部(例えば、構文解析部13)と、対象関数の部分において、下位関数からの復帰後の経路を分析し、当該経路を実行するために下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部(例えば、スタブ関数出力分析部14)と、経路依存下位事後条件に基づいて、対象関数における下位関数からの復帰後に経路を実行するための対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部(例えば、対象関数入力分析部15)と、経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部(例えば、テストケース生成部16)とを備えたことを特徴とするプログラム単体テスト支援装置。 (1) A function that simulates the behavior of a driver function that gives an input variable value to a target function that is a target function of a program unit test and calls the target function, and a lower function that is called by the target function. A program unit test support apparatus (for example, the program unit test support apparatus 10) that supports a program unit test that is performed using a stub function that is used to identify a portion that is affected by an output variable value of a lower function in the target function A part (for example, the syntax analysis unit 13) and the target function part analyze the path after returning from the lower function, and the path dependent subordinate satisfies the constraints that the output variable value of the lower function must satisfy in order to execute the path A stub function output analysis unit (for example, stub function output analysis unit 14) that is calculated as a post-condition, and a path-dependent A target function input analysis unit (for example, a target function input analysis unit) that calculates, as a path-dependent target precondition, a constraint on an input value of a target function for executing a path after returning from a lower function in the target function based on a post-condition 15) and a test case generation unit (for example, the test case generation unit 16) that generates a driver function that provides an input variable value that satisfies the path-dependent target pre-condition and a stub function that outputs an output variable value that satisfies the path-dependent sub-post condition And a program unit test support device.
(2)プログラム単体テスト支援装置は、構文解析部が、対象関数を呼び出す上位関数と当該対象関数から呼ばれる下位関数との組を含む呼出関係情報と、対象関数における変数の依存関係を示す依存関係情報とを抽出し、当該呼出関係情報および当該依存関係情報に基づいて、対象関数において下位関数の出力変数値の影響を受ける部分を特定するように構成されていてもよい。このようなプログラム単体テスト支援装置によれば、下位関数や、下位変数の出力変数値に依存する式が複数あっても、全ての下位関数および経路を網羅したテストケースを生成することができる。 (2) In the program unit test support device, the syntax analysis unit includes call relationship information including a pair of a higher function that calls the target function and a lower function that is called from the target function, and dependency information that indicates the dependency of the variable in the target function May be extracted, and based on the call relationship information and the dependency relationship information, a portion that is affected by the output variable value of the lower function in the target function may be specified. According to such a program unit test support apparatus, even if there are a plurality of expressions depending on the lower function or the output variable value of the lower variable, it is possible to generate a test case that covers all the lower functions and paths.
(3)プログラム単体テスト支援装置は、スタブ関数出力分析部が、対象関数に、下位関数の出力変数または当該出力変数に依存する変数と他の変数とを比較する判定式が存在し、当該判定式の結果により経路が選択される場合、当該判定式に基づいて経路依存下位事後条件を算出するように構成されていてもよい。このようなプログラム単体テスト支援装置によれば、対象関数において、上記判定式の結果により経路が選択される場合であっても、全ての経路を網羅したスタブ関数を生成することができる。 (3) In the program unit test support apparatus, the stub function output analysis unit includes a determination expression for comparing the output variable of the lower function or a variable dependent on the output variable with another variable in the target function. When a route is selected based on the result of the above, the route dependent sub-post condition may be calculated based on the determination formula. According to such a program unit test support device, it is possible to generate a stub function that covers all paths even if a path is selected in the target function based on the result of the determination formula.
(4)プログラム単体テスト支援装置は、対象関数入力分析部が、経路依存下位事後条件と、予め定義された下位関数の入力値に関する制約である下位事前条件および当該下位関数の出力値に関する制約である下位事後条件に基づいて、経路に依存した下位関数の事前条件を経路依存下位事前条件として算出し、当該経路依存下位事前条件を満たす、対象関数の開始点における制約条件を経路依存対象最弱事前条件として算出し、経路依存対象最弱事前条件と、対象関数の入力値に関する制約である対象事前条件との論理積を計算することにより経路依存対象事前条件を算出するように構成されていてもよい。このようなプログラム単体テスト支援装置によれば、上記スタブ関数に対応し、経路に依存した対象関数の事前条件を満たすドライバ関数を生成することができる。 (4) In the program unit test support device, the target function input analysis unit is a constraint related to a path-dependent sub-post condition, a sub-precondition that is a constraint regarding the input value of a predefined sub-function, and an output value of the sub-function. Based on the sub-postconditions, the precondition of the subordinate function depending on the path is calculated as the path-dependent subprecondition, and the constraint condition at the start point of the target function that satisfies the path-dependent subprecondition is set to the path-dependent target weakest precondition. Even if it is configured to calculate the path-dependent target precondition by calculating the logical product of the path-dependent target weakest precondition and the target precondition that is the constraint on the input value of the target function. Good. According to such a program unit test support device, it is possible to generate a driver function corresponding to the stub function and satisfying the precondition of the target function depending on the path.
この出願は、2012年4月26日に出願された日本出願特願2012−101184を基礎とする優先権を主張し、その開示の全てをここに取り込む。 This application claims the priority on the basis of Japanese application Japanese Patent Application No. 2012-101184 for which it applied on April 26, 2012, and takes in those the indications of all here.
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。 While the present invention has been described with reference to the embodiments, the present invention is not limited to the above embodiments. Various changes that can be understood by those skilled in the art can be made to the configuration and details of the present invention within the scope of the present invention.
本発明にかかるプログラムの単体テスト支援装置は、高級プログラミング言語で記述されたプログラムのドライバ関数およびスタブ関数を用いた単体テストに適用できる。 The program unit test support apparatus according to the present invention can be applied to a unit test using a driver function and a stub function of a program written in a high-level programming language.
10 プログラム単体テスト支援装置
11 入出力装置
12 処理制御部
13 構文解析部
14 スタブ関数出力分析部
15 対象関数入力分析部
16 テストケース生成部
17 永続記憶部
18 一時記憶部DESCRIPTION OF
Claims (6)
前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構造解析部と、
前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部と、
前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部と、
前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部とを備えた
ことを特徴とするプログラム単体テスト支援装置。A driver function that gives an input variable value to the target function that is the target function of the program unit test and calls the target function, and a stub function that simulates the operation of the lower function that the target function calls and that is replaced with the lower function A program unit test support device for supporting program unit tests performed using
A structure analysis unit for identifying a portion affected by the output variable value of the lower function in the target function;
In the portion of the target function, a stub function that analyzes a route after returning from the lower function and calculates a constraint that should be satisfied by an output variable value of the lower function to execute the route as a route-dependent sub-post condition An output analyzer;
A target function input analysis unit that calculates, as a path dependent target precondition, a constraint on an input value of the target function for executing the path after returning from the lower function in the target function, based on the path dependent lower postcondition When,
A program comprising: a driver function that provides an input variable value that satisfies the path-dependent target pre-conditions; and a test case generation unit that generates a stub function that outputs an output variable value that satisfies the path-dependent sub-post conditions. Unit test support device.
対象関数を呼び出す上位関数と当該対象関数から呼ばれる下位関数との組を含む呼出関係情報と、前記対象関数における変数の依存関係を示す依存関係情報とを抽出し、当該呼出関係情報および当該依存関係情報に基づいて、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する
請求項1記載のプログラム単体テスト支援装置。The structural analysis department
Call relationship information including a pair of a higher-level function that calls the target function and a lower-level function called from the target function, and dependency relationship information that indicates a dependency relationship of variables in the target function are extracted, and the call relationship information and the dependency relationship are extracted. The program unit test support apparatus according to claim 1, wherein a part of the target function that is affected by an output variable value of the lower function is specified based on information.
対象関数に、下位関数の出力変数または当該出力変数に依存する変数と他の変数とを比較する判定式が存在し、当該判定式の結果により経路が選択される場合、当該判定式に基づいて経路依存下位事後条件を算出する
請求項1または請求項2記載のプログラム単体テスト支援装置。The stub function output analysis unit
If the target function has a judgment expression that compares the output variable of the lower function or a variable that depends on the output variable with another variable, and the path is selected according to the result of the judgment expression, The program unit test support apparatus according to claim 1 or 2, wherein a path-dependent sub-post condition is calculated.
経路依存下位事後条件と、予め定義された下位関数の入力値に関する制約である下位事前条件および当該下位関数の出力値に関する制約である下位事後条件に基づいて、経路に依存した前記下位関数の事前条件を経路依存下位事前条件として算出し、
当該経路依存下位事前条件を満たす、対象関数の開始点における制約条件を経路依存対象最弱事前条件として算出し、
前記経路依存対象最弱事前条件と、前記対象関数の入力値に関する制約である対象事前条件との論理積を計算することにより経路依存対象事前条件を算出する
請求項1から請求項3のうちのいずれか1項に記載のプログラム単体テスト支援装置。The target function input analysis unit
Based on a path-dependent sub-post condition, a sub-pre-condition that is a constraint on the input value of the sub-function defined in advance, and a sub-post condition that is a constraint on the output value of the sub-function Calculate the condition as a route-dependent sub-precondition,
The constraint condition at the start point of the target function that satisfies the path-dependent sub-previous condition is calculated as the path-dependent target weakest pre-condition,
The path-dependent target precondition is calculated by calculating a logical product of the path-dependent target weakest precondition and a target precondition that is a constraint on the input value of the target function. The program unit test support device according to any one of the above.
前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定し、
前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出し、
前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出し、
前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成する
ことを特徴とするプログラム単体テスト支援方法。A driver function that gives an input variable value to the target function that is the target function of the program unit test and calls the target function, and a stub function that simulates the operation of the lower function that the target function calls and that is replaced with the lower function A program unit test support method for supporting a program unit test performed using
Identify a portion of the target function that is affected by the output variable value of the subordinate function;
In the part of the target function, analyze the path after the return from the lower function, and calculate a constraint that the output variable value of the lower function to satisfy the path to execute the path as a path-dependent sub-post condition,
Based on the path-dependent sub-post condition, a constraint on the input value of the target function for executing the path after returning from the sub-function in the target function is calculated as a path-dependent target pre-condition,
A program unit test support method, comprising: generating a driver function that provides an input variable value that satisfies the path-dependent target pre-condition and a stub function that outputs an output variable value satisfying the path-dependent sub-post condition.
プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援する処理を実行させるプログラム単体テスト支援プログラムであって、
コンピュータに、
前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構造解析処理と、
前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析処理と、
前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析処理と、
前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成処理とを
実行させるためのプログラム単体テスト支援プログラム。On the computer,
A driver function that gives an input variable value to the target function that is the target function of the program unit test and calls the target function, and a stub function that simulates the operation of the lower function that the target function calls and that is replaced with the lower function A program unit test support program for executing a process for supporting a program unit test performed using
On the computer,
A structural analysis process for identifying a portion affected by the output variable value of the lower function in the target function;
In the portion of the target function, a stub function that analyzes a route after returning from the lower function and calculates a constraint that should be satisfied by an output variable value of the lower function to execute the route as a route-dependent sub-post condition Output analysis processing,
Target function input analysis processing for calculating, as a path dependent target precondition, a constraint on an input value of the target function for executing the path after the return from the lower function in the target function based on the path dependent lower postcondition When,
Program unit test support program for executing a driver function that provides an input variable value that satisfies the path-dependent target pre-condition and a test case generation process that generates a stub function that outputs an output variable value that satisfies the path-dependent sub-post condition .
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014512321A JPWO2013161195A1 (en) | 2012-04-26 | 2013-04-03 | Program unit test support device |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012101184 | 2012-04-26 | ||
JP2012101184 | 2012-04-26 | ||
JP2014512321A JPWO2013161195A1 (en) | 2012-04-26 | 2013-04-03 | Program unit test support device |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2013161195A1 true JPWO2013161195A1 (en) | 2015-12-21 |
Family
ID=49482550
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014512321A Pending JPWO2013161195A1 (en) | 2012-04-26 | 2013-04-03 | Program unit test support device |
Country Status (2)
Country | Link |
---|---|
JP (1) | JPWO2013161195A1 (en) |
WO (1) | WO2013161195A1 (en) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6142724B2 (en) * | 2013-08-07 | 2017-06-07 | 富士通株式会社 | Test data generation program, method and apparatus |
JP6135466B2 (en) * | 2013-11-06 | 2017-05-31 | 富士通株式会社 | Test case extraction program, method and apparatus |
JP6503724B2 (en) * | 2014-12-15 | 2019-04-24 | 富士通株式会社 | Stub method, program and apparatus |
JP6512032B2 (en) * | 2015-08-21 | 2019-05-15 | 富士通株式会社 | Stub target determination apparatus, method, and program |
JP7148802B2 (en) * | 2019-01-25 | 2022-10-06 | 富士通株式会社 | Analysis program, analysis method and analysis device |
JP7031627B2 (en) * | 2019-03-13 | 2022-03-08 | オムロン株式会社 | Analytical equipment, analysis method, and analysis program |
CN114218098A (en) * | 2021-12-14 | 2022-03-22 | 平安国际融资租赁有限公司 | Software system testing method and device, computer equipment and readable storage medium |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08272649A (en) * | 1995-03-28 | 1996-10-18 | Nippon Telegr & Teleph Corp <Ntt> | Method for generating test item slip used for unit testing of program module |
US20050223361A1 (en) * | 2004-04-01 | 2005-10-06 | Belbute John L | Software testing based on changes in execution paths |
EP1926021A1 (en) * | 2006-11-27 | 2008-05-28 | Sysopen Digia Oyj | Software test case generation |
JP2008140263A (en) * | 2006-12-04 | 2008-06-19 | Mitsubishi Electric Corp | Unit test support device |
JP2009032133A (en) * | 2007-07-30 | 2009-02-12 | Hitachi Ltd | Test case-generating system |
-
2013
- 2013-04-03 JP JP2014512321A patent/JPWO2013161195A1/en active Pending
- 2013-04-03 WO PCT/JP2013/002319 patent/WO2013161195A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2013161195A1 (en) | 2013-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2013161195A1 (en) | Program unit test assistance device | |
JP5775829B2 (en) | Software structure visualization program and system | |
CA2956364C (en) | System and method for coverage-based automated test case augmentation for design models | |
CN104899147B (en) | A kind of code Static Analysis Method towards safety inspection | |
US10628286B1 (en) | Systems and methods for dynamically identifying program control flow and instrumenting source code | |
Krishnan et al. | Unification and refactoring of clones | |
Angerer et al. | Configuration-aware change impact analysis (t) | |
JP2015043198A (en) | Analysis system, analysis method and analysis program | |
US10915302B2 (en) | Identification and visualization of associations among code generated from a model and sources that affect code generation | |
Kirchmayr et al. | Integration of static and dynamic code analysis for understanding legacy source code | |
Bhatti | Automatic measurement of source code complexity | |
Campos et al. | GUIsurfer: A reverse engineering framework for user interface software | |
KR20190128457A (en) | Testing method and apparatus of target function incluede in target program | |
Aho et al. | Automated extraction of GUI models for testing | |
Zhao | Control-flow analysis and representation for aspect-oriented programs | |
CN112699376A (en) | Source code logic vulnerability detection method and device, computer equipment and storage medium | |
Malinao et al. | A metric for user requirements traceability in sequence, class diagrams, and lines-of-code via robustness diagrams | |
Anbunathan et al. | Basis path based test suite minimization using genetic algorithm | |
Imbugwa et al. | A case study comparing static analysis tools for evaluating SwiftUI projects | |
Gold | Reductions of control flow graphs | |
Khurana et al. | Change impact analysis and its regression test effort estimation | |
Musa et al. | Regression test framework based on extended system dependence graph for object-oriented programs | |
Kersten et al. | Improving coverage of test cases generated by symbolic pathfinder for programs with loops | |
Cuadrado et al. | Anatlyzer: Static analysis of atl model transformations | |
Brito | An Automated Debugging plug-in for Visual Studio Code |