(57)【要約】【課題】  コンピュータプログラムをテストし、デバッグするための再配置可能計測タグを作成すること。【解決手段】  タグはオフセットとベースを組み合わせたものに等しい値をもつ。タグオフセットの値が最初に判断され、次にタグは計測されるソースコード内の関心のあるエリアに挿入される。ベース値はコンピュータプログラムのオブジェクトコードがリンクされて実行可能コードが作られるときセットされる。ベース値は各タグが他のどのタグに対してもユニークな値をもつように解決される。タグ付けステートメントで計測されるソースコードは２つ以上のコンピュータに置いておくことが可能である。計測されたソースコードは２つ以上のコンピュータ上でコンパイルすることが可能である。各タグ付けステートメントに関連づけられたユニークな値は計測データベースに記録され、計測されたプログラムをその実行中に容易に観察できる。【選択図】        図８
2006012193.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて複数のソースコード・モジュールからなるコンピュータプログラムを計測する方法であって、コンピュータシステムのプロセッサにより実行される前記方法は、
コンピュータ読み取り可能媒体に収められた各ソースコード・モジュールごとに
前記コンピュータ読み取り可能媒体からソースコード・モジュールを読み出し、
コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、ソースコード・モジュールにユニークである名前をもつベース変数を生成し、
読み出されたソースコード・モジュール内の各計測ポイントごとに、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、
読み出されたソースコード・モジュール内で計測ポイントにユニークであるオフセット値を生成し、
タグ付け変数を生成されたオフセット値とベース変数の値を組み合わせたものにセットするための、タグ付け割り当てステートメントを計測ポイントの個所に挿入し、
コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するコンパイラ・ソフトウェア・モジュールの命令を実行することにより、タグ付け割り当てステートメントが挿入された計測済みソースコード・モジュールをコンパイルし、
各生成されたベース変数ごとに、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、生成されたオフセット値とベース変数の値を組み合わせたものが各計測ポイントをユニークに識別するようにベース変数をユニークな値にセットするソースコード・ステートメントを生成し、
コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記コンパイラ・ソフトウェア・モジュールの命令を実行することにより、生成されたソースコード・ステートメントをコンパイルし、
コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するリンク・ソフトウェア・モジュールの命令を実行してコンパイルされた計測済みソースコード・モジュールをコンパイルされた生成済みソースコード・ステートメントとリンクしてリンク済みプログラムを作成し、かつリンク済みプログラムをコンピュータ読み取り可能媒体に収めることにより、リンク済みプログラムの実行中にタグ付け変数が各計測ポイントでユニークな値にセットされるようにすることを特徴とする方法。
【請求項２】
請求項１に記載の方法において、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、生成済みベース変数のための宣言ステートメントを読み出された各ソースコード・モジュール内に挿入することをさらに含み、前記宣言ステートメントは生成済みベース変数がソースコード・モジュールの外部に定義されていることを示していることを特徴とする方法。
【請求項３】
請求項１に記載の方法において、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、タグ付け変数のための宣言ステートメントを読み出された各ソースコード・モジュール内に挿入することをさらに含み、前記宣言ステートメントはタグ付け変数がソースコード・モジュールの外部に定義されていることを示していることを特徴とする方法。
【請求項４】
請求項１に記載の方法において、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、生成済みベース変数の名前を情報データリポジトリにストアすることをさらに含むことを特徴とする方法。
【請求項５】
請求項１に記載の方法において、ユニークな値をベース変数に割り当てることは、各計測ポイントでのタグ付け変数のユニークな値があらかじめ決めた値範囲を回避するように値をベース変数に割り当てることを含むことを特徴とする方法。
【請求項６】
複数のソースコード・モジュールからなるコンピュータプログラムを複数のタグ付け割り当てステートメントで計測するシステムであって、各タグ付け割り当てステートメントはオフセット値をベース値と組み合わせることによってタグ付け変数に対してユニークな値を指定するためのものであるものにおいて、該システムは、
コンピュータ読み取り可能媒体に収められたオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールおよびベース値リゾルバ・ソフトウェア・モジュールを読み出す手段と、
前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行して、コンピュータ読み取り可能媒体からコンピュータプログラムのソースコード・モジュールを読み出し、タグ付け割り当てステートメントを読み出されたソースコード・モジュールの中に挿入し、各タグ付け割り当てステートメントごとにオフセット値を生成し、かつオフセット値をコンピュータ読み取り可能媒体に収める手段と、
前記ベース値リゾルバ・ソフトウェア・モジュールの命令を実行して、タグ付け変数の値が各タグ付けステートメントでユニークになるように、複数のソースコード・モジュールの各ソースコード・モジュールごとにベース値を生成し、かつベース値をコンピュータ読み取り可能媒体に収める手段とを備えたことを特徴とするシステム。
【請求項７】
請求項６に記載のシステムにおいて、オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行する手段は第１コンピュータ上に置かれているコンピュータプログラムの第１ソースコード・モジュールに少なくとも１つのタグ付け変数割り当てステートメントを挿入し、第２コンピュータ上に置かれているコンピュータプログラムの第２ソースコード・モジュールに少なくとも１つの他のタグ付け変数割り当てステートメントを挿入することを特徴とするシステム。
【請求項８】
請求項６に記載のシステムにおいて、タグ付けオフセット・インスツルメンタ・ソフトウェア・モジュールの命令を実行する手段は各タグ付け割り当てステートメントを計測データレポジトリに格納することを特徴とするシステム。
【請求項９】
請求項６に記載のシステムにおいて、ベース値リゾルバ・ソフトウェア・モジュールの命令を実行する手段はタグ付け変数のための以前に割り当てられた値範囲をリトリーブし、各タグ付け変数割り当てステートメントでのタグ付け変数の値がタグ付け変数のための以前に割り当てられた値範囲を回避するようにベース値を判断することを特徴とするシステム。
【請求項１０】
コンピュータプログラムを計測するために使用されるタグ付け変数のための複数のユニークな値を生成する方法であって、コンピュータのプロセッサにより実行される前記方法は、
コンピュータ読み取り可能媒体に収められたコンピュータプログラムを読み出し、
読み出されたコンピュータプログラム内の各計測ポイントごとに、コンピュータ読み取り可能媒体に収められ、コンピュータ上で実行するオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、タグ付け変数をある値にセットするタグ付け割り当てステートメントを挿入し、
コンピュータ読み取り可能媒体に収められ、コンピュータ上で実行するコンパイラ・ソフトウェア・モジュールの命令を実行することにより、挿入されたタグ付け割り当てステートメントと共にコンピュータプログラムのオブジェクトコードを生成し、
コンピュータプログラムのオブジェクトコードがリンクされて実行可能コードが作られたとき、コンピュータ読み取り可能媒体に収められ、コンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、各タグ付け割り当てステートメントがタグ付け変数をユニークな値にセットするようにコンピュータプログラムを調整し、
調整されたコンピュータプログラムをコンピュータ読み取り可能媒体に収めることを特徴とする方法。
【請求項１１】
請求項１０に記載の方法において、プロセッサはタグ付けオフセット値をタグ付けベース値と組み合わせ、タグ付け割り当てステートメントにおいてタグ付け変数を組み合わされた値にセットすることを特徴とする方法。
【請求項１２】
請求項１０に記載の方法において、コンピュータプログラムの調整はタグ付けベース値を設定することを含むことを特徴とする方法。
【請求項１３】
請求項１０に記載の方法において、コンピュータプログラムは複数のモジュールを含み、プロセッサはタグ付けオフセット値をタグ付けベース値と組み合わせ、タグ付け割り当てステートメントにおいてタグ付け値を組み合わされた値にセットして、その組み合わせが各計測ポイントをユニークに識別するように値を生成し、各モジュールのベース値はコンピュータプログラムが調整されるとき設定されることを特徴とする方法。
【請求項１４】
請求項１０に記載の方法において、プロセッサはタグ付け変数を定数値にセットし、コンピュータプログラムの調整は各タグ付け割り当てステートメントの定数値をユニークな値にセットすることを含むことを特徴とする方法。
【請求項１５】
コンピュータシステム上で、コンピュータプログラムの複数のソースコード・モジュールをタグ付け割り当てステートメントで計測し、コンピュータプログラムのテストをサポートする方法であって、コンピュータシステムのプロセッサにより実行される前記方法は、
コンピュータ読み取り可能媒体に収められた各ソースコード・モジュールを読み出し、
コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、タグ付け割り当てステートメントのオフセット値をセットし、
コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、セットされたオフセット値とベース値を組み合わせたものをタグ付け変数に割り当てるタグ付け割り当てステートメントを読み出されたソースコード・モジュールの中に挿入し、
コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するリンク・ソフトウェア・モジュールの命令を実行してコンピュータプログラムを表すオブジェクトコードがリンクされて実行可能コードが作られるときタグ付け割り当てステートメントのベース値をセットし、かつベース値をコンピュータ読み取り可能媒体に収めることを含み、ベース値はタグ付け変数割り当てステートメントの中のタグ付け変数の値がユニークになるように解決されることを特徴とする方法。
【請求項１６】
請求項１５に記載の方法において、オフセット値をセットする際に、各ソースコード・モジュール内のオフセット値の最高値はあらかじめ決めた数の新しいタグ付け割り当てステートメントがあとで挿入できるように十分に大きくセットされ、コンピュータプログラム内のすべてのタグ付け割り当てステートメントの中のタグ付け変数の値がユニークに保たれるようにすることを特徴とする方法。
【請求項１７】
請求項１５に記載の方法において、タグ付け割り当てステートメントのオフセット値は計測データレポジトリに格納されることを特徴とする方法。
【請求項１８】
コンピュータプログラムを計測するために使用されるタグ付け変数のために複数のユニークな値をコンピュータシステムに生成させるための命令を収めているコンピュータ読み取り可能媒体であって、その生成は、
コンピュータ読み取り可能媒体に収められたコンピュータプログラムを読み出し、
読み出されたコンピュータプログラム内の各計測ポイントごとに、前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより、タグ付け変数をある値にセットするタグ付け割り当てステートメントを挿入し、
前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより、挿入されたタグ付け割り当てステートメントと共にコンピュータプログラムのオブジェクトコードを生成し、
コンピュータプログラムのオブジェクトコードがリンクされて実行可能コードが作られるとき、前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより、各タグ付け割り当てステートメントがタグ付け変数をユニークな値にセットするようにコンピュータプログラムを調整し、
調整されたコンピュータプログラムをコンピュータ読み取り可能媒体に収めることによって行われることを特徴とするコンピュータ読み取り可能媒体。
【請求項１９】
請求項１８に記載のコンピュータ読み取り可能媒体において、プロセッサはタグ付け割り当てステートメントにおいてタグ付けオフセット値をタグ付けベース値と組み合わせることを特徴とするコンピュータ読み取り可能媒体。
【請求項２０】
請求項１８に記載のコンピュータ読み取り可能媒体において、コンピュータプログラムの調整はタグ付けベース値を設定することを含むことを特徴とするコンピュータ読み取り可能媒体。
【請求項２１】
請求項１８に記載のコンピュータ読み取り可能媒体において、コンピュータプログラムは複数のモジュールを含み、タグ付け割り当てステートメントはタグ付けオフセット値をタグ付けベース値と組み合わせて、その組み合わせが各計測ポイントをユニークに識別するように値を生成し、各モジュールのベース値はコンピュータプログラムが調整されるとき設定され、これらの機能は全て前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより実施されることを特徴とするコンピュータ読み取り可能媒体。
【請求項２２】
請求項１８に記載のコンピュータ読み取り可能媒体において、プロセッサはタグ付け変数を定数値にセットし、コンピュータプログラムの調整は各タグ付け割り当てステートメントの定数値をユニークな値にセットすることを含むことを特徴とするコンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はテストとデバッグのためにコンピュータプログラムを計測することに関し、さらに具体的にはタグ付けステートメントを使用してコンピュータプログラムを計測することに関する。
【背景技術】
【０００２】
ソフトウェア開発プロセスは、多数のソースコード・モジュールが集まって完全なコンピュータプログラムを構成しているソースコード・モジュールを独立に作成することからなっているのが代表的である。そのあと、これらのソースコード・モジュールはコンパイルされ、１つにリンクされて実行可能なコンピュータプログラムが作られている。複数のソフトウェア開発者はこれらのソースコード・モジュールの１つまたは２つ以上を書いていることがあるので、ソースコード・モジュールまたはそのコンパイル済みバージョンは単一のコンピュータに転送されてからリンクされているのが代表的である。実行可能コンピュータプログラムが生成されると、ソフトウェア開発者は標準のテストとデバッグ手法を使用してコンピュータプログラムをテストし、デバッグすることができる。
【０００３】
ソースコード・モジュールは非常に多数であるため、その結果のコンピュータプログラムは非常に複雑化することがよくある。コンピュータプログラムをテストしてからデバッグすることは、どのソフトウェア開発プロセスにおいても重要なステップであり、これらのステップは複雑なコンピュータプログラムではますます重要になっている。事実、このようにデバッグを行うこと（つまり、エラーを見つけて訂正すること）はコンピュータプログラムの最終ユーザが受領する前の契約上の要件となっている場合さえある。コンピュータプログラムをテストし、デバッグする難しさは、プログラムが複雑化すると共に増加するのが一般的であり、このことは驚く程のことではない。また、複雑なコンピュータプログラムをテストするときの困難性はソフトウェア開発者が多くなると増加することがよくある。
【０００４】
コンピュータプログラムをテストするとき、ソフトウェア開発者は各ソースコード・モジュールが相互に独立して、その意図する機能を正しく実行するかを確かめる共に、すべてのソースコード・モジュールを含んでいるコンピュータプログラムもその意図する機能を正しく実行するかを確かめる必要があるのが一般的である。コンピュータプログラムを正しくデバッグするためには、ソフトウェア開発者はコンピュータプログラムの実行をトレース（追跡）する必要があるのが代表的である。実行をトレースすると、コンピュータプログラムのどのステップが実行されたか、さらに、これらのステップが実行された順序を正確に知ることができる。
【０００５】
ソースコード計測は実行可能なタグ付け割り当てステートメント、つまり、「タグ」を各所のタグ付けポイントでコンピュータプログラムのソースコード・モジュールの中に挿入してから、そのソースコード・モジュールをコンパイルすることからなっているのが代表的である。タグ付けポイントとは、機能への入口点や出口点、選択ステートメントの代替ブランチ、およびループ・ステートメントの実行といったように、ソフトウェア開発者がその実行中にコンピュータプログラムのステート（状態）を知りたいと思っている、ソースコード・モジュール内の関心のある場所のことである。各タグ付けポイントで、タグ付け割り当てステートメントはタグ付け変数にユニークな値を割り当てているのが代表的である。計測データベース (instrumentation database - "IDB") は各タグ付けポイントでタグ付け変数に割り当てられたタグ付け値のような、タグ付けポイントに関するデータ、およびタグ付けポイントでのソースコード・モジュールに関する情報を収めている。
【０００６】
そのあと、ソフトウェア開発者は、計測されたコンピュータプログラムを実行し、タグ付け変数の現在値をモニタしながらコンピュータプログラムの実行をトレースすることができる。コンピュータプログラムの実行中に得られたタグ付け値をセーブしておくと、コンピュータプログラムの実行をトレースすることができる。コンピュータプログラムが実行されたあと、これらのタグ付け値を参照すると、コンピュータプログラム内のタグ付けポイントを知ることができる。従って、タグはコンピュータプログラムの特定のフラグメント（断片）の実行を知る手段となっている。
【０００７】
計測は「アドレス別 (byaddress)」または「値別  (by value)」方式を使用して実行できるのが代表的である。アドレス別計測方式では、ユニークなアドレスをもつユニークなメモリ・ロケーションは各タグ付けポイント用に予約されており、タグ付けステートメントはタグ付け値をそのユニークなロケーションにストアしている。例えば、単一のタグ付け値が使用でき、そのタグ付け値がユニークなロケーションに書かれていれば、ソフトウェア開発者はコンピュータプログラム内の対応するタグ付けポイントが実行されたと推量することができる。値別計測方式では、異なるタグ付け値が単一のメモリ・ロケーションに書かれ、そのロケーション自体ではなく、そのロケーションに書かれたタグ付け値がコンピュータプログラム内の特定のタグ付けポイントに対応している。専用プローブはこれらのタグ付け値をインターセプトし、それらをファイルに書くのが一般であるので、ソフトウエア開発者はそれを調べて、コンピュータプログラムをデバッグするときのツールとして使用することができる。
【０００８】
表１はタグで計測される前のソースコード・モジュールの例を示したものである。ソースコード・モジュール１は、表１に示すように、変数”Ａ”への２つの変数割り当てステートメント(In.4 と In.8)、"While" ループ(In.5)、関数コール(In.7)、および "if-then-else" ステートメント(Ins.10-16) の擬似コードを含んでいる。ソースコード・モジュール１はタグを含んでいないので、その実行可能コードはタグ付け値を発行しない（つまり、タグ付け割り当てステートメントを実行しない）。従って、ソフトウェア開発者はソースコード・モジュール１の発行タグ付け値の参照テーブルにアクセスできないので、例えば、"function_!" (In.7) がこのソースコード・モジュールによって実行されたかどうかを確かめることができない。
【０００９】
【表１】
2006012193.tif 000003
【００１０】
表２は値別計測方式においてタグで計測した後のソースコード・モジュール１の例を示したものである。インスツルメンタ (instrumenter) はタグ付け変数  "AMC_Control_Port" (In.2) の宣言をソースコード・モジュール１に挿入している。（アドレス別計測方式では、インスツルメンタは複数のタグ付け変数の宣言を挿入するのが代表的である。）また、インスツルメンタは表１に示す擬似コードを含んでいるソースコード・モジュール１内の各所のタグ付けポイント (Ins. 7, 11, 15, 19, 21, 25) でタグ付け割り当てステートメントを挿入している。計測されたソースコード・モジュール１を含んでいる実行可能コンピュータプログラムは実行中にタグを発行する。従って、ソフトウェア開発者は発行タグ付け値のテーブルにアクセスして、ソースコード・モジュール１のどのステップが実行されたかを確かめることができる。例えば、ソフトウェア開発者は値として "0"(In. 7) をもつタグ付け変数が発行タグ付け値のテーブルにストアされていることを確かめることによって、ソースコード・モジュール１内の "function_1" (In. 8) が実行されたかどうかを確かめることができる。"0" がストアされていれば、ソフトウェア開発者は "function_1" が実行されたと推量することができ、"0" がストアされていなければ、ソフトウェア開発者は "function_1" が実行されなかったと推量することができる。
【００１１】
【表２】
2006012193.tif 000004
【００１２】
図１は、値別ソースコード計測方式で使用される代表的なモニタリングシステムを示す図である。コンピュータプログラムがタグ付け割り当てステートメントで計測されると、専用テスト機器はコンピュータプログラムの実行をモニタする。コンピュータプログラムがＣＰＵ  １００内で実行されているとき、専用ハードウェア１０３はメモリ１０２内の特定のロケーションへのライト(write) を検出する。値別計測方式では、この専用ハードウェアはタグ付け変数のアドレスを知っている。コンピュータプログラムが実行されているとき、データはアドレス・データバス１０１を通してＣＰＵとメモリの間で受け渡しされる。プローブ１０５はアドレスバスをモニタし、タグ付け変数のアドレス・ロケーションへのデータ・ライトを探し出す。プローブはタグ付け変数へのライトを見つけると、プローブはデータバス・コネクション１０４からタグ付け値をコピーする。そのあと、プローブはタイムスタンプをタグ付け値に付けてから、タグ付け値をコネクション１０６経由でデータリダクション・プロセッサ (data reduction processor) １０７に渡す。データリダクション・プロセッサはどのタグ付けポイントが追加処理が必要であるかを判断する。例えば、データリダクション・プロセッサは関数入口と出口タグ付け変数をペアにし、タイムスタンプの差を計算してそれぞれの関数の実行中に消費された時間量を判断できるようにする。そのあと、データリダクション・プロセッサはレポートを作成するが、このレポートには、タグ付け値とそれぞれのタイムスタンプのリスト、「パフォーマンス」統計と共にタグ付け値で示された実行済み関数のリストおよびその実行を示す実行済みタグ付け値の圧縮リスト（例えば、「カバレッジマップ」）を含めることが可能である。また、このレポートには、他の情報を含めることもできる。データリダクション・プロセッサはこのレポートをワークステーションに転送し、そこからレポートはグラフィカルユーザインタフェース (graphical user interface - "GUI") １０８に渡される。ＧＵＩ  １０８はデータリダクション・プロセッサからのレポートに入っている、タグ付け値に対応するタグ付けポイントを、ＩＤＢ  １０９にストアされているデータを使用して判別する。そのあと、ＧＵＩ  １０８は実行のフローを示すタグ付けポイントの判別のほかに、追加情報を含めることができる複数のレポートのどれかを作成する。レポートされる各タグ付けポイントに頻繁に付加される追加情報としては、タグ付け割り当てステートメントがそこから実行されたソースコード・モジュールの名前、タグ付け割り当てステートメントを含んでいる関数の開始と終了の行番号、およびタグ付けポイントの性質を示す他の情報がある。ソフトウェア開発者はＧＵＩからの実行トレースレポートをモニタして、コンピュータプログラムが期待パラメータの範囲内で実行されているかどうかを判断する。
【００１３】
あるコンピュータプログラムがその実行中にタグ付け値を出すためには、そのコンピュータプログラムは、まず、タグ付け割り当てステートメントを備えていなければならない。インスツルメンタはタグ付け割り当てステートメントを、ソースコード・モジュールのコンパイルに先立って行われる計測パス期間にコンピュータプログラムのソースコード・モジュールに挿入するのが普通である。値別タグ付け方式を使用するときは、タグ付け割り当てステートメントは "AMC_control_port = 0x12345678"のように単純形式になっているのが通常で、そこでは、モニタされたタグ付け変数 "AMC_control_port" はユニークなタグ付け値 "0x12345678" が割り当てられている。図２はタグ付け値形式の例を示している。この例では、値は３２ビットの整数になっている。計測パス期間に、インスツルメンタは挿入されたタグの各々のロケーションに関する関係情報を記録し、この情報は実行期間中のコンピュータプログラムの挙動を解釈するためにあとで使用することができる。上述したように、プローブはタグ付け変数が書かれるアドレスをモニタする。例えば、特定のタグが"read_data" と名づけた関数への入口を表しているとすると、実行時にコンピュータプログラムがこのタグで割り当てられた特定のタグ付け値を発行していれば、ソフトウェア開発者はコンピュータプログラムが関数"read_data" への入口にあるステートメントで実行されたものと推量することができる。
【００１４】
従来の計測方式では、コンピュータプログラムを表すソースコード・モジュールは最初にコンパイラのプリプロセッサによって前処理されている。このプリプロセッサはマクロを展開し、コメントを除去し、インクルードファイルを展開している。そのあと、インスツルメンタはこれらの前処理されたソースコート・モジュールを受け取り、タグ付け割当ステートメントを追加している。コンパイラは計測されたソースコード・モジュールからオブジェクトコードを生成し、そのあとリンカはオブジェクトコードを結合して実行可能コードを作っている。
【００１５】
コンピュータプログラムのすべてのソースコード・モジュールが同時に計測されるときは、インスツルメンタは各タグ付けポイントにユニークなタグ付け値を割り当てることができる。しかし、種々のソースコード・モジュールが（例えば、異なるソフトウェア開発者によって）異なる時間に計測され、コンパイルされる場合は、問題が発生することになる。具体的には、インスツルメンタは２つの異なるタグ付けポイントで同じタグ付け値を割り当てることがある。その結果、コンパイラがこのタグ付け値を出したとき、これはタグ付けポイントをユニークに識別していないので、ソフトウェア開発者は実行フローをトレースすることが困難になる場合がある。
【００１６】
表３は表２に示す、計測されたソースコード・モジュール１を示し、表４は計測されたソースコード・モジュール２を示している。これらのソースコード・モジュールはどちらも、異なる時間期間で計測を行うと起こるように、他方に割り当てられたタグ付け値を無視して計測されている。従って、これらのソースコード・モジュールの両方を含んでいるコンピュータプログラムが、例えば、実行中に値が"0" であるタグを出したとすると、ソフトウェア開発者はプログラムがソースコード・モジュール１の function_1 (In. 8) へのコールを実行したのか、あるいはプログラムがソースコード・モジュール２の "if" ステートメント(In. 6) を実行したのか分からないことになる。実際には、ソースコード・モジュール１は１０個のタグ付け値をソースコード・モジュール２と共有している。従って、コンピュータプログラムの実行中に出されたどのタグも、それがソースコード・モジュール１で出されたものかを確認することができず、１０番目のタグに続く、ソースコード・モジュール２内のタグだけがユニークな値を出すことになる。
【００１７】
【表３】
2006012193.tif 000005
【００１８】
【表４】
2006012193.tif 000006
【発明の開示】
【発明が解決しようとする課題】
【００１９】
いくつかのインスツルメンタは、これから生成されるコンピュータプログラムのバージョンでも使用される、コンピュータプログラムの以前バージョンからソースコード・モジュールに対して生成されたＩＤＢを参照するためのメソッドを用意している。ソースコード・モジュールがコンピュータプログラムの以前バージョン以後に変更されていなければ、計測プロセスは変更されなかったソースコード・モジュールを再計測しないことで効率化されている。しかし、コンピュータプログラムの新バージョンの計測プロシージャで割り当てられたタグ付け値がそのコンピュータプログラムの新バージョンでも使用される、コンピュータプログラムの以前バージョンで割り当てられたタグ付け値と矛盾していないことを確かめる注意が必要である。
【００２０】
いくつかの従来システムは、上記に提示したこの効率化された増分計測プロシージャをサポートしている。このアプローチでは、変更されたソースコード・モジュールが１つだけであれば、そのソースコード・モジュールだけを再計測し、コンパイルするだけでコンピュータプログラム全体をリンクし直している。しかし、これらの従来システムには、ソフトウェア開発者が開発サイクルのその時点までに割り当てられたすべてのタグ付け値を含んでいるＩＤＢのセットを、インスツルメンタに指示しなければならないという制約がある。構成マネージャがソフトウェア開発者と協力してソースコード・モジュールの制御を調整しているような集中化コンパイル環境では、この制約はそれほど制限的ではない。このような集中化環境のソフトウェア開発者は制御化されたプロシージャでソースコード・モジュール、オブジェクトコード・ファイル、およびＩＤＢの特定バージョンを見つけることができるので、コンピュータプログラムの以前バージョンからのＩＤＢを識別することは比較的簡単であることが想像される。しかし、このメカニズムは最近の多くのソフトウェア開発プロジェクトの典型である、大規模な非集中化環境では挫折している。ソフトウェア開発者グループが分散化すると、各グループは多数のプロジェクトで、あるいは同一プロジェクトに属する種々ソフトウェア開発者グループのために使用されるオブジェクトコードのダイナミックリンクライブラリまたはコンパイルライブラリの構築を担当することになる。コンピュータ・プログラムの新バージョンの作成に対する制御が集中化されていないと、これらのライブラリの各々は独立に計測されることになるので、インスツルメンタによって割り当てられたタグ付け値に矛盾が起こることになる。実行時には、これらの矛盾するタグ付け値は、同一タグ付け値が複数のソースコード・モジュールを指すことがあるため分析プロセスを混乱させ、また、コンピュータプログラムのモニタリングツールはどのタグ付け値がどのソースコード・モジュールを表しているのかが分からなくなる。
【００２１】
さらに、集中化コンパイルモデルはコンピュータプログラムのバージョンのパラレル作成をサポートしていない。最近のソフトウェアプロジェクトは非常に大規模であることが頻繁であるために、コンピュータプログラムのコンパイルとリンクを１台のマシンで行うことは実用目的に合っていない。ネットワーク環境では、コンパイルプロセスは多くのマシンに分散されているので、これらのマシンがソースコード・モジュールをパラレルにコンパイルすることが可能で、コンパイルは全時間の数分の１で完了し、代表例として全時間の１／ｎ（ただし、ｎはコンパイルに関与するマシンの台数）で完了している。従って、コンピュータプログラムのあるバージョンが１０００個のソースコード・モジュールからなり、ソースコード・モジュールの１００個が１０台のマシンでコンパイルされるとすれば、開発者はコンパイルが行われる１０台のマシンの各々でも計測を行う必要がある。タグ付け値の解決がこれらのマシン間で正しく調整されていないと、その結果のコンピュータプログラムは種々のソースコード・モジュールに挿入されたタグ付け値に無数の矛盾を含むことになる。
【課題を解決するための手段】
【００２２】
本発明の実施例は、複数のソースコード・モジュールからなるコンピュータプログラムを、タグ付け割り当てステートメントを使用して計測する方法およびシステムを提供している。各タグ付け割り当てステートメントにおけるタグ付け変数のユニークな値は、オフセット値とベース値を組み合わせたものに等しい値をタグ付け変数に割り当てることによって得られる。本発明のオフセット・タグ付けインスツルメンタはタグ付け割り当てステートメントで計測しようとする各ソースコード・モジュールごとにユニークなベース変数を生成する。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュールを調べ、計測ポイントの個所にタグ付け割り当てステートメントを挿入する。挿入されたタグ付け割り当てステートメントはオフセット値と、そのソースコード・モジュールの生成されたベース変数とを組み合わせたものに等しい値にタグ付け変数をセットする。オフセット・タグ付けインスツルメンタは、ソースコード・モジュール内の各タグ付け割り当てステートメントごとにユニークなオフセット値を生成する。コンパイラは計測されたソースコード・モジュールからオブジェクトコードを生成する。ベース値リゾルバは、生成されたオフセット値と生成されたベース変数の値の各組み合わせが各計測ポイントをユニークに識別するように、各生成されたベース変数ごとにユニークな値を割り当てるソースコード・ステートメントを生成する。コンパイラは生成されたソースコード・ステートメントをコンパイルする。リンカはコンパイルされた計測済みソースコード・モジュールをコンパイルされた生成済みソースコード・ステートメントとリンクし、リンクされたプログラムを作り、このリンクされたプログラムの実行期間に、タグ付け変数が各計測ポイントでユニークな値にセットされるようにする。各生成済みベース変数のベース値の判断はリンク時まで延期されるので、ベース値リゾルバは各モジュール内の各タグ付け割り当てステートメントがタグ付け変数を、リンクされたすべてのモジュール間でユニークである値にセットしているかを確かめることができる。
【発明を実施するための最良の形態】
【００２３】
本発明の実施例によれば、複数のコンピュータでタグ付けによるパラレル計測をサポートする計測タグ付け方法および装置が提供されている。本発明の実施例によれば、タグ付け値が以前に計測されたソースコード・モジュールと、または異なるコンピュータシステムで計測されたソースコード・モジュールと矛盾することなく、１つまたは２つ以上の変更されたソースコード・モジュールの計測を可能にするオフセット・タグ付けインスツルメンタが提供されている。従来のタグ付け割り当てステートメントを修正すれば、これらの計測機能を拡張することが可能である。
【００２４】
オフセット・タグ付けインスツルメンタは、タグ付け値をタグ付けポイントに実際に関連づけるのを、計測されたプログラムが実行されるまで延期することによって各タグ付けポイントにユニークなタグ付け値が割り当てられることを確かめる。オフセット・タグ付けインスツルメンタは、タグ付けベース変数とタグ付けオフセットを組み合わせてタグ付け変数のタグ付け値を作るようにするタグ付け割り当てステートメントを採用している。各ソースコード・モジュールはユニークなタグ付けベース変数をもち、各タグ付けポイントはソースコード・モジュール内でユニークであるタグ付けオフセット値をもっている。計測時に、オフセット・タグ付けインスツルメンタは一定のタグ付けオフセット値をソースコード・モジュールのベース変数と組み合わせるタグ付け割り当てステートメントを挿入する。リンク時に、タグ付けベース値リゾルバは各タグ付けベース変数ごとにユニークなベース値を生成し、各タグ付け割り当てステートメントがユニークなタグ付け値を生成するようにする。そのあと、タグ付けベース値リゾルバは各タグ付け変数をそのユニークな値に初期化することを実行する。実行時に、タグ付け割り当てステートメントが実行されると、ソースコード・モジュールのタグ付けベース変数に割り当てられた値はタグ付け割り当てステートメントに割り当てられた一定のタグ付けオフセット値と組み合わされて、全モジュール間でユニークであるタグ付け値が作られる。そのあと、タグ付け変数はユニークなタグ付け値に等しい値にセットされる。このようにすると、異なる時間に計測されるソースコード・モジュールはタグ値に矛盾を引き起こすことなく、ひとつにリンクすることができる。これらのタグ付け割り当てステートメントがリンク時「再配置可能」と呼ばれるのは、特定のステートメントに割り当てられたタグ付け値の範囲がリンク時に変化することがあるためである。
【００２５】
ユニークなタグ付け値はタグ付けオフセット値とタグ付けベース変数の値を組み合わせたものである。一実施例では、各ソースコード・モジュールのオフセット値は"0" の値で始まっている。そのあと、オフセット・タグ付けインスツルメンタは、オフセット・タグ付けインスツルメンタが新しいタグ付け割り当てステートメントをソースコード・モジュールに追加するたびに、タグ付けオフセット値を１ずつインクリメントしていく。従って、１０個のタグ付け割り当てステートメントを含んでいるソースコード・モジュールは０から９までのタグ付け値の範囲と次のタグ付けオフセット値１０をもつことになる。次のタグ付けオフセット値は別のタグ付け割り当てステートメントをソースコード・モジュールに挿入する必要が起こったとき使用されるタグ付けオフセット値を示している。各ソースコード・モジュールはユニークなベース変数をもっている。一実施例では、リンク時に判断されるときの、第１モジュールのタグ付けベース変数の値は０になっている。第２モジュールのタグ付けベース変数の値は第１モジュールの次のタグ付けオフセット値に第１モジュールのタグ付けベース値を加えたものである。例えば、第１モジュールの次のタグ付けオフセット値が１０であれば、第２モジュールのタグ付けベース値は１０（つまり、10 + 0）の値をもつことになる。第３モジュールのタグ付けベース変数の値は第２モジュールの次のタグ付けオフセット値に第２モジュールのタグ付けベース値を加えたものである。例えば、第２モジュールの次のタグ付けオフセット値が１２であれば、第３モジュールのタグ付けベース値は２２（つまり、12 + 10)である。それ以降のモジュールのタグ付けベース値は先行モジュールの次のタグ付けオフセット値の和に等しく、これは先行モジュールのベース値と次のタグ付けオフセット値の和と等価である。このようにすると、結果のタグ付け値はタグ付けオフセット値がタグ付けベース変数の値に加えられるとき、各タグ付け割り当てステートメントごとにユニークになる。図３はリンク時再配置可能タグ付け値の生成を示している。
【００２６】
図４は本発明の実施例に関連するＩＤＢのサンプルを示す図である。これらのＩＤＢはタグ付け値および計測に必要な他の情報を収めている。各ＩＤＢは１つのソースコード・モジュールを表すことができる。ＩＤＢ１  ３０１は計測されたソースコード・モジュールのタグ付けポイント０から９までを表すデータを収めている。ＩＤＢ１はタグ付けベース変数をもち、その値はタグ付けベース変数リゾルバによってリンク時に設定され、０になっており、さらに次のタグ付けオフセット値１０をもっている。ＩＤＢはタグ付けベース変数の名前を含んでいるので、タグ付けベース変数レゾルバはあるタグ付けベース変数に関連するＩＤＢを見つけることができ、このタグ付けベース変数はＩＤＢがリンク時再配置可能タグを含むタイプであることを示すのに役立っている。オフセット・タグ付けインスツルメンタはタグ付けポイントのデータと次のタグ付けオフセット値をストアする。同様に、ＩＤＢ２  ３０２は１２個のタグ付けポイントを表すデータと次のタグ付けオフセット値１２を収めている。ＩＤＢ１は次のタグ付けオフセット値１０をもっているので、タグ付けベース値リゾルバによって最終的にＩＤＢ２に割り当てられたタグ付けベース変数の値は１０になっている。同様に、ＩＤＢ３  ３０３のタグ付けベース値が２２であるのは、ＩＤＢ１の次のタグ付けオフセット値が１０であり、ＩＤＢ２の次のタグ付けオフセット値が１２であるためである（例えば、０から２１までのユニークな値はＩＤＢ１とＩＤＢ２ではすでに選択されている）。もちろん、前述したように、タグ付けベース値はそれぞれのオブジェクトコード・モジュールがリンクされて実行可能コードが作られるまでは生成されず、ユニークなタグ付け値自体は各タグ付け割り当てステートメントが実行されるまでは実際には生成されない。さらに、本発明のいくかの実施例では、２つ以上のタグ付けベース変数を任意のＩＤＢにストアすることが可能であり、各タグ付けベース変数は異なるタイプのタグ付けステートメントを示している。しかし、このようなタグ付け方式はここで説明している方式を単に拡張したものにすぎない。
【００２７】
表５、表６、および表７は計測されたソースコード・モジュール１、２、および３を示しており、これらはそれぞれ図４のＩＤＢ１、ＩＤＢ２およびＩＤＢ３に対応している。表５において計測されたソースコード・モジュールを表す擬似コードの先頭に示すように、オフセット・タグ付けインスツルメンタはタグ付け変数の宣言ステートメントを挿入しており、その宣言ステートメントは、この例では、"AMC_control_port" (In. 3)と名づけた external volatile unsigned long変数になっている。オフセット・タグ付けインスツルメンタはＩＤＢ１とソースコード・モジュール１に関連づけられたタグ付けベース変数である、"IDB1_base" (In. 4) の宣言も挿入している。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュールを調べ、９行目のように関心のあるポイントにタグ付け割り当てステートメントを挿入する。この特定タグ付け割り当てステートメントはfunction_1 (In. 10) へのコールが実行されることをソフトウェア開発者に警告する。オフセット・タグ付けインスルメンタによって挿入されたタグ付け割り当てステートメントはタグ付けベース変数値にタグ付けオフセット値を加えたものからなり、 "AMC_control_port =タグ付けベース変数  + 0x12345678" と類似の形式になっている。オフセット・タグ付けインスツルメンタはその終わりに到達するまで、このソースコード・モジュール内の関心のあるタグ付けポイントを継続する。表５に示すように、ソースコード・モジュール内の最後のタグ付けポイントはそのソースコード・モジュールの終わりに置かれており、タグ付け値 UDB1_baseにタグ付けオフセット値９  (In. 27)を加えた値をもつタグ付け割り当てステートメントによって表されている。オフセット・タグ付けインスツルメンタはこれらのタグ付け割り当てステートメントに関係するデータも、前述したようにＩＤＢ１に挿入する。
【００２８】
同様に、計測されたソースコード・モジュール２も、表６に示すように、タグ付け変数の宣言ステートメント "AMC_control_port" (In. 31)と変数の宣言  "IDB2_base" (in. 4) を含んでおり、これは計測されたソースコード・モジュール２のタグ付けベース変数を表している。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュール２を調べ、関心のある各所のポイントでタグ付け割り当てステートメントをソースコード・モジュールに挿入する。例えば、"AMC_control_port = IDB2_base + 1" (In. 11) で表されたタグ付け割り当てステートメントは実行されると、"if"ステートメント  ("A    12"(In. 8))の"then"  部分が実行されたことを示している。もっと正確には、このタグ付けステートメントのロケーションは変数 "A"に  "A - 10" (In. 12) の値が割り当てられたことも示している。ソースコード・モジュール内の最後のタグ付けポイントは "AMC_control_port = IDB2_base + 11" (In. 22) である。オフセット・タグ付けインスツルメンタは、ソースコード・モジュール２がタグ付け割り当てステートメント０から１１までと次のタグ付けオフセット値１２をもつことを示すデータをＩＤＢ２にストアする。
【００２９】
最後に、オフセット・タグ付けインスツルメンタは表７に示すソースコード・モジュール３を調べる。前の２ソースコード・モジュールと同じように、オフセット・タグ付けインスツルメンタは"AMC_control_port"変数  (In. 3) の宣言を挿入する。オフセット・タグ付けインスツルメンタはタグ付け変数 "IDB2_base"(In. 4) の宣言も挿入する。そのあと、オフセット・タグ付けインスツルメンタはタグ付け割り当てステートメントの使用によって、このソースコード・モジュール内の関心のあるタグ付けポイントを継続する。最後のタグ付け割り当てステートメント "AMC_control_port = IDB3_base + 6"(In. 10) はソースコード・モジュール３の終わりに置かれている。
【００３０】
【表５】
2006012193.tif 000007
【００３１】
【表６】
2006012193.tif 000008
【００３２】
【表７】
2006012193.tif 000009
【００３３】
図５は本発明の実施例によるソースコード・モジュールの計測のためのフローチャートを示している。オフセット・タグ付けインスツルメンタは各ソースコード・モジュールを選択し、宣言ステートメントとタグ付け割り当てステートメントを選択したモジュールに挿入し、データをＩＤＢにストアする。最初に、オフセット・タグ付けインスツルメンタは計測を必要とするソースコード・モジュールがまだ残っているかどうかを判断する（ステップ４０１）。計測を必要とするソースコード・モジュールが残っていなければ、オフセット・タグ付けインスツルメンタは終了する。しかし、計測を必要とするソースコード・モジュールがまだ残っていれば、オフセット・タグ付けインスツルメンタは次に計測するソースコード・モジュールを選択する（ステップ４０２）。次に、オフセット・タグ付けインスツルメンタはタグ付けオフセット値を０にリセットする（ステップ４０３）。オフセット・タグ付けインスツルメンタは新しい計測データベースをオープンし、その新ＩＤＢの名前を選択する（ステップ４０４）。また、オフセット・タグ付けインスツルメンタはこの選択した名前を使用して、計測すべきソースコード・モジュールに挿入する新しいタグ付けベース変数の名前を生成する。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュールを調べることを開始する（ステップ４０５〜４１１）。オフセット・タグ付けインスツルメンタはタグ付変数の宣言をソースコード・モジュールに挿入し（ステップ４０５）、そのあと、このソースコード・モジュールのタグ付けベース変数の宣言を挿入する（ステップ４０６）。これらの宣言はAMC_control_port、IDB1_ba se、IDB2_base 、およびIDB3_base の表５、表６、および表７に示す宣言に似ている。そのあと、オフセット・タグ付けインスツルメンタはループし、タグ付け割り当てステートメントを挿入する（ステップ４０７〜４１１）。オフセット・タグ付けインスツルメンタはタグ付けポイントがソースコード・モジュールに残っているかどうかを判断する（ステップ４０７）。タグ付けポイントが残っていれば、オフセット・タグ付けインスツルメンタはソースコード・モジュール内の次のタグ付けポイントを見つける（ステップ４０８）。次のタグ付けポイントを見つけると、オフセット・タグ付けインスツルメンタはタグ付け割り当てステートメントを挿入する（ステップ４０９）。このタグ付け割り当てステートメントは前述したように、"AMC_control_base = タグ付けベース変数プラス現タグ付けオフセット値" の形式になっているのが代表的である。さらに、タグ付けエントリが該当のＩＤＢに作られる（ステップ４１１）。このタグ付けエントリはそのタグ付けポイントのタグ付けオフセット値、タグ付けポイントでのソースコードの情報、およびインクリメントされたオフセットへの次のタグ付けオフセット値のセット状態を収めているのが普通である。そのあと、オフセット・タグ付けインスツルメンタはループし（ステップ４０７へ）、次のタグ付けオフセットを処理する。このソースコード・オブジェクトの計測を終えると、このソースコード・モジュールのＩＤＢはクローズされる（ステップ４１２）。そのあと、オフセット・タグ付けイ���スツルメンタはループし（ステップ４０１へ）、計測の必要があるソースコード・モジュールがほかにあるかどうかを判断する。
【００３４】
前述したように、タグ付けベース変数は計測プロシージャ期間または計測されたソースコード・モジュールのコンパイル時に値が割り当てられていない。タグ付けベース変数の値はリンク時に割り当てられるので、リンク・プロシージャだけを集中化する必要がある。従って、このプロシージャはコンピュータプログラムの新バージョンの代表的パラレルコンパイルをサポートしている。実行可能コンピュータプログラムをリンクするのと同じように、一実施例における計測リンカはタグ付けベース値リゾルバを含んでおり、このリゾルバは最終タグ付け値の間に矛盾が残らないように、各タグ付けベース変数に必要な値と各オブジェクトコード・ファイルが必要とするタグ付け値範囲を解決する。このプロセスはパラレルにコンパイルできる数千のソースコード・モジュールを含む巨大なコンピュータプログラムの計測をサポートするので、大量の時間が節減される。オブジェクトコード・ファイルのリンクが単一コンピュータで行われるときは、コンピュータプログラムの実行時に割り当てられる実際のタグ付け値を最終化する計測リンクプロセスも同じである。従って、変数 IDB1_base、IDB2_base およびIDB3_base は、図４および表５、表６、表７を参照して上述したように、コンピュータプログラムを表すオブジェクトコード・ファイルのリンク前は固定した値をもっていない。表８に示すように、計測リンカは解決されたタグ付けベース変数のソースコード・ステートメントを準備し、これはそのあとコンパイルされ、計測されたソースコード・モジュールのオブジェクトコード・ファイルとリンクされる。表８に示すように、計測リンカはＩＤＢ１のタグ付けベース変数 IDB1_baseを０の値(In. 3) にセットするソースコードを準備する。同様に、ＩＤＢ２のタグ付けベース変数 (IDB2_base)は値が１０  (In. 5) になり、ＩＤＢ３のタグ付けベース変数 (IDB3_base)は値が２２  (In. 7) になる。
【００３５】
【表８】
2006012193.tif 000010
【００３６】
タグ付けベース値リゾルバはある範囲のタグ付け値を回避することができる。この機能はそのいくつかを以下で説明するが、さまざまな異なるコンテキストでソフトウェア開発者のために計測プロセスを単純化する。
【００３７】
第一に、コンピュータプログラムはめったに変化しない多数のソースコード・モジュールを含むことが可能であり、この中には、ソースコード・モジュールライブラリなどの形態のレガシコードが含まれる。（レガシコードには、タグ付け変数を定数値にセットし、従ってリンク時再配置可能タグ付け値の使用と互換性のないタグ付け割り当てステートメントで計測されたコードが含まれる。）計測プロシージャはソースコード・モジュールが変更されない限り、ソフトウェア開発者がそのモジュールを一度計測するだけで済むならば、より効率的になることは明らかである。
【００３８】
第二に、ソフトウェア開発者はオフセット・タグ付けインスツルメンタを使用して計測されていないソースコード・モジュールのためにある範囲のタグ付け値を残しておきたい場合がある。例えば、ソフトウェア開発者は特にエラーを起こしやすいソースコード・モジュールを手作業で計測し、オフセット・タグ付けインスツルメンタで通常挿入されるよりも、はるかに多いタグ付け割り当てステートメントを挿入することを望んでいる場合がある。そのような場合には、ソフトウェア開発者は挿入されたタグ付け割り当てステートメントに値を割り当てるだけにしておき、そのタグ付け値がそのコンピュータプログラムの他のソースコード・モジュールのために解決されるとき、その範囲のタグ付け値を避けるようにタグ付けベース値リゾルバに指示することができる。
【００３９】
第三に、いくつかのソースコード・モジュールはコンピュータプログラムのあるバージョンから次のバージョンまでに変更されないことがある。これらのソースコード・モジュールは以前に計測されたことがあり、それぞれのタグ付け値はまだユニークである場合がある。従って、ソフトウェア開発者はこれらの以前に計測され、現在未変更であるソースコード・モジュールに割り当てられた範囲のタグ付け値を残しておき、変更された後でコンピュータプログラムの最新バージョンで再計測されたソースコード・モジュールだけの新タグ付け値を判断するようにタグ付けベース値リゾルバに指示するだけで、より効率的なアクションコースがとれることを望んでいる場合がある。
【００４０】
第四に、上記の第３の例はコンピュータプログラムのあるバージョンでの次のタグ付けオフセット値を、追加のタグ付け割り当てステートメントがタグ付けベース変数の再計算を必要としないで、コンピュータプログラムの以後のバージョンで挿入できるようにセットするようにすると、さらに改善することができる。例えば、表５を参照して上述したように、計測されたソースコード・モジュール１の次のタグ付けオフセット値は１０までの値にセットすると、ユニークなタグ付け値が保証されることになる。しかし、計測されたソースコード・モジュール１の次のタグ付けオフセット値が１０でなく、１２にセットされていれば、２つの追加タグ付け割り当てステートメントを、どのベース変数（例えば、IDB2_base)の再計算も必要としないでコンピュータプログラムの以後のバージョンでソースコード・モジュールに追加することが可能になり、しかも、コンピュータプログラムのユニークなタグ付け値が保証されることになる。
【００４１】
第五に、本発明のいくつかの実施例は、コンピュータプログラムの第１バージョンのときに、計測リンカがコンピュータプログラムの計測されたソースコード・モジュールのタグ付けベース変数を判断するだけでなく、各タグ付け割り当てステートメントの実際のタグ付け値も判断するように構成することができる。（前述したように、実際のタグ付け値はコンピュータプログラムの実行時に判断されるのが代表的である。）この実施例では、そのあと計測リンカは、各計測されたソースコード・モジュールのそれぞれのＩＤＢにその値範囲を保存しておくといったように、その実際のタグ付け値範囲を保存しておく。コンピュータプログラムの以後のバージョンの計測プロシージャでは、オフセット・タグ付けイスツルメンタは各計測されたソースコード・モジュールを調べて、その計測されたソースコード・モジュールがコンピュータプログラムの以前バージョンから変更されたかどうかを判断する。あるソースコード・モジュールが変更されていなければ、オフセット・タグ付けインスツルメンタはそのソースコード・モジュールの実際のタグ付け値範囲をリトリーブし、「タグ付け変数＝ベース変数およびタグ付けオフセット値」形式のタグ付け割り当てステートメントを「タグ付け変数＝実際のタグ付け値」形式のタグ付け割り当てステートメントで置き換える。未変更のソースコード・モジュールに対してこの単純化されたタグ付け割り当てステートメントを使用すると、それぞれのタグ付け値範囲をコンピュータプログラムの実行時にではなく、コンパイルプロセス時に割り当てることが可能になる。もちろん、この実施例が正しく動作するためには、タグ付けベース値リゾルバは予約されたタグ付け値範囲を受け取って、それぞれのタグ付け値範囲が予約タグ付け値にオーバラップしないようにタグ付けベース変数を解決できなければならない。
【００４２】
図６および図７は本発明の実施例のためのタグ付けベース変数値解決プロシージャのフローチャートを示す図である。このプロシージャは各モジュールを選択し、予約値範囲が使用されないようにして、選択したモジュールのタグ付けベース変数の値を割り当てる。最初のステップとして、プロシージャはコンピュータプログラムのこのバージョンで旧ＩＤＢがリンクされるかどうかをチェックする（ステップ５０１）。このような旧ＩＤＢが存在することはそのタグ付け値がリンク時再配置可能でない、計測されたソースコード・モジュールであること表しているのが一般である。上述した理由により、これらの旧ＩＤＢはすでにタグ付け値が割り当てられているので、必要なことはそのタグ付け値範囲用にスペースが予約されることだけである。旧ＩＤＢが存在していれば（ステップ５０２）、プロシージャはこれらの旧ＩＤＢを選択する（ステップ５０３）。プロシージャは各ＩＤＢ用に予約するタグ付け値範囲のレコードを作成する（ステップ５０４）。プロシージャは旧ＩＤＢが存在すると、予約フラグ値を真にセットする（ステップ５０５）。プロシージャはスペースを予約する必要のある旧ＩＤＢがなくなるまで続行する。必要なスペースすべてが予約されると、プロシージャは累積タグ付けオフセット値をゼロにセットする（ステップ５０６）。そのあと、プロシージャはループして、リンク時再配置可能タグ付け値を使用する各モジュールごとにタグ付けベース値を割り当てる（ステップ５０７−５１６）。プロシージャは次の新ＩＤＢを選択する（ステップ５０７）。新ＩＤＢのすべてがすでに選択されていれば、プロシージャは終了する（ステップ５０８）。そうでなければ、プロシージャはタグ付けベース変数を累積タグ付けオフセット値に等しい値セットする（ステップ５０９）。次に、プロシージャはこのＩＤＢの次のタグ付けオフセット値をリトリーブする（ステップ５１０）。そのあと、プロシージャはタグ付けベース変数の提案値とこのＩＤＢの次のタグ付けオフセット値をチェックし、その提案タグ付け値範囲が予約タグ付け値のどれかと矛盾しているかどうかを判断する。もちろん、このステップは予約値フラグが真にセットされたことがなければスキップすることができる（ステップ５１１）。提案範囲に矛盾がなければ、タグ付けベース値リゾルバは提案値をタグ付けベース変数に割り当てるソースコード・ステートメントを準備する（ステップ５１４）。タグ付けベース変数のために提案値を使用すると矛盾が起こる場合は、タグ付けベース値リゾルバはタグ付けベース変数用に別の値を選択し、このＩＤＢ用のタグ付け値範囲が予約されたタグ付け値範囲と矛盾しないようにする（ステップ５１３）。タグ付けベース変数用の値が判断されると、タグ付けベース値リゾルバはそのＩＤＢのタグ付け値をマスタＩＤＢにストアし、このマスタＩＤＢは最終的にはコンピュータプログラムのすべてのタグ付け値を収容することになり、プログラム実行時にワークステーションＧＵＩ（例えば、図１のワークステーションＧＵＩ）によって参照することができる（ステップ５１５）。次に、プロシージャは累積タグ付けオフセット値を最後にリトリーブした次のタグ付けオフセット値だけインクリメントする（ステップ５１６）。そのあと、プロシージャはループし（ステップ５０７へ）次のＩＤＢを選択する。従って、タグ付けベース値リゾルバはＩＤＢのすべてからの情報を合体しているマスタＩＤＢを作成することも可能である。このマスタＩＤＢは旧スタイルのＩＤＢのフォーマットになっている（例えば、タグ付けベース変数の名前を収めていないＩＤＢ）。代替実施例として、タグ付けベース値リゾルバは値がそのタグ付けベース変数に割り当てられた後で、各ＩＤＢ用に旧スタイルのＩＤＢを作成するが可能である。
【００４３】
図８は本発明の実施例の計測プロセスを示す図である。４個のソースコード・モジュール６００ａ、６００ｂ、６００ｃ、および６００ｄは計測前のコンピュータプログラムを表している。ソースコード・プリプロセッサ６０１はコメントを取り除き、これらのソースコード・モジュールからのマクロを展開する。オフセット・タグ付けインスツルメンタは、次に、ソースコード・モジュールを検査し、図５に示すように該当のタグ付けポイントを探し出す。オフセット・タグ付けインスツルメンタはその検査プロシージャ期間にＩＤＢ  ６０３ａ、６０３ｂ、６０３ｃ、および６０３ｄを作成する。代表例として、オフセット・タグ付けインスツルメンタは図８に示すように、各ソースコード・モジュールごとに１つのＩＤＢを作成する。別の例として、複数のソースコード・モジュールのデータを１つのＩＤＢにストアすることも可能である。オフセット・タグ付けインスツルメンタは計測されたソースコード・モジュール６０４も作成する。代替実施例では、オフセット・タグ付けインスツルメンタは検査された各ソースコード・モジュールごとに計測済みソースコード・モジュールを作成することもできる。コンパイラ６０５は計測されたソースコードからオブジェクトコードを生成する。リンカ６０６のタグ付けベース値リゾルバは図６および図７に示すようにタグ付けベース変数の値を判断し、タグ付けベース変数を初期化するソースコード・ステートメントを生成する。生成されたソースコード・ステートメントはコンパイルされ、コンパイル済みコードとリンクされて実行可能コード６１０が作られる。その結果の実行可能コード６１０はコンピュータプログラムをテストするために使用できる。
【００４４】
図９はソースコード・モジュールが２台以上のコンピュータで計測され、コンパイルされるようした本発明の実施例を示す図である。第１ソースコード・モジュール７０１ａはコンピューティングマシン１上に置かれている。オフセット・タグ付けインスツルメンタ７０２ａはこのソースコードを使用してＩＤＢ  ７０４ａとコンパイル済みコード７０５ａを作成する。同じように、コンピューティングマシン２には、２つのソースコード・モジュール７０１ｂと７０１ｃが置かれている。これらのソースコード・モジュールはオフセット・タグ付けインスツルメンタ７０２ａ用に用意されたもので、ＩＤＢ２  ７０４ｂとＩＤＢ３  ７０４ｃをコンパイル済みコード７０５ｃと一緒に作成する。同様に、コンピューティングマシン３では、オフセット・タグ付けインスツルメンタはソースコード・モジュール４  ７０１ｄを使用してＩＤＢ４  ７０４ｄとコンパイル済みコード７０５ｃを作成する。コンパイル済みコードを表すオブジェクトファイルの各々はコンピューティングマシンＮに渡される。このコンピューティングマシンＮはどの該当コンピューティングマシンにすることも可能であり、前述の３コンピューティングマシンの１つであっても構わない。同様に、３コンピューティングマシンで作成されたＩＤＢのすべてはコンピューティングマシンＮに渡される。リンカ７１０は各コンピューティングマシンで作成されたオブジェクトコードを使用して実行可能コード７１１を生成する。リンカのタグ付けベース値リゾルバは前述したように、ＩＤＢで表されたタグ付け値の各々ごとにタグ付けベース変数の値を解決し、その結果の実行可能コードがユニークなタグ付け値を含むようにする。
【００４５】
最後に、図１０は本発明の代替実施例を示す図である。オフセット・タグ付けインスツルメンタがＩＤＢを作成するとき、あらかじめ決めたパッディング範囲を組み込むことも可能である。ＩＤＢ  ８００、８０１および８０３は各々がそのようなパッディング範囲が組み込まれている。このパッディング範囲を使用すると、追加のタグ付け割り当てステートメントを、そのＩＤＢで表されたタグ付け値の最大範囲を変更することなく特定のＩＤＢに組み入れることが可能になる。大きなコンピュータプログラムが以前に計測された種々のソースコード・モジュールのすべてを含んでいて、ソフトウェア設計者が最初のソースコード・モジュールに１行分のコードだけを追加したため、タグ付け割り当てステートメントが１つ追加されたときは、このＩＤＢと他のすべてのＩＤＢ用のタグ付けベース変数の値は、この新しいタグ付け割り当てステートメントがパッディング値で与えられた範囲内にまだ収まっているので、変更されることがない。従って、このプロシージャを使用すると、計測・リンクプロセスが高速化する。
【００４６】
図１１は本発明によって提供されるタグ付け値の代替実施例を示し、タグ付けオフセット値と連結されたタグ付けベース変数からなっている。上述したタグ付け値はタグ付けベース変数プラスタグ付けオフセット値を含んでいる。代替実施例では、タグ付け値はタグ付けオフセット値に連結されたタグ付けベース変数を含んでいる。例えば、タグ付け値は６４ビットにすることができる。最初の３２ビットはタグ付けオフセット値を表し、次の３２ビットはタグ付けベース変数を表すことができる。この実施例でも、タグ付けオフセット値とタグ付けベース変数の値は前述したように判断することができる。しかし、前記実施例で上述したように２つの値を加えるのではなく、２つの値は連結されるようになっている。従って、リンカは各ソースコード・モジュールにユニークなタグ付けベース値を割り当てるだけでよく、これらの値は各ソースコード・モジュール内のタグ付け割り当てステートメントの数に基づく必要がない。このようにして作成されたタグ付け値はユニークのままであるので、コンピュータプログラマはその結果のコンピュータプログラムの実行をトレースすることができる。
【００４７】
上述した説明から理解されるように、本発明の理解を容易にするために特定実施例を説明してきたが、これらの実施例は本発明の精神と範囲を逸脱しない限り種々態様に変更することが可能である。例えば、リンカを変更すれば、タグ付け値をリンク時に計算させ、タグ付け割り当てステートメントでタグ付け変数に割り当てられるタグ付け値を定数としてストアすることが可能になる。コンパイラはオブジェクトコード内の各タグ付け割り当てステートメントのロケーションの標識を出力することが可能になる。そのあと、リンカは各タグ付け割り当てステートメント内のユニークな定数値をストアし、定数値とタグ付けポイントとのマッピングをＩＤＢにストアしておくことができる。また、ここで言うモジュールという用語はコンピュータプログラムの任意の部分を意味し、ここには、完全なソースコード・ファイル、ソースコード・ファイルの一部、関数、プロシージャまたはコンピュータプログラムを形成するその他のステートメントの集まりが含まれる。従って、本発明は特許請求の範囲に記載されている事項にのみ限定されるものである。
【図面の簡単な説明】
【００４８】
【図１】ソフトウェアのテストとデバッグのための計測タグ付け方式に関連する代表的なモニタリングシステムを示す図である。
【図２】計測データベースに挿入されている従来のタグ付け値を示す図である。
【図３】本発明の実施例によって提供される新規のタグ付け値を示す図であり、そこではタグ付け値はタグ付けベース変数プラスタグ付けオフセット値から構成されている。
【図４】本発明の実施例に関連する代表的な計測データベースを示す図である。
【図５】本発明の実施例によるソースコード・モジュールの計測フローチャートを示す図である。
【図６】本発明の実施例に関連するタグ付けベース変数値解決プロシージャのフローチャートである。
【図７】本発明の実施例に関連するタグ付けベース変数値解決プロシージャのフローチャートである。
【図８】本発明の実施例に関連する計測プロシージャの例を示す図である。
【図９】ソースコード・モジュールが２代以上のコンピュータで計測されるようにした本発明の実施例による計測プロシージャの例を示す図である。
【図１０】本発明で使用されるＩＤＢの代替実施例を示す図である。
【図１１】本発明の実施例によって提供されるタグ付け値の代替実施例を示す図であり、そこではタグ付け値はタグ付けオフセットに連結されたタグ付けベース変数からなっている。
【符号の説明】
【００４９】
６００    ソースコード・モジュール
６０１    ソースコード・プリプロセッサ
６０３    計測データベース（ＩＤＢ）
６０４    計測されたソースコード・モジュール
６０５    コンパイラ
６０６    リンカ
６１０    実行可能コード
７０１    ソースコード・モジュール
７０２    オフセット・タグ付けインスツルメンタ
７０４    ＩＤＢ
７０５    コンパイル済みコード
７１０    リンカ
７１１    実行可能コード
【図１】
2006012193.tif 000011
【図２】
2006012193.tif 000012
【図３】
2006012193.tif 000013
【図４】
2006012193.tif 000014
【図５】
2006012193.tif 000015
【図６】
2006012193.tif 000016
【図７】
2006012193.tif 000017
【図８】
2006012193.tif 000018
【図９】
2006012193.tif 000019
【図１０】
2006012193.tif 000020
【図１１】
2006012193.tif 000021