JP2008140263A - 単体試験支援装置 - Google Patents
単体試験支援装置 Download PDFInfo
- Publication number
- JP2008140263A JP2008140263A JP2006327324A JP2006327324A JP2008140263A JP 2008140263 A JP2008140263 A JP 2008140263A JP 2006327324 A JP2006327324 A JP 2006327324A JP 2006327324 A JP2006327324 A JP 2006327324A JP 2008140263 A JP2008140263 A JP 2008140263A
- Authority
- JP
- Japan
- Prior art keywords
- function
- stub
- test
- value
- output
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】スタブ関数を用いたソフトウェアの単体試験において、試験対象の関数が呼び出す下位関数と試験対象の関数との間の入出力のインターフェースを実装したスタブ関数を自動的に生成することにより、ソフトウェアの単体試験の試験効率を向上させること。
【解決手段】スタブ関数I/F抽出部3は試験対象の関数とこの試験対象の関数が呼び出す下位関数との間の入出力のI/Fを抽出し、スタブ関数I/F分析部4は抽出されたI/Fを分析する。スタブ関数生成部5は、I/Fの抽出分析結果に基づいて、下位関数と試験対象の関数との間の入出力のインターフェースを実装したスタブ関数を生成する。スタブ関数出力値生成部6はスタブ関数の出力変数の出力値を生成する。テストケース生成部7は、試験対象の関数の入力変数の取り得る値と、スタブ関数出力値生成部6が出力したスタブ関数の出力変数の取り得る値とからテストケースの作成を行う。
【選択図】 図1
【解決手段】スタブ関数I/F抽出部3は試験対象の関数とこの試験対象の関数が呼び出す下位関数との間の入出力のI/Fを抽出し、スタブ関数I/F分析部4は抽出されたI/Fを分析する。スタブ関数生成部5は、I/Fの抽出分析結果に基づいて、下位関数と試験対象の関数との間の入出力のインターフェースを実装したスタブ関数を生成する。スタブ関数出力値生成部6はスタブ関数の出力変数の出力値を生成する。テストケース生成部7は、試験対象の関数の入力変数の取り得る値と、スタブ関数出力値生成部6が出力したスタブ関数の出力変数の取り得る値とからテストケースの作成を行う。
【選択図】 図1
Description
本発明は、ソフトウェアを開発する際のソフトウェアの単体試験を支援する装置に関するものである。
従来の高級言語プログラムの単体試験方法として、下位の関数からプログラムを実装して試験を実施するボトムアップ方式の試験方法と、上位の関数からプログラムを実装して試験を実施するトップダウン方式の試験方法がある。一般に、ボトムアップ方式の試験では、試験対象の関数を呼び出す上位の関数を擬似するドライバ関数と呼ばれる関数の実装が必要となる。ドライバ関数は試験対象の関数の実行に必要な変数等に値を設定し、試験対象の関数を呼び出す。一方、トップダウン方式の試験では、試験対象の関数が呼び出す下位の関数を擬似するスタブ関数と呼ばれる関数の実装が必要となる。スタブ関数は、試験対象の関数からの呼び出しに対して、試験対象の関数の実行を継続できるように、出力引数等の値を設定する。但し、ボトムアップ方式の試験において、試験対象の関数が呼び出す下位の関数が既に実装されている場合でも、試験時に試験の網羅率を上げ、又は異常系の特殊な試験を行う場合には、実装されている下位の関数の代わりに、試験でのみ使用するスタブ関数を実装して試験を行うことがある。
スタブ関数を用いて試験を行う際に、試験対象の関数がスタブ関数の戻り値等の出力変数の値をスタブ関数の呼出し後に参照する場合には、スタブ関数の出力変数の値を任意に設定して試験ができることが望ましい。また、試験対象の関数が、スタブ関数にスタブ関数の引数として入力変数を渡す場合に、正しい値を渡しているかどうかをスタブ関数の内部で確認できることが望ましい。このような目的のために、従来、単体試験においてスタブ関数を使用する場合、スタブ関数の作成は主に作業者が行っていた。
また、市販されているC++Test(登録商標)など、スタブ関数を自動生成するツールは存在するが、スタブ関数の戻り値及び出力変数の値等を任意の値に設定し、また、スタブ関数の入力変数の値を確認する仕組みを備えたスタブ関数の作成は行なっておらず、自由度の高い単体試験の実施が困難となっている。
また、特許文献1では、ハードウェアの制御を目的としたソフトウェアの開発を支援するソフトウェア開発支援方法において、ハードウェア仕様情報とソフトウェア設計情報とを関連づけた入出力動作仕様情報及び入出力スタブコマンド生成規則から、ハードウェアとソフトウェアが連係して実現するシステムの動作を模擬する入出力スタブ関数の自動生成を行う技術が開示されている。
また、特許文献2では、テストドライバの中でスタブ関数を記述すると、テスト実行中に、スタブ関数の処理を展開して試験を行う方法が記載されている。
しかしながら、上記従来のスタブ関数を用いたソフトウェアの単体試験においては、テストスタブを作業者が作成する必要があった。そのため、単体試験作業の効率が低下するという問題があった。
例えば、作業者はスタブ関数の出力変数がどのような値を出力すべきかを入力する必要があった。また、スタブ関数の出力まで考慮して、単体試験の入力としてどのような入力条件を与えるべきかを作業者が与える必要があった。これらは、単体試験作業の効率を低下させる要因となっている。
また、市販されている単体試験支援環境では、スタブ関数が自動生成されても、スタブ関数の出力変数の値を任意に設定できないという問題があった。さらに、スタブ関数の引数としての入力変数の値を確認できないため、試験の信頼性に影響を及ぼす可能性があった。これらは、自由度の高い単体試験の実施を困難としていた。
本発明は、上記に鑑みてなされたものであって、スタブ関数を用いたソフトウェアの単体試験において、試験対象の関数が呼び出す下位の関数と、試験対象の関数との間の入出力のインターフェースを実装したスタブ関数を生成することにより、ソフトウェアの単体試験の試験効率を向上させることが可能なソフトウェアの単体試験支援装置を得ることを目的とする。また、自由度の高い単体試験の実施を可能としたソフトウェアの単体試験支援装置を得ることを目的とする。
上述した課題を解決し、目的を達成するために、本発明にかかるソフトウェアの単体試験支援装置は、試験対象の関数が呼び出す下位関数をその動作を模擬する関数であるスタブ関数で置き換えた後に前記試験対象の関数の試験を行うソフトウェアの単体試験において、前記スタブ関数を自動生成することにより単体試験を支援する単体試験支援装置であって、前記下位関数を前記試験対象の関数から特定し、前記下位関数と前記試験対象の関数との間の入出力のインターフェースを抽出するインターフェース抽出手段と、前記インターフェース抽出手段により抽出された前記インターフェースを分析するインターフェース分析手段と、前記インターフェース分析手段による前記インターフェースの分析結果に基づいて、前記インターフェースを備えたスタブ関数を生成するスタブ関数生成手段と、を備えることを特徴とする。
本発明によれば、スタブ関数を用いたソフトウェアの単体試験において、試験対象の関数とこの試験対象の関数が呼び出す下位関数との間の入出力のインターフェースを実装したスタブ関数を自動的に生成するようにしたので、スタブ関数の生成作業の効率が向上し、ソフトウェアの効率的な単体試験が可能になる、という効果を奏する。
以下に、本発明にかかるソフトウェアの単体試験支援装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
実施の形態1.
図1は、本発明にかかる単体試験支援装置の実施の形態1の構成を示すブロック図である。図1に示すように、本実施の形態の単体試験支援装置20は、入出力装置1と、システム制御部2と、スタブ関数I/F(インターフェース)抽出部3と、スタブ関数I/F分析部4と、スタブ関数生成部5と、スタブ関数出力値生成部6と、テストケース生成部7と、入力変数値記憶部12と、ソースコード記憶部8と、スタブ関数I/F記憶部9と、スタブ関数記憶部10と、テストケース記憶部11と、から構成される。
図1は、本発明にかかる単体試験支援装置の実施の形態1の構成を示すブロック図である。図1に示すように、本実施の形態の単体試験支援装置20は、入出力装置1と、システム制御部2と、スタブ関数I/F(インターフェース)抽出部3と、スタブ関数I/F分析部4と、スタブ関数生成部5と、スタブ関数出力値生成部6と、テストケース生成部7と、入力変数値記憶部12と、ソースコード記憶部8と、スタブ関数I/F記憶部9と、スタブ関数記憶部10と、テストケース記憶部11と、から構成される。
本実施の形態にかかる単体試験支援装置は、高級言語により記述されたプログラムにおける構成単位であるモジュール、例えば関数等に対する単体試験を行うものである。以下では、簡単のために関数を用いて説明を行うが、本発明は一般のモジュールに適用可能であることは明白であり、明細書中では、C言語等における関数を明示的に意味する場合を除けば、関数はこのようなより広い概念を意味するものとする。本実施の形態においては、単体試験支援装置20は、図2に例示するような、例えばC言語で記述されたプログラム中の関数を試験対象の関数(以下、試験対象関数という)とする。図2に記述されたプログラムには、入力変数としてinput_datを有し、戻り値としてret_datを返す関数func1が定義されている。この関数func1が、試験対象関数の一例である。
入出力装置1は、単体試験支援装置20と利用者との間のI/Fであり、入力装置及び出力装置からなる。入出力装置1は、例えば、ディスプレイ、キーボード、及びマウス等から構成される。
ソースコード記憶部8には、入出力装置1を介して入力された試験対象プログラムが記憶される。また、入力変数値記憶部12には、試験対象関数の入力変数及び入力変数の取り得る値が記憶される。
スタブ関数I/F抽出部3は、試験対象関数が呼び出す下位関数を特定し、この下位関数と試験対象関数との間の入出力を規定するI/Fを抽出する。スタブ関数I/F抽出部3により抽出されたI/Fは、スタブ関数I/F記憶部9に記憶される。スタブ関数I/F分析部4は、スタブ関数I/F抽出部3により抽出された抽出結果を分析し、I/Fを分類し特定する。スタブ関数I/F分析部4により分析されたI/Fの分析結果は、スタブ関数I/F記憶部9に記憶される。ここで、下位関数と試験対象関数との間の関係を規定するI/Fとは、下位関数の入出力動作仕様に関する情報であり、例えば、引数設定情報、戻り値情報等からなる。スタブ関数I/F抽出部3により抽出されたI/Fは、試験対象関数の下位関数の動作を擬似するスタブ関数の生成に使用される。
スタブ関数生成部5は、スタブ関数I/F記憶部9に記憶されたI/F、及びI/Fの分析結果に基づき、スタブ関数を生成する。
また、スタブ関数出力値生成部6は、スタブ関数I/F記憶部9に記憶されたI/F、I/F分析結果、及びソースコード記憶部8に記憶された試験対象プログラムに基づいて、スタブ関数の出力変数の出力値を生成し、出力変数及び出力値はスタブ関数記憶部10に記憶される。
テストケース生成部7は、入力変数値記憶部12に記憶された試験対象関数の入力変数及び入力変数の取り得る値と、スタブ関数記憶部10に記憶されたスタブ関数の出力変数及び出力変数の取り得る値から、単体試験時におけるスタブ関数のテストケースを生成し、このテストケースの情報はテストケース記憶部11に記憶される。
システム制御部2は、入出力装置1を介して入力された指示情報をもとに、スタブ関数I/F抽出部3、スタブ関数I/F分析部4、スタブ関数生成部5、スタブ関数出力値生成部6、及びテストケース生成部7等に対する制御を行う。
システム制御部2、スタブ関数I/F抽出部3、スタブ関数I/F分析部4、スタブ関数生成部5、スタブ関数出力値生成部6、及びテストケース生成部7は、コンピュータのCPU(Central Processing Unit:中央処理装置)等の演算装置、演算装置が解釈するプログラムが記憶されているハードディスク等の記憶装置、また、演算に必要なメモリ装置から実現される。入力変数値記憶部12、ソースコード記憶部8、スタブ関数I/F記憶部9、スタブ関数記憶部10、及びテストケース記憶部11は、ハードディスク等の記憶装置から実現される。
次に、本実施の形態の動作について、図1〜図6を参照して説明する。図3は、単体試験を行うまでの標準的な作業手順を表すフローチャート、図4は、スタブ関数I/F分析部による分析手順を表すフローチャート、図5は、スタブ関数I/Fの分析例、図6は、図2に示す試験対象関数が呼び出す下位関数の一例である。
先ず、図3を参照して、図2のプログラム中に定義されている関数func1の単体試験を行うまでの標準的な流れについて説明する。図3に示すように、ステップS301において、利用者が試験対象関数と試験対象関数の入力変数及びその取り得る値を指定する。即ち、利用者は図1の入出力装置1を介して、例えば図2の試験対象関数func1を含む試験対象プログラムを単体試験支援装置20に入力し、試験対象プログラムを図1のソースコード記憶部8に記憶させる。さらに、利用者は、試験対象関数の入力変数である引数input_datが取り得る値(例えば、0、10、100等)を入力し、これらの入力値は入力変数値記憶部12に記憶される。
次に、ステップS302においては、試験対象関数とスタブ関数とのI/Fを抽出し分析する。具体的には、図1のスタブ関数I/F抽出部3は、ソースコード記憶部8に記憶されている試験対象プログラムから、試験対象関数とこの試験対象関数が呼び出す下位関数との間の入出力のI/Fを抽出し、スタブ関数I/F分析部4は、抽出されたI/Fを分析する。I/F及びその分析結果は、スタブ関数I/F記憶部9に記憶される。
ここで、ステップS302の詳細について説明するために、図4について説明する。先ず、図4のステップS400においては、スタブ関数I/F抽出部3は、試験対象関数を構文解析し、試験対象関数が呼び出している下位関数を識別する。つまり、ソースコード記憶部8に記憶されている試験対象プログラムを一般のコンパイラ等で行われている構文解析技術を用いて構文解析し、試験対象関数が呼び出している下位関数を全て抽出する。例えば、図2に示す例では、関数sub_fnuc1、及び関数sub_func2が抽出される。
続いて、抽出された試験対象関数が呼び出している全ての下位関数に対し、スタブ関数I/F分析部4は、ステップS401からステップS405までのループを繰り返して実行する。ステップS402では、試験対象関数が下位関数を呼び出した後に、呼び出している下位関数の戻り値を使用する場合に、呼び出されている下位関数は試験対象関数に対して戻り値としてのI/Fを持つと定義し、その結果はスタブ関数I/F記憶部9に記憶される。図2の関数func1が試験対象関数の場合、試験対象関数は関数sub_func1を呼び出しており、そして、関数sub_func1の戻り値を使用している(変数sub_ret_val)。このとき、スタブ関数I/F記憶部9に記憶される分析結果の一例を、図5の2行目に示す。図5に示すように、戻り値のI/Fとして、その戻り値の型であるintがスタブ関数I/F記憶部に記憶される。
次に、図4のステップS403では、試験対象関数が呼び出している下位関数を構文解析し、その引数が呼び出している下位関数で参照されている場合、これを入力のI/Fを持つと定義し、その結果とその型及び変数名をスタブ関数I/F記憶部9に記憶させる。試験対象関数が図2の関数func1であり、この試験対象関数が呼び出している下位関数を図6の関数sub_func1とした場合に対して、スタブ関数I/F記憶部9に記憶される分析結果の一例を図5の3行目と5行目に示す。図2では、変数arg_iが関数sub_func1内で参照されているので、入力のI/Fとして、変数名arg_i及びその型であるintが図5の3行目に記述されている。また、ポインタ変数arg_ioが関数sub_func1内で参照されているので、入力のI/Fとして、変数名arg_i及びその型であるint*が図5の5行目に記述されている。
次に、図4のステップS404では、試験対象関数が呼び出している下位関数を構文解析し、その引数が直接又は間接的に指し示す先が変更されている場合、これを出力のI/Fを持つと定義し、その結果とその引数の型及び変数名をスタブ関数I/F記憶部9に記憶させる。図2の試験対象関数func1が呼び出している関数sub_func1を、例えば、図6に示す関数とした場合に対して、スタブ関数I/F記憶部9の記憶内容の一例を図5の4行目と6行目に示す。図6に示すように、関数sub_func1の引数としてのポインタ変数arg_oは、関数sub_func1内でポインタを経由してその指し示す先の値*arg_oが変更されている。そのため、出力のI/Fとして、変数名arg_o及びその型であるint*が、図5の4行目に記述されている。また、図6に示すように、関数sub_func1の引数としてのポインタ変数arg_ioは、関数sub_func1内でポインタを経由してその指し示す先の値*arg_ioが変更されている。そのため、出力のI/Fとして、変数名arg_io及びその型であるint*が、図5の6行目に記述されている。以上のようにして、試験対象関数から抽出された全ての下位関数に対して図4に示すステップS401〜S405を繰り返し適用することにより、図3のステップS302に示す試験対象関数とスタブ関数とのI/Fを抽出し分析するステップが実行される。
但し、図2の関数sub_func2のように、試験対象関数が呼び出している下位関数の引数が定数であり(図示例では、引数の値が10)、戻り値が試験対象関数で使用されていない場合は、単体試験時に、スタブ関数の出力値を設定し、又はスタブ関数の引数の値が適切であるかどうかを確認する必要がない。そのため、スタブ関数I/F記憶部9に分析結果を記憶する必要は特にない。従って、このような場合には、I/Fの抽出及び分析は行わない。
再び図3に戻り、ステップS303において、スタブ関数I/F記憶部9の内容に従い、ソースコード記憶部8の内容をスタブ関数出力値生成部6が解析して、スタブ関数の出力値を生成しスタブ関数記憶部10に記憶させる。なお、スタブ関数出力値生成部6によるスタブ関数の出力値の生成例については、実施の形態2で詳述する。
次に、図3のステップS304において、スタブ関数I/F記憶部9の内容に従い、ソースコード記憶部8の内容をスタブ関数生成部5が解析して、スタブ関数を生成しスタブ関数記憶部10に記憶させる。
最後に、図3のステップS305において、入力変数値記憶部12に記憶されている試験対象関数の入力変数及び入力変数の取り得る値と、スタブ関数記憶部10に記憶されているスタブ関数の出力変数及び出力変数の取り得る値より、テストケース生成部7がテストケースを作成しテストケース記憶部11に記憶させる。
以上のようにして、試験対象関数が呼び出す下位関数を模擬するスタブ関数が生成され、下位関数をスタブ関数で置き換えた後に、試験対象関数の単体試験を行うことができる。
本実施の形態の効果について説明する。本実施の形態によれば、スタブ関数を用いたソフトウェアの単体試験において、試験対象関数とこの試験関数が呼び出す下位関数との間のI/Fを実装したスタブ関数を自動的に生成することができる。これにより、スタブ関数の生成作業の効率が向上し、ソフトウェアの効率的な単体試験が可能となる。また、スタブ関数出力値生成部が、スタブ関数の出力値を生成するので、従来のように単体試験の作業者が出力変数の取り得る値を考慮して入力する場合に比べて、作業効率が向上する。また、テストケース生成部により、試験対象関数の入力変数の取り得る値と、スタブ関数の出力変数の取り得る値とを組み合わせて、テストケースを自動的に生成することができるので、従来のように作業者がこれらのテストケースを与えていた場合に比べて、作業効率が向上する。
実施の形態2.
図7は、本発明にかかる単体試験支援装置の実施の形態2における試験対象関数コードの一例を示す図である。また、図8は、本発明の実施の形態2における試験対象関数コードの別の一例を示す図である。本実施の形態の構成は、図1に示す実施の形態1の構成を備え、さらに、試験対象関数を記述する言語の仕様を定義する言語仕様定義部を備える。本実施の形態においては、スタブ関数出力値生成部の機能を、試験対象関数の具体例をもとに、詳細に説明する。
図7は、本発明にかかる単体試験支援装置の実施の形態2における試験対象関数コードの一例を示す図である。また、図8は、本発明の実施の形態2における試験対象関数コードの別の一例を示す図である。本実施の形態の構成は、図1に示す実施の形態1の構成を備え、さらに、試験対象関数を記述する言語の仕様を定義する言語仕様定義部を備える。本実施の形態においては、スタブ関数出力値生成部の機能を、試験対象関数の具体例をもとに、詳細に説明する。
図7においては、試験対象関数Func1は、関数内部で下位関数FuncB1を呼び出しており、下位関数FuncB1の戻り値iFuncB_Retはswitch文における分岐条件として使用されている。このとき、スタブ関数出力値生成部6は、後述する図9に示す方法により、switch文の分岐条件が1、2、若しくは3、又はそれ以外であることを判別し、iFuncB_Retの取り得る値、即ち、FuncB1の取り得る値が、1、2、若しくは3、又はそれ以外であることを抽出する。そして、スタブ関数出力値生成部6は、関数Func1の単体試験時には、抽出された値のうち実値である1、2、又は3を、下位関数FuncB1を模擬するスタブ関数の取り得る値として生成する。
図9は、試験対象関数コードからスタブ関数の出力値の取り得る値を抽出する手順を示したフローチャートである。図9に示すように、先ず、スタブ関数出力値生成部6は、試験対象関数コードをソースコード記憶部8から読み込む(ステップS31)。そして、スタブ関数出力値生成部6は、ソースコードの一行目をカレント行にセットする(ステップS32)。次に、カレント行で、スタブ関数の出力値を分岐条件にしているかどうかを判別する(ステップS33)。このとき、言語仕様定義部38に定義された分岐条件識別子、及びスタブ関数I/F記憶部9に記憶されたスタブ関数の定義を用いて、分岐条件識別子が使用され且つスタブ関数出力値が分岐条件であるかどうかで判別する。言語仕様定義部38には、分岐条件識別子として、例えばC言語ではswitch、if等を予め登録しておく。カレント行でスタブ関数の出力値を分岐条件にしているときには、試験対象関数内で、条件分岐先を決定することができるかどうかを判別する(ステップS34)。例えば、図7に示す関数例に対しては、case及びこれに続く数値、並びにdefaultにより、条件分岐先を決定することができる。そして、条件分岐先を決定できる場合には、分岐条件で使用されている閾値を抽出し、この閾値をスタブ関数の出力値の取り得る値として、スタブ関数出力値生成部6に登録する(ステップS35)。上述のように、図7に示す関数例に対しては、スタブ関数の出力値として、1、2、若しくは3、又はそれ以外であることが抽出される。続いて、カレント行の次の行があるかどうかを判別する(ステップS36)。そして、次の行が存在するときには、次の行をカレント行にセットする(ステップS37)。一方で、ステップS33でスタブ関数の出力値を分岐条件にしていない場合は、ステップS36を実行する。また、ステップS34で分岐条件先を決定できなかった場合にも、同様にステップS36を実行する。さらに、ステップS36で次の行がない場合は、処理を終了する。
以上のようにして、スタブ関数出力値生成部は、試験対象関数が呼び出す下位関数の出力変数が分岐条件として使用されている場合に、下位関数の呼出し後の試験対象関数のコード内容を参照することにより、出力変数の取り得る値を特定し、下位関数を模擬するスタブ関数の出力値を生成する。なお、図7に示す関数例では、条件分岐に使用される下位関数の出力変数が戻り値の場合であるが、条件分岐に使用される下位関数の出力変数が下位関数の出力引数である場合にも同様に適用することができる。
次に、図8においては、試験対象関数Func2は、関数内部で下位関数FuncB2を呼び出しており、この下位関数は、後述する図10に示す方法により、1又は2を戻り値としていることが判別される。図8に示す例では、下位関数が実装されているときに、スタブ関数出力値生成部6が、下位関数を参照してスタブ関数の取り得る値を生成する例である。
図10は、スタブ関数出力値生成部6が下位関数のコードからスタブ関数の出力値の取り得る値を抽出する手順を示したフローチャートである。図10に示すように、先ず、スタブ関数出力値生成部6は、試験対象関数コードをソースコード記憶部8から読み込む(ステップS41)。次に、スタブ関数出力値生成部6は、ソースコードの一行目をカレント行にセットする(ステップS42)。続いて、カレント行で、スタブ関数の出力値を設定しているかどうかを判別する(ステップS43)。このとき、言語仕様定義部38に定義された戻り値識別子、及びスタブ関数I/F記憶部9に記憶されたスタブ関数の定義を用いて、スタブ関数の戻り値を設定しているか、又はスタブ関数の出力引数を設定しているか、のいずれかに該当するかで判別する。言語仕様定義部38には、戻り値識別子として、例えばC言語ではreturnを予め登録しておく。そして、カレント行でスタブ関数の出力値を設定している場合には、出力値に設定されている値をスタブ関数の出力値の取り得る値として、スタブ関数出力値生成部6に登録する(ステップS44)。次に、カレント行の次の行があるかどうかを判別する(ステップS45)。次の行が存在する場合には、次の行をカレント行にセットする(ステップS46)。一方で、ステップS43でスタブ関数の出力値を設定していなかった場合は、ステップS45を実行する。また、ステップS45で次の行がない場合は、処理を終了する。
本実施の形態によれば、試験対象関数が呼び出す下位関数の出力変数が試験対象関数内で分岐条件として使用されているときに、スタブ関数出力値生成部6が試験対象関数コードにおける分岐条件識別子を認識することにより、スタブ関数の出力変数の取り得る値を自動的に生成することができる。また、試験対象関数コードにおける下位関数の戻り値識別子を認識することにより、スタブ関数生成部6は、スタブ関数の出力値の取り得る値を自動的に生成することができる。後者は、下位関数が既に実装されている場合でも、実装されている下位関数の代わりにスタブ関数を使用して単体試験を行うときに利用することができる。なお、その他の効果は、実施の形態1の効果と同様である。
実施の形態3.
図11は、本発明にかかる単体試験支援装置の実施の形態3において、スタブ関数の戻り値及び出力引数に対して、単体試験中又は単体試験前にスタブ関数の出力値として任意の値が設定可能なスタブ関数の例を示す図である。図11の関数sub_func1_stub1は、図6に示す関数sub_func1を模擬するスタブ関数の一例である。本実施の形態の構成は実施の形態1と基本的に同様である。しかしながら、詳細には、スタブ関数出力値生成部6、テストケース生成部7、及びテストケース記憶部11を含めなくてもよい。つまり、これらの機能は本実施の形態の実施に必須ではないが、これらの機能と組み合わせて使用することもできる。
図11は、本発明にかかる単体試験支援装置の実施の形態3において、スタブ関数の戻り値及び出力引数に対して、単体試験中又は単体試験前にスタブ関数の出力値として任意の値が設定可能なスタブ関数の例を示す図である。図11の関数sub_func1_stub1は、図6に示す関数sub_func1を模擬するスタブ関数の一例である。本実施の形態の構成は実施の形態1と基本的に同様である。しかしながら、詳細には、スタブ関数出力値生成部6、テストケース生成部7、及びテストケース記憶部11を含めなくてもよい。つまり、これらの機能は本実施の形態の実施に必須ではないが、これらの機能と組み合わせて使用することもできる。
図11に示すように、_RET_INT_sub_func1_stub1は、スタブ関数の戻り値を試験対象関数の試験前又は試験中に任意設定するための、プログラムの任意の場所でアクセス可能な変数であり、本図示例で使用するC言語の場合は、グローバル変数で定義する。図11においては、_RET_INT_sub_func1_stub1は、関数sub_func1_stub1の定義前に、グローバル変数として定義されている。この_RET_INT_sub_func1_stub1に対して、スタブ関数が呼び出される前に値を設定しておくことで、試験対象関数がスタブ関数を呼び出したときに、利用者が設定した任意の値をスタブ関数の戻り値として返すことが可能である。
同様に、図11の_ARG2_INT_OUT_sub_func1_stub1及び_ARG3_INT_OUT_sub_func1_stub1は、スタブ関数の出力の引数の値を試験対象関数の試験前又は試験中に任意設定するための、プログラムの任意の場所でアクセス可能な変数であり、本図示例で使用するC言語の場合は、グローバル変数で定義する。図11においては、ARG2_INT_OUT_sub_func1_stub1及び_ARG3_INT_OUT_sub_func1_stub1は、関数sub_func1_stub1の定義前に、グローバル変数として定義されている。このARG2_INT_OUT_sub_func1_stub1及び_ARG3_INT_OUT_sub_func1_stub1に対して、スタブ関数が呼び出される前に値を設定しておくことで、試験対象関数がスタブ関数を呼び出したときに、利用者が設定した任意の値をスタブ関数の出力の引数の値として返すことが可能である。利用者による出力変数値の設定は、例えば、GUI(Graphical User Interface)等の入出力装置1を利用して行うことができる。
本実施の形態によれば、実施の形態1の効果に加えて、スタブ関数の戻り値及び出力引数の値に任意の値を設定することが可能なスタブ関数を効率的に作成することができ、自由度の高い単体試験が可能になる。
実施の形態4.
図12は、本発明にかかる単体試験支援装置の実施の形態4において、スタブ関数の入力引数に対して、スタブ関数が呼び出された後に、入力引数の値が期待された値に設定されているかどうかを確認可能なスタブ関数の例を示す図である。図11の関数sub_func1_stub2は、図6に示す関数sub_func1を模擬するスタブ関数の一例である。本実施の形態の構成は実施の形態1と基本的に同様である。しかしながら、詳細には、スタブ関数出力値生成部6、テストケース生成部7、及びテストケース記憶部11を含めなくてもよい。つまり、これらの機能は本実施の形態の実施に必須ではないが、これらの機能と組み合わせて使用することもできる。
図12は、本発明にかかる単体試験支援装置の実施の形態4において、スタブ関数の入力引数に対して、スタブ関数が呼び出された後に、入力引数の値が期待された値に設定されているかどうかを確認可能なスタブ関数の例を示す図である。図11の関数sub_func1_stub2は、図6に示す関数sub_func1を模擬するスタブ関数の一例である。本実施の形態の構成は実施の形態1と基本的に同様である。しかしながら、詳細には、スタブ関数出力値生成部6、テストケース生成部7、及びテストケース記憶部11を含めなくてもよい。つまり、これらの機能は本実施の形態の実施に必須ではないが、これらの機能と組み合わせて使用することもできる。
図12に示すように、_ARG2_INT_IN_sub_func1_stub2及び_ARG3_INT_IN_sub_func1_stub2は、下位関数が呼び出された後に入力引数の値が期待された値であるかどうかを確認するための、プログラムの任意の場所でアクセス可能な変数であり、本図示例で使用するC言語の場合はグローバル変数で定義する。図12においては、_ARG2_INT_IN_sub_func1_stub2及び_ARG3_INT_IN_sub_func1_stub2は、sub_func1_stub2の定義前に、グローバル変数として定義されている。そして、arg_iの値及び*arg_ioの値を、それぞれ_ARG2_INT_IN_sub_func1_stub2及び_ARG3_INT_IN_sub_func1_stub2に代入している。この_ARG2_INT_IN_sub_func1_stub2及び_ARG3_INT_IN_sub_func1_stub2の値をスタブ関数が呼び出された後に確認することで、試験対象関数がスタブ関数を呼び出したときに、適切な値をスタブ関数に渡して呼び出したかどうかを確認することが可能である。
本実施の形態によれば、実施の形態1の効果に加えて、スタブ関数の入力変数の値が適切な値であるかどうかを確認することが可能なスタブ関数を効率的に作成することができ、自由度の高い単体試験が可能となる。
実施の形態5.
図13は、本発明にかかる単体試験支援装置の実施の形態5において、スタブ関数の戻り値及び出力引数に対して、単体試験中又は単体試験前にスタブ関数の出力値として任意の値が設定可能であり、且つ、スタブ関数の入力引数に対して、スタブ関数が呼び出された後に、入力引数の値が期待された値に設定されているかどうかを確認可能なスタブ関数の例を示す図である。本実施の形態は、実施の形態3と実施の形態4とがそれぞれ生成するスタブ関数の特徴を併せ持ったスタブ関数を生成するものである。図13の関数sub_func1_stub1は、図6に示す関数sub_func1を模擬するsub_func1のスタブ関数の一例である。
図13は、本発明にかかる単体試験支援装置の実施の形態5において、スタブ関数の戻り値及び出力引数に対して、単体試験中又は単体試験前にスタブ関数の出力値として任意の値が設定可能であり、且つ、スタブ関数の入力引数に対して、スタブ関数が呼び出された後に、入力引数の値が期待された値に設定されているかどうかを確認可能なスタブ関数の例を示す図である。本実施の形態は、実施の形態3と実施の形態4とがそれぞれ生成するスタブ関数の特徴を併せ持ったスタブ関数を生成するものである。図13の関数sub_func1_stub1は、図6に示す関数sub_func1を模擬するsub_func1のスタブ関数の一例である。
図13に示すように、_RET_INT_sub_func1_stubは、スタブ関数の戻り値を試験対象関数の試験前又は試験中に任意設定するための変数である。また、_ARG2_INT_OUT_sub_func1_stub及び_ARG3_INT_OUT_sub_func1_stubは、出力引数の値を試験対象関数の試験前又は試験中に任意設定するため変数である。さらに、_ARG1_INT_IN_sub_func1_stub及び_ARG3_INT_IN_sub_func1_stubは、試験対象関数が呼び出された後に、入力引数の値が期待された値であるかどうかを確認するための変数である。これらは、いずれもプログラムの任意の場所でアクセス可能な変数であり、本図示例で使用するC言語の場合はグローバル変数で定義する。本図示例では、これらのグローバル変数は、図13のsub_func1_stubが定義される前に、グローバル変数として定義されている。
スタブ関数が呼び出される前に、利用者が_RET_INT_sub_func1_stubに値を設定しておくことで、試験対象関数がスタブ関数を呼び出したときに、利用者が任意に設定した値をスタブ関数の戻り値として返すことが可能である。
また、スタブ関数が呼び出される前に、利用者が_ARG2_INT_OUT_sub_func1_stub及び_ARG3_INT_OUT_sub_func1_stubに値を設定しておくことで、試験対象関数がスタブ関数を呼び出したときに、利用者が任意に設定した値をスタブ関数の出力引数の値として返すことが可能である。
さらに、利用者が_ARG1_INT_IN_sub_func1_stub及び_ARG3_INT_IN_sub_func1_stubの値をスタブ関数が呼び出された後に確認することで、試験対象関数がスタブ関数を呼び出したときに、適切な値をスタブ関数に渡して呼び出したかどうかを確認することが可能である。
実施の形態6.
本実施の形態においては、利用者が入力した入力データから、テストケース生成部7が、試験対象関数の入力変数の取り得る値と、スタブ関数の出力変数の取り得る値との組み合わせから、単体試験時におけるテストケースを生成する。スタブ関数生成部5が生成するスタブ関数としては、例えば、実施の形態3、4、5のスタブ関数である。本実施の形態の構成は、実施の形態1の構成と同様であるが、以下では、テストケースの作成を具体的に説明する。利用者は、図1の入出力装置1を介して、試験対象関数ごとに単体試験の入力条件として、(1)スタブ関数の戻り値、(2)スタブ関数の構成に使用されるグローバル変数の値、(3)試験対象関数の入力変数の取り得る値、を入力する。それらの入力データは、図1の入力変数値記憶部12において、例えば図15のようなデータ形式で記憶される。図15に示すように、各スタブ関数は関数IDを持ち(COL1)、関数IDが1〜4の関数は、変数ID(COL2)と共に、変数名を保持している(COL3)。各変数の値(COL4)は、値IDを付され、利用者が入力した入力データを保持する。また、入力できる値の個数の上限はシステムの記憶容量のスペックに従う。
本実施の形態においては、利用者が入力した入力データから、テストケース生成部7が、試験対象関数の入力変数の取り得る値と、スタブ関数の出力変数の取り得る値との組み合わせから、単体試験時におけるテストケースを生成する。スタブ関数生成部5が生成するスタブ関数としては、例えば、実施の形態3、4、5のスタブ関数である。本実施の形態の構成は、実施の形態1の構成と同様であるが、以下では、テストケースの作成を具体的に説明する。利用者は、図1の入出力装置1を介して、試験対象関数ごとに単体試験の入力条件として、(1)スタブ関数の戻り値、(2)スタブ関数の構成に使用されるグローバル変数の値、(3)試験対象関数の入力変数の取り得る値、を入力する。それらの入力データは、図1の入力変数値記憶部12において、例えば図15のようなデータ形式で記憶される。図15に示すように、各スタブ関数は関数IDを持ち(COL1)、関数IDが1〜4の関数は、変数ID(COL2)と共に、変数名を保持している(COL3)。各変数の値(COL4)は、値IDを付され、利用者が入力した入力データを保持する。また、入力できる値の個数の上限はシステムの記憶容量のスペックに従う。
図15のデータ形式で記憶されたデータは、図14に示すフローチャートに従いテストケース情報となる。図14は、本発明の実施の形態6において、テストケース生成部がテストケースを生成する際の手順を示すフローチャートである。図14に示すように、先ず、ステップST2において、入出力変数記憶部12をオープンし、入力データを読み込む。例えば、図15のデータ形式で記憶された入力データを読み込む。次に、ステップST3において、利用者は組合せ方式を入力する。ここで、利用者の入力は、1又は2の数値とし、入力された数値に応じて異なる組み合わせ方式が選択されるものとする。即ち、「1」を入力すると組合せ方式1(足し算方式)が選択され、「2」を入力すると組合せ方式2(全組合せ方式)が選択される。但し、何も入力されない場合は、自動的に2が選択されるものとする。「1」を入力した場合には、ステップST5において、組合せ方式1(足し算方式)が選択され、「2」を入力した場合又は何も入力しない場合には、ステップST6において、組合せ方式2(全組合せ方式)が選択される。なお、組合せ方式1及び組合せ方式2の具体的内容については後述する。
システムが記憶しているスタブ関数の総数をpとすると、図14のステップST7のループにより、システムが記憶しているすべてのスタブ関数に対して、各変数のテストケースを生成する。即ち、選択した組合せ方式でテストケースのデータを作成し(ステップST8)、組合せデータを図1のテストケース記憶部11に出力し(ステップST10)、さらに、図1の入力変数値記憶部12をクローズして(ステップST11)、処理は終了する。
ここで、組合せ方式1(足し算方式)による組合せ処理について説明する。足し算方式では、一つのスタブ関数における各変数の各値が少なくとも一回テストケースに含まれるように組み合わせる。例として、図15における関数IDが「2」の関数の変数を抜粋したものを図16に示して説明する。図16に示すように、各変数の値を値IDが「1」から順に組み合わせる。組み合わせる値がない変数は、すでに組み合わせた値を繰り返し利用する。図16の下の表においては、変数ID「3」(変数名Val)と変数ID「4」(変数名A)に対して、テストケースIDが「3」以降では、それぞれ値IDが「1」「2」の値を繰り返し利用している。
次に、組合せ方式2(全組合せ方式)による組合せ処理について説明する。全組合せ方式では、一つのスタブ関数における各変数の各値のすべての組合せが網羅させるように組み合わせる。例として、図15における関数IDが「2」の関数の変数を抜粋したものを図17に示して説明する。図17に示すように、変数ID「1」(変数名y)の値の個数は6、変数ID「2」(変数名z)の値の個数は6、変数ID「3」(変数名Val)の値の個数は2、変数ID「4」(変数名A)の値の個数は2であり、全組合せは、6×6×2×2=144個のテストケースとなる。このテストケースの一部を、図18に示す。
本実施の形態によれば、スタブ関数の出力まで含めた単体試験のテストケースの入力条件の作成が効率的になる。なお、その他の効果は、実施の形態1〜実施の形態5の効果と同様である。
なお、特許文献1に開示された従来技術は、引数情報等を含めて入出力スタブを自動生成はするものの、ハードウェアを制御するソフトウェアの開発を支援するソフトウェア開発支援方法であるため、スタブ関数の対象がハードウェアに特化されているという問題があった。また、特許文献2に開示された従来技術においては、テストドライバの中でスタブ関数を記述すると、テスト実行中にスタブ関数の処理を展開して試験を行うが、この展開内容は試験対象関数が呼び出す下位の関数の代替処理コードとしてテストドライバに予め記載されている。そのため、単体試験中にスタブ関数を自動的に実装するものではない。これらの観点から、本発明は、特許文献1及び2に記載されている従来技術とは明確に異なるものである。
以上のように、本発明にかかるソフトウェアの単体試験支援装置は、高級言語で記述されたプログラムのスタブ関数を用いた単体試験に有用である。
1 入出力装置
2 システム制御部
3 スタブ関数I/F抽出部
4 スタブ関数I/F分析部
5 スタブ関数生成部
6 スタブ関数出力値生成部
7 テストケース生成部
8 ソースコード記憶部
9 スタブ関数I/F記憶部
10 スタブ関数記憶部
11 テストケース記憶部11
12 入力変数値記憶部
20 単体試験支援装置
38 言語仕様定義部
2 システム制御部
3 スタブ関数I/F抽出部
4 スタブ関数I/F分析部
5 スタブ関数生成部
6 スタブ関数出力値生成部
7 テストケース生成部
8 ソースコード記憶部
9 スタブ関数I/F記憶部
10 スタブ関数記憶部
11 テストケース記憶部11
12 入力変数値記憶部
20 単体試験支援装置
38 言語仕様定義部
Claims (7)
- 試験対象の関数が呼び出す下位関数をその動作を模擬する関数であるスタブ関数で置き換えた後に前記試験対象の関数の試験を行うソフトウェアの単体試験において、前記スタブ関数を自動生成することにより単体試験を支援する単体試験支援装置であって、
前記下位関数を前記試験対象の関数から特定し、前記下位関数と前記試験対象の関数との間の入出力のインターフェースを抽出するインターフェース抽出手段と、
前記インターフェース抽出手段により抽出された前記インターフェースを分析するインターフェース分析手段と、
前記インターフェースの分析結果に基づいて、前記インターフェースを備えたスタブ関数を生成するスタブ関数生成手段と、
を備えることを特徴とする単体試験支援装置。 - 前記試験対象の関数、前記インターフェース、及び前記インターフェースの分析結果をもとに、前記スタブ関数の出力変数の出力値を生成するスタブ関数出力値生成手段を備えることを特徴とする請求項1に記載の単体試験支援装置。
- 前記下位関数の出力変数が前記試験対象の関数内における条件分岐で使用されるときに、前記スタブ関数出力値生成部は、前記条件分岐で使用される前記出力変数の取り得る値を特定することにより、前記スタブ関数の出力値を生成することを特徴とする請求項2に記載の単体試験支援装置。
- 前記スタブ関数生成部は、前記スタブ関数内で前記スタブ関数の出力変数をグローバル変数に設定し、このグローバル変数の値を任意に設定可能とすることにより、前記出力変数の出力値に任意の値が設定可能なスタブ関数を生成することを特徴とする請求項1〜3のいずれか1つに記載の単体試験支援装置。
- 前記スタブ関数生成部は、前記スタブ関数内でグローバル変数を前記スタブ関数の入力変数に設定し、このグローバル変数の値を確認することにより、前記スタブ関数の入力変数の入力値を前記試験対象の関数が前記スタブ関数を呼び出した後に確認することが可能なスタブ関数を生成することを特徴とする請求項1〜4のいずれか1つに記載の単体試験支援装置。
- 前記試験対象の関数の入力変数の取り得る値と、前記スタブ関数の出力変数の取り得る値との組み合わせから、単体試験用のテストケースを生成するテストケース生成手段を備えることを特徴とする請求項1〜5のいずれか1つに記載の単体試験支援装置。
- 前記スタブ関数の出力値の取り得る値は、前記スタブ関数出力値生成部により生成された出力値であることを特徴とする請求項6に記載の単体試験支援装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006327324A JP2008140263A (ja) | 2006-12-04 | 2006-12-04 | 単体試験支援装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006327324A JP2008140263A (ja) | 2006-12-04 | 2006-12-04 | 単体試験支援装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008140263A true JP2008140263A (ja) | 2008-06-19 |
Family
ID=39601627
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006327324A Pending JP2008140263A (ja) | 2006-12-04 | 2006-12-04 | 単体試験支援装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008140263A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010250598A (ja) * | 2009-04-16 | 2010-11-04 | Mitsubishi Denki Micom Kiki Software Kk | プログラム開発支援装置 |
JP2013012090A (ja) * | 2011-06-29 | 2013-01-17 | Panasonic Corp | 開発支援方法及びプログラム |
WO2013161195A1 (ja) * | 2012-04-26 | 2013-10-31 | 日本電気株式会社 | プログラム単体テスト支援装置 |
JP2016018253A (ja) * | 2014-07-04 | 2016-02-01 | 富士通株式会社 | ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法 |
-
2006
- 2006-12-04 JP JP2006327324A patent/JP2008140263A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010250598A (ja) * | 2009-04-16 | 2010-11-04 | Mitsubishi Denki Micom Kiki Software Kk | プログラム開発支援装置 |
JP2013012090A (ja) * | 2011-06-29 | 2013-01-17 | Panasonic Corp | 開発支援方法及びプログラム |
WO2013161195A1 (ja) * | 2012-04-26 | 2013-10-31 | 日本電気株式会社 | プログラム単体テスト支援装置 |
JP2016018253A (ja) * | 2014-07-04 | 2016-02-01 | 富士通株式会社 | ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4950454B2 (ja) | テスト自動化のスタック階層化 | |
US8756572B2 (en) | Debugger-set identifying breakpoints after coroutine yield points | |
US20100281463A1 (en) | XML based scripting framework, and methods of providing automated interactions with remote systems | |
JP5396979B2 (ja) | ソフトウェア開発支援装置、システム、ソフトウェア開発支援装置の機能拡張方法、及びプログラム | |
US20070169004A1 (en) | Automatic failure analysis of code development options | |
US8930923B2 (en) | Generating debugging extension source code utilizing debugging information | |
CN111061489B (zh) | 一种多平台编译检测方法、装置、设备及介质 | |
JP2012529093A (ja) | スクリーンキャプチャに関する方法、システムおよびコンピュータ・プログラム | |
US20040230890A1 (en) | Information processing system, control method, control program, and recording medium | |
CN117075909B (zh) | 用于实现并行编程的编译方法、电子设备和介质 | |
JP2008140263A (ja) | 単体試験支援装置 | |
US7624381B1 (en) | Portable detection of start and completion of object construction | |
US7131080B2 (en) | Simulation management system | |
US8935657B2 (en) | Model-to-model transformation by kind | |
WO2009127476A2 (en) | A method and a system for transforming an object model | |
CN110806891B (zh) | 嵌入式设备软件版本的生成方法及装置 | |
JP2008165342A (ja) | ソースコード生成方法及び装置並びにプログラム | |
JP2018120389A (ja) | コンパイル方法、コンパイルプログラム及び情報処理装置 | |
US7036045B2 (en) | Method and system for isolating exception related errors in Java JVM | |
CN113641594B (zh) | 跨端自动化测试方法以及相关装置 | |
CN112540813B (zh) | 一种基于工作流引擎的应用生成方法 | |
CN108319227A (zh) | 图形套料的数控程序生成方法、服务器及存储介质 | |
JP2005174045A (ja) | ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体 | |
CN112596737A (zh) | 一种函数调用关系的扫描方法、系统、设备及存储介质 | |
JP2016126700A (ja) | プログラム検証装置、プログラム検証方法及びプログラム検証プログラム |