JPH0950389A - コンピュータシステムを使って実装される装置及び方法 - Google Patents
コンピュータシステムを使って実装される装置及び方法Info
- Publication number
- JPH0950389A JPH0950389A JP8184627A JP18462796A JPH0950389A JP H0950389 A JPH0950389 A JP H0950389A JP 8184627 A JP8184627 A JP 8184627A JP 18462796 A JP18462796 A JP 18462796A JP H0950389 A JPH0950389 A JP H0950389A
- Authority
- JP
- Japan
- Prior art keywords
- program
- information
- computer system
- instrumentation
- code
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/3604—Analysis of software for verifying properties of programs
- G06F11/3612—Analysis of software for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3624—Debugging of software by performing operations on the source code, e.g. via a compiler
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】大きいプログラムに対しても実用性があり、手
作業によるインストルメンテーションのような柔軟性が
あるようなインストルメンテーションを提供する。 【解決手段】本発明の第1プログラムの動的特性につい
ての情報を得るための技術は、 所望の情報を作るのに
いかなるインストルメンテーションが必要とされるのか
を決定する第1のプログラムの静的な解析をする。 プ
ログラマブルインストルメンテーション装置が第1のプ
ログラムのインストルメントされたバージョンを作るよ
うに、第2プログラムを作る。インストルメントされた
プログラムの実行により、動的特性の情報が提供され
る。インストルメンテーション装置のためのプログラム
は、ソースコードを静的に解析するソースコードアナラ
イザによって作られる。ソースコードアナライザは従っ
て、コードアナライザジェネレータによって作られる。
作業によるインストルメンテーションのような柔軟性が
あるようなインストルメンテーションを提供する。 【解決手段】本発明の第1プログラムの動的特性につい
ての情報を得るための技術は、 所望の情報を作るのに
いかなるインストルメンテーションが必要とされるのか
を決定する第1のプログラムの静的な解析をする。 プ
ログラマブルインストルメンテーション装置が第1のプ
ログラムのインストルメントされたバージョンを作るよ
うに、第2プログラムを作る。インストルメントされた
プログラムの実行により、動的特性の情報が提供され
る。インストルメンテーション装置のためのプログラム
は、ソースコードを静的に解析するソースコードアナラ
イザによって作られる。ソースコードアナライザは従っ
て、コードアナライザジェネレータによって作られる。
Description
【0001】
【発明の属する技術分野】本発明は、ソフトウェアのテ
スト及び検証に関し、特に、プログラムの動的特性(ダ
イナミックプロパティ)の決定に関する。
スト及び検証に関し、特に、プログラムの動的特性(ダ
イナミックプロパティ)の決定に関する。
【0002】
【従来の技術】大きなプログラムの開発の際には、動的
特性の知識を有することは重要である。これは、プログ
ラムを動かすことのみによって決められる特性である。
動的特性はプログラムの正規運転のときには隠れてしま
う情報をしばしば伴う。プログラムP及びプログラムの
入力Iの組に関するこのような動的特性の例としては以
下のようなものがある。 1.入力Iで動くとき、Pはその全ての関数を実行する
か? 2.入力Iで動くとき、Pが両方の方向でその全てのi
f文を実行するか? 3.入力Iで動くとき、struct person* のタイプのポ
インタ変数 aPerson が、struct person 型ではないオ
ブジェクトをポイントすることは起きるか? 上記の情報と同様な他の情報を外部から見えるようにす
るために、プログラムは、実行したときに所望の情報を
有する出力を作るように、何らかの方法でインストルメ
ントする必要がある。
特性の知識を有することは重要である。これは、プログ
ラムを動かすことのみによって決められる特性である。
動的特性はプログラムの正規運転のときには隠れてしま
う情報をしばしば伴う。プログラムP及びプログラムの
入力Iの組に関するこのような動的特性の例としては以
下のようなものがある。 1.入力Iで動くとき、Pはその全ての関数を実行する
か? 2.入力Iで動くとき、Pが両方の方向でその全てのi
f文を実行するか? 3.入力Iで動くとき、struct person* のタイプのポ
インタ変数 aPerson が、struct person 型ではないオ
ブジェクトをポイントすることは起きるか? 上記の情報と同様な他の情報を外部から見えるようにす
るために、プログラムは、実行したときに所望の情報を
有する出力を作るように、何らかの方法でインストルメ
ントする必要がある。
【0003】従来の技術は、プログラムをインストルメ
ントする多くの方法を発展させた。これらの1つの方法
は、プログラムを構築するプロセスのときにインストル
メンテーションを加える。即ち、オブジェクトコードを
作るためにソースコードを編集するプロセスにおいてで
ある。この方法に属する1つとしては、ソースコードに
インストルメンテーションのためのコードを単に加え
て、次にオブジェクトコードを作るためにソースコード
をコンパイルする方法がある。ここで、オブジェクトコ
ードはもちろん、ソースコードに加えられたインストル
メンテーションコードに対応するコードを含有してい
る。別の方法としては、必要なインストルメンテーショ
ンをオブジェクトコードに加える特別なコンパイラを使
ってソースコードをコンパイルすることがある。
ントする多くの方法を発展させた。これらの1つの方法
は、プログラムを構築するプロセスのときにインストル
メンテーションを加える。即ち、オブジェクトコードを
作るためにソースコードを編集するプロセスにおいてで
ある。この方法に属する1つとしては、ソースコードに
インストルメンテーションのためのコードを単に加え
て、次にオブジェクトコードを作るためにソースコード
をコンパイルする方法がある。ここで、オブジェクトコ
ードはもちろん、ソースコードに加えられたインストル
メンテーションコードに対応するコードを含有してい
る。別の方法としては、必要なインストルメンテーショ
ンをオブジェクトコードに加える特別なコンパイラを使
ってソースコードをコンパイルすることがある。
【0004】最初の技術であるソースコードにインスト
ルメンテーションコードを加える方法は非常に一般的で
ある。加えることができるインストルメンテーションの
タイプは、プログラマの創意によって数多くある。不利
なこととしてはもちろん、インストルメンテーションを
加えることはソースコードを変えることを意味すること
である。従って、調査されるソースコードはもう元のソ
ースコードではない。2番目の技術は、ソースコードを
変えることを要しないが、あまり一般的ではない。特定
の特別なコンパイラによって提供されるインストルメン
テーションのみが加えられる。他のタイプのインストル
メンテーションは、他の特別なコンパイラ、あるいは現
存する特別なコンパイラの変更をも必要とする。このよ
うな特別なコンパイラの例としては、周知のUNIXオ
ペレーティングシステム(UNIXはXOPENの登録
商標)の下で動作するコンピュータシステム上で利用可
能な lcc 又は cc -p がある。
ルメンテーションコードを加える方法は非常に一般的で
ある。加えることができるインストルメンテーションの
タイプは、プログラマの創意によって数多くある。不利
なこととしてはもちろん、インストルメンテーションを
加えることはソースコードを変えることを意味すること
である。従って、調査されるソースコードはもう元のソ
ースコードではない。2番目の技術は、ソースコードを
変えることを要しないが、あまり一般的ではない。特定
の特別なコンパイラによって提供されるインストルメン
テーションのみが加えられる。他のタイプのインストル
メンテーションは、他の特別なコンパイラ、あるいは現
存する特別なコンパイラの変更をも必要とする。このよ
うな特別なコンパイラの例としては、周知のUNIXオ
ペレーティングシステム(UNIXはXOPENの登録
商標)の下で動作するコンピュータシステム上で利用可
能な lcc 又は cc -p がある。
【0005】構築するときにプログラムをインストルメ
ントする技術の全ては、構築プロセスが非常に複雑にな
るので難しく、構築プロセスによって構築されたインス
トルメントされたバージョンのプログラムが、構築プロ
セスによって顧客のために構築するバージョンと機能上
等しいことを保証することは難しい。
ントする技術の全ては、構築プロセスが非常に複雑にな
るので難しく、構築プロセスによって構築されたインス
トルメントされたバージョンのプログラムが、構築プロ
セスによって顧客のために構築するバージョンと機能上
等しいことを保証することは難しい。
【0006】別の種類の技術は、プログラムが構築され
た後、プログラムのオブジェクトコードをインストルメ
ントするツールを使う。このようなものの例としては、
ピュアソフトウェア社(Pure Software, Inc.:米国カ
リフォルニア州サニーベール、S・メアリー通り130
9(1309 S. Mary Ave., Sunnyvale, CA.))によって
販売されている、PURIFYがある。これは機械語シ
ーケンスの特別なパターン及びコンパイラコード生成技
術を利用して、調査される特性にとって適切なバイナリ
コードにおける位置を識別する。PURIFYのような
ツールの不利な点は、ツールには異なる各種類に対する
プロセッサのバージョンを必要とするので、各ツールが
小さい固定された特性の集合の調査を許し、ポータビリ
ティがないということである。
た後、プログラムのオブジェクトコードをインストルメ
ントするツールを使う。このようなものの例としては、
ピュアソフトウェア社(Pure Software, Inc.:米国カ
リフォルニア州サニーベール、S・メアリー通り130
9(1309 S. Mary Ave., Sunnyvale, CA.))によって
販売されている、PURIFYがある。これは機械語シ
ーケンスの特別なパターン及びコンパイラコード生成技
術を利用して、調査される特性にとって適切なバイナリ
コードにおける位置を識別する。PURIFYのような
ツールの不利な点は、ツールには異なる各種類に対する
プロセッサのバージョンを必要とするので、各ツールが
小さい固定された特性の集合の調査を許し、ポータビリ
ティがないということである。
【0007】図1は、上述のタイプのシステムの概観で
ある。通常の状況の下では、1以上のプログラムのシス
テム102は入力101で実行環境104において動作
する。これらの条件の下では、例えば「このシステムは
入力101に対する全ての関数を実行するか」のような
内部の特性は決定できない。このような内部の特性を決
めるために、我々はシステム105の変換されたバージ
ョンを構築し、これは、所望の特性に適切なシステム1
02の実行の際に何かが起きるときに副作用を生成する
ようにインストルメントされる。
ある。通常の状況の下では、1以上のプログラムのシス
テム102は入力101で実行環境104において動作
する。これらの条件の下では、例えば「このシステムは
入力101に対する全ての関数を実行するか」のような
内部の特性は決定できない。このような内部の特性を決
めるために、我々はシステム105の変換されたバージ
ョンを構築し、これは、所望の特性に適切なシステム1
02の実行の際に何かが起きるときに副作用を生成する
ようにインストルメントされる。
【0008】例えば、システム102が入力101で実
行されるときにその関数全てを実行するかどうかわかる
ことを望むならば、システム102によって呼び出され
た各関数のソースコードの始めにprint文を挿入す
ることによってシステム102をインストルメントでき
る。このインストルメンテーションによりシステム10
2をシステム105に変換する。ここで、この変換され
たシステム105は入力101で動くとする。変換され
たシステム105は、関数を実行するたびに、関数の始
めに挿入されたprint文を実行する。print文
の実行は副作用106であり、print文の出力を見
ることによって、プログラマはどのprint文が実行
されたかを決定でき、その情報を使ってどの関数が実行
されたかを判断できる。
行されるときにその関数全てを実行するかどうかわかる
ことを望むならば、システム102によって呼び出され
た各関数のソースコードの始めにprint文を挿入す
ることによってシステム102をインストルメントでき
る。このインストルメンテーションによりシステム10
2をシステム105に変換する。ここで、この変換され
たシステム105は入力101で動くとする。変換され
たシステム105は、関数を実行するたびに、関数の始
めに挿入されたprint文を実行する。print文
の実行は副作用106であり、print文の出力を見
ることによって、プログラマはどのprint文が実行
されたかを決定でき、その情報を使ってどの関数が実行
されたかを判断できる。
【0009】図4には、与えられたテスト入力の組に対
するテスト適用範囲(テストカバレージ)を決めるため
にソースコードが変更する方法の例が示される。この場
合、テストにより全てのif文にその真の枝と偽の枝両
方を実行させたかどうか決めることが目標である。if
文を有する元のソースコード401(真、偽の枝がそれ
ぞれ行2、5にある)は、行1.iと4.iのprin
t文(402)を挿入されて変更される。この変更コー
ドが実行されると、枝の実行に対するメッセージがログ
ファイルに出力され、テスト適用範囲はログファイルの
メッセージを見ることによって決定できる。
するテスト適用範囲(テストカバレージ)を決めるため
にソースコードが変更する方法の例が示される。この場
合、テストにより全てのif文にその真の枝と偽の枝両
方を実行させたかどうか決めることが目標である。if
文を有する元のソースコード401(真、偽の枝がそれ
ぞれ行2、5にある)は、行1.iと4.iのprin
t文(402)を挿入されて変更される。この変更コー
ドが実行されると、枝の実行に対するメッセージがログ
ファイルに出力され、テスト適用範囲はログファイルの
メッセージを見ることによって決定できる。
【0010】
【発明が解決しようとする課題】上記の技術は全て重要
な欠点を有する。手作業によるインストルメンテーショ
ンは完全な柔軟性があり、プログラマの創意によっての
み限定されるが、大きいプログラムに対しては非実用的
である。インストルメンテーションツールは大きいプロ
グラムに対して実用的であるが、各ツールはインストル
メンテーションの可能性の一部しか提供せず、結果的
に、これらのツールでされたインストルメンテーション
は手作業によるインストルメンテーションよりはるかに
柔軟性がないものである。本発明は、大きいプログラム
に対しても実用性があり、手作業によるインストルメン
テーションのような柔軟性があるようなインストルメン
テーションを提供する。
な欠点を有する。手作業によるインストルメンテーショ
ンは完全な柔軟性があり、プログラマの創意によっての
み限定されるが、大きいプログラムに対しては非実用的
である。インストルメンテーションツールは大きいプロ
グラムに対して実用的であるが、各ツールはインストル
メンテーションの可能性の一部しか提供せず、結果的
に、これらのツールでされたインストルメンテーション
は手作業によるインストルメンテーションよりはるかに
柔軟性がないものである。本発明は、大きいプログラム
に対しても実用性があり、手作業によるインストルメン
テーションのような柔軟性があるようなインストルメン
テーションを提供する。
【0011】
【課題を解決するための手段】本発明は、インストルメ
ントされるプログラムのソースコードを解析し、インス
トルメンテーション命令のシーケンスを生成するために
静的アナライザを使うことによって、従来技術の問題を
解決する。インストルメンテーション命令のシーケンス
は次に、インストルメンテーション命令で指定されるよ
うにコードをインストルメントする別のプログラムによ
って消費される。インストルメントされたコードは次
に、所望の情報を得るように実行される。静的アナライ
ザの使用は、今まで手作業によるインストルメンテーシ
ョンでだけ得られた柔軟性を可能にし、同時にいかなる
大きさのプログラムのインストルメンテーションを可能
にする。
ントされるプログラムのソースコードを解析し、インス
トルメンテーション命令のシーケンスを生成するために
静的アナライザを使うことによって、従来技術の問題を
解決する。インストルメンテーション命令のシーケンス
は次に、インストルメンテーション命令で指定されるよ
うにコードをインストルメントする別のプログラムによ
って消費される。インストルメントされたコードは次
に、所望の情報を得るように実行される。静的アナライ
ザの使用は、今まで手作業によるインストルメンテーシ
ョンでだけ得られた柔軟性を可能にし、同時にいかなる
大きさのプログラムのインストルメンテーションを可能
にする。
【0012】上記の発明の1つにおいては、デバッガの
ようなプログラマブル実行環境をプログラムするために
インストルメンテーション命令を使う。調査中のプログ
ラムの未修正コードは次に、プログラムされた実行環境
で実行され、この実行環境は、関心事の動的特性の情報
を出力することによって調査中のプログラムの実行に応
答する。
ようなプログラマブル実行環境をプログラムするために
インストルメンテーション命令を使う。調査中のプログ
ラムの未修正コードは次に、プログラムされた実行環境
で実行され、この実行環境は、関心事の動的特性の情報
を出力することによって調査中のプログラムの実行に応
答する。
【0013】別の発明においては、インストルメンテー
ション命令はバイナリ編集ツールをプログラムするため
に使われ、このツールはインストルメンテーションのオ
ブジェクトコードを含有するようにオブジェクトコード
を編集することによってプログラムに応答する。この編
集されたオブジェクトコードは、実行すると、関心事の
情報を出力する。
ション命令はバイナリ編集ツールをプログラムするため
に使われ、このツールはインストルメンテーションのオ
ブジェクトコードを含有するようにオブジェクトコード
を編集することによってプログラムに応答する。この編
集されたオブジェクトコードは、実行すると、関心事の
情報を出力する。
【0014】第3の種類の発明においては、インストル
メンテーション命令はプログラマブル編集ツールをプロ
グラムするために使われる。プログラマブル編集ツール
は次に、インストルメンテーションのコードを含有する
ようにソースコードを変更することによってプログラム
に応答する。ソースコードがコンパイルされ、通常の方
法で実行されると、この実行により関心事の情報が出力
される。
メンテーション命令はプログラマブル編集ツールをプロ
グラムするために使われる。プログラマブル編集ツール
は次に、インストルメンテーションのコードを含有する
ようにソースコードを変更することによってプログラム
に応答する。ソースコードがコンパイルされ、通常の方
法で実行されると、この実行により関心事の情報が出力
される。
【0015】
【発明の実施の形態】以下においては、最初に本発明の
概観を示し、プログラマブルデバッガをプログラマブル
実行環境として用いて好ましい実施例を記述する。ま
た、プログラマブルデバッガに対するコードを作るため
にどのように静的ソースコードアナライザが使われる
か、及びどのようにこのような静的ソースコードアナラ
イザがコードアナライザを生成するシステムを用いて作
られるかを開示する。最後に、プログラマブルデバッガ
からの副作用が、テストされるプログラムの流れグラフ
のグラフ表示を駆動する一実施例を開示する。
概観を示し、プログラマブルデバッガをプログラマブル
実行環境として用いて好ましい実施例を記述する。ま
た、プログラマブルデバッガに対するコードを作るため
にどのように静的ソースコードアナライザが使われる
か、及びどのようにこのような静的ソースコードアナラ
イザがコードアナライザを生成するシステムを用いて作
られるかを開示する。最後に、プログラマブルデバッガ
からの副作用が、テストされるプログラムの流れグラフ
のグラフ表示を駆動する一実施例を開示する。
【0016】本発明の概観:図2 図2には、プログラムの動的特性を調査する本発明の技
術を示す。システム202は、プログラマブル実行環境
203で実行される1以上のプログラムから構成されて
いる。このような実行環境の1つの例としては、プログ
ラマブルデバッガがある。我々はシステム202が入力
201で実行されるときに示す動的特性207のいくら
かに興味を持った。図1のようにシステムを変換する代
わりに、我々はシステム202を変えずに、システム2
02が便利さのみのために図2で別に示したシステム2
04と全く同じくなり、また、代わりに実行環境203
を他の実行環境205に変換するようにする。変換する
方法は、解析されるシステム(202≡204)及び動
的特性207の双方に依存する。変換された実行環境2
05は、特性及びシステム自身によって決められるポイ
ントで、システム204(≡202)のプログラムの実
行に割り込み、副作用206を生成する。これらの副作
用は、図1で生成した副作用106のように、特性20
7を調査するために使える。
術を示す。システム202は、プログラマブル実行環境
203で実行される1以上のプログラムから構成されて
いる。このような実行環境の1つの例としては、プログ
ラマブルデバッガがある。我々はシステム202が入力
201で実行されるときに示す動的特性207のいくら
かに興味を持った。図1のようにシステムを変換する代
わりに、我々はシステム202を変えずに、システム2
02が便利さのみのために図2で別に示したシステム2
04と全く同じくなり、また、代わりに実行環境203
を他の実行環境205に変換するようにする。変換する
方法は、解析されるシステム(202≡204)及び動
的特性207の双方に依存する。変換された実行環境2
05は、特性及びシステム自身によって決められるポイ
ントで、システム204(≡202)のプログラムの実
行に割り込み、副作用206を生成する。これらの副作
用は、図1で生成した副作用106のように、特性20
7を調査するために使える。
【0017】実施例:図3 図3には、前段で記述したように実行環境を変更するこ
とによって動的特性を調査する方法の一実施例を示す。
図3では、実行環境203はデバッガ106である。デ
バッガとは、プログラム中のバグを発見するためにプロ
グラマが使うツールである。プログラムは、デバッグさ
れると、デバッガにおいて実行される。デバッガはプロ
グラマがプログラムの実行を精密に制御することを可能
にする。デバッガの基本的な能力としては、ブレイクポ
イントの設定がある。ブレイクポイントは、プログラム
がデバッガで実行されるときに、制御がプログラムから
デバッガへ渡されるプログラム中の位置のことである。
多くのデバッガはプログラム可能(プログラマブル)で
あり、即ち、プログラマはブレイクポイントの位置だけ
ではなく、ブレークポイントに遭遇したときの動作も指
定する命令のリストをデバッガに提供できる。動作とし
ては、デバッガを使っている人が再開するまで実行を止
めることや、機械レジスタの内容やメモリ位置をプリン
トアウトすることがある。
とによって動的特性を調査する方法の一実施例を示す。
図3では、実行環境203はデバッガ106である。デ
バッガとは、プログラム中のバグを発見するためにプロ
グラマが使うツールである。プログラムは、デバッグさ
れると、デバッガにおいて実行される。デバッガはプロ
グラマがプログラムの実行を精密に制御することを可能
にする。デバッガの基本的な能力としては、ブレイクポ
イントの設定がある。ブレイクポイントは、プログラム
がデバッガで実行されるときに、制御がプログラムから
デバッガへ渡されるプログラム中の位置のことである。
多くのデバッガはプログラム可能(プログラマブル)で
あり、即ち、プログラマはブレイクポイントの位置だけ
ではなく、ブレークポイントに遭遇したときの動作も指
定する命令のリストをデバッガに提供できる。動作とし
ては、デバッガを使っている人が再開するまで実行を止
めることや、機械レジスタの内容やメモリ位置をプリン
トアウトすることがある。
【0018】本発明で使われるデバッガは、プログラム
の実行可能(エグゼキュタブル)バイナリと共に働く。
デバッガを使うプログラマは、プログラムのソースコー
ドに対してブレークポイントの位置を指定する。デバッ
ガは次に、実行可能バイナリコード中の対応する位置を
見つけ、実行可能バイナリ中のその点の命令を不当命令
(イリーガル・インストラクション)で置き換える。デ
バッガは、置き換えた命令及びデバッガがブレイクポイ
ントにおいてとる動作を保持する。
の実行可能(エグゼキュタブル)バイナリと共に働く。
デバッガを使うプログラマは、プログラムのソースコー
ドに対してブレークポイントの位置を指定する。デバッ
ガは次に、実行可能バイナリコード中の対応する位置を
見つけ、実行可能バイナリ中のその点の命令を不当命令
(イリーガル・インストラクション)で置き換える。デ
バッガは、置き換えた命令及びデバッガがブレイクポイ
ントにおいてとる動作を保持する。
【0019】プログラムが実行され、ブレークポイント
をセットしたポイントに到達したときに、ハードウェア
は不当命令に不当命令イベントで応答する。デバッガ
は、不当命令イベントに応答して、プログラマがブレー
クポイントに対して指定した動作を実行する。それがさ
れるとデバッガは、不当命令を保持された実際の命令で
置き換え、その命令を実行し、プログラムに制御を戻
し、次のブレイクポイントに到達するまで実行し続け
る。
をセットしたポイントに到達したときに、ハードウェア
は不当命令に不当命令イベントで応答する。デバッガ
は、不当命令イベントに応答して、プログラマがブレー
クポイントに対して指定した動作を実行する。それがさ
れるとデバッガは、不当命令を保持された実際の命令で
置き換え、その命令を実行し、プログラムに制御を戻
し、次のブレイクポイントに到達するまで実行し続け
る。
【0020】本発明の一実施例では、このようなデバッ
ガ306は、入力303で動くシステム302の特定の
特性308を決めるために使われる。最初に、静的アナ
ライザ304が特定の特性のために作られる。静的アナ
ライザ304は、システムのソースコード301に課さ
れ、デバッガ306に対してコマンド305のシーケン
スを生成する。ここで、システム302はデバッガ30
6にロードされ、このデバッガは次に、静的アナライザ
304によって生成したコマンド305を実行すること
によって自身を構成し、最後に入力303を使ってシス
テム302を実行する。生成コマンド305によって構
成されたように、デバッガ306は指定ポイントにおい
てシステム302の実行を中断し、副作用307を作る
(例えば、ログファイルへの実行の中断時のプログラム
の状態の情報を書き込む)。この副作用は次に、動的特
性301の情報のために解析される。
ガ306は、入力303で動くシステム302の特定の
特性308を決めるために使われる。最初に、静的アナ
ライザ304が特定の特性のために作られる。静的アナ
ライザ304は、システムのソースコード301に課さ
れ、デバッガ306に対してコマンド305のシーケン
スを生成する。ここで、システム302はデバッガ30
6にロードされ、このデバッガは次に、静的アナライザ
304によって生成したコマンド305を実行すること
によって自身を構成し、最後に入力303を使ってシス
テム302を実行する。生成コマンド305によって構
成されたように、デバッガ306は指定ポイントにおい
てシステム302の実行を中断し、副作用307を作る
(例えば、ログファイルへの実行の中断時のプログラム
の状態の情報を書き込む)。この副作用は次に、動的特
性301の情報のために解析される。
【0021】図5には、このアプローチが使用される例
を示す。ここで、ソフトウェアテストの応用例を示し、
これは、テストの組が完全であるかを決めることが望ま
れる。即ち、全てのif文の真と偽の双方の枝のテスト
である。例えば、ソースコード501では、真と偽の枝
がそれぞれ行2と5で始まるようなif文が行1にあ
り、テストは両方の枝を実行しなくてはならない。好ま
しい実施例では、静的アナライザ304は、ソースコー
ドアナライザを生成するツールであるGENOAを用い
る。GENOAは、ピー・デバンブ(P. Devanbu)著の
論文「GENOA−言語及びフロントエンドに依存しな
いソースコードアナライザジェネレータ(GENOA- A lan
guage and front-end independent source code analyz
er generator)」(Proceedings, Twelfth Internation
al Conference on Software Engineering、1992年
5月)に記述されている。GENOA710により作ら
れた静的アナライザ304は、プログラムのソースコー
ド501の構文解析ツリー表示上で動作する。
を示す。ここで、ソフトウェアテストの応用例を示し、
これは、テストの組が完全であるかを決めることが望ま
れる。即ち、全てのif文の真と偽の双方の枝のテスト
である。例えば、ソースコード501では、真と偽の枝
がそれぞれ行2と5で始まるようなif文が行1にあ
り、テストは両方の枝を実行しなくてはならない。好ま
しい実施例では、静的アナライザ304は、ソースコー
ドアナライザを生成するツールであるGENOAを用い
る。GENOAは、ピー・デバンブ(P. Devanbu)著の
論文「GENOA−言語及びフロントエンドに依存しな
いソースコードアナライザジェネレータ(GENOA- A lan
guage and front-end independent source code analyz
er generator)」(Proceedings, Twelfth Internation
al Conference on Software Engineering、1992年
5月)に記述されている。GENOA710により作ら
れた静的アナライザ304は、プログラムのソースコー
ド501の構文解析ツリー表示上で動作する。
【0022】構文解析ツリーは、ラベル付けされた端部
が接続されたラベル付けされた節の集合である。節は構
文解析ツリーの異なる部分を表す。節上のラベルは、こ
の節によって表される構文構造のタイプを表す。解析さ
れるプログラムを含む全ソースファイルは、Fileと
ラベル付けされた節によって表される。この節より下の
ツリーでは、if文601に対応するIfとラベル付け
された節がある。構文解析ツリーのこの部分は図6の符
号602に現われる。この節から出て行く2つの端があ
り、これらは、if文601のthen及びelseの
部分に対応するthen及びelse(英大文字で示し
てある)とラベル付けされている。これらの各端は、I
f節(601の行1)を601の行2と5で始まるブロ
ックを表すBlock節に接続する。
が接続されたラベル付けされた節の集合である。節は構
文解析ツリーの異なる部分を表す。節上のラベルは、こ
の節によって表される構文構造のタイプを表す。解析さ
れるプログラムを含む全ソースファイルは、Fileと
ラベル付けされた節によって表される。この節より下の
ツリーでは、if文601に対応するIfとラベル付け
された節がある。構文解析ツリーのこの部分は図6の符
号602に現われる。この節から出て行く2つの端があ
り、これらは、if文601のthen及びelseの
部分に対応するthen及びelse(英大文字で示し
てある)とラベル付けされている。これらの各端は、I
f節(601の行1)を601の行2と5で始まるブロ
ックを表すBlock節に接続する。
【0023】GENOA710によって作られた静的ア
ナライザ304は、if文を表す節を探している構文解
析ツリーを横断する。アナライザは、If文の節を見つ
けると、構文解析ツリーからソースコードにおける真と
偽の枝に対する開始位置が何であるかを判断し、それら
の位置、及び到達されたときに行われる動作を指定する
デバッガコマンド502(図5)を生成する。コマンド
がデバッガ306に供給され、ソース501から構築さ
れたシステム302がそのコマンドによって構成される
ようにデバッガによって実行されると、デバッガは実行
によって到達した各ブレイクポイントにおいて、そのブ
レイクポイントに対して指定された動作を行う。もしブ
レイクポイント全てに対して指定した動作が起きたなら
ば、テストの組は、if文の枝に関して完成したことに
なる。ここで、デバッガ命令は、ソース501から作ら
れる必要はなく、テストされるプログラムのいかなる使
用可能な情報源からも作られる。
ナライザ304は、if文を表す節を探している構文解
析ツリーを横断する。アナライザは、If文の節を見つ
けると、構文解析ツリーからソースコードにおける真と
偽の枝に対する開始位置が何であるかを判断し、それら
の位置、及び到達されたときに行われる動作を指定する
デバッガコマンド502(図5)を生成する。コマンド
がデバッガ306に供給され、ソース501から構築さ
れたシステム302がそのコマンドによって構成される
ようにデバッガによって実行されると、デバッガは実行
によって到達した各ブレイクポイントにおいて、そのブ
レイクポイントに対して指定された動作を行う。もしブ
レイクポイント全てに対して指定した動作が起きたなら
ば、テストの組は、if文の枝に関して完成したことに
なる。ここで、デバッガ命令は、ソース501から作ら
れる必要はなく、テストされるプログラムのいかなる使
用可能な情報源からも作られる。
【0024】前述の議論から明白であるように、この技
術はソースコードの変更を要しない。デバッガによって
作られる実行可能バイナリの変更は、一時的であって、
実行可能バイナリへの命令の付加は伴わない。デバッガ
が多くのプラットホーム上に得られるものであるなら
ば、ポータビリティを犠牲にせずにバイナリインストル
メンテーションの便利さを得られる。このようなデバッ
ガの例としてgdbがあり、これは、prep.mit.eduから
のインターネットのファイル転送によって得られるアー
ル・ストールマン(R. Stallman)とアール・ペッシュ
(R. Pesch)著の「GDBを用いてのデバッグ(Debugg
ing with GDB)」に記述されている。
術はソースコードの変更を要しない。デバッガによって
作られる実行可能バイナリの変更は、一時的であって、
実行可能バイナリへの命令の付加は伴わない。デバッガ
が多くのプラットホーム上に得られるものであるなら
ば、ポータビリティを犠牲にせずにバイナリインストル
メンテーションの便利さを得られる。このようなデバッ
ガの例としてgdbがあり、これは、prep.mit.eduから
のインターネットのファイル転送によって得られるアー
ル・ストールマン(R. Stallman)とアール・ペッシュ
(R. Pesch)著の「GDBを用いてのデバッグ(Debugg
ing with GDB)」に記述されている。
【0025】動的特性アナライザをグラフ表示にする:
図7 デバッガ306によって作られる副作用307はもちろ
ん、動的特性を解析することに役立つ出力を作るいかな
る種類のデバイスへも提供される。例えば、図7では、
副作用307は流れグラフ705を動かすために使われ
る。流れグラフ705は、GENOAで作られた別の静
的アナライザ709を使って作られる。流れグラフ70
5は、視覚表示のためにグラフブラウザ706に提供さ
れる。次に、我々は、上述のようにデバッガ704のた
めにコマンド703を作るためにソースコードを解析す
る。コマンドは、ブロック等の初めにブレークポイント
をセットする。即ち、ブレークポイントが始動するたび
に、デバッガはコマンドが指定するように応答する。こ
の場合、このコマンドは、流れグラフの視覚表示の変更
を指定するプロセス間メッセージ708が、デバッガ7
04が実行しているプロセスからグラフブラウザ706
が実行しているプロセスまで送られることを指定する。
このメッセージに応答して、グラフブラウザ706は視
覚表示を変更する。この技術はテスト適用範囲情報の視
覚表示のため、又はプログラム理解やデバッグの単なる
手助けとして用いられる。
図7 デバッガ306によって作られる副作用307はもちろ
ん、動的特性を解析することに役立つ出力を作るいかな
る種類のデバイスへも提供される。例えば、図7では、
副作用307は流れグラフ705を動かすために使われ
る。流れグラフ705は、GENOAで作られた別の静
的アナライザ709を使って作られる。流れグラフ70
5は、視覚表示のためにグラフブラウザ706に提供さ
れる。次に、我々は、上述のようにデバッガ704のた
めにコマンド703を作るためにソースコードを解析す
る。コマンドは、ブロック等の初めにブレークポイント
をセットする。即ち、ブレークポイントが始動するたび
に、デバッガはコマンドが指定するように応答する。こ
の場合、このコマンドは、流れグラフの視覚表示の変更
を指定するプロセス間メッセージ708が、デバッガ7
04が実行しているプロセスからグラフブラウザ706
が実行しているプロセスまで送られることを指定する。
このメッセージに応答して、グラフブラウザ706は視
覚表示を変更する。この技術はテスト適用範囲情報の視
覚表示のため、又はプログラム理解やデバッグの単なる
手助けとして用いられる。
【0026】静的アナライザを作るためにGENOAを
使う:図8 静的アナライザ304を作るためにGENOA710で
使われる指定809の一部が図8で示される。GENO
Aが指定809から作る静的アナライザは、全体のプロ
グラムのブロックとswitch文の検索を行う。この
検索は、行801と行807の終わりにおいて角括弧
([、])によって指定される。何を検索するかが行8
02(ブロックに対して)及び行804(switch
文に対して)指定される。行803は、ブレークポイン
トがブロックの始めにセットされ、ブレイクポイントを
削除し、継続するようにデバッガに指示する各ブレーク
ポイントに対してデバッガコマンドを生成すべきである
ことを指定する。switch文に対しては、ブレイク
ポイントはswitchの各caseにセットされ(行
807)、同じデバッガコマンドが生成される。各ブレ
イクポイントは始動されると削除されるので、テストラ
ンの後に残るブレイクポイントは、実行されなかったコ
ードの部分を指示する。好ましい実施例で採用するプロ
グラマブルデバッガは、ユーザにいずれのブレークポイ
ントが実行されなかったかを示し、従っていずれのコー
ドの部分が実行されなかったかを示す。GENOA71
0及びそれが静的コードアナライザを指定するために用
いる言語のより詳細な記述としては、前記のデバンブ・
ピー著の論文「GENOA−言語及びフロントエンドに
依存しないソースコードアナライザジェネレータ」を参
照するとよい。
使う:図8 静的アナライザ304を作るためにGENOA710で
使われる指定809の一部が図8で示される。GENO
Aが指定809から作る静的アナライザは、全体のプロ
グラムのブロックとswitch文の検索を行う。この
検索は、行801と行807の終わりにおいて角括弧
([、])によって指定される。何を検索するかが行8
02(ブロックに対して)及び行804(switch
文に対して)指定される。行803は、ブレークポイン
トがブロックの始めにセットされ、ブレイクポイントを
削除し、継続するようにデバッガに指示する各ブレーク
ポイントに対してデバッガコマンドを生成すべきである
ことを指定する。switch文に対しては、ブレイク
ポイントはswitchの各caseにセットされ(行
807)、同じデバッガコマンドが生成される。各ブレ
イクポイントは始動されると削除されるので、テストラ
ンの後に残るブレイクポイントは、実行されなかったコ
ードの部分を指示する。好ましい実施例で採用するプロ
グラマブルデバッガは、ユーザにいずれのブレークポイ
ントが実行されなかったかを示し、従っていずれのコー
ドの部分が実行されなかったかを示す。GENOA71
0及びそれが静的コードアナライザを指定するために用
いる言語のより詳細な記述としては、前記のデバンブ・
ピー著の論文「GENOA−言語及びフロントエンドに
依存しないソースコードアナライザジェネレータ」を参
照するとよい。
【0027】図8から明白であるように、GENOA7
10のような静的ソースコードアナライザジェネレータ
の使用は大いに静的アナライザ304の実装を単純化す
る。GENOAのようなツールが、gdbのようなポー
タブルなプログラマブルデバッガと使われると、広範囲
のハードウェア上の広範囲の動的特性を決める装置を容
易に実装することができる。
10のような静的ソースコードアナライザジェネレータ
の使用は大いに静的アナライザ304の実装を単純化す
る。GENOAのようなツールが、gdbのようなポー
タブルなプログラマブルデバッガと使われると、広範囲
のハードウェア上の広範囲の動的特性を決める装置を容
易に実装することができる。
【0028】コードをインストルメントするために静的
アナライザとバイナリ編集ツールを使う:図9及び10 前述のインストルメンテーション技術は柔軟性があり、
ポータブルである。しかしながら、デバッガを使うこと
に対してペナルティーがある。インストルメントされた
コードがデバッガの制御下で実行され、実行がインスト
ルメントされたポイントに到達すると、デバッガはイン
ストルメンテーションで指定した情報を集めるために呼
び出されなければならず、これをした後は、デバッガは
目的プログラムに戻らなくてはならない。これは、イン
ストルメントされたポイントに到達するたびに、2つの
文脈を切り替え、これは従って望ましくない程度まで目
的プログラムの実行の速度を遅くする。
アナライザとバイナリ編集ツールを使う:図9及び10 前述のインストルメンテーション技術は柔軟性があり、
ポータブルである。しかしながら、デバッガを使うこと
に対してペナルティーがある。インストルメントされた
コードがデバッガの制御下で実行され、実行がインスト
ルメントされたポイントに到達すると、デバッガはイン
ストルメンテーションで指定した情報を集めるために呼
び出されなければならず、これをした後は、デバッガは
目的プログラムに戻らなくてはならない。これは、イン
ストルメントされたポイントに到達するたびに、2つの
文脈を切り替え、これは従って望ましくない程度まで目
的プログラムの実行の速度を遅くする。
【0029】文脈切り替えのオーバーヘッドを避けるた
め、我々はインストルメンテーションを提供するために
デバッガの代わりにプログラマブルバイナリ編集ツール
を使う技術を開発した。プログラマブルバイナリ編集ツ
ールは、プログラムのオブジェクトコードを編集し、結
果的にオブジェクトコードをインストルメントするため
に使われる。インストルメンテーションがオブジェクト
コードに含まれているので、インストルメントされたポ
イントに到達するときにはいつでも、文脈を切り替える
必要はない。プログラマブルバイナリ編集ツールは最近
多くのハードウェアプラットホームにおいて利用可能に
なった。それらは実行可能プログラムを走り読み、解
析、変更することに対して様々な基本を提供する。この
ようなツールの典型的な応用例としては、バイナリを走
り読みし、全てのロード及び格納命令においてインスト
ルメンテーションを挿入して、そのロード又は格納がキ
ャッシュのミスをもたらすかどうか調べる。このような
ツールは使用が難しく、プラットフォームに大きく依存
するが、高効率な動的にインストルメントされたバイナ
リをもたらす。このような編集ツールの例としては、A
TOMがある。(エー・スリバスタバ(A. Srivastav
a)及びエー・ユーステース(A. Eustace)共著の論
文、「ATOM;カスタマイズ可能なプログラム解析ツ
ールを構築するシステム」(Proceedings of the ACM S
IGPLAN Conference on Programming Language Design a
nd Implementation、米国フロリダ州オーランド、19
94年)を参照するとよい。)
め、我々はインストルメンテーションを提供するために
デバッガの代わりにプログラマブルバイナリ編集ツール
を使う技術を開発した。プログラマブルバイナリ編集ツ
ールは、プログラムのオブジェクトコードを編集し、結
果的にオブジェクトコードをインストルメントするため
に使われる。インストルメンテーションがオブジェクト
コードに含まれているので、インストルメントされたポ
イントに到達するときにはいつでも、文脈を切り替える
必要はない。プログラマブルバイナリ編集ツールは最近
多くのハードウェアプラットホームにおいて利用可能に
なった。それらは実行可能プログラムを走り読み、解
析、変更することに対して様々な基本を提供する。この
ようなツールの典型的な応用例としては、バイナリを走
り読みし、全てのロード及び格納命令においてインスト
ルメンテーションを挿入して、そのロード又は格納がキ
ャッシュのミスをもたらすかどうか調べる。このような
ツールは使用が難しく、プラットフォームに大きく依存
するが、高効率な動的にインストルメントされたバイナ
リをもたらす。このような編集ツールの例としては、A
TOMがある。(エー・スリバスタバ(A. Srivastav
a)及びエー・ユーステース(A. Eustace)共著の論
文、「ATOM;カスタマイズ可能なプログラム解析ツ
ールを構築するシステム」(Proceedings of the ACM S
IGPLAN Conference on Programming Language Design a
nd Implementation、米国フロリダ州オーランド、19
94年)を参照するとよい。)
【0030】バイナリ編集ツールを使うプログラムをイ
ンストルメントする本発明の技術は、前と同様にソース
コードを静的に解析して動作時において介入が必要であ
るソースコードにおけるポイントを決定する。しかしな
がら、デバッガのためにコマンドを生成する代わりに、
我々はバイナリインストルメンテーションプログラムの
ためにコマンドを生成する。我々はATOMでこの技術
を使い、ALPHA(商標)プラットホームの枝適用範
囲解析ツールを作った。
ンストルメントする本発明の技術は、前と同様にソース
コードを静的に解析して動作時において介入が必要であ
るソースコードにおけるポイントを決定する。しかしな
がら、デバッガのためにコマンドを生成する代わりに、
我々はバイナリインストルメンテーションプログラムの
ためにコマンドを生成する。我々はATOMでこの技術
を使い、ALPHA(商標)プラットホームの枝適用範
囲解析ツールを作った。
【0031】図9には、上記の技術の好ましい実施例を
示す。インストルメンテーションシステム901はAT
OMシステム911を採用した。ATOMは、デジタル
・イクイップメント・コーポレーション(米国マサチュ
ーセッツ州メイナード)のATOMリファレンスマニュ
アル(1993)で完全に記述されている。これは、イ
ンターネットのftp://ftp.dec.com/pub/DEC/atomtools
から入手可能である。
示す。インストルメンテーションシステム901はAT
OMシステム911を採用した。ATOMは、デジタル
・イクイップメント・コーポレーション(米国マサチュ
ーセッツ州メイナード)のATOMリファレンスマニュ
アル(1993)で完全に記述されている。これは、イ
ンターネットのftp://ftp.dec.com/pub/DEC/atomtools
から入手可能である。
【0032】図9で示すように、ATOMを使ってシス
テムをインストルメントするためには、ソースコード9
03をコンパイラとリンカ905を使って従来の方法コ
ンパイル、リンクする。このプロセスの結果として、シ
ステムのためにオブジェクト又はバイナリコードファイ
ル906がもたらされる。次のステップは、インストル
メントされたバイナリコードファイル913を作るため
にバイナリコードファイル906にATOM911を課
すことである。ATOM911がバイナリコードファイ
ル906をインストルメントする方法は、ファイル90
9によって決められる。このようなファイルには3種類
あり、解析コード917は周知のC言語の1以上の関数
を含み、これは、プログラムの実行についてのデータを
収集し、出力する。インストルメンテーションコード9
19は、解析コード917で指定された関数がインスト
ルメントされたバイナリファイル913内のコードの実
行の間に呼び出されるときに指定する関数を含む。イン
ストルメンテーションコード919内の関数は従って、
ヘッダーファイル915内のデータから解析関数が呼び
出されるときに決める。例えば、ヘッダーファイル91
5が解析コード911内の与えられた関数が呼び出され
る命令のソースコードにおける行番号をリストするファ
イルを有し、インストルメンテーションコード919
は、プログラム実行がヘッダーファイル915で指定さ
れた行番号の1つに到達すれば必ず与えられた関数が呼
び出されることを指定する関数を有する。
テムをインストルメントするためには、ソースコード9
03をコンパイラとリンカ905を使って従来の方法コ
ンパイル、リンクする。このプロセスの結果として、シ
ステムのためにオブジェクト又はバイナリコードファイ
ル906がもたらされる。次のステップは、インストル
メントされたバイナリコードファイル913を作るため
にバイナリコードファイル906にATOM911を課
すことである。ATOM911がバイナリコードファイ
ル906をインストルメントする方法は、ファイル90
9によって決められる。このようなファイルには3種類
あり、解析コード917は周知のC言語の1以上の関数
を含み、これは、プログラムの実行についてのデータを
収集し、出力する。インストルメンテーションコード9
19は、解析コード917で指定された関数がインスト
ルメントされたバイナリファイル913内のコードの実
行の間に呼び出されるときに指定する関数を含む。イン
ストルメンテーションコード919内の関数は従って、
ヘッダーファイル915内のデータから解析関数が呼び
出されるときに決める。例えば、ヘッダーファイル91
5が解析コード911内の与えられた関数が呼び出され
る命令のソースコードにおける行番号をリストするファ
イルを有し、インストルメンテーションコード919
は、プログラム実行がヘッダーファイル915で指定さ
れた行番号の1つに到達すれば必ず与えられた関数が呼
び出されることを指定する関数を有する。
【0033】ATOMは、ファイル909のコードとデ
ータ、及びコンパイラとリンカ905によって作られる
バイナリコードファイルをとり、それらからインストル
メントされたバイナリファイル913を作る。これらの
インストルメントされたファイル913は、解析コード
917で指定された関数への呼出しのオブジェクトコー
ドがインストルメンテーションコード919及び適切な
らばヘッダファイル915で指定する位置でインストル
メントされたバイナリファイル913に挿入されている
という点で、オリジナルバイナリファイル906と相違
する。さらに、解析コード917の関数のオブジェクト
コードはインストルメントされたバイナリ913の中へ
とリンクされる。従って、インストルメントされたバイ
ナリファイル913が実行されると、解析コード911
の関数への呼出しは、インストルメンテーションコード
919、915で指定されるように呼び出され、呼び出
された関数により作られたデータは、インストルメント
されたバイナリファイル913が実行されると、出力さ
れる。データはファイルにただ出力するか、又はユーザ
の必要に応じて用いる。例えば、そのデータは、図7の
デバッガ704からのデータの出力に関して記述したよ
うに、グラフブラウザを駆動するために使うことができ
る。さらに、解析関数がインストルメントされたバイナ
リ913の中へとリンクされるので、呼出しと戻しは、
プログラマブルデバッガが用いられるときにインストル
メントするコードの実行を遅くする文脈変更無しでされ
る。
ータ、及びコンパイラとリンカ905によって作られる
バイナリコードファイルをとり、それらからインストル
メントされたバイナリファイル913を作る。これらの
インストルメントされたファイル913は、解析コード
917で指定された関数への呼出しのオブジェクトコー
ドがインストルメンテーションコード919及び適切な
らばヘッダファイル915で指定する位置でインストル
メントされたバイナリファイル913に挿入されている
という点で、オリジナルバイナリファイル906と相違
する。さらに、解析コード917の関数のオブジェクト
コードはインストルメントされたバイナリ913の中へ
とリンクされる。従って、インストルメントされたバイ
ナリファイル913が実行されると、解析コード911
の関数への呼出しは、インストルメンテーションコード
919、915で指定されるように呼び出され、呼び出
された関数により作られたデータは、インストルメント
されたバイナリファイル913が実行されると、出力さ
れる。データはファイルにただ出力するか、又はユーザ
の必要に応じて用いる。例えば、そのデータは、図7の
デバッガ704からのデータの出力に関して記述したよ
うに、グラフブラウザを駆動するために使うことができ
る。さらに、解析関数がインストルメントされたバイナ
リ913の中へとリンクされるので、呼出しと戻しは、
プログラマブルデバッガが用いられるときにインストル
メントするコードの実行を遅くする文脈変更無しでされ
る。
【0034】前述の記載からわかるように、ATOMは
非常に柔軟性がある。解析コードの唯一の限界は、C言
語のものであり、ヘッダーファイルとインストルメンテ
ーションコードの双方は命令、ブロックとプロシージャ
のレベルにおいてインストルメンテーションを許す。大
きいプログラムでのATOMの使用はしかしながら、フ
ァイル909の内容が手作業により作られ、これらのフ
ァイルの中のプログラムは、大きく、複雑で、書くこと
が難しいので限定される。それらは、インストルメント
されるプログラムに特殊なことではない。
非常に柔軟性がある。解析コードの唯一の限界は、C言
語のものであり、ヘッダーファイルとインストルメンテ
ーションコードの双方は命令、ブロックとプロシージャ
のレベルにおいてインストルメンテーションを許す。大
きいプログラムでのATOMの使用はしかしながら、フ
ァイル909の内容が手作業により作られ、これらのフ
ァイルの中のプログラムは、大きく、複雑で、書くこと
が難しいので限定される。それらは、インストルメント
されるプログラムに特殊なことではない。
【0035】これらの欠点は、静的アナライザ901を
使ってファイル909の内容の部分又は全てを作ること
で克服できる。静的アナライザ907は、静的アナライ
ザ807がデバッガコマンドの代わりに、ヘッダーファ
イル915、解析コード917、又はインストルメンテ
ーションコード919のデータの全て又は部分を生成す
る。ヘッダファイル915の内容がインストルメントさ
れたバイナリ913のふるまいを制御するので、ヘッダ
ーファイル915、及び解析コード917とインストル
メンテーションコード919のコードの間には概念的に
差がない。また、静的アナライザ907は手作業により
構築でき、又はGENOA710のようなジェネレータ
ツールを使って作られる。
使ってファイル909の内容の部分又は全てを作ること
で克服できる。静的アナライザ907は、静的アナライ
ザ807がデバッガコマンドの代わりに、ヘッダーファ
イル915、解析コード917、又はインストルメンテ
ーションコード919のデータの全て又は部分を生成す
る。ヘッダファイル915の内容がインストルメントさ
れたバイナリ913のふるまいを制御するので、ヘッダ
ーファイル915、及び解析コード917とインストル
メンテーションコード919のコードの間には概念的に
差がない。また、静的アナライザ907は手作業により
構築でき、又はGENOA710のようなジェネレータ
ツールを使って作られる。
【0036】適用範囲解析を許すためにインストルメン
トされたプログラムの例と同じことはプログラマブルデ
バッガの代わりにATOMを使ってされる。図10に
は、このような例のファイル909の内容の断片を示
す。1003には、インストルメントされるべきコード
を含むソースコードファイルx.cの断片を示し、この
断片には、if...else文が示されている。我々
がこのプログラムのテストが完全にこのプログラムをカ
バーするか知りたいので、我々は行102の文が実行さ
れたときに第1の副作用が発生し、行106の文が実行
されたときに第2の副作用が発生するように、断片をイ
ンストルメントする必要がある。
トされたプログラムの例と同じことはプログラマブルデ
バッガの代わりにATOMを使ってされる。図10に
は、このような例のファイル909の内容の断片を示
す。1003には、インストルメントされるべきコード
を含むソースコードファイルx.cの断片を示し、この
断片には、if...else文が示されている。我々
がこのプログラムのテストが完全にこのプログラムをカ
バーするか知りたいので、我々は行102の文が実行さ
れたときに第1の副作用が発生し、行106の文が実行
されたときに第2の副作用が発生するように、断片をイ
ンストルメントする必要がある。
【0037】この場合に必要とする解析関数は単純であ
る。インストルメントされている行が実際に実行された
ことを指示する情報を出力するだけでよい。この解析コ
ードの断片が1005で示してある。インストルメンテ
ーションコード919もまた単純である。ヘッダファイ
ル915の1つで指定された行が実行されたとき、解析
関数は呼び出されることを指定するだけでよい。コード
919の断片が1009で示してある。ヘッダファイル
915の断片が最後に、1007で示してある。ここで
見られるように、ヘッダーファイルは、各エントリーが
ソースコードファイル名(ここでは、x.c)及びイン
ストルメントされるそのソースコードファイルの行数を
含むリストである。
る。インストルメントされている行が実際に実行された
ことを指示する情報を出力するだけでよい。この解析コ
ードの断片が1005で示してある。インストルメンテ
ーションコード919もまた単純である。ヘッダファイ
ル915の1つで指定された行が実行されたとき、解析
関数は呼び出されることを指定するだけでよい。コード
919の断片が1009で示してある。ヘッダファイル
915の断片が最後に、1007で示してある。ここで
見られるように、ヘッダーファイルは、各エントリーが
ソースコードファイル名(ここでは、x.c)及びイン
ストルメントされるそのソースコードファイルの行数を
含むリストである。
【0038】我々の例では、解析関数とインストルメン
テーション関数のコードは、手作業によって書かれるほ
ど単純で、一般的である。静的アナライザ907は、枝
の全てが実行されることを確実にするためにx.cのい
ずれの行がインストルメントされるか指示するヘッダフ
ァイル915を生成するために使われる。静的アナライ
ザ901がヘッダーファイル915を生成する方法はも
ちろん、デバッガコマンドを生成した方法と比べて正確
に同じである。出力はデバッガコマンドのために必要と
される形式よりむしろヘッダーファイルのために必要と
される形式である。
テーション関数のコードは、手作業によって書かれるほ
ど単純で、一般的である。静的アナライザ907は、枝
の全てが実行されることを確実にするためにx.cのい
ずれの行がインストルメントされるか指示するヘッダフ
ァイル915を生成するために使われる。静的アナライ
ザ901がヘッダーファイル915を生成する方法はも
ちろん、デバッガコマンドを生成した方法と比べて正確
に同じである。出力はデバッガコマンドのために必要と
される形式よりむしろヘッダーファイルのために必要と
される形式である。
【0039】結論 前述の記載により、プログラムの動的特性を決める最も
良い態様を開示した。これらの技術の重要な点は、プロ
グラムインストルメンテーションをするためにプログラ
マブルデバイスに命令を生成するために静的解析を使用
することである。ここに開示したように、プログラマブ
ルデバイスは、プログラマブルデバッガ又はプログラマ
ブルバイナリエディタである。しかしながら、本発明の
技術は他のデバイスで用いられてもよい。例えば、プロ
グラマブルデバイスはプログラムソースコードのための
プログラマブルエディタである。インストルメンテーシ
ョンの指定の命令を生成するための静的解析の使用は、
プログラムをインストルメントする人に、手作業による
インストルメンテーションに柔軟性を与えるが、いかな
る大きさのプログラムに対して容易なインストルメンテ
ーションを可能にする。最後に、GENOAのようなシ
ステムを使って静的アナライザを作ることは特に有利で
あるが、アナライザは手作業による方法を含むいかなる
方法ででも作ることができる。
良い態様を開示した。これらの技術の重要な点は、プロ
グラムインストルメンテーションをするためにプログラ
マブルデバイスに命令を生成するために静的解析を使用
することである。ここに開示したように、プログラマブ
ルデバイスは、プログラマブルデバッガ又はプログラマ
ブルバイナリエディタである。しかしながら、本発明の
技術は他のデバイスで用いられてもよい。例えば、プロ
グラマブルデバイスはプログラムソースコードのための
プログラマブルエディタである。インストルメンテーシ
ョンの指定の命令を生成するための静的解析の使用は、
プログラムをインストルメントする人に、手作業による
インストルメンテーションに柔軟性を与えるが、いかな
る大きさのプログラムに対して容易なインストルメンテ
ーションを可能にする。最後に、GENOAのようなシ
ステムを使って静的アナライザを作ることは特に有利で
あるが、アナライザは手作業による方法を含むいかなる
方法ででも作ることができる。
【0040】
【発明の効果】以上述べたように、本発明の第1プログ
ラムの動的特性についての情報を得るための技術は、
所望の情報を作るのにいかなるインストルメンテーショ
ンが必要とされるのかを決定する第1のプログラムの静
的な解析をする。 次に、プログラマブルインストルメ
ンテーション装置が第1のプログラムのインストルメン
トされたバージョンを作るように、第2プログラムを作
る。インストルメントされたプログラムの実行により、
動的特性の情報が提供される。インストルメンテーショ
ン装置のためのプログラムは、ソースコードを静的に解
析するソースコードアナライザによって作られる。ソー
スコードアナライザは従って、コードアナライザジェネ
レータによって作られる。インストルメンテーションか
らの出力は、グラフ表示システムに供給される。コード
アナライザジェネレータは、単に第2プログラムを作る
ためのソースコードアナライザを生成するだけではな
く、グラフブラウザによって実行されるとプログラムの
ために流れグラフを作るプログラムを作るためのソース
コードアナライザをも生成する。この場合、グラフブラ
ウザは、流れグラフの形を変えることによって実行環境
からの出力に応答する。これにより、大きいプログラム
に対しても実用性があり、手作業によるインストルメン
テーションのような柔軟性があるようなインストルメン
テーションが提供できる。
ラムの動的特性についての情報を得るための技術は、
所望の情報を作るのにいかなるインストルメンテーショ
ンが必要とされるのかを決定する第1のプログラムの静
的な解析をする。 次に、プログラマブルインストルメ
ンテーション装置が第1のプログラムのインストルメン
トされたバージョンを作るように、第2プログラムを作
る。インストルメントされたプログラムの実行により、
動的特性の情報が提供される。インストルメンテーショ
ン装置のためのプログラムは、ソースコードを静的に解
析するソースコードアナライザによって作られる。ソー
スコードアナライザは従って、コードアナライザジェネ
レータによって作られる。インストルメンテーションか
らの出力は、グラフ表示システムに供給される。コード
アナライザジェネレータは、単に第2プログラムを作る
ためのソースコードアナライザを生成するだけではな
く、グラフブラウザによって実行されるとプログラムの
ために流れグラフを作るプログラムを作るためのソース
コードアナライザをも生成する。この場合、グラフブラ
ウザは、流れグラフの形を変えることによって実行環境
からの出力に応答する。これにより、大きいプログラム
に対しても実用性があり、手作業によるインストルメン
テーションのような柔軟性があるようなインストルメン
テーションが提供できる。
【図1】従来技術のプログラムの動的特性の決定を示す
概観ブロック図である。ここで本図面の符号は、2つの
部分を有し、下二桁は図の中のアイテムの番号であり、
残りの桁はアイテムが最初に現われる図の番号である。
従って、符号201のアイテムは図2に最初に現われ
る。
概観ブロック図である。ここで本図面の符号は、2つの
部分を有し、下二桁は図の中のアイテムの番号であり、
残りの桁はアイテムが最初に現われる図の番号である。
従って、符号201のアイテムは図2に最初に現われ
る。
【図2】本発明のプログラムの動的特性の決定を示す概
観ブロック図である。
観ブロック図である。
【図3】実行環境がデバッガである一実施例を示す概観
ブロック図である。
ブロック図である。
【図4】従来技術のプログラムの枝適用範囲特性を決め
るためのソースコードのインストルメントを示すソース
コードである。
るためのソースコードのインストルメントを示すソース
コードである。
【図5】本発明のプログラムの枝適用範囲特性の決定に
使われるように実行環境を変更する方法を示すソースコ
ードである。
使われるように実行環境を変更する方法を示すソースコ
ードである。
【図6】プログラムの構文解析ツリーの静的解析が実行
環境の変更のコードを生成する方法を示すソースコード
とブロック図の混合図である。
環境の変更のコードを生成する方法を示すソースコード
とブロック図の混合図である。
【図7】実行環境からの出力が、プログラムのテスト結
果の動的なグラフ表示を作るようにどのようにグラフブ
ラウズプログラムに課されるかを示す概略ブロック図で
ある。
果の動的なグラフ表示を作るようにどのようにグラフブ
ラウズプログラムに課されるかを示す概略ブロック図で
ある。
【図8】静的アナライザの生成に使われるGENOA仕
様の一部のソースコードである。
様の一部のソースコードである。
【図9】従来の静的解析がコードをインストルメントす
るためにバイナリインストルメンテーションツールと関
連して使われる方法の概観ブロック図である。
るためにバイナリインストルメンテーションツールと関
連して使われる方法の概観ブロック図である。
【図10】テスト適用範囲に対するインストルメンテー
ションに対して生成されたコード及びデータの例であ
る。
ションに対して生成されたコード及びデータの例であ
る。
101 入力 102 システム 104 実行環境 105 変換されたシステム 106 副作用 107 動的特性 201 入力 202 システム 203 実行環境 204 システム 205 変更された実行環境 206 副作用 207 動的特性 301 ソースコード 302 システム 303 入力 304 静的アナライザ 305 デバッガコマンド 306 デバッガ 307 副作用 308 動的特性 701 ソースファイル 702 実行可能バイナリ 703 ブレークコマンド 704 デバッガ 705 流れグラフ 706 グラフブラウザ 709 流れグラフ静的アナライザ 710 アナライザジェネレータ 809 指定 901 インストルメンテーションシステム 903 システムのソースコード 905 コンパイラとリンカ 906 バイナリ 907 静的アナライザ 909 ファイル 911 ATOM 913 インストルメントされたバイナリ 909 ファイル 915 ヘッダーファイル 917 解析コード 919 インストルメンテーションコード
Claims (18)
- 【請求項1】該コンピュータシステム及び該装置にアク
セスできる第1の実行可能プログラム(302)の動的
特性についての第1の情報(308)を得るために使わ
れるコンピュータシステムを使って実装される装置であ
って、この装置が、 前記第1プログラムについての第2の情報(301)を
静的に解析して、そこから第2プログラム(303)を
作るための静的解析手段(304)であって、前記第2
の情報が、該コンピュータシステムにアクセスでき、前
記静的解析手段が、該コンピュータシステムで実行する
ことと、及び該コンピュータシステムがインストルメン
トされたプログラムを実行するときに、前記第1の情報
が出力されるように、前記第2プログラムに応答して該
コンピュータシステムで前記第1プログラムをインスト
ルメントするための手段(306)とからなることを特
徴とするコンピュータシステムを使って実装される装
置。 - 【請求項2】前記第1プログラムをインストルメントす
る手段は、前記第1プログラムのバイナリをインストル
メントすることによって前記第2プログラムに応答する
バイナリエディタであることを特徴とする請求項1記載
のコンピュータシステムを使って実装される装置。 - 【請求項3】前記第1プログラムをインストルメントす
る手段は、前記第1の情報が出力されるように、前記第
2プログラムの制御の下で前記第1プログラムを実行す
るプログラマブルデバッガであることを特徴とする請求
項1記載のコンピュータシステムを使って実装される装
置。 - 【請求項4】前記第2の情報は、前記第1プログラムに
対するソースコードであることを特徴とする請求項1乃
至3記載のコンピュータシステムを使って実装される装
置。 - 【請求項5】前記静的解析手段を自動的に生成する手段
(710)からさらになり、この自動的に生成する手段
が、前記第2の情報と及び前記第1の情報を得る技術の
指定(809)とに応答し、 この指定が該コンピュータシステムにアクセスでき、 この自動的に生成する手段が該コンピュータシステムに
おいて実行することを特徴とする請求項1乃至3記載の
コンピュータシステムを使って実装される装置。 - 【請求項6】前記第2の情報は、前記第1プログラムの
ソースコードであることを特徴とする請求項5記載のコ
ンピュータシステムを使って実装される装置。 - 【請求項7】前記第1の情報に応答してグラフ表示を提
供する手段とからさらになることを特徴とする請求項1
乃至3記載のコンピュータシステムを使って実装される
装置。 - 【請求項8】前記グラフ表示は、前記第1プログラムの
流れグラフであり、前記第1の情報に応答する手段は流
れグラフを変更することを特徴とする請求項7記載のコ
ンピュータシステムを使って実装される装置。 - 【請求項9】該コンピュータシステムがアクセスできる
第3プログラム(705)を作るように、前記第2の情
報を静的に解析するコンピュータシステムで実行する第
2の手段(709)とからさらになり、 前記第1の情報に応答する前記手段は、前記第3プログ
ラム10の制御の下で前記第1プログラムの流れグラフ
のグラフ表示を作ることを特徴とする請求項7記載のコ
ンピュータシステムを使って実装される装置。 - 【請求項10】該コンピュータシステムにアクセスでき
る第1の実行可能プログラムの動的特性についての第1
の情報を得るためのコンピュータシステムを使って実装
される方法であって、この方法が、 前記第1プログラムについての第2の情報を静的に解析
することによって、該コンピュータシステムにアクセス
できる第2プログラムを作るステップと、及び該コンピ
ュータシステムが前記インストルメントされたプログラ
ムを実行するときに該コンピュータシステムによって前
記第1の情報が出力されるように、前記第1プログラム
をインストルメントするために前記第2プログラムを使
うステップとからなるコンピュータシステムを使って実
装される方法。 - 【請求項11】前記第1プログラムをインストルメント
するために前記第2プログラムを使う前記ステップは、
前記第1プログラムのバイナリをインストルメントする
ことによって前記第2プログラムに応答するバイナリエ
ディタで実行されることを特徴とする請求項10記載の
方法。 - 【請求項12】前記第1プログラムをインストルメント
するために前記第2プログラムを使う前記ステップは、
前記第1の情報が出力されるように前記第2プログラム
の制御の下で前記第1プログラムを実行するプログラマ
ブルデバッガで実行されることを特徴とする請求項10
記載の方法。 - 【請求項13】第2プログラムを作る前記ステップは、
前記第1プログラムのソースコードを前記第2の情報と
して用いることを特徴とする請求項10乃至12記載の
方法。 - 【請求項14】前記第2の情報を静的に解析するため
に、第3プログラムを自動的に生成するステップとから
さらになり、 自動的に生成する手段が、前記第2の情報と、及び前記
第1の情報を得る技術の指定(809)に応答して生成
し、 この指定が、該コンピュータシステムにアクセスでき、 前記第2プログラムを作る前記ステップは、前記第3プ
ログラムを使ってされることを特徴とする請求項10乃
至12記載の方法。 - 【請求項15】第2プログラムを作る前記ステップは、
前記第1プログラムのソースコードを前記第2の情報と
して使ってされることを特徴とする請求項14記載の方
法。 - 【請求項16】前記第1の情報のグラフ表示を作るステ
ップとからさらになることを特徴とする請求項10乃至
12記載の方法。 - 【請求項17】前記第1の情報のグラフ表示を作る前記
ステップは、前記第1の情報に従って前記第1プログラ
ムの流れグラフを作って、変えるステップを含むことを
特徴とする請求項16記載の方法。 - 【請求項18】流れグラフのグラフ表示をグラフブラウ
ザに生成させる第3プログラムを作る前記第1プログラ
ムを静的に解析するステップと、及び前記第1の情報を
グラフ表示する前記ステップで使われた流れ図のグラフ
表示を作るために、グラフブラウザをプログラムするス
テップとからさらになることを特徴とする請求項17記
載の方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/502,246 US5909577A (en) | 1994-04-18 | 1995-07-13 | Determining dynamic properties of programs |
| US502246 | 1995-07-13 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0950389A true JPH0950389A (ja) | 1997-02-18 |
Family
ID=23996970
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP8184627A Pending JPH0950389A (ja) | 1995-07-13 | 1996-07-15 | コンピュータシステムを使って実装される装置及び方法 |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US5909577A (ja) |
| EP (1) | EP0753814B1 (ja) |
| JP (1) | JPH0950389A (ja) |
| CA (1) | CA2179553C (ja) |
| DE (1) | DE69604347T2 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8752026B2 (en) | 2009-06-01 | 2014-06-10 | International Business Machines Corporation | Efficient code instrumentation |
Families Citing this family (33)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6118940A (en) * | 1997-11-25 | 2000-09-12 | International Business Machines Corp. | Method and apparatus for benchmarking byte code sequences |
| US6289506B1 (en) * | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
| EP0997815A3 (en) * | 1998-10-29 | 2004-05-26 | Texas Instruments Incorporated | Interactive translation system and method |
| US6519766B1 (en) * | 1999-06-15 | 2003-02-11 | Isogon Corporation | Computer program profiler |
| US6931630B1 (en) * | 2000-09-27 | 2005-08-16 | International Business Machines Corporation | Method of, system for, and computer program product for providing automatic identification of a computer program code candidate for web deployment or a stored procedure |
| US6957421B2 (en) * | 2001-01-26 | 2005-10-18 | Hewlett-Packard Development Company, L.P. | Providing debugging capability for program instrumented code |
| US7073168B2 (en) * | 2001-12-06 | 2006-07-04 | Microsoft Corporation | Customizing binary content files |
| US20030110474A1 (en) * | 2001-12-06 | 2003-06-12 | International Business Machines Corporation | System for coverability analysis |
| US20040003383A1 (en) * | 2002-06-28 | 2004-01-01 | Microsoft Corporation | Stripping of unnecessary information from source code |
| GB0218680D0 (en) * | 2002-08-10 | 2002-09-18 | Ibm | Method and system for modifying a class file to monitor data flow |
| US20050081104A1 (en) * | 2003-09-25 | 2005-04-14 | Borislav Nikolik | Test diversity software testing method and apparatus |
| US20050160405A1 (en) * | 2004-01-20 | 2005-07-21 | Microsoft Corporation | System and method for generating code coverage information |
| US7657869B2 (en) * | 2004-02-05 | 2010-02-02 | Microsoft Corporation | Integration of external tools into an existing design environment |
| US20050273757A1 (en) * | 2004-06-07 | 2005-12-08 | Anderson Craig D | Methods, systems, and computer program products for summarizing operational behavior of a computer program |
| US20060004766A1 (en) * | 2004-06-30 | 2006-01-05 | International Business Machines Corp. | Method for making system-specific information available to management software |
| US7913092B1 (en) * | 2005-12-29 | 2011-03-22 | At&T Intellectual Property Ii, L.P. | System and method for enforcing application security policies using authenticated system calls |
| US7975257B2 (en) * | 2006-06-13 | 2011-07-05 | Microsoft Corporation | Iterative static and dynamic software analysis |
| US9495278B2 (en) * | 2006-12-27 | 2016-11-15 | International Business Machines Corporation | Dynamic discovery of data segments within instrumented code |
| US20080244536A1 (en) * | 2007-03-27 | 2008-10-02 | Eitan Farchi | Evaluating static analysis results using code instrumentation |
| CN101546287A (zh) * | 2008-03-26 | 2009-09-30 | 国际商业机器公司 | 代码修改方法和代码修改设备 |
| EP2261802A1 (en) * | 2009-06-10 | 2010-12-15 | ITI Scotland Limited | Automated debugging system and method |
| US8572589B2 (en) * | 2009-06-30 | 2013-10-29 | Agilent Technologies, Inc. | Programming language translator and enabling translation of machine-centric commands for controlling instrument |
| US8448147B2 (en) * | 2010-02-15 | 2013-05-21 | International Business Machines Corporation | Heterogenic Coverage Analysis |
| US9003379B2 (en) * | 2011-12-12 | 2015-04-07 | Zynga Inc. | Methods and systems for generating test information from a source code |
| US20150378864A1 (en) * | 2014-06-25 | 2015-12-31 | SmartBear Software, Inc. | Systems and methods for instrumenting applications for performance monitoring |
| US9471463B1 (en) * | 2015-04-16 | 2016-10-18 | International Business Machines Corporation | Debug management using dynamic analysis based on state information |
| US10417112B2 (en) * | 2016-09-19 | 2019-09-17 | International Business Machines Corporation | Code coverage through overlay hooks |
| US10853044B2 (en) | 2017-10-06 | 2020-12-01 | Nvidia Corporation | Device profiling in GPU accelerators by using host-device coordination |
| US10628280B1 (en) * | 2018-02-06 | 2020-04-21 | Northrop Grumman Systems Corporation | Event logger |
| US11257184B1 (en) | 2018-02-21 | 2022-02-22 | Northrop Grumman Systems Corporation | Image scaler |
| US11157003B1 (en) | 2018-04-05 | 2021-10-26 | Northrop Grumman Systems Corporation | Software framework for autonomous system |
| US11392284B1 (en) | 2018-11-01 | 2022-07-19 | Northrop Grumman Systems Corporation | System and method for implementing a dynamically stylable open graphics library |
| US10805146B2 (en) | 2019-01-17 | 2020-10-13 | Northrop Grumman Systems Corporation | Mesh network |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP0228480B1 (de) * | 1985-12-30 | 1990-05-16 | Ibm Deutschland Gmbh | Verfahren und Einrichtung zur Analyse von Steuerprogrammen |
| US4819234A (en) * | 1987-05-01 | 1989-04-04 | Prime Computer, Inc. | Operating system debugger |
| US5038348A (en) * | 1988-07-01 | 1991-08-06 | Sharp Kabushiki Kaisha | Apparatus for debugging a data flow program |
| US5313616A (en) * | 1990-09-18 | 1994-05-17 | 88Open Consortium, Ltd. | Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines |
| CA2143145C (en) * | 1994-04-18 | 1999-12-28 | Premkumar Thomas Devanbu | Determining dynamic properties of programs |
-
1995
- 1995-07-13 US US08/502,246 patent/US5909577A/en not_active Expired - Fee Related
-
1996
- 1996-06-20 CA CA002179553A patent/CA2179553C/en not_active Expired - Fee Related
- 1996-07-03 DE DE69604347T patent/DE69604347T2/de not_active Expired - Fee Related
- 1996-07-03 EP EP96304928A patent/EP0753814B1/en not_active Expired - Lifetime
- 1996-07-15 JP JP8184627A patent/JPH0950389A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8752026B2 (en) | 2009-06-01 | 2014-06-10 | International Business Machines Corporation | Efficient code instrumentation |
Also Published As
| Publication number | Publication date |
|---|---|
| US5909577A (en) | 1999-06-01 |
| EP0753814A3 (ja) | 1997-01-29 |
| CA2179553C (en) | 2001-01-02 |
| DE69604347T2 (de) | 2000-05-11 |
| CA2179553A1 (en) | 1997-01-14 |
| EP0753814A2 (en) | 1997-01-15 |
| EP0753814B1 (en) | 1999-09-22 |
| DE69604347D1 (de) | 1999-10-28 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH0950389A (ja) | コンピュータシステムを使って実装される装置及び方法 | |
| CA2143145C (en) | Determining dynamic properties of programs | |
| EP1130518B1 (en) | Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof | |
| US6003143A (en) | Tool and method for diagnosing and correcting errors in a computer program | |
| EP0785510B1 (en) | Program debugging system for debugging a program having a graphical user interface | |
| US7478366B2 (en) | Debugger and method for debugging computer programs across multiple programming languages | |
| US6430741B1 (en) | System and method for data coverage analysis of a computer program | |
| US5987250A (en) | Transparent instrumentation for computer program behavior analysis | |
| EP0539120B1 (en) | Source code analyzer | |
| US8448152B2 (en) | High-level language, architecture-independent probe program compiler | |
| US20030033592A1 (en) | Software debugger and software development support system | |
| JPH02272645A (ja) | プログラム・デバツグ支援方法 | |
| JP2000122886A (ja) | 半導体試験装置のプログラム作成方式 | |
| US6611924B1 (en) | Reducing code size of debug output statements | |
| Lyle et al. | Using the unravel program slicing tool to evaluate high integrity software | |
| JPH096646A (ja) | プログラムシミュレーション装置 | |
| JPH0926897A (ja) | プログラム解析装置及びプログラム解析方法 | |
| Studio | Getting Started Guide | |
| JPH06242943A (ja) | ソースコードレベルデバッグ装置 | |
| JP2000122895A (ja) | スタックサイズ解析方法及びスタックサイズ解析装置 | |
| JPH0448343A (ja) | プログラムデバッグ支援装置 | |
| Gaudino | Analysis and Design of Interactive Debugging for the ADA Programming Support Environment. | |
| Frakes | A Software Engineering Methodology for the Unix/C Environment | |
| Henriques et al. | ALMA versus DDD | |
| Cruz et al. | ALMA versus DDD |