JP4869581B2 - カバレッジ計測システム及びそのプログラム - Google Patents

カバレッジ計測システム及びそのプログラム Download PDF

Info

Publication number
JP4869581B2
JP4869581B2 JP2004337412A JP2004337412A JP4869581B2 JP 4869581 B2 JP4869581 B2 JP 4869581B2 JP 2004337412 A JP2004337412 A JP 2004337412A JP 2004337412 A JP2004337412 A JP 2004337412A JP 4869581 B2 JP4869581 B2 JP 4869581B2
Authority
JP
Japan
Prior art keywords
instruction code
function
position information
extracted
call
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004337412A
Other languages
English (en)
Other versions
JP2006146669A (ja
Inventor
隆史 岡本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Data Corp
Original Assignee
NTT Data Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NTT Data Corp filed Critical NTT Data Corp
Priority to JP2004337412A priority Critical patent/JP4869581B2/ja
Publication of JP2006146669A publication Critical patent/JP2006146669A/ja
Application granted granted Critical
Publication of JP4869581B2 publication Critical patent/JP4869581B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

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

Claims (2)

  1. 中間言語であるアセンブラコードあるいは機械語であるバイナリコードで記載され、複数の外部コンポーネントを用いて構成されるソフトウェアプログラムを、テストパターンにより実行させて、前記ソフトウェアプログラムの前記テストパターンによるカバレッジを算出するカバレッジ計測システムであり、
    前記ソフトウェアプログラムで使用される関数として、当該ソフトウェアプログラムに組み込まれた前記外部コンポーネントに含まれる関数を呼出元の関数とし当該呼出元の関数に呼び出される前記ソフトウェアに組み込まれた前記外部コンポーネントに含まれる呼出先の関数の抽出処理を行い、抽出した呼出先の関数を新たな呼出元の関数として、さらに新たな呼出先の関数の前記抽出処理を、前記新たな呼出元の関数の呼び出し先が抽出されなくなるまで順次行う呼出関数抽出部と、
    前記抽出処理により抽出された結果である抽出結果から、前記呼出元の関数と呼出先の関数とにおける呼び出しの対応関係を示す呼出対応テーブルを生成する呼出関係抽出部と、
    前記呼出対応テーブルに記載された前記呼出元の関数及び前記呼出先の関数を構成する命令コードを、前記ソフトウェアプログラムから抽出し、抽出された命令コードである抽出命令コードと、当該抽出命令コードが前記ソフトウェアプログラムのいずれに記載されているかを示す抽出位置情報との対応を示す命令コード抽出テーブルを生成する命令コード抽出部と、
    前記テストパターンを用いて、前記ソフトウェアプログラムを実行させて実行履歴を取得する仮想マシン部と、
    前記実行履歴から、前記テストパターンにより実行された命令コードである実行命令コード及びその実行位置情報を抽出し、前記実行命令コードと前記実行位置情報との対応を示す位置情報テーブルを生成する位置情報抽出部と、
    前記実行位置情報の数である実行位置情報数を、前記命令コード抽出テーブルに記載された抽出位置情報の数である抽出位置情報数により除算し、前記ソフトウェアプログラムの前記テストパターンによるカバレッジを求め、当該カバレッジを前記テストパターンによりテストされていない命令コードと当該命令コードの前記抽出位置情報とともに出力するカバレッジ計算部と
    を有することを特徴とするカバレッジ計測システム。
  2. 中間言語であるアセンブラコードあるいは機械語であるバイナリコードで記載され、複数の外部コンポーネントを用いて構成されるソフトウェアプログラムを、テストパターンにより実行させて、前記ソフトウェアプログラムの前記テストパターンによるカバレッジを算出するカバレッジ計測システムの処理をコンピュータに実行させるプログラムであり、
    呼出関数抽出部が、前記ソフトウェアプログラムで使用される関数として、当該ソフトウェアプログラムに組み込まれた前記外部コンポーネントに含まれる関数を呼出元の関数とし当該呼出元の関数に呼び出される前記ソフトウェアに組み込まれた前記外部コンポーネントに含まれる呼出先の関数の抽出処理を行い、抽出した呼出先の関数を新たな呼出元の関数として、さらに新たな呼出先の関数の前記抽出処理を、前記新たな呼出元の関数の呼び出し先が抽出されなくなるまで順次行う処理と、
    呼出関係抽出部が、前記抽出処理により抽出された結果である抽出結果から、前記呼出元の関数と呼出先の関数とにおける呼び出しの対応関係を示す呼出対応テーブルを生成する処理と、
    命令コード抽出部が、前記呼出対応テーブルに記載された前記呼出元の関数及び前記呼出先の関数を構成する命令コードを、前記ソフトウェアプログラムから抽出し、抽出された命令コードである抽出命令コードと、当該抽出命令コードが前記ソフトウェアプログラムのいずれに記載されているかを示す抽出位置情報との対応を示す命令コード抽出テーブルを生成する処理と、
    仮想マシン部が、前記テストパターンを用いて、前記ソフトウェアプログラムを実行させて実行履歴を取得する処理と、
    位置情報抽出部が、前記実行履歴により、前記テストパターンにより実行された命令コードである実行命令コード及びその実行位置情報を前記命令コード抽出テーブルから抽出し、前記実行命令コードと前記実行位置情報との対応を示す位置情報テーブルを生成する処理と、
    カバレッジ計算部が、前記実行位置情報の数である実行位置情報数を、前記命令コード抽出テーブルに記載された抽出位置情報の数である抽出位置情報数により除算し、前記ソフトウェアプログラムの前記テストパターンによるカバレッジを求め、当該カバレッジを前記テストパターンによりテストされていない命令コードと当該命令コードの前記抽出位置情報とともに出力する処理と
    を有する処理をコンピュータに実行させるプログラム。
JP2004337412A 2004-11-22 2004-11-22 カバレッジ計測システム及びそのプログラム Expired - Fee Related JP4869581B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004337412A JP4869581B2 (ja) 2004-11-22 2004-11-22 カバレッジ計測システム及びそのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004337412A JP4869581B2 (ja) 2004-11-22 2004-11-22 カバレッジ計測システム及びそのプログラム

Publications (2)

Publication Number Publication Date
JP2006146669A JP2006146669A (ja) 2006-06-08
JP4869581B2 true JP4869581B2 (ja) 2012-02-08

Family

ID=36626264

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004337412A Expired - Fee Related JP4869581B2 (ja) 2004-11-22 2004-11-22 カバレッジ計測システム及びそのプログラム

Country Status (1)

Country Link
JP (1) JP4869581B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008242811A (ja) * 2007-03-27 2008-10-09 Hitachi Software Eng Co Ltd ソフトウェア部品ソースコード生成システム
US8141158B2 (en) * 2008-12-31 2012-03-20 International Business Machines Corporation Measuring coverage of application inputs for advanced web application security testing
CN103246602B (zh) 2012-02-14 2017-03-01 阿里巴巴集团控股有限公司 代码覆盖率确定方法及系统、代码覆盖检测方法及系统
KR102042996B1 (ko) * 2017-06-01 2019-12-02 슈어소프트테크주식회사 탐침을 이용하지 않는 코드 커버리지 측정 방법 및 장치, 그리고 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5856049A (ja) * 1981-09-30 1983-04-02 Fujitsu Ltd プログラムデバツグ方式
JPS61107440A (ja) * 1984-10-30 1986-05-26 Yokogawa Hokushin Electric Corp マイクロプロセツサ用デバツグ装置
JPH01271848A (ja) * 1988-04-22 1989-10-30 Nec Corp プログラム開発評価システム

Also Published As

Publication number Publication date
JP2006146669A (ja) 2006-06-08

Similar Documents

Publication Publication Date Title
US6430741B1 (en) System and method for data coverage analysis of a computer program
Chen et al. An automated approach to estimating code coverage measures via execution logs
US8386851B2 (en) Functional coverage using combinatorial test design
JP5403362B2 (ja) パターン検査システム、パターン検査装置、方法およびパターン検査用プログラム
Mateos et al. Detecting WSDL bad practices in code–first Web Services
JP5208635B2 (ja) プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム
Chen et al. Extracting and studying the Logging-Code-Issue-Introducing changes in Java-based large-scale open source software systems
Tramontana Automatically characterising components with concerns and reducing tangling
US9189372B2 (en) Trace coverage analysis
US7409677B1 (en) Method and system for creation and use of embedded trace description
KR20180129623A (ko) 연관된 다중 파일 정적 분석 장치
JP4869581B2 (ja) カバレッジ計測システム及びそのプログラム
JP2000347900A (ja) 入力パラメータ生成装置、その方法及び記録媒体
US8359579B2 (en) Monitoring dynamic aspect oriented applications at execution time
JP2005338987A (ja) 例外テスト支援プログラム及び例外テスト支援装置
JP4763743B2 (ja) プログラム動作比較装置及び方法及びプログラム
JP7380851B2 (ja) テストスクリプト生成装置、テストスクリプト生成方法及びプログラム
JP7331681B2 (ja) テスト実行プログラム、テスト実行方法、およびテスト実行装置
KR20190020363A (ko) 동적 분석과 정적 분석을 연계한 프로그램을 분석하기 위한 방법 및 장치
Mahmud et al. Acid: an api compatibility issue detector for android apps
US8458523B2 (en) Meta attributes in functional coverage models
JP4536576B2 (ja) ソフトウェアカバレッジ測定装置及び方法
Andrzejak et al. Confguru-A system for fully automated debugging of configuration errors
CN112099838B (zh) 确定版本差异的方法、装置及存储介质
RU2390821C1 (ru) Способ динамической инструментации

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070320

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090409

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090414

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090612

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090915

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091116

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100302

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100601

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20100609

A912 Removal of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20100827

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111116

R150 Certificate of patent or registration of utility model

Ref document number: 4869581

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141125

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees