(57)【要約】【課題】プログラムのテストに用いるスタブの生成を支援する。【解決手段】スタブ生成支援装置は、ＤＡＯ（Data Access Object）を介してデータを取得する関数の呼び出しの記述を含むテスト対象ソースコードと関数の戻り値をデータベースから受け取るＤＴＯ（Data Access Object）ソースコードとを記憶し、ＤＴＯソースコードから上記戻り値が格納されるフィールドの情報を取得し、テスト対象ソースコードについて、入力値を定義する記述にフィールドの情報に対応する変数の記述の追記、ダミー変数へのフィールドの代入命令の追記、関数の呼び出し命令のダミー変数の代入命令への置換を行って解析用ソースコードを生成し、解析用ソースコードを記号実行してテストケース毎のフィールドに対応する変数の具体値を取得し、具体値を関数の処理を代行するスタブの出力値とする。【選択図】図１１
2019144838.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ及び記憶装置を有し、
ソースコードについて記号実行を行う記号実行部と、
ＤＡＯ（Data Access Object）を介してデータを取得する関数の呼び出しの記述を含むテスト対象ソースコード、及び、前記関数の戻り値を前記データベースから受け取るＤＴＯ（Data Access Object）ソースコード、を記憶する記憶部と、
前記ＤＴＯソースコードから前記関数の戻り値が格納されるフィールドの情報を取得するＤＴＯソースコード解析部と、
前記テスト対象ソースコードについて、入力値を定義する記述に前記フィールドの情報に対応する変数の記述の追記、ダミー変数への前記フィールドの代入命令の追記、及び、前記関数の呼び出し命令のダミー変数の代入命令への置換、を行うことにより、解析用ソースコードを生成する、解析用ソースコード生成部と、
前記解析用ソースコードを記号実行することにより、前記解析用ソースコードのテストケース毎の前記フィールドに対応する変数の具体値を取得し、前記具体値を前記関数の処理を代行するスタブの出力値とする、スタブ出力値生成部と、
を備える、スタブ生成支援装置。
【請求項２】
請求項１に記載のスタブ生成支援装置であって、
前記スタブの出力値に基づき前記スタブを生成するスタブ生成部を更に備える、
スタブ生成支援装置。
【請求項３】
請求項２に記載のスタブ生成支援装置であって、
前記スタブ生成部は、前記スタブの雛型の記述を記憶し、前記雛型の記述に前記スタブの出力値を返す記述を追記することにより前記スタブを生成する、
スタブ生成支援装置。
【請求項４】
請求項１に記載のスタブ生成支援装置であって、
ファイルシステムを備え、
前記スタブ出力値生成部は、前記テストケース毎に取得される前記フィールドに対応する変数の具体値を、所定の記述言語で記述された１つのファイルにまとめて出力する、
スタブ生成支援装置。
【請求項５】
請求項１に記載のスタブ生成支援装置であって、
前記解析用ソースコード生成部は、前記テスト対象ソースコードについて、更に、前記ダミー変数への前記フィールドの代入命令の前処理として前記ダミー変数の初期化命令を追記することにより、前記解析用ソースコードを生成する、
スタブ生成支援装置。
【請求項６】
プロセッサ及び記憶装置を有する情報処理装置が、
ソースコードについて記号実行を行うステップ、
ＤＡＯ（Data Access Object）を介してデータを取得する関数の呼び出しの記述を含むテスト対象ソースコード、及び、前記関数の戻り値を前記データベースから受け取るＤＴＯ（Data Access Object）ソースコード、を記憶するステップ、
前記ＤＴＯソースコードから前記関数の戻り値が格納されるフィールドの情報を取得するステップ、
前記テスト対象ソースコードについて、入力値を定義する記述に前記フィールドの情報に対応する変数の記述の追記、ダミー変数への前記フィールドの代入命令の追記、及び、前記関数の呼び出し命令のダミー変数の代入命令への置換、を行うことにより、解析用ソースコードを生成するステップ、
前記解析用ソースコードを記号実行することにより、前記解析用ソースコードのテストケース毎の前記フィールドに対応する変数の具体値を取得し、前記具体値を前記関数の処理を代行するスタブの出力値とするステップ、
を実行する、スタブ生成支援方法。
【請求項７】
請求項６に記載のスタブ生成支援方法であって、
前記情報処理装置が、
前記スタブの出力値に基づき前記スタブを生成するステップ
を更に実行する、スタブ生成支援方法。
【請求項８】
請求項７に記載のスタブ生成支援方法であって、
前記情報処理装置が、
前記スタブの雛型の記述を記憶し、前記雛型の記述に前記スタブの出力値を返す記述を追記することにより前記スタブを生成するステップ、
を更に実行する、スタブ生成支援方法。
【請求項９】
請求項６に記載のスタブ生成支援方法であって、
前記情報処理装置はファイルシステムを備え、
前記情報処理装置が、前記テストケース毎に取得される前記フィールドに対応する変数の具体値を、所定の記述言語で記述された１つのファイルにまとめて出力するステップ、
を更に実行する、スタブ生成支援方法。
【請求項１０】
請求項６に記載のスタブ生成支援方法であって、
前記情報処理装置が、前記テスト対象ソースコードについて、更に、前記ダミー変数への前記フィールドの代入命令の前処理として前記ダミー変数の初期化命令を追記することにより、前記解析用ソースコードを生成するステップ、
を更に実行する、スタブ生成支援方法。
【請求項１１】
プロセッサ及び記憶装置を備えた情報処理装置に、
ソースコードについて記号実行を行う機能と、
ＤＡＯ（Data Access Object）を介してデータを取得する関数の呼び出しの記述を含むテスト対象ソースコード、及び、前記関数の戻り値を前記データベースから受け取るＤＴＯ（Data Access Object）ソースコード、を記憶する機能と、
前記ＤＴＯソースコードから前記関数の戻り値が格納されるフィールドの情報を取得する機能と、
前記テスト対象ソースコードについて、入力値を定義する記述に前記フィールドの情報に対応する変数の記述の追記、ダミー変数への前記フィールドの代入命令の追記、及び、前記関数の呼び出し命令のダミー変数の代入命令への置換、を行うことにより、解析用ソースコードを生成する機能と、
前記解析用ソースコードを記号実行することにより、前記解析用ソースコードのテストケース毎の前記フィールドに対応する変数の具体値を取得し、前記具体値を前記関数の処理を代行するスタブの出力値とする機能と、
を実現するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スタブ生成支援装置、スタブ生成支援方法、及びプログラムに関する。
【背景技術】
【０００２】
特許文献１には「プログラムのテスト結果の信頼性低下を抑制する」、「スタブ化対象記述検出部が、シンボリック実行によるテスト対象のプログラムに含まれるスタブ化対象記述を検出し、具体値入力生成部が、スタブ化対象記述が実行される際のパス条件を充足する変数値を生成し、スタブ生成部が、生成された変数値を用いてスタブ化対象記述を処理部に実行させるとともに、処理部からの返却値に基づいてスタブを生成し、スタブ挿入部が、スタブ化対象記述を生成されたスタブで置換する」と記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６-１１５１２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載されているように、プログラムのテストに際してソースコードに記述されている変数値を具体化せずに記号（シンボル値）の状態で実行する記号実行（「シンボリック実行」と称されることもある。）の技術が用いられることがある。上記テストでは記号実行により得られるパス条件の充足値をテストデータとして利用する。
【０００５】
一方、テスト対象のソースコードがＤＡＯ（Data Access Object）を介してデータベースにアクセスする記述を含んでいるが、ＤＡＯ部分の開発を他社が行っていたり、データベースとは独立して単体テストを行いたいといった理由により、ＤＡＯが未実装の環境でテストを実施しなければならないことがある。また記号実行によるソースコードの解析時にデータベースへのアクセスを抑制したいことがある。
【０００６】
そのような場合、例えば、ＤＡＯの機能を代用するスタブ（stub）を用意することが有効である。しかしＤＡＯが未実装の環境ではデータベースからスタブの出力値を得ることができず、人手によりスタブを用意する必要があり、負荷が大きく煩雑である。
【０００７】
本発明はこうした背景に鑑みてなされたものであり、プログラムのテストに用いるスタブの生成を支援する、スタブ生成支援装置、スタブ生成支援方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するための本発明の一つは、スタブ生成支援装置であって、プロセッサ及び記憶装置を有し、ソースコードについて記号実行を行う記号実行部と、ＤＡＯ（Data
Access Object）を介してデータを取得する関数の呼び出しの記述を含むテスト対象ソースコード、及び、前記関数の戻り値を前記データベースから受け取るＤＴＯ（Data Access Object）ソースコード、を記憶する記憶部と、前記ＤＴＯソースコードから前記関数の戻り値が格納されるフィールドの情報を取得するＤＴＯソースコード解析部と、前記テスト対象ソースコードについて、入力値を定義する記述に前記フィールドの情報に対応する変数の記述の追記、ダミー変数への前記フィールドの代入命令の追記、及び、前記関数の呼び出し命令のダミー変数の代入命令への置換、を行うことにより、解析用ソースコードを生成する、解析用ソースコード生成部と、前記解析用ソースコードを記号実行すること
により、前記解析用ソースコードのテストケース毎の前記フィールドに対応する変数の具体値を取得し、前記具体値を前記関数の処理を代行するスタブの出力値とする、スタブ出力値生成部と、を備える。
【０００９】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
【発明の効果】
【００１０】
本発明によれば、プログラムのテストに用いるスタブの生成を支援することができる。
【図面の簡単な説明】
【００１１】
【図１】記号実行を説明する図である。
【図２】プログラム、ＤＡＯ、データベース、及びスタブの関係を説明する図である。
【図３】スタブ生成支援装置のハードウェアを説明する図である。
【図４】スタブ生成支援装置の機能（ソフトウェア）を説明する図である。
【図５】スタブ生成処理を説明するデータフロー図である。
【図６】スタブ生成処理を説明するフローチャートである。
【図７】テスト対象ソースコードの一例である。
【図８】スタブ化対象情報の一例である。
【図９】ＤＴＯソースコードの一例である。
【図１０】ＤＴＯ情報の一例である。
【図１１】テスト対象ソースコードに基づき解析用ソースコードが生成される様子を説明する図である。
【図１２】解析用ソースコードの一例である。
【図１３】記号実行結果の一例である。
【図１４】スタブ出力値の一例である。
【図１５】スタブ出力値を１つのファイルとして出力した例である。
【図１６】スタブ出力値からスタブが生成される様子を説明する図である。
【図１７】テスト対象ソースコードとスタブの関係を説明する図である。
【発明を実施するための形態】
【００１２】
以下、実施形態について図面を参照しつつ説明する。以下の説明において、同一又は類似する部分に共通の符号を付して重複する説明を省略することがある。
【００１３】
まず本実施形態の前提となる技術として、プログラム（ビジネスロジック）のテストに用いるテストデータを記号実行（「シンボリック実行」とも称される。）を利用して情報処理装置（コンピュータ）により自動生成する技術について説明する。記号実行は、プログラムのソースコードに記述されている変数値を具体化せずに記号（シンボル値）の状態で実行する技術である。
【００１４】
テストデータの自動生成に際し、まず情報処理装置は、テスト対象のプログラムを記号実行することによりプログラムが実行し得るパス（以下、「実行パス」と称する。）を抽出し、抽出した実行パスを通るための条件式（以下、「パス条件」と称する。）を求める。そして情報処理装置は、求めたパス条件を充足する（制約充足可能な）具体的な変数値を求め、求めた変数値をテストデータとする。尚、上記具体的な変数値は、例えば、ＳＭＴソルバ（Satisfiability Modulo Theories Solver）により求めることができる。
【００１５】
記号実行について、テスト対象のプログラムが図１に示すソースコード５０である場合を例として説明する。まず情報処理装置は、ソースコード５０を解析（字句分析、構文分
析等）することにより同図に示す実行木６０を生成する。実行木６０は、パス条件（上欄）と変数状態（下欄）との組み合わせで表される複数のノードＮ１〜Ｎ５を含む。
【００１６】
実行木６０の生成に際し、情報処理装置は、まずソースコード５０に記述されている変数に記号（「記号変数」とも称される。）を割り当てる。本例の場合、情報処理装置は、ソースコードの１行目に記述されている入力変数「ｘ」に記号「α」を割り当てている。
【００１７】
続いて情報処理装置は、根ノード（ルートノード）であるノードＮ１を生成する。本例では、情報処理装置は、ノードＮ１のパス条件（上欄）に任意の変数状態に対して条件が成立する（「真」となる）ことを意味する「条件無し」を設定し、変数状態（下欄）に入力変数「ｘ」に記号「α」を割り当てていることを示す「ｘ＝α」を設定する。
【００１８】
続いて情報処理装置は、ソースコードの２行目のｉｆ文（条件分岐文）について、上記ｉｆ文が真（true）の場合に対応するノードＮ２と、上記ｉｆ文が偽（false）の場合に
対応するノードＮ３とを生成する。そして情報処理装置は、ノードＮ２のパス条件（上欄）に「α＞０」を設定し、変数状態（下欄）に「ｘ＝α」を設定する。また情報処理装置は、ノードＮ３のパス条件（上欄）に「！（α＞０）」を設定し、変数状態（下欄）に「ｘ＝α」を設定する。
【００１９】
続いて情報処理装置は、ソースコードの３行目のｉｆ文（条件分岐文）について、上記ｉｆ文が真（true）である場合に対応するノードＮ４と、上記ｉｆ文が偽（false）であ
る場合に対応するノードＮ５を生成する。そして情報処理装置は、ノードＮ４のパス条件（上欄）にノードＮ３のパス条件（上欄）「！（α＞０）」と上記ｉｆ文が真（true）の場合のパス条件「（α＜０）」との論理積である「！（α＞０）＆＆（α＜０）」を設定し、変数状態（下欄）に「ｘ＝α」を設定する。また情報処理装置は、ノードＮ５のパス条件（上欄）にノードＮ３のパス条件（上欄）「！（α＞０）」と上記ｉｆ文が偽（false）の場合のパス条件「！（α＜０）」との論理積である「！（α＞０）＆＆！（α＜０
）」を設定し、変数状態（下欄）に「ｘ＝α」を設定する。
【００２０】
ここでノードＮ２〜Ｎ５の夫々は、テスト対象のプログラムの実行パスに対応している。情報処理装置は、各実行パスのパス条件を充足する（制約充足可能な）変数の具体値をＳＭＴソルバにより求め、求めた実行パス（テストケース）毎の具体値を、各実行パスを検証するためのテストデータとする。本例では、ノードＮ２のパス条件（実行パス）について変数値ｘの具体値「１０」を、ノードＮ４のパス条件（実行パス）について変数値ｘの具体値「−２０」を、ノードＮ５のパス条件（実行パス）について変数値ｘの具体値「０」を、夫々テストデータとして求めている。
【００２１】
ところで、図２（ａ）に示すように、テスト対象のプログラム２１のソースコードがＤＡＯ２２（DAO：Data Access Object）を介してデータベース２３にアクセスする記述を
含んでいるが、ＤＡＯ部分の開発を他社が行っていたり、データベースとは独立して単体テストを行いたいといった理由により、ＤＡＯ２２が未実装の環境でプログラム２１のテストを行わなければならないことがある。またソースコードの記号実行による解析時にデータベースへのアクセスを抑制したいことがある。
【００２２】
そのような場合、例えば、図２（ｂ）に示すように、ＤＡＯ２２の機能を代用させるスタブ２４（stub）を用意することが有効であるが、ＤＡＯが未実装の環境であるため、プログラム２１のソースコードを記号実行してもスタブの出力値（データベースにアクセスした際の返値。以下、「スタブ出力値」と称する。）を得ることができない。そこで本実施形態のスタブ生成支援装置１０は、記号実行を利用してスタブ出力値を取得し、取得したスタブ出力値を利用してスタブを自動生成する。これによればＤＡＯが未実装の環境で
もスタブを自動生成することができる。以下、スタブ生成支援装置１０の構成並びに機能について詳述する。
【００２３】
図３にスタブ生成支援装置１０のハードウェア構成を示している。同図に示すように、スタブ生成支援装置１０は、プロセッサ１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５、及び通信装置１６を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。尚、同図に示すハードウェアはスタブ生成支援装置１０として利用できる装置の一例に過ぎず、例えば、スタブ生成支援装置１０の機能を通信可能に接続された複数の情報処理装置を用いて実現してもよい。またスタブ生成支援装置１０を、例えば、クラウドシステムにより提供されるクラウドサーバのような仮想的な情報処理資源を用いて実現してもよい。
【００２４】
プロセッサ１１は、例えばＣＰＵ（Central Processing Unit）やＭＰＵ（Micro Processing Unit）を用いて構成されている。プロセッサ１１が、主記憶装置１２に格納されているプログラム（補助記憶装置１３から読み出されて主記憶装置１２に格納されるプログラムを含む。）を読み出して実行することにより、スタブ生成支援装置１０の様々な機能が実現される。
【００２５】
主記憶装置１２は、プログラムやデータを記憶する装置であり、例えば、ＲＯＭ（Read
Only Memory）、ＲＡＭ（Random Access Memory）、不揮発性メモリ（NVRAM（Non Volatile RAM））等である。
【００２６】
補助記憶装置１３は、例えば、ハードディスクドライブ、ＳＳＤ（Solid State Drive
）、光学式記憶装置（ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）等）、各種ストレージシステム、ＩＣカード、ＳＤメモリカードや光学式記録媒体等の記録媒体の読取／書込装置、クラウドサーバの記憶領域等である。補助記憶装置１３に格納されているプログラムやデータは主記憶装置１２に随時読み込まれる。
【００２７】
入力装置１４は、例えば、キーボード、マウス、タッチパネル、カードリーダ、音声入力装置等である。出力装置１５は、ユーザに処理経過や処理結果等の各種情報を提供するユーザインタフェースであり、例えば、画像表示装置（液晶モニタ、ＬＣＤ（Liquid Crystal Display）、グラフィックカード等）、音声出力装置（スピーカ等）、印字装置等である。スタブ生成支援装置１０が実行するプログラムや当該プログラムが利用するデータは、例えば、記録媒体に記録されて提供され、入力装置１４（カードリーダ等）を介して補助記憶装置１３に取り込まれる。尚、例えば、スタブ生成支援装置１０が通信装置１６を介して他の装置との間で情報の入力や出力を行う構成としてもよい。
【００２８】
通信装置１６は、ＬＡＮ（Local Area Network）やインターネット等の通信手段を介した他の装置との間の通信を実現する有線方式又は無線方式の通信インタフェースであり、例えば、ＮＩＣ（Network Interface Card）、無線通信モジュール、ＵＳＢ（Universal Serial Interface）モジュール、シリアル通信モジュール等である。スタブ生成支援装置１０が実行するプログラムや当該プログラムが利用するデータは、例えば、通信装置１６を介して補助記憶装置１３に取り込まれる。
【００２９】
図４にスタブ生成支援装置１０が備える主な機能を示している。同図に示すように、スタブ生成支援装置１０は、解析用ソースコード生成部１１１、ＤＴＯソースコード解析部１１２、記号実行部１１３、スタブ出力値生成部１１４、スタブ生成部１１５、ソースコード記億部１５０、スタブ化対象記憶部１６０、ＤＴＯ情報記憶部１７０、記号実行結果記憶部１８０、及びスタブ情報記憶部１９０を備える。
【００３０】
尚、スタブ生成支援装置１０は、上記の機能の他、例えば、オペレーティングシステム、ファイルシステム、デバイスドライバ、ＤＢＭＳ（DataBase Management System）等の機能を備えていてもよい。スタブ生成支援装置１０は、各種の情報（データ）を、例えば、データベースのテーブルやファイルとして記憶する。
【００３１】
同図に示すように、ソースコード記億部１５０は、テスト対象ソースコード１５１、ＤＴＯソースコード１５２、及び解析用ソースコード１５３を記憶する。テスト対象ソースコード１５１は、テスト対象となるプログラムのソースコードである。ＤＴＯソースコード１５２は、ＤＡＯの関数の戻り値を受け取るＤＴＯのソースコードである。解析用ソースコード１５３は、テスト対象ソースコード１５１に基づき生成されるソースコードである。
【００３２】
スタブ化対象記憶部１６０は、スタブ化対象情報１６１を記憶する。スタブ化対象情報１６１は、テスト対象ソースコード１５１に含まれている記述から、スタブ化の対象となる命令（記述）を特定する情報を含む。
【００３３】
ＤＴＯ情報記憶部１７０は、ＤＴＯ情報１７１を記憶する。ＤＴＯ情報１７１は、ＤＴＯソースコード１５２に基づき生成された情報を含む。
【００３４】
記号実行結果記憶部１８０は、記号実行結果１８１を記憶する。記号実行結果１８１は、記号実行部１１３が解析用ソースコード１５３について記号実行を行うことにより得られる情報（以下、記号実行結果と称する。）を含む。
【００３５】
スタブ情報記憶部１９０は、スタブ出力値１９１とスタブ１９２を含む。
【００３６】
図５は、スタブ生成支援装置１０が備える機能とスタブ生成支援装置１０が記憶するデータの関係を説明するデータフロー図である。同図に示すように、解析用ソースコード生成部１１１は、テスト対象ソースコード１５１、スタブ化対象情報１６１、及びＤＴＯ情報１７１に基づき、解析用ソースコード１５３を生成する。ＤＴＯソースコード解析部１１２は、ＤＴＯソースコード１５２を解析することによりＤＴＯ情報１７１を生成する。記号実行部１１３は、解析用ソースコード１５３を記号実行することにより記号実行結果１８１を生成する。スタブ出力値生成部１１４は、記号実行結果１８１とＤＴＯ情報１７１に基づきスタブ出力値１９１を生成する。スタブ生成部１１５は、スタブ出力値１９１に基づきスタブ１９２を生成する。
【００３７】
図６は、スタブ生成支援装置１０が行う処理（以下、スタブ生成処理Ｓ６００と称する。）を説明するフローチャートである。以下、同図とともにスタブ生成処理Ｓ６００について説明する。尚、Ｓ６１５〜Ｓ６１７の処理の説明に際し、図１１を適宜参照する。
【００３８】
同図に示すように、まず解析用ソースコード生成部１１１が、ソースコード記憶部１５０からテスト対象ソースコード１５１を、スタブ化対象記憶部１６０からスタブ化対象情報１６１を、夫々読み込む（Ｓ６１１）。
【００３９】
尚、以下の説明では、一例として、解析用ソースコード生成部１１１が、図７に示す、所定のオブジェクト指向言語で記述されたテスト対象ソースコード１５１と、図８に示す構成のスタブ化対象情報１６１を読み込むものとする。
【００４０】
図７に示すように、テスト対象ソースコード１５１は、選択的に実行される処理Ａ及び処理Ｂの記述を含む。図８に示すように、スタブ化対象情報１６１は、レコード番号１５２１、ＤＡＯ名１５２２、関数名１５２３、及び戻り値型名１５２４の各項目を有する一
つ以上のレコードで構成されている。
【００４１】
図６に戻り、続いて解析用ソースコード生成部１１１は、読み込んだテスト対象ソースコード１５１に記述されている命令を順次取得し（Ｓ６１２）、読み込んだ命令毎にＳ６１３〜Ｓ６１７の処理を実行する。
【００４２】
まずＳ６１３では、解析用ソースコード生成部１１１は、取得中の命令がスタブ化対象情報１６１でスタブ化の対象とされている関数であるか否かを判定する。図７に示すテスト対象ソースコード１５１の場合、図８のスタブ化対象情報１６１に記述されている、関数名１５２３が「selectById」という関数の呼び出しを含んでいる。そのため、解析用ソースコード生成部１１１は、現在取得中の命令が、図７のソースコードの「FooDto fooDto = fooDao.selectById(x);」である場合、判定結果を「ＹＥＳ」とする（Ｓ６１３：Ｙ
ＥＳ）。その後、処理はＳ６１４に進む。一方、現在取得中の命令が図７のソースコードの「FooDto fooDto = fooDao.selectById(x);」でない場合、解析用ソースコード生成部
１１１は、判定結果を「ＮＯ」とする（Ｓ６１３：ＮＯ）。その後、処理はＳ６１８に進む。
【００４３】
Ｓ６１４では、ＤＴＯソースコード解析部１１２が、スタブ化対象情報１６１から、取得中の命令が呼び出している関数の戻り値を受け取るＤＴＯソースコード１５２を取得してこれを解析することによりフィールドの情報を取得する。そしてＤＴＯソースコード解析部１１２は、取得したフィールドの情報に基づきＤＴＯ情報１７１を生成する。
【００４４】
例えば、現在取得中の命令が図７のテスト対象ソースコード１５１の「FooDto fooDto = fooDao.selectById(x);」である場合、ＤＴＯソースコード解析部１１２は、スタブ化
対象情報１６１から「selectById」という関数名１５２３に対応づけられているＤＴＯ名１５２２「FooDao」を取得し、取得したＤＴＯ名「FooDao」に対応するＤＴＯソースコード１５２を取得してこれを解析することによりフィールドの情報を取得する。
【００４５】
図９にＤＴＯソースコード１５２の一例を示す。ＤＴＯソースコード１５２が同図に示すものである場合、ＤＴＯソースコード解析部１１２は、当該ＤＴＯソースコード１５２に記述されている「int id」、「int numA」、「int numB」をフィールドの情報として取得し、取得したフィールドの情報に基づきＤＴＯ情報１７１を生成する。
【００４６】
図１０に図９のＤＴＯソースコード１５２に基づき生成されるＤＴＯ情報１７１の一例を示す。同図に示すように、ＤＴＯ情報１５３は、ＤＴＯテーブル１７１１とフィールドテーブル１７１２を含む。このうちＤＴＯテーブル１７１１には、ＤＴＯソースコード１５２の識別子であるＤＴＯ＿ＩＤ１７１１１とＤＴＯの名称であるＤＴＯ名１７１１２との対応が管理されている。一方、フィールドテーブル１７１２は、フィールドＩＤ１７１２１、ＤＴＯ＿ＩＤ１７１２２、フィールド名１７１２３、及び型名１７１２４の各項目を有する一つ以上のレコードを含む。
【００４７】
図６に戻り、Ｓ６１５では、解析用ソースコード生成部１１１が、テスト対象ソースコード１５１の入力値を定義している記述に、Ｓ６１４で取得したフィールドの情報に対応する変数の記述を追記する。例えば、上記のようにフィールドの情報として「int id」、「int numA」、「int numB」を取得している場合、図１１に示すように、解析用ソースコード生成部１１１は、図７のソースコードにおける「int funcA(int x) 」の記述中に「int id, int numA, int numB)」という記述を追記して「int funcA(int x, int id, int numA, int numB)」とする。
【００４８】
Ｓ６１６では、解析用ソースコード生成部１１１が、テスト対象ソースコード１５１に
、ＤＴＯ型のダミー変数の初期化命令、及びダミー変数へのＤＴＯのフィールドの代入命令を追記する。
【００４９】
例えば、図７のソースコード１５１の場合、図１１に示すように、解析用ソースコード生成部１１１は、ＤＴＯ型のダミー変数の初期化命令として、テスト対象ソースコード１５１に「FooDto fooDao#selectById = new FooDto();」を追記する。また解析用ソースコード生成部１１１は、ダミー変数へのＤＴＯのフィールドの代入命令として、テスト対象ソースコード１５１に「fooDao#selectById.setId(id);」、「fooDao#selectById.setNumA(numA);」、「fooDao#selectById.setNumB(numB);」を追記する。
【００５０】
Ｓ６１７では、解析用ソースコード生成部１１１が、ソースコード１５１のスタブ化対象の関数の呼び出し命令をダミー変数の代入命令に置換する。図７のソースコード１５１の場合、図１１に示すように、解析用ソースコード生成部１１１は、スタブ化対象関数の呼び出し「FooDto fooDto = fooDao.selectById(x);」をダミー変数の代入命令「FooDto fooDto = fooDao#selectById;」に置換する。
【００５１】
図６のＳ６１８では、スタブ出力値生成部１１０は、ソースコード１５１に記述されている全ての命令をＳ６１２で取得済か否か判定する。ソースコード１５１に記述されている全ての命令を取得済でない場合（Ｓ６１８：ＮＯ）、処理はＳ６１２に戻る。ソースコード１５１に記述されている全ての命令を取得済である場合（Ｓ６１８：ＹＥＳ）、処理はＳ６１９に進む。
【００５２】
Ｓ６１９では、解析用ソースコード生成部１１１が、Ｓ６１５〜Ｓ６１８の処理を行うことにより生成されたソースコードを解析用ソースコード１５３として記憶する。本例の場合、解析用ソースコード生成部１１１は、図１２に示すソースコードを解析用ソースコード１５３として記憶する。
【００５３】
続いて図６のＳ６２０では、記号実行部１１３が解析用ソースコード１５３を記号実行することにより記号実行結果１８１を生成する。
【００５４】
図１３は、記号実行部１１３が図１２に示す解析用ソースコード１５３を記号実行することにより生成される記号実行結果１８１である。同図に示すように、記号実行結果１８１は、ケースＩＤ１８１１と各入力変数に対応する項目１８１２〜１８１５の各項目とを有する一つ以上のレコードで構成される。記号実行結果１８１の１つのレコードにおける項目１８１２〜１８１５の値は、解析用ソースコード１５３の１つの実行パス（テストケース）の各入力変数の具体値である。
【００５５】
尚、図１３におけるケースＩＤ１８１１が「１」のレコードの具体値は、図１２に示す解析用ソースコード１５３の後段のｉｆ文の処理Ａを通る実行パスに対応している。また図１３におけるケースＩＤ１８１１が「２」のレコードは、図１２に示す解析用ソースコード１５３の後段のｉｆ文の処理Ｂを通る実行パスに対応している。
【００５６】
図６のＳ６２１では、スタブ出力値生成部１１０が、記号実行結果１８１とＤＴＯ情報１７１のフィールドテーブル１７１２とに基づき、スタブ出力値１９１を生成する。記号実行結果１８１が図１３に示す内容である場合、スタブ出力値生成部１１０は、図１３に示す記号実行結果１８１から、図１０のフィールドテーブル１７１２に存在しない入力変数「ｘ」の列を除く項目１８１３〜１８１５の値を取得することにより、図１４に示すスタブ出力値１９１を生成する。
【００５７】
尚、スタブ出力値生成部１１０が、例えば、スタブ出力値１９１を、図１５に示すよう
に所定の記述形式（同図の例はＸＭＬ（Extensible Markup Language）形式）で記述されたファイル（以下、スタブ出力値ファイル１９１Ａと称する。）として出力するようにしてもよい。そのようにすることで、スタブ出力値１９１を効率よく管理することができ、またスタブ出力値１９１を効率よく利用することができる。上記所定の記述形式は、ＨＴＭＬ（HyperText Markup Language）等の他の記述形式でもよい。
【００５８】
続いて、図６のＳ６２２では、スタブ生成部１１５が、スタブ出力値１９１に基づきスタブ１９２を生成する。
【００５９】
図１６に、図１５のスタブ出力値ファイル１９１Ａに基づき２つのスタブ１９２（スタブ１９２ａ，スタブ１９２ｂ）が生成される様子を示す。スタブ生成支援装置１０は、例えば、スタブ１９２の雛型の記述を記憶しており、スタブ生成部１１５は、雛型の記述を利用してスタブ１９２を生成する。生成されたスタブ１９２は、例えば、ソースコード１５１のテストや解析に際して用いられる。尚、図１７に示すように、スタブ１９２ａは、ソースコード１５１のｉｆ文の処理Ａの実行パスの処理を実行させる。またスタブ１９２ｂは、ソースコード１５１のｉｆ文の処理Ｂの実行パスの処理を実行させる。
【００６０】
以上に説明したように、本実施形態のスタブ生成部１１５によれば、効率よく自動的にスタブ１９２を生成することができる。そのため、ＤＡＯの開発を他社が行っている場合や、データベースとは独立して単体テストを行いたい場合等、ＤＡＯが未実装の環境でも、データベース２３にアクセスする記述を含むテスト対象ソースコード１５１を効率よくテストすることができる。また例えば、ソースコードの記号実行による解析時にデータベースへのアクセスを抑制することができる。
【００６１】
以上、本発明について実施の形態に基づき具体的に説明したが、本発明は上記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、上記の実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また上記実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００６２】
また上記の各構成、機能部、処理部、処理手段等は、それらの一部または全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、また
はＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【００６３】
また上記の各図において、制御線や情報線は説明上必要と考えられるものを示しており、必ずしも実装上の全ての制御線や情報線を示しているとは限らない。例えば、実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
【００６４】
また以上に説明したスタブ生成支援装置１０の各種機能部、各種処理部、各種データベースの配置形態は一例に過ぎない。各種機能部、各種処理部、各種データベースの配置形態は、スタブ生成支援装置１０が備えるハードウェアやソフトウェアの性能、処理効率、通信効率等の観点から最適な配置形態に変更し得る。
【００６５】
また前述した各種データベースの構成（スキーマ（Schema）等）は、リソースの効率的な利用、処理効率向上、アクセス効率向上、検索効率向上等の観点から柔軟に変更し得る。
【符号の説明】
【００６６】
１０  スタブ生成支援装置、１１１  解析用ソースコード生成部、１１２  ＤＴＯソースコード解析部、１１３  記号実行部、１１４  スタブ出力値生成部、１１５  スタブ生成部、１５０  ソースコード記憶部、１５１  テスト対象ソースコード、１５２  ＤＴＯソースコード、１５３  解析用ソースコード、１６０  スタブ化対象記憶部、１６１  スタブ化対象情報、１７０  ＤＴＯ情報記憶部、１７１  ＤＴＯ情報、１８０  記憶実行結果記憶部、１８１  記号実行結果、１９０  スタブ情報記憶部、１９１  スタブ出力値、１９１Ａ  スタブ出力値ファイル、１９２  スタブ、Ｓ６００  スタブ生成処理
【図１】
2019144838.tif 000003
【図２】
2019144838.tif 000004
【図３】
2019144838.tif 000005
【図４】
2019144838.tif 000006
【図５】
2019144838.tif 000007
【図６】
2019144838.tif 000008
【図７】
2019144838.tif 000009
【図８】
2019144838.tif 000010
【図９】
2019144838.tif 000011
【図１０】
2019144838.tif 000012
【図１１】
2019144838.tif 000013
【図１２】
2019144838.tif 000014
【図１３】
2019144838.tif 000015
【図１４】
2019144838.tif 000016
【図１５】
2019144838.tif 000017
【図１６】
2019144838.tif 000018
【図１７】
2019144838.tif 000019