JPWO2013161195A1 - Program unit test support device - Google Patents

Program unit test support device Download PDF

Info

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
Application number
JP2014512321A
Other languages
Japanese (ja)
Inventor
祐介 橋本
祐介 橋本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2014512321A priority Critical patent/JPWO2013161195A1/en
Publication of JPWO2013161195A1 publication Critical patent/JPWO2013161195A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test 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 Patent Document 1 automatically generates a stub function that uses the constant value used for comparison as the output variable value when the target function changes the behavior by comparing the output variable value of the lower function with the constant. However, the technique described in Patent Document 1 does not consider the case where the target function compares the output variable value of the lower function with the variable.

対象関数の内部構造を考慮しない単体テスト(ブラックボックスの単体テスト)では、テストが十分に行われたかどうかが、対象関数の関数仕様に対して入力値の場合分けを尽くしたかどうかによって判断される。関数仕様は、関数の入力値に関する制約を示す論理式である事前条件(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 Non-Patent Document 1, in a conjunctive clause of a postcondition, a product of terms including only an input variable is referred to as a guard condition, and a product of terms including an output variable is referred to as a definition condition (defining condition). If the precondition is P and each conjunctive clause of the postcondition is distinguished by the subscript i, and the conjunctive clause is composed of the logical product of the guard condition Gi and the definition condition Di, in Non-Patent Document 1, for each conjunctive clause, Considering a test condition that is a logical product (P∧Gi) of the precondition P and the guard condition Gi, an input value is generated for each test condition, thereby performing a test that exhausts the conjunctive clauses of the postcondition. That is, the concept of the technique described in Non-Patent Document 1 is that the target function should perform a specific behavior for each test condition, and the output variable value should satisfy Di as an expected result.

非特許文献1に記載された方法を用いると、事後条件の連言節に応じた振舞いを期待する入力変数値を与え、対象関数の出力変数値を前記連言節の定義条件と比較し、期待どおりの振舞いが行われたことを調べるドライバ関数を生成することができる。しかし、非特許文献1では、ドライバ関数の作成に必要となる対象関数の入力変数値は得られるが、スタブ関数の作成に必要となる対象関数の下位関数の出力変数値については何ら情報を得ることができない。   Using the method described in Non-Patent Document 1, an input variable value that is expected to behave according to a conjunctive clause of the postcondition is given, and an output variable value of the target function is compared with the definition condition of the conjunctive clause, A driver function can be generated to check that the expected behavior has been performed. However, in Non-Patent Document 1, the input variable value of the target function necessary for creating the driver function is obtained, but no information is obtained regarding the output variable value of the lower function of the target function necessary for creating the stub function. I can't.

特開2008−140263号公報(段落0039,段落0040,図8および図10)JP 2008-140263 A (paragraph 0039, paragraph 0040, FIG. 8 and FIG. 10)

Shaoying Liu and Shin Nakajima,A Decompositional Approach to Automatic Test Case Generation Based on Formal Specifications,NII Technical Report NII-2010-001E,January 2010,p.3Shaoying Liu and Shin Nakajima, A Decompositional Approach to Automatic Test Case Generation Based on Formal Specifications, NII Technical Report NII-2010-001E, January 2010, p.3

第1の問題点は、特許文献1に記載されている単体テストにおけるスタブ関数を生成する方法では、対象関数が下位関数の出力変数値を変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、前記実行経路を選択するようなスタブ関数を生成できない。その理由は、特許文献1に記載されている方法では、下位関数の出力変数値を定数と比較する場合しか考慮していないためである。   The first problem is that, in the method for generating a stub function in the unit test described in Patent Document 1, the target function compares the output variable value of the lower function with the variable value to specify after the return from the lower function. When the execution path is selected, a stub function that selects the execution path cannot be generated. This is because the method described in Patent Document 1 considers only the case where the output variable value of the lower function is compared with a constant.

第2の問題点は、非特許文献1に記載された単体テストにおけるドライバ関数を生成する方法では、対象関数が下位関数の出力変数値を定数値あるいは変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなドライバ関数を生成できない。その理由は、上記非特許文献1に記載された方法では、対象関数の開始箇所から下位関数からの復帰後の前記実行経路までの経路を調べずに、関数仕様だけから対象関数の入力変数値と期待結果を求めるためである。   The second problem is that in the method for generating a driver function in the unit test described in Non-Patent Document 1, the target function returns from the lower function by comparing the output variable value of the lower function with a constant value or a variable value. When a later specific execution path is selected, a driver function that selects the execution path cannot be generated. The reason is that in the method described in Non-Patent Document 1, the input variable value of the target function is determined only from the function specification without examining the path from the start position of the target function to the execution path after returning from the lower function. This is to obtain the expected result.

そこで、本発明は、プログラムの内部構造を考慮した網羅度を向上させることができるプログラムの単体テスト支援装置を提供することを目的とする。   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.

本発明によるプログラム単体テスト支援装置の実施形態の構成を示すブロック図である。It is a block diagram which shows the structure of embodiment of the program unit test assistance apparatus by this invention. プログラム単体テスト対象の関数(対象関数)の例を示す説明図である。It is explanatory drawing which shows the example of the function (object function) of a program unit test object. 本発明によるプログラム単体テスト支援装置の実施形態の動作を示すフローチャートである。It is a flowchart which shows operation | movement of embodiment of the program unit test assistance apparatus by this invention. 対象関数を構文解析して生成した制御フローグラフの例を示す説明図である。It is explanatory drawing which shows the example of the control flow graph produced | generated by parsing the object function. 制御フローグラフから抽出した呼出関係情報の例を示す説明図である。It is explanatory drawing which shows the example of the call related information extracted from the control flow graph. 制御フローグラフから抽出した依存関係情報の例を示す説明図である。It is explanatory drawing which shows the example of the dependency relationship information extracted from the control flow graph. 制御フローグラフから依存関係情報を抽出するためのルールの例を示す図である。It is a figure which shows the example of the rule for extracting dependency relationship information from a control flow graph. 対象関数全体の制御フローグラフから下位関数の出力変数値が影響する範囲を切り出した部分制御フローグラフの例を示す説明図である。It is explanatory drawing which shows the example of the partial control flow graph which cut out the range which the output variable value of a low-order function affects from the control flow graph of the whole object function. 部分制御フローグラフにおける経路ごとの情報(経路情報)の例を示す説明図である。It is explanatory drawing which shows the example of the information for every path | route (path | route information) in a partial control flow graph. 出力変数が直接的あるいは間接的に代入される変数を、出力変数を用いて書き換えた経路情報の例を示す説明図である。It is explanatory drawing which shows the example of the route information which rewritten the variable by which an output variable is substituted directly or indirectly using the output variable. 部分制御フローグラフにおいて経路ごとに下位関数が満たすべき事後条件(経路依存下位事後条件)の例を示す説明図である。It is explanatory drawing which shows the example of the postcondition (path dependence subpostcondition) which a lower function should satisfy | fill for every path | route in a partial control flow graph. 論理式を単純な表現に書き換えるルールの例を示す説明図である。It is explanatory drawing which shows the example of the rule which rewrites a logical expression into a simple expression. 経路依存下位事後条件から経路依存対象事前条件を計算する例を示す説明図である。It is explanatory drawing which shows the example which calculates a route dependence object precondition from a route dependence sub-postcondition. 対象関数全体の制御フローグラフから、対象関数の開始から下位関数の呼び出しまでを切り出した部分制御フローグラフの例を示す説明図である。It is explanatory drawing which shows the example of the partial control flow graph which cut out from the start of a target function to the call of a subordinate function from the control flow graph of the whole object function. 最弱事前条件を計算するルールの例を示す説明図である。It is explanatory drawing which shows the example of the rule which calculates the weakest prior condition. テストケースごとに対象関数の入力変数値と下位関数の出力変数値の例を示す説明図である。It is explanatory drawing which shows the example of the input variable value of an object function, and the output variable value of a low-order function for every test case. テストケースごとに生成したドライバ関数とスタブ関数の例を示す説明図である。It is explanatory drawing which shows the example of the driver function and stub function which were produced | generated for every test case. 本発明によるプログラム単体テスト支援装置の実施形態の別の動作例を示すフローチャートである。It is a flowchart which shows another example of operation | movement of embodiment of the program unit test assistance apparatus by this invention. テストケース全体について生成したドライバ関数とスタブ関数の別の例を示す説明図である。It is explanatory drawing which shows another example of the driver function produced | generated about the whole test case, and a stub function. 本発明によるプログラム単体テスト支援装置の主要部の構成を示すブロック図である。It is a block diagram which shows the structure of the principal part of the program unit test assistance apparatus by this invention.

以下、本発明の実施の形態について図面を参照して詳細に説明する。   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 test support apparatus 10 according to the present invention. As shown in FIG. 1, the program unit test support apparatus 10 of this embodiment includes an input / output device 11, a processing control unit 12, a syntax analysis unit 13, a stub function output analysis unit 14, a target function input analysis unit 15, and the like. The test case generation unit 16, the permanent storage unit 17, and the temporary storage unit 18 are provided. The input / output device 11, the processing control unit 12, the permanent storage unit 17, and the temporary storage unit 18 may be provided outside the program unit test support device 10.

本実施形態のプログラム単体テスト支援装置10は、C言語等の高級プログラミング言語により記述されたプログラムにおける構成単位であるモジュールに対する単体テストを行うものである。以下では、簡単のために関数を用いて説明を行うが、プログラム単体テスト支援装置10は、一般的なプログラムのモジュールに適用可能であり、明細書中では、C言語等における関数を明示的に意味する場合を除けば、本発明における関数はモジュールという、より広い概念を意味するものとする。   The program unit test support apparatus 10 according to the present embodiment performs unit tests on modules that are constituent units in a program described in a high-level programming language such as C language. In the following, description will be made using functions for the sake of simplicity. However, the program unit test support apparatus 10 can be applied to general program modules, and in the specification, functions in C language or the like are explicitly expressed. Except in this case, the functions in the present invention mean a broader concept of modules.

図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 test support apparatus 10 of the present embodiment is a function in a program described in C language as exemplified in FIG. In the program described in FIG. 2, a function target having x and y as input variables and no output variable is defined. The function target is an example of a target function. The function “target” internally calls the function “foo”. The function foo is an example of a lower function of the target function.

図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 / output device 11 is an interface between the program unit test support device 10 and the user, and includes an input device and an output device. The input / output device 11 is realized by, for example, a display, a keyboard, a mouse, and the like.

永続記憶部17は、入出力装置11を介して入力された単体テストの対象プログラムを記憶する。対象プログラムは、対象関数の定義と、下位関数の宣言と、各関数の関数仕様とを含む。また、永続記憶部17は、テストケース生成部16によって生成されるスタブ関数とドライバ関数とを記憶する。   The permanent storage unit 17 stores a unit test target program input via the input / output device 11. The target program includes the definition of the target function, the declaration of the lower function, and the function specification of each function. The permanent storage unit 17 stores a stub function and a driver function generated by the test case generation unit 16.

一時記憶部18は、スタブ関数とドライバ関数とを生成するために対象プログラムから生成した、後述する様々な情報を記憶する。これらの情報は、スタブ関数およびドライバ関数が生成された後は不要となる。   The temporary storage unit 18 stores various types of information, which will be described later, generated from the target program in order to generate a stub function and a driver function. Such information becomes unnecessary after the stub function and the driver function are generated.

構文解析部13は、対象関数を構文解析して、処理の流れを表す制御フローグラフ(control flow graph)を作成し、一時記憶部18に出力する。また、構文解析部13は、制御フローグラフから、関数呼出しに関して、プログラム上の位置(例えば、行番号)と、呼出関係情報と、依存関係情報とを抽出し、一時記憶部18に出力する。呼出関係情報は、対象関数を呼出す上位関数と、対象関数から呼ばれる下位関数との組を管理する情報である。依存関係情報は、対象関数の変数の依存関係を管理する情報である。   The syntax analysis unit 13 parses the target function, creates a control flow graph representing the flow of processing, and outputs the control flow graph to the temporary storage unit 18. Further, the syntax analysis unit 13 extracts a position on the program (for example, a line number), call relationship information, and dependency relationship information regarding the function call from the control flow graph, and outputs it to the temporary storage unit 18. The call relation information is information for managing a set of a higher function that calls a target function and a lower function that is called from the target function. The dependency relationship information is information for managing the dependency relationship of the variable of the target function.

スタブ関数出力分析部14は、呼出関係情報の下位関数において、その出力変数値によって選択されるプログラムの実行経路(以下、経路と記載する)を特定し、その経路を実行し得るような下位関数の事後条件(経路依存下位事後条件)を計算し、計算した結果を一時記憶部18に出力する。   The stub function output analysis unit 14 specifies a program execution path (hereinafter referred to as a path) selected by the output variable value in a lower function of the call relation information, and can execute the path. The post-condition (route-dependent sub-post condition) is calculated, and the calculated result is output to the temporary storage unit 18.

対象関数入力分析部15は、下位関数の呼出し箇所から対象関数の開始箇所へと制御フローグラフをプログラム実行とは逆向きに辿り、経路依存下位事後条件と下位関数の事前条件の積を元に、逆向きに辿る経路における代入式や制御式を考慮して、対象関数の開始箇所で成立すべき条件(以下、経路依存対象最弱事前条件と呼ぶ)を計算する。また、対象関数入力分析部15は、経路依存対象最弱事前条件と対象関数の事前条件との論理積(以下、経路依存対象事前条件と呼ぶ)を計算する。そして、対象関数入力分析部15は、経路依存対象最弱事前条件と、経路依存対象事前条件とを一時記憶部18に出力する。   The target function input analysis unit 15 traces the control flow graph from the calling position of the lower function to the start position of the target function in the opposite direction to the program execution, and based on the product of the path dependent lower postcondition and the lower function precondition. In consideration of substitution formulas and control formulas in the path traced in the opposite direction, a condition to be satisfied at the start point of the target function (hereinafter referred to as a path-dependent target weakest precondition) is calculated. Further, the target function input analysis unit 15 calculates a logical product (hereinafter referred to as a path dependent target precondition) of the path dependent target weakest precondition and the precondition of the target function. Then, the target function input analysis unit 15 outputs the path dependence target weakest precondition and the path dependence target precondition to the temporary storage unit 18.

テストケース生成部16は、経路依存対象事前条件を充足する値を計算し、この値を入力変数値として対象関数に与えるドライバ関数を生成する。また、テストケース生成部16は、経路依存対象事前条件に対応する経路依存下位事後条件を充足する値を計算し、この値を出力変数値とするスタブ関数を生成する。そして、テストケース生成部16は、ドライバ関数とスタブ関数との組をテストケースとして永続記憶部17に出力する。   The test case generation unit 16 calculates a value that satisfies the path-dependent target precondition, and generates a driver function that gives this value to the target function as an input variable value. In addition, the test case generation unit 16 calculates a value that satisfies the path-dependent sub-postcondition corresponding to the path-dependent target precondition, and generates a stub function that uses this value as an output variable value. Then, the test case generation unit 16 outputs a set of the driver function and the stub function to the permanent storage unit 17 as a test case.

処理制御部12は、入出力装置11を介して入力された指示情報をもとに、構文解析部13、スタブ関数出力分析部14、対象関数入力分析部15、およびテストケース生成部16等に対する制御を行う。   Based on the instruction information input via the input / output device 11, the processing control unit 12 applies to the syntax analysis unit 13, the stub function output analysis unit 14, the target function input analysis unit 15, the test case generation unit 16, and the like. Take control.

処理制御部12、構文解析部13、スタブ関数出力分析部14、対象関数入力分析部15、およびテストケース生成部16は、プログラムにしたがって処理を実行する、コンピュータ内のCPU(Central Processing Unit:中央処理装置)等の演算装置によって実現される。演算装置により実行されるプログラムは、ハードディスク等の記憶装置に記憶され、演算される際にはメモリ装置等の一時記憶領域に記憶される。永続記憶部17は、ハードディスク等の記憶装置により実現される。一時記憶部18はメモリ装置またはハードディスク等の記憶装置により実現される。   The processing control unit 12, the syntax analysis unit 13, the stub function output analysis unit 14, the target function input analysis unit 15, and the test case generation unit 16 execute processing according to a program, and a CPU (Central Processing Unit) in the computer It is realized by an arithmetic device such as a processing device. A program executed by the arithmetic device is stored in a storage device such as a hard disk, and when calculated, is stored in a temporary storage area such as a memory device. The permanent storage unit 17 is realized by a storage device such as a hard disk. The temporary storage unit 18 is realized by a storage device such as a memory device or a hard disk.

次に、本実施形態の動作を説明する。図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 / output device 11 inputs, for example, a program including the definition and function specification of the target function target shown in FIG. 2 and a program including the declaration of the lower function foo and the function specification that are called from the target. These programs are stored in the permanent storage unit 17.

ステップS202において、構文解析部13は、対象関数を定義したプログラムコードを構文解析し、制御フローグラフを生成し、一時記憶部18に記憶させる。図4は、対象関数targetを構文解析して生成した制御フローグラフである。図4に示す制御フローグラフでは、処理の開始および終了を丸みのある矩形ノードで表し、式の実行を矩形ノード(以下、実行ノードと呼ぶ)で表し、式からの値の取得(以下、式の判定と呼ぶ)をひし形ノード(以下、判定ノードと呼ぶ)で表している。   In step S202, the syntax analysis unit 13 parses the program code defining the target function, generates a control flow graph, and stores the control flow graph in the temporary storage unit 18. FIG. 4 is a control flow graph generated by parsing the target function target. In the control flow graph shown in FIG. 4, the start and end of processing are represented by rounded rectangular nodes, the execution of an expression is represented by a rectangular node (hereinafter referred to as an execution node), and acquisition of a value from the expression (hereinafter, expression Is referred to as a diamond node (hereinafter referred to as a determination node).

図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 syntax analysis unit 13 specifies a function call location in the target function using the control flow graph generated in step S202. Then, the syntax analysis unit 13 uses the combination of the position of the function call on the program, the upper function that is the target function calling side, and the lower function that is called from the target function as the call storage information as the temporary storage unit 18. Remember me. FIG. 5 is an explanatory diagram showing an example of call relation information extracted from the control flow graph. In the example shown in FIG. 5, the function target calls the function foo on the third line of the program.

ステップS204において、構文解析部13は、依存関係情報を抽出する。具体的には、構文解析部13は、ステップS202で生成した制御フローグラフを終了ノードから開始ノードへと辿り、あるノードを依存元ノードとみなして、依存元ノードにおける代入式の右辺に出現する変数あるいは制御式に出現する変数を依存元変数として特定する。また、構文解析部13は、依存元ノードよりも矢印を逆に辿って前にあるノードのうち、依存元変数の値が参照あるいは設定されるような最も近いノードを依存先ノードとして特定する。   In step S204, the syntax analysis unit 13 extracts dependency relationship information. Specifically, the syntax analysis unit 13 traces the control flow graph generated in step S202 from the end node to the start node, regards a certain node as a dependency source node, and appears on the right side of the substitution expression in the dependency source node. The variable or variable appearing in the control expression is specified as the dependent variable. Further, the syntax analysis unit 13 traces the arrow backward from the dependency source node, and identifies the closest node from which the value of the dependency source variable is referred or set as the dependency destination node.

図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 syntax analysis unit 13 applies the dependency relationship extraction rule shown in FIG. 7 to each node, extracts dependency relationship information, and stores it in the temporary storage unit 18. For example, in the example of the control flow graph shown in FIG. 4, there is a determination node described as 6: z == y. When attention is paid to z among variables appearing in the control expression z == y, the determination node that traces one arrow in the reverse direction is 5: z <= y. Therefore, the syntax analysis unit 13 determines that z in the sixth line depends on z in the fifth line (dependency relationship of number 12 in FIG. 6) according to the rule of number 4 shown in FIG. The fact that the z of the eye depends on y in the fifth row (the dependency of number 11 in FIG. 6) is extracted as dependency information.

続くステップS210からステップS212までは、構文解析部13は、呼出関係情報に登録された下位関数の1つを選択して、ステップS211およびステップS220からステップS227の処理を繰り返す。図5に示す呼出関係情報には、下位関数としてfooが登録されているので、構文解析部13は、下位関数としてfooを選択し、ステップS211の処理を行う。   In subsequent steps S210 to S212, the syntax analysis unit 13 selects one of the lower functions registered in the call relation information, and repeats the processing of steps S211 and S220 to S227. Since foo is registered as a lower function in the call relation information shown in FIG. 5, the syntax analysis unit 13 selects foo as the lower function, and performs the process of step S211.

ステップS211において、構文解析部13は、依存関係情報から、選択された下位関数の出力変数および出力変数が代入された変数を依存先変数とし、依存種別が制御であり依存元変数が依存先変数とは異なる依存関係を特定する。そして、構文解析部13は、下位関数の呼び出しを実行するノードから特定された依存関係情報の依存元変数に対応するノードまでを、ステップS202で抽出した制御フローグラフから部分グラフ(以下、復帰後部分制御フローグラフ)として抽出する。   In step S211, the syntax analysis unit 13 sets the output variable of the selected lower function and the variable substituted with the output variable as the dependency destination variable from the dependency relationship information, the dependency type is control, and the dependency source variable is the dependency destination variable. Identify different dependencies. Then, the syntax analysis unit 13 sub-graphs (hereinafter, after return) from the control flow graph extracted in step S202 from the node that executes the call of the lower function to the node corresponding to the dependency source variable of the specified dependency relationship information. Extract as a partial control flow graph.

さらに、構文解析部13は、抽出した復帰後部分制御フローグラフの末端のノードから矢印を逆に辿り下位関数の呼び出しを行う実行ノードまでの経路を求める。経路の求める手順を、図6を用いて詳しく説明する。図6に示す番号4の依存関係では、下位関数fooの戻り値が変数tに代入される。さらに、番号6の依存関係では、変数tが変数zに代入される。つまり、下位関数fooの出力変数値が直接的または間接的に代入される変数は、tおよびzである。   Further, the syntax analysis unit 13 obtains a path from the terminal node of the extracted post-return partial control flow graph to the execution node that calls the lower function by tracing the arrow in the reverse direction. A procedure for obtaining a route will be described in detail with reference to FIG. In the dependency relationship of number 4 shown in FIG. 6, the return value of the lower function foo is substituted into the variable t. Furthermore, in the dependency relationship of number 6, the variable t is substituted for the variable z. That is, the variables to which the output variable value of the lower function foo is directly or indirectly substituted are t and z.

構文解析部13は、図6に示す依存関係情報から、下位関数fooの呼出し後に変数tおよび変数zが依存先変数であり、依存元変数が依存先変数とは異なり、依存種別が制御である依存関係として、番号14、番号16および番号18の依存関係を抽出する。そして、構文解析部13は、下位関数fooを呼び出す実行ノードから、抽出された依存関係における依存元変数に相当するノードまでを、図4の制御フローグラフから部分的に切り出した制御フローグラフを、部分制御フローグラフとして抽出する。図8は、対象関数全体の制御フローグラフから下位関数の出力変数値が影響する範囲を切り出した部分制御フローグラフの例を示す説明図である。   Based on the dependency relationship information shown in FIG. 6, the syntax analysis unit 13 determines that the variable t and the variable z are dependent variables after the lower function foo is called, the dependent variable is different from the dependent variable, and the dependent type is control. As the dependency relationships, the dependency relationships of number 14, number 16, and number 18 are extracted. Then, the syntax analysis unit 13 obtains a control flow graph obtained by partially cutting the control flow graph of FIG. 4 from the execution node that calls the lower function foo to the node corresponding to the dependency source variable in the extracted dependency relationship. Extract as a partial control flow graph. FIG. 8 is an explanatory diagram illustrating an example of a partial control flow graph in which a range affected by the output variable value of the lower function is cut out from the control flow graph of the entire target function.

図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 output analysis unit 14 relates to the path selected in step S220, at the return point from the lower function to the target function, the constraint condition that the output variable should satisfy, that is, the post function of the lower function depending on the path. The conditions (hereinafter referred to as path-dependent sub-post conditions) are calculated as described below. First, the stub function output analysis unit 14 extracts an execution node or a determination node related to a variable in which the output variable value of the lower function is directly or indirectly substituted from the partial control flow graph cut out in step S211. The position and expression on the program attached to the node are extracted for each route (hereinafter referred to as route information). The control expression is extracted including its determination result.

スタブ関数出力分析部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 output analysis unit 14 obtains the expression (x == 0) == false. x! Replace with = 0. Further, the stub function output analysis unit 14 moves from the smaller position (line number) on the program to the larger position in the route information, and changes the variable of a certain expression to the nearest substitution expression at a position smaller than the expression. Repeat replacing on the right side. Finally, the stub function output analysis unit 14 extracts a control expression from the rewritten route information, takes a logical product of these, and corrects it to a simple expression using a rewrite rule prepared in advance.

以下、ステップ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 output analysis unit 14 extracts, from the nodes of the partial control flow graph shown in FIG. 8, expressions of nodes where t and z appear. As a result, path-1 path information as shown in FIG. 9 is obtained.

図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 number 3. The stub function output analysis unit 14 rewrites t appearing on the right side of the subsequent number 4 expression using the right side foo. Since the assignment expression with the next smallest position on the program is z = foo + 1, the stub function output analysis unit 14 rewrites z appearing in the subsequent numbers 5 and 6 using the right side foo + 1. As a result, the path-1 path information shown in FIG. 10 is obtained.

図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 output analysis unit 14 calculates the logical product of the control expressions in the rewritten path-1 path information shown in FIG. 10, and as a result, foo + 1 <= y∧foo + 1 == y is obtained. The stub function output analysis unit 14 applies the rewrite rule of number 3 shown in FIG. 12 to this expression to obtain foo + 1 == y. Then, the stub function output analysis unit 14 rewrites the lower function name foo with __return indicating the return value. As a result, the path-1 subordinate post-condition __return + 1 == y of path-1 shown in FIG. 11 is obtained as a post condition of foo that executes the path path-1 after returning from the lower function foo.

ステップS222において、対象関数入力分析部15は、ステップS221で得た経路依存下位事後条件と、下位関数の事後条件(下位事後条件)から選択した1つの定義条件の論理積を算出し、図12の書き換えルールを用いて単純な式に書き換える。もし、戻り値__returnが残っていれば、対象関数入力分析部15は、さらに書き換え後の式を真(true)に書き換える。対象関数入力分析部15は、この書き換え後の式と選択した前記定義条件に対応するガード条件と下位関数の事前条件との論理積を算出し、図12の書き換えルールを用いて単純な式に書き換えた式を、経路に依存した下位関数の事前条件(以下、経路依存下位事前条件と呼ぶ)を得る。   In step S222, the target function input analysis unit 15 calculates a logical product of one definition condition selected from the path-dependent sub-post condition obtained in step S221 and the post-condition (sub-post condition) of the sub-function. Rewrite to a simple expression using the rewrite rule If the return value __return remains, the target function input analysis unit 15 further rewrites the rewritten expression to true. The target function input analysis unit 15 calculates a logical product of the rewritten expression and the guard condition corresponding to the selected definition condition and the precondition of the lower function, and uses the rewrite rule in FIG. The rewritten formula obtains a precondition of a subordinate function dependent on the path (hereinafter referred to as a path dependent subprecondition).

図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 input analysis unit 15 calculates the logical product of the path-dependent path post-conditions __return + 1 == y of FIG. 11 in FIG. 11 and the definition condition __return == 1 of the sub-function foo of FIG. If the formula is simplified using the rewrite rule of 9, y == 2 is obtained. Next, the target function input analysis unit 15 calculates a logical product of the expression y == 2, the guard condition x == 0 and the pre-condition x> = 0 of foo, and the rewrite rule of number 3 in FIG. Using this to simplify the equation yields the path dependent subprecondition x == 0 && y == 2.

ステップS223において、対象関数入力分析部15は、ステップS222で得た経路依存下位事前条件を満たす状態に至るような対象関数の開始点における制約条件(以下、経路依存対象最弱事前条件と呼ぶ)を計算し、一時記憶部18に出力する。以下、ステップS223の処理を具体的に説明する。   In step S223, the target function input analysis unit 15 defines a constraint condition at the start point of the target function that reaches the state satisfying the path-dependent lower precondition obtained in step S222 (hereinafter referred to as a path-dependent target weakest precondition). Is output to the temporary storage unit 18. Hereinafter, the process of step S223 will be specifically described.

図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 input analysis unit 15 creates a partial control flow graph obtained by extracting from the control function flow graph of the target function from the start position of the target function to the calling position of the lower function, as shown in FIG. Then, the target function input analysis unit 15 traces the arrow in the reverse direction from the node that executes the call of the lower function in the partial control flow graph. Then, the target function input analysis unit 15 uses the path-dependent lower precondition as an initial expression and uses the expression attached to each node and the weakest precondition calculation rule as shown in FIG. The constraint condition that leads to the call is obtained, and this is repeated up to the starting node.

以下、図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 input analysis unit 15 applies the number 2 in FIG. 15 to the sequence of the formulas obtained by connecting the control formula 0 <y and the path-dependent lower precondition x == 0 && y == 2 obtained in step S222. If the weakest precondition calculation rule is used, 0 <y && x == 0 && y == 2 is obtained. Furthermore, if the target function input analysis unit 15 simplifies the expression using the rewrite rules of number 15 and number 8 in FIG. 12, the path-dependent target weakest precondition x == 0 && y == for the path path-1. Get 2.

ステップ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 input analysis unit 15 calculates a logical product of the path dependent target weakest precondition obtained in step S223 and the precondition of the target function, and outputs the logical product to the temporary storage unit 18 as the path dependent target precondition. To do. The target function input analysis unit 15 assigns one test case number if the path-dependent target precondition is not false. In the following, with respect to the row immediately below the heading row in FIG. 13, an example of calculating the route-dependent target precondition for the route path−1 in FIG. 11 is shown. The logical product of the path-dependent target weakest precondition x == 0 && y == 2 and the precondition x + y> 0 of the target function in FIG. 2 is x == 0 && y == 2 && x + y> 0. For this calculation result, the target function input analysis unit 15 assigns Tid-1 as a test case number.

ステップS225において、テストケース生成部16は、ステップS224で得られた経路依存対象事前条件を充足する対象関数の入力変数値と、ステップS221で得られた経路依存下位事後条件を充足する下位関数の出力変数値とを、一般の制約充足アルゴリズムを用いて計算する。   In step S225, the test case generation unit 16 sets the input variable value of the target function that satisfies the path-dependent target precondition obtained in step S224 and the lower-level function that satisfies the path-dependent sub-postcondition obtained in step S221. The output variable value is calculated using a general constraint satisfaction algorithm.

図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 case generation unit 16 obtains 0 and 2 as the values of the variables x and y satisfying the route dependence target precondition x == 0 && y == 2 && x + y> 0 for the test case number Tid−1, respectively. . Further, the test case generation unit 16 obtains 1 as the return value __return of the lower function foo that satisfies the path-dependent postcondition __return + 1 == y.

ステップS226において、テストケース生成部16は、ステップS225で得た対象関数の入力変数値と下位関数の出力変数値を用いて、当該入力変数値を与えて対象関数を呼び出すドライバ関数と、下位関数に代わって当該出力変数値を出力するスタブ関数を生成する。図17は、テストケースごとに生成したドライバ関数とスタブ関数の例を示す説明図である。図17は、図13および図16に示したテストケース番号Tid−1に対するドライバ関数とスタブ関数の生成例である。   In step S226, the test case generation unit 16 uses the input variable value of the target function obtained in step S225 and the output variable value of the lower function to give the input variable value and call the target function, and the lower function A stub function that outputs the output variable value is generated instead of. FIG. 17 is an explanatory diagram illustrating an example of a driver function and a stub function generated for each test case. FIG. 17 shows an example of generating a driver function and a stub function for the test case number Tid-1 shown in FIGS.

なお、図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 case generation unit 16 generates a test program for each test case number as shown in FIG. 17, but in the operation shown in FIG. After a series of processes for each path, a test program is generated. As a result, when the operation shown in FIG. 18 is performed, the test case generation unit 16 can generate a test program in which all the test case numbers are collected as shown in FIG.

本実施形態のプログラム単体テスト支援装置によれば、対象関数が下位関数の出力変数値を変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなスタブ関数を生成できる。その理由は、本実施形態のプログラム単体テスト支援装置は、下位関数の出力変数値を変数と比較する場合も考慮して、下位関数の出力変数値が充足すべき下位関数の事後条件(経路依存下位事後条件)を計算し、経路依下位事後条件を充足する値を出力変数値とするスタブ関数を生成するからである。   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 test support apparatus 10 according to the present invention provides 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. Is a program unit test support device that supports a program unit test performed using a stub function that is a function that simulates the operation of the subordinate function and is replaced with the subordinate function, and an output variable of the subordinate function in the target function as a main component A structure analysis unit 13 that identifies a part affected by a value, and a constraint that an output variable value of a lower function must satisfy in order to analyze a path after returning from a lower function in the target function part and execute the path Stub function output analysis unit 14 that calculates the path-dependent sub-postcondition as a path-dependent sub-post condition, and The target function input analysis unit 15 that calculates a constraint on the input value of the target function for executing the path after returning from the lower-level function in the target function as a path-dependent target precondition, and an input variable that satisfies the path-dependent target precondition A driver function that provides a value, and a test case generation unit 16 that generates a stub function that outputs an output variable value that satisfies a path-dependent sub-post condition.

また、上記の実施形態では、以下の(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.

産業上の利用の可能性Industrial applicability

本発明にかかるプログラムの単体テスト支援装置は、高級プログラミング言語で記述されたプログラムのドライバ関数およびスタブ関数を用いた単体テストに適用できる。   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 SYMBOLS 10 Program unit test support apparatus 11 Input / output device 12 Processing control part 13 Syntax analysis part 14 Stub function output analysis part 15 Target function input analysis part 16 Test case generation part 17 Persistent storage part 18 Temporary storage part

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 .
JP2014512321A 2012-04-26 2013-04-03 Program unit test support device Pending JPWO2013161195A1 (en)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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