(57)【要約】【課題】従来のカバレッジ測定システム及びカバレッジ測定方法は、ソフトウエアの全命令のコード数を取得するためにバイナリコード全てに対して命令コードテーブルと比較検索しており、カバレッジ測定の処理時間が長くなる課題があった。【解決手段】バイナリコードを実行する仮想マシン部１１と、この仮想マシン部１１によって実行された命令コードの数である実行命令コード数を計算する実行命令数計算部１３と、このバイナリコードに含まれる命令コードのサイズの総和である命令コードサイズを計算する命令コードサイズ計算部１４と、命令コードサイズを前記実行された命令コードの平均サイズである命令コード長平均値で除算して全命令コード数を計算する全命令数計算部１８と、実行命令コード数を全命令コード数で除算してカバレッジを計算するカバレッジ計算部１９とを有する。【選択図】図１
2011159259.tif 000002
【特許請求の範囲】
【請求項１】
バイナリコードから成るソフトウエアのテストにおけるカバレッジ測定を行うカバレッジ測定システムにおいて、
前記バイナリコードを実行する実行部と、
前記実行部によって実行された命令コードの数である実行命令コード数を計算する実行命令数計算部と、
前記バイナリコードに含まれる命令コードのサイズの総和である命令コードサイズを計算する命令コードサイズ計算部と、
前記命令コードサイズを、前記実行された命令コードの平均サイズである命令コード長平均値で除算して、前記バイナリコードに含まれる命令コードの数である全命令コード数を計算する全命令数計算部と、
前記実行命令コード数を前記全命令コード数で除算してカバレッジを計算するカバレッジ計算部と、
を有することを特徴とするカバレッジ測定システム。
【請求項２】
請求項１に記載のカバレッジ測定システムにおいて
前記実行部によって実行された命令コードのサイズである実行命令コード長を前記実行命令コード数で除算し、前記命令コード長平均値を計算する命令コード長計算部を更に有し、
前記全命令数計算部は、前記命令コードサイズを前記命令コード長平均値で除算して前記全命令コード数を計算することを特徴とするカバレッジ測定システム。
【請求項３】
バイナリコードから成るソフトウエアのテストにおけるカバレッジ測定を行うカバレッジ測定方法において、
前記バイナリコードを実行する実行処理と、
前記実行部によって実行された実行命令コード数を計算する実行命令数計算処理と、
前記バイナリコードに含まれる命令コードのサイズである命令コードサイズを計算する命令コードサイズ計算処理と、
前記命令コードサイズを命令コード長平均で除算して、前記バイナリコードに含まれる命令コードの数である全命令コード数を計算する全命令数計算処理と、
前記実行命令コード数を前記全命令コード数で除算してカバレッジを計算するカバレッジ計算処理と、
を有することを特徴とするカバレッジ測定方法。
【請求項４】
請求項３に記載のカバレッジ測定方法において、
前記実行処理によって実行された命令コードのサイズである実行命令コード長を前記実行命令コード数で除算して前記命令コード長平均値を計算する命令コード長計算処理を更に有し、
前記全命令数計算処理は、前記命令コードサイズを前記命令コード長平均値で除算して前記全命令コード数を計算することを特徴とするカバレッジ測定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータで動作するソフトウエアの品質を評価するカバレッジ測定システム及びカバレッジ測定方法に関するものである。
【背景技術】
【０００２】
従来、カバレッジ測定システム及びカバレッジ測定方法は、ソフトウエアのソースコードの入手が困難な場合には、ソフトウエアのバイナリコードの全命令コードを抽出すると共に、仮想マシン部がこのバイナリコードのテストを実行して命令コードを抽出し、全命令コードにおける仮想マシン部が１回以上実行した命令コードの割合を計算するという技術が知られている。
【０００３】
特許文献１には、カバレッジ測定においてバイナリコードを仮想マシンで実行し、実行された命令コードの位置情報を抽出する技術が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１４６６６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のカバレッジ測定システム及びカバレッジ測定方法では、ソフトウエアのバイナリコードの全命令コードの抽出において、このバイナリコード全てに対して命令コードテーブルと比較検索するものであった。よって、多くの処理時間を要し、カバレッジ測定に多くの時間を要するという課題があった。
【課題を解決するための手段】
【０００６】
本発明のカバレッジ測定システムは、バイナリコードから成るソフトウエアのテストにおけるカバレッジ測定を行うカバレッジ測定システムにおいて、前記バイナリコードを実行する実行部と、前記実行部によって実行された命令コードの数である実行命令コード数を計算する実行命令数計算部と、前記バイナリコードに含まれる命令コードのサイズの総和である命令コードサイズを計算する命令コードサイズ計算部と、前記命令コードサイズを、前記実行された命令コードの平均サイズである命令コード長平均値で除算して、前記バイナリコードに含まれる命令コードの数である全命令コード数を計算する全命令数計算部と、前記実行命令コード数を前記全命令コード数で除算してカバレッジを計算するカバレッジ計算部とを有することを特徴とする。
【０００７】
本発明のカバレッジ測定方法は、バイナリコードから成るソフトウエアのテストにおけるカバレッジ測定を行うカバレッジ測定方法において、前記バイナリコードを実行する実行処理と、前記実行部によって実行された実行命令コード数を計算する実行命令数計算処理と、前記バイナリコードに含まれる命令コードのサイズである命令コードサイズを計算する命令コードサイズ計算処理と、前記命令コードサイズを命令コード長平均で除算して、前記バイナリコードに含まれる命令コードの数である全命令コード数を計算する全命令数計算処理と、前記実行命令コード数を前記全命令コード数で除算してカバレッジを計算するカバレッジ計算処理とを有することを特徴とする。
【発明の効果】
【０００８】
本発明のカバレッジ測定システム及びカバレッジ測定方法によれば、ソフトウエアの命令コード部のサイズを命令コード長で除算してソフトウエアの全命令コード数を得るため、従来のようにバイナリコード全てに対して命令コードテーブルと比較検索することなく、少ない処理時間でカバレッジ測定を行うことが可能である。
【図面の簡単な説明】
【０００９】
【図１】図１は、本発明の実施例１におけるカバレッジ測定システムを示す概略の構成図である。
【図２】図２は、ａ．ｏｕｔ形式のオブジェクトファイルフォーマットの例を示す図である。
【図３】図３は、固定長命令を有するａ．ｏｕｔの例を示す図である。
【図４】図４は、命令コードテーブルの例を示す図である。
【図５】図５は、図３のText  Segmentを命令コード毎に記載した例を示す図である。
【図６】図６は、仮想マシン部における図３のａ．ｏｕｔの実行結果の例を示す図である。
【図７】図７は、ソフトウエアのテストパターンの例を示す図である。
【図８】図８は、図１の仮想マシン部の処理を示すフローチャートである。
【図９】図９は、図１のカバレッジ測定方法を示すフローチャートである。
【図１０】図１０は、図９におけるカバレッジ測定方法の例を示す図である。
【図１１】図１１は、本発明の実施例２におけるカバレッジ測定システムを示す概略の構成図である。
【図１２】図１２は、可変長命令を有する  ａ．ｏｕｔの例を示す図である。
【図１３】図１３は、図１２のText  Segmentを命令コード毎に記載した例を示す図である。
【図１４】図１４は、仮想マシン部における図１１のａ．ｏｕｔの実行結果の例を示す図である。
【図１５】図１５は、図１１のカバレッジ測定方法を示すフローチャートである。
【図１６】図１６は、図１５におけるカバレッジ測定方法の例を示す図である。
【発明を実施するための形態】
【００１０】
本発明を実施するための形態は、以下の好ましい実施例の説明を添付図面と照らし合わせて読むと、明らかになるであろう。但し、図面はもっぱら解説のためのものであって、本発明の範囲を限定するものではない。
【実施例１】
【００１１】
（実施例１の構成）
図１は、本発明の実施例１におけるカバレッジ測定システムを示す概略の構成図である。
【００１２】
カバレッジ測定システム１０は、カバレッジ測定対象となるソフトウエアプログラムのバイナリコードを仮想的に実行する仮想マシン部１１と、この仮想マシン部１１が実行した結果を記憶する実行結果記憶部１２と、仮想マシン部１１が１回以上実行した命令数を計算する実行命令数計算部１３と、バイナリコードの命令コードサイズを計算する命令コードサイズ計算部１４と、バイナリコードの命令数と仮想マシン部１１が１回以上実行した命令数とを記憶する命令数記憶部１５と、命令コードサイズ計算部１４が計算した命令コードサイズを記憶する命令コードサイズ記憶部１６と、仮想マシン部１１が実行した固定長命令のコード長を記憶する命令コード長記憶部１７と、仮想マシン部１１が実行した全命令数を計算する全命令数計算部１８と、カバレッジ計算部１９とを備えている。
【００１３】
仮想マシン部１１は、カバレッジ測定対象となるソフトウエアプログラムのバイナリコードを仮想的に実行する。仮想マシン部１１は、テストの実行結果を実行結果記憶部１２へ格納する実行部である。仮想マシン部１１は、実行部の実施形態のひとつであり、ＩＣＥ（In  Circuit  Emulator）や中央処理装置（以下、「ＣＰＵ」という。）等のハードウエアによってカバレッジ測定対象となるソフトウエアプログラムのバイナリコードを実行してもよい。テストの実行結果は、実行した全ての命令コードについてそのオフセットアドレスと、続いてカンマ「，」と、その命令コードのコード長とである。
【００１４】
実行命令数計算部１３は、実行結果記憶部１２から読出した実行結果から、テストで実行された命令コード数を計算し、命令数記憶部１５に格納するものである。命令コードサイズ計算部１４は、カバレッジ測定対象となるソフトウエアプログラムのバイナリコードのオブジェクトファイルを解析して、仮想マシン部１１で動作する命令部のコードサイズを計算し、これを命令コードサイズ記憶部１６へ格納する機能を有する。
【００１５】
命令コード長記憶部１７には、仮想マシン部１１において動作する各命令コードのサイズ（命令コード長）が格納されている。なお、本実施例１のように動作する命令が固定長命令である場合、上記の命令コードによらずコードサイズは一定である。本実施例１では、固定長命令のコードサイズ４バイトを、命令コード長記憶部１７に格納する。
【００１６】
全命令数計算部１８は、命令コードサイズ記憶部１６から読出したソフトウエアプログラムの命令コード部のサイズと、命令コード長記憶部１７から読出した命令コード長から、ソフトウエアプログラムの全命令数を計算し、命令数記憶部１５に格納するものである。カバレッジ計算部１９は、命令数記憶部１５から実行命令コード数及びソフトウエアプログラムの全命令コード数を読出し、ソフトウエアプログラムの全命令コード数において実行された命令コードの割合を計算し、カバレッジ測定結果として出力する構成になっている。
【００１７】
図２は、ａ．ｏｕｔ（assembler  output）形式のオブジェクトファイルフォーマットの例を示す図である。
【００１８】
ａ．ｏｕｔ形式は、ＵＮＩＸ（登録商標）の開発当初に実装された実行ファイル及びリンク可能ファイルの形式である。ａ．ｏｕｔ３０は、オブジェクトファイルの情報を格納するheader３１、プログラムの機械語の命令コードを格納するText  Segment３２、プログラム実行時に参照するデータを格納するData  Segment３３、プログラムで使用する変数や関数の情報を格納するSymbol  Table３４、及びSymbol  Table３４に格納されている変数や関数に対応する文字列を格納するString  Table３５を有している。Text  Segment３２は、ソフトウエアの命令コードを格納する命令コード部であり、Text  Segment３２のサイズは、命令コードサイズである。
【００１９】
図３は、固定長命令を有するａ．ｏｕｔの例を示す図であり、この図３において各セグメントのデータとオフセットアドレスは全て１６進数で表記されている。
【００２０】
header３１は、Text  Segment３２のサイズの１６進数００５０ｈ（本明細書において１６進数には末尾にｈを付加して表記する。）と、Data  Segment３３のサイズの００３０ｈと、Symbol  Table３４のサイズの００１０ｈを有している。
【００２１】
Text  Segment３２は、００５０ｈバイト（８０バイト）の機械語の命令コード群を有していることが示されている。機械語の命令コードのオフセットアドレスは、左端にコロン「：」が付加されて表示されており、全て４バイト固定長命令で構成されている。
【００２２】
Data  Segment３３は、００３０ｈ（４８バイト）のデータを有している。そのデータのオフセットアドレスは、機械語の命令コードと同様に左端にコロン「：」が付加されて表示されている。
【００２３】
Symbol  Table３４は、００１０ｈ（１６バイト）のデータを有している。そのデータのオフセットアドレスは、機械語の命令コードと同様に左端にコロン「：」が付加されて表示されている。String  Table３５は、このSymbol  Table３４に格納されている変数や関数に対応する文字列を格納している。
【００２４】
図４は、命令コードテーブルの例を示す図である。
命令コードは、第３１ビットから第１６ビットで表され、命令の動作を定義するOp-Codeと、第１５ビットから第８ビットで表され、レジスタのモードを定義するmodeと、第７ビットから第０ビットで表され、レジスタを定義するregisterを有している。
【００２５】
Op-Codeが０５００ｈの場合、動作の意味はClearでニーモニックはCLRである。以下同様にOp-Codeが０５１０ｈの場合において動作の意味はcomplementでニーモニックはCOM、Op-Codeが０５２０ｈの場合において動作の意味はincrementでニーモニックはINC、Op-Codeが０５３０ｈの場合において動作の意味はdecrementでニーモニックはDEC、Op-Codeが０５４０ｈの場合において動作の意味はnegateでニーモニックはNEG、Op-Codeが０５５０ｈの場合において動作の意味はadd  carryでニーモニックはADCである。
【００２６】
Modeが００ｈの場合においてモードの意味はイミディエートであり、registerで指定された内容をそのまま扱うことを意味する。以下同様に、Modeが０１ｈの場合においてモードの意味は絶対アドレス、Modeが０２ｈの場合においてモードの意味は相対アドレス、Modeが０３ｈの場合においてモードの意味は間接相対アドレスである。
【００２７】
registerが００ｈの場合においてレジスタ名称は「レジスタ」であり、レジスタをそのまま指定することを意味する。以下同様に、registerが０１ｈの場合においてレジスタ名称は「レジスタ間接」、registerが０２ｈの場合においてレジスタ名称は「自動インクリメント」、registerが０３ｈの場合においてレジスタ名称は「自動間接インクリメント」、registerが０４ｈの場合においてレジスタ名称は「自動デクリメント」、registerが０５ｈの場合においてレジスタ名称は「自動間接デクリメント」、registerが０６ｈの場合においてレジスタ名称は「インデックス」、registerが０７ｈの場合においてレジスタ名称は「インデックス間接」である。
【００２８】
Text  Segment３２を、図４の命令コードテーブルに当てはめることで、対応する命令コードと、命令コードのサイズと、命令コードの動作とを知ることができる。
【００２９】
図５は、図３のText  Segmentを命令コード毎に記載した例を示す図である。
Text  Segment３２は、右端２列にオフセットアドレスが記載され、コロン「：」に続いて各命令コードがそれぞれ各行に記載されている。第１の命令は、オフセットアドレス００ｈにある命令「０５ｈ  ００ｈ  ００ｈ  ００ｈ」である。第２の命令は、オフセットアドレス０４ｈにある命令「０５ｈ  １０ｈ  ０１ｈ  ０２ｈ」である。以下、同様にして２０個の命令コードが行毎に区分けして記載されている。
【００３０】
図６は、仮想マシン部における図３のａ．ｏｕｔの実行結果の例を示す図であり、命令コードのオフセットアドレスは１６進数で表記されている。
【００３１】
仮想マシン部１１は、ａ．ｏｕｔ３０のText  Segment３２に格納された機械語の命令コードをテストパターンに沿って実行し、実行された命令コードのオフセットアドレスと命令コード長をそれぞれ記録する。仮想マシン部１１は、オフセットアドレス００ｈから始まる４バイト命令と、オフセットアドレス０４ｈから始まる４バイト命令と、オフセットアドレス０８ｈから始まる４バイト命令と、オフセットアドレス０Ｃｈから始まる４バイト命令と、オフセットアドレス１０ｈから始まる４バイト命令と、オフセットアドレス１４ｈから始まる４バイト命令と、オフセットアドレス１８ｈから始まる４バイト命令と、オフセットアドレス１Ｃｈから始まる４バイト命令と、オフセットアドレス２０ｈから始まる４バイト命令とを実行したことが実行結果記憶部１２に格納されている。
【００３２】
図７は、ソフトウエアのテストパターンの例を示す図である。
テストパターンは、ソフトウエアの入力と出力が定義されている。ここでは、入力Ａと入力Ｂの組み合わせパターン８通りと、その組み合わせに対応した出力パターンが定義されている。
【００３３】
パターン１は、ソフトウエアの入力Ａは９０、入力Ｂは５０としたとき、ソフトウエアの出力はＹＥＳであることが記載されている。パターン２は、ソフトウエアの入力Ａは１００、入力Ｂは５０としたとき、ソフトウエアの出力はＹＥＳであることが記載されている。以下同様に、ソフトウエアの入力Ａと入力Ｂを設定したとき、ソフトウエアの出力がどのように変化するか記載されている。
【００３４】
（実施例１のカバレッジ測定方法）
図８は、図１の仮想マシン部の処理を示すフローチャートである。
【００３５】
処理が開始すると、仮想マシン部１１は、ステップＳ１において、ａ．ｏｕｔ形式のファイルを読み込み、ステップＳ２において、テストパターンを読み込む。
【００３６】
ステップＳ３において、仮想マシン部１１は、Text  Segment３２の先頭からＮバイトの読込を行う。本実施例１では４バイト固定長の命令コードを実行するのでＮ＝４バイトとする。ステップＳ４において、仮想マシン部１１は、読み込んだＮバイト部分を命令コードテーブルに当てはめて、ステップＳ５において対応する命令コードの動作に従って仮想的に実行する。
【００３７】
ステップＳ６において、仮想マシン部１１は、１回以上実行した命令コードのサイズとオフセットアドレスとを実行結果記憶部１２に記憶する。仮想マシン部１１は、同一の命令コードを２回以上実行した場合であっても、重複して実行結果記憶部１２に記憶することはない。ステップＳ７において、仮想マシン部１１は、ａ．ｏｕｔ３０の実行が終了したか否かを判断する。まだ終了していなかったならばステップＳ８において、次に実行するＮバイトをText  Segment３２から読み込んで、ステップＳ４の処理に戻り、終了したならばステップＳ９の処理を行う。
【００３８】
ステップＳ９において、全てのテストパターンを実行したか否かを判断する。全てのテストパターンを実行していないならば、ステップＳ３の処理に戻り、全て実行したならば、図８の処理を終了する。
【００３９】
図９は、図１のカバレッジ測定方法を示すフローチャートである。
処理が開始すると、ステップＳ１１において、仮想マシン部１１がテストを実行する。実行結果とは、１回以上実行した全ての命令コードのオフセットアドレスと、続いてカンマ「，」と、その命令コードのコード長とである。仮想マシン部１１は、実行結果を実行結果記憶部１２に格納する。
【００４０】
ステップＳ１２において、実行命令数計算部１３は、実行結果記憶部１２に記憶された実行結果を用いて、実行された命令コード数である実行命令数を計算し、命令数記憶部１５に格納する。
【００４１】
実行結果の読み出した回数を計算し、これを実行された命令コード数である実行命令数として命令数記憶部１５に格納する。図９に示す実行結果の例では、実行結果から上記の形式で９回の読出しを行い、命令数記憶部１５に「実行命令数＝９」を格納する。
【００４２】
ステップＳ１３において、命令コードサイズ計算部１４は、このソフトウエアプログラムのオブジェクトファイルを解析し、仮想マシン部１１で動作する命令コード部分のサイズを取得して、これを命令コードサイズ記憶部１６へ格納する。オブジェクトファイルから命令コード部分のサイズを取得する方法は、オブジェクトファイルの形式によって異なるが、本実施例１では、オブジェクトファイルのヘッダ部分を参照し、命令コードが格納されている領域を特定し、その領域のサイズを命令コード部分のサイズとして取得するという方法をとる。
【００４３】
ステップＳ１４において、全命令数計算部１８は、命令コードサイズ記憶部１６から命令コード部分のサイズを取得し、これを命令コード長記憶部１７から読出した命令コード長で除算し、計算結果を命令数記憶部１５に格納する。本実施例１では、ソフトウエアプログラムの命令コードが固定長命令であるので、命令コード長記憶部１７に格納される命令コードも固定長の４バイトとなる。このとき、ソフトウエアプログラムのバイナリコードの命令コード部分は固定長の命令コードのみで構成されるため、この命令コード部分のサイズを固定長の命令コード長で除算することで、ソフトウエアプログラムに含まれる全命令コード数が計算できる。本実施例１では、命令コードサイズ記憶部１６から読出した命令コード部分のサイズが８０バイトであるので、「全命令コード部分のサイズ／命令コード長＝８０／４＝２０」となり、「全命令数＝２０」が命令数記憶部１５に格納される。
【００４４】
ステップＳ１５において、カバレッジ計算部１９は、命令数記憶部１５から実行命令コード数とソフトウエアプログラムの全命令コード数を読出し、ソフトウエアプログラムの全命令コード数を実行命令コード数で除算した結果を、カバレッジ測定結果として出力する。本実施例１では、「実行命令数／全命令数＝９／２０＝４５．０％」という測定結果である。
【００４５】
図１０は、図９におけるカバレッジ測定方法の例を示す図である。
Text  Segment３２の機械語の命令コードは、仮想マシン部１１によって実行され、その実行結果は実行結果記憶部１２に格納される。この実行結果は、実行命令計算部によって実行命令数が９と計算され、命令数記憶部１５に格納される。
【００４６】
Text  Segment３２は、命令コードサイズ計算部１４によって命令コード部分のサイズが８０バイトと計算され、命令コードサイズ記憶部１６に格納される。また、命令コード長記憶部１７は、１命令あたりのコードサイズが４バイトであることを仮想マシン部１１から取得する。
【００４７】
全命令数計算部１８は、命令コードサイズ８０バイトを、１命令あたりのコードサイズ４バイトで除算すると、このText  Segment３２が有している全命令数２０が計算され、命令数記憶部１５に格納される。
【００４８】
カバレッジ計算部１９は、実行命令数９を全命令数２０で除算することによって、４５％のカバレッジを計算する。
【００４９】
（実施例１の効果）
本実施例１のカバレッジ測定システム１０及びカバレッジ測定方法によれば、ソフトウエアの命令コード部のサイズを命令コード長で除算してソフトウエアの全命令コード数を得るため、従来のようにバイナリコード全てに対して命令コードテーブルと比較検索することなく、少ない処理時間でカバレッジ測定を行うことが可能である。
【実施例２】
【００５０】
（実施例２の構成）
図１１は、本発明の実施例２におけるカバレッジ測定システムを示す概略の構成図であり、実施例１を示す図１中の要素と共通の要素には共通の符号が付されている。
【００５１】
本実施例２におけるカバレッジ測定システム１０Ａは、実施例１を示す図１におけるカバレッジ測定システム１０の構成に加えて、更に命令コード長計算部２０を備え、この実行結果記憶部１２と命令数記憶部１５の値とを用いて計算した結果を命令コード長記憶部１７に記憶するほかは、実施例１の構成と同様である。
【００５２】
図１２は、可変長命令を有するａ．ｏｕｔの例を示す図であり、実施例１を示す図３中の要素と共通の要素には共通の符号が付されている。
【００５３】
本実施例２におけるａ．ｏｕｔ３０Ａは、Text  Segment３２Ａに可変長命令の機械語の命令コードを有するほかは、実施例１を示す図３におけるａ．ｏｕｔ３０の構成と同様である。
【００５４】
図１３は、図１２のText  Segmentを命令コード毎に記載した例を示す図であり、実施例１を示す図５中の要素と共通の要素には共通の符号が付され、命令コードのオフセットアドレスと命令コードは１６進数で表記されている。
【００５５】
左端の２行は命令コードのオフセットアドレスを示し、コロン「：」に続いて命令コードが示されている。第１の命令は、オフセットアドレス００ｈと、命令コード長１バイトを有する命令コード５５ｈとを有している。第２の命令は、オフセットアドレス０１ｈと、命令コード長２バイトを有する命令コード８Ｂｈ  ＥＣｈとを有している。以下、同様にして３５個の命令コードが行毎に区分けして記載されている。
【００５６】
図１４は、仮想マシン部における図１１のａ．ｏｕｔの実行結果の例を示す図であり、実施例１を示す図６中の要素と共通の要素には共通の符号が付され、命令コードのオフセットアドレスは１６進数で表記されている。
【００５７】
実施例１と同様に、仮想マシン部１１は、ａ．ｏｕｔ３０ＡのText  Segment３２Ａに格納された機械語の命令コードをテストパターンに沿って実行し、１回以上実行された命令コードのオフセットアドレスと命令コード長とをそれぞれ記録する。仮想マシン部１１は、オフセットアドレス００ｈから始まる１バイト命令と、オフセットアドレス０１ｈから始まる２バイト命令と、オフセットアドレス０３ｈから始まる６バイト命令と、オフセットアドレス０９ｈから始まる１バイト命令と、オフセットアドレス０Ａｈから始まる１バイト命令を１回以上実行し、これに加えて、オフセットアドレス０Ｂｈから始まる１バイト命令と、オフセットアドレス０Ｃｈから始まる６バイト命令と、オフセットアドレス１２ｈから始まる５バイト命令と、オフセットアドレス１７ｈから始まる５バイト命令と、オフセットアドレス１Ｃｈから始まる２バイト命令を１回以上実行し、更にオフセットアドレス１Ｅｈから始まる７バイト命令と、オフセットアドレス２５ｈから始まる２バイト命令と、オフセットアドレス２７ｈから始まる３バイト命令と、オフセットアドレス２Ａｈから始まる３バイト命令と、オフセットアドレス２Ｄｈから始まる３バイト命令を１回以上実行し、更にオフセットアドレス３０ｈから始まる４バイト命令と、オフセットアドレス３４ｈから始まる２バイト命令と、オフセットアドレス３６ｈから始まる２バイト命令を１回以上実行する。図１４は、この実行結果が実行結果記憶部１２に格納されていることが示されている。
【００５８】
（実施例２のカバレッジ測定方法）
図１５は、図１１のカバレッジ測定方法を示すフローチャートであり、実施例１を示す図９中の要素と共通の要素には共通の符号が付されている。
【００５９】
処理が開始したのち、ステップＳ１１〜Ｓ１２の処理は実施例１と同様である。
ステップＳ２０において、命令コード長計算部２０は、実行結果記憶部１２から実行結果を読出して実行された命令コード長の合計を計算する。ステップＳ２１において、実行された命令コード長合計を、命令数記憶部１５から読み出した、実行された命令コード数で除算して実行命令コード長の平均値を計算し、計算結果を命令コード長記憶部１７に格納する。実行された命令コード数については、命令数記憶部１５から読み出さずに、ステップＳ２０において読み出した実行結果を用いてもよい。
【００６０】
ステップＳ１３において、実施例１と同様の処理を行い、ステップＳ１４Ａにおいて、全命令数計算部１８は、カバレッジ測定対象となるソフトウエアプログラムのバイナリコードの命令コード部のサイズを取得し、これを命令コード長記憶部１７から読出した実行命令コード長平均で除算し、計算結果を命令数記憶部１５に格納する。ステップＳ１５において、実施例１と同様にカバレッジを計算し、図１５の処理を終了する。
【００６１】
仮想マシン部１１において動作する命令が可変長命令である場合、命令コードによってコードサイズが異なるため、命令コード長として設定する値を考慮する必要がある。ここで、ソフトウエアプログラムの命令コード部のサイズを、ソフトウエアプログラムの全命令コード数で除算した場合、除算結果は命令コード１つ当りの命令コード長の平均値となる。すなわち、ソフトウエアプログラムの命令コード部のサイズを、全命令についての命令コード長の平均値で除算することで、ソフトウエアプログラムに含まれる全命令数を計算することができる。本実施例２においては、テストで実行された全ての命令コードについての命令コード長の平均値を、全命令についての命令コード長の平均値の近似値として用いており、ソフトウエアプログラムに含まれる全命令コード数が正確に計算されないため、カバレッジ精度が低くなっている。しかし、統計上、ソフトウエアに含まれる全命令コード数に対するテストで１回以上実行した命令コード数の割合（カバレッジ）が大きいほど、上記の１回以上実行した命令についての命令コード長平均値は、全命令コード長の平均値に近づく。よって、本実施例２においては、カバレッジの値が高くなるほど、カバレッジ精度も高くなる。
【００６２】
図１６は、図１５におけるカバレッジ測定方法の例を示す図であり、実施例１を示す図１０中の要素と共通の要素には共通の符号が付されている。
【００６３】
Text  Segment３２Ａは、ソフトウエアプログラムの命令コード部であり、実施例１と同様に仮想マシン部１１によって実行され、その実行結果は実行結果記憶部１２に格納される。この実行結果は、実行命令計算部によって実行命令数が１８と計算され、命令数記憶部１５に格納される。
【００６４】
実施例１と同様にText  Segment３２Ａは、命令コードサイズ計算部１４によって命令コードサイズが１０５バイトと計算され、命令コードサイズ記憶部１６に格納される。
【００６５】
実施例１とは異なり、命令コード長計算部２０は、実行命令数１８を命令数記憶部１５から取得し、実行された命令コード長の総和が５５バイトであることを実行結果記憶部１２から取得する。更に命令コード長の総和５５バイトを実行命令数１８で除算して、命令コード長平均が３．０５６バイトであることを計算し、命令コード長記憶部１７に記憶する。
【００６６】
実施例１と同様に、全命令数計算部１８は、命令コードサイズ１０５バイトを、１命令あたりのコードサイズ３．０５６バイトで除算すると、このText  Segment３２Ａが有していると推定される全命令数３４．３６が計算され、命令数記憶部１５に格納される。
【００６７】
実施例１と同様にカバレッジ計算部１９は、実行命令数１８を全命令数３４．３６で除算することによって、５２．４％のカバレッジを計算する。正確な全命令数である３５に対して本実施例２の推定全命令数は３４．３６であり、正確なカバレッジである５１．４％に対して本実施例２の推定カバレッジは５２．４％であり、誤差は約１％である。
【００６８】
カバレッジ測定はソフトウエア評価の指標として用いられる項目であるため、必ずしも精度のみが要求されるわけではなく、高速性を重視して精度を落とした本実施例２のようなカバレッジ測定システム１０Ａにも有効性を見出すことができる。
【００６９】
また、一般にカバレッジ測定においては、テストの実行により、被測定対象のソフトウエアプログラムの全ての命令を実行することが目標である。よって、カバレッジが１００％になるまで、又は１００％に近づくまでテストが実行されることが多い。本実施例２においては、カバレッジの値が高くなるほどカバレッジ精度も高くなるため、多くの場合においてカバレッジ精度が高くなることが期待される。
【００７０】
（実施例２の効果）
本実施例２におけるカバレッジ測定システム１０Ａ及びカバレッジ測定方法によれば、カバレッジ測定対象となるソフトウエアプログラムの命令コードが可変長命令で命令コード長が常に一定ではない場合においても、仮想マシン部１１が１回以上実行した命令コードから命令コード長平均を計算し、ソフトウエアの命令コード部のサイズを命令コード長で除算してソフトウエアの全命令コード数を得るため、従来のようにバイナリコード全てに対して命令コードテーブルと比較検索することなく、少ない処理時間でカバレッジ測定を行うことが可能である。
【００７１】
（変形例）
本発明は、上記実施例に限定されず、種々の利用形態や変形が可能である。この利用形態や変形例としては、例えば、以下の（ａ）〜（ｃ）のようなものがある。
【００７２】
（ａ）  実施例１又は２におけるカバレッジ測定システム１０，１０Ａの機能を実現するためのプログラムを記録した記録媒体を用いて、記録されたプログラムをコンピュータシステムに読み込ませて実行することにより、カバレッジ測定の処理を行ってもよい。ここでの「コンピュータシステム」はＯＳ（Operating  System）や周辺機器のハードウエアを含む。
【００７３】
（ｂ）  「記録媒体」とはフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、ＲＯＭ（Read  Only  Memory）等の可搬媒体、フラッシュメモリ、コンピュータシステムに内蔵されるハードディスク等の記憶装置及びコンピュータシステム内部のＲＡＭ（Random  Access  Memory）等の揮発性メモリのように、プログラムを一時的に保持するものを含む。
【００７４】
（ｃ）  実施例１又は２において、仮想マシン部１１と、実行命令数計算部１３と、命令コードサイズ計算部１４と、全命令数計算部１８と、カバレッジ計算部１９と、命令コード長計算部２０とは、ＣＰＵがメモリ（ＲＯＭ，ＲＡＭ，磁気記録媒体等）に記憶されているプログラム及びデータに従って動作するように実現してもよい。
【符号の説明】
【００７５】
１０，１０Ａ  カバレッジ測定システム
１１  仮想マシン部
１２  実行結果記憶部
１３  実行命令数計算部
１４  命令コードサイズ計算部
１５  命令数記憶部
１６  命令コードサイズ記憶部
１７  命令コード長記憶部
１８  全命令数計算部
１９  カバレッジ計算部
２０  命令コード長計算部
【図１】
2011159259.tif 000003
【図２】
2011159259.tif 000004
【図３】
2011159259.tif 000005
【図４】
2011159259.tif 000006
【図５】
2011159259.tif 000007
【図６】
2011159259.tif 000008
【図７】
2011159259.tif 000009
【図８】
2011159259.tif 000010
【図９】
2011159259.tif 000011
【図１０】
2011159259.tif 000012
【図１１】
2011159259.tif 000013
【図１２】
2011159259.tif 000014
【図１３】
2011159259.tif 000015
【図１４】
2011159259.tif 000016
【図１５】
2011159259.tif 000017
【図１６】
2011159259.tif 000018