JP4536576B2 - ソフトウェアカバレッジ測定装置及び方法 - Google Patents

ソフトウェアカバレッジ測定装置及び方法 Download PDF

Info

Publication number
JP4536576B2
JP4536576B2 JP2005114418A JP2005114418A JP4536576B2 JP 4536576 B2 JP4536576 B2 JP 4536576B2 JP 2005114418 A JP2005114418 A JP 2005114418A JP 2005114418 A JP2005114418 A JP 2005114418A JP 4536576 B2 JP4536576 B2 JP 4536576B2
Authority
JP
Japan
Prior art keywords
program
coverage
dynamic
dynamic binding
implementation
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.)
Active
Application number
JP2005114418A
Other languages
English (en)
Other versions
JP2006293740A (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 Group 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 JP2005114418A priority Critical patent/JP4536576B2/ja
Publication of JP2006293740A publication Critical patent/JP2006293740A/ja
Application granted granted Critical
Publication of JP4536576B2 publication Critical patent/JP4536576B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、ソフトウェアテスティング技術に関し、特に、ソフトウェアテストにおけるカバレッジを測定するためのソフトウェアカバレッジ測定装置等に関する。
ソフトウェアの品質を評価する手段として、ソフトウェアのテストにおけるコードカバレッジ(以下、カバレッジという)の測定がある。ここで、カバレッジとは、テストの実行に際して、ソフトウェアプログラム中の全コードに対する、テストが実行されたコードの割合である。このため、カバレッジの測定は、テストにおいて、ソフトウェアプログラム中の全コードのうちのどの部分が実行され、どの部分が実行されなかったのかを判別することにより行われる。
そして、このカバレッジをテストの信頼性の指標として用いることにより、ソフトウェアに対してテストが十分に行われたか否か、換言すれば、テストが正当に行われたか否かを判別することができる。具体的には、カバレッジが高い程、ソフトウェアにおいてテストが実行された範囲が広いことを意味し、ソフトウェアの信頼性が高いことになる。
そのため、カバレッジの穴を自動的に識別して、これらの領域をテストするために入力プロセスを変更することにより、テストカバレッジを高めようとする技術がある(例えば、特許文献1参照)。
特表2003−535343号公報
ところで、近年、手続き型のプログラミング言語に代わり、オブジェクト指向型のプログラミング言語がシステム開発の中心言語となってきている。そして、オブジェクト指向型言語においては、手続き型言語と異なり、プログラムの実行時に、実行されるクラスが決定されるという「動的束縛」が利用される。
そして、プログラムにおいてこの動的束縛が利用されている部分については、テスト対象となるソースコード、及びコンパイルされたバイナリコードからだけでは、プログラムの実行時にどのコードが実行されるのかを判断することができない。
そのため、オブジェクト指向型等の動的束縛を含むプログラムをテストする場合には、必然的に、実行される可能性があるすべてのクラスを含めたテストを実行する必要が生じる。
しかしながら、カバレッジを測定するときには、アプリケーションにより実行される部分のみを抽出して測定しないと測定精度が落ちる。
そのため、動的束縛を含むプログラムをテストする場合に、例えば、特許文献1に開示されている方法等の従来のテスト方法を用いると、アプリケーションにより実行されないクラスまで、カバレッジの測定範囲に含まれてしまい、カバレッジの測定精度が落ちるという問題がある。
本発明は、上記実状に鑑みてなされたものであり、動的束縛が存在するソフトウェアのテストにおけるカバレッジの測定精度を向上させることができるソフトウェアカバレッジ測定装置等を提供することを目的とする。
上記目的を達成するため、この発明の第1の観点に係るソフトウェアカバレッジ測定装置は、
動的束縛を含むソフトウェアのプログラムを取得するプログラム取得手段と、
前記プログラム取得手段が取得したプログラムに関する環境設定情報を取得する環境設定情報取得手段と、
前記環境設定情報取得手段が取得した環境設定情報中における動的に実装を切り換えるための設定部分を定義する動的束縛設定部分定義ファイルを取得する動的束縛設定部分定義ファイル取得手段と、
前記動的束縛設定部分定義ファイル取得手段が取得した動的束縛設定部分定義ファイルに基づいて、前記環境設定情報取得手段が取得した環境設定情報から、実行される実装の指定情報である動的実行情報を抽出する動的実行情報抽出手段と、
前記動的実行情報抽出手段が抽出した動的実行情報に基づいて、前記プログラム取得手段が取得したプログラム中における動的束縛による実装候補の中から、実行される実装を特定する動的束縛絞込手段と、
前記プログラム取得手段が取得したプログラムに対してテストを実行するテスト実行手段と、
前記プログラム取得手段が取得したプログラムにおける動的束縛による実装候補の中から、前記動的束縛絞込手段が特定した実装以外の実装候補を除いた範囲を基準として、前記テスト実行手段によるテスト結果に基づいて、カバレッジを測定するカバレッジ測定手段と、
を備える。
前記テスト実行手段は、テスト結果として、テストにおいて実行された命令コードの情報を出力し、
前記カバレッジ測定手段は、前記プログラム取得手段が取得したプログラムにおける動的束縛による実装候補の中から、前記動的束縛絞込手段が特定した実装以外の実装候補を除いた範囲のすべての命令コードの情報と、前記テスト実行手段が出力した命令コードの情報と、を比較して、カバレッジを測定する、
ようにしてもよい。
前記プログラム取得手段が取得したプログラムに基づき、動的束縛による実装候補をすべて含むコントロールフローグラフを作成するコントロールフローグラフ作成手段をさらに備え、
前記カバレッジ測定手段は、
前記コントロールフローグラフ作成手段が作成したコントロールフローグラフが含む動的束縛による実装候補の中から、前記動的束縛絞込手段が特定した実装以外の実装候補を除く動的束縛絞込手段と、
前記動的束縛絞込手段により除かれたコントロールフローグラフに示される範囲を基準として、カバレッジを測定する動的束縛絞込カバレッジ測定手段と、を有する、
ようにしてもよい。
前記コントロールフローグラフ作成手段は、前記プログラム取得手段が取得したプログラムの作成に用いられたコンポーネントにおいて公開されているメソッドであり、且つ該プログラムに用いられているメソッドである公開メソッドを起点に順次呼び出されることにより到達可能なメソッドの関係を示すとともに、動的束縛による実装候補をすべて含むコントロールフローグラフを作成する、
ようにしてもよい。
また、この発明の第2の観点に係るソフトウェアカバレッジ測定方法は、
動的束縛を含むソフトウェアのプログラムを取得するプログラム取得ステップと、
前記プログラム取得ステップで取得したプログラムに関する環境設定情報を取得する環境設定情報取得ステップと、
前記環境設定情報取得ステップで取得した環境設定情報中における動的に実装を切り換えるための設定部分を定義する動的束縛設定部分定義ファイルを取得する動的束縛設定部分定義ファイル取得ステップと、
前記動的束縛設定部分定義ファイル取得ステップで取得した動的束縛設定部分定義ファイルに基づいて、前記環境設定情報取得ステップで取得した環境設定情報から、実行される実装の指定情報である動的実行情報を抽出する動的実行情報抽出ステップと、
前記動的実行情報抽出ステップで抽出した動的実行情報に基づいて、前記プログラム取得ステップで取得したプログラム中における動的束縛による実装候補の中から、実行される実装を特定する動的束縛絞込ステップと、
前記プログラム取得ステップで取得したプログラムに対してテストを実行するテスト実行ステップと、
前記プログラム取得ステップで取得したプログラムにおける動的束縛による実装候補の中から、前記動的束縛絞込ステップで特定した実装以外の実装候補を除いた範囲を基準として、前記テスト実行ステップにおけるテスト結果に基づいて、カバレッジを測定するカバレッジ測定ステップと、
を有する。
本発明によれば、動的束縛が存在するソフトウェアのテストにおけるカバレッジの測定精度を向上させることができる。
以下、本発明の実施の形態を図面を参照して説明する。
図1は、本発明の実施の形態に係るソフトウェアカバレッジ測定装置の構成例を示すブロック図である。
ソフトウェアカバレッジ測定装置(以下、カバレッジ測定装置という)1は、図示するように、通信部11と、入力部12と、出力部13と、記憶部14と、入出力I/F部15と、制御部16と、を備え、各部はバス17を介して互いに接続されている。
通信部11は、通信ネットワーク2を介して、ネットワーク上の情報処理装置等と通信を行うものであり、通信インタフェース等を備える。例えば、通信部11が、テスト対象となるソフトウェアプログラムのソースコード等を受信することにより、カバレッジ測定装置1はテスト対象を取り込む。
入力部12は、カバレッジ測定装置1に様々な情報を入力するために使用するものであり、ボタン、キー等の入力装置を備える。例えば、入力部12には、ソフトウェアテストの開始指示情報等が入力される。
出力部13は、様々な情報を出力するものであり、ディスプレイ等の表示装置を備える。例えば、出力部13には、テストにおいて測定されるカバレッジ等が表示出力される。
記憶部14は、様々な情報やプログラム等を記憶するものであり、ハードディスク等の補助記憶装置を備える。例えば、記憶部14は、テスト実行前に、予め、通信部11等を介して取り込んだテスト対象等を記憶しておく。
入出力I/F部15は、入出力機器3を接続するためのインタフェースである。例えば、テスト対象となるソフトウェアプログラムのソースコード等を、通信部11ではなく、入出力I/F部15を介して、CD−ROMドライブ等の入出力機器3から取り込むこともできる。
制御部16は、データの演算処理を行うと共に、バス17を介して通信部11、入力部12、出力部13、記憶部14、入出力I/F部15を制御するものであり、CPU(Central Processing Unit)161、ROM(Read Only Memory)162、RAM(Random Access Memory)163等を備える。制御部16における演算処理及び制御処理は、具体的には、CPU161が、RAM163を作業領域として使用して各種データを一時的に記憶させながら、ROM162に記憶されている制御プログラムを実行することにより行われる。
例えば、制御部16が、ROM162や記憶部14に記憶されている制御プログラムに従って上記各部を制御することにより、カバレッジ測定装置1において、テスト実行処理や、カバレッジ測定処理等が行われる。
図2は、本実施の形態に係るカバレッジ測定装置の機能構成例を示すブロック図である。
カバレッジ測定装置1は、図示するように、トレース用コード埋め込み部21と、コンパイラ22と、テスト実行部23と、フローグラフ作成部24と、カバレッジ算出部25と、カバレッジ表示部26と、テスト追加部27と、を備える。なお、これらの各構成要素は、図1に示した制御部16が、同じく図1に示した通信部11、入力部12、出力部13、記憶部14、又は入出力I/F部15を制御することにより、実現することができる。
トレース用コード埋め込み部21は、テスト対象となるソフトウェアのソースコードにカバレッジ計測用のトレース用コードを埋め込む。具体的には、トレース用コード埋め込み部21は、ソースコードが入力されると、ソースコードの中から分岐が発生する部分を判別し、その部分にログ出力コードであるトレース用コードを埋め込む。
トレース用コードは、テストが実行された際に、ソースコード中のどの部分が実行されたかが分かる情報(例えば、ファイル名、行番号等)をログ情報として出力する。
コンパイラ22は、トレース用コード埋め込み部21によりトレース用コードが埋め込まれたソースコードを、コンパイルし、バイナリコードを生成する。
テスト実行部23は、コンパイラ22が生成したバイナリコードに対してテストを実行し、その結果を出力する。さらに、テスト実行部23は、テスト実行の際にトレース用コードにより出力されるログ情報を取得して、ログファイルを出力する。
フローグラフ作成部24は、テスト対象となるソフトウェアのソースコードに基づいて、ソフトウェアにおいて実行される可能性がある部分に絞ったコントロールフローグラフを作成する。ここで、コントロールフローグラフ(以下、フローグラフという)とは、プログラムの制御の流れを示すグラフである。フローグラフ作成部24におけるフローグラフの作成動作の詳細については、図3を用いて後述する。
カバレッジ算出部25は、テスト実行部23が出力したログファイルに基づいてログを集計し、ソースコード中においてテストが実行された部分の情報を取得する。具体的には、例えば、カバレッジ算出部25は、テストにおいて、ソースコード中のどの位置のコードが実行されたかを示す実行コードの位置情報を取得する。
さらに、カバレッジ算出部25は、この取得した情報をもとに、フローグラフ作成部24が作成したフローグラフにより示される実行可能範囲を基準として、次の数式(1)及び(2)により、ファイルカバレッジと関数カバレッジとを算出する。
(1)ファイルカバレッジ=テスト実行時に実行されたファイルの行数/ファイルの総行数
(2)関数カバレッジ=テスト実行時に実行された関数の行数/関数の総行数
カバレッジ表示部26は、カバレッジ算出部25が算出したカバレッジの値を表示する。ユーザは、ここに表示されたカバレッジの値を参照することによって、実行されたテストにより、テスト対象となるソフトウェアがどれくらい網羅されたのかを知ることができる。
テスト追加部27は、カバレッジ算出部25により算出されたファイルカバレッジ又は関数カバレッジが所定の基準値(例えば、100%や、品質上満足できるものとして予め決められた値等)を満たしているか否かを判別し、満たしていない場合には、網羅的にテストされていない箇所がテストされるように、テストコードを追加した新たなテストケースを作成する。
テスト実行部23は、テスト追加部27により追加されたテストを実行し、新たなログファイルを出力する。カバレッジ算出部25は、この新たなログファイルに基づきカバレッジを算出する。そして、テスト追加部27は、再び、算出されたカバレッジが所定の基準値を満たしているか否かを判別し、基準値を満たしていない場合には、さらにテストコードを追加する。一方で、基準値を満たしている場合には、テストを終了する。
このようにして、カバレッジが所定の基準値を満たすまで、テストが繰り返される。
次に、テスト実行部23、フローグラフ作成部24、及びカバレッジ算出部25が、ソフトウェアにおける実行可能範囲を基準に、カバレッジを算出する動作を具体的に説明する。
市販コンポーネントを利用してシステム開発を行う場合には、システムの実行に不必要なモジュールやコードを含んでいる場合が多く、これら不必要な部分についてはテストを行う必要はない。仮に、不必要な部分を含めたすべてのコードがカバレッジの測定対象に含まれた場合には、余分なコードが測定対象に含まれてしまい、カバレッジの測定精度が落ちる。
そこで、実行される可能性がある部分に絞ってカバレッジの測定を行うために、コンポーネントのマニュアル等により外部公開されているメソッドから、到達可能なコードを抽出する。
図3は、外部公開されているメソッドに基づいて実行箇所を絞り込む動作例を示す図である。
フローグラフ作成部24は、コンポーネントにおいて公開メソッドから呼び出されるメソッドの関係を辿り、フローグラフを作成する。このとき、実行される可能性がある公開メソッドから辿れる部分のみのフローグラフを作成し、実行可能範囲とする。具体的には、例えば、メソッドAとメソッドBが公開されており、システムの実行にメソッドAは利用したが、メソッドBは利用しなかった場合には、公開メソッドAを起点に順次呼び出されることにより到達可能なメソッドの呼び出し関係を記述したフローグラフを作成することにより、実行される範囲を絞り込む。
一方で、テスト実行部23は、テストケースを実行し、コンポーネント中のテストケースにより実行された部分を抽出する。
そして、カバレッジ算出部25が、フローグラフ作成部24により作成されたフローグラフの実行可能範囲と、テストケースにより実行された部分と、をつき合わせて比較し、カバレッジを測定する。具体的には、例えば、公開メソッドAのみを利用したソフトウェアをテストする場合には、カバレッジ算出部25は、テストにより実行された部分の行数を、公開メソッドAの実行範囲内の総行数で除算することにより、カバレッジの算出を行う。
このように、プログラムを解析することにより作成したフローグラフを利用して、外部メソッドから実行される範囲を特定することにより、公開メソッドから確実に実行される可能性がある部分のみをカバレッジの対象とし高精度にカバレッジを測定することができる。
しかしながら、オブジェクト指向型等のプログラムのように動的束縛を含んだコードがある場合には、上記動作により、メソッドの呼び出し関係を辿ることができない。
そこで、本実施の形態に係るカバレッジ測定装置は、上記動作に加えて、さらに、動的束縛により動的に実行クラスが変わる部分の絞り込みを行う。
ここで、まず、オブジェクト指向型のプログラムにおける動的束縛について説明する。
図4は、動的束縛を利用したプログラムのクラス構造例を示す図である。
図示する構造例のプログラムでは、メソッドの実装を持たないインタフェースInterfaceAの実装として、Impl1、Impl2、Impl3が提供されている。
具体的なプログラム例を記述すると、次のようになる。
1:String type = 実装クラスの指定
2:InterfaceA i = getInstance(type);
3:i.call();
4行目以降省略
このプログラム例では、1行目において、実装を取得する型を指定する。具体的には、Impl1、Impl2、Impl3を取る。
2行目において、指定された実装のインスタンスを取得する。
3行目において、取得した実装のcallメソッドを実行する。
この3行目においては、InterfaceAを実装したクラスのcallメソッドを呼び出すと指定してあるだけで、どの実装が選択されるかは、iに代入されたオブジェクトの状況により、実行時に決定される。
このプログラムを例に、フローグラフの生成動作を説明する。
動的束縛が利用されている場合のフローグラフの生成方法としては、Enhanced Control Flow Graph(ECFG)がある。ここでは、ECFGについての詳細な説明は省略するが、ECFGの詳細については、Taweesup Apiwattanapong, Alessandro Orso, and Mary Jean Harrold, "A Differencing Algorithm for Object-Oriented Programs" (http://www.cc.gatech.edu/~orso/papers/term.orso.harrold.ASE04.pdf)を参照してほしい。
図5は、図4に示した構造を持つプログラムに基づく動的なクラス実行がある場合のフローグラフの例を示す図である。
図において、点線で示した部分が、ECFGを用いて生成した動的束縛が利用される部分であり、実行時に動的にクラスが決定される部分である。
ECFGでは、動的束縛が存在する部分に対し、実行する可能性がある実装(実装候補)を並列に並べることによりフローグラフを作成する。このフローグラフにより、図5の3行目において、Impl1.call()、Impl2.call()、Impl3.call()のいずれか一つの実装が実行されることを認識することができる。
しかしながら、このように動的束縛を考慮したフローグラフを作成しても、実行される候補となる実装を網羅的に洗い出したフローグラフが提供されるだけで、実行時にどの実装が選択されるか知ることはできず、実行される範囲を絞り込むことはできない。
つまり、コード中に動的束縛を含んだコードがある場合には、フローグラフの生成を行っただけでは、実行されるメソッドを特定することができない。
そこで、次に、動的束縛を含むプログラムにおける実行箇所の絞り込み動作を説明する。
実システムの動作環境において、設定ファイル等の環境設定により実装が指定されている場合には、環境設定で指定されなかった実装は実行されない。
図6は、環境設定による実装指定例を示す図である。
図示するように、プログラム中において、設定ファイルにより例えばImpl3を利用するように設定されている場合には、Impl3だけが実行されるクラスとなり、Impl1及びImpl2は実行されないことになる。
つまり、プログラムを解析してフローグラフを作成することに加え、環境設定の解析をも行うことにより、プログラム中に動的束縛による複数の実装候補がある場合であっても、実行されるクラスを特定することができる。
そして、実行されないクラスをカバレッジの測定範囲から除外することにより、カバレッジを精度良く求めることができる。
そこで、次に、環境設定の解析による動的実行部分の絞り込み動作を図7を参照して説明する。
図7は、図2におけるカバレッジ算出部25の具体的構成例を示す図である。
図示するように、カバレッジ算出部25は、動的実行情報抽出部31と、動的実行部絞込部32と、動的束縛絞込カバレッジ算出部33と、を備える。
フローグラフ作成部24は、プログラムの解析により、外部公開メソッドから実行される可能性がある部分を抽出したフローグラフを生成する。ただし、動的束縛が存在する箇所には、上述したECFGを用いてフローグラフを生成する。フローグラフの生成時点では、動的束縛により実行時に動的に実行されるクラスは特定されない。
カバレッジ算出部25は、環境設定の解析によりプログラムにおける動的実行部分を絞り込むに際して、フローグラフ作成部24により作成されたフローグラフを入力し、記憶する。
ここで、動的実行情報抽出部31に入力される環境設定と動的実行情報定義ファイルについて説明する。
環境設定には、動的実行情報が記述される。そして、環境設定は、設定ファイル、もしくはプログラムの引数等により与えられる。環境設定により与えられる動的実行情報には、例えば、ドライバクラスの定義や、コンポーネントを呼び出すコンテナへのコンポーネントの登録情報がある。具体的には、例えば、図6に示した環境設定例であれば、InterfaceAの実装にImpl3を利用する設定が記述されている。
動的実行情報定義ファイルは、環境設定の中における動的に実装を切り換えるための設定を行っている部分(動的束縛設定部分)を定義する。例えば、XML(eXtensible Markup Language)で記述された設定ファイルを環境設定に利用している場合には、設定ファイル中のXMLの構造上の位置を指定することにより定義を行う。具体的には、例えば、図6に示した環境設定例であれば、動的実行情報定義ファイルは、InterfaceAの実装が設定ファイルにどのように記述されるかを記述している。
動的実行情報抽出部31は、動的実行情報定義ファイルをもとに設定ファイルを解析し、動的な実行の定義を抽出し、実行される実装の指定情報である動的実行情報として出力する。具体的には、例えば、動的実行情報抽出部31は、XML上の特定のタグに記述されたドライバクラスの設定情報や、コンポーネントの登録情報を抽出する。
動的実行部絞込部32は、フローグラフ作成部24が生成したフローグラフ上で動的束縛により実行される実装が特定されていない箇所に対し、動的実行情報抽出部31が抽出した動的実行情報をもとに、実装を特定する。換言すれば、動的実行部絞込部32は、動的実行情報に基づいて、動的束縛による実装候補の中から、実行される実装を特定して、フローグラフ上の実装候補の中から、特定した実装以外の実装候補を除くことにより、動的束縛箇所における絞り込みを行う。
動的束縛絞込カバレッジ算出部33は、テスト実行部23から出力されるログファイルに基づき、テストにより実行された箇所を抽出する。そして、この実行された箇所と、動的実行部絞込部32により動的実行部の絞り込みが行われたフローグラフにより示される実行される部分とを比較し、カバレッジの計算、出力を行う。換言すれば、動的束縛絞込カバレッジ算出部33は、動的実行部絞込部32が特定した実装以外の実装候補を除いたフローグラフに示されている範囲を基準として、テストにより実行された箇所に基づき、カバレッジの計算を行う。
具体的には、例えば、動的束縛絞込カバレッジ算出部33は、テストにより実行された箇所の行数を、動的実行部が絞り込まれた後のフローグラフが示す範囲内の総行数で除算することにより、カバレッジの算出を行う。
本実施の形態では、上記動作により、動的束縛により動的に実行クラスが変わる部分の絞り込みを行うことができる。これにより、システムの実行に不要な部分をカバレッジの測定対象から排除することができ、カバレッジの精度を向上させることができる。
次に、環境設定の解析による動的実行部分の絞り込み動作における具体的な実装例をDIコンテナと呼ばれるコンテナへの適用を例に説明する。
ここで、DI(Dependency Injection)コンテナとは、コンポーネント間の依存性を内部から排除し、コンテナ管理で依存関係を構成するためのコンテナである。
図8は、DIコンテナにおける環境設定を定義した設定ファイル例を示す図である。
DIコンテナでは、図示するように、例えばXMLで設定ファイルに動的実行情報を記述する。
図示する環境設定例において、1〜4行目は、DIAppというアプリケーションクラスのmanagerプロパティにmanagerComponentを設定することを示している。managerComponentは7行目で、DBUserManagerのインスタンスを指定している。これにより、DIAppのmanagerプロパティに対し、DBUserManagerのインスタンスが設定される。
図9は、図8に示したDIコンテナの環境設定に対する動的実行情報定義ファイル例を示す図である。
図示する構文では、/xxxが設定ファイルのXMLの要素にマッチし、[@yyy=zzz]により、XMLの属性yyyがzzzで定義された要素にマッチすることを示す。また、[@yyy]のように属性のみで終了している場合は、その属性を取り出すことを示す。例えば、アプリケーション名がDIAppであるとすると、動的束縛プロパティ名は、/bean[@class=DIApp]/property[@name]となる。これは、class属性にDIAppを持つbean要素の下のproperty要素の@name属性を取り出すという意味となり、図8に示したXMLの設定ファイルから、動的束縛プロパティ名として、managerが取得される。同様にして、実装の名前にはmanagerComponentが、実装にはDBUserManagereが取得される。
このような一連の流れにより、図7の動的実行情報抽出部31は、動的実行情報定義ファイルをもとに設定ファイルを解析し、動的束縛プロパティmanagerには、DBUserManagerが設定されていることを検出する。
次に、DIコンテナを利用した具体的なアプリケーションを例に、フローグラフ作成部24で作成されたフローグラフから、動的実行部分を絞り込む動作を説明する。
図10は、DIコンテナを利用したアプリケーション例を示す図であり、図11は、フローグラフにおける動的実行部分を絞り込む動作を説明するための図である。
ここで、IUserManagerをユーザを管理するユーザマネージャのインタフェースとし、IUserManagerの実装として、DBUserManagerとFileUserManagerの2つのクラスがあった場合、図10に示すアプリケーションプログラムの9行目のmanager.auth()の動的束縛による実行候補は、DBUserManager.auth()とFileUserManager.auth()の2つである。そして、その場合に、doActionメソッドに対してフローグラフ作成部24が作成するフローグラフは、図11(a)のようになる。
動的実行情報抽出部31は、上述したように、動的束縛プロパティ名managerにDBUserManagerが設定されている旨の情報を抽出しているため、動的実行部絞込部32は、図11(a)に示すフローグラフからDBUserManager.auth()を残し、FileUserManager.auth()を削除する。その結果、動的実行部が絞り込まれ、図11(b)のようになる。図11(b)中、点線部は、グラフから削除された部分である。
動的束縛絞込カバレッジ算出部33は、このようにして動的実行部を絞り込んだフローグラフにより示される実行部分を基準として、カバレッジの計算を行う。
次に、本実施の形態に係るカバレッジ測定装置の処理動作をフローチャートを用いて説明する。なお、カバレッジ測定装置1の動作は、制御部16が、ROM162や記憶部14に記憶されている制御プログラムに従って、通信部11、入力部12、出力部13、記憶部14、又は入出力I/F部15を制御することにより実行される。なお、以下の動作説明において、制御部16による通信制御、入出力制御、メモリ制御等の通常のコンピュータによる動作と同一の動作については、理解を容易にするため、逐一言及することを避ける。
図12は、本実施の形態に係るカバレッジ測定装置におけるカバレッジ測定処理の例を示すフローチャートである。
例えば、カバレッジ測定装置1の操作者により、カバレッジの測定を開始する旨の情報が入力部12に入力されると、制御部16は、例えば記憶部14に記憶されている情報の中から、テスト対象となるソフトウェアのソースコードと、そのソフトウェアに関する環境設定情報と、環境設定情報中における動的実行情報の存在部分を定義する動的実行情報定義ファイルと、を取得する(ステップS11)。
そして、制御部16は、取得したソースコードにトレース用コードを埋め込み、コンパイル後のバイナリコードに対してテストを実行し、トレース用コードによるログファイルを取得する(ステップS12)。
次に、制御部16は、ステップS11で取得した動的実行情報定義ファイルに基づいて、同じくステップS11で取得した環境設定情報から、ソフトウェアにおける動的実行情報を抽出する(ステップS13)。
続いて、制御部16は、ステップS11で取得したソースコードに基づいて、ソフトウェアにおいて実行される可能性がある範囲を示すフローグラフを作成し、フローグラフの情報を例えば記憶部14に記憶する(ステップS14)。なお、ソフトウェアの動的束縛部分については、実行される可能性がある実装候補をすべて記載して、フローグラフを作成する。
次に、制御部16は、抽出された動的実行情報に基づいて、作成されたフローグラフにおける動的束縛部分の実装候補の中から、実行される実装を特定し、特定した実装以外の実装候補を削除することにより、動的束縛部分を絞り込んだ動的束縛絞込フローグラフを作成し、その情報を例えば記憶部14に記憶する(ステップS15)。
次に、制御部16は、ステップS12で取得したログファイルからテストにおいて実行された命令コードを特定し、この実行された命令コードと、動的束縛絞込フローグラフに記載されている範囲のすべての命令コードと、を比較することによりカバレッジを算出し(ステップS16)、このカバレッジ測定処理を終了する。
ステップS16でのカバレッジの算出に際し、制御部16は、具体的には、例えば、テスト結果のログファイルから特定される命令コードの総行数を、動的束縛絞込フローグラフに記載されている範囲のすべての命令コードの総行数で除算することにより、カバレッジを求める。
なお、上述したカバレッジ測定処理は一例であり、これに限定されるものではない。例えば、ステップS11で取得した各情報は、情報を必要とする処理の直前に取得するようにすることもできる。
また、ステップS12のログファイルの取得は、カバレッジを算出するステップS16の前であればよく、例えば、ステップS16の直前に行うようにすることもできる。
また、ステップS14のフローグラフの作成を、ステップS13の動的実行情報の抽出より前に行うようにすることもできる。
以上説明したように、本実施の形態によれば、フローグラフ作成部24がフローグラフを作成して、実際に実行するコード部分のみにカバレッジ測定を絞る。さらに、動的実行情報抽出部31が環境設定の解析を行い、この解析結果に基づき動的実行部絞込部32が、動的束縛を含んだコードについても絞り込みを行う。そして、絞り込まれた範囲を基準として、動的束縛絞込カバレッジ算出部33がカバレッジを算出する。これにより、カバレッジの測定精度を高めることができる。
従って、オブジェクト指向により実装されたコンポーネントに動的束縛を利用したコードが含まれる場合であっても、カバレッジ測定精度を向上させることができる。
また、コンポーネントテストの品質の正確な定量化により、テスト漏れを精度良く調べることができ、テスト漏れによる品質の低下を軽減することができる。
以上、本発明の実施の形態を説明したが、本発明を実施するにあたっては、種々の形態による変形及び応用が可能であり、上記実施の形態に限られるものではない。
例えば、カバレッジ算出部25が算出するカバレッジは、ファイルカバレッジや関数カバレッジに限定されるものではなく、ブランチカバレッジ等の他のカバレッジを算出することもできる。
なお、本発明のソフトウェアカバレッジ測定装置は、専用のハードウェアに限られるものではなく、通常のコンピュータシステムによっても実現することができる。
具体的には、上記実施の形態では、カバレッジ測定装置のプログラムが、メモリ等に予め記憶されているものとして説明した。しかし、上述の処理動作を実行させるためのプログラムを、フレキシブルディスク、CD−ROM(Compact Disk Read-Only Memory)、DVD(Digital Versatile Disk)、MO(Magneto-Optical disk)等のコンピュータ読み取り可能な記録媒体に格納して配布し、そのプログラムをコンピュータにインストールすることにより、上述の処理を実行をするソフトウェアカバレッジ測定装置を構成してもよい。
また、プログラムをインターネット等の通信ネットワーク上のサーバ装置が有するディスク装置等に格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロード等するようにしてもよい。さらに、通信ネットワークを介してプログラムを転送しながら起動実行することによっても、上述の処理を達成することができる。
また、上述の機能を、OS(Operating System)が分担又はOSとアプリケーションの協働により実現する場合等には、OS以外の部分のみを媒体に格納して配布してもよく、また、コンピュータにダウンロード等してもよい。
本発明の実施の形態に係るソフトウェアカバレッジ測定装置の構成例を示すブロック図である。 本実施の形態に係るソフトウェアカバレッジ測定装置の機能構成例を示すブロック図である。 外部公開されているメソッドに基づいて実行箇所を絞り込む動作例を示す図である。 動的束縛を利用したプログラムのクラス構造例を示す図である。 動的なクラス実行がある場合のフローグラフの例を示す図である。 環境設定による実装指定例を示す図である。 図2におけるカバレッジ算出部の具体的構成例を示す図である。 DIコンテナにおける環境設定を定義した設定ファイル例を示す図である。 DIコンテナの環境設定に対する動的実行情報定義ファイル例を示す図である。 DIコンテナを利用したアプリケーション例を示す図である。 フローグラフにおける動的実行部分を絞り込む動作を説明するための図である。 本実施の形態に係るソフトウェアカバレッジ測定装置におけるカバレッジ測定処理の例を示すフローチャートである。
符号の説明
1 ソフトウェアカバレッジ測定装置
2 通信ネットワーク
3 入出力機器
11 通信部
12 入力部
13 出力部
14 記憶部
15 入出力I/F部
16 制御部
17 バス
21 トレース用コード埋め込み部
22 コンパイラ
23 テスト実行部
24 フローグラフ作成部
25 カバレッジ算出部
26 カバレッジ表示部
27 テスト追加部
31 動的実行情報抽出部
32 動的実行部絞込部
33 動的束縛絞込カバレッジ算出部
161 CPU
162 ROM
163 RAM

Claims (5)

  1. 動的束縛を含むソフトウェアのプログラムを取得するプログラム取得手段と、
    前記プログラム取得手段が取得したプログラムに関する環境設定情報を取得する環境設定情報取得手段と、
    前記環境設定情報取得手段が取得した環境設定情報中における動的に実装を切り換えるための設定部分を定義する動的束縛設定部分定義ファイルを取得する動的束縛設定部分定義ファイル取得手段と、
    前記動的束縛設定部分定義ファイル取得手段が取得した動的束縛設定部分定義ファイルに基づいて、前記環境設定情報取得手段が取得した環境設定情報から、実行される実装の指定情報である動的実行情報を抽出する動的実行情報抽出手段と、
    前記動的実行情報抽出手段が抽出した動的実行情報に基づいて、前記プログラム取得手段が取得したプログラム中における動的束縛による実装候補の中から、実行される実装を特定する動的束縛絞込手段と、
    前記プログラム取得手段が取得したプログラムに対してテストを実行するテスト実行手段と、
    前記プログラム取得手段が取得したプログラムにおける動的束縛による実装候補の中から、前記動的束縛絞込手段が特定した実装以外の実装候補を除いた範囲を基準として、前記テスト実行手段によるテスト結果に基づいて、カバレッジを測定するカバレッジ測定手段と、
    を備えるソフトウェアカバレッジ測定装置。
  2. 前記テスト実行手段は、テスト結果として、テストにおいて実行された命令コードの情報を出力し、
    前記カバレッジ測定手段は、前記プログラム取得手段が取得したプログラムにおける動的束縛による実装候補の中から、前記動的束縛絞込手段が特定した実装以外の実装候補を除いた範囲のすべての命令コードの情報と、前記テスト実行手段が出力した命令コードの情報と、を比較して、カバレッジを測定する、
    ことを特徴とする請求項1に記載のソフトウェアカバレッジ測定装置。
  3. 前記プログラム取得手段が取得したプログラムに基づき、動的束縛による実装候補をすべて含むコントロールフローグラフを作成するコントロールフローグラフ作成手段をさらに備え、
    前記カバレッジ測定手段は、
    前記コントロールフローグラフ作成手段が作成したコントロールフローグラフが含む動的束縛による実装候補の中から、前記動的束縛絞込手段が特定した実装以外の実装候補を除く動的束縛絞込手段と、
    前記動的束縛絞込手段により除かれたコントロールフローグラフに示される範囲を基準として、カバレッジを測定する動的束縛絞込カバレッジ測定手段と、を有する、
    ことを特徴とする請求項1又は2に記載のソフトウェアカバレッジ測定装置。
  4. 前記コントロールフローグラフ作成手段は、前記プログラム取得手段が取得したプログラムの作成に用いられたコンポーネントにおいて公開されているメソッドであり、且つ該プログラムに用いられているメソッドである公開メソッドを起点に順次呼び出されることにより到達可能なメソッドの関係を示すとともに、動的束縛による実装候補をすべて含むコントロールフローグラフを作成する、
    ことを特徴とする請求項3に記載のソフトウェアカバレッジ測定装置。
  5. 動的束縛を含むソフトウェアのプログラムを取得するプログラム取得ステップと、
    前記プログラム取得ステップで取得したプログラムに関する環境設定情報を取得する環境設定情報取得ステップと、
    前記環境設定情報取得ステップで取得した環境設定情報中における動的に実装を切り換えるための設定部分を定義する動的束縛設定部分定義ファイルを取得する動的束縛設定部分定義ファイル取得ステップと、
    前記動的束縛設定部分定義ファイル取得ステップで取得した動的束縛設定部分定義ファイルに基づいて、前記環境設定情報取得ステップで取得した環境設定情報から、実行される実装の指定情報である動的実行情報を抽出する動的実行情報抽出ステップと、
    前記動的実行情報抽出ステップで抽出した動的実行情報に基づいて、前記プログラム取得ステップで取得したプログラム中における動的束縛による実装候補の中から、実行される実装を特定する動的束縛絞込ステップと、
    前記プログラム取得ステップで取得したプログラムに対してテストを実行するテスト実行ステップと、
    前記プログラム取得ステップで取得したプログラムにおける動的束縛による実装候補の中から、前記動的束縛絞込ステップで特定した実装以外の実装候補を除いた範囲を基準として、前記テスト実行ステップにおけるテスト結果に基づいて、カバレッジを測定するカバレッジ測定ステップと、
    を有するソフトウェアカバレッジ測定方法。
JP2005114418A 2005-04-12 2005-04-12 ソフトウェアカバレッジ測定装置及び方法 Active JP4536576B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005114418A JP4536576B2 (ja) 2005-04-12 2005-04-12 ソフトウェアカバレッジ測定装置及び方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005114418A JP4536576B2 (ja) 2005-04-12 2005-04-12 ソフトウェアカバレッジ測定装置及び方法

Publications (2)

Publication Number Publication Date
JP2006293740A JP2006293740A (ja) 2006-10-26
JP4536576B2 true JP4536576B2 (ja) 2010-09-01

Family

ID=37414251

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005114418A Active JP4536576B2 (ja) 2005-04-12 2005-04-12 ソフトウェアカバレッジ測定装置及び方法

Country Status (1)

Country Link
JP (1) JP4536576B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5743663B2 (ja) * 2011-04-13 2015-07-01 日本電気通信システム株式会社 テスト支援システム、テスト支援方法、及びプログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01271848A (ja) * 1988-04-22 1989-10-30 Nec Corp プログラム開発評価システム
JPH0258136A (ja) * 1988-08-24 1990-02-27 Mitsubishi Electric Corp ソフトウェア試験カバレージ測定装置
JPH02239340A (ja) * 1989-03-14 1990-09-21 Hitachi Electron Eng Co Ltd プログラムトレーサにおける命令網羅カバレージ率算出方式
JPH06195242A (ja) * 1992-12-25 1994-07-15 Hitachi Ltd プログラムの走行ステップ確認方法

Also Published As

Publication number Publication date
JP2006293740A (ja) 2006-10-26

Similar Documents

Publication Publication Date Title
CN100576172C (zh) 一种通过分析代码变化确定功能点变化的方法
US8745595B2 (en) Information processing apparatus and method of acquiring trace log
US20140365990A1 (en) Software evaluation device and method
US20020129329A1 (en) Method for creating an application software model
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
KR101106595B1 (ko) 소프트웨어 테스트의 자동화 장치 및 그 방법
EP3234851B1 (en) A system and method for facilitating static analysis of software applications
US7941787B2 (en) Performance tuning method and apparatus, computer-readable program and computer-readable storage medium
JP5208635B2 (ja) プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム
US20080250231A1 (en) Program code conversion apparatus, program code conversion method and recording medium
JP2003186708A (ja) アクセス権矛盾検出装置および解析ルール作成装置
US10229273B2 (en) Identifying components for static analysis of software applications
US20070050427A1 (en) System and method for validating application globalization issues and computer product
JP6486574B2 (ja) プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム
US9189372B2 (en) Trace coverage analysis
US20090217259A1 (en) Building Operating System Images Based on Applications
US8302084B2 (en) Using compiler commentary for configuring an integrated development environment
TWI437457B (zh) 分析目標物件之依賴關係的方法
JP2009104252A (ja) デバッグ支援装置およびデバッグ支援方法
JP4536576B2 (ja) ソフトウェアカバレッジ測定装置及び方法
CN112748927A (zh) 一种项目接口解析方法及相关装置
JP7380851B2 (ja) テストスクリプト生成装置、テストスクリプト生成方法及びプログラム
JP4869581B2 (ja) カバレッジ計測システム及びそのプログラム
JP2009244969A (ja) プログラム動作比較装置及び方法及びプログラム
JP4783612B2 (ja) 拡張言語仕様指定方法、プログラム開発方法、プログラム及びコンピュータ読み取り可能な記憶媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080111

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091119

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100615

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: 20100616

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

Free format text: PAYMENT UNTIL: 20130625

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4536576

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

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

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250