JPH0926897A - プログラム解析装置及びプログラム解析方法 - Google Patents
プログラム解析装置及びプログラム解析方法Info
- Publication number
- JPH0926897A JPH0926897A JP8113728A JP11372896A JPH0926897A JP H0926897 A JPH0926897 A JP H0926897A JP 8113728 A JP8113728 A JP 8113728A JP 11372896 A JP11372896 A JP 11372896A JP H0926897 A JPH0926897 A JP H0926897A
- Authority
- JP
- Japan
- Prior art keywords
- information
- source code
- data
- program analysis
- processing
- 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
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】 ソースコードを静的解析によって効率的に解
析し、解析結果によって、処理内容及び入出力仕様を含
むソースコードの内容の理解を容易にするプログラム解
析装置及びプログラム解析方法を提供すること。 【解決手段】 データ抽出手段1が、ソースコードか
ら、当該ソースコードに含まれる各データの構造を表す
情報であるデータ情報を抽出する。関連抽出手段5が、
ソースコードとデータ情報とに基づいて、ソースコード
上の各位置ごとに、データ間に存在する関連を表す関連
情報を抽出する。処理抽出手段6が、ソースコード、デ
ータ情報及び関連情報に基づいて、ソースコード中の各
処理に関わる各関連情報を、当該処理を表す情報である
処理情報として抽出する。指定部7によって、出力の範
囲・態様を指定する。出力手段2が、抽出された各情報
を指定された態様で出力する。
析し、解析結果によって、処理内容及び入出力仕様を含
むソースコードの内容の理解を容易にするプログラム解
析装置及びプログラム解析方法を提供すること。 【解決手段】 データ抽出手段1が、ソースコードか
ら、当該ソースコードに含まれる各データの構造を表す
情報であるデータ情報を抽出する。関連抽出手段5が、
ソースコードとデータ情報とに基づいて、ソースコード
上の各位置ごとに、データ間に存在する関連を表す関連
情報を抽出する。処理抽出手段6が、ソースコード、デ
ータ情報及び関連情報に基づいて、ソースコード中の各
処理に関わる各関連情報を、当該処理を表す情報である
処理情報として抽出する。指定部7によって、出力の範
囲・態様を指定する。出力手段2が、抽出された各情報
を指定された態様で出力する。
Description
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムのソースコードを静的解析によって効率的に解析
し、解析結果によって、処理内容及び入出力仕様を含む
ソースコードの内容の理解を容易にするプログラム解析
装置及びプログラム解析方法に関するものである。
グラムのソースコードを静的解析によって効率的に解析
し、解析結果によって、処理内容及び入出力仕様を含む
ソースコードの内容の理解を容易にするプログラム解析
装置及びプログラム解析方法に関するものである。
【0002】
【従来の技術】ソフトウェア開発における検査や保守の
工程において、コンピュータプログラムのソースコード
をレビューして検査したり、改良のためリバースエンジ
ニアリングを行う場合、ソースコードの内容すなわち処
理内容や入出力仕様を解析する必要がある。
工程において、コンピュータプログラムのソースコード
をレビューして検査したり、改良のためリバースエンジ
ニアリングを行う場合、ソースコードの内容すなわち処
理内容や入出力仕様を解析する必要がある。
【0003】ソースコードの解析をするための従来技術
の一つは、実行モジュールを生成したりインタプリタを
用いてプログラムのテスト実行をし、実際にデータを処
理してみることである(動的解析)。
の一つは、実行モジュールを生成したりインタプリタを
用いてプログラムのテスト実行をし、実際にデータを処
理してみることである(動的解析)。
【0004】また、解析の他の手法は、プログラムの記
号実行すなわち静的解析である。代表的な静的解析の手
法では、プログラム中の変数などの要素を、具体的な属
性値ではなく、エラー値の可能性など抽象的な記号で表
す。そして、プログラムの処理の様子をこれら記号の組
み合わせで表す。
号実行すなわち静的解析である。代表的な静的解析の手
法では、プログラム中の変数などの要素を、具体的な属
性値ではなく、エラー値の可能性など抽象的な記号で表
す。そして、プログラムの処理の様子をこれら記号の組
み合わせで表す。
【0005】さらに、ソースコードの解析の他の手法と
しては、人間が手作業でソースコードを読解して内容を
把握することも行われる。
しては、人間が手作業でソースコードを読解して内容を
把握することも行われる。
【0006】
【発明が解決しようとする課題】しかしながら、上記の
ような従来の手法には、次のような問題点が存在してい
た。
ような従来の手法には、次のような問題点が存在してい
た。
【0007】まず、動的解析では、プログラムの不具合
がそもそも実際に動作できないことである場合に適用で
きない。また、プログラムの変更のたびに実行モジュー
ルを生成することは繁雑である。さらに、プログラムの
一部のみをテスト実行するには、ドライバやスタブな
ど、そのための特殊なプログラムモジュールを要する点
で繁雑である。また、テスト実行にはテストデータが必
要であるが、解析の目的に完全に一致した条件に基づい
てテストデータを作成することは、困難かつ繁雑であっ
た。
がそもそも実際に動作できないことである場合に適用で
きない。また、プログラムの変更のたびに実行モジュー
ルを生成することは繁雑である。さらに、プログラムの
一部のみをテスト実行するには、ドライバやスタブな
ど、そのための特殊なプログラムモジュールを要する点
で繁雑である。また、テスト実行にはテストデータが必
要であるが、解析の目的に完全に一致した条件に基づい
てテストデータを作成することは、困難かつ繁雑であっ
た。
【0008】また、従来の記号実行では、データの変遷
を抽象的に解析することは可能であったが、入力する具
体的なデータに応じて実行内容が変化する場合など、い
わばソースコードの入出力仕様を把握することが困難で
あった。
を抽象的に解析することは可能であったが、入力する具
体的なデータに応じて実行内容が変化する場合など、い
わばソースコードの入出力仕様を把握することが困難で
あった。
【0009】また、ソースコードの手作業による読解
は、繁雑で非常な労力を伴ううえ、行う者の技量によっ
て作業品質が異なるという問題点を有していた。
は、繁雑で非常な労力を伴ううえ、行う者の技量によっ
て作業品質が異なるという問題点を有していた。
【0010】本発明は、上記のような従来技術の問題点
を解決するために提案されたもので、その目的は、ソー
スコードを静的解析によって効率的に解析し、解析結果
によって、処理内容及び入出力仕様を含むソースコード
の内容の理解を容易にするプログラム解析装置及びプロ
グラム解析方法を提供することである。また、本発明の
他の目的は、処理手順が容易なプログラム解析装置及び
プログラム解析方法を提供することである。
を解決するために提案されたもので、その目的は、ソー
スコードを静的解析によって効率的に解析し、解析結果
によって、処理内容及び入出力仕様を含むソースコード
の内容の理解を容易にするプログラム解析装置及びプロ
グラム解析方法を提供することである。また、本発明の
他の目的は、処理手順が容易なプログラム解析装置及び
プログラム解析方法を提供することである。
【0011】
【課題を解決するための手段】上記の目的を達成するた
め、本発明は次のような構成及び作用を有する。すなわ
ち、請求項1の発明は、データに対する処理を表すコン
ピュータプログラムのソースコードを解析するプログラ
ム解析装置において、前記ソースコードから、前記各デ
ータの構造を表す情報であるデータ情報を抽出するデー
タ情報抽出手段と、前記ソースコードと前記データ情報
とに基づいて、ソースコードの所定の位置について、デ
ータ間の関連情報を抽出する関連情報抽出手段と、を有
することを特徴とする。
め、本発明は次のような構成及び作用を有する。すなわ
ち、請求項1の発明は、データに対する処理を表すコン
ピュータプログラムのソースコードを解析するプログラ
ム解析装置において、前記ソースコードから、前記各デ
ータの構造を表す情報であるデータ情報を抽出するデー
タ情報抽出手段と、前記ソースコードと前記データ情報
とに基づいて、ソースコードの所定の位置について、デ
ータ間の関連情報を抽出する関連情報抽出手段と、を有
することを特徴とする。
【0012】請求項14の発明は、請求項1の発明を方
法の観点から把握したものであって、データに対する処
理を表すコンピュータプログラムのソースコードを解析
するプログラム解析方法において、前記ソースコードか
ら、前記各データの構造を表す情報であるデータ情報を
抽出するデータ抽出ステップと、前記ソースコードと前
記データ情報とに基づいて、ソースコードの所定の位置
について、データ間の関連情報を抽出する関連抽出ステ
ップと、を含むことを特徴とする。
法の観点から把握したものであって、データに対する処
理を表すコンピュータプログラムのソースコードを解析
するプログラム解析方法において、前記ソースコードか
ら、前記各データの構造を表す情報であるデータ情報を
抽出するデータ抽出ステップと、前記ソースコードと前
記データ情報とに基づいて、ソースコードの所定の位置
について、データ間の関連情報を抽出する関連抽出ステ
ップと、を含むことを特徴とする。
【0013】請求項1,14の発明では、ソースコード
から、当該ソースコードに含まれるデータの構造を表す
データ情報が抽出される。これは、ソースコード中のデ
ータについてテーブルを獲得することを意味する。この
ため、データの理解を通じて、ソースコードの内容の把
握が容易になる。また、前記ソースコードと前記データ
情報とに基づいて、ソースコードの所定の位置につい
て、データ間の関連情報が抽出される。これは、抽出さ
れた各データがソースコードのどこでどの様な関連を持
っているかを特定することを意味する。このため、デー
タ間の関連の理解を通じて、ソースコードの内容の把握
が容易になる。
から、当該ソースコードに含まれるデータの構造を表す
データ情報が抽出される。これは、ソースコード中のデ
ータについてテーブルを獲得することを意味する。この
ため、データの理解を通じて、ソースコードの内容の把
握が容易になる。また、前記ソースコードと前記データ
情報とに基づいて、ソースコードの所定の位置につい
て、データ間の関連情報が抽出される。これは、抽出さ
れた各データがソースコードのどこでどの様な関連を持
っているかを特定することを意味する。このため、デー
タ間の関連の理解を通じて、ソースコードの内容の把握
が容易になる。
【0014】なお、請求項1記載のプログラム解析装置
において、前記ソースコードの各部分に位置IDを付加
するラベリング手段を設けたり、請求項14記載のプロ
グラム解析方法において、前記ソースコードの各部分に
位置IDを付加するラベリングステップを含めてもよ
い。
において、前記ソースコードの各部分に位置IDを付加
するラベリング手段を設けたり、請求項14記載のプロ
グラム解析方法において、前記ソースコードの各部分に
位置IDを付加するラベリングステップを含めてもよ
い。
【0015】このようにすれば、ソースコードの各部分
に位置IDが付加されるので、抽出された情報の格納・
検索・出力などの各処理を位置IDに基づいて行うこと
ができ、また、テキスト出力及びテキスト入力のみをベ
ースに解析や出力などの処理の対象範囲を指定すること
が容易になる。
に位置IDが付加されるので、抽出された情報の格納・
検索・出力などの各処理を位置IDに基づいて行うこと
ができ、また、テキスト出力及びテキスト入力のみをベ
ースに解析や出力などの処理の対象範囲を指定すること
が容易になる。
【0016】また、請求項1記載のプログラム解析装置
において、前記ソースコードに当該ソースコードのイン
クルードファイルを加入するプリプロセッサを設けた
り、請求項14記載のプログラム解析装置において、前
記ソースコードに当該ソースコードのインクルードファ
イルを加入するステップを含めてもよい。
において、前記ソースコードに当該ソースコードのイン
クルードファイルを加入するプリプロセッサを設けた
り、請求項14記載のプログラム解析装置において、前
記ソースコードに当該ソースコードのインクルードファ
イルを加入するステップを含めてもよい。
【0017】このようにすれば、C言語のようにインク
ルードファイルを用いる言語の場合も、ソースコードに
インクルードファイルが加入されるので、ユーザがあら
かじめこの作業を行っておく必要がない。また、処理中
にインクルードファイルを参照する手順が省略できる。
ルードファイルを用いる言語の場合も、ソースコードに
インクルードファイルが加入されるので、ユーザがあら
かじめこの作業を行っておく必要がない。また、処理中
にインクルードファイルを参照する手順が省略できる。
【0018】請求項2の発明は、請求項1記載のプログ
ラム解析装置において、前記ソースコードに関連する他
のファイルを参照する参照手段を備えたことを特徴とす
る。
ラム解析装置において、前記ソースコードに関連する他
のファイルを参照する参照手段を備えたことを特徴とす
る。
【0019】請求項15の発明は、請求項2の発明を方
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記ソースコードに関連
する他のファイルを参照する参照ステップを含むことを
特徴とする。
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記ソースコードに関連
する他のファイルを参照する参照ステップを含むことを
特徴とする。
【0020】請求項2,15の発明では、C言語のよう
に分割コンパイルをサポートする言語の場合も、処理中
に他のファイルが参照されるので、必要な情報をあらか
じめソースコードに加入しておく手順が省略できる。
に分割コンパイルをサポートする言語の場合も、処理中
に他のファイルが参照されるので、必要な情報をあらか
じめソースコードに加入しておく手順が省略できる。
【0021】請求項3の発明は、請求項1記載のプログ
ラム解析装置において、前記データ情報は、データごと
の情報を格納する構造体Dと、データの型ごとの情報を
格納する構造体Tとを含み、前記構造体Dは該当する前
記構造体Tに対し関係付けられていることを特徴とす
る。
ラム解析装置において、前記データ情報は、データごと
の情報を格納する構造体Dと、データの型ごとの情報を
格納する構造体Tとを含み、前記構造体Dは該当する前
記構造体Tに対し関係付けられていることを特徴とす
る。
【0022】請求項16の発明は、請求項3の発明を方
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記データ情報は、デー
タごとの情報を格納する構造体Dと、データの型ごとの
情報を格納する構造体Tとを含み、前記構造体Dは該当
する前記構造体Tに対し、関連づけられていることを特
徴とする。
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記データ情報は、デー
タごとの情報を格納する構造体Dと、データの型ごとの
情報を格納する構造体Tとを含み、前記構造体Dは該当
する前記構造体Tに対し、関連づけられていることを特
徴とする。
【0023】また、請求項3,16の発明では、データ
の型ごとの情報がデータごとの情報とは異別の構造体T
に格納されているので、同じ型のデータが複数存在する
場合でもメモリ効率が向上する。また、構造体Dと構造
体Tはポインタで接続されているので、データ検索も容
易である。
の型ごとの情報がデータごとの情報とは異別の構造体T
に格納されているので、同じ型のデータが複数存在する
場合でもメモリ効率が向上する。また、構造体Dと構造
体Tはポインタで接続されているので、データ検索も容
易である。
【0024】請求項4の発明は、請求項1記載のプログ
ラム解析装置において、前記関連情報抽出手段は、前記
関連の種別を抽出するように構成されたことを特徴とす
る。
ラム解析装置において、前記関連情報抽出手段は、前記
関連の種別を抽出するように構成されたことを特徴とす
る。
【0025】請求項17の発明は、請求項4の発明を方
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記関連抽出ステップ
は、前記関連の種別を抽出することを特徴とする。
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記関連抽出ステップ
は、前記関連の種別を抽出することを特徴とする。
【0026】また、請求項4,17の発明では、データ
間の関連の存在のみならず、関連の種別も抽出される。
このため、データ間の関連をより具体的に理解すること
を通じて、ソースコードの内容の把握が容易になる。
間の関連の存在のみならず、関連の種別も抽出される。
このため、データ間の関連をより具体的に理解すること
を通じて、ソースコードの内容の把握が容易になる。
【0027】請求項1記載のプログラム解析装置又は請
求項14記載のプログラム解析方法において、前記デー
タ情報は、データごとの情報を格納する構造体Dと、デ
ータの型ごとの情報を格納する構造体Tとを含み、前記
構造体Dは該当する前記構造体Tに対し、関連づけら
れ、関連情報は、位置ごとの関連のIDを格納する構造
体R1と、関連ごとの具体的情報を格納する構造体R2
とを含み、前記構造体R1は該当する前記構造体R2に
対し、関連づけられ、各構造体R2は関連を有する各デ
ータの前記構造体Dにポインタで接続されている、とい
う構成をとってもよい。
求項14記載のプログラム解析方法において、前記デー
タ情報は、データごとの情報を格納する構造体Dと、デ
ータの型ごとの情報を格納する構造体Tとを含み、前記
構造体Dは該当する前記構造体Tに対し、関連づけら
れ、関連情報は、位置ごとの関連のIDを格納する構造
体R1と、関連ごとの具体的情報を格納する構造体R2
とを含み、前記構造体R1は該当する前記構造体R2に
対し、関連づけられ、各構造体R2は関連を有する各デ
ータの前記構造体Dにポインタで接続されている、とい
う構成をとってもよい。
【0028】このようにすれば、関連ごとの情報が位置
ごとの情報とは異別の構造体R2に格納されているの
で、同じ関連が複数の位置に存在する場合でもメモリ効
率が向上する。また、構造体R1と構造体R2、構造体
R2と構造体Dはそれぞれポインタで接続されているの
で、データ検索も容易である。
ごとの情報とは異別の構造体R2に格納されているの
で、同じ関連が複数の位置に存在する場合でもメモリ効
率が向上する。また、構造体R1と構造体R2、構造体
R2と構造体Dはそれぞれポインタで接続されているの
で、データ検索も容易である。
【0029】また、請求項1記載のプログラム解析装置
又は請求項14記載のプログラム解析方法において、前
記構造体R1は、位置ごとの各関連を有するデータの集
合のIDを格納し、当該集合に含まれるデータのIDは
構造体Cに格納され、前記構造体R1は該当する前記構
造体Cにポインタで接続されている、という構成をとっ
てもよい。
又は請求項14記載のプログラム解析方法において、前
記構造体R1は、位置ごとの各関連を有するデータの集
合のIDを格納し、当該集合に含まれるデータのIDは
構造体Cに格納され、前記構造体R1は該当する前記構
造体Cにポインタで接続されている、という構成をとっ
てもよい。
【0030】このようにすれば、位置ごとの各関連を有
する集合のデータのIDが構造体Cに格納されるので、
各種情報の検索が容易になる。
する集合のデータのIDが構造体Cに格納されるので、
各種情報の検索が容易になる。
【0031】請求項5の発明は、請求項1記載のプログ
ラム解析装置において、前記ソースコード、前記データ
情報及び前記関連情報に基づいて、前記ソースコード中
の所定の処理に関する関連情報を、処理情報として抽出
する処理情報抽出手段を有することを特徴とする。
ラム解析装置において、前記ソースコード、前記データ
情報及び前記関連情報に基づいて、前記ソースコード中
の所定の処理に関する関連情報を、処理情報として抽出
する処理情報抽出手段を有することを特徴とする。
【0032】請求項18の発明は、請求項5の発明を方
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記ソースコード、前記
データ情報及び前記関連情報に基づいて、前記ソースコ
ード中の所定の処理に関する関連情報を、処理情報とし
て抽出する処理情報抽出ステップを含むことを特徴とす
る。
法の観点から把握したものであって、請求項14記載の
プログラム解析方法において、前記ソースコード、前記
データ情報及び前記関連情報に基づいて、前記ソースコ
ード中の所定の処理に関する関連情報を、処理情報とし
て抽出する処理情報抽出ステップを含むことを特徴とす
る。
【0033】請求項5,18の発明では、前記ソースコ
ード、データ情報及び前記関連情報に基づいて、ソース
コード中の各処理に関わる各関連情報が、当該処理を表
す情報である処理情報として抽出される。このため、ソ
ースコードに含まれる各処理を、データ間の関連が、当
該処理前後でどの様に変化するかによって把握すること
ができ、ソースコードの内容の把握が容易になる。
ード、データ情報及び前記関連情報に基づいて、ソース
コード中の各処理に関わる各関連情報が、当該処理を表
す情報である処理情報として抽出される。このため、ソ
ースコードに含まれる各処理を、データ間の関連が、当
該処理前後でどの様に変化するかによって把握すること
ができ、ソースコードの内容の把握が容易になる。
【0034】請求項6の発明は、請求項5記載のプログ
ラム解析装置において、前記処理情報抽出手段は、前記
ソースコードに基づいて行われるべき処理について、当
該処理前の前記関連情報及び当該処理後の前記関連情報
の組を抽出するように構成されたことを特徴とする。
ラム解析装置において、前記処理情報抽出手段は、前記
ソースコードに基づいて行われるべき処理について、当
該処理前の前記関連情報及び当該処理後の前記関連情報
の組を抽出するように構成されたことを特徴とする。
【0035】請求項19の発明は、請求項6の発明を方
法の観点から把握したものであって、請求項18記載の
プログラム解析方法において、前記処理情報抽出ステッ
プは、前記ソースコードに基づいて行われるべき処理に
ついて、当該処理前の前記関連情報及び当該処理後の前
記関連情報の組を抽出することを特徴とする。
法の観点から把握したものであって、請求項18記載の
プログラム解析方法において、前記処理情報抽出ステッ
プは、前記ソースコードに基づいて行われるべき処理に
ついて、当該処理前の前記関連情報及び当該処理後の前
記関連情報の組を抽出することを特徴とする。
【0036】また、請求項6,19の発明では、各処理
に係る前記処理情報として、当該処理前の前記関連情報
及び当該処理後の前記関連情報の組が抽出される。この
ため、処理前後での関連情報の相違のみならず、処理前
と処理後それぞれの関連情報自体についても検討・理解
・処理が容易になる。
に係る前記処理情報として、当該処理前の前記関連情報
及び当該処理後の前記関連情報の組が抽出される。この
ため、処理前後での関連情報の相違のみならず、処理前
と処理後それぞれの関連情報自体についても検討・理解
・処理が容易になる。
【0037】請求項7の発明は、請求項6記載のプログ
ラム解析装置において、前記処理情報抽出手段は、前記
処理情報の抽出に際し、前記関連情報を辿ることにより
得られるデータ間の整合性を検出する整合性検出手段
と、この手段により検出された整合性に基づいて、前記
関連情報を修正する修正手段を有することを特徴とす
る。
ラム解析装置において、前記処理情報抽出手段は、前記
処理情報の抽出に際し、前記関連情報を辿ることにより
得られるデータ間の整合性を検出する整合性検出手段
と、この手段により検出された整合性に基づいて、前記
関連情報を修正する修正手段を有することを特徴とす
る。
【0038】請求項20の発明は、請求項7の発明を方
法の観点から把握したものであって、請求項18記載の
プログラム解析方法において、前記処理情報抽出ステッ
プは、前記処理情報の抽出に際し、前記関連情報を辿る
ことにより得られるデータ間の整合性を検出する整合性
検出ステップと、この手段により検出された整合性に基
づいて、前記関連情報を修正する修正ステップを含むこ
とを特徴とする。
法の観点から把握したものであって、請求項18記載の
プログラム解析方法において、前記処理情報抽出ステッ
プは、前記処理情報の抽出に際し、前記関連情報を辿る
ことにより得られるデータ間の整合性を検出する整合性
検出ステップと、この手段により検出された整合性に基
づいて、前記関連情報を修正する修正ステップを含むこ
とを特徴とする。
【0039】また、請求項7,20の発明では、ポイン
タを介する間接的関係も前記関連情報に反映されるの
で、関連情報の正確さが向上する。
タを介する間接的関係も前記関連情報に反映されるの
で、関連情報の正確さが向上する。
【0040】請求項5記載のプログラム解析装置又は請
求項18記載のプログラム解析方法において、前記デー
タ情報は、データごとの情報を格納する構造体Dと、デ
ータの型ごとの情報を格納する構造体Tとを含み、前記
構造体Dは該当する前記構造体Tに対し、関連づけら
れ、関連情報は、位置ごとの関連のIDを格納する構造
体R1と、関連ごとの具体的情報を格納する構造体R2
とを含み、前記構造体R1は該当する前記構造体R2に
対し、関連づけられ、各構造体R2は関連を有する各デ
ータの前記構造体Dに対し、関連づけられ、前記処理情
報は、実行文ごとに処理前及び処理後の関連情報の各位
置IDを格納する構造体Pを有し、各構造体Pは該当す
る構造体R1にポインタで接続されている、という構成
をとってもよい。
求項18記載のプログラム解析方法において、前記デー
タ情報は、データごとの情報を格納する構造体Dと、デ
ータの型ごとの情報を格納する構造体Tとを含み、前記
構造体Dは該当する前記構造体Tに対し、関連づけら
れ、関連情報は、位置ごとの関連のIDを格納する構造
体R1と、関連ごとの具体的情報を格納する構造体R2
とを含み、前記構造体R1は該当する前記構造体R2に
対し、関連づけられ、各構造体R2は関連を有する各デ
ータの前記構造体Dに対し、関連づけられ、前記処理情
報は、実行文ごとに処理前及び処理後の関連情報の各位
置IDを格納する構造体Pを有し、各構造体Pは該当す
る構造体R1にポインタで接続されている、という構成
をとってもよい。
【0041】このようにすれば、実行文ごとの処理前後
の位置IDが構造体Pに格納されているので、各構造体
Pは該当する構造体R1にポインタで接続されているの
で、データ検索も容易である。
の位置IDが構造体Pに格納されているので、各構造体
Pは該当する構造体R1にポインタで接続されているの
で、データ検索も容易である。
【0042】請求項8の発明は、請求項1又は5記載の
プログラム解析装置において、前記抽出の範囲を指定す
る解析範囲指定手段を有することを特徴とする。
プログラム解析装置において、前記抽出の範囲を指定す
る解析範囲指定手段を有することを特徴とする。
【0043】請求項21の発明は、請求項8の発明を方
法の観点から把握したものであって、請求項14又は1
8記載のプログラム解析方法において、前記抽出の範囲
を指定する解析範囲指定ステップを含むことを特徴とす
る。
法の観点から把握したものであって、請求項14又は1
8記載のプログラム解析方法において、前記抽出の範囲
を指定する解析範囲指定ステップを含むことを特徴とす
る。
【0044】請求項8,21記載の発明では、情報抽出
の対象とする範囲がソースコード全体ではなく必要な一
部に限定できるので、処理が効率化される。
の対象とする範囲がソースコード全体ではなく必要な一
部に限定できるので、処理が効率化される。
【0045】請求項9の発明は、請求項1又は5記載の
プログラム解析装置において、出力する情報の範囲を指
定する出力範囲指定手段と、抽出された前記各情報から
前記指定された範囲に対応する情報を選択する選択手段
を備えたことを特徴とする。
プログラム解析装置において、出力する情報の範囲を指
定する出力範囲指定手段と、抽出された前記各情報から
前記指定された範囲に対応する情報を選択する選択手段
を備えたことを特徴とする。
【0046】請求項22の発明は、請求項9の発明を方
法の観点から把握したものであって、請求項14又は1
8記載のプログラム解析方法において、出力する情報の
範囲を指定する出力範囲指定ステップと、抽出された前
記各情報から前記指定された範囲に対応する情報を選択
する選択ステップを備えたことを特徴とする。
法の観点から把握したものであって、請求項14又は1
8記載のプログラム解析方法において、出力する情報の
範囲を指定する出力範囲指定ステップと、抽出された前
記各情報から前記指定された範囲に対応する情報を選択
する選択ステップを備えたことを特徴とする。
【0047】請求項9,22の発明では、出力する情報
の範囲をソースコード全体ではなく、必要な一部に限定
できるので、情報の理解が容易になる。
の範囲をソースコード全体ではなく、必要な一部に限定
できるので、情報の理解が容易になる。
【0048】請求項10の発明は、請求項9記載のプロ
グラム解析装置において、前記ソースコード中の反復構
造を検出する第1の検出手段を有し、前記選択手段は、
検出された反復構造に係る部分については、反復複数回
及び1回以下に係る処理に関する情報を選択するように
構成されたことを特徴とする。
グラム解析装置において、前記ソースコード中の反復構
造を検出する第1の検出手段を有し、前記選択手段は、
検出された反復構造に係る部分については、反復複数回
及び1回以下に係る処理に関する情報を選択するように
構成されたことを特徴とする。
【0049】請求項23の発明は、請求項10の発明を
方法の観点から把握したものであって、請求項22記載
のプログラム解析方法において、前記ソースコード中の
反復構造を検出する第1の検出ステップを有し、前記選
択ステップは、検出された反復構造に係る部分について
は、反復複数回及び1回以下に係る処理に関する情報を
選択することを特徴とする。
方法の観点から把握したものであって、請求項22記載
のプログラム解析方法において、前記ソースコード中の
反復構造を検出する第1の検出ステップを有し、前記選
択ステップは、検出された反復構造に係る部分について
は、反復複数回及び1回以下に係る処理に関する情報を
選択することを特徴とする。
【0050】請求項10,23の発明では、反復構造に
ついて必要十分な反復回数に係る処理に関する情報が出
力されるので、解析が効率化される。
ついて必要十分な反復回数に係る処理に関する情報が出
力されるので、解析が効率化される。
【0051】請求項11の発明は、請求項9記載のプロ
グラム解析装置において、前記ソースコード中の選択構
造を検出する第2の検出手段を有し、前記選択手段は、
検出された選択構造に係る部分については、選択の条件
の各判断結果に対応する各処理に関する情報を選択する
ように構成されたことを特徴とする。
グラム解析装置において、前記ソースコード中の選択構
造を検出する第2の検出手段を有し、前記選択手段は、
検出された選択構造に係る部分については、選択の条件
の各判断結果に対応する各処理に関する情報を選択する
ように構成されたことを特徴とする。
【0052】請求項24の発明は、請求項11の発明を
方法の観点から把握したものであって、請求項22記載
のプログラム解析方法において、前記ソースコード中の
選択構造を検出する第2の検出ステップを有し、前記選
択ステップは、検出された選択構造に係る部分について
は、選択の条件の各判断結果に対応する各処理に関する
情報を選択することを特徴とする。
方法の観点から把握したものであって、請求項22記載
のプログラム解析方法において、前記ソースコード中の
選択構造を検出する第2の検出ステップを有し、前記選
択ステップは、検出された選択構造に係る部分について
は、選択の条件の各判断結果に対応する各処理に関する
情報を選択することを特徴とする。
【0053】請求項11,24の発明では、選択構造に
ついて、選択の条件の各判断結果に対応する各処理に関
する情報が出力されるので、選択構造に関する情報の理
解が容易になる。
ついて、選択の条件の各判断結果に対応する各処理に関
する情報が出力されるので、選択構造に関する情報の理
解が容易になる。
【0054】請求項1又は5記載のプログラム解析装置
において、情報の出力の態様を指定する出力範囲指定手
段と、選択された抽出された各情報を指定された態様で
出力する出力手段とを設けてもよい。また、請求項14
又は18記載のプログラム解析方法において、情報の出
力の態様を指定する出力範囲指定ステップと、選択され
た抽出された各情報を指定された態様で出力する出力ス
テップとを含めてもよい。
において、情報の出力の態様を指定する出力範囲指定手
段と、選択された抽出された各情報を指定された態様で
出力する出力手段とを設けてもよい。また、請求項14
又は18記載のプログラム解析方法において、情報の出
力の態様を指定する出力範囲指定ステップと、選択され
た抽出された各情報を指定された態様で出力する出力ス
テップとを含めてもよい。
【0055】このようにすれば、出力する情報の態様す
なわち詳細度や形式などを自由に指定できるので、目的
にあった出力が容易になる。
なわち詳細度や形式などを自由に指定できるので、目的
にあった出力が容易になる。
【0056】請求項12の発明は、請求項1又は5記載
のプログラム解析装置において、前記ソースコードと、
抽出されたいずれかの前記情報を、同一の表示装置又は
相互に隣接する表示装置に表示するように構成された出
力手段を有することを特徴とする。
のプログラム解析装置において、前記ソースコードと、
抽出されたいずれかの前記情報を、同一の表示装置又は
相互に隣接する表示装置に表示するように構成された出
力手段を有することを特徴とする。
【0057】請求項25の発明は、請求項12の発明を
方法の観点から把握したものであって、請求項14又は
18記載のプログラム解析方法において、前記ソースコ
ードの全部又は一部と、抽出されたいずれかの前記情報
のうち全部又は一部に対応する情報を、同一の表示装置
又は相互に隣接する表示装置に表示する出力ステップを
含むことを特徴とする。
方法の観点から把握したものであって、請求項14又は
18記載のプログラム解析方法において、前記ソースコ
ードの全部又は一部と、抽出されたいずれかの前記情報
のうち全部又は一部に対応する情報を、同一の表示装置
又は相互に隣接する表示装置に表示する出力ステップを
含むことを特徴とする。
【0058】請求項12,25の発明では、例えば解析
結果上で問題点が発見された場合に、当該問題点がソー
スコード上のどの部分に起因するのかを容易に特定でき
る。逆に、ソースコードによる実装が意図したとおりの
結果を生成していることを確認するために、当該実装部
が解析結果上のどの部分に影響しているのかを容易に特
定できる。
結果上で問題点が発見された場合に、当該問題点がソー
スコード上のどの部分に起因するのかを容易に特定でき
る。逆に、ソースコードによる実装が意図したとおりの
結果を生成していることを確認するために、当該実装部
が解析結果上のどの部分に影響しているのかを容易に特
定できる。
【0059】請求項13の発明は、請求項12記載のプ
ログラム解析装置において、前記出力手段は、前記ソー
スコード又は前記情報の一方の一部が指定された場合
に、当該指定された部分に対応する他方の部分を強調表
示するように構成されたことを特徴とする。
ログラム解析装置において、前記出力手段は、前記ソー
スコード又は前記情報の一方の一部が指定された場合
に、当該指定された部分に対応する他方の部分を強調表
示するように構成されたことを特徴とする。
【0060】請求項26の発明は、請求項13の発明を
方法の観点から把握したものであって、請求項25記載
のプログラム解析方法において、前記出力ステップは、
前記ソースコード又は前記情報の一方の一部が指定され
た場合に、当該指定された部分に対応する他方の部分を
強調表示することを特徴とする。
方法の観点から把握したものであって、請求項25記載
のプログラム解析方法において、前記出力ステップは、
前記ソースコード又は前記情報の一方の一部が指定され
た場合に、当該指定された部分に対応する他方の部分を
強調表示することを特徴とする。
【0061】請求項13,26の発明では、対応する部
分が強調表示されるので、情報の把握が一層容易にな
る。
分が強調表示されるので、情報の把握が一層容易にな
る。
【0062】
【発明の実施の形態】次に、本発明の実施の形態(以下
「実施形態」という)について図面にしたがって具体的
に説明する。なお、実施形態の各機能は、所定のソフト
ウェアが、周辺機器を含むコンピュータを制御すること
で実現されるが、コンピュータ及びソフトウェアの構成
は種々考えられるので、実施形態の各機能や各処理に対
応する仮想的回路ブロックを想定して説明する。
「実施形態」という)について図面にしたがって具体的
に説明する。なお、実施形態の各機能は、所定のソフト
ウェアが、周辺機器を含むコンピュータを制御すること
で実現されるが、コンピュータ及びソフトウェアの構成
は種々考えられるので、実施形態の各機能や各処理に対
応する仮想的回路ブロックを想定して説明する。
【0063】(1)第1実施形態の構成 第1実施形態は、請求項1〜9に対応するプログラム解
析装置及びこのプログラム解析装置で実行されるプログ
ラム解析方法(請求項14〜22に対応する)を示すも
ので、その目的は、ソースコードを静的解析によって効
率的に解析し、解析結果によって、処理内容及び入出力
仕様を含むソースコードの内容の理解を容易にするプロ
グラム解析装置及びプログラム解析方法を提供すること
である。また、第1実施形態の他の目的は、処理手順が
容易なプログラム解析装置及びプログラム解析方法を提
供することである。
析装置及びこのプログラム解析装置で実行されるプログ
ラム解析方法(請求項14〜22に対応する)を示すも
ので、その目的は、ソースコードを静的解析によって効
率的に解析し、解析結果によって、処理内容及び入出力
仕様を含むソースコードの内容の理解を容易にするプロ
グラム解析装置及びプログラム解析方法を提供すること
である。また、第1実施形態の他の目的は、処理手順が
容易なプログラム解析装置及びプログラム解析方法を提
供することである。
【0064】まず、図1は、第1実施形態のプログラム
解析装置の構成を示す機能ブロック図である。この図に
示すように、第1実施形態のプログラム解析装置(以下
「本装置」という)は、コンピュータプログラムのソー
スコードから、当該ソースコードに含まれる各データの
構造を表す情報であるデータ情報を抽出するデータ情報
抽出手段1と、抽出された情報を出力する出力手段2
と、を有する(請求項1)。
解析装置の構成を示す機能ブロック図である。この図に
示すように、第1実施形態のプログラム解析装置(以下
「本装置」という)は、コンピュータプログラムのソー
スコードから、当該ソースコードに含まれる各データの
構造を表す情報であるデータ情報を抽出するデータ情報
抽出手段1と、抽出された情報を出力する出力手段2
と、を有する(請求項1)。
【0065】また、本装置は、前記ソースコードの各部
分に位置IDを付加するラベリング手段3と、前記ソー
スコードに当該ソースコードのインクルードファイルを
加入するプリプロセッサ4を有する。
分に位置IDを付加するラベリング手段3と、前記ソー
スコードに当該ソースコードのインクルードファイルを
加入するプリプロセッサ4を有する。
【0066】また、本装置は、ソースコードと前記デー
タ情報とに基づいて、ソースコードの各位置ごとに、デ
ータ間に存在する関連を表す情報である関連情報を抽出
する関連情報抽出手段5を有する(請求項1)。
タ情報とに基づいて、ソースコードの各位置ごとに、デ
ータ間に存在する関連を表す情報である関連情報を抽出
する関連情報抽出手段5を有する(請求項1)。
【0067】また、本装置は、前記ソースコード、前記
データ情報及び前記関連情報に基づいて、ソースコード
中の各処理に関わる各関連情報を、当該処理を表す情報
である処理情報として抽出する処理情報抽出手段6を有
する(請求項5)。
データ情報及び前記関連情報に基づいて、ソースコード
中の各処理に関わる各関連情報を、当該処理を表す情報
である処理情報として抽出する処理情報抽出手段6を有
する(請求項5)。
【0068】また、本装置は、前記抽出の範囲、出力の
範囲及び出力の態様を指定する指定部7(前記解析範囲
指定手段(請求項8)及び前記出力範囲指定手段(請求
項9)に相当するもの)を有する。また、本装置は、抽
出された前記各情報から前記指定された範囲に対応する
情報を選択する選択手段8を有する(請求項9)。な
お、出力手段2は、選択された抽出された各情報を指定
された態様で出力するように構成されている。
範囲及び出力の態様を指定する指定部7(前記解析範囲
指定手段(請求項8)及び前記出力範囲指定手段(請求
項9)に相当するもの)を有する。また、本装置は、抽
出された前記各情報から前記指定された範囲に対応する
情報を選択する選択手段8を有する(請求項9)。な
お、出力手段2は、選択された抽出された各情報を指定
された態様で出力するように構成されている。
【0069】(2)第1実施形態の作用及び効果 上記のような構成を有する第1実施形態において、コン
ピュータプログラムのソースコードの全部又は一部の解
析と出力は、次のように行われる。ここで、図2は、第
1実施形態の動作手順を示すフローチャートである。す
なわち、まず、解析対象とするソースコードをキーボー
ド入力やファイル読み込みなどで与える(ステップ
1)。
ピュータプログラムのソースコードの全部又は一部の解
析と出力は、次のように行われる。ここで、図2は、第
1実施形態の動作手順を示すフローチャートである。す
なわち、まず、解析対象とするソースコードをキーボー
ド入力やファイル読み込みなどで与える(ステップ
1)。
【0070】[プリプロセッシング]そして、C言語の
ように、インクルードファイルを用いる言語のソースコ
ードの場合、プリプロセッサ4が、ソースコードに当該
ソースコードのインクルードファイルを加入する(ステ
ップ2)。より具体的には、一般に実行及びコンパイル
前に行われるべき処理、例えば、コメント行除去、マク
ロ文展開などが行われる。このため、第1実施形態で
は、ユーザがあらかじめこの作業を行っておく必要がな
い。また、処理中にインクルードファイルを参照する手
順が省略できる。例えば、図3のソースコードに図4の
インクルードファイルを加入した結果を図5に示す。
ように、インクルードファイルを用いる言語のソースコ
ードの場合、プリプロセッサ4が、ソースコードに当該
ソースコードのインクルードファイルを加入する(ステ
ップ2)。より具体的には、一般に実行及びコンパイル
前に行われるべき処理、例えば、コメント行除去、マク
ロ文展開などが行われる。このため、第1実施形態で
は、ユーザがあらかじめこの作業を行っておく必要がな
い。また、処理中にインクルードファイルを参照する手
順が省略できる。例えば、図3のソースコードに図4の
インクルードファイルを加入した結果を図5に示す。
【0071】但し、プリプロセッサは必ずしも本装置に
組み込む必要はなく、ユーザがあらかじめプリプロセッ
サでインクルードファイルを包含した状態にしてから本
装置にソースコードを与えてもよい。
組み込む必要はなく、ユーザがあらかじめプリプロセッ
サでインクルードファイルを包含した状態にしてから本
装置にソースコードを与えてもよい。
【0072】また、前記ソースコードとともに当該ソー
スコードに現われるデータ、手続きなどを定義する他の
ファイルなど参照する参照手段を備えてもよい(請求項
2)。このようにすれば、C言語のように分割コンパイ
ルをサポートする言語の場合も、処理中に他のファイル
が参照されるので(請求項2、15)、必要な情報をあ
らかじめソースコードに加入しておく手順が省略でき
る。
スコードに現われるデータ、手続きなどを定義する他の
ファイルなど参照する参照手段を備えてもよい(請求項
2)。このようにすれば、C言語のように分割コンパイ
ルをサポートする言語の場合も、処理中に他のファイル
が参照されるので(請求項2、15)、必要な情報をあ
らかじめソースコードに加入しておく手順が省略でき
る。
【0073】[ラベリングのステップ]次に、ラベリン
グ手段3が、ソースコードの各部分に位置ID(実行文
IDを含む)を付加する(ステップ3)。例えば、図3
のソースコードの実行文に実行文ID("@S"に続く4桁
の番号)を付加し、実行文と実行文の間、最初の実行文
の直前及び最後の実行文の直後に位置ID("@P"に続く
4桁の番号)を付加した結果を図6に示す。なお、ラベ
リングは、インクルードファイルを加入したソースコー
ドとは別個に元のソースコードに対して施してもよい
が、もちろん、インクルードファイルを加入したソース
コードに対して施してもよい。
グ手段3が、ソースコードの各部分に位置ID(実行文
IDを含む)を付加する(ステップ3)。例えば、図3
のソースコードの実行文に実行文ID("@S"に続く4桁
の番号)を付加し、実行文と実行文の間、最初の実行文
の直前及び最後の実行文の直後に位置ID("@P"に続く
4桁の番号)を付加した結果を図6に示す。なお、ラベ
リングは、インクルードファイルを加入したソースコー
ドとは別個に元のソースコードに対して施してもよい
が、もちろん、インクルードファイルを加入したソース
コードに対して施してもよい。
【0074】このように、第1実施形態では、ソースコ
ードの各部分に位置IDが付加されるので、抽出された
情報の格納・検索・出力などの各処理を位置IDに基づ
いて行うことができ、また、テキスト出力及びテキスト
入力のみをベースに、解析や出力などの処理の対象範囲
を指定することが容易になる。
ードの各部分に位置IDが付加されるので、抽出された
情報の格納・検索・出力などの各処理を位置IDに基づ
いて行うことができ、また、テキスト出力及びテキスト
入力のみをベースに、解析や出力などの処理の対象範囲
を指定することが容易になる。
【0075】[解析範囲指定のステップ]なお、抽出の
対象とする解析範囲は、指定部7によって指定すること
ができる(ステップ4/請求項21)。第1実施形態で
は、各種範囲の指定はソースコードに付された位置ID
を入力することによって行うことができるが、各種範囲
の指定は、マウスなどのポインティングデバイスによっ
て制御されるカーソルによって指し示すなど、他の手法
によって行ってもよい。このように、第1実施形態で
は、情報抽出の対象とする範囲をソースコード全体では
なく必要な一部に限定し、処理を効率化することができ
る(請求項8、21)。
対象とする解析範囲は、指定部7によって指定すること
ができる(ステップ4/請求項21)。第1実施形態で
は、各種範囲の指定はソースコードに付された位置ID
を入力することによって行うことができるが、各種範囲
の指定は、マウスなどのポインティングデバイスによっ
て制御されるカーソルによって指し示すなど、他の手法
によって行ってもよい。このように、第1実施形態で
は、情報抽出の対象とする範囲をソースコード全体では
なく必要な一部に限定し、処理を効率化することができ
る(請求項8、21)。
【0076】[データ抽出のステップ]続いて、まず、
データ情報抽出手段1が、ソースコードから、当該ソー
スコードに含まれる各データの構造を表す情報であるデ
ータ情報を抽出する(ステップ5/請求項14)。これ
は、ソースコード中のデータについてテーブルを獲得す
ることを意味する。この処理は、具体的には、対象言語
のパーザを用いて構文解析を行うことにより、予約語、
その他の識別子の抽出を行うことによって可能となる。
このため、データの理解を通じて、ソースコードの内容
の把握が容易になる。
データ情報抽出手段1が、ソースコードから、当該ソー
スコードに含まれる各データの構造を表す情報であるデ
ータ情報を抽出する(ステップ5/請求項14)。これ
は、ソースコード中のデータについてテーブルを獲得す
ることを意味する。この処理は、具体的には、対象言語
のパーザを用いて構文解析を行うことにより、予約語、
その他の識別子の抽出を行うことによって可能となる。
このため、データの理解を通じて、ソースコードの内容
の把握が容易になる。
【0077】ここで、図7は、本実施形態において抽出
される各情報の一般的格納形式を示す概念図である。す
なわち、この図に示すように、データ情報は、データご
との情報を格納する構造体Dと、データの型ごとの情報
を格納する構造体Tを含み、構造体Dは該当する構造体
Tにポインタで接続されている(請求項3、16)。
される各情報の一般的格納形式を示す概念図である。す
なわち、この図に示すように、データ情報は、データご
との情報を格納する構造体Dと、データの型ごとの情報
を格納する構造体Tを含み、構造体Dは該当する構造体
Tにポインタで接続されている(請求項3、16)。
【0078】各「構造体」は固定長又は可変長のデータ
領域である。具体的には、各構造体Dは、検索のための
キーであるデータID、ソースコード中でのデータ名、
当該データの属する型を表す型ID、当該データのポイ
ンタ演算子の多重度であるポインタ多重度を含む。
領域である。具体的には、各構造体Dは、検索のための
キーであるデータID、ソースコード中でのデータ名、
当該データの属する型を表す型ID、当該データのポイ
ンタ演算子の多重度であるポインタ多重度を含む。
【0079】また、構造体Tは、検索のためのキーであ
る型ID、ソースコード中での型名、当該型の定義内容
を表す型定義情報を含む。型定義情報は構成情報であ
り、この構成情報には構造体定義や共用体定義の構成要
素、即ち型名、メンバ名、タグ名が、定義文に記述され
ている順に要素として格納されており、最後の要素の直
後には、例えば、0値がデリミタとして格納されてい
る。またint やcharなどの基本型の場合は構成情報は空
であり、0値だけが格納される。
る型ID、ソースコード中での型名、当該型の定義内容
を表す型定義情報を含む。型定義情報は構成情報であ
り、この構成情報には構造体定義や共用体定義の構成要
素、即ち型名、メンバ名、タグ名が、定義文に記述され
ている順に要素として格納されており、最後の要素の直
後には、例えば、0値がデリミタとして格納されてい
る。またint やcharなどの基本型の場合は構成情報は空
であり、0値だけが格納される。
【0080】例えば、図5のソースコードからは図8の
データ情報が得られる。この例は、構造体struct List
の型定義情報であり、int 型のメンバdummy とstruct L
ist* 型のメンバnextを構成要素とすることが記録され
ている。
データ情報が得られる。この例は、構造体struct List
の型定義情報であり、int 型のメンバdummy とstruct L
ist* 型のメンバnextを構成要素とすることが記録され
ている。
【0081】このように、第1実施形態では、データの
型ごとの情報がデータごとの情報とは異別の構造体Tに
格納されているので、同じ型のデータが複数存在する場
合でもメモリ効率が向上する。また、構造体Dと構造体
Tはポインタで接続されているので、データ検索も容易
である(請求項3、16)。
型ごとの情報がデータごとの情報とは異別の構造体Tに
格納されているので、同じ型のデータが複数存在する場
合でもメモリ効率が向上する。また、構造体Dと構造体
Tはポインタで接続されているので、データ検索も容易
である(請求項3、16)。
【0082】[関連抽出のステップ]次に、関連情報抽
出手段5が、ソースコードとデータ情報とに基づいて、
ソースコード上の各位置ごとに、データ間に存在する関
連を表す関連情報を抽出する(ステップ6/請求項1
4)。これは、抽出された各データがソースコードのど
こでどの様な関連を持っているかを特定することを意味
する。このため、データ間の関連の理解を通じて、ソー
スコードの内容の把握が容易になる。
出手段5が、ソースコードとデータ情報とに基づいて、
ソースコード上の各位置ごとに、データ間に存在する関
連を表す関連情報を抽出する(ステップ6/請求項1
4)。これは、抽出された各データがソースコードのど
こでどの様な関連を持っているかを特定することを意味
する。このため、データ間の関連の理解を通じて、ソー
スコードの内容の把握が容易になる。
【0083】具体的には、ソースコードの各位置ID
(実行文ID)毎に、その位置に記述されている実行文
やデータ定義文がもたらすデータ間の相互関連につい
て、代入関係、等価関係、ポインタ参照などの種別を特
定し、その結果を関連データとして抽出・格納する(請
求項4、17)。例えば、代入文については、データの
型に応じて、代入関係やポインタ参照関係を表すデータ
を生成し、条件比較文については、内容に応じた様々な
等価関係を表すデータを生成する。このような文ごとの
典型的なパターンと、生成されるべきデータ間の相関関
係との対応は、あらかじめ知識ベースなどの形で蓄えて
おく。このように、第1実施形態では、データ間の関連
の存在のみならず、関連の種別も抽出される。このた
め、データ間の関連をより具体的に理解することを通じ
て、ソースコードの内容の把握が容易になる。
(実行文ID)毎に、その位置に記述されている実行文
やデータ定義文がもたらすデータ間の相互関連につい
て、代入関係、等価関係、ポインタ参照などの種別を特
定し、その結果を関連データとして抽出・格納する(請
求項4、17)。例えば、代入文については、データの
型に応じて、代入関係やポインタ参照関係を表すデータ
を生成し、条件比較文については、内容に応じた様々な
等価関係を表すデータを生成する。このような文ごとの
典型的なパターンと、生成されるべきデータ間の相関関
係との対応は、あらかじめ知識ベースなどの形で蓄えて
おく。このように、第1実施形態では、データ間の関連
の存在のみならず、関連の種別も抽出される。このた
め、データ間の関連をより具体的に理解することを通じ
て、ソースコードの内容の把握が容易になる。
【0084】ここで、図7に示すように、関連情報は、
位置ごとの関連のIDを格納する構造体R1と、関連ご
との具体的情報を格納する構造体R2とを含み、前記構
造体R1は該当する構造体R2にポインタで接続され、
各構造体R2は関連を有する各データの構造体Dにポイ
ンタで接続されている。
位置ごとの関連のIDを格納する構造体R1と、関連ご
との具体的情報を格納する構造体R2とを含み、前記構
造体R1は該当する構造体R2にポインタで接続され、
各構造体R2は関連を有する各データの構造体Dにポイ
ンタで接続されている。
【0085】なお、構造体R1は、ソースコード上での
位置を特定するためのキーである位置ID、当該位置で
の各関連に含まれるデータの集合を特定するためのキー
である集合ID、当該位置での各関連を特定するための
キーであるいくつかの関連IDを含む。また、集合ID
ごとに、当該集合に含まれるいくつかのデータIDを含
む構造体Cが対応して設けられている。このように、第
1実施形態では、位置ごとの各関連を有する集合のデー
タのIDが構造体Cに格納されるので、各種情報の検索
が容易になる。
位置を特定するためのキーである位置ID、当該位置で
の各関連に含まれるデータの集合を特定するためのキー
である集合ID、当該位置での各関連を特定するための
キーであるいくつかの関連IDを含む。また、集合ID
ごとに、当該集合に含まれるいくつかのデータIDを含
む構造体Cが対応して設けられている。このように、第
1実施形態では、位置ごとの各関連を有する集合のデー
タのIDが構造体Cに格納されるので、各種情報の検索
が容易になる。
【0086】また、構造体R2は、検索のためのキーで
ある関連ID、当該関連に関わる各データを特定するた
めの各データIDを含み、要素は、各データの詳細な要
素の指定である。関連の具体的な種別は関連種別によっ
て示される。
ある関連ID、当該関連に関わる各データを特定するた
めの各データIDを含み、要素は、各データの詳細な要
素の指定である。関連の具体的な種別は関連種別によっ
て示される。
【0087】ここで、図9は、データ情報及び関連情報
の例である。この図に示すデータ情報でデータ名がnil
となっているものは、ポインタで参照されている領域や
代入でダミーとなる右辺値を示す。ポインタで参照され
ている領域は、ソースコード中で具体的なデータ名で直
接記載されることはなく、指し示すポインタが入出力仕
様として前提とされているものである。また、関連情報
で要素がnil となっているものは、関連の対象が要素で
はなくデータIDで示されるデータ自身であることを示
し、関連種別の" →" 、"=="、":="はそれぞれポインタ
参照関連、等価関連、代入関連を示している。
の例である。この図に示すデータ情報でデータ名がnil
となっているものは、ポインタで参照されている領域や
代入でダミーとなる右辺値を示す。ポインタで参照され
ている領域は、ソースコード中で具体的なデータ名で直
接記載されることはなく、指し示すポインタが入出力仕
様として前提とされているものである。また、関連情報
で要素がnil となっているものは、関連の対象が要素で
はなくデータIDで示されるデータ自身であることを示
し、関連種別の" →" 、"=="、":="はそれぞれポインタ
参照関連、等価関連、代入関連を示している。
【0088】すなわち、図9において、位置ID0003の
構造体(R1)1301は集合ID1003と関連ID2002と20
05とを要素として持つ。さらに、集合ID1003の構造体
(C)1302はデータID1101と1102と1104とを要素とし
て持つ。
構造体(R1)1301は集合ID1003と関連ID2002と20
05とを要素として持つ。さらに、集合ID1003の構造体
(C)1302はデータID1101と1102と1104とを要素とし
て持つ。
【0089】このような各構造体においては、例えば、
データID1101に対応する構造体(D)1303を参照する
ことによって、データ名がlist、データ型は型ID0001
すなわちstruct List 、多重度1のポインタ型という情
報が得られる。このように、第1実施形態では、関連情
報の構造体R1の集合IDをキーとしてデータ集合の構
造体Cをたどり、さらに、集合の構造体CのデータID
をキーとしてデータ情報の構造体Dの情報を読み出すこ
とにより、特定の関連情報における関係する全てのデー
タの情報が得られる。
データID1101に対応する構造体(D)1303を参照する
ことによって、データ名がlist、データ型は型ID0001
すなわちstruct List 、多重度1のポインタ型という情
報が得られる。このように、第1実施形態では、関連情
報の構造体R1の集合IDをキーとしてデータ集合の構
造体Cをたどり、さらに、集合の構造体CのデータID
をキーとしてデータ情報の構造体Dの情報を読み出すこ
とにより、特定の関連情報における関係する全てのデー
タの情報が得られる。
【0090】同様に、例えば、関連ID2005の構造体
(R2)1304から、データID1104、即ちstructList型
のデータ領域のレコードnextにデータID1102、即ちst
ruct List のポインタ型のデータitemの値が代入されて
いる、という関連を知ることができる。
(R2)1304から、データID1104、即ちstructList型
のデータ領域のレコードnextにデータID1102、即ちst
ruct List のポインタ型のデータitemの値が代入されて
いる、という関連を知ることができる。
【0091】このように、第1実施形態では、関連ごと
の情報が位置ごとの情報とは異別の構造体R2に格納さ
れているので、同じ関連が複数の位置に存在する場合で
もメモリ効率が向上する。また、構造体R1と構造体R
2、構造体R2と構造体Dはそれぞれポインタで接続さ
れているので、データ検索も容易である。
の情報が位置ごとの情報とは異別の構造体R2に格納さ
れているので、同じ関連が複数の位置に存在する場合で
もメモリ効率が向上する。また、構造体R1と構造体R
2、構造体R2と構造体Dはそれぞれポインタで接続さ
れているので、データ検索も容易である。
【0092】[処理抽出のステップ]さらに、処理情報
抽出手段6が、ソースコード、データ情報及び関連情報
に基づいて、ソースコード中の各処理(各実行文)に関
わる各関連情報を、当該処理を表す情報である処理情報
として抽出する(ステップ7/請求項18)。このた
め、ソースコードに含まれる各処理を、データ間の関連
が、当該処理前後でどの様に変化するかによって把握す
ることができ、ソースコードの内容の把握が容易にな
る。
抽出手段6が、ソースコード、データ情報及び関連情報
に基づいて、ソースコード中の各処理(各実行文)に関
わる各関連情報を、当該処理を表す情報である処理情報
として抽出する(ステップ7/請求項18)。このた
め、ソースコードに含まれる各処理を、データ間の関連
が、当該処理前後でどの様に変化するかによって把握す
ることができ、ソースコードの内容の把握が容易にな
る。
【0093】ここでは、各処理に係る処理情報として、
当該処理前の関連情報及び当該処理後の関連情報の組を
抽出する(請求項6、19)。このため、処理前後での
関連情報の相違のみならず、処理前と処理後それぞれの
関連情報自体についても検討・理解・処理が容易にな
る。但し、処理情報の内容は自由であり、例えば、処理
前後の各関連情報の相違点のみを処理情報として抽出し
てもよい。
当該処理前の関連情報及び当該処理後の関連情報の組を
抽出する(請求項6、19)。このため、処理前後での
関連情報の相違のみならず、処理前と処理後それぞれの
関連情報自体についても検討・理解・処理が容易にな
る。但し、処理情報の内容は自由であり、例えば、処理
前後の各関連情報の相違点のみを処理情報として抽出し
てもよい。
【0094】処理情報は、図7に示すように、実行文ご
とに処理前及び処理後の関連情報の各位置IDを格納す
る構造体Pを有し、各構造体Pは該当する構造体R1に
ポインタで接続されているので、データ検索も容易であ
る。
とに処理前及び処理後の関連情報の各位置IDを格納す
る構造体Pを有し、各構造体Pは該当する構造体R1に
ポインタで接続されているので、データ検索も容易であ
る。
【0095】なお、構造体Pは、ソースコード中での実
行文に対応した実行文IDと、当該実行文の処理前の関
連情報の位置IDと、処理後の関連情報の位置IDを有
する。また、処理の抽出では、処理情報の抽出にあた
り、ポインタによって間接的に関連しているデータ間の
関係に基づいて関連情報が修正される(請求項7、2
0)。このため、関連情報の正確さが向上する。
行文に対応した実行文IDと、当該実行文の処理前の関
連情報の位置IDと、処理後の関連情報の位置IDを有
する。また、処理の抽出では、処理情報の抽出にあた
り、ポインタによって間接的に関連しているデータ間の
関係に基づいて関連情報が修正される(請求項7、2
0)。このため、関連情報の正確さが向上する。
【0096】すなわち、各実行文の処理で暗に前提とさ
れている関連情報が修正される。例えば、図9では、位
置@P0001においてデータ集合(ID1001)の内容はlist
とitemの二つのポインタ値だけとなっているが、実行文
@S0001(図6)の記述からわかるように、実際には二つ
のポインタは空値ではなく、即ちある領域をポイントし
ている。このため位置@P0001におけるデータ集合は、位
置@P0002と同じであると仮定しなければならない。
れている関連情報が修正される。例えば、図9では、位
置@P0001においてデータ集合(ID1001)の内容はlist
とitemの二つのポインタ値だけとなっているが、実行文
@S0001(図6)の記述からわかるように、実際には二つ
のポインタは空値ではなく、即ちある領域をポイントし
ている。このため位置@P0001におけるデータ集合は、位
置@P0002と同じであると仮定しなければならない。
【0097】また関連ID2005の関連についても、実際
にはポインタlist->nextがポインタitemの指し示す領
域、即ちデータID1103のデータを指し示す事実に基づ
いて修正する必要がある。
にはポインタlist->nextがポインタitemの指し示す領
域、即ちデータID1103のデータを指し示す事実に基づ
いて修正する必要がある。
【0098】以上のような修正を行った関連情報を図1
0に示す。図9と比較して修正された部分は網掛けされ
ている部分である。この結果、各実行文について処理前
後のデータ相互関連が全て決定される。なお、ここで
は、処理情報として、図11に示すような情報が得られ
る。
0に示す。図9と比較して修正された部分は網掛けされ
ている部分である。この結果、各実行文について処理前
後のデータ相互関連が全て決定される。なお、ここで
は、処理情報として、図11に示すような情報が得られ
る。
【0099】[出力範囲指定のステップ]解析結果の出
力に際しては、指定部7によって、出力の範囲を指定す
ることができ(ステップ8)、選択手段8が、抽出され
た前記各情報から指定された範囲に対応する情報を選択
する(ステップ10/請求項22)。このように、第1
実施形態では、出力する情報の範囲をソースコード全体
ではなく、必要な一部に限定できるので、情報の理解が
容易になる。
力に際しては、指定部7によって、出力の範囲を指定す
ることができ(ステップ8)、選択手段8が、抽出され
た前記各情報から指定された範囲に対応する情報を選択
する(ステップ10/請求項22)。このように、第1
実施形態では、出力する情報の範囲をソースコード全体
ではなく、必要な一部に限定できるので、情報の理解が
容易になる。
【0100】ここでは、出力手段として画面表示装置を
用いるものとするが、表示範囲は、例えば、最初と最後
の実行文のラベルで指定してもよいし、画面に表示され
たソースコードからカーソルやマウスで指定してもよ
い。情報の選択(ステップ10)では、指定範囲に関わ
る処理情報と、この処理情報の構造体Pから直接間接に
たどることができるすべての関連情報並びにデータ情報
が出力対象として選択される。
用いるものとするが、表示範囲は、例えば、最初と最後
の実行文のラベルで指定してもよいし、画面に表示され
たソースコードからカーソルやマウスで指定してもよ
い。情報の選択(ステップ10)では、指定範囲に関わ
る処理情報と、この処理情報の構造体Pから直接間接に
たどることができるすべての関連情報並びにデータ情報
が出力対象として選択される。
【0101】[出力態様指定のステップ]また、出力に
際して、指定部7によって、出力の態様を指定できる
(ステップ9)。態様としては、典型的には詳細度や出
力形式が考えられ、例えば、詳細度としては、関連情報
と共にデータの型の内容に関する情報まで表示するか否
かなどが考えられる。また、出力形式としては、例え
ば、テキスト出力のみかグラフィカルな表現かなどが考
えられる。このように、第1実施形態では、出力する情
報の態様すなわち詳細度や出力形式などを自由に指定で
きるので、目的にあった出力が容易になる。
際して、指定部7によって、出力の態様を指定できる
(ステップ9)。態様としては、典型的には詳細度や出
力形式が考えられ、例えば、詳細度としては、関連情報
と共にデータの型の内容に関する情報まで表示するか否
かなどが考えられる。また、出力形式としては、例え
ば、テキスト出力のみかグラフィカルな表現かなどが考
えられる。このように、第1実施形態では、出力する情
報の態様すなわち詳細度や出力形式などを自由に指定で
きるので、目的にあった出力が容易になる。
【0102】[出力のステップ]そして、出力手段2
が、抽出された各情報を指定された態様で出力する(ス
テップ11)。例えば、実行文@S0001から実行文@S0002
が指定された場合、図11で示される処理情報が指定し
た態様で出力されるので、処理内容を確認することが可
能であり、同時に入出力仕様を確認することが可能にな
る。なお、図12は出力例を、図13は出力例の凡例を
示す。
が、抽出された各情報を指定された態様で出力する(ス
テップ11)。例えば、実行文@S0001から実行文@S0002
が指定された場合、図11で示される処理情報が指定し
た態様で出力されるので、処理内容を確認することが可
能であり、同時に入出力仕様を確認することが可能にな
る。なお、図12は出力例を、図13は出力例の凡例を
示す。
【0103】例えば、図12では、表示範囲の表示部1
601には表示範囲が実行文IDで示されている。また
データ関連の表示部1602、1603、1604に
は、位置IDとその位置IDにおけるデータ相互関連が
図示される。なお、ソースコード中に直接記述はされて
いないが、入出力仕様として前提とされているデータに
ついては、点線で表示される。また、図14はデータ名
だけに着目した可視化の例である。
601には表示範囲が実行文IDで示されている。また
データ関連の表示部1602、1603、1604に
は、位置IDとその位置IDにおけるデータ相互関連が
図示される。なお、ソースコード中に直接記述はされて
いないが、入出力仕様として前提とされているデータに
ついては、点線で表示される。また、図14はデータ名
だけに着目した可視化の例である。
【0104】なお、一旦解析を行った後は、ステップ8
からステップ12までの手順を繰り返すことにより様々
な抽象度や形式で出力結果を確認することができる。ま
た、別のソースコードを解析する場合にはステップ1か
らの処理を改めて行う。
からステップ12までの手順を繰り返すことにより様々
な抽象度や形式で出力結果を確認することができる。ま
た、別のソースコードを解析する場合にはステップ1か
らの処理を改めて行う。
【0105】以上のように、第1実施形態によれば、コ
ンピュータプログラムのソースコードに実現されている
処理内容及び入出力仕様を静的な解析によって効率的に
解析し、任意の抽象度で出力することができる。これに
より、ソースコードのインスペクション作業が容易にな
り、ソフトウェアの試験工程に於いては不具合の確認な
どの作業効率の向上を図ることができる。また、保守工
程に於いても、機能追加などに伴う修正作業の効率向上
を図ることができる。
ンピュータプログラムのソースコードに実現されている
処理内容及び入出力仕様を静的な解析によって効率的に
解析し、任意の抽象度で出力することができる。これに
より、ソースコードのインスペクション作業が容易にな
り、ソフトウェアの試験工程に於いては不具合の確認な
どの作業効率の向上を図ることができる。また、保守工
程に於いても、機能追加などに伴う修正作業の効率向上
を図ることができる。
【0106】(3)第2実施形態 次に制御構造を含んだプログラムの解析の例を示す。す
なわち、C言語の様な構造化言語の場合、制御構造は順
次、反復、及び選択であるが、このうち順次に関しては
上記のように解析が可能である。
なわち、C言語の様な構造化言語の場合、制御構造は順
次、反復、及び選択であるが、このうち順次に関しては
上記のように解析が可能である。
【0107】そこで、次に反復構造の解析について説明
する。すなわち、反復構造の構成要素は、大まかに、反
復のための初期化(例えばカウンタの初期化などであ
り、以下「初期化処理部」という)と、反復の対象とな
る部分(以下「反復対象部」という)に分けられる。な
お、反復対象部には反復を行うための条件を判定する部
分も含まれる。
する。すなわち、反復構造の構成要素は、大まかに、反
復のための初期化(例えばカウンタの初期化などであ
り、以下「初期化処理部」という)と、反復の対象とな
る部分(以下「反復対象部」という)に分けられる。な
お、反復対象部には反復を行うための条件を判定する部
分も含まれる。
【0108】この場合、ソースコード中の反復構造を検
出する第1の検出手段を設け、選択手段について、検出
された反復構造に係る部分については、反復0回及び2
回に係る処理に関する情報を選択するように構成する
(請求項10、23)。このようにすれば、反復構造に
ついて必要十分な反復回数に係る処理に関する情報が出
力されるので、解析が効率化される。
出する第1の検出手段を設け、選択手段について、検出
された反復構造に係る部分については、反復0回及び2
回に係る処理に関する情報を選択するように構成する
(請求項10、23)。このようにすれば、反復構造に
ついて必要十分な反復回数に係る処理に関する情報が出
力されるので、解析が効率化される。
【0109】具体的には、まず、C言語においては反復
構造を実現するための構文は複数存在するが、これらは
いずれも上記2つの構成要素を含む点では共通する。そ
こで、ここでは、for 文を含むプログラムを例にとり
(図15)、インクルードファイルは図4と同一とす
る。
構造を実現するための構文は複数存在するが、これらは
いずれも上記2つの構成要素を含む点では共通する。そ
こで、ここでは、for 文を含むプログラムを例にとり
(図15)、インクルードファイルは図4と同一とす
る。
【0110】反復構造を含むこのプログラムの解析で
は、上記の初期化処理部と反復対象部に対しての解析結
果を準備する。すなわち、反復構造において、一般には
複数の結果が生成され得るが、データ処理の正当性を確
認するためには反復回数0回、及び2回の解析だけに注
目すれば十分である(参考文献:"Detection of Data F
low Anomaly Through Program Instrumentation"、ヒュ
ーストン大学・J.C.Huang 著)。
は、上記の初期化処理部と反復対象部に対しての解析結
果を準備する。すなわち、反復構造において、一般には
複数の結果が生成され得るが、データ処理の正当性を確
認するためには反復回数0回、及び2回の解析だけに注
目すれば十分である(参考文献:"Detection of Data F
low Anomaly Through Program Instrumentation"、ヒュ
ーストン大学・J.C.Huang 著)。
【0111】この場合、反復構造を含む場合の出力範囲
は第1の検出手段や選択手段によって判断してもよい
が、反復回数を指示するように途中の実行文IDを指定
することにより行うこともできる。いずれの場合も、例
えば、反復回数0回については、@P1012、@S1012、及び
@P1013の順に選択される結果、図16の結果が得られ
る。また、反復回数2回については、@P1012、@S1012、
@S1012、@S1012、及び@P1013の順に選択される結果、図
17の結果が得られる。
は第1の検出手段や選択手段によって判断してもよい
が、反復回数を指示するように途中の実行文IDを指定
することにより行うこともできる。いずれの場合も、例
えば、反復回数0回については、@P1012、@S1012、及び
@P1013の順に選択される結果、図16の結果が得られ
る。また、反復回数2回については、@P1012、@S1012、
@S1012、@S1012、及び@P1013の順に選択される結果、図
17の結果が得られる。
【0112】なお、同一箇所の反復実行の有無に応じた
情報が得られれば十分であるから、反復回数は0回及び
2回には限定されず、複数回及び1回以下からなる所望
の反復回数の組み合わせを対象とすればよい。すなわ
ち、特に反復構造からなるソースコードにおいて、一度
も反復構造内を実行しない場合のデータの関連性及び、
複数回実行した場合のデータの関連性を比較することに
よって、よりデータの関連性が明確になることが知られ
ている。
情報が得られれば十分であるから、反復回数は0回及び
2回には限定されず、複数回及び1回以下からなる所望
の反復回数の組み合わせを対象とすればよい。すなわ
ち、特に反復構造からなるソースコードにおいて、一度
も反復構造内を実行しない場合のデータの関連性及び、
複数回実行した場合のデータの関連性を比較することに
よって、よりデータの関連性が明確になることが知られ
ている。
【0113】(4)第3実施形態 次に、選択構造の解析について説明する。選択構造の構
成要素は、大まかに、選択の条件を判定する部分(以下
「選択条件判定部」という)と、選択によって実際に実
行される部分(以下「選択対象部」という)に分けられ
る。この場合、選択対象部は選択条件判定部における選
択肢の数だけ存在することになる。
成要素は、大まかに、選択の条件を判定する部分(以下
「選択条件判定部」という)と、選択によって実際に実
行される部分(以下「選択対象部」という)に分けられ
る。この場合、選択対象部は選択条件判定部における選
択肢の数だけ存在することになる。
【0114】この場合、ソースコード中の選択構造を検
出する第2の検出手段を設け、選択手段について、検出
された選択構造に係る部分については、選択の条件の各
判断結果に対応する各処理に関する情報を選択するよう
に構成する(請求項11、24)。このようにすれば、
選択構造について、選択の条件の各判断結果に対応する
各処理に関する情報が出力されるので、選択構造に関す
る情報の理解が容易になる。
出する第2の検出手段を設け、選択手段について、検出
された選択構造に係る部分については、選択の条件の各
判断結果に対応する各処理に関する情報を選択するよう
に構成する(請求項11、24)。このようにすれば、
選択構造について、選択の条件の各判断結果に対応する
各処理に関する情報が出力されるので、選択構造に関す
る情報の理解が容易になる。
【0115】具体的には、まず、C言語においては選択
構造を実現するための構文も複数存在するが、いずれも
上記2種類の構成要素を含む点では共通する。ここで
は、if文を含んだプログラムを例にとり(図18)、イ
ンクルードファイルは図4と同一とする。
構造を実現するための構文も複数存在するが、いずれも
上記2種類の構成要素を含む点では共通する。ここで
は、if文を含んだプログラムを例にとり(図18)、イ
ンクルードファイルは図4と同一とする。
【0116】選択構造を含むこのプログラムの解析で
は、上記の選択条件判定部と選択対象部に対しての解析
結果を準備する。この場合、選択構造を含む場合の表示
範囲の判断は、第2の検出手段及び選択手段によって行
ってもよいし、解析の対象とする選択対象部を指示する
ように途中の実行文IDを指定してもよい。いずれの場
合も、例えば、条件が真の時については、@P1023、@S10
24、及び@P1027の順に選択される結果、図19の結果が
得られる。また、偽の時については、@P1023、@S1025、
及び@P1027の順に選択される結果、図20の結果が得ら
れる。
は、上記の選択条件判定部と選択対象部に対しての解析
結果を準備する。この場合、選択構造を含む場合の表示
範囲の判断は、第2の検出手段及び選択手段によって行
ってもよいし、解析の対象とする選択対象部を指示する
ように途中の実行文IDを指定してもよい。いずれの場
合も、例えば、条件が真の時については、@P1023、@S10
24、及び@P1027の順に選択される結果、図19の結果が
得られる。また、偽の時については、@P1023、@S1025、
及び@P1027の順に選択される結果、図20の結果が得ら
れる。
【0117】(5)第4実施形態 与えられたソースコードと、このソースコードに基づく
解析の結果を、対応付けて表示すれば、両者の対応関係
の理解が一層容易になる(請求項12、25)。
解析の結果を、対応付けて表示すれば、両者の対応関係
の理解が一層容易になる(請求項12、25)。
【0118】具体的には、ソースコードと解析結果を、
同一の表示装置又は隣接する表示装置に同時に表示する
(請求項12、25)。ユーザは、マウスやキーボード
などの入力装置を用いて、ソースコードの所望の文又は
範囲を指定する。ソースコードに含まれる各文は、冗長
な文を除いて、最終的な出力結果に含まれる特定のデー
タ間関連の生成に対応しているはずである。そこで、指
定された範囲に対応する部分の解析結果を、反転などで
強調表示する(請求項13、26)。
同一の表示装置又は隣接する表示装置に同時に表示する
(請求項12、25)。ユーザは、マウスやキーボード
などの入力装置を用いて、ソースコードの所望の文又は
範囲を指定する。ソースコードに含まれる各文は、冗長
な文を除いて、最終的な出力結果に含まれる特定のデー
タ間関連の生成に対応しているはずである。そこで、指
定された範囲に対応する部分の解析結果を、反転などで
強調表示する(請求項13、26)。
【0119】逆に、解析結果のうち所望のデータ間関連
を指定してもよい。各データ間関連は、必ずソースコー
ドの特定の文、あるいは文の組によって生成されている
はずである。そこで、指定されたデータ間関連に対応す
るソースコード上の文、あるいは文の組が、反転などで
強調表示される(請求項13、26)。
を指定してもよい。各データ間関連は、必ずソースコー
ドの特定の文、あるいは文の組によって生成されている
はずである。そこで、指定されたデータ間関連に対応す
るソースコード上の文、あるいは文の組が、反転などで
強調表示される(請求項13、26)。
【0120】図21は、第4実施形態における表示例を
示す図である。この表示例において、ソースコードの文
101と、破線矢印で表される関連102は、相互に対
応しており、いずれを指定しても他方が強調表示され
る。
示す図である。この表示例において、ソースコードの文
101と、破線矢印で表される関連102は、相互に対
応しており、いずれを指定しても他方が強調表示され
る。
【0121】これにより、例えば解析結果上で問題点が
発見された場合に、当該問題点がソースコード上のどの
部分に起因するのかを容易に特定できる。逆に、ソース
コードによる実装が意図したとおりの結果を生成してい
ることを確認するために、当該実装部が解析結果上のど
の部分に影響しているのかを容易に特定できる。
発見された場合に、当該問題点がソースコード上のどの
部分に起因するのかを容易に特定できる。逆に、ソース
コードによる実装が意図したとおりの結果を生成してい
ることを確認するために、当該実装部が解析結果上のど
の部分に影響しているのかを容易に特定できる。
【0122】(6)他の実施形態 本発明は、上記各実施形態に限定されるものではなく、
実施態様の変更は自由であるから、次に例示するような
他の実施形態をも包含するものである。例えば、解析対
象とするプログラミング言語はC言語には限定されず、
各種構造化言語を含む他の言語を対象とすることができ
る。もちろん、非構造的な構文、例えばgoto文などを含
むような場合でも、実行文IDを明示的に指示すること
によって解析結果を得ることが可能である。
実施態様の変更は自由であるから、次に例示するような
他の実施形態をも包含するものである。例えば、解析対
象とするプログラミング言語はC言語には限定されず、
各種構造化言語を含む他の言語を対象とすることができ
る。もちろん、非構造的な構文、例えばgoto文などを含
むような場合でも、実行文IDを明示的に指示すること
によって解析結果を得ることが可能である。
【0123】また、データの具体的な形式は上記各実施
形態に示したものには限定されず、自由に定めることが
できる。また、出力対象指定手段、第1の検出手段、第
2の検出手段、出力範囲指定手段、選択手段、解析範囲
指定手段、処理情報抽出手段、関連情報抽出手段、参照
手段、プリプロセッサなどは必ずしも設ける必要はな
い。
形態に示したものには限定されず、自由に定めることが
できる。また、出力対象指定手段、第1の検出手段、第
2の検出手段、出力範囲指定手段、選択手段、解析範囲
指定手段、処理情報抽出手段、関連情報抽出手段、参照
手段、プリプロセッサなどは必ずしも設ける必要はな
い。
【0124】制御構造の任意の組合せ(例えば、第2実
施形態の反復構造、及び第3実施形態の選択構造の任意
の組合せによるネスト)についても、対象とすることが
可能である。
施形態の反復構造、及び第3実施形態の選択構造の任意
の組合せによるネスト)についても、対象とすることが
可能である。
【0125】また、本発明は、一般的にはコンピュータ
のプログラムによって実現されるが、このプログラムを
記録したフロッピーでディスクなどの記録媒体を、独立
して取引することも本発明の一態様である。
のプログラムによって実現されるが、このプログラムを
記録したフロッピーでディスクなどの記録媒体を、独立
して取引することも本発明の一態様である。
【0126】
【発明の効果】以上説明したように、本発明によれば、
ソースコードを静的解析によって効率的に解析し、解析
結果によって、処理内容及び入出力仕様を含むソースコ
ードの内容の理解を容易にすることができる。
ソースコードを静的解析によって効率的に解析し、解析
結果によって、処理内容及び入出力仕様を含むソースコ
ードの内容の理解を容易にすることができる。
【図1】本発明の第1実施形態のプログラム解析装置の
構成を示すブロック図。
構成を示すブロック図。
【図2】本発明の第1実施形態のプログラム解析装置の
動作手順を示すフローチャート。
動作手順を示すフローチャート。
【図3】本発明の第1実施形態におけるC言語プログラ
ムのソースコードの例を示す図。
ムのソースコードの例を示す図。
【図4】本発明の第1実施形態におけるC言語プログラ
ムのインクルードファイルの例を示す図。
ムのインクルードファイルの例を示す図。
【図5】本発明の第1実施形態において、図3のソース
コードに図4のインクルードファイルを加入した結果た
るソースコードの例を示す図。
コードに図4のインクルードファイルを加入した結果た
るソースコードの例を示す図。
【図6】本発明の第1実施形態において図3のソースコ
ードにラベリングを行った結果たるソースコードの例を
示す図。
ードにラベリングを行った結果たるソースコードの例を
示す図。
【図7】本発明の第1実施形態において抽出される各情
報の一般的格納形式を示す図。
報の一般的格納形式を示す図。
【図8】本発明の第1実施形態におけるデータ情報の例
を示す図。
を示す図。
【図9】本発明の第1実施形態におけるデータ情報及び
関連情報の例を示す図。
関連情報の例を示す図。
【図10】本発明の第1実施形態において、図9の関連
情報に修正を加えた結果たる関連情報の例を示す図。
情報に修正を加えた結果たる関連情報の例を示す図。
【図11】本発明の第1実施形態における処理情報の例
を示す図。
を示す図。
【図12】本発明の第1実施形態における出力の例を示
す図。
す図。
【図13】本発明の第1実施形態において、図12の出
力例の凡例を示す図。
力例の凡例を示す図。
【図14】本発明の第1実施形態における出力の他の例
を示す図。
を示す図。
【図15】本発明の第2実施形態における反復構造を含
むプログラムのソースコードの例を示す図。
むプログラムのソースコードの例を示す図。
【図16】本発明の第2実施形態において、図15のソ
ースコードの反復0回の処理に係る出力の例を示す図。
ースコードの反復0回の処理に係る出力の例を示す図。
【図17】本発明の第2実施形態において、図15のソ
ースコードの反復2回の処理に係る出力の例を示す図。
ースコードの反復2回の処理に係る出力の例を示す図。
【図18】本発明の第3実施形態における選択構造を含
むプログラムのソースコードの例を示す図。
むプログラムのソースコードの例を示す図。
【図19】本発明の第3実施形態において、図18のソ
ースコードの条件が真の場合の処理に係る出力の例を示
す図。
ースコードの条件が真の場合の処理に係る出力の例を示
す図。
【図20】本発明の第3実施形態において、図18のソ
ースコードの条件が偽の場合の処理に係る出力の例を示
す図。
ースコードの条件が偽の場合の処理に係る出力の例を示
す図。
【図21】本発明の第4実施形態における表示例を示す
図。
図。
1…データ抽出手段 2…出力手段 3…ラベリング手段 4…プリプロセッサ 5…関連抽出手段 6…処理抽出手段 7…指定部 8…選択手段
Claims (26)
- 【請求項1】 データに対する処理を表すコンピュータ
プログラムのソースコードを解析するプログラム解析装
置において、 前記ソースコードから、前記各データの構造を表す情報
であるデータ情報を抽出するデータ情報抽出手段と、 前記ソースコードと前記データ情報とに基づいて、ソー
スコードの所定の位置について、データ間の関連情報を
抽出する関連情報抽出手段と、 を有することを特徴とするプログラム解析装置。 - 【請求項2】 前記ソースコードに関連する他のファイ
ルを参照する参照手段を備えたことを特徴とする請求項
1記載のプログラム解析装置。 - 【請求項3】 前記データ情報は、データごとの情報を
格納する構造体Dと、データの型ごとの情報を格納する
構造体Tとを含み、 前記構造体Dは該当する前記構造体Tに対し関係付けら
れていることを特徴とする請求項1記載のプログラム解
析装置。 - 【請求項4】 前記関連情報抽出手段は、前記関連の種
別を抽出するように構成されたことを特徴とする請求項
1記載のプログラム解析装置。 - 【請求項5】 前記ソースコード、前記データ情報及び
前記関連情報に基づいて、前記ソースコード中の所定の
処理に関する関連情報を、処理情報として抽出する処理
情報抽出手段を有することを特徴とする請求項1記載の
プログラム解析装置。 - 【請求項6】 前記処理情報抽出手段は、前記ソースコ
ードに基づいて行われるべき処理について、当該処理前
の前記関連情報及び当該処理後の前記関連情報の組を抽
出するように構成されたことを特徴とする請求項5記載
のプログラム解析装置。 - 【請求項7】 前記処理情報抽出手段は、前記処理情報
の抽出に際し、前記関連情報を辿ることにより得られる
データ間の整合性を検出する整合性検出手段と、 この手段により検出された整合性に基づいて、前記関連
情報を修正する修正手段を有することを特徴とする請求
項6記載のプログラム解析装置。 - 【請求項8】 前記抽出の範囲を指定する解析範囲指定
手段を有することを特徴とする請求項1又は5記載のプ
ログラム解析装置。 - 【請求項9】 出力する情報の範囲を指定する出力範囲
指定手段と、 抽出された前記各情報から前記指定された範囲に対応す
る情報を選択する選択手段を備えたことを特徴とする請
求項1又は5記載のプログラム解析装置。 - 【請求項10】 前記ソースコード中の反復構造を検出
する第1の検出手段を有し、 前記選択手段は、検出された反復構造に係る部分につい
ては、反復複数回及び1回以下に係る処理に関する情報
を選択するように構成されたことを特徴とする請求項9
記載のプログラム解析装置。 - 【請求項11】 前記ソースコード中の選択構造を検出
する第2の検出手段を有し、 前記選択手段は、検出された選択構造に係る部分につい
ては、選択の条件の各判断結果に対応する各処理に関す
る情報を選択するように構成されたことを特徴とする請
求項9記載のプログラム解析装置。 - 【請求項12】 前記ソースコードと、抽出されたいず
れかの前記情報を、同一の表示装置又は相互に隣接する
表示装置に表示する出力手段を有することを特徴とする
請求項1又は5記載のプログラム解析装置。 - 【請求項13】 前記出力手段は、前記ソースコード又
は前記情報の一方の一部が指定された場合に、当該指定
された部分に対応する他方の部分を強調表示するように
構成されたことを特徴とする請求項12記載のプログラ
ム解析装置。 - 【請求項14】 データに対する処理を表すコンピュー
タプログラムのソースコードを解析するプログラム解析
方法において、 前記ソースコードから、前記各データの構造を表す情報
であるデータ情報を抽出するデータ抽出ステップと、 前記ソースコードと前記データ情報とに基づいて、ソー
スコードの所定の位置について、データ間の関連情報を
抽出する関連抽出ステップと、 を含むことを特徴とするプログラム解析方法。 - 【請求項15】 前記ソースコードに関連する他のファ
イルを参照する参照ステップを含むことを特徴とする請
求項14記載のプログラム解析方法。 - 【請求項16】 前記データ情報は、データごとの情報
を格納する構造体Dと、データの型ごとの情報を格納す
る構造体Tとを含み、 前記構造体Dは該当する前記構造体Tに対し、関連づけ
られていることを特徴とする請求項14記載のプログラ
ム解析方法。 - 【請求項17】 前記関連抽出ステップは、前記関連の
種別を抽出することを特徴とする請求項14記載のプロ
グラム解析方法。 - 【請求項18】 前記ソースコード、前記データ情報及
び前記関連情報に基づいて、前記ソースコード中の所定
の処理に関する関連情報を、処理情報として抽出する処
理情報抽出ステップを含むことを特徴とする請求項14
記載のプログラム解析方法。 - 【請求項19】 前記処理情報抽出ステップは、前記ソ
ースコードに基づいて行われるべき処理について、当該
処理前の前記関連情報及び当該処理後の前記関連情報の
組を抽出することを特徴とする請求項18記載のプログ
ラム解析方法。 - 【請求項20】 前記処理情報抽出ステップは、前記処
理情報の抽出に際し、前記関連情報を辿ることにより得
られるデータ間の整合性を検出する整合性検出ステップ
と、 この手段により検出された整合性に基づいて、前記関連
情報を修正する修正ステップを含むことを特徴とする請
求項18記載のプログラム解析方法。 - 【請求項21】 前記抽出の範囲を指定する解析範囲指
定ステップを含むことを特徴とする請求項14又は18
記載のプログラム解析方法。 - 【請求項22】 出力する情報の範囲を指定する出力範
囲指定ステップと、 抽出された前記各情報から前記指定された範囲に対応す
る情報を選択する選択ステップを備えたことを特徴とす
る請求項14又は18記載のプログラム解析方法。 - 【請求項23】 前記ソースコード中の反復構造を検出
する第1の検出ステップを有し、 前記選択ステップは、検出された反復構造に係る部分に
ついては、反復複数回及び1回以下に係る処理に関する
情報を選択することを特徴とする請求項22記載のプロ
グラム解析方法。 - 【請求項24】 前記ソースコード中の選択構造を検出
する第2の検出ステップを有し、 前記選択ステップは、検出された選択構造に係る部分に
ついては、選択の条件の各判断結果に対応する各処理に
関する情報を選択することを特徴とする請求項22記載
のプログラム解析方法。 - 【請求項25】 前記ソースコードの全部又は一部と、
抽出されたいずれかの前記情報のうち全部又は一部に対
応する情報を、同一の表示装置又は相互に隣接する表示
装置に表示する出力ステップを含むことを特徴とする請
求項14又は18記載のプログラム解析方法。 - 【請求項26】 前記出力ステップは、前記ソースコー
ド又は前記情報の一方の一部が指定された場合に、当該
指定された部分に対応する他方の部分を強調表示するこ
とを特徴とする請求項25記載のプログラム解析方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP8113728A JPH0926897A (ja) | 1995-05-08 | 1996-05-08 | プログラム解析装置及びプログラム解析方法 |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7-109525 | 1995-05-08 | ||
| JP10952595 | 1995-05-08 | ||
| JP8113728A JPH0926897A (ja) | 1995-05-08 | 1996-05-08 | プログラム解析装置及びプログラム解析方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0926897A true JPH0926897A (ja) | 1997-01-28 |
Family
ID=26449264
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP8113728A Pending JPH0926897A (ja) | 1995-05-08 | 1996-05-08 | プログラム解析装置及びプログラム解析方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0926897A (ja) |
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH11224186A (ja) * | 1998-02-05 | 1999-08-17 | Nippon Steel Corp | ソフトウェア解析装置及びソフトウェア解析方法 |
| JP2006251583A (ja) * | 2005-03-14 | 2006-09-21 | Shibasoku:Kk | プログラムの表示方法 |
| JP2018028879A (ja) * | 2016-08-19 | 2018-02-22 | 日本電信電話株式会社 | プログラム解析装置、プログラム解析方法およびプログラム解析プログラム |
| JP2019521430A (ja) * | 2016-06-03 | 2019-07-25 | アビニシオ テクノロジー エルエルシー | フォーマット特有のデータ処理動作 |
| US10489428B2 (en) | 2015-09-17 | 2019-11-26 | Hitachi, Ltd. | Existing system processing specification extractor |
| US12585574B2 (en) | 2019-12-23 | 2026-03-24 | Ab Initio Technology Llc | Unit testing of components of dataflow graphs |
-
1996
- 1996-05-08 JP JP8113728A patent/JPH0926897A/ja active Pending
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH11224186A (ja) * | 1998-02-05 | 1999-08-17 | Nippon Steel Corp | ソフトウェア解析装置及びソフトウェア解析方法 |
| JP2006251583A (ja) * | 2005-03-14 | 2006-09-21 | Shibasoku:Kk | プログラムの表示方法 |
| US10489428B2 (en) | 2015-09-17 | 2019-11-26 | Hitachi, Ltd. | Existing system processing specification extractor |
| JP2019521430A (ja) * | 2016-06-03 | 2019-07-25 | アビニシオ テクノロジー エルエルシー | フォーマット特有のデータ処理動作 |
| JP2018028879A (ja) * | 2016-08-19 | 2018-02-22 | 日本電信電話株式会社 | プログラム解析装置、プログラム解析方法およびプログラム解析プログラム |
| US12585574B2 (en) | 2019-12-23 | 2026-03-24 | Ab Initio Technology Llc | Unit testing of components of dataflow graphs |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP0785510B1 (en) | Program debugging system for debugging a program having a graphical user interface | |
| US6003143A (en) | Tool and method for diagnosing and correcting errors in a computer program | |
| US5862382A (en) | Program analysis system and program analysis method | |
| US7571431B2 (en) | Processing macro information and displaying via GUI in different tools | |
| EP0688448B1 (en) | Incremental build system | |
| US5210859A (en) | Program debugging support method and apparatus | |
| US5974254A (en) | Method for detecting differences between graphical 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 | |
| US20020091968A1 (en) | Object-oriented data driven software GUI automated test harness | |
| US20080127103A1 (en) | Dynamic deneration and implementation of globalization verification testing for user interface controls | |
| JPH0950389A (ja) | コンピュータシステムを使って実装される装置及び方法 | |
| CN101171571A (zh) | 分析和组织软件应用程序中的物件的设备 | |
| JP4395761B2 (ja) | プログラムテスト支援装置およびその方法 | |
| US5987248A (en) | Debugging information display device | |
| US7086033B2 (en) | Software debugger having a monitor for monitoring conditional statements within a software program | |
| JP2000112784A (ja) | プログラムテスト支援装置及びプログラムテスト支援プログラムを記録した記録媒体 | |
| JPH08241191A (ja) | Gui自動評価装置 | |
| JPH0926897A (ja) | プログラム解析装置及びプログラム解析方法 | |
| JP2004126866A (ja) | 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法 | |
| US20050055612A1 (en) | Design supporting apparatus | |
| US20050022170A1 (en) | Visual debugging interface | |
| JP2000207246A (ja) | デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体 | |
| JPH10149301A (ja) | スクリプト作成装置 | |
| EP1562120A1 (en) | Data processing system with display of test data | |
| JPS6254337A (ja) | プログラムの階層指定表示方式 |