(57)【要約】【課題】ソースコードの不具合修正後の結合テストでの後戻りを極力軽減することのできるテスト装置を提供する。【解決手段】モジュール同士を結合して実施する結合テストのテストデータを入力し、ソースコードの不具合の有無から修正内容を検出し、対応するモジュールの修正内容を反映した修正関数の情報を記録する修正関数記録部と、実行すべきリグレッションテストとしてモジュールの修正内容に関係する結合テストのみを選択するテスト選択部と、テスト選択部で選択された結合テストを実行するテスト実行部と、結合テストの実行で得られる実行トレース結果を取得して記録するトレース記録部とを備え、テスト選択部は、結合テストのテストデータ、修正関数記録部から取得した修正関数情報及びトレース記録部から取得した実行トレース結果に基づいて、結合テストを選択する。【選択図】図１
2014229168.tif 000002
【特許請求の範囲】
【請求項１】
モジュール同士を結合して実施する結合テストのテストデータを入力し、
ソースコードの不具合の有無から修正内容を検出し、対応する前記モジュールの修正内容を反映した修正関数の情報を記録する修正関数記録部と、
実行すべきリグレッションテストとして前記モジュールの修正内容に関係する前記結合テストのみを選択するテスト選択部と、
前記テスト選択部で選択された前記結合テストを実行するテスト実行部と、
前記結合テストの実行で得られる実行トレース結果を取得して記録するトレース記録部とを備え、
前記テスト選択部は、前記結合テストのテストデータ、前記修正関数記録部から取得した修正関数情報及び前記トレース記録部から取得した実行トレース結果に基づいて、前記結合テストを選択するテスト装置。
【請求項２】
前記テストデータは、
任意のテストデータのセットを取り出すためのインデックスとして用いる管理番号と、
セット内で各テストを識別するユニークな番号であるテストＩＤと、
テストで入力される変数名と値の組のリストである入力データと、
テストで出力が期待される変数名と値の組のリストである期待値を構成要素とする請求項１記載のテスト装置。
【請求項３】
前記テストデータのセットは、前記結合テスト実施の際に作成され、前記テスト選択部に記録される際、結合テスト実行対象のソースコードのリビジョン番号をインデックスとして付加する請求項２記載のテスト装置。
【請求項４】
前記修正関数情報は、ソースコードの不具合を修正する際の関数情報であって、ソースコードの修正内容が含まれる関数名のリストである請求項１乃至請求項３のいずれか１項に記載のテスト装置。
【請求項５】
前記実行トレース結果は、
任意のテストデータのセットを取り出すためのインデックスとして用いる管理番号と、
実行した結合テストを識別するユニークな番号であるテストＩＤと、
前記結合テストの実行の際に実行された全ての関数名から成る通過した関数を構成要素とする請求項１乃至請求項４のいずれか１項に記載のテスト装置。
【請求項６】
前記実行トレース結果は、
前記結合テストの実行の成否に関係なく、全ての結合テスト毎に収集される請求項１乃至請求項５のいずれか１項に記載のテスト装置。
【請求項７】
前記結合テストの選択では、モジュールの修正が成功したものに限られず修正が失敗したものも対象にして、修正した関数が関係したものを全て実行するように選択する請求項１乃至請求項６のいずれか１項に記載のテスト装置。
【請求項８】
前記ソースコードを格納するソースコード格納部と、前記修正関数情報を格納する修正関数情報格納部と、前記テストデータを格納するテストデータ格納部と、前記実行トレース結果を格納する実行トレース結果格納部を備える請求項１乃至請求項７のいずれか１項に記載のテスト装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、テスト装置に関する。
【背景技術】
【０００２】
一般的に、規模の大きなソフトウェア開発では、モジュールに分割され、複数人による並行した開発が行われている。
【０００３】
作成されたモジュールの単体テストを行った後、モジュールを統合して結合テストが実施される。このとき、単体テストでは問題のなかったモジュールであっても、結合テスト時に不具合が発見されることがある。その場合、当該モジュールは、再度修正されることになる。さらに、単体テストの後、再度結合テストが行われるが、この修正によって新たに別の問題が発覚し、再度の修正(後戻り)が必要となることがある。
【０００４】
不具合修正後の後戻りを防ぐために、全ての結合テストを網羅的にかつ頻繁にリグレッションするのは、多大な時間を要する。
【０００５】
テスト品質を確保するため、全ての結合テストのリグレッションが実施されるが、不具合の発生したモジュール作成側においても、結合テストを実施しているので、二度手間になる。さらに、不具合修正個所に関係する結合テストを、全結合テストの中から必要なテストを探して実行することは難しい。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２０５２３９号公報
【特許文献２】特開２００８−２０４４０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明が解決しようとする課題は、ソースコードの不具合修正後の結合テストでの後戻りを、極力軽減することのできるテスト装置を提供することである。
【課題を解決するための手段】
【０００８】
実施形態のテスト装置は、モジュール同士を結合して実施する結合テストのテストデータを入力し、ソースコードの不具合の有無から修正内容を検出し、対応する前記モジュールの修正内容を反映した修正関数の情報を記録する修正関数記録部と、実行すべきリグレッションテストとして前記モジュールの修正内容に関係する前記結合テストのみを選択するテスト選択部と、前記テスト選択部で選択された前記結合テストを実行するテスト実行部と、前記結合テストの実行で得られる実行トレース結果を取得して記録するトレース記録部とを備え、前記テスト選択部は、前記結合テストのテストデータ、前記修正関数記録部から取得した修正関数情報及び前記トレース記録部から取得した実行トレース結果に基づいて、前記結合テストを選択する。
【図面の簡単な説明】
【０００９】
【図１】本実施形態に係るテスト装置の概略構成を示すブロック図である。
【図２】テストデータのデータ構造を説明する図である。
【図３】修正関数情報のデータ構造を説明する図である。
【図４】実行トレース結果のデータ構造を説明する図である。
【図５】実施形態に係るテスト装置の実行トレースの記録処理の流れを示すフローチャートである。
【図６】実行トレース結果の取得を説明するもので、結合テスト毎の関数呼び出しの関係を表すコールグラフである。
【図７】実施形態に係るテスト装置における修正関数情報取得の処理の流れを示すフローチャートである。
【図８】修正差分を説明する図である。
【図９】実施形態に係るテスト装置におけるリグレッションテストの実行処理の流れを示すフローチャートである。
【図１０】取り出した実行トレース結果のセットの一例を示したものである。
【図１１】取り出した結合テストのセットの一例を示したものである。
【図１２】実行すべきリグレッションテストとして結合テストの選択を説明する図である。
【発明を実施するための形態】
【００１０】
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１１】
まず、本実施形態で用いる主要な用語について説明する。
【００１２】
「モジュール」とは、ソフトウェアの構成要素をいう。ひとまとまりの機能をもった機能ブロックである。
【００１３】
「単体テスト」とは、モジュール単位のテストをいう。モジュールの内部機能を確認するものである。
【００１４】
「結合テスト」とは、モジュール同士を結合して実施するテストをいう。結合テストによって、モジュール同士のインターフェースの接合と複数モジュールを組み合わせて実現する機能を確認する。
【００１５】
「修正関数」とは、モジュールの修正において、具体的に修正された関数をいう。
【００１６】
「リグレッションテスト」とは、モジュールの修正内容に関係する結合テストのみを先行実施することをいう。プログラムを修正した際に、その修正によって予想外の影響が現れていないかどうか既存のテストを実行することで再確認する必要がある。
【００１７】
「実行トレース」とは、ソフトウェアの実行時に得られる動的情報をいう。本実施形態では、ソフトウェアを実行した際に通過した関数、すなわち実際に実行した関数を記録したものを指す。実行トレースの結果は、結合テスト実施のタイミングで取得する。
【００１８】
「テストケース」とは、結合テストのテストセットをいう。
【００１９】
本実施形態においては、モジュールの修正内容に関係する結合テストのみを、実行トレース結果、修正関数及びテストデータに基づいて、リグレッションテストとして選択するものである。
【００２０】
図１は、本実施形態に係るテスト装置の概略構成を示すブロック図である。テスト装置は汎用のコンピュータ（例えばパーソナルコンピュータ（ＰＣ）等）と、同コンピュータ上で動作するソフトウェアとを用いて実現される。コンピュータとしては、ＣＡＤ（Computer Aided Design）やＣＡＥ（Computer Aided Engineering）に好適なエンジニアリングワークステーション（ＥＷＳ）等も含む。本実施形態はこのようなコンピュータに、リグレッションテストとして結合テストを選択する一連の処理を実行させるプログラムとして実施することもできる。
【００２１】
図１に示すように、本実施形態に係るテスト装置１００は、大別すると、修正関数記録部１０、テスト選択部２０、テスト実行部３０、トレース記録部４０、ソースコード格納部５０、修正関数情報格納部６０、テストデータ格納部７０、実行トレース結果格納部８０から構成されている。テスト装置１００は、図示しないユーザインタフェース等を介してユーザが設定した結合テストのテストデータを入力して、テストデータ格納部７０にしている。
【００２２】
修正関数記録部１０は、ソースコードを格納するソースコード格納部５０に接続している。修正関数記録部１０は、修正関数の情報を格納する修正関数情報格納部６０に接続している。
【００２３】
修正関数記録部１０は、ソースコード格納部５０からソースコードを取得し、ソースコードの不具合の有無から修正内容を検出する。修正関数記録部１０は、不具合の修正内容を反映した修正関数の情報を記録する。記録した情報は、後述するように、次回以降のリグレッションテストのテスト選択の入力情報となるので、保持しつづけられる。
【００２４】
テスト選択部２０は、修正関数記録部１０、テスト実行部３０、トレース記録部４０及び結合テストのテストデータを格納するテストデータ格納部７０に接続している。テスト選択部２０は、テストデータ格納部７０から取得した結合テストのテストデータ、修正関数記録部１０から取得した修正関数情報及びトレース記録部４０から取得した実行トレース結果に基づいて、本実施形態に係るテスト装置１００において実行するリグレッションテストを選択するものである。選択したリグレッションテストは、テスト実行部３０に送られる。
【００２５】
テスト実行部３０は、テスト選択部２０から取得した結合テストを実行するものである。実行して得られる実行トレース結果は、トレース記録部４０に送られる。
【００２６】
トレース記録部４０は、テスト選択部２０、テスト実行部３０及び実行トレースの結果を格納する実行トレース結果格納部８０に接続している。トレース記録部４０は、テスト実行部３０から実行テストの実行で得られる実行トレース結果を取得して記録する。実行トレース結果は、実行トレース結果格納部８０に送られる。
【００２７】
図２は、テストデータのデータ構造を説明する図である。テストデータは、例えば、図２に示すように“管理番号”、“テストＩＤ”、“入力データ”、“期待値”を構成要素として成り立っている。“管理番号”は、実行対象となるソースコードの構成管理のリビジョン番号である。“管理番号”は、任意のテストデータのセットを取り出すためのインデックスとして用いる。
【００２８】
“テストＩＤ”は、セット内で各テストを識別するユニークな番号である。
【００２９】
“入力データ”は、テストで入力される変数名と値の組のリストである。“期待値”は、テストで出力が期待される変数名と値の組のリストである。図２に示す例では、管理番号ｒ６３１は、テストＩＤ１，２，・・・，ｎから成るｎ個のテストで１セットのテストデータを構成している。テスト１は、変数ａ，ｂ，ｃに対して、それぞれａ＝２、ｂ＝３、ｃ＝４を入力値とすると、変数ｄ，ｅに対して、ｄ＝５、ｅ＝３の出力値が期待されている。
【００３０】
任意の“管理番号”において、“テストID”を指定することにより任意のテストを取り出すことが出来る。テストデータのセットは、結合テスト実施の際に作成するもので、テスト選択部２０に記録される。テストデータのセットがテスト選択部２０に記録される際、結合テスト実行対象のソースコードのリビジョン番号をインデックスとして付加する。
【００３１】
テストデータは、テストデータ格納部７０に格納される。
【００３２】
図３は、修正関数情報のデータ構造を説明する図である。修正関数情報は、ソースコードの不具合箇所を修正する際の関数情報で、ソースコードの修正内容が含まれる関数名のリストである。図３に示す例では、“関数Ａ”，“関数Ｂ”，・・・が修正された関数であることがわかる。修正関数情報は、修正関数情報格納部６０に格納される。
【００３３】
図４は、実行トレース結果のデータ構造を説明する図である。実行トレース結果は、例えば、図４に示すように“管理番号”、“テストＩＤ”、“通過した関数”を構成要素として成り立っている。“管理番号”は、実行対象となるソースコードの構成管理のリビジョン番号である。“管理番号”は、任意のセットを取り出すためのインデックスとして用いる。“テストＩＤ”は、実行した結合テストを識別するユニークな番号であるテストIDである。“通過した関数”は、結合テストの実行の際に実行された全ての関数名が記録される。実行トレース結果のセットには、実行した結合テストと同じn個の“通過した関数”が記録される。ここでは、結合テストの実行の成否に関係なく、全ての結合テストに対して実行トレースが収集される。
【００３４】
“テストID”を指定することで、任意のテストでの“通過した関数”を取り出すことが出来る。
【００３５】
実行トレース結果のセットは、テスト実行部３０で結合テストを実施した際、トレース記録部４０で記録される。実行トレースのセットがトレース記録部４０に記録される際、結合テスト実行対象のソースコードのリビジョン番号をインデックスとして付加する。
【００３６】
図４に示す例では、テスト２において関数Ａ，Ｂ，Ｃ，Ｅが通過したことを表している。
【００３７】
＜実行トレースの記録＞
次に、以上のように構成されたテスト装置１００における実行トレースの記録処理の流れについて説明する。
【００３８】
図５は、実施形態に係るテスト装置１００の実行トレースの記録処理の流れを示すフローチャートである。
【００３９】
まず、テスト実行部３０で結合テストを実施する（ステップＳ５１）。
【００４０】
次に、テスト選択部２０で、実行したプログラムのソースコードのリビジョン番号を管理番号として、結合テストをテストデータに登録する（ステップＳ５２）。結合テストを登録したテストデータの一例は、図２に示されるものである。
【００４１】
次に、トレース記録部４０で、実行したプログラムのソースコードのリビジョン番号を管理番号として、各結合テストの“テストID”と“通過した関数”を実行トレース結果に記録する（ステップＳ５３）。“テストID”と“通過した関数”を記録した実行トレース結果の一例は、図４に示されるものである。
【００４２】
＜実行トレース結果の取得＞
ここで、実行トレース結果の取得について詳述する。実行トレース結果は、結合テストの実行時に、実行情報として取得し、実行トレース結果格納部８０に格納される。実行トレース結果は、各テストで、通過した関数を結合テスト毎に記録するものである。
【００４３】
図６は、実行トレース結果の取得を説明するもので、結合テスト毎の関数呼び出しの関係を表すコールグラフである。各関数を表すノードを、向きを持った辺で結んでいる。図６に示すコールグラフでは、結合テスト毎に通過した関数と通過していない関数を区別しているが、通過していない関数の情報は、データとしては実行トレース結果格納部８０に格納しない。
【００４４】
＜修正関数情報取得＞
次に、以上のように構成されたテスト装置１００における修正関数情報取得処理の流れについて説明する。
【００４５】
図７は、実施形態に係るテスト装置１００における修正関数情報取得の処理の流れを示すフローチャートである。
【００４６】
まず、不具合のあるモジュールについて修正を実施する（ステップＳ７１）。
【００４７】
次に、修正したモジュールについて単体テスト実施する（ステップＳ７２）。
【００４８】
次いで、修正したモジュールの単体テストが成功したか否かを判定する（ステップＳ７３）。
【００４９】
修正したモジュールの単体テストが成功した場合（ステップＳ７３でＹｅｓ）には、修正関数記録部１０で修正差分を取得する（ステップＳ７４）。図８は、修正差分及び修正関数情報を説明する図である。修正差分は、修正前モジュールと修正後モジュールの差分であって、関数毎の追加した内容と削除した内容である。図８に示す例では、関数Ａに、a = b+xが追加され、関数Ｂからa++が削除されているので、修正関数情報は、modify funcA、modify funcBとなる。
【００５０】
次に、修正関数記録部１０で修正された関数名を、図８に示すような修正関数情報として記録し（ステップＳ７５）、修正関数情報格納部６０に格納する。尚、ステップＳ７３でＮｏ（修正したモジュールの単体テストが不成功）の場合には、ステップＳ７１に戻る。
【００５１】
＜リグレッションテストの実行＞
次に、以上のように構成されたテスト装置におけるリグレッションテストの実行処理の流れについて説明する。
【００５２】
図９は、実施形態に係るテスト装置におけるリグレッションテストの実行処理の流れを示すフローチャートである。
【００５３】
まず、テスト選択部２０が、修正前のソースコードのリビジョン番号を用いて、図２に一例を示すテストデータから結合テストのセットを取り出す（ステップＳ９１）。
【００５４】
次いで、修正関数記録部１０から、図３に一例を示す修正関数情報を取り出す（ステップＳ９２）。
【００５５】
次に、修正前のソースコードのリビジョン番号を用いて、図４に一例を示す実行トレース結果から実行トレース結果のセットを取り出す（ステップＳ９３）。
【００５６】
次いで、ステップＳ９３で取り出した実行トレース結果のセットから、図３に一例を示す修正関数情報に記載されている関数名を含むものを取り出す（ステップＳ９４）。図１０は、取り出した実行トレース結果のセットの一例を示したものである。図１０に示す例では、テストＩＤ１，２が取り出されている。
【００５７】
次に、ステップＳ９４で取り出した実行トレース結果のテストIDと同じテストケースを、ステップＳ９１で取り出した結合テストのセットから取り出す（ステップＳ９５）。図１１は、取り出した結合テストのセットの一例を示したものである。
【００５８】
図１２は、実行すべきリグレッションテストとして結合テストの選択を説明する図である。本実施形態においては、修正した関数を通過する結合テストを実行トレースから選択する。図１２に示す例では、修正した関数がＥであるので、修正された関数Eが記録されている実行トレースを選択する。さらに、結合テスト１では関数Ｅが通過していないが，結合テスト２では関数Ｅが通過していることがわかる。以上から、図１２に示す例では、実行すべきリグレッションテストとして、結合テスト２が選択される。
【００５９】
リグレッションテストでは、モジュールの修正が成功したものに限られず修正が失敗したものも対象にして、修正した関数が関係したものを全て実行する。これによって、結合段階での結合テストでの後戻りを極力軽減することができる。
【００６０】
以上のようにして選択した実行トレースに対応する結合テストを、テスト実行部３０で実行（ステップＳ９６）し、テストが成功したか否かを判定する（ステップＳ９７）。成功の場合（ステップＳ９７でＹｅｓ）には、リグレッションテストの実行を終了する。一方、テストが不成功の場合（ステップＳ９７でＮｏ）には、モジュールの再修正処理（ステップＳ９８）に移行する。
【００６１】
以上説明したように、本実施形態によれば、ソースコードの不具合修正後に、結合テストでの後戻りを極力軽減することができる。
【００６２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６３】
１００・・・テスト装置
１０・・・修正関数記録部
２０・・・テスト選択部
３０・・・テスト実行部
４０・・・トレース記録部
５０・・・ソースコード格納部
６０・・・修正関数情報格納部
７０・・・テストデータ格納部
８０・・・実行トレース結果格納部
【図１】
2014229168.tif 000003
【図２】
2014229168.tif 000004
【図３】
2014229168.tif 000005
【図４】
2014229168.tif 000006
【図５】
2014229168.tif 000007
【図６】
2014229168.tif 000008
【図７】
2014229168.tif 000009
【図８】
2014229168.tif 000010
【図９】
2014229168.tif 000011
【図１０】
2014229168.tif 000012
【図１１】
2014229168.tif 000013
【図１２】
2014229168.tif 000014