(57)【要約】【課題】作成されたテスト用コードが、テストレベルに相応しいかを判定するテストレベル判定装置を提供する。【解決手段】複数のテスト用コードを入力し、静的コールグラフを作成するコールグラフ作成部と、静的コールグラフを取り込んで、テスト用コード毎に動的コールグラフを作成し、ユーザからの関数分類情報に基づいて、動的コールグラフ中の各関数を、ドライバ、テスト対象、スタブに分類し、テスト用コードのテストレベルを仮決定するテスト用コード分類部と、ドライバ、テスト対象、スタブの数に基づいて、少なくとも２種のメトリクスを計算し、メトリクスを利用して、テスト用コードのテストレベルを判定するテストレベル判定部とを備えるテストレベル判定装置。【選択図】図１
2015114959.tif 000002
【特許請求の範囲】
【請求項１】
複数のテスト用コードを入力し、静的コールグラフを作成するコールグラフ作成部と、
前記静的コールグラフを取り込んで、前記テスト用コード毎に動的コールグラフを作成し、ユーザからの関数分類情報に基づいて、前記動的コールグラフ中の各関数を、ドライバ、テスト対象、スタブに分類し、前記テスト用コードのテストレベルを仮決定するテスト用コード分類部と、
前記ドライバ、テスト対象、スタブの数に基づいて、少なくとも２種のメトリクスを計算し、前記メトリクスを利用して、前記テスト用コードのテストレベルを判定するテストレベル判定部とを備えるテストレベル判定装置。
【請求項２】
前記動的コールグラフ中に、同じ呼び出し元から複数の前記テスト対象が呼び出される部分が含まれる場合は、結合テストと仮決定する請求項１に記載のテストレベル判定装置。
【請求項３】
前記動的コールグラフ中に、同じ呼び出し元から、1つしか前記テスト対象が呼び出されない場合は、単体テストと仮決定する請求項１に記載のテストレベル判定装置。
【請求項４】
前記２種のメトリクスは、
前記テスト対象に対する前記スタブの割合である第１のメトリクスと、
テスト用コードの規模に対する前記テスト対象の割合である第２のメトリクスであり、
前記テスト用コードの規模は、前記テスト対象数、前記ドライバ数および前記スタブ数の合計である請求項１乃至請求項３のいずれか1項に記載のテストレベル判定装置。
【請求項５】
２次元平面に前記第１のメトリクスと前記第２のメトリクスを座標とする点をプロットし、プロットした点の内、前記動的コールグラフ中のエッジ数が１である前記テスト用コードに対応する前記点を除外し、
残余の前記点を、前記仮決定したテストレベルに分類した後、前記仮決定したテストレベルごとに、残余の前記点を結ぶ近似曲線を引き、
入力した前記テスト用コードに対応する点との最短距離が最も小さくなる前記近似曲線のテストレベルを、前記テスト用コードのテストレベルと判定する請求項１乃至請求項４のいずれか1項に記載のテストレベル判定装置。
【請求項６】
前記動的コールグラフ中で、ユーザからの関数分類情報に基づいてスタブと決定した後は、それ以降の関数はカウントせず、前記テスト用コードの規模に反映させない請求項４に記載のテストレベル判定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、テストレベル判定装置に関する。
【背景技術】
【０００２】
ソフトウェアのテストでは、単体テスト、結合テスト、総合テストなど、様々なテストレベルでテストが行われる。
【０００３】
それぞれのテストレベルにおいて、テスト設計に基づいたテストコードが作成されるが、そのテストコードがテストレベルに相応しい内容でないと、テストの合否に信憑性を得られない。
【０００４】
しかし、テストコードがどのテストレベルに相応しい内容であるかの判断は、人手による。
【０００５】
テストレベルは様々あるが、あるテスト用コードがどのテストレベルなのかを自動的に判定する技術が無い。
【０００６】
そのため、各々のテストコードのテストレベルは、テスト用コードの内容を人手でレビューして判断する必要がある。また、作成したテスト用コードが、求められるテストレベルに相応しい内容になっているか分からない。さらに、特定のテストレベルに対応したテスト用コードを作成したつもりでも、実際にテストレベルに相応しい内容かの判断ができない、という問題があった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平８−２３５０２３号公報
【特許文献２】特開２０１２−１６８７６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、作成されたテスト用コードが、テストレベルに相応しいかを判定するテストレベル判定装置を提供することである。
【課題を解決するための手段】
【０００９】
実施形態のテストレベル判定装置は、複数のテスト用コードを入力し、静的コールグラフを作成するコールグラフ作成部と、前記静的コールグラフを取り込んで、前記テスト用コード毎に動的コールグラフを作成し、ユーザからの関数分類情報に基づいて、前記動的コールグラフ中の各関数を、ドライバ、テスト対象、スタブに分類し、前記テスト用コードのテストレベルを仮決定するテスト用コード分類部と、前記ドライバ、テスト対象、スタブの数に基づいて、少なくとも２種のメトリクスを計算し、前記メトリクスを利用して、前記テスト用コードのテストレベルを判定するテストレベル判定部とを備える。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態に係るテストレベル判定装置の概略構成を示すブロック図である。
【図２】静的コールグラフの一例を示す図である。
【図３】動的コールグラフ中の関数の分類の一例を説明する図である。
【図４】動的コールグラフに対するテストレベルの仮決定の一例を説明する図である。
【図５】メトリクス１およびメトリクス２のプロットの一例を説明する図である。
【図６】メトリクス１およびメトリクス２のプロットに対する仮決定したテストレベル毎の近似曲線の一例を説明する図である。
【図７】図６に示す近似曲線との最短距離を説明する図である。
【図８】仮決定と異なって判定されたテスト用コードの動的コールグラフの一例を説明する図である。
【図９】仮決定と異なって判定されたテスト用コードの近似曲線との最短距離を説明する図である。
【図１０】仮決定と異なって判定されたテスト用コードの動的コールグラフの一例を説明する図である。
【図１１】実施形態に係るテストレベル判定装置におけるテストレベル判定処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１２】
まず、本実施形態で用いる主要な用語について説明する。
【００１３】
「テストレベル」とは、単体（コンポーネント）テスト、結合（統合）テスト、システムテストなど、テスト作業の段階を開発において組織的に管理するためテストの目的や対象によるテストの分類をいう。
【００１４】
「テスト対象」とは、テストの実行によって動作するコードで、テストの合否によって、動作の正しさ、バグの有無を判定される。
【００１５】
「スタブ」とは、テスト実行時に、テスト対象から呼び出される関数やメソッドの動作を代替するコードをいう。
【００１６】
「ドライバ」とは、テスト実行時に、テスト対象を呼び出す動作を代替するコードをいう。
【００１７】
「テストコード」とは、テスト実行の為のコードをいう。テスト対象、スタブ、ドライバを含む。本実施形態においてテストレベルを判定する際に取り扱うテストコードをテスト用コードと称する。
【００１８】
「コールグラフ」とは、ソフトウェア内部の関数の呼び出し関係を木構造で表現したグラフをいう。実際に動作させた場合の呼び出し関係を表現した動的コールグラフと、呼び出される可能性がある関数全ての関係を表現した静的コールグラフの２種類がある。
【００１９】
本実施形態においては、テスト用コードに含まれる関数(メソッド)を、テスト対象、スタブ、ドライバに分類し、関数(メソッド)の数から、テストレベルを判定する為のメトリクスを計算し、テスト用コードのテストレベルを自動判定するものである。
【００２０】
図１は、本発明の実施形態に係るテストレベル判定装置の概略構成を示すブロック図である。この装置は汎用のコンピュータ（例えばパーソナルコンピュータ（ＰＣ）等）と、同コンピュータ上で動作するソフトウェアとを用いて実現される。コンピュータとしては、ＣＡＤ（Computer Aided Design）やＣＡＥ（Computer Aided Engineering）に好適なエンジニアリングワークステーション（ＥＷＳ）等も含む。本実施形態はこのようなコンピュータに、静的コールグラフの作成、テスト用コードの分類、テストレベルの仮決定を経て、テストレベルの判定に至るプログラムとして実施することもできる。
【００２１】
図１に示すように、本実施形態に係るテストレベル判定装置１００は、主として、コールグラフ作成部１０、テスト用コード分類部２０、テストレベル判定部３０から構成されている。
【００２２】
コールグラフ作成部１０は、入力した複数のテスト用コードに基づいて、静的コールグラフを作成するものである。図２は、静的コールグラフの一例を示す図である。図２に示すように、静的コールグラフは、ソフトウェア内部の関数の呼び出し関係を木構造で表現したグラフで、呼び出される可能性がある関数全ての関係を表現している。
【００２３】
テスト用コード分類部２０は、コールグラフ作成部１０で作成した静的コールグラフを取り込んで、入力したテスト用コード毎に動的コールグラフを作成する。テスト用コード分類部２０は、ユーザからの入力情報に基づいて、作成した動的コールグラフ中の各関数を、テスト対象、ドライバ、スタブに分類する。尚、テスト対象かスタブかの情報は、周知の手法で、ユーザからテスト用コード分類部２０に取り込まれる。図３は、動的コールグラフ中の関数の分類の一例を説明する図である。図３に示すように、まず、動的コールグラフのルートは、“ドライバ”と決定する。ルート以外については、“テスト対象”か“スタブ”かの区分けは、ユーザからの入力情報に基づいて決定する。図３に示す例では、関数６、関数９は、“テスト対象”であると決定し、関数７は、“スタブ”であると決定している。テストコードを実行する際、通常は、スタブからテスト対象が呼ばれることはあり得ない。そこで、ユーザが“スタブ”と決定したら、それ以降の関数はカウントせず、後述するテスト用コードの規模の把握には反映させない。
【００２４】
分類した結果に基づき、テスト用コード毎にテストレベルを仮決定する。図４は、動的コールグラフに対するテストレベルの仮決定の一例を説明する図である。動的コールグラフ中に、同じ呼び出し元から複数のテスト対象が呼び出される部分が含まれる場合は、“結合テスト”と仮決定する（図４（ａ）参照）。図４（ａ）中、関数１０はスタブ、関数５、関数６および関数８は、テスト対象である。また、同じ呼び出し元から、1つしかテスト対象が呼び出されない動的コールグラフの場合は、“単体テスト”と仮決定する（図４（ｂ）、（ｃ）参照）。図４（ｂ）中、関数８、関数１０はスタブ、関数５、関数６は、テスト対象である。図４（ｃ）中、関数１３、関数１４および関数１５は、テスト対象である。
【００２５】
テストレベル判定部３０は、テスト対象、ドライバ、スタブの数から、少なくとも２種のメトリクスを計算する。例えば、メトリクスは、次のようにして計算することができる。
【００２６】
メトリクス１:テスト対象に対する、スタブの割合
メトリクス２:テスト用コードの規模に対する、テスト対象の割合
ここで、テスト用コードの規模は、言わば、テスト用コードのかたまりの規模を表すもので、例えば、テスト用コードの規模＝テスト対象数+ドライバ数+スタブ数とする。
【００２７】
計算して得られた２種のメトリクスの関係を把握するため、例えば、２次元平面にメトリクス１とメトリクス２を座標とする点をプロットする。図５は、メトリクス１およびメトリクス２のプロットの一例を説明する図である。尚、横軸、縦軸を入れ替えてもよい。さらに、上述したメトリクスの計算式は、一例であり、例えば、動的コールグラフの“エッジ”に着目することでもよい。
【００２８】
テストレベル判定部３０は、２種のメトリクスおよび仮決定したテストレベルに基づいて、テストレベルを判定するものである。判定は、仮決定そのものを評価し、仮決定したテストレベルでは不適当と評価する場合には、後述するように、適切なテストレベルを具体的にユーザに提示する。
【００２９】
＜近似曲線の描画＞
上述した仮決定そのものを評価してレベル判定するため、本実施形態では、各テストレベルの一団からのズレに着目する。図６は、メトリクス１およびメトリクス２のプロットに対する仮決定したテストレベル毎の近似曲線の一例を説明する図である。プロットした点の内、動的コールグラフ中のエッジの数が１のテスト用コードに対応する点を除外する。これは、ドライバを始点としたエッジしか存在しないテスト用コードを除外することを意味しており、除外しない場合には、プロットの表示上、座標系外にはずれる虞があるからである。残った点を、テスト用コード分類部２０で仮決定したテストレベルに分類した後、仮決定したテストレベルごとに、近似曲線を引く。図６に示す例では、単体テスト、結合テストについて近似曲線を引いている。
【００３０】
＜レベル判定＞
近似曲線から大きくはずれたプロットを抽出するため、本実施形態では、各プロットの近似曲線との最短距離に着目する。すなわち、それぞれのテスト用コードに対応する点と、各テストレベルの近似曲線との最短距離を計算する。入力したテスト用コードに対応する点との最短距離が最も小さくなる近似曲線のテストレベルを、テスト用コードのテストレベルと判定する。図７は、図６に示す近似曲線との最短距離を説明する図である。図７に示す例では、近似曲線との最短距離は、“結合テスト”の方が小さいことから、“単体テスト”と仮決定した幾つかのテスト用コードのテストレベルが、実際は“結合テスト”である事が分かる。
【００３１】
図８は、仮決定と異なって判定されたテスト用コードの動的コールグラフの一例を説明する図である。図８（ａ）は、図４（ｃ）に示すように単体テストであると仮決定されたテスト用コードが、結合テストであると判定されたテスト用コードの動的コールグラフを示している。図８（ａ）中、関数１３、関数１４および関数１５は、テスト対象、関数１１および関数１６は、スタブである。さらに、図８（ｂ）についても、“単体テスト”であると仮決定されたテスト用コードが、“結合テスト”であると判定されたテスト用コードの動的コールグラフを示している。図８（ｂ）中、関数４、関数１３、関数１４および関数１５は、テスト対象、関数５、関数１１、関数１２および関数１６は、スタブである。
【００３２】
図９は、仮決定と異なって判定されたテスト用コードの近似曲線との最短距離を説明する図である。図９に示すように、“結合テスト”であると仮決定されたテスト用コードに対して、近似曲線との最短距離が、“単体テスト”の方が小さいことから、“結合テスト”ではなく“単体テスト”であると判定されることがある。
【００３３】
図１０は、仮決定と異なって判定されたテスト用コードの動的コールグラフの一例を説明する図である。図１０に示す動的コールグラフは、結合テストであるとの仮決定と異なり、単体テストと判定されたテスト用コードの動的コールグラフである。図１０中、関数４、関数１２および関数１３は、テスト対象、関数５および関数１４は、スタブである。
【００３４】
本実施形態では、テストレベル判定の結果として、単に、上述した近似曲線の提示だけでなく、例えば、「結合テストであると仮決定された○○○に示す動的コールグラフは、単体テストと判定する」といったメッセージを、図示しないディスプレイに出力させる。
【００３５】
次に、以上のように構成されたテストレベル判定装置１００におけるテストレベル判定処理の流れについて説明する。
【００３６】
図１１は、実施形態に係るテストレベル判定装置１００におけるテストレベル判定処理の流れを示すフローチャートである。
【００３７】
まず、コールグラフ作成部１０において、入力した複数のテスト用コードごとに、静的コールグラフを作成する（ステップＳ１１０１）。
【００３８】
作成した静的コールグラフはテスト用コード分類部２０に送られ、テスト用コード分類部２０ではテスト用コードごとに動的コールグラフを作成する（ステップＳ１１０２）。
【００３９】
次いで、テスト用コード分類部２０では、作成した動的コールグラフ中の各関数を、“テスト対象”、“ドライバ”、“スタブ”のいずれかに分類する（ステップＳ１１０３）。まず、動的コールグラフのルートは、“ドライバ”と決定し、ルート以外については、“テスト対象”か“スタブ”かの区分けは、ユーザによって決定する。
【００４０】
次いで、テスト用コードのテストレベルを仮決定する（ステップＳ１１０４）。動的コールグラフ中に、同じ呼び出し元から複数のテスト対象が呼び出される部分が含まれる場合は、“結合テスト”と仮決定し、動的コールグラフ中に、同じ呼び出し元から、1つしかテスト対象が呼び出されない場合は、“単体テスト”と仮決定する。
【００４１】
次に、テスト対象、ドライバ、スタブの数から２種のメトリクスを計算する（ステップＳ１１０５）。メトリクスの計算手法は、上述した通りである。
【００４２】
次いで、計算されたメトリクスからテストレベルを判定し（ステップＳ１１０６）、判定処理を終了する。具体的には、２次元平面にメトリクス１とメトリクス２を座標とする点をプロットし、プロットした点の内、動的コールグラフ中のエッジの数が１のテスト用コードに対応する点を除外し、残った点を、仮決定したテストレベルに分類した後、仮決定したテストレベルごとに、近似曲線を引き、入力したテスト用コードに対応する点との最短距離が最も小さくなる近似曲線のテストレベルを、テスト用コードのテストレベルと判定する。
【００４３】
以上説明したように、本実施形態によれば、作成されたテスト用コードが、テストレベルに相応しいかを判定することができる。
【００４４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００４５】
１００・・・テストレベル判定装置
１０・・・コールグラフ作成部
２０・・・テスト用コード分類部
３０・・・テストレベル判定部
【図１】
2015114959.tif 000003
【図２】
2015114959.tif 000004
【図３】
2015114959.tif 000005
【図４】
2015114959.tif 000006
【図５】
2015114959.tif 000007
【図６】
2015114959.tif 000008
【図７】
2015114959.tif 000009
【図８】
2015114959.tif 000010
【図９】
2015114959.tif 000011
【図１０】
2015114959.tif 000012
【図１１】
2015114959.tif 000013