(57)【特許請求の範囲】
【請求項１】
アプリケーション・ソース・コード（４０５）の実行表示用のシステムであって、
前記アプリケーション・ソース・コード（４０５）を実行する前に、ユーザから、前記アプリケーション・ソース・コード内のソース・コード対象部分の特定を受け取るように構成された入力インターフェース（１３０）であって、前記アプリケーション・ソース・コードは、少なくとも、複数の動作を記述する複数の人間読み取り可能な命令文（５３５）を含む、入力インターフェース（１３０）と、
前記入力インターフェースに結合されたプロセッサ（１１５）であって、
一度も実行されない頻度、一度だけ実行される頻度、および繰り返し実行される頻度を含む複数の実行頻度を定義することと、
前記アプリケーション・ソース・コードに基づいてアプリケーション・オブジェクト・コード（４２０）を生成することであって、前記アプリケーション・オブジェクト・コードは、少なくとも、複数のコンピュータ実行可能命令と、前記ソース・コード対象部分に対応するオブジェクト・コード対象部分とを含む、アプリケーション・オブジェクト・コード（４２０）を生成することと、
前記アプリケーション・オブジェクト・コードを実行することと、
オブジェクト・コード対象部分の実行毎に、メモリ・デバイス（１１０）の実行イベント記録を生成することであって、前記実行イベント記録は、オブジェクト・コード対象部分の実行回数に応じて増加する実行カウンタおよび実行タイムスタンプのうちの少なくともいずれかを含む、実行イベント記録を生成すること、
を行うようにプログラムされた、プロセッサ（１１５）と、
実行カウンタおよび実行タイムスタンプの数量うちの少なくともいずれかに基づいて、オブジェクト・コード対象部分に対応するソース・コード対象部分に対して生成された実行イベント記録の数量を表示するように構成された提示インターフェイス（１２０）であって、繰り返し実行される頻度に関連するソース・コード対象部分の第１の割合を、一度だけ実行される頻度に関連するソース・コード対象部分の第２の割合から図式的に区別するように構成されている提示インターフェイス（１２０）と、
を備えるシステム。
【請求項２】
前記ソース・コード対象部分は第１のソース・コード対象部分であり、
前記提示インターフェース（１２０）はさらに、前記第１のソース・コード対象部分を、実行イベント記録に関連付けられていない第２のソース・コード対象部分から図式的に区別するように構成されている、
請求項１に記載のシステム。
【請求項３】
前記第１のソース・コード対象部分は複数の実行イベントに関連付けられ、
前記提示インターフェース（１２０）はさらに、前記第１のソース・コード対象部分を、１つの実行イベント記録に関連付けられた第２のソース・コード対象部分から図式的に区別するように構成されている、
請求項２に記載のシステム。
【請求項４】
前記オブジェクト・コード対象部分は前記アプリケーション・オブジェクト・コード（４２０）の第１の部分であり、
前記提示インターフェース（１２０）は、前記ソース・コード対象部分が実行されたことを、前記プロセッサ（１１５）が前記アプリケーション・オブジェクト・コードの第２の部分を実行する間に表示するように構成されている、
請求項１に記載のシステム。
【請求項５】
前記入力インターフェース（１３０）はさらに、前記プロセッサ（１１５）が前記アプリケーション・オブジェクト・コード（４２０）を実行する間に、前記ソース・コード対象部分の特定を受け取るように構成され、
前記プロセッサはさらに、実行ブレークポイントを前記オブジェクト・コード対象部分に関連付けることを、前記アプリケーション・オブジェクト・コードの実行を終了することなく行なうようにプログラムされている、
請求項１に記載のシステム。
【請求項６】
前記入力インターフェース（１３０）は、前記アプリケーション・ソース・コード（４０５）内の１つの人間読み取り可能な命令文に対応する少なくとも１つのソース・コード対象部分の特定を受け取るように構成されている、請求項１に記載のシステム。
【請求項７】
アプリケーション・ソース・コード（４０５）の実行表示用のシステムであって、
アプリケーション・ソース・コードとアプリケーション・オブジェクト・コード（４２０）とを記憶するように構成されたメモリ・デバイス（１１０）であって、前記アプリケーション・ソース・コードは、少なくとも、複数の動作を記述する複数の人間読み取り可能な命令文を含み、前記アプリケーション・オブジェクト・コードは、少なくとも、複数の人間読み取り可能な命令文に対応する複数のコンピュータ実行可能命令を含む、メモリ・デバイス（１１０）と、
前記メモリ・デバイスに結合されたプロセッサ（１１５）であって、
前記アプリケーション・ソース・コード（４０５）を実行する前に、ユーザから、前記アプリケーション・ソース・コード内の複数のソース・コード対象部分を受け取ることと、
前記複数のソース・コード対象部分の各ソース・コード対象部分に対応するオブジェクト・コード対象部分を決定することと、
前記アプリケーション・オブジェクト・コードを実行することと、
一度も実行されない頻度、一度だけ実行される頻度、および繰り返し実行される頻度を含む複数の実行頻度を定義することと、
オブジェクト・コード対象部分の実行毎に、メモリ・デバイス（１１０）の実行イベント記録を生成することであって、前記実行イベント記録は、オブジェクト・コード対象部分の実行回数に応じて増加する実行カウンタおよび実行タイムスタンプのうちの少なくともいずれかを含む、実行イベント記録を生成すること、
を行なうようにプログラムされたプロセッサ（１１５）と、
実行カウンタおよび実行タイムスタンプの数量うちの少なくともいずれかに基づいて、第１のオブジェクト・コード対象部分に対応する第１のソース・コード対象部分に対して生成された実行イベント記録の数量を表示するように構成された提示インターフェイス（１２０）であって、繰り返し実行される頻度に関連するソース・コード対象部分の第１の割合を、一度だけ実行される頻度に関連するソース・コード対象部分の第２の割合から図式的に区別するように構成されている提示インターフェイス（１２０）と、
を備えるシステム。
【請求項８】
前記提示インターフェース（１２０）は、前記第１のソース・コード対象部分を、異なる数量の実行イベントに関連付けられた第２のソース・コード対象部分から図式的に区別することによって実行イベント記録の数量を表示するように構成されている請求項７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で開示する主題は一般的に、アプリケーション・ソース・コード・マネージメントに関し、より具体的には、人間読み取り可能なソース・コードの実行の検出および表示用のシステムおよび方法に関する。
【背景技術】
【０００２】
少なくとも一部の既知のコンピュータ・システムでは、テスト・コードを用いて、アプリケーション・コードを、所定の入力および予想される出力に基づいて自動的に実行する。さらに、一部の既知のシステムでは、試験中にアプリケーション・コード実行を追跡するとともに、ソース・コードのどの部分が実行されたかを示す統計データおよび／またはリポートを生成する。このようなリポートは、「コード・カバレッジ・リポート」と言われる場合がある。
【０００３】
一般的に、既知の実行追跡システムおよび実行追跡方法は、アプリケーション・コードに対して変更および／または追加を行なう必要がある。しかし、アプリケーション・コードに対して変更または追加を行なうことは、時間を費やす必要があり、関連するアプリケーションの実行速度および／または挙動に悪影響を与える場合がある。その結果、試験が遅れる場合がある。さらに、アプリケーションに対する悪影響の重大性に応じて、既知の追跡システムは、ライブまたは「運用」コンテキスト（実行速度が重大である）用には不適当であると考えられる場合がある。また、コード・カバレージ・リポートを待ってさらに遅れを被る場合がある。なぜならば、このようなリポートが生成されるのは、すべてのテスト・コードの実行が完了したときだけであるからである。
【０００４】
また既存のシステムは、アプリケーション・コード内の対象部分の静的な実行前定義に依存する場合もあり、そのため、このようなシステムでは、ユーザが、アプリケーションを終了させてから再実行して、実行が追跡される対象部分を変更できるようにする必要がある。さらに、既存の方法は、コードの一部が２値形式で実行されたか否かを表示することのみに限られており、めったに実行されないコードと頻繁に実行されるコードとを区別することができない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第５，６５９，６７９号明細書
【発明の概要】
【課題を解決するための手段】
【０００６】
この簡単な説明は、考え方の選択を簡単な形式で導入するために示している。なお考え方は以下で詳細な説明においてさらに説明する。この簡単な説明は、特許請求される主題の重要な特徴または本質的な特徴を確認するためのものでもなく、特許請求される主題の範囲を決定する助けとして用いるためのものでもない。
【０００７】
一態様においては、アプリケーション・ソース・コードの実行表示用のシステムが提供される。システムは、アプリケーション・ソース・コード内のソース・コード対象部分の表示を受け取るように構成された入力インターフェースを備えている。アプリケーション・ソース・コードは、少なくとも、複数の動作を記述する複数の人間読み取り可能な命令文を含んでいる。システムはまた、入力インターフェースに結合されたプロセッサであって、アプリケーション・ソース・コードに基づいてアプリケーション・オブジェクト・コードを生成するようにプログラムされたプロセッサを備えている。アプリケーション・オブジェクト・コードは、少なくとも、複数のコンピュータ実行可能命令と、ソース・コード対象部分に対応するオブジェクト・コード対象部分とを含む。プロセッサはまた、アプリケーション・オブジェクト・コードを実行することと、オブジェクト・コード対象部分の実行ごとに、実行イベントをメモリ・デバイス内の対応するソース・コード対象部分に関連付けることと、を行なうようにプログラムされている。
【０００８】
別の態様においては、アプリケーション・ソース・コードの実行表示用のシステムが提供される。システムは、アプリケーション・ソース・コードとアプリケーション・オブジェクト・コードとを記憶するように構成されたメモリ・デバイスを備えている。アプリケーション・ソース・コードは、少なくとも、複数の動作を記述する複数の人間読み取り可能な命令文を含み、アプリケーション・オブジェクト・コードは、少なくとも、複数の人間読み取り可能な命令文に対応する複数のコンピュータ実行可能命令を含んでいる。システムはまた、メモリ・デバイスに結合されたプロセッサであって、アプリケーション・ソース・コード内の複数のソース・コード対象部分の各ソース・コード対象部分に対応するオブジェクト・コード対象部分を決定するようにプログラムされたプロセッサを備えている。プロセッサはまた、アプリケーション・オブジェクト・コードを実行することと、各オブジェクト・コード対象部分の実行ごとに、実行イベントを前記メモリ・デバイス内の対応するソース・コード対象部分に関連付けることと、を行なうようにプログラムされている。
【０００９】
さらに別の態様においては、複数のソース・コード対象部分を含むアプリケーション・ソース・コードの実行表示用の方法が提供される。本方法は、実行イベント数量の範囲に対応する複数の実行頻度を定義することを含んでいる。アプリケーション・オブジェクト・コードが、プロセッサによって、アプリケーション・ソース・コードに基づいて生成される。アプリケーション・オブジェクト・コードは、少なくとも、複数のコンピュータ実行可能命令と、複数のソース・コード対象部分に対応する複数のオブジェクト・コード対象部分とを含んでいる。アプリケーション・オブジェクト・コードは、プロセッサによって実行される。実行イベントが、オブジェクト・コード対象部分の実行ごとに、プロセッサによって、メモリ・デバイス内の対応するソース・コード対象部分に関連付けられる。実行頻度が、ソース・コード対象部分に関連付けられた実行イベントの数量に基づいて、プロセッサによって、各ソース・コード対象部分に関連付けられる。
【００１０】
本明細書で説明する実施形態は、以下の説明とともに添付図面を参照することによって、より良好に理解され得る。
【図面の簡単な説明】
【００１１】
【図１】典型的なコンピューティング・デバイスのブロック図である。
【図２】ネットワークを介して通信状態で結合されたアプリケーション・ホスト・デバイス、アプリケーション開発デバイス、およびアプリケーション・モニタリング・デバイスを備える典型的な実行追跡システムのブロック図である。
【図３】１または複数のソース・コード対象部分の実行表示用の典型的な方法のフローチャートである。
【図４】図３に示す方法を用いて起きる場合があるデータ・フローの典型的な図である。
【図５】図２に示すシステムとともに用いても良い典型的なソース・コード・ビューアである。
【図６】図２に示すシステムとともに用いても良い代替的なソース・コード・ビューアである。
【図７】図２に示すシステムとともに用いても良い典型的な実行メータである。
【発明を実施するための形態】
【００１２】
本明細書で説明する実施形態によって、アプリケーション・ソース・コードがオブジェクト・コード形式で実行されたか否かの表示が与えられる。具体的には、いくつかの実施形態において、アプリケーションの実行中に、アプリケーション・ソース・コード内の対象部分を認識する。アプリケーション・ソース・コードから生成されるアプリケーション・オブジェクト・コードは、アプリケーション・ソース・コード内の対象部分に対応する対象部分を含む。アプリケーション・オブジェクト・コードを実行するとき、オブジェクト・コード対象部分が実行されたら、対応するソース・コード対象部分に対して実行イベントを記録する。たとえば、実行イベントの記録は、実行カウンタの値を増加させること、および／または実行ごとに離散イベント（たとえば、タイムスタンプを含む）を記憶することによって行なっても良い。１または複数のソース・コード対象部分の実行が、記録した実行イベントに基づいて表示される。
【００１３】
本明細書で用いる場合、用語「アプリケーション・ソース・コード」には、コンピュータが行なうことができる動作を記述する人間読み取り可能な命令文が含まれる。単一の命令文をしばしば、「コード・ライン」または単純に「ライン」と言い、これは、人間読み取り可能な命令文を表示またはプリント形式で表わすために用いるラインの数量にかかわらない。機能的に関連する命令文を集めたものをグループ化して、メソッド（機能としても知られる）にしても良い。関連するメソッドをグループ化してクラスにしても良く、関連するクラスをグループ化してパッケージまたはモジュールにしても良い。アプリケーションまたはライブラリ（アプリケーション用）は、アプリケーション・ソース・コードを複数のパッケージ内に含んでいても良い。アプリケーション・ソース・コードを、メモリ・デバイス内の１または複数のファイル内に記憶しても良い。たとえば、各クラスは１つのファイルに対応する。
【００１４】
コンピュータ実行可能命令を含むアプリケーション・オブジェクト・コードは、アプリケーション・ソース・コードから生成される。たとえば、アプリケーション・ソース・コードをコンパイルおよび／または翻訳して、アプリケーション・オブジェクト・コードを作成しても良い。アプリケーション・オブジェクト・コードのコンピュータ実行可能命令は、アプリケーション・ソース・コードの人間読み取り可能な命令文に対応する。人間読み取り可能な命令文とは違って、コンピュータ実行可能命令は、コンピュータのプロセッサおよび／またはこのようなプロセッサによって実行される「仮想計算機」によって、直接実行可能である。人間読み取り可能な命令文に加えて、アプリケーション・ソース・コードは、プロセッサおよび／または仮想計算機によって実行されるアプリケーション・オブジェクト・コードに直接生成されはしないコンテンツ（たとえばコメント、前処理指令、および／または注釈）を含んでいても良い。
【００１５】
実施形態を、アプリケーション・ソース・コード内の対象部分とアプリケーション・オブジェクト・コード内の対象部分とに関して本明細書で説明する。ソース・コード対象部分は、人間読み取り可能な命令文、メソッド、クラス、および／またはパッケージを含んでいても良い。オブジェクト・コード対象部分は、ソース・コード対象部分に対応する１または複数のコンピュータ実行可能命令を含んでいる。
【００１６】
動作時には、プロセッサは、ソフトウェア・プログラムおよび／またはアプリケーションの実行を、アプリケーション・オブジェクト・コードを実行することによって行なう。アプリケーション・オブジェクト・コードを実行する間、特定のオブジェクト・コード対象部分の実行をモニタおよび／または検出しても良い。典型的な実施形態においては、実行ブレークポイントを、オブジェクト・コード対象部分のコンピュータ実行可能命令に関連付ける（たとえば、その前に挿入する）。プロセッサが、アプリケーション・オブジェクト・コードの実行を実行ブレークポイントにおいて停止させて、別のアプリケーション（モニタリング・ユーティリティとして知られる）が、オブジェクト・コード対象部分の実行を認知するようになる。たとえば、プロセッサを、実行ブレークポイントに達したことをモニタリング・ユーティリティに通知するようにプログラムしても良いし、またはモニタリング・ユーティリティが、プロセッサからの実行情報に対して繰り返し要求するかもしくは「ポーリング」しても良い。モニタリング・ユーティリティは、実行イベントをオブジェクト・コード対象部分に関連付けて、プロセッサに、アプリケーション・オブジェクト・コードを続けて実行するように命令を出す。実行ブレークポイントを用いると説明しているが、本明細書で示す実施形態は、オブジェクト・コード対象部分の実行を検出および／またはモニタするための任意の手段と動作可能である。たとえば、限定することなく、アプリケーション・オブジェクト・コードを変更（たとえば計測）して、実行イベント生成用のコンピュータ実行可能な命令文を含みおよび／または参照するようにすることなどである。
【００１７】
本明細書で説明する方法、システム、および装置の典型的な技術的効果には、次のうちの少なくとも１つが含まれる。（ａ）アプリケーション・ソース・コード内の複数のソース・コード対象部分の表示を、入力インターフェースを介して受け取ること、（ｂ）プロセッサによって、アプリケーション・オブジェクト・コードを、アプリケーション・ソース・コードに基づいて生成することであって、アプリケーション・オブジェクト・コードは、複数のコンピュータ実行可能命令とソース・コード対象部分に対応する複数のオブジェクト・コード対象部分とを含む生成すること、（ｃ）プロセッサによって、実行ブレークポイントを、複数のオブジェクト・コード対象部分の各オブジェクト・コード対象部分に関連付けること、（ｄ）各実行ブレークポイントに対して、関連付けたオブジェクト・コード対象部分を実行したときに、実行ブレークポイントを無効にして、実行イベントを、メモリ・デバイス内のオブジェクト・コード対象部分に対応するソース・コード対象部分に関連付けること、である。
【００１８】
図１は、典型的なコンピューティング・デバイス１０５のブロック図である。コンピューティング・デバイス１０５は、メモリ・デバイス１１０と、命令を実行するためのメモリ・デバイス１１０に結合されたプロセッサ１１５とを備えている。いくつかの実施形態においては、メモリ・デバイス１１０には実行可能命令が記憶されている。コンピューティング・デバイス１０５は、本明細書で説明する１または複数の動作を、プロセッサ１１５をプログラムすることによって行なうように構成可能である。たとえば、プロセッサ１１５のプログラミングは、動作を１または複数の実行可能命令としてエンコードして、実行可能命令をメモリ・デバイス１１０に与えることによって行なっても良い。プロセッサ１１５は、１または複数の処理装置（たとえば、マルチ・コア構成）を含んでいても良い。
【００１９】
メモリ・デバイス１１０は、情報（たとえば実行可能命令および／または他のデータ）を記憶して取り出すことができる１または複数のデバイスである。メモリ・デバイス１１０は、１または複数のコンピュータ読取可能な媒体を含んでいても良い。たとえば、限定することなく、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ソリッド・ステート・ディスク、および／またはハード・ディスクである。メモリ・デバイス１１０は、次のものを記憶するように構成しても良い。限定することなく、アプリケーション・ソース・コード、アプリケーション・オブジェクト・コード、ソース・コード対象部分、オブジェクト・コード対象部分、構成データ、実行イベントおよび／または任意の他のタイプのデータである。
【００２０】
いくつかの実施形態においては、コンピューティング・デバイス１０５は、プロセッサ１１５に結合された提示インターフェース１２０を含んでいる。提示インターフェース１２０は、情報（たとえばアプリケーション・ソース・コードおよび／または実行イベント）をユーザ１２５に示す。たとえば、提示インターフェース１２０は、ディスプレイ装置に結合されていても良いディスプレイ・アダプタ（図１に図示せず）を含んでいても良い。ディスプレイ装置は、たとえば、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、有機ＬＥＤ（ＯＬＥＤ）ディスプレイ、および／または「電子インク」ディスプレイである。いくつかの実施形態においては、提示インターフェース１２０は１または複数のディスプレイ装置を含んでいる。これに加えて、または代替的に、提示インターフェース１２０はプリンタを含んでいても良い。いくつかの実施形態においては、提示インターフェース１２０は、１または複数のソース・コード対象部分の実行を、ソース・コード対象部分に関連付けられた実行イベントに基づいて表示する。たとえば、提示インターフェース１２０は、ソース・コード・ビューアおよび／または実行メータを表示するように構成しても良い。これについては、以下に詳細に説明する。
【００２１】
いくつかの実施形態においては、コンピューティング・デバイス１０５は、入力インターフェース１３０、たとえばユーザ入力インターフェース１３５または通信インターフェース１４０を備えている。入力インターフェース１３０は、アプリケーション・ソース・コード内の１または複数の対象部分の表示を受け取るように、および／または本明細書で説明する方法とともに用いるのに適した任意の情報を受け取るように構成しても良い。
【００２２】
典型的な実施形態においては、ユーザ入力インターフェース１３５は、プロセッサ１１５に結合されるとともに、ユーザ１２５から入力を受け取る。ユーザ入力インターフェース１３５は、たとえば次のものを含んでいても良い。キーボード、ポインティング・デバイス、マウス、スタイラス、タッチ・センサー式パネル（たとえば、タッチ・パッドまたはタッチ・スクリーン）、ジャイロスコープ、加速度計、位置検出器、および／または音響ユーザ入力インターフェース。単一の構成要素（たとえばタッチ・スクリーン）が、提示インターフェース１２０およびユーザ入力インターフェース１３５の両方のディスプレイ装置として機能しても良い。
【００２３】
通信インターフェース１４０は、プロセッサ１１５に結合されているとともに、１または複数の遠隔デバイス（たとえば別のコンピューティング・デバイス１０５）と通信状態で結合されるように構成されている。たとえば、通信インターフェース１４０は、限定することなく、有線ネットワーク・アダプタ、無線ネットワーク・アダプタ、および／または移動体通信アダプタを含んでいても良い。また通信インターフェース１４０は、データを１または複数の遠隔デバイスに送っても良い。たとえば、あるコンピューティング・デバイス１０５の通信インターフェース１４０が、１または複数のソース・コード対象部分および／または１または複数の実行イベントの表示を、別のコンピューティング・デバイス１０５の通信インターフェース１４０に送っても良い。
【００２４】
図２は、典型的なシステム２００のブロック図である。システム２００は、アプリケーション・ホスト・デバイス２０５、アプリケーション開発デバイス２１０、およびアプリケーション・モニタリング・デバイス２１５を備え、これらは、ネットワーク２２０を介して通信状態で結合されている。ネットワーク２２０は、次のものを含んでいても良い。限定することなく、インターネット、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、無線ＬＡＮ（ＷＬＡＮ）、メッシュ・ネットワーク、および／または仮想プライベート・ネットワーク（ＶＰＮ）である。
【００２５】
アプリケーション・ホスト・デバイス２０５、アプリケーション開発デバイス２１０、およびアプリケーション・モニタリング・デバイス２１５は、コンピューティング・デバイス１０５（図１に示す）である。典型的な実施形態においては、各コンピューティング・デバイス１０５は、通信インターフェース１４０を介してネットワーク２２０に結合されている。代替的な実施形態においては、アプリケーション・ホスト・デバイス２０５は、アプリケーション開発デバイス２１０および／またはアプリケーション・モニタリング・デバイス２１５と一体化されている。
【００２６】
アプリケーション開発デバイス２１０は、アプリケーション開発者２２５とやり取りする（たとえば、ユーザ入力インターフェース１３５および／または提示インターフェース１２０を介して）。たとえば、アプリケーション開発デバイス２１０を、アプリケーション開発者２２５からアプリケーション・ソース・コードを受け取るように構成しても良い。アプリケーション開発デバイス２１０は、ネットワーク２２０を介してアプリケーション・ホスト・デバイス２０５にアプリケーション・ソース・コードを送る。
【００２７】
アプリケーション・ホスト・デバイス２０５は、アプリケーション・ソース・コードを受け取って記憶する（たとえば、メモリ・デバイス１１０に）。またアプリケーション・ホスト・デバイス２０５を、アプリケーション・ソース・コードに基づいてアプリケーション・オブジェクト・コードを生成するように構成しても良い。
【００２８】
アプリケーション・モニタリング・デバイス２１５は、アプリケーション・モニタ２３０とやり取りする（たとえば、ユーザ入力インターフェース１３５および／または提示インターフェース１２０を介して）。一実施形態においては、アプリケーション・モニタリング・デバイス２１５は、１または複数のソース・コード対象部分の表示をアプリケーション・モニタ２３０から受け取って、ソース・コード対象部分の表示をアプリケーション・ホスト・デバイス２０５に送る。たとえば、アプリケーション・モニタ２３０は、アプリケーション・ソース・コードの各人間読み取り可能な命令文がソース・コード対象部分であるという表示を入力しても良い。
【００２９】
アプリケーション・ホスト・デバイス２０５は、ソース・コード対象部分の表示を受け取り、アプリケーション・オブジェクト・コードを実行して、実行イベントをソース・コード対象部分に関連付ける。このことは、図３および４を参照してより詳細に説明する。アプリケーション・ホスト・デバイス２０５および／またはアプリケーション・モニタリング・デバイス２１５はまた、ソース・コード対象部分の実行を表示する１または複数のグラフィカル・ユーザ・インターフェースを生成および／または提示しても良い。
【００３０】
いくつかの実施形態においては、アプリケーション・モニタリング・デバイス２１５はアプリケーション・ホスト・デバイス２０５に対して遠隔である。たとえば、アプリケーション・モニタリング・デバイス２１５を、アプリケーション・ホスト・デバイス２０５から地理的に離れた支持設備に配置しても良い。このような実施形態によって、遠隔にソース・コード対象部分を定義することおよび実行イベントをモニタすることが容易になる。たとえば、アプリケーション・モニタ２３０は、アプリケーション・モニタ２３０の顧客が操作するアプリケーション・ホスト・デバイス２０５におけるライブの実行行為を、遠隔にモニタしても良い。
【００３１】
図３は、１または複数のソース・コード対象部分の実行表示用の典型的な方法３００のフローチャートである。図４は、方法３００を用いて起きる場合があるデータ・フローの典型的な図４００である。図５〜７は、方法３００とともに用いる典型的なユーザ・インターフェースであり、以下でより詳細に説明する。
【００３２】
方法３００の各部分は、たとえば、システム２００におけるコンピューティング・デバイス１０５の任意の１つまたは任意の組み合わせを用いて行なっても良い。典型的な実施形態においては、１または複数の対象部分（たとえば、人間読み取り可能な命令文、メソッド、クラス、および／またはパッケージ）を、アプリケーション・ソース・コード４０５内で決定する３０５。たとえば、ソース・コード対象部分を、入力装置を介してソース・コード対象部分の表示４１０を受け取ることによって決定しても良い３０５。表示４１０は、たとえば、ユーザ入力装置を介して入力されたソース・コード対象部分の選択、所定のモニタリング構成の選択、および／またはモニタリング構成ファイルを含んでいても良い。これに加えて、または代替的に、ソース・コード対象部分はプロセッサによって自動的に決定しても良い３０５。たとえば、プロセッサを、アプリケーション・ソース・コード４０５またはアプリケーション・ソース・コード４０５のサブセット内の各人間読み取り可能な命令文を、ソース・コード対象部分として認識するようにプログラムしても良い。一実施形態においては、アプリケーション・ソース・コード４０５内の各人間読み取り可能な命令文がソース・コード対象部分である。
【００３３】
プロセッサによって実行される仮想計算機４１５が、アプリケーション・ソース・コード４０５に基づいてアプリケーション・オブジェクト・コード４２０を生成する３１０。アプリケーション・オブジェクト・コード４２０は、複数のコンピュータ実行可能命令と、ソース・コード対象部分に対応する複数のオブジェクト・コード対象部分とを含んでいる。たとえば、オブジェクト・コード対象部分は、アプリケーション・ソース・コード４０５の人間読み取り可能な命令文に対応する１または複数のコンピュータ実行可能命令を含んでいても良い。典型的な実施形態においては、仮想計算機４１５は、コンパイラ４２５を実行してアプリケーション・オブジェクト・コード４２０を生成する３１０。
【００３４】
仮想計算機４１５は、実行検出手段（たとえば実行ブレークポイント４３０）を各オブジェクト・コード対象部分に関連付ける３１５。たとえば、実行ブレークポイント４３０をアプリケーション・オブジェクト・コード４２０に関連付けることを、ソース・コード対象部分に対応するコンピュータ実行可能命令の各セットにおいてまたはその前に行なっても良い。代替的な実施形態においては、仮想計算機４１５は実行検出手段の関連付け３１５を、次のようにして行なう。アプリケーション・オブジェクト・コード４２０を変更して、所定のコンピュータ実行可能命令（たとえば、実行イベント・ロギング命令）を含みおよび／または参照するようにすることを、ソース・コード対象部分に対応するコンピュータ実行可能命令の各セットにおいてまたはそれらの前に行なうことによって、関連付け３１５を行なう。
【００３５】
仮想計算機４１５は、アプリケーション・オブジェクト・コード４２０の少なくとも一部を実行する３２０。実行３２０の間、仮想計算機４１５は、オブジェクト・コード対象部分の実行３２０が行なわれている、待ち状態である、および／または行なわれそうであるを判定する３２５。たとえば、仮想計算機４１５は、実行ブレークポイント４３０に達したときに、アプリケーション・オブジェクト・コード４２０の実行３２０を停止させても良い。実行イベント４３５を、オブジェクト・コード対象部分に対応するソース・コード対象部分に関連付ける３３０。一実施形態においては、ソース・コード対象部分に関連付けられた実行イベント４３５を、メモリ・デバイスに記憶する。実行イベント４３５は、実行３２０が作成された時間および／または対応するオブジェクト・コード対象部分が実行された時間を表示するタイムスタンプを含んでいても良い。代替的な実施形態においては、各ソース・コード対象部分を、メモリ・デバイス内の実行３２０の数量（「実行カウント」）に関連付ける。また実行イベント４３５をソース・コード対象部分に関連付けること３３０には、関連付けた実行カウントの値を増加させることが含まれる。実行イベント４３５は、アプリケーション・データ構造、データベース内の記録、構造化テキスト（たとえば、拡張可能マークアップ言語）、プレーン・テキスト（たとえば、区切り値または固定幅値）として作成しても良く、および／または本明細書で説明した方法とともに用いることに適した任意の他の形式で作成しても良い。
【００３６】
いくつかの実施形態においては、実行ブレークポイント４３０を無効にする３３５（たとえば、作動停止させ、および／または取り除く）。実行イベント４３５がオブジェクト・コード対象部分に関連付けられたときに実行ブレークポイント４３０を無効にする３３５ことによって、アプリケーション・オブジェクト・コード４２０を実行する３２０速度を容易に増加させることができる。たとえば、仮想計算機４１５は、実行されているコンピュータ実行可能命令に関連付けられたブレークポイント４３０の存在に基づいて実行されているオブジェクト・コード対象部分を決定しても良い３２５。このような例では、ブレークポイント４３０を無効にすること３３５によって、仮想計算機４１５は、多くても１つの実行イベント４３５をオブジェクト・コード対象部分に関連付けることになり３３０、オブジェクト・コード対象部分の後続の実行３２０に対する関連付け３３０ステップを回避する。
【００３７】
他の実施形態においては、オブジェクト・コード対象部分が実行される度に、実行イベント４３５をオブジェクト・コード対象部分に関連付ける３３０。このような実施形態によって、どのくらい頻繁にオブジェクト・コード対象部分が実行されているかを容易に決定することができる。これについては、以下に詳細に説明する。
【００３８】
オブジェクト・コード対象部分が実行されたか否かにかかわらず、仮想計算機４１５は、アプリケーション・オブジェクト・コード４２０の実行３２０が完了したか否かを判定する３４０。たとえば、実行３２０の完了は、アプリケーションが入力データ・セットの処理を終了した後、アプリケーションが終了要求を受け取った後、および／またはアプリケーションが決定的エラーに遭遇した後に行なっても良い。仮想計算機４１５が、実行３２０は完了していないと決定した場合３４０、仮想計算機４１５は続けてアプリケーション・オブジェクト・コード４２０を実行する３２０。
【００３９】
アプリケーション・オブジェクト・コード４２０の実行３２０中または実行３２０後に、ソース・コード対象部分の実行３２０を表示する３５０。典型的な実施形態においては、実行イベント４３５を用いて、ソース・コード対象部分の実行３２０をグラフィカル・ユーザ・インターフェース（たとえばソース・コード・ビューア４４０および／または実行メータ４４５）において表示する３５０。グラフィカル・ユーザ・インターフェースは、ユーザに提示インターフェースを介して表示しても良い。ソース・コード・ビューア４４０については、図５および６を参照して後述する。実行メータ４４５については、図７を参照して後述する。
【００４０】
一部の実施形態では、関連付けられた実行イベント４３５に基づいて、ソース・コード対象部分を図式的に区別する。たとえば、実行イベント４３５に関連付けられたソース・コード対象部分を第１の背景色を用いて表示しても良く、実行イベント４３５に関連付けられていないソース・コード対象部分を異なる背景色を用いて表示しても良い。ソース・コード対象部分に関連付けられた実行イベント４３５の数量の決定を、たとえば、ソース・コード対象部分に関連付けられた離散実行イベント（たとえば、タイムスタンプなど）の数量を決定すること、および／またはソース・コード対象部分に関連付けられた実行カウントを認識することによって行なっても良い。
【００４１】
一部の実施形態では、どのくらい頻繁にソース・コード対象部分がアプリケーション・オブジェクト・コード形式で実行されるかを表示することができる。このような実施形態においては、実行イベント４３５をソース・コード対象部分に関連付けること３３０を、対応するオブジェクト・コード対象部分の実行ごとに行なう（たとえば、離散実行イベントを作成することおよび／または実行カウントの値を増加させることによって）。ソース・コード対象部分に関連付けられた実行イベント４３５の数量を表示する３５０。いくつかの実施形態においては、実行イベントの絶対数量を表示する３５０。たとえば、１２の実行イベントに関連付けられたソース・コード対象部分に対して１２の実行を表示しても良い３５０。
【００４２】
これに加えて、または代替的に、ソース・コード対象部分に対して実行頻度を表示しても良い３５０。いくつかの実施形態においては、複数の実行頻度を定義する３０２。たとえば、実行頻度を、事前に定義してメモリ・デバイスに記憶しても良く、および／またはアプリケーション・オブジェクト・コード４２０を実行する間に定義しても良い。各実行頻度は、実行イベント数量の範囲に対応する。実行頻度には、たとえば次のものが含まれていても良い。ゼロ実行イベントに対応する一度も実行されない頻度、単一の実行イベントに対応する一度だけ実行される頻度、および／または２つ以上の実行イベントに対応する繰り返し実行される頻度である。一実施形態においては、実行頻度を以下のように定義する。
【００４３】
【表１】
0005749996.tif 000002
以上、具体的な数値域について述べたが、実行イベント数量の任意の範囲に対応して任意の数の実行頻度を定義しても良い３０２。
【００４４】
ソース・コード対象部分の実行を表示する３５０前に、実行頻度を各ソース・コード対象部分に関連付けても良い３４７。たとえば、実行頻度を、ソース・コード対象部分に関連付けられた実行カウントおよび／または実行イベントの数量４３５に基づいて、決定しても良い。
【００４５】
いくつかの実施形態においては、提示インターフェースは、仮想計算機４１５がアプリケーション・オブジェクト・コード４２０を実行する３２０間に、１または複数のソース・コード対象部分の実行を表示する３５０ように構成されている。たとえば、提示インターフェースを、ソース・コード対象部分の実行を繰り返し表示する３５０ように構成して、ソース・コード対象部分に関連付けられた実行イベントの数量が増加するとグラフィカル・インターフェースを更新するようにしても良い。さらに、提示インターフェースは、第１のオブジェクト・コード対象部分に対応する第１のソース・コード対象部分が実行されたことを、仮想計算機４１５が第２のオブジェクト・コード対象部分を実行する３２０間に表示するように構成しても良い。
【００４６】
いくつかの実施形態においては、仮想計算機４１５がアプリケーション・オブジェクト・コード４２０を実行する３２０間に、１または複数の対象部分の表示を受け取る３０５。仮想計算機４１５は、ブレークポイント４３０を生成すること３１０、および／またはブレークポイント４３０を、表示された対象部分に対応するアプリケーション・オブジェクト・コード４２０に関連付けること３１５を、アプリケーション・オブジェクト・コード４２０の実行３２０を終了することなく行なう。たとえば、仮想計算機４１５は、少なくとも一部のアプリケーション・オブジェクト・コード４２０の実行３２０を停止させ、表示された対象部分に対応する１または複数のクラスを再コンパイルおよび／またはリロードし、および／またはアプリケーション・オブジェクト・コード４２０の実行３２０を再開しても良い。
【００４７】
図５は、典型的なソース・コード・ビューア５００であって、コンピューティング・デバイス、たとえばアプリケーション開発デバイス２１０および／またはアプリケーション・モニタリング・デバイス２１５（図２に示す）とともに、方法３００（図３に示す）に従って用いても良いソース・コード・ビューア５００である。典型的な実施形態においては、ソース・コード・ビューア５００を、アプリケーション・モニタ２３０に提示インターフェース１２０（図１に示す）を介して提示するとともに、入力をアプリケーション・モニタ２３０からユーザ入力インターフェース１３５を介して受け取るために用いる。
【００４８】
ソース・コード・ビューア５００は、概要ペイン５０５および詳細ペイン５１０を含んでいる。概要ペイン５０５は、ファイル内のアプリケーション・ソース・コードの概要または「サムネイル」画像５１５と、詳細ペイン５１０内に見られるファイル部分を表示する可視部分表示部５２０とを含んでいる。一実施形態においては、ファイルは、複数のソース・コード対象部分（たとえば、人間読み取り可能な命令文、メソッド、および／またはクラス）を含み、詳細ペイン５１０はソース・コード対象部分のサブセットを含んでいる。
【００４９】
概要ペイン５０５および詳細ペイン５１０に含まれているのは、第１のメソッド５２５および第２のメソッド５３０であり、それぞれ１または複数の人間読み取り可能な命令文５３５を含んでいる。第１のメソッド５２５を第１の背景パターン５４０を用いて表示し、第２のメソッド５３０を第２の背景パターン５４５を用いて表示して、第２のメソッド５３０を第１のメソッド５２５から図式的に区別する。第１の背景パターン５４０および第２の背景パターン５４５は、概要ペイン５０５および詳細ペイン５１０の両方に示されている。
【００５０】
一実施形態においては、第１のメソッド５２５および第２のメソッド５３０はそれぞれ、１または複数の実行イベントに関連付けても良いソース・コード対象部分である。たとえば、第１のメソッド５２５に対応する任意のコンピュータ実行可能命令を実行するときに、実行イベントを第１のメソッド５２５に関連付ける。代替的な実施形態においては、各人間読み取り可能な命令文５３５はソース・コード対象部分である。第１のメソッド５２５に対する実行イベントの数量を、第１のメソッド５２５内の人間読み取り可能な命令文５３５に関連付けられた実行イベントに基づいて決定する。たとえば、第１のメソッド５２５に対する実行イベントの数量を、第１のメソッド５２５内の人間読み取り可能な命令文５３５に関連付けられた実行イベントの合計、平均、最小値、および／または最大値に基づいて計算しても良い。同様に、人間読み取り可能な命令文に関連付けられた実行イベントを、クラス、パッケージ、および／またはアプリケーションによってグループ化しても良い。
【００５１】
一実施形態においては、ソース・コード・ビューア５００は、図式的区別（たとえば、第１の背景パターン５４０および第２の背景パターン５４５）を用いて、第１のメソッド５２５は１または複数の実行イベントに関連付けられているが第２のメソッド５３０は実行イベントに関連付けられていないことを表示する。別の実施形態においては、このような図式的区別を用いて、第１のメソッド５２５および第２のメソッド５３０が、異なる数量の実行イベントおよび／または異なる実行頻度に関連付けられていることを表示する。さらに別の実施形態においては、第１の背景パターン５４０は、第１のメソッド５２５が最近の実行イベントおよび／または現在実行しているオブジェクト・コードに関係付けられていることを表示する。たとえば、最近の実行イベントを、現在時刻より前の所定の継続時間（たとえば、１０秒、３０秒、６０秒、および／または３分）内における実行カウントに対する増分および／または離散実行イベントの作成と定義しても良い。さらに、前述した図式的区別の方法を組み合わせても良い。
【００５２】
一実施形態においては、ソース・コード・ビューア５００は、繰り返し（たとえば、周期的に、実行イベントの通知時に、またはユーザからの要求時に）概要ペイン５０５および／または詳細ペイン５１０を更新することを、アプリケーション・オブジェクト・コードを実行している間に行なう。このような実施形態においては、第１の時間に実行イベントに関連付けられていない第１のソース・コード対象部分が、その後の時間に実行イベントに関連付けられた場合、第１のソース・コード対象部分は、実行イベントに関連付けられていないままの他のソース・コード対象部分から図式的に区別される。さらに、所定の継続時間の間、第１のソース・コード対象部分を、実行イベントにすでに関連付けられた他のソース・コード対象部分から図式的に区別しても良い。
【００５３】
図５に例示したように、図式的区別を、背景パターンを適用することによって実現しても良い。加えてまたはその代わりに、図式的区別を、色（たとえば、背景色または前景色）、ライン・パターン、ライン重み、書体、フォント重み、アニメーション（たとえば、フェージングおよび／または点滅）、近接して配置されたアイコン、および／または図式的な要素を互いに区別するための任意の他の好適な手段を適用することによって、実現しても良い。
【００５４】
図６は、第２の典型的なソース・コード・ビューア６００であって、コンピューティング・デバイス、たとえばアプリケーション開発デバイス２１０および／またはアプリケーション・モニタリング・デバイス２１５（図２に示す）とともに、方法３００（図３に示す）に従って用いても良いソース・コード・ビューア６００である。ソース・コード・ビューア６００は、アプリケーション・ソース・コードを含むファイルの一部を示す詳細ペイン６０５を含んでいる。具体的には、詳細ペイン６０５は、メソッド６１５内の複数の人間読み取り可能な命令文５３５を示す。各人間読み取り可能な命令文５３５はソース・コード対象部分を表わしている。
【００５５】
人間読み取り可能な命令文５３５に隣接しているのは、対応する実行カウント６２０である。実行カウント６２０を、人間読み取り可能な命令文５３５に直接関連付けて、関連付けた人間読み取り可能な命令文５３５が実行される度に値を増加させても良い。これに加えて、または代替的に、実行カウント６２０を、人間読み取り可能な命令文５３５に関連付けられた実行イベントの数量をカウントすることによって求めても良い。
【００５６】
人間読み取り可能な命令文５３５は、関連付けられた実行頻度に基づいて図式的に区別される。たとえば、第１の背景パターン６３０を、第１の範囲の実行カウント６２０（たとえば、６〜１２の実行イベント）に対応する第１の実行頻度に関連付けられた人間読み取り可能な命令文５３５に適用する。第２の背景パターン６３５を、第２の範囲の実行カウント６２０（たとえば、２１〜５０の実行イベント）に対応する第２の実行頻度に関連付けられた人間読み取り可能な命令文５３５に適用する。加えて、第３の背景パターン６４０を、アプリケーション・オブジェクト・コード内のコンピュータ実行可能命令に対応しないメソッド６１５の部分（たとえばコメント６４５）に適用する。
【００５７】
ソース・コード・ビューア５００と同様に、ソース・コード・ビューア６００を繰り返し更新しても良い。このような実施形態によって、実行行為のリアル・タイム・モニタリングが容易になる。
【００５８】
図７は、典型的な実行メータ７００であって、コンピューティング・デバイス、たとえばアプリケーション開発デバイス２１０および／またはアプリケーション・モニタリング・デバイス２１５とともに、方法３００に従って用いても良い実行メータ７００である。実行メータ７００は、ソース・コード対象部分を定義するための追加ボタン７０５と、複数の実行頻度のそれぞれに関連付けられたソース・コード対象部分（たとえば、人間読み取り可能な命令文）の割合を表示する概要実行ゲージ７１０と、を含む。代替的な実施形態においては、概要実行ゲージ７１０は、少なくとも１つの実行イベントに関連付けられたソース・コード対象部分の割合を表示する。
【００５９】
また実行メータ７００は、複数のファイルに対する詳細実行ゲージ７２０を伴う表７１５を含んでいる。詳細実行ゲージ７２０は、各実行頻度に関連付けられた各ファイル内のソース・コード対象部分の割合を表示する。たとえば、第４の詳細実行ゲージ７２５は、第１のブロック７３０、第２のブロック７３５、第３のブロック７４０、および第４のブロック７４５を含んでいる。それぞれ、特定の実行頻度に関連付けられたファイル内のソース・コード対象部分の割合を表わす。加えて、第４の詳細実行ゲージ７２５は、実行イベントに関係付けられておらずおよび／または一度も実行されない頻度に関係付けられているソース・コード対象部分の割合を表わす空のブロック７５０を含んでいる。各ブロック７３０、７３５、７４０、７４５、７５０を、固有のフィル・パターンを用いて示すことで、各実行頻度に関連付けられたソース・コード対象部分の割合の間の図式的区別を容易にしている。詳細実行ゲージ７２０に隣接しているのは、実行された割合７６０である。これは、少なくとも１つの実行イベントに関連付けられた各ファイル内のソース・コード対象部分の割合を数値的に表示するものである。
【００６０】
また表７１５には、各ファイル内のソース・コード対象部分に対して、以下のものが含まれている。最大実行カウント・アイコン７６５、最大実行カウント７７０、合計実行カウント７７５、実行可能なソース・コード対象部分カウント７８０（たとえば、アプリケーション・オブジェクト・コードとして実行可能なソース・コード対象部分の数量を表示する）、および実行済みソース・コード対象部分カウント７８５（たとえば、少なくとも１つの実行イベントに関連付けられた実行可能なソース・コード対象部分の数量を表示する）。
【００６１】
いくつかの実施形態においては、アプリケーション・オブジェクト・コードが実行されている間に、実行メータ７００を繰り返し更新する。このような実施形態によって、実行行為のリアル・タイム・モニタリングが容易になる。
【００６２】
実行メータ７００を、ファイルによってグループ化された人間読み取り可能な命令文を表わすソース・コード対象部分とともに示す。これに加えて、または代替的に、ソース・コード対象部分を、メソッドによって、ファイルによって、クラスによって、および／またはパッケージによって表示しても良い。さらに、ソース・コード対象部分を、メソッド、クラス、ファイル、および／またはパッケージとして定義しても良い。
【００６３】
本明細書で示す実施形態によって、アプリケーションがライブまたは「運用」コンテキストにおいて試験または実行されている間に、アプリケーション・ソース・コードのどの部分が実行されたかを容易に表示することができる。このような表示によって、アプリケーション・ソース・コードの重要部分（たとえば未試験のソース・コード、試験が不十分なソース・コード、および／または頻繁に実行されるソース・コード）の認識が可能になる。いったん認識されたら、重要部分に、さらなる自動化試験、性能最適化、および／または変更（たとえば、リファクタリング）時のさらなる調査を施しても良い。また、実行情報を用いて、一度も実行されないソース・コードを認識するとともに、このようなソース・コードを無くしても良く、その結果、アプリケーションに付随する保守努力および／またはコストが軽減される。本明細書で説明した実施形態によってさらに、ソース・コード対象部分を定義することと、アプリケーション・オブジェクト・コードを実行している間に実行行為をモニタすることとが、アプリケーション・オブジェクト・コードの実行の終了および再開に付随する遅れおよび不便さを伴うことなく可能になる。
【００６４】
本明細書で説明した方法およびシステムは、本明細書で説明した特定の実施形態に限定されない。たとえば、各システムの構成部品および／または各方法のステップを、本明細書で説明した他の構成部品および／またはステップから独立かつ別個に使用および／または実施しても良い。加えて、各構成部品および／またはステップを、他の装置および方法とともに使用および／または実施しても良い。
【００６５】
一部の実施形態では、１または複数の電子またはコンピューティング・デバイスを用いることが伴う。このようなデバイスは通常、プロセッサまたはコントローラを含んでいる。たとえば汎用中央演算処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、マイクロコントローラ、縮小命令セット・コンピュータ（ＲＩＳＣ）プロセッサ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理回路（ＰＬＣ）、および／または本明細書で説明した機能を実行することができる任意の他の回路またはプロセッサである。本明細書で説明した方法は、コンピュータ読取可能媒体において具体化される実行可能命令として符号化しても良い。コンピュータ読取可能媒体は、たとえば、限定することなく、記憶装置および／またはメモリ・デバイスである。このような命令は、プロセッサによって実行されると、プロセッサに、本明細書で説明した方法の少なくとも一部を行なわせる。前述した例は単に典型的であり、したがって、用語プロセッサの定義および／または意味を限定することを決して意図するものではない。
【００６６】
本発明を種々の特定の実施形態に関して説明してきたが、当業者であれば分かるように、本発明を請求項の趣旨および範囲内の変更を伴って実施しても良い。
【図１】
0005749996.tif 000003
【図２】
0005749996.tif 000004
【図３】
0005749996.tif 000005
【図４】
0005749996.tif 000006
【図５】
0005749996.tif 000007
【図６】
0005749996.tif 000008
【図７】
0005749996.tif 000009