JP4055197B2 - プログラムに含まれる手続きの解析装置 - Google Patents
プログラムに含まれる手続きの解析装置 Download PDFInfo
- Publication number
- JP4055197B2 JP4055197B2 JP03261298A JP3261298A JP4055197B2 JP 4055197 B2 JP4055197 B2 JP 4055197B2 JP 03261298 A JP03261298 A JP 03261298A JP 3261298 A JP3261298 A JP 3261298A JP 4055197 B2 JP4055197 B2 JP 4055197B2
- Authority
- JP
- Japan
- Prior art keywords
- procedure
- definition
- variable
- program
- reference information
- 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.)
- Expired - Fee Related
Links
Images
Description
【発明の属する技術分野】
本発明は、一般的なプログラム言語で記述されたソースプログラムについてデバッグ、テスト、保守などを行う際に利用されるプログラムに含まれる手続きの解析装置に関する。
【0002】
【従来の技術】
プログラムのデータフロー解析は、ソースプログラムを作成した後のデバッグやテストにおいて行われるだけでなく、既に作成されているプログラムを必要に応じて修正し又は改造するといった保守作業を行う際にも行われる。保守作業を行う場合にデータフロー解析を行うことによって、特に大規模なプログラムの修正等を行う際に、必要な情報を効率よく抽出することができる。かかるデータフロー解析を行う場合に、そのソースプログラムに含まれる各変数の参照について、その値の定義箇所を求め、また、変数の代入についてその値の参照箇所を求める定義/参照解析を行うことが必要である。
【0003】
【発明が解決しようとする課題】
ところで、例えばC言語を始めとする多くの高級言語では、種々の手続きが標準ライブラリ内に用意され、プログラムの中からこの手続きを指定することによって、その手続きを呼び出すことができる。また、ある手続きの中で、また別の手続きを呼び出すことも可能である。しかし、手続きの中でまた別の手続きを呼び出すと、そこでもデータの受渡しが行われるので、データ依存関係を正確に調べようとすると、手続きとして呼び出された手続きの内部についてもデータ依存関係をすべて調べなければならない。このような作業は、特に規模の大きいプログラムの場合においては、実行に長時間を要する。
【0004】
また、標準ライブラリに含まれる手続きが、コンパイルされたあとの実行可能プログラムとして提供されている場合には、そのソースプログラムの内容が存在せず、このような手続きを利用して作成したプログラムについてはデータ依存関係を調べることができなかった。したがって、従来のデータフロー解析装置では、このようなプログラムについてはデータフロー解析を行うことができなかった。
【0005】
本発明は上記事情に基づいてなされたものであり、ソースプログラムの内容を見ることができない手続きを含むプログラムについてもデータフロー解析を可能とし、また、ソースプログラムを見ることができる手続きを含むプログラムであってもそのデータフロー解析に要する時間を短縮することができるプログラムに含まれる手続きの解析装置を提供することを目的とする。
【0006】
【課題を解決するための手段】
上記の課題を解決するために、本発明は、コンピュータによりプログラムに含まれる手続きの解析を行う、プログラムに含まれる手続きの解析装置であって、特定のプログラミング言語で記述された、関数を含む仕様が明らかな所定の手続きについて、前記所定の手続きと前記所定の手続きの中で変数が定義されているか、変数が参照されているかを予め結びつけたテーブルを格納した定義/参照情報格納手段と、前記特定のプログラミング言語で記述されたソースプログラムを元に生成された構文解析木上から一文を読み込んで、この文に前記所定の手続きが含まれているかを判断する手続き判断手段と、前記手続き判断手段の判断結果に基づいて、前記所定の手続きについては前記定義/参照情報格納手段に格納された前記テーブルから前記所定の手続きが変数の定義であるか、変数の参照であるかに関する情報を読み出し、前記所定の手続き以外の手続きについては前記ソースプログラムの内容から変数が定義されているか、変数が参照されているか、あるいはどちらでもないかに関する情報を抽出処理する定義/参照情報抽出手段と、前記定義/参照情報格納手段から前記定義/参照情報抽出手段が読み出した情報、或いは前記定義/参照情報抽出手段が抽出した情報に基づいてどの定義がどこで参照されるかを解析する手続きの解析処理を行い、その結果を出力する解析手段と、を有することを特徴とする。
【0007】
本発明は、上記より、定義/参照情報格納手段に、予め所定の手続きについて変数の定義/参照に関する情報を格納する。この場合、所定の手続きには、例えばコンパイルされた後の実行可能なプログラムも含まれる。そして、読み込まれたソースプログラムについて一行ずつ変数の定義/参照に関する情報の抽出を行っている際に、この所定の手続きに至ったら、定義/参照情報格納手段を参照して変数の定義/参照に関する情報を抽出する。このような作業を読み込んだソースプログラム全体について行う。従来は、ソースプログラムがなくて変数の定義/参照に関する情報を抽出することができなかった手続きについても、かかる情報の抽出が可能となり、その後のデータフロー解析を行うことが可能となる。尚、本明細書では、「手続き」といった場合に、C言語における関数なども含むものとする。
【0008】
【発明の実施の形態】
以下に図面を参照して、本発明の一実施形態について説明する。図1は、C言語で記述されたあるソースプログラムの一例を示している。同図において、4行目に「read」という手続きが記述されている。この手続きは、これとは別の手続きである「scanf」を7行目において呼び出している。ここで、「scanf」はC言語の標準ライブラリに含まれる手続きであり、”%d”は、定義する変数iを10進数の整数型とする旨の指定である。
【0009】
従来のデータフロー解析装置は、単一手続き内のデータフロー解析を行っているので、図1のプログラムのように、一つの手続きの中に別の手続きを呼び出す呼び出し文が含まれているソースプログラムについて、従来の装置でデータフロー解析を行わせようとしても、できない場合があった。このように単一手続きの内部に手続きの呼び出しがある場合には、「手続き間解析」を行うことが一般的であり、これを行うと、単一手続き内の解析に比べて実行速度が大幅に遅くなる。ここで、データフロー解析とは、どの定義がどこで参照されるかを解析することをいう。
【0010】
通常の単一手続き内のデータフロー解析では、4行目の手続き「read」にはデータ依存関係が存在しないことになるが、実際には8行目の「i」が、7行目に記述された手続き「scanf」を介してiにデータ依存している。これは、C言語の標準ライブラリに含まれる「scanf」の仕様によって、第2引数iが定義されるからである。尚、「データ依存」とは、次のことをいう。文S1、文S2、変数vがあった場合に、
▲1▼文S1において変数vが定義されること
▲2▼文S2において変数vが参照されること
▲3▼文S1から文S2への実行可能なパスであって、変数vを再定義しないパスが存在すること
という3つの条件を満足している場合に、文S2は、変数vに関して文S1にデータ依存するという。
【0011】
本実施形態にかかるプログラムに含まれる手続きの解析装置では、通常の単一手続き内のデータフロー解析と、特定の手続きに関する手続き情報を利用することにより、単一手続き内のデータフロー解析よりも適用可能な条件を広げ、しかも手続き間解析よりも実行速度が早く、かつ正確な解析を行うことを可能とする。
上述のように、図1に示すソースプログラムにおいて7行目の「scanf」は、標準ライブラリに含まれる手続きであるため、その仕様は予め明らかになっている。すなわち、図1の例では、iという変数が定義されていることが予め分かっている。そこで、この「scanf」のように、仕様が明らかになっている標準ライブラリに含まれる各手続きについて、その仕様から、データ依存関係を予め調べておいて、その結果だけを記述した定義/参照情報格納ファイルを用意する。例えば「scanf」の場合であれば、引数であるiは、ここで定義される旨の情報を定義/参照情報格納ファイル内に格納しておく。
【0012】
また、これとは異なる手続き、例えば後に続く引数を画面に表示する旨の手続きである「printf」という手続きであれば、この引数がこの手続きによって「参照」される。したがって、「printf」という手続きについては、引数がここで参照される旨の情報を定義/参照情報格納ファイル内に格納しておく。
このように、定義/参照情報格納ファイルには、多くの手続きについて、予めそれぞれの手続きと、それらが変数の「定義」なのか「参照」なのかを結び付けたテーブルを用意しておく。このなかで、ある手続きの呼び出しがあったならば、このテーブルにその手続きが含まれているかどうかを判断する。呼び出された手続きがこのテーブルにあり、かつ、それが変数の「定義」であるのか、「参照」であるのかという情報を抽出する。
【0013】
定義/参照情報格納ファイルに格納する手続きは、C言語の標準ライブラリに含まれるものには限られない。例えば、ある工場で、よく利用される特殊な手続きを作り、その工場で一般的に使われているようなものとなっている場合でも、上記の標準ライブラリに含まれる手続きの場合と同じような定義/参照情報格納ファイルを作成しておけば、同じように正確で効率的な解析を行うことができる。
【0014】
次に、図2及び図3を参照して、本実施形態のプログラムに含まれる手続きの解析装置の動作について説明する。図2は、本実施形態のプログラムに含まれる手続きの解析装置のブロック図、図3は、その動作を示すフローチャートである。尚、図2に示した構文解析手段26、手続き判断手段21、定義/参照情報抽出手段23、データフロー解析手段24は、これらの機能をプログラムとして記憶媒体31に記録したものをコンピュータ30が読み取ることによって、コンピュータ30上で実現することができる。したがって、この記憶媒体31を例えばフレキシブルディスクやCD−ROMといった取り外し可能なものとすれば、この記憶媒体31を配付することによって、この記憶媒体31を読み取って実行できる任意のコンピュータ上で本実施形態のプログラムに含まれる手続きの解析装置を実現することができる。このとき、定義/参照情報格納ファイル22の内容も、これらのプログラムと共に記憶媒体31に記憶させておいてもよい。
【0015】
図3のフローチャートにおいて、まずS10で、構文解析手段26が、入力されるソースプログラム20を元に構文解析木を生成し、生成された構文解析木上から一文を読み込む。S11で、手続き判断手段21はこの文の中に定義/参照情報格納ファイル22に格納された特定の手続きが含まれているか否かを判断し、含まれていれば、S12において、定義/参照情報抽出手段23が定義/参照情報格納ファイル22を参照し、S13において変数が「定義」であるか、「参照」であるかという情報を引き出す。一方、S11において、この文に定義/参照情報格納ファイル22に格納された手続きが含まれていないと判断したときは、S14において、定義/参照情報抽出手段23は変数が「定義」されているか「参照」されているか、あるいはどちらでもないかを判断する。S15において、手続き判断手段21は更にプログラムの文が続いているかどうかを判断し、更に続いていれば、S10に戻り、次の文の情報を読み込んで上記と同様の動作を実行する。また、S15において、最後の文に至ったと判断されると、S16において、データフロー解析手段24がデータフローの解析を実行する。その結果は解析結果25として出力される。
【0016】
上記のように、ソースプログラム内に、従来のデータフロー解析装置ではデータ依存を調べることができなかった手続きが含まれていても、予め定義/参照情報格納ファイル22に必要な情報を記述しておき、必要に応じてこれを参照することによって、従来は調べることができなかった手続きや、実際に調べようとすると実行に長時間を要するような手続きについてもデータ依存関係を短時間で調べることが可能となる。
【0017】
尚、本発明は上記実施形態には限定されず、その要旨の範囲内で種々の変更が可能である。例えば上記では、C言語の標準ライブラリに含まれる「scanf」や「printf」といった典型的な手続きについて説明したが、本発明は、C言語におけるこれ以外の手続きもしくは、ユーザーが作成したライブラリに含まれる手続きについても適用することができ、更に、C言語以外の多くの高級言語についても、同様に適用することができる。
【0018】
【発明の効果】
以上説明したように、本発明によれば、ソースプログラムの内容を見ることができない手続きを含むプログラムについてもデータフロー解析を可能とし、また、ソースプログラムを見ることができる手続きを含むプログラムであってもそのデータフロー解析に要する時間を短縮することができるプログラムに含まれる手続きの解析装置を提供することができる。
【図面の簡単な説明】
【図1】C言語で記述されたあるソースプログラムの一例を示す図である。
【図2】 本発明の一実施形態のプログラムに含まれる手続きの解析装置のブロック図である。
【図3】 本発明の一実施形態のプログラムに含まれる手続きの解析装置の動作を示すフローチャートである。
【符号の説明】
20 ソースプログラム
21 手続き判断手段
22 定義/参照情報格納ファイル
23 定義/参照情報抽出手段
24 データフロー解析手段
25 解析結果
26 構文解析手段
30 コンピュータ
31 記憶媒体
Claims (3)
- コンピュータによりプログラムに含まれる手続きの解析を行う、プログラムに含まれる手続きの解析装置であって、
特定のプログラミング言語で記述された、関数を含む仕様が明らかな所定の手続きについて、前記所定の手続きと前記所定の手続きの中で変数が定義されているか、変数が参照されているかを予め結びつけたテーブルを格納した定義/参照情報格納手段と、
前記特定のプログラミング言語で記述されたソースプログラムを元に生成された構文解析木上から一文を読み込んで、この文に前記所定の手続きが含まれているかを判断する手続き判断手段と、
前記手続き判断手段の判断結果に基づいて、前記所定の手続きについては前記定義/参照情報格納手段に格納された前記テーブルから前記所定の手続きが変数の定義であるか、変数の参照であるかに関する情報を読み出し、前記所定の手続き以外の手続きについては前記ソースプログラムの内容から変数が定義されているか、変数が参照されているか、あるいはどちらでもないかに関する情報を抽出処理する定義/参照情報抽出手段と、
前記定義/参照情報格納手段から前記定義/参照情報抽出手段が読み出した情報、或いは前記定義/参照情報抽出手段が抽出した情報に基づいてどの定義がどこで参照されるかを解析する手続きの解析処理を行い、その結果を出力する解析手段と、
を有することを特徴とするプログラムに含まれる手続きの解析装置。 - 前記所定の手続きは、ソースプログラムの内容が存在せず、コンパイルされたあとの実行可能なプログラムとして提供されている場合を含むものである請求項1記載のプログラムに含まれる手続きの解析装置。
- 特定のプログラミング言語で記述された、関数を含む仕様が明らかな所定の手続きについて、前記所定の手続きと前記所定の手続きの中で変数が定義されているか、変数が参照されているかを予め結びつけたテーブルを格納した定義/参照情報格納手段を備えるコンピュータを、
前記特定のプログラミング言語で記述されたソースプログラムを元に生成された構文解析木上から一文を読み込んで、この文に前記所定の手続きが含まれているかを判断する手続き判断手段と、
前記手続き判断手段の判断結果に基づいて、前記所定の手続きについては前記定義/参照情報格納手段に格納された前記テーブルから前記所定の手続きが変数の定義であるか、変数の参照であるかに関する情報を読み出し、前記所定の手続き以外の手続きについては前記ソースプログラムの内容から変数が定義されているか、変数が参照されているか、あるいはどちらでもないかに関する情報を抽出処理する定義/参照情報抽出手段と、
前記定義/参照情報格納手段から前記定義/参照情報抽出手段が読み出した情報、或いは前記定義/参照情報抽出手段が抽出した情報に基づいてどの定義がどこで参照されるかを解析する、プログラムに含まれる手続きの解析処理を行い、その結果を出力する解析手段として、
機能させるためのプログラムを記録したコンピュータ読み取り可能な記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03261298A JP4055197B2 (ja) | 1997-02-17 | 1998-02-16 | プログラムに含まれる手続きの解析装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP3245297 | 1997-02-17 | ||
JP9-32452 | 1997-02-17 | ||
JP03261298A JP4055197B2 (ja) | 1997-02-17 | 1998-02-16 | プログラムに含まれる手続きの解析装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10289102A JPH10289102A (ja) | 1998-10-27 |
JP4055197B2 true JP4055197B2 (ja) | 2008-03-05 |
Family
ID=26371029
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP03261298A Expired - Fee Related JP4055197B2 (ja) | 1997-02-17 | 1998-02-16 | プログラムに含まれる手続きの解析装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4055197B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4092750B2 (ja) * | 1997-09-24 | 2008-05-28 | 新日鉄ソリューションズ株式会社 | 冗長コード検査装置 |
JP3997495B2 (ja) | 1998-02-05 | 2007-10-24 | 新日鉄ソリューションズ株式会社 | ソフトウェア解析装置及びソフトウェア解析方法 |
US7092861B1 (en) * | 2000-11-02 | 2006-08-15 | Koninklijke Philips Electronics N.V. | Visual anti-virus in a network control environment |
JP5459313B2 (ja) * | 2009-05-20 | 2014-04-02 | 日本電気株式会社 | 動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置 |
JP7031627B2 (ja) * | 2019-03-13 | 2022-03-08 | オムロン株式会社 | 解析装置、解析方法、及び解析プログラム |
-
1998
- 1998-02-16 JP JP03261298A patent/JP4055197B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH10289102A (ja) | 1998-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5987250A (en) | Transparent instrumentation for computer program behavior analysis | |
US6961924B2 (en) | Displaying variable usage while debugging | |
KR101247062B1 (ko) | 제한적인 호출 규칙을 갖춘 코드의 검사 방법 | |
US6964036B2 (en) | Descriptive variables while debugging | |
US9274923B2 (en) | System and method for stack crawl testing and caching | |
US6430741B1 (en) | System and method for data coverage analysis of a computer program | |
US7661094B2 (en) | Real-time software diagnostic tracing | |
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 | |
US7552425B2 (en) | Implementing enhanced compiled breakpoint analysis | |
US20050114842A1 (en) | System and method for whole-system program analysis | |
US8161465B2 (en) | Method and apparatus for performing conditional compilation | |
JPH0689200A (ja) | デバッグシステム及び方法 | |
US20080229290A1 (en) | Automatic Formatting of Computer Program Source Code | |
JP2006185211A (ja) | プログラム解析装置、テスト実行装置、その解析方法及びプログラム | |
JP2004164554A (ja) | プログラム実行監視装置および方法 | |
US20030041315A1 (en) | Debugger with automatic detection of control points influencing program behavior | |
US5987248A (en) | Debugging information display device | |
US7086033B2 (en) | Software debugger having a monitor for monitoring conditional statements within a software program | |
JP2018156133A (ja) | コンパイラプログラム、情報処理装置およびコンパイル方法 | |
JP4055197B2 (ja) | プログラムに含まれる手続きの解析装置 | |
US20060101418A1 (en) | Apparatus and method for automatic generation of event profiles in an integrated development environment | |
JPH0766342B2 (ja) | プログラムテスト装置 | |
US20030018957A1 (en) | Debugger monitor with anticipatory highlights | |
JP2000207246A (ja) | デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体 | |
JP2004287869A (ja) | プログラム実行監視装置および方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040913 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070208 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070316 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070515 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070606 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070731 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070828 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071023 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20071102 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20071119 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071202 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101221 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101221 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111221 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111221 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121221 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121221 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131221 Year of fee payment: 6 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |