(57)【要約】【課題】  コンポーネントのソースコードが公開されていない場合にも、またコンポーネントにおける限定した関数のみを用いる場合にも、高い精度において、利用するコードのカバレッジの測定を行うことが可能なカバレッジ測定システム及びカバレッジ測定方法並びにそのプログラムを提供する。【解決手段】  本発明のカバレッジ計測システムアは、センブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを実行する仮想マシン部と、該仮想マシン部におけるテストにおいて、実行された命令コードの位置情報を抽出する位置情報抽出部とを有する。【選択図】    図１
2006146669.tif 000002
【特許請求の範囲】
【請求項１】
アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを実行する仮想マシン部と、
該仮想マシン部におけるテストにおいて、実行された命令コードの位置情報を抽出する位置情報抽出部と
を有することを特徴とするカバレッジ計測システム。
【請求項２】
前記ソフトウェアの全ての命令コードを抽出し、この命令コードをその位置情報とともにテーブルとして記憶部に記憶させる命令コード抽出部を有することを特徴とする請求項１記載のカバレッジ計測システム。
【請求項３】
前記位置情報取得部が抽出する前記位置情報の命令コードと、ソフトウェアの全ての命令コードとを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする請求項１または請求項２に記載のカバレッジ計測システム。
【請求項４】
前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を抽出する呼出関数抽出部と、
前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを生成する呼出関係抽出部と
を有し、
前記呼出関数抽出部が前記他の関数の呼び出す関数も抽出し、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行うことを特徴とする請求項１に記載のカバレッジ計測システム。
【請求項５】
前記位置情報取得部が抽出する前記命令コードの位置情報と、前記呼出対応テーブルの全ての関数の命令コードの位置情報とを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする請求項４に記載のカバレッジ計測システム。
【請求項６】
アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを仮想マシン部が実行するテスト実行処理と、
該テスト実行過程におけるテストにて実行された命令コードの位置情報を位置情報抽出部が抽出する位置情報抽出処理と
をコンピュータに実行させるカバレッジ計測プログラム。
【請求項７】
前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を、呼出関数抽出部が抽出する呼出関数抽出処理と、
前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを、呼出関係抽出部が生成する呼出関係抽出処理と
を有し、
前記呼出関数抽出処理において、前記他の関数の呼び出す関数も抽出され、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う処理ををコンピュータに実行させる請求項８に記載のカバレッジ計測プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータで動作するソフトウェアの品質を評価するカバレッジ測定システム及びカバレッジ測定方法並びにそのプログラムに関する。
【背景技術】
【０００２】
従来からソフトウェアの品質を評価する手段として、ソフトウェアの実行テストにおけるカバレッジの測定がある。
この実行テストのカバレッジとは、ソフトウェアの全コードに対して、実行テストにより実行されたコードの割合である。
すなわち、実行テストを行った際に、ソフトウェアを構成するコードにおいて、どのコードが実行されたか、または実行されなかったかを判別することによって、実行されたコード割合としてカバレッジが計測される。
【０００３】
この測定されるカバレッジを、実行テストが十分にソフトウェアを試験しているか否かを示す信頼性の指標とすることにより、この実行テストが正当に行われているか否かを判別することができ、カバレッジが高いほどソフトウェアの信頼性も高いこととなる。
そして、カバレッジの計測は、図８に示す概念図の順のようにして行われる。
(1)カバレッジ測定用コード埋め込み
ソフトウェアのソースコード中において、分岐が発生する部分に対して、トレース用のコードを埋め込む。
このトレース用のコードは、実行された場合、ソースコードにおいてどの位置のコードが実行されたかを示す位置特定情報(例えばファイル名、行番号)を出力する。
【０００４】
(2)コンパイル
トレース用のコードを埋め込んだコードをコンパイルしバイナリコードを生成する。
(3)テスト実行
上記バイナリコードに対して実行テストを実行し、トレース用のコードが出力するデータをログとして取得する。
【０００５】
(4)ログ集計
(1)で埋め込んだトレース情報により、(3)の実行テストにおいてソースコード中のどの位置のコードが実行されたかを示す実行コードの位置情報を抽出する。
そして、このコードの位置情報の抽出結果をもとに、下記のファイルカバレッジと関数カバレッジとの算出を行う。
ファイルカバレッジは、実行テスト時に実行されたソフトウェアの行数を、ソフトウェアの総行数で除算することで求める。
【０００６】
また、関数カバレッジは、実行テスト時に実行されたソフトウェアの関数の行数を、ソフトウェアにおける関数の総行数で除算することで求める。
これにより、ユーザは、ファイルカバレッジと関数カバレッジとを調べることにより、ソースコード中のどの部分が網羅的にテストされていないかを検出することができる。
【０００７】
(5)テスト追加
(4)の結果に基づいて、網羅的にテストされていないコード部分がテストされるように、実行テストに追加のテストコードを追加し、新たな実行テストを作成し、上記(3)(4)の処理を繰り返す。
ファイルカバレッジと関数カバレッジと各々１００％となるまで、もしくは、品質上において満足できる基準値を満たすまで繰り返す。
上述したように、従来のカバレッジの検出方式においては、ソースコードに対してトレースコードを埋め込み、ソフトウェアの全機能を対象としたカバレッジの計測を行っている（例えば、特許文献１参照）。
【特許文献１】特開２００２−９９５８４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
近年、Ｗｅｂサービス／ＳＯＡ（サービス指向アーキテクチャ）を始めとして、コンポーネントによるソフトウェアの組み合わせ開発が注目を浴びている。
ソフトウェアのコンポーネントによる組み合わせ開発においては、従来の開発と比較して、以下に示す特徴を有している。
特徴１．他社製のコンポーネントを利用した場合、そのコンポーネントのソースコードを入手できない場合がある。
特徴２．コンポーネントの関数は、全て開発者に公開されている訳ではなく、また、開発者が全ての関数を開発に必要とする訳ではない。そのため、限定的な関数に対してのみのテストを実施することが可能である。
【０００９】
しかしながら、コンポーネントによる組み合わせ開発に従来のカバレッジ測定手法を適用し実行テストの妥当性を検証する場合、以下に示す問題がある。
(1)ソースコード入手が困難な場合
従来のカバレッジ測定手法は、ソフトウェアのソースコードを利用して、各コードが実行されているか否かのカバレッジを計測している。
ここで言うソースコードは、オブジェクト指向言語を中心にDelphi（登録商標），Oberon-2（登録商標），Forth（登録商標），C（登録商標），C++（登録商標），JAVA（登録商標）等、アセンブリ言語や機械語に対する高級言語で記載されたソフトウェアのコードを示している。
【００１０】
一方、上述したコンポーネントベースのソフトウェア開発においては、上記特徴１で述べたように、使用するコンポーネントのソースコードが入手できない場合があり、実行テストにおいて、ソースコード単位に実行されたか否かのカバレッジを計測することはできない。ここで、リバースエンジニアリングにより、コンポーネントのバイナリコードからソースコードを生成することが考えられるが、他社製品を利用した場合、リバースエンジニアリングし、トレースコードを埋め込み、ソフトウェアを書き換えること自体が契約上違法になることが多く解決には繋がらない。
【００１１】
(2)ソースコードの入手が可能な場合
従来のカバレッジ測定手法は、ファイル、関数毎の網羅的なテストを行い、ファイルカバレッジ、関数カバレッジ等を計測している。
しかしながら、コンポーネント開発においては、上記特徴２の理由から、プログラムの開発者はマニュアルに記載された関数のみしか知ることができず、一方、マニュアルに記載された関数全てを、開発するソフトウェアに利用する訳ではない。
そこで、開発するソフトウェアの特定の関数のみを実行したときのカバレッジを計測する必要がでてくる。
【００１２】
以下、ファイルカバレッジと関数カバレッジとをコンポーネントの実行テストに適用したときの具体的な問題点について述べる。
(a)ファイルカバレッジを利用した場合
従来のテストにおいては、入手したソースコードにおいて、限定した関数に対してのみ実行テストを行うこととなる。
しかしながら、公開された関数カバレッジを１００％としても、公開されていない関数がテストにおいて実行されなければ、最終的なカバレッジの計測値が低い値となる。
【００１３】
すなわち、図９に示すように、あるアプリケーションにおいては関数Ａしか利用しないため、他の関数Ｂ，Ｃ，Ｄに対してテストを行い、関数カバレッジを向上させる必要があるが、どのような関数が準備されているかユーザには不明なため、実際的に関数カバレッジを向上させるテストを行うことができない。
したがって、従来の計測方法は、上記アプリケーションのように、複数ある関数のなかで関数Ａしか用いていないため、どんなに網羅的に実行テストを行っても、残りの関数Ｂ，Ｃ，Ｄが実行されなければ、最終的な関数カバレッジは低い値となり、実際に開発したプログラムの品質の指標とならない問題がある。
【００１４】
(b)関数カバレッジを利用した場合
従来のカバレッジ測定手法は、入手したソフトウェアのソースコードにおいて、全ての関数のカバレッジを計測することが可能である。
コンポーネント開発においては、開発者に公開される関数構成が限定されるため、呼び出し先の関数に対して実行テストを行うことができない。
すなわち、公開されたある関数自体の使用に対して、関数カバレッジが１００％であっても、その関数に呼び出される関数がテスト対象ではないため、アプリケーションの有する機能が網羅的にテストされているとは言えない。
【００１５】
例えば、図１０のような関数のコードがあった場合、「a＝＝b」という条件の１回のテストにより、関数mainのカバレッジは１００％となる。
しかしながら、関数mainの呼び出し先の関数fooを参照すると、「a＝＝b」以外の条件のコードのテストはされない。
すなわち、従来の関数カバレッジの計測方法においては、上記関数mainの有する全ての機能を、網羅的にテストしていることにはならないという欠点がある。
このとき、関数fooが利用者（開発者）に対して公開されているとは限らないため、関数foo単独で網羅的にテストすることができない。
【００１６】
本発明は、このような事情に鑑みてなされたもので、コンポーネントのソースコードが公開されていない場合にも、またコンポーネントにおける限定した関数のみを用いる場合にも、高い精度において、利用するコードのカバレッジの測定を行うことが可能なカバレッジ測定システム及びカバレッジ測定方法並びにそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明のカバレッジ計測システムは、アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを実行する仮想マシン部と、該仮想マシン部におけるテストにおいて、実行された命令コードの位置情報を抽出する位置情報抽出部とを有することを特徴とする。
【００１８】
本発明のカバレッジ計測システムは、前記ソフトウェアの全ての命令コードを抽出し、この命令コードをその位置情報とともにテーブルとして記憶部に記憶させる命令コード抽出部を有することを特徴とする。
【００１９】
本発明のカバレッジ計測システムは、前記位置情報取得部が抽出する前記位置情報の命令コードと、ソフトウェアの全ての命令コードとを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする。
【００２０】
本発明のカバレッジ計測システムは、前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を抽出する呼出関数抽出部と、前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを生成する呼出関係抽出部とを有し、前記呼出関数抽出部が前記他の関数の呼び出す関数も抽出し、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行うことを特徴とする。
【００２１】
本発明のカバレッジ計測システムは、前記位置情報取得部が抽出する前記命令コードの位置情報と、前記呼出対応テーブルの全ての関数の命令コードの位置情報とを比較して、カバレッジを計算するカバレッジ計算部を有することを特徴とする。
【００２２】
本発明のカバレッジ計測プログラムは、アセンブラコードまたはバイナリコードにより、カバレッジ測定対象のソフトウェアのテストを仮想マシン部が実行するテスト実行処理と、該テスト実行過程におけるテストにて実行された命令コードの位置情報を位置情報抽出部が抽出する位置情報抽出処理とをコンピュータに実行させるプログラムである。
【００２３】
本発明のカバレッジ計測プログラムは、前記ソフトウェアにおいて、利用者の用いる関数が呼び出す他の関数を、呼出関数抽出部が抽出する呼出関数抽出処理と、前記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを、呼出関係抽出部が生成する呼出関係抽出処理とを有し、前記呼出関数抽出処理において、前記他の関数の呼び出す関数も抽出され、前記呼出対応テーブル以外の参照関係が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う処理ををコンピュータに実行させるプログラムである。
【発明の効果】
【００２４】
以上説明したように、本発明によれば、ソースコードを用いるのではなく、アセンブラコードまたはバイナリコードの命令コードのカバレッジを計算することにより、ソースコードがない場合でもテストの信頼性を定量化できるようにすることができるという効果が得られる。
また、本発明によれば、アプリケーションにおいて利用者が用いる関数を利用したときに実行される可能性がある関数のコードに限定し、これらの関数のみに対してカバレッジを計算することにより、限定的な関数のテストに対し高精度にカバレッジを計測できるという効果が得られる。
【発明を実施するための最良の形態】
【００２５】
本発明の開発対象となるＳＯＡは、大規模なシステムを「サービス」の集まりとして構築する設計手法である。
このサービスとは、利用者が外部から標準化された手順によって呼び出すアプリケーションソフトウェア（以下、アプリケーション）、すなわちコンポーネントの塊であり、各アプリケーション自体で利用者に利用可能な機能を持つものを言う。このため、全てのソフトウェアを開発するのではなく、提供されるコンポーネントを利用してソフトウェアの開発を行うこととなる。
【００２６】
したがって、本発明は、トレースコードを埋め込む等、提供されるソフトウェアのソースコードを変更することができないとき、このソフトウェアを実装するコンピュータに対応する仮想マシン上において、使用するソフトウェアまたはコンポーネントの提供される形態により、すなわちアセンブラコードまたはバイナリコードにより、所定のテストパターンを用いてテストを実行し、そのテストにより実行された命令コードを抽出することにより、各命令コードのカバレッジの評価を行う。
【００２７】
以下、本発明の一実施形態によるカバレッジ計測システムを図面を参照して説明する。
＜第１の実施形態＞
図１は同実施形態によるカバレッジ計測システムの構成例を示すブロック図である。後に述べる仮想マシン部により実行されるソフトウェア（すなわちソフトウェアプログラム）の形態として、アセンブラコードまたはバイナリコードが可能であるが、以下の説明においては、バイナリコードを実行するとして説明する。
この図において、命令コード抽出部１，仮想マシン部３，位置情報抽出部５及びカバレッジ計算部６は、ＣＰＵ（中央演算処理装置）がメモリ（ＲＯＭ，ＲＡＭまたは磁気記録媒体）に記憶されているプログラム及びデータに従って動作するようにして実現するようにしてもよい。
また、命令コードデータベース２及び位置情報データベース４は、ＲＯＭ，ＲＡＭや磁気記録媒体等により構成されている。
【００２８】
命令コード抽出部１は、入力されるソフトウェアプログラムの全コードを、コードファイルの先頭から順に、命令コードテーブルと比較しつつ検索し、命令コードテーブルにある命令コードが検索されると、この命令コードとこの命令コードのソフトウェアプログラムにおける位置を示す位置情報（例えば、アドレス）とを対応させて、命令コード抽出テーブルとして、命令コードデータベース２へ格納する。
上記命令コードテーブルは、命令コードデータベース２に記憶されており、後に説明する仮想マシン部において動作する命令のバイナリコードとこの命令のデータ構成（命令コード、すなわちオペコード及びオペランドの対応）とが格納されている。
【００２９】
仮想マシン部３は、カバレッジ計測の対象であるソフトウェアプログラムの中間言語のアセンブラ（アセンブラ言語）や機械語のバイナリコードを仮想的に実行する実行環境であり、所定のテストパターン、例えばテストパターン１，２及び３によるテスト結果を、実行履歴（例えばログ）として、位置情報データベース４へ、テストパターン毎に対応させて格納する。
【００３０】
図３に示すように、各アプリケーションにおける関数が機械語またはアセンブラ言語で記載されたソフトウェアプログラムを仮想マシン部３により実行させる。
位置情報抽出部５は、位置情報データベース４へ記録されている、テストパターン毎に実行された実行履歴それぞれから、実行された実行命令コード及びその位置情報とを読出し、それらを図２に示すように、テストパターン１，２および３の実行履歴をマージ（併合）させて、重複するデータを除去して、実行命令コードとその位置情報とを対応させ、位置情報テーブルとして位置情報データベース４へ格納する。
【００３１】
カバレッジ計算部６は、位置情報データベース４に記憶された位置情報テーブルから、実行命令コードとその位置情報とを読出し、この実行命令コードの位置情報により、命令コードデータベース２に記憶された命令コード抽出テーブルを検索し、実行命令コードの位置情報と同一な命令コードの位置情報を検出することで、いずれの位置の命令コードが実行されたかあるいはされなかったか、またはソフトウェアプログラムの全命令コードにおいて実行された命令コードの割合（実行された実行命令コード数を、ソフトウェアプログラムの全命令コード数で除算）を計算し、カバレッジの計測結果として出力する。
【００３２】
次に、図１及び図３を参照して、本発明の第１の実施形態によるカバレッジ計測システムの動作を説明する。図３は第１の実施形態のカバレッジ計測システムの動作例を示すフローチャートである。
命令コード抽出部１は、被計測対象のソフトウェアプログラムを入力し（ステップＳ１）、命令コードテーブルを参照して、このテーブルに記載された命令コードと同一の命令コードを、入力される被計測対象のソフトウェアプログラムにおいて検索し、検索された命令コードとこの命令コードの位置情報とを対応させ、命令コード抽出テーブルとして、命令コードデータベース２へ格納する（ステップＳ２）。
【００３３】
次に、仮想マシン部３は、上記ソフトウェアプログラムを所定のテストパターン（単数または複数のテストパターン）を用いてテストし、各バイナリコードの実行履歴を、このテストパターンに対応させて位置情報データベース４に格納する（ステップＳ３）。
そして、位置情報抽出部５は、テストパターン毎に上記実行履歴を読出し、実行された実行コードとそのアドレスとを抽出し、テストパターンに対応させて、位置情報テーブルとして位置情報データベース４へ格納する（ステップＳ４）。
【００３４】
次に、カバレッジ計算部６は、位置情報データベース４から位置情報テーブルを読出し、この位置情報テーブルに含まれる位置情報毎に、この位置情報に対応する実行命令コードと同一の位置情報の命令コードを、命令コード抽出テーブルにおいて検索し、位置情報テーブル及び命令コード抽出テーブルにおいて同一位置情報の命令コードを抽出し、抽出された位置情報と、対応する命令コードとを対応させ（命令コードの実行箇所の特定）、検出結果テーブルとして出力する（ステップＳ５）。
【００３５】
このとき、カバレッジ計算部６は、図４に示すように、複数のテストパターンによりテスト（テストパターン１によるテスト１，テストパターン２によるテスト２及びテストパターン３によるテスト３）を行ったソフトウェアプログラムの場合、テストパターン毎にある複数の位置情報テーブル（テストの実行結果）をマージして、１つの位置情報テーブルとしてステップＳ５の処理を行う。
【００３６】
そして、カバレッジ計算部６は、位置情報テーブルに、次に検索する実行命令コードが残っているか否かを検出し、残っている場合、処理をステップＳ５へ戻し、残っていない場合、処理をステップＳ７へ進める（ステップＳ６）。
次に、カバレッジ計算部６は、上記検出結果テーブルから位置情報の検出数を計算し、この検出数を、命令コード抽出テーブルの位置情報の全数で除算して、除算結果をコードのカバレッジ情報として出力する（ステップＳ７）。
このとき、カバレッジ計算部６は、命令コード抽出テーブルにおいて、位置情報テーブルの位置情報及びこの位置情報の実行命令コードと対応しない、すなわちテストパターンによりテストされていない命令コード及びこの命令コードの位置情報を、上記カバレッジ情報に含ませて出力する。
【００３７】
上述した第１の実施形態によるカバレッジ計測システムは、ソースコードを用いるのではなく、仮想マシン上にて所定のテストパターンにより、アセンブラコードまたはバイナリコードによりプログラムを動作させ、このテスト結果において動作した命令コードのカバレッジを計算することにより、ソースコードがない場合でもテストの信頼性を定量化でき、かついずれの位置情報の命令コードが実行されなかったかを特定することができ、より信頼性の高いテストパターンを作成できる。
【００３８】
＜第２の実施形態＞
次に、本発明の第２の実施形態として、図５に示すカバレッジ計測システムを説明する。図５はは第２の実施形態によるカバレッジ計測システムの構成例を示すブロック図である。
この図において、命令コード抽出部１，仮想マシン部３，位置情報抽出部５，カバレッジ計算部６，呼出関数抽出部７及び呼出関係抽出部８は、ＣＰＵ（中央演算処理装置）がメモリ（ＲＯＭ，ＲＡＭまたは磁気記録媒体）に記憶されているプログラム及びデータに従って動作させて実現するようにしてもよい。
また、命令コードデータベース２及び位置情報データベース４は、ＲＯＭ，ＲＡＭや磁気記録媒体等により構成されている。
この図において、図１に示す第１の実施形態によるカバレッジ計測システムと同一の部分には同一の符号を付し、その説明を省略する。
この図５に示す第２の実施形態によるカバレッジ計測システムが、第１の実施形態によるカバレッジ計測システム装置と異なる点は、作成されるソフトウェアプログラムにおいて利用者が利用する関数を抽出する呼出関数抽出部７が追加されて設けられている点である。
【００３９】
コンポーネントを利用したプログラム開発においては、コンポーネントに含まれる全ての関数を用いるわけでなく、必要な機能のみを有する関数を利用している。
この使用形態に対応させるため、第２の実施形態においては、アプリケーションにおいて使用している関数のみを抽出し、この関数がテストされているか否かのカバレッジを計測している。
一方、第１の実施形態においては、使用するしないに係わらず、全てのコードのカバレッジを求める。
【００４０】
すなわち、呼出関数抽出部７は、ソフトウェアプログラムにおいて、利用者の用いている関数が呼び出している他の関数、及びこの他の関数が呼び出している関数を次々抽出し、利用者が使用している関数を全て抽出する。
また、呼出関係抽出部８は、上記抽出結果から、呼出元の関数と呼出先の関数との対応を示す呼出対応テーブルを生成し、呼出対応データベース９へ格納する。
【００４１】
ここで、呼出関数抽出部７は、上述したように、他の関数の呼び出すさらに他の関数も抽出し、上記呼出対応テーブルに記載された対応以外の参照関係（呼出関係）が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う。
また、命令コード抽出部１は、上記呼出対応テーブルに記載された関数に対応する命令コードを、ソフトウェアプログラムから抽出し、命令コード及びこの命令コードに対応する位置情報を抽出し、命令コード抽出テーブルとして、呼出対応データベース９へ格納する。
【００４２】
次に、図５及び図６を参照して、本発明の第２の実施形態によるカバレッジ計測システムの動作を説明する。図６は第２の実施形態のカバレッジ計測システムの動作例を示すフローチャートである。
呼出関数抽出部７は、被計測対象のソフトウェアプログラムを入力し（ステップＳ１０）、利用者が実際にこのプログラムにおいて使用している関数、及びこの関数に呼び出される関数を全て抽出する。
【００４３】
そして、呼出関係抽出部８は、呼出関数抽出部７が求めた関数群において、図７に示すように、抽出された呼出元の関数と呼出先の関数との対応関係を求め、それぞれの位置情報を含めて記述された呼出対応テーブルを生成する（ステップＳ１１）。
このステップＳ１１を上記図７を参照して詳細に説明すると、
ステップＳ１１ａにおいて、呼出関数抽出部７は、被計測対象のソフトウェアプログラムから、利用者の使用する関数を初期ノードとして抽出し、この初期ノードが呼び出すノードを抽出する。
【００４４】
ステップＳ１１ｂにおいて、呼出関係抽出部８は、初期ノードとこの初期ノードの呼出先のノードとの間に、関数の呼出関係を示すエッジを設定し、この対応関係を呼出対応テーブルに書き込む。
ステップＳ１１ｃにおいて、呼出関数抽出部７は、初期ノードの選択したノードが呼び出すノードの抽出を行う。呼出関係抽出部８は、上記ノードとこのノードの呼出先のノードとの間に、関数の呼出関係を示すエッジを設定し、この対応関係を呼出対応テーブルに書き込む。
ステップＳ１１ｄにおいて、呼出関係抽出部８は、選択済みのノード間にあらたにエッジを設定せず、上記呼出対応テーブルに記載された対応以外の参照関係（呼出関係）が抽出されなくなるまで、各関数の呼出先の関数の抽出を行う。
【００４５】
次に、命令コード抽出部１は、上記呼出対応テーブルを参照して、この呼出対応テーブルに記載された命令コードと同一の命令コードを、入力される被計測対象のソフトウェアプログラムにおいて検索し、検索された命令コードとこの命令コードの位置情報とを対応させ、命令コード抽出テーブルとして、命令コードデータベース２へ格納する（ステップＳ１２）。
【００４６】
以降の、ステップＳ１３〜ステップＳ１６までは、第１の実施形態のステップＳ３〜ステップＳ６と各々同様のため、説明を省略する。
次に、カバレッジ計算部６は、上記検出結果テーブルから位置情報の検出数を計算し、この検出数を、呼出対応テーブルの位置情報の全数で除算して、除算結果をコードのカバレッジ情報として出力する（ステップＳ１７）。
このとき、カバレッジ計算部６は、呼出対応テーブルにおいて、位置情報テーブルの位置情報及びこの位置情報の実行命令コードと対応しない、すなわちテストパターンによりテストされていない、実際に使用する命令コード及びこの命令コードの位置情報を、上記カバレッジ情報に含ませて出力する。
【００４７】
上述したように、第２の実施形態のカバレッジ計測システムは、第１の実施形態の効果に加えて、アプリケーションにおいて利用者が使用する関数を利用したときに実行される可能性がある関数のコードに限定し、これら関数のみに対してカバレッジを計算することにより、限定的使用の関数群のテストに対し高精度にカバレッジを計測でき、足りないテストパターンを容易に加えることができ、プログラムの開発を効率化できる。
【００４８】
なお、図１におけるカバレッジ計測システムの機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりカバレッジ計測の処理（図２及び図６のフローチャートの処理）を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境（あるいは表示環境）を備えたＷＷＷシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００４９】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【図面の簡単な説明】
【００５０】
【図１】本発明の第１の実施形態によるカバレッジ計測システムの構成例を示すブロック図である。
【図２】第１の実施形態によるカバレッジ計測システムの動作例を示すフローチャートである。
【図３】機会語によるバイナリコード及びアセンブリ言語によるアセンブラコードにより記載された関数を示す概念図である。
【図４】複数のテストパターンを用いてテストを行った場合の実行命令コードの処理について説明する概念図である。
【図５】本発明の第２の実施形態によるカバレッジ計測システムの構成例を示すブロック図である。
【図６】第２の実施形態によるカバレッジ計測システムの動作例を示すフローチャートである。
【図７】図６のフローチャートにおけるステップＳ１１の処理を説明する概念図である。
【図８】従来のカバレッジの計測方法を説明する概念図である。
【図９】フォイルカバレッジについて説明するプログラムファイルの概念図である。
【図１０】関数カバレッジについて説明するプログラムファイルの概念図である。
【符号の説明】
【００５１】
１…命令コード抽出部
２…命令コードデータベース
３…仮想マシン部
４…位置情報データベース
５…位置情報抽出部
６…カバレッジ計算部
７…呼出関数抽出部
８…呼出関係抽出部
９…呼出対応データベース
【図１】
2006146669.tif 000003
【図２】
2006146669.tif 000004
【図３】
2006146669.tif 000005
【図４】
2006146669.tif 000006
【図５】
2006146669.tif 000007
【図６】
2006146669.tif 000008
【図７】
2006146669.tif 000009
【図８】
2006146669.tif 000010
【図９】
2006146669.tif 000011
【図１０】
2006146669.tif 000012