説明

カバレッジ測定システム及びカバレッジ測定方法並びにそのプログラム

【課題】 コンポーネントのソースコードが公開されていない場合にも、またコンポーネントにおける限定した関数のみを用いる場合にも、高い精度において、利用するコードのカバレッジの測定を行うことが可能なカバレッジ測定システム及びカバレッジ測定方法並びにそのプログラムを提供する。
【解決手段】 本発明のカバレッジ計測システムアは、センブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを実行する仮想マシン部と、該仮想マシン部におけるテストにおいて、実行された命令コードの位置情報を抽出する位置情報抽出部とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータで動作するソフトウェアの品質を評価するカバレッジ測定システム及びカバレッジ測定方法並びにそのプログラムに関する。
【背景技術】
【0002】
従来からソフトウェアの品質を評価する手段として、ソフトウェアの実行テストにおけるカバレッジの測定がある。
この実行テストのカバレッジとは、ソフトウェアの全コードに対して、実行テストにより実行されたコードの割合である。
すなわち、実行テストを行った際に、ソフトウェアを構成するコードにおいて、どのコードが実行されたか、または実行されなかったかを判別することによって、実行されたコード割合としてカバレッジが計測される。
【0003】
この測定されるカバレッジを、実行テストが十分にソフトウェアを試験しているか否かを示す信頼性の指標とすることにより、この実行テストが正当に行われているか否かを判別することができ、カバレッジが高いほどソフトウェアの信頼性も高いこととなる。
そして、カバレッジの計測は、図8に示す概念図の順のようにして行われる。
(1)カバレッジ測定用コード埋め込み
ソフトウェアのソースコード中において、分岐が発生する部分に対して、トレース用のコードを埋め込む。
このトレース用のコードは、実行された場合、ソースコードにおいてどの位置のコードが実行されたかを示す位置特定情報(例えばファイル名、行番号)を出力する。
【0004】
(2)コンパイル
トレース用のコードを埋め込んだコードをコンパイルしバイナリコードを生成する。
(3)テスト実行
上記バイナリコードに対して実行テストを実行し、トレース用のコードが出力するデータをログとして取得する。
【0005】
(4)ログ集計
(1)で埋め込んだトレース情報により、(3)の実行テストにおいてソースコード中のどの位置のコードが実行されたかを示す実行コードの位置情報を抽出する。
そして、このコードの位置情報の抽出結果をもとに、下記のファイルカバレッジと関数カバレッジとの算出を行う。
ファイルカバレッジは、実行テスト時に実行されたソフトウェアの行数を、ソフトウェアの総行数で除算することで求める。
【0006】
また、関数カバレッジは、実行テスト時に実行されたソフトウェアの関数の行数を、ソフトウェアにおける関数の総行数で除算することで求める。
これにより、ユーザは、ファイルカバレッジと関数カバレッジとを調べることにより、ソースコード中のどの部分が網羅的にテストされていないかを検出することができる。
【0007】
(5)テスト追加
(4)の結果に基づいて、網羅的にテストされていないコード部分がテストされるように、実行テストに追加のテストコードを追加し、新たな実行テストを作成し、上記(3)(4)の処理を繰り返す。
ファイルカバレッジと関数カバレッジと各々100%となるまで、もしくは、品質上において満足できる基準値を満たすまで繰り返す。
上述したように、従来のカバレッジの検出方式においては、ソースコードに対してトレースコードを埋め込み、ソフトウェアの全機能を対象としたカバレッジの計測を行っている(例えば、特許文献1参照)。
【特許文献1】特開2002−99584号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
近年、Webサービス/SOA(サービス指向アーキテクチャ)を始めとして、コンポーネントによるソフトウェアの組み合わせ開発が注目を浴びている。
ソフトウェアのコンポーネントによる組み合わせ開発においては、従来の開発と比較して、以下に示す特徴を有している。
特徴1.他社製のコンポーネントを利用した場合、そのコンポーネントのソースコードを入手できない場合がある。
特徴2.コンポーネントの関数は、全て開発者に公開されている訳ではなく、また、開発者が全ての関数を開発に必要とする訳ではない。そのため、限定的な関数に対してのみのテストを実施することが可能である。
【0009】
しかしながら、コンポーネントによる組み合わせ開発に従来のカバレッジ測定手法を適用し実行テストの妥当性を検証する場合、以下に示す問題がある。
(1)ソースコード入手が困難な場合
従来のカバレッジ測定手法は、ソフトウェアのソースコードを利用して、各コードが実行されているか否かのカバレッジを計測している。
ここで言うソースコードは、オブジェクト指向言語を中心にDelphi(登録商標),Oberon-2(登録商標),Forth(登録商標),C(登録商標),C++(登録商標),JAVA(登録商標)等、アセンブリ言語や機械語に対する高級言語で記載されたソフトウェアのコードを示している。
【0010】
一方、上述したコンポーネントベースのソフトウェア開発においては、上記特徴1で述べたように、使用するコンポーネントのソースコードが入手できない場合があり、実行テストにおいて、ソースコード単位に実行されたか否かのカバレッジを計測することはできない。ここで、リバースエンジニアリングにより、コンポーネントのバイナリコードからソースコードを生成することが考えられるが、他社製品を利用した場合、リバースエンジニアリングし、トレースコードを埋め込み、ソフトウェアを書き換えること自体が契約上違法になることが多く解決には繋がらない。
【0011】
(2)ソースコードの入手が可能な場合
従来のカバレッジ測定手法は、ファイル、関数毎の網羅的なテストを行い、ファイルカバレッジ、関数カバレッジ等を計測している。
しかしながら、コンポーネント開発においては、上記特徴2の理由から、プログラムの開発者はマニュアルに記載された関数のみしか知ることができず、一方、マニュアルに記載された関数全てを、開発するソフトウェアに利用する訳ではない。
そこで、開発するソフトウェアの特定の関数のみを実行したときのカバレッジを計測する必要がでてくる。
【0012】
以下、ファイルカバレッジと関数カバレッジとをコンポーネントの実行テストに適用したときの具体的な問題点について述べる。
(a)ファイルカバレッジを利用した場合
従来のテストにおいては、入手したソースコードにおいて、限定した関数に対してのみ実行テストを行うこととなる。
しかしながら、公開された関数カバレッジを100%としても、公開されていない関数がテストにおいて実行されなければ、最終的なカバレッジの計測値が低い値となる。
【0013】
すなわち、図9に示すように、あるアプリケーションにおいては関数Aしか利用しないため、他の関数B,C,Dに対してテストを行い、関数カバレッジを向上させる必要があるが、どのような関数が準備されているかユーザには不明なため、実際的に関数カバレッジを向上させるテストを行うことができない。
したがって、従来の計測方法は、上記アプリケーションのように、複数ある関数のなかで関数Aしか用いていないため、どんなに網羅的に実行テストを行っても、残りの関数B,C,Dが実行されなければ、最終的な関数カバレッジは低い値となり、実際に開発したプログラムの品質の指標とならない問題がある。
【0014】
(b)関数カバレッジを利用した場合
従来のカバレッジ測定手法は、入手したソフトウェアのソースコードにおいて、全ての関数のカバレッジを計測することが可能である。
コンポーネント開発においては、開発者に公開される関数構成が限定されるため、呼び出し先の関数に対して実行テストを行うことができない。
すなわち、公開されたある関数自体の使用に対して、関数カバレッジが100%であっても、その関数に呼び出される関数がテスト対象ではないため、アプリケーションの有する機能が網羅的にテストされているとは言えない。
【0015】
例えば、図10のような関数のコードがあった場合、「a==b」という条件の1回のテストにより、関数mainのカバレッジは100%となる。
しかしながら、関数mainの呼び出し先の関数fooを参照すると、「a==b」以外の条件のコードのテストはされない。
すなわち、従来の関数カバレッジの計測方法においては、上記関数mainの有する全ての機能を、網羅的にテストしていることにはならないという欠点がある。
このとき、関数fooが利用者(開発者)に対して公開されているとは限らないため、関数foo単独で網羅的にテストすることができない。
【0016】
本発明は、このような事情に鑑みてなされたもので、コンポーネントのソースコードが公開されていない場合にも、またコンポーネントにおける限定した関数のみを用いる場合にも、高い精度において、利用するコードのカバレッジの測定を行うことが可能なカバレッジ測定システム及びカバレッジ測定方法並びにそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【0017】
本発明のカバレッジ計測システムは、アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを実行する仮想マシン部と、該仮想マシン部におけるテストにおいて、実行された命令コードの位置情報を抽出する位置情報抽出部とを有することを特徴とする。
【0018】
本発明のカバレッジ計測システムは、前記ソフトウェアの全ての命令コードを抽出し、この命令コードをその位置情報とともにテーブルとして記憶部に記憶させる命令コード抽出部を有することを特徴とする。
【0019】
本発明のカバレッジ計測システムは、前記位置情報取得部が抽出する前記位置情報の命令コードと、ソフトウェアの全ての命令コードとを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする。
【0020】
本発明のカバレッジ計測システムは、前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を抽出する呼出関数抽出部と、前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを生成する呼出関係抽出部とを有し、前記呼出関数抽出部が前記他の関数の呼び出す関数も抽出し、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行うことを特徴とする。
【0021】
本発明のカバレッジ計測システムは、前記位置情報取得部が抽出する前記命令コードの位置情報と、前記呼出対応テーブルの全ての関数の命令コードの位置情報とを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする。
【0022】
本発明のカバレッジ計測プログラムは、アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを仮想マシン部が実行するテスト実行処理と、該テスト実行過程におけるテストにて実行された命令コードの位置情報を位置情報抽出部が抽出する位置情報抽出処理とをコンピュータに実行させるプログラムである。
【0023】
本発明のカバレッジ計測プログラムは、前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を、呼出関数抽出部が抽出する呼出関数抽出処理と、前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを、呼出関係抽出部が生成する呼出関係抽出処理とを有し、前記呼出関数抽出処理において、前記他の関数の呼び出す関数も抽出され、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う処理ををコンピュータに実行させるプログラムである。
【発明の効果】
【0024】
以上説明したように、本発明によれば、ソースコードを用いるのではなく、アセンブラコードまたはバイナリコードの命令コードのカバレッジを計算することにより、ソースコードがない場合でもテストの信頼性を定量化できるようにすることができるという効果が得られる。
また、本発明によれば、アプリケーションにおいて利用者が用いる関数を利用したときに実行される可能性がある関数のコードに限定し、これらの関数のみに対してカバレッジを計算することにより、限定的な関数のテストに対し高精度にカバレッジを計測できるという効果が得られる。
【発明を実施するための最良の形態】
【0025】
本発明の開発対象となるSOAは、大規模なシステムを「サービス」の集まりとして構築する設計手法である。
このサービスとは、利用者が外部から標準化された手順によって呼び出すアプリケーションソフトウェア(以下、アプリケーション)、すなわちコンポーネントの塊であり、各アプリケーション自体で利用者に利用可能な機能を持つものを言う。このため、全てのソフトウェアを開発するのではなく、提供されるコンポーネントを利用してソフトウェアの開発を行うこととなる。
【0026】
したがって、本発明は、トレースコードを埋め込む等、提供されるソフトウェアのソースコードを変更することができないとき、このソフトウェアを実装するコンピュータに対応する仮想マシン上において、使用するソフトウェアまたはコンポーネントの提供される形態により、すなわちアセンブラコードまたはバイナリコードにより、所定のテストパターンを用いてテストを実行し、そのテストにより実行された命令コードを抽出することにより、各命令コードのカバレッジの評価を行う。
【0027】
以下、本発明の一実施形態によるカバレッジ計測システムを図面を参照して説明する。
<第1の実施形態>
図1は同実施形態によるカバレッジ計測システムの構成例を示すブロック図である。後に述べる仮想マシン部により実行されるソフトウェア(すなわちソフトウェアプログラム)の形態として、アセンブラコードまたはバイナリコードが可能であるが、以下の説明においては、バイナリコードを実行するとして説明する。
この図において、命令コード抽出部1,仮想マシン部3,位置情報抽出部5及びカバレッジ計算部6は、CPU(中央演算処理装置)がメモリ(ROM,RAMまたは磁気記録媒体)に記憶されているプログラム及びデータに従って動作するようにして実現するようにしてもよい。
また、命令コードデータベース2及び位置情報データベース4は、ROM,RAMや磁気記録媒体等により構成されている。
【0028】
命令コード抽出部1は、入力されるソフトウェアプログラムの全コードを、コードファイルの先頭から順に、命令コードテーブルと比較しつつ検索し、命令コードテーブルにある命令コードが検索されると、この命令コードとこの命令コードのソフトウェアプログラムにおける位置を示す位置情報(例えば、アドレス)とを対応させて、命令コード抽出テーブルとして、命令コードデータベース2へ格納する。
上記命令コードテーブルは、命令コードデータベース2に記憶されており、後に説明する仮想マシン部において動作する命令のバイナリコードとこの命令のデータ構成(命令コード、すなわちオペコード及びオペランドの対応)とが格納されている。
【0029】
仮想マシン部3は、カバレッジ計測の対象であるソフトウェアプログラムの中間言語のアセンブラ(アセンブラ言語)や機械語のバイナリコードを仮想的に実行する実行環境であり、所定のテストパターン、例えばテストパターン1,2及び3によるテスト結果を、実行履歴(例えばログ)として、位置情報データベース4へ、テストパターン毎に対応させて格納する。
【0030】
図3に示すように、各アプリケーションにおける関数が機械語またはアセンブラ言語で記載されたソフトウェアプログラムを仮想マシン部3により実行させる。
位置情報抽出部5は、位置情報データベース4へ記録されている、テストパターン毎に実行された実行履歴それぞれから、実行された実行命令コード及びその位置情報とを読出し、それらを図2に示すように、テストパターン1,2および3の実行履歴をマージ(併合)させて、重複するデータを除去して、実行命令コードとその位置情報とを対応させ、位置情報テーブルとして位置情報データベース4へ格納する。
【0031】
カバレッジ計算部6は、位置情報データベース4に記憶された位置情報テーブルから、実行命令コードとその位置情報とを読出し、この実行命令コードの位置情報により、命令コードデータベース2に記憶された命令コード抽出テーブルを検索し、実行命令コードの位置情報と同一な命令コードの位置情報を検出することで、いずれの位置の命令コードが実行されたかあるいはされなかったか、またはソフトウェアプログラムの全命令コードにおいて実行された命令コードの割合(実行された実行命令コード数を、ソフトウェアプログラムの全命令コード数で除算)を計算し、カバレッジの計測結果として出力する。
【0032】
次に、図1及び図3を参照して、本発明の第1の実施形態によるカバレッジ計測システムの動作を説明する。図3は第1の実施形態のカバレッジ計測システムの動作例を示すフローチャートである。
命令コード抽出部1は、被計測対象のソフトウェアプログラムを入力し(ステップS1)、命令コードテーブルを参照して、このテーブルに記載された命令コードと同一の命令コードを、入力される被計測対象のソフトウェアプログラムにおいて検索し、検索された命令コードとこの命令コードの位置情報とを対応させ、命令コード抽出テーブルとして、命令コードデータベース2へ格納する(ステップS2)。
【0033】
次に、仮想マシン部3は、上記ソフトウェアプログラムを所定のテストパターン(単数または複数のテストパターン)を用いてテストし、各バイナリコードの実行履歴を、このテストパターンに対応させて位置情報データベース4に格納する(ステップS3)。
そして、位置情報抽出部5は、テストパターン毎に上記実行履歴を読出し、実行された実行コードとそのアドレスとを抽出し、テストパターンに対応させて、位置情報テーブルとして位置情報データベース4へ格納する(ステップS4)。
【0034】
次に、カバレッジ計算部6は、位置情報データベース4から位置情報テーブルを読出し、この位置情報テーブルに含まれる位置情報毎に、この位置情報に対応する実行命令コードと同一の位置情報の命令コードを、命令コード抽出テーブルにおいて検索し、位置情報テーブル及び命令コード抽出テーブルにおいて同一位置情報の命令コードを抽出し、抽出された位置情報と、対応する命令コードとを対応させ(命令コードの実行箇所の特定)、検出結果テーブルとして出力する(ステップS5)。
【0035】
このとき、カバレッジ計算部6は、図4に示すように、複数のテストパターンによりテスト(テストパターン1によるテスト1,テストパターン2によるテスト2及びテストパターン3によるテスト3)を行ったソフトウェアプログラムの場合、テストパターン毎にある複数の位置情報テーブル(テストの実行結果)をマージして、1つの位置情報テーブルとしてステップS5の処理を行う。
【0036】
そして、カバレッジ計算部6は、位置情報テーブルに、次に検索する実行命令コードが残っているか否かを検出し、残っている場合、処理をステップS5へ戻し、残っていない場合、処理をステップS7へ進める(ステップS6)。
次に、カバレッジ計算部6は、上記検出結果テーブルから位置情報の検出数を計算し、この検出数を、命令コード抽出テーブルの位置情報の全数で除算して、除算結果をコードのカバレッジ情報として出力する(ステップS7)。
このとき、カバレッジ計算部6は、命令コード抽出テーブルにおいて、位置情報テーブルの位置情報及びこの位置情報の実行命令コードと対応しない、すなわちテストパターンによりテストされていない命令コード及びこの命令コードの位置情報を、上記カバレッジ情報に含ませて出力する。
【0037】
上述した第1の実施形態によるカバレッジ計測システムは、ソースコードを用いるのではなく、仮想マシン上にて所定のテストパターンにより、アセンブラコードまたはバイナリコードによりプログラムを動作させ、このテスト結果において動作した命令コードのカバレッジを計算することにより、ソースコードがない場合でもテストの信頼性を定量化でき、かついずれの位置情報の命令コードが実行されなかったかを特定することができ、より信頼性の高いテストパターンを作成できる。
【0038】
<第2の実施形態>
次に、本発明の第2の実施形態として、図5に示すカバレッジ計測システムを説明する。図5はは第2の実施形態によるカバレッジ計測システムの構成例を示すブロック図である。
この図において、命令コード抽出部1,仮想マシン部3,位置情報抽出部5,カバレッジ計算部6,呼出関数抽出部7及び呼出関係抽出部8は、CPU(中央演算処理装置)がメモリ(ROM,RAMまたは磁気記録媒体)に記憶されているプログラム及びデータに従って動作させて実現するようにしてもよい。
また、命令コードデータベース2及び位置情報データベース4は、ROM,RAMや磁気記録媒体等により構成されている。
この図において、図1に示す第1の実施形態によるカバレッジ計測システムと同一の部分には同一の符号を付し、その説明を省略する。
この図5に示す第2の実施形態によるカバレッジ計測システムが、第1の実施形態によるカバレッジ計測システム装置と異なる点は、作成されるソフトウェアプログラムにおいて利用者が利用する関数を抽出する呼出関数抽出部7が追加されて設けられている点である。
【0039】
コンポーネントを利用したプログラム開発においては、コンポーネントに含まれる全ての関数を用いるわけでなく、必要な機能のみを有する関数を利用している。
この使用形態に対応させるため、第2の実施形態においては、アプリケーションにおいて使用している関数のみを抽出し、この関数がテストされているか否かのカバレッジを計測している。
一方、第1の実施形態においては、使用するしないに係わらず、全てのコードのカバレッジを求める。
【0040】
すなわち、呼出関数抽出部7は、ソフトウェアプログラムにおいて、利用者の用いている関数が呼び出している他の関数、及びこの他の関数が呼び出している関数を次々抽出し、利用者が使用している関数を全て抽出する。
また、呼出関係抽出部8は、上記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを生成し、呼出対応データベース9へ格納する。
【0041】
ここで、呼出関数抽出部7は、上述したように、他の関数の呼び出すさらに他の関数も抽出し、上記呼出対応テーブルに記載された対応以外の参照関係(呼出関係)が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う。
また、命令コード抽出部1は、上記呼出対応テーブルに記載された関数に対応する命令コードを、ソフトウェアプログラムから抽出し、命令コード及びこの命令コードに対応する位置情報を抽出し、命令コード抽出テーブルとして、呼出対応データベース9へ格納する。
【0042】
次に、図5及び図6を参照して、本発明の第2の実施形態によるカバレッジ計測システムの動作を説明する。図6は第2の実施形態のカバレッジ計測システムの動作例を示すフローチャートである。
呼出関数抽出部7は、被計測対象のソフトウェアプログラムを入力し(ステップS10)、利用者が実際にこのプログラムにおいて使用している関数、及びこの関数に呼び出される関数を全て抽出する。
【0043】
そして、呼出関係抽出部8は、呼出関数抽出部7が求めた関数群において、図7に示すように、抽出された呼出元の関数と呼出先の関数との対応関係を求め、それぞれの位置情報を含めて記述された呼出対応テーブルを生成する(ステップS11)。
このステップS11を上記図7を参照して詳細に説明すると、
ステップS11aにおいて、呼出関数抽出部7は、被計測対象のソフトウェアプログラムから、利用者の使用する関数を初期ノードとして抽出し、この初期ノードが呼び出すノードを抽出する。
【0044】
ステップS11bにおいて、呼出関係抽出部8は、初期ノードとこの初期ノードの呼出先のノードとの間に、関数の呼出関係を示すエッジを設定し、この対応関係を呼出対応テーブルに書き込む。
ステップS11cにおいて、呼出関数抽出部7は、初期ノードの選択したノードが呼び出すノードの抽出を行う。呼出関係抽出部8は、上記ノードとこのノードの呼出先のノードとの間に、関数の呼出関係を示すエッジを設定し、この対応関係を呼出対応テーブルに書き込む。
ステップS11dにおいて、呼出関係抽出部8は、選択済みのノード間にあらたにエッジを設定せず、上記呼出対応テーブルに記載された対応以外の参照関係(呼出関係)が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う。
【0045】
次に、命令コード抽出部1は、上記呼出対応テーブルを参照して、この呼出対応テーブルに記載された命令コードと同一の命令コードを、入力される被計測対象のソフトウェアプログラムにおいて検索し、検索された命令コードとこの命令コードの位置情報とを対応させ、命令コード抽出テーブルとして、命令コードデータベース2へ格納する(ステップS12)。
【0046】
以降の、ステップS13〜ステップS16までは、第1の実施形態のステップS3〜ステップS6と各々同様のため、説明を省略する。
次に、カバレッジ計算部6は、上記検出結果テーブルから位置情報の検出数を計算し、この検出数を、呼出対応テーブルの位置情報の全数で除算して、除算結果をコードのカバレッジ情報として出力する(ステップS17)。
このとき、カバレッジ計算部6は、呼出対応テーブルにおいて、位置情報テーブルの位置情報及びこの位置情報の実行命令コードと対応しない、すなわちテストパターンによりテストされていない、実際に使用する命令コード及びこの命令コードの位置情報を、上記カバレッジ情報に含ませて出力する。
【0047】
上述したように、第2の実施形態のカバレッジ計測システムは、第1の実施形態の効果に加えて、アプリケーションにおいて利用者が使用する関数を利用したときに実行される可能性がある関数のコードに限定し、これら関数のみに対してカバレッジを計算することにより、限定的使用の関数群のテストに対し高精度にカバレッジを計測でき、足りないテストパターンを容易に加えることができ、プログラムの開発を効率化できる。
【0048】
なお、図1におけるカバレッジ計測システムの機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりカバレッジ計測の処理(図2及び図6のフローチャートの処理)を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0049】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【図面の簡単な説明】
【0050】
【図1】本発明の第1の実施形態によるカバレッジ計測システムの構成例を示すブロック図である。
【図2】第1の実施形態によるカバレッジ計測システムの動作例を示すフローチャートである。
【図3】機会語によるバイナリコード及びアセンブリ言語によるアセンブラコードにより記載された関数を示す概念図である。
【図4】複数のテストパターンを用いてテストを行った場合の実行命令コードの処理について説明する概念図である。
【図5】本発明の第2の実施形態によるカバレッジ計測システムの構成例を示すブロック図である。
【図6】第2の実施形態によるカバレッジ計測システムの動作例を示すフローチャートである。
【図7】図6のフローチャートにおけるステップS11の処理を説明する概念図である。
【図8】従来のカバレッジの計測方法を説明する概念図である。
【図9】フォイルカバレッジについて説明するプログラムファイルの概念図である。
【図10】関数カバレッジについて説明するプログラムファイルの概念図である。
【符号の説明】
【0051】
1…命令コード抽出部
2…命令コードデータベース
3…仮想マシン部
4…位置情報データベース
5…位置情報抽出部
6…カバレッジ計算部
7…呼出関数抽出部
8…呼出関係抽出部
9…呼出対応データベース

【特許請求の範囲】
【請求項1】
アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを実行する仮想マシン部と、
該仮想マシン部におけるテストにおいて、実行された命令コードの位置情報を抽出する位置情報抽出部と
を有することを特徴とするカバレッジ計測システム。
【請求項2】
前記ソフトウェアの全ての命令コードを抽出し、この命令コードをその位置情報とともにテーブルとして記憶部に記憶させる命令コード抽出部を有することを特徴とする請求項1記載のカバレッジ計測システム。
【請求項3】
前記位置情報取得部が抽出する前記位置情報の命令コードと、ソフトウェアの全ての命令コードとを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする請求項1または請求項2に記載のカバレッジ計測システム。
【請求項4】
前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を抽出する呼出関数抽出部と、
前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを生成する呼出関係抽出部と
を有し、
前記呼出関数抽出部が前記他の関数の呼び出す関数も抽出し、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行うことを特徴とする請求項1に記載のカバレッジ計測システム。
【請求項5】
前記位置情報取得部が抽出する前記命令コードの位置情報と、前記呼出対応テーブルの全ての関数の命令コードの位置情報とを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする請求項4に記載のカバレッジ計測システム。
【請求項6】
アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを仮想マシン部が実行するテスト実行処理と、
該テスト実行過程におけるテストにて実行された命令コードの位置情報を位置情報抽出部が抽出する位置情報抽出処理と
をコンピュータに実行させるカバレッジ計測プログラム。
【請求項7】
前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を、呼出関数抽出部が抽出する呼出関数抽出処理と、
前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを、呼出関係抽出部が生成する呼出関係抽出処理と
を有し、
前記呼出関数抽出処理において、前記他の関数の呼び出す関数も抽出され、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う処理ををコンピュータに実行させる請求項8に記載のカバレッジ計測プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2006−146669(P2006−146669A)
【公開日】平成18年6月8日(2006.6.8)
【国際特許分類】
【出願番号】特願2004−337412(P2004−337412)
【出願日】平成16年11月22日(2004.11.22)
【出願人】(000102728)株式会社エヌ・ティ・ティ・データ (438)
【Fターム(参考)】