(57)【要約】  【課題】ソースコードに記述された条件分岐とそのアクションの解析を行ない、条件分岐の条件とアクションとの対応関係の欠落や重複を発見しやすくするためのプログラム解析装置を提供する。  【解決手段】プログラム解析装置は、条件抽出部により、プログラムのソースコードから条件分岐を構成する条件を抽出し、アクション抽出部により、抽出された条件に対応して実行されるアクションを抽出し、相関図生成部により、抽出された条件とアクションとに基づいて、条件とアクションの相関図である条件−アクション相関図を生成する。【選択図】  図１
2007080113.tif 000002
【特許請求の範囲】
【請求項１】
プログラムのソースコードから条件分岐を構成する条件を抽出する条件抽出部と、
前記条件抽出部にて抽出された条件に対応して実行されるアクションを抽出するアクション抽出部と、
前記抽出された条件と抽出されたアクションとに基づいて条件−アクション相関図を生成する相関図生成部と、
を有するプログラム解析装置。
【請求項２】
条件抽出部は、
条件分岐ワードを検索する条件分岐ワード検索手段と、
検索された条件分岐ワードがアクションを定めるアクションワードに直接的にかかっているか判断する かかり判断手段と、
前記かかり判断手段での判断結果が直接的にアクションを定めるアクションワードにかかっていないとの判断結果である場合には、さらに条件分岐ワードを検索させる制御手段と、
前記条件分岐ワード検索手段での検索結果に基づいて条件分岐の階層を示す階層情報を記録する階層情報記録手段と、
を有する請求項１に記載のプログラム解析装置。
【請求項３】
アクション抽出部は、
条件抽出部のかかり判断手段の判断結果がアクションワードに直接的にかかっているとの判断結果である場合には、その条件分岐ワードにて構成される条件と、アクションワードとを関連付けて記録するアクション記録手段を有する請求項２に記載のプログラム解析装置。
【請求項４】
相関図生成部は、
条件抽出部の階層情報記録手段にて記録されている階層情報と、アクション抽出部のアクション記録手段にて記録されているアクションと、に基づいて条件−アクション相関図を階層的に示した相関図である階層的条件−アクション相関図を生成する階層図作成手段を有する請求項３に記載のプログラム解析装置。
【請求項５】
階層図作成手段は、
階層情報に基づいて条件区分された条件マトリックスを作成する条件マトリックス作成器と、
条件マトリックス作成器にて作成された条件マトリックスの領域に、対応するアクションを配置するアクション配置器と、
を有する請求項４に記載のプログラム解析装置。
【請求項６】
相関図生成部は、
前記抽出され条件−アクション相関図に配置されるアクションの同一性または／および類似性を判断する同一類似判断手段を有する請求項１から５のいずれか一に記載のプログラム解析装置。
【請求項７】
プログラムを解析するプログラム解析装置の動作方法であって、
プログラムのソースコードから条件分岐を構成する条件を抽出する条件抽出ステップと、
前記条件抽出ステップにて抽出された条件に対応して実行されるアクションを抽出するアクション抽出ステップと、
前記抽出された条件と抽出されたアクションとに基づいて条件−アクション相関図を生成する相関図生成ステップと、
を含むプログラム解析装置の動作方法。
【請求項８】
プログラムのソースコードから条件分岐式を構成する条件を抽出する条件抽出ステップと、
前記条件抽出ステップにて抽出された条件に対応して実行されるアクションを抽出するアクション抽出ステップと、
前記抽出された条件と抽出されたアクションとに基づいて条件−アクション相関図を生成する相関図生成ステップと、
を計算機に実行させるためのプログラム解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを解析するためのプログラム解析装置、プログラム解析装置の動作方法及びプログラム解析プログラムに関する。特に、条件分岐とその条件分岐によって実行される文（「アクション」という場合がある）との関係を解析するプログラム解析装置などに関する。
【背景技術】
【０００２】
従来、Ｃ言語やＣ＋＋言語などの高級言語でプログラムのソースコードを作成した場合、プログラムの検証を行なうためには、仕様を示すフローチャート、シーケンス図などと、プログラムのソースコードとを目で見て比較することにより行なわれるのが一般的である。
【０００３】
しかしながら、家電製品などでは複数のモード状態を備えており、そのような家電製品などの動作処理を行なうプログラムでは、複数のモードの組み合わせによって処理を行なう必要がある。このため、複数のモードの組み合わせに対応して、条件分岐が入れ子になって複雑になったり、あるいは、条件分岐により実行される文のブロックが長くなったりする。このため、人間がソースコードを目で見ても、条件分岐の条件とアクションとの対応関係の欠落や重複を発見するのは容易ではない。そこで、ソースコードを解析して仕様書を自動生成することが従来から試みられている（例えば、特許文献１参照。）。
【特許文献１】特開２００２−２１５３９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、条件分岐が入れ子になったりしてソースコードが複雑になった場合、生成される仕様書も複雑になってしまい、機械的に生成された仕様書を見ても、やはり、条件分岐の条件とアクションとの対応関係の欠落や重複を発見するのは容易ではない。
【０００５】
そこで、以下では、ソースコードの条件分岐とそのアクションの解析を行ない、条件分岐の条件とアクションとの対応関係の欠落や重複を発見しやすくするためのプログラム解析装置などについて開示を行なう。
【課題を解決するための手段】
【０００６】
以下では、プログラムのソースコードから条件分岐を構成する条件を抽出し、また、抽出された条件に対応して実行されるアクションを抽出し、抽出された条件とアクションとに基づいて、条件とアクションの相関図である条件−アクション相関図を生成するプログラム解析装置、プログラム解析装置の動作方法、プログラム解析プログラムについて開示を行なう。
【０００７】
このようなプログラム解析装置などにより、条件とアクションとの相関を表などによって表示することが可能であるので、条件とアクションとの対応関係が直感的にわかりやすく表示などされ、条件とアクションとの対応関係の欠落や重複などの発見が容易となり、課題が解決される。
【０００８】
なお、条件分岐を構成する条件を抽出する場合には、条件分岐ワードを検索し、検索された条件分岐ワードがアクションを定めるアクションワードに直接的にかかっているかを判断し、直接的にかかっていないとの判断の結果であれば、さらに条件分岐ワードの検索を行なう処理をし、このような処理の結果に基づいて条件分岐の階層を示す情報を記録するようになっていてもよい。
【０００９】
これにより、条件分岐が入れ子になった場合にも適切に処理を行なうことができ、入れ子の数に応じて、２次元の表、３次元の表などとして条件−アクション相関図を生成することができる。
【００１０】
また、検索された条件分岐ワードがアクションワードに直接的にかかっているとの判断がされた場合には、その条件分岐ワードにて構成される条件とアクションワードを関連づけて記録するようになっていてもよい。
【００１１】
これにより、無駄な記録の発生を防ぐことができ、適切な条件−アクション相関図を生成することができる。
【００１２】
また、条件−アクション相関図は階層的に示した相関図であってもよい。
【００１３】
これにより、入れ子の数が４以上となった場合でも、平面上に条件−アクション相関図を表示することができる。
【００１４】
また、条件−アクション相関図は、マトリックスとなっていてもよい。
【００１５】
これにより、直感的に理解しやすい表示を行なうことができる。
【００１６】
また、条件−アクション相関図に配置されるアクションの同一性または／および類似性が判断されるようになっていてもよい。
【００１７】
これにより、同一または類似のアクションを関数などにまとめるための手がかりを得ることができ、ソースコードを短くすることができ、わかりやすいソースコードにすることができる。
【００１８】
なお、本明細書で開示される技術は、Ｃ言語やＣ＋＋言語のソースコードに限定されず、種々のプログラミング言語のソースコードに適用することができることはいうまでもない。
【発明の効果】
【００１９】
本発明によれば、条件とアクションとの相関が図によって表示することが可能であるので、条件とアクションとの対応関係の欠落や重複の発見が容易となり、ソースコードのコンパイル前にバグなどを発見する手がかりとなる。また、同一または類似のアクションを関数などにまとめるための手がかりを得ることができ、ソースコードを短くすることができ、わかりやすいソースコードにすることができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明を実施するための最良の形態について、図を用いて実施形態として説明する。なお、本発明は、これら実施形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施し得る。
【００２１】
（実施形態１）
実施形態１として、プログラムのソースコードから条件分岐を構成する条件を抽出し、また、抽出された条件に対応して実行されるアクションを抽出し、抽出された条件とアクションとに基づいて、条件とアクションの相関図である条件−アクション相関図を生成するプログラム解析装置などについて説明する。
【００２２】
（実施形態１：構成）
図１は、実施形態１に係るプログラム解析装置の機能ブロック図を例示する。プログラム解析装置１００は、条件抽出部１０１と、アクション抽出部１０２と、相関図生成部１０３と、を有する。
【００２３】
「条件抽出部」１０１は、プログラムのソースコードから条件分岐を構成する条件を抽出する。この条件抽出部１０１の行なう処理は、一般には、プログラムのソースコードの構文解析を行ない、構文解析の結果として得られる構文解析木などと呼ばれるデータ構造を参照し、条件分岐を表わす構文解析木などのノードを参照して、その条件分岐を構成する条件を抽出することにより行なわれる。
【００２４】
図２は、構文解析を行なうための構文規則の一例を示す。ここで示されるのは、条件分岐に対応するｉｆ文の構文規則である。大文字からなる文字の並びは構文規則の非終端記号であり、その他の文字からなる文字の並びは、終端記号である。ただし、図２に例示された構文規則の標記においては「：」、「［」、「］」は特別な意味をもつ。すなわち、「：」の右に並ぶ構文要素を、その「：」の左の非終端記号に対応付けることを意味し、「［」と「］」で囲まれる構文要素は、必須ではないことを意味している。図２においては、「ｉｆ（ＥＸＰＲ）  ＳＴＭＴ」あるいは、「ｉｆ（ＥＸＰＲ）  ＳＴＭＴ  ｅｌｓｅ  ＳＴＭＴ」という構文要素をＩＦ＿ＳＴＭＴという非終端記号に対応付けることを意味している。ここに、ＥＸＰＲ、ＳＴＭＴは図２には示されていないが、それぞれ、式、文を示す非終端記号である。
【００２５】
なお、条件分岐は、ｉｆ文に限定されることはない。例えば、Ｃ言語などでは、他にｓｗｉｔｃｈ文がある。また、ｆｏｒ文、ｗｈｉｌｅ文、ｄｏ  ｗｈｉｌｅ文などにおいても条件の成立に応じて、文を実行するべきかどうかが決定されるので、条件分岐に分類することができる。また、Ｃ言語などには、文ではないが式として「?」と「:」を用いて記述される条件分岐もある。
【００２６】
図３は、構文解析の結果の一例を示す。図３（Ａ）は、「ｉｆ（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）  ｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝」を解析すると、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」がＥＸＰＲの非終端記号に対応付けられ、「｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝」がＳＴＭＴに対応付けられて、全体がＩＦ＿ＳＴＭＴに対応付けられることを示す。同様に、図３（Ｂ）は、「ｉｆ（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）  ｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝  ｅｌｓｅ  ｛  ｌｉｇｈｔ  ＝  ｏｆｆ；  ｝」を解析すると、「「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」がＥＸＰＲに対応付けられ、「｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝」がＳＴＭＴに対応付けられ、また、「｛  ｌｉｇｈｔ  ＝  ｏｆｆ；  ｝」がＳＴＭＴに対応付けられて、全体がＩＦ＿ＳＴＭＴに対応付けられる。
【００２７】
図４は、構文解析の結果得られる構文解析木のデータ構造を例示する。図４（Ａ）は、図３（Ａ）に対応しており、ノード４０２が、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」が対応付けられたＥＸＰＲに対応し、ノード４０３が、｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝」が対応付けられたＳＴＭＴに対応し、ノード４０１が、ＩＦ＿ＳＴＭＴに対応する。このようなデータ構造により、ＩＦ＿ＳＴＭＴが対応するｉｆ文の条件であるＥＸＰＲに対応する構文要素、アクションであるＳＴＭＴに対応する構文要素を容易に検索することができる。また、図４（Ｂ）は、図３（Ｂ）に対応しており、ノード４０５が、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」が対応付けられたＥＸＰＲに対応し、ノード４０６が、「｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝」が対応付けられたＳＴＭＴに対応し、ノード４０７が、「｛  ｌｉｇｈｔ  ＝  ｏｆｆ；  ｝」が対応付けられたＳＴＭＴに対応する。また、ノード４０４は、ＩＦ＿ＳＴＭＴに対応する。
【００２８】
したがって、例えば、条件抽出部１０１は、ＩＦ＿ＳＴＭＴが対応するノードを検索し、そのノードから指されるＥＸＰＲが対応するノードの位置―例えば、ノードのアドレス―を取得することにより、条件を抽出する。
【００２９】
「アクション抽出部」１０２は、条件抽出部１０１にて抽出された条件に対応して実行されるアクションを抽出する。例えば、アクション抽出部は、ＩＦ＿ＳＴＭＴが対応するノードを検索し、そのノードから指される第一のＳＴＭＴが対応するノードの位置を取得する。また、第二のＳＴＭＴが対応するノードへのポインタが、ＩＦ＿ＳＴＭＴが対応するノードに含まれていれば、ＥＸＰＲが対応するノードの表わす条件の否定に対応して、第二のＳＴＭＴを抽出する処理を行なうようになっていてもよい。
【００３０】
図５は、条件抽出部１０１とアクション抽出部１０２とによる条件とアクションとの抽出の結果を例示する。例えば、条件に対応するＥＸＰＲが対応するノードのアドレスとして０Ｘ８４５４２０が、また、アクションに対応するＳＴＭＴが対応するノードのアドレスとして０Ｘ８４５４６０が抽出されて、表などを示すデータ構造に格納される。また、第二のＳＴＭＴが対応するノードがあれば、条件の否定を表わすＥＸＰＲが対応するノードを作り、そのノードのアドレスと、第二のＳＴＭＴが対応するノードのアドレスとを表などを示すデータ構造に格納するようになっていてもよい。
【００３１】
図６は、条件抽出部１０１とアクション抽出部１０２とが、それぞれ条件とアクションを抽出するために使用される構文解析プログラムのモジュール構造を示す。構文解析プログラム５０４は、一般には、オペレーティングシステム５０５の上での一プロセスあるいは一タスクとして動作する。オペレーティングシステム５０５は、ハードウェア５０６の機能や資源を抽象化して、プロセスやタスクに利用可能とする。ハードウェア５０６は、ＣＰＵと、メモリと、周辺機器（キーボード、ディスプレイ、ハードディスクなどを含んでいてもよい）と、をバスによって結合して構成される計算機などである。構文解析プログラム５０４は、ｒｅａｄモジュール５０１、レキシカル解析モジュール５０２、構文解析モジュール５０３からなる。
【００３２】
構文解析プログラム５０４は、ハードウェア５０６の機能や資源を利用しながら、これらのモジュールの動作をさせる。具体的には、ｒｅａｄモジュール５０１は、ソースコードを構成する文字情報を読む。ソースコードは、ハードウェア５０６を構成するメモリやハードディスクなどに格納されており、オペレーティングシステム５０５の提供するｒｅａｄシステムコールなどにより、ソースコードを構成する文字情報が読み込まれる。レキシカル解析モジュール５０２は、ソースコードを構成する文字情報の並びを適切に区切りながらトークンの並びに変換する。トークンとは、自然言語での単語に相当するものである。レキシカル解析モジュールは、得られたトークンを、ハードウェア５０６を構成するメモリなどに格納する。構文解析モジュール５０３は、トークンの並びをメモリなどから読み出し、構文規則に基づいて構文解析木などのデータ構造を生成し、ハードウェア５０６を構成するメモリなどの記憶手段に格納する。
【００３３】
したがって、プログラム解析装置１００は、構文解析プログラム５０４により生成された構文解析木などのデータ構造を参照しながら、条件とアクションとを抽出する。したがって、プログラム解析装置１００も、構文解析プログラムのように、オペレーティングシステムの上で動作するプログラムによって構成されているのが好ましい。また、プログラム解析装置１００がプログラムによって構成される場合には、そのようなプログラムを媒体に記録することもできる。このようなプログラムにより、例えば、図５に例示される抽出の結果は、ハードウェア５０６を構成するメモリなどの記憶手段に蓄積されるようにすることもできる。
【００３４】
「相関図生成部」１０３は、条件抽出部１０１で抽出された条件と、アクション抽出部１０２で抽出されたアクションと、に基づいて条件−アクション相関図を生成する。ここに「条件−アクション相関図」とは、条件とアクションとが関連していることを示す図である。
【００３５】
図７は、条件−アクション相関図の一例の構造を示しており、列７０１に条件が格納され、列７０２にアクションが格納される。同じ行に条件とアクションとが表示されることにより、その条件が成立すると、そのアクションが実行されることが表わされる。
【００３６】
図８（Ａ）は、図３（Ｂ）に示されたｉｆ文から生成される条件−アクション相関図の一例を示す。まず、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」と「｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝」とが同じ行に格納される。また、第二のＳＴＭＴに対応する「｛  ｌｉｇｈｔ  ＝  ｏｆｆ；  ｝」は、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」という条件の否定に対応することになるので、「ｔｅｍｐｅｒａｔｕｒｅ＞６０」と「｛  ｌｉｇｈｔ  ＝  ｏｆｆ；  ｝」とが同じ行に格納されて関連付けられる。図８（Ｂ）は、図８（Ａ）とは異なる条件−アクション相関図の一例を示す。図３（Ｂ）に示されたｉｆ文の条件は、「ｔｅｍｐｅｒａｔｕｒｅ」という変数に関する条件であり、その変数は６０という値と比較がされている。そこで、「ｔｅｍｐｅｒａｔｕｒｅ」という変数に対応する座標軸を用意し、その座標軸をソースコードに現れる値である「６０」で区切り、６０以下の部分に「｛  ｌｉｇｈｔ  ＝  ｏｎ；  ｝」を関連付けて表示し、６０を超える部分に「｛  ｌｉｇｈｔ  ＝  ｏｆｆ；  ｝」を表示する。このように座標軸を用いて表示すると、直感的に理解しやすくなる。
【００３７】
（実施形態１：処理の流れ）
図９は、プログラム解析装置の処理の流れを説明するフローチャートを例示する。このフローチャートの処理を実行する前提として、例えば、ソースコードが構文解析プログラムにより構文解析がされ、構文解析木などのデータ構造などが生成されているとしてもよい。ステップＳ９０１として、条件分岐を構成する条件を抽出する。この処理は、条件抽出部１０１により行なわれる。ステップＳ９０２として、抽出された条件に対応して実行されるアクションを抽出する。この処理は、アクション抽出部１０２により実行される。なお、ｅｌｓｅ以下の部分を有するｉｆ文のように、ＩＦ＿ＳＴＭＴが対応するノードに、第二のＳＴＭＴが対応するノードへのポインタが存在する場合には、その第二のＳＴＭＴが対応するノードからアクションを抽出するとともに、ステップＳ９０１で抽出された条件の否定を抽出するようになっていてもよい。ステップＳ９０３では、全ての条件分岐についてステップＳ９０１とステップＳ９０２との処理を行なったかどうかを判断し、ステップＳ９０１とステップＳ９０２との処理をまだ行なっていない条件分岐があれば、ステップＳ９０１へ処理を戻して、処理をまだ行なっていない条件分岐について処理を行なう。全ての条件分岐について処理を行なった場合には、ステップＳ９０４へ処理を移行して、条件−アクション相関図を生成する。この処理は、相関図生成部１０３により行なわれる。
【００３８】
なお、本実施形態に係るプログラム解析装置などによる処理の対象となる条件分岐とそうでない条件分岐とを区別するために、ソースコードに、処理の対象となる条件分岐に特別な形式のコメントなどを付しておいてもよい。また、処理の対象となる条件分岐の条件に含まれる変数や関数などの名前、変数や関数などと比較される値のデータ型などが指定されるようになっており、指定された名前の変数などや指定されたデータ型の値を含む条件に関する条件分岐に対してのみ、本実施形態に係るプログラム解析装置などが処理を行なうようになっていてもよい。
【００３９】
（実施形態１：主な効果）
本実施形態では、条件とアクションとの相関を図によって表示することが可能になるので、条件とアクションとの対応関係の欠落や重複の発見が容易となる。
【００４０】
（実施形態２）
実施形態２として、条件分岐を構成する条件を抽出する場合には、条件分岐ワードを検索し、検索された条件分岐ワードがアクションを定めるアクションワードに直接的にかかっているかを判断し、直接的にかかっていないとの判断の結果であれば、さらに条件分岐ワードの検索を行なう処理をし、このような処理の結果に基づいて条件分岐の階層を示す情報を記録するプログラム解析装置などについて説明する。
【００４１】
（実施形態２：構成）
図１０は、実施形態２に係るプログラム解析装置の機能ブロック図を例示する。プログラム解析装置１０００は、実施形態１のように、条件抽出部１０１と、アクション抽出部１０２と、相関図生成部１０３と、を有する。本実施形態では、条件抽出部１０１が、条件分岐ワード検索手段１００１と、かかり判断手段１００２と、制御手段１００３と、階層情報記録手段１００４と、を有するようになっている。
【００４２】
「条件分岐ワード検索手段」１００１は、条件分岐ワードを検索する。「条件分岐ワード」とは、条件分岐を示す文字列またはその相当物である。相当物の例としては、図４（Ａ）のように構文解析が行なわれた場合には、ｉｆ文のＩＦ＿ＳＴＭＴが対応するノード４０１を挙げることができる。
【００４３】
「かかり判断手段」１００２は、検索された条件分岐ワードがアクションワードに直接的にかかっているか判断する。「アクションワード」とは、アクションを定める文字列またはその相当物である。ここでいう相当物の例としては、図４（Ａ）のように構文解析が行なわれた場合には、ＳＴＭＴが対応するノード４０３を挙げることができる。例えば、条件分岐ワード検索手段１００１がノード４０１を検索し、アクションワードがノード４０３であれば、ノード４０１とノード４０３との間には他のＩＦ＿ＳＴＭＴが対応するノードが存在しないので、かかり判断手段１００２は、「直接的にかかっている」と判断する。あるいは、端的に、ノード４０１が直接ノード４０３を指しているので、「直接的にかかっている」と判断してもよい。また、後に説明する図１２（Ｂ）のようにノード１２０１とノード１２０６とでは、ノード１２０１とノード１２０６との間には、ＩＦ＿ＳＴＭＴが対応するノード１２０４が存在するので、「直接的にかかっていない」と判断する。
【００４４】
「制御手段」１００３は、かかり判断手段１００２での判断結果が直接的にアクションを定めるアクションワードにかかっていないとの判断結果である場合には、更に条件分岐ワードを検索させる。例えば、ノード１２０１とノード１２０６との間に存在するＩＦ＿ＳＴＭＴが対応するノード１２０４の検索を条件分岐ワード検索手段１００１などに対して実行させる。
【００４５】
「階層情報記録手段」１００４は、条件分岐ワード検索手段１００１での検索結果に基づいて階層情報を記録する。「階層情報」とは、条件分岐の階層を示す情報であり、具体的な例を挙げると、あるｉｆ文（ａ）のアクションの中に別のｉｆ文（ｂ）が現れる場合、ｉｆ文（ａ）がｉｆ文（ｂ）の上位に存在することを示す情報が階層情報である。階層情報の記録は、ハードウェア５０６を構成するメモリなどの記憶手段に対して行なわれるのが好ましい。
【００４６】
（実施形態２：処理の流れ）
図１１は、本実施形態に係るプログラム解析装置の処理の流れを説明するためのフローチャートの一例である。このフローチャートは、図９のステップＳ９０１とステップＳ９０２との実行に代えて実行される処理の流れを例示する。まず、ステップＳ１１０１において、条件分岐ワードを検索する。この検索は、条件分岐ワード検索手段１００１により行なわれる。次に、アクションを抽出することが行なわれる。この処理は、アクション抽出部１０２により行なわれる。ステップＳ１１０３においては、ステップＳ１１０１で検索された条件分岐ワードが、ステップＳ１１０２で抽出されたアクションワードに直接かかっていないかどうかが判断される。例えば、ＩＦ＿ＳＴＭＴが対応するノードと、ＳＴＭＴが対応するノードとの間に他のＩＦ＿ＳＴＭＴが対応するノードの存在の有無が判断される。もし、「直接かかっていない」と判断された場合には、ステップＳ１１０４へ処理を移行させ、条件分岐ワードを検索することが制御手段１００３により行なわれ、その後、ステップＳ１１０３の判断が行なわれる。なお、ステップＳ１１０４で検索された条件分岐ワードの位置がステップＳ１１０５の処理まで一時的に記憶されるようになっていてもよい。また、ステップＳ１１０３において「直接かかっている」と判断された場合には、ステップＳ１１０５へ処理を移行させ、階層情報を記録する。この記録は、階層情報記録手段１００４により行なわれる。例えば、Ｓ１１０４で検索された条件分岐ワードの位置を参照して記録が行なわれる。
【００４７】
（実施形態２：具体的な例）
図１２（Ａ）は、ｉｆ文という条件分岐が入れ子になっている例を示す。この例では、「ｉｆ（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）」という条件分岐ワードと「ｉｆ（ｓｔａｔｅ＝＝ｃｏｏｋ）」という条件分岐ワードとが現れており、後者が前者の入れ子となって現れる。図１２（Ｂ）は、図１２（Ａ）に対応する構文解析木を例示する。ノード１２０１は、図１２（Ａ）に例示されたｉｆ文全体に対応しており、ノード１２０２は、「ｉｆ（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）」という条件分岐ワードの「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」という条件に対応している。ノード１２０３とノード１２０４は、「ｉｆ（ｓｔａｔｅ＝＝ｃｏｏｋ）」という条件分岐ワードのｉｆ文に対応する。ノード１２０５は、「ｓｔａｔｅ＝＝ｃｏｏｋ」という条件に対応し、ノード１２０６は、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」というアクションに対応している。ノード１２０７は、ノード１２０３のｉｆ文に続く文に対応する。
【００４８】
この場合、例えば、ステップＳ１１０１で、ノード１２０１が条件分岐ワードとして検索され、ステップＳ１１０２でノード１２０６がアクションとして抽出されたとする。この場合、ノード１２０１はノード１２０６に直接かかっていないので、ステップＳ１１０４において、ノード１２０４が検索される。ノード１２０４とノード１２０６との間にはＩＦ＿ＳＴＭＴが対応するノードが存在しないので、直接かかっていると判断され、ノード１２０４の位置などが一時的に記憶され、ステップＳ１１０５で階層情報が記録される。
【００４９】
図１３は、階層情報が記録された様子を示す。まず、最も左の列に１が格納されている行に、「ｉｆ（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）」から抽出された条件「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」が格納され、また、抽出されたアクションである「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」が右の列に格納される。「ｉｆ（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）」は、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」に直接かかっていないので、「ｉｆ（ｓｔａｔｅ＝＝ｃｏｏｋ）」が検索される。これから抽出される条件「ｓｔａｔｅ＝＝ｃｏｏｋ」が、図１３において最も左の列に２が格納されている行に格納され、アクション「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」も格納される。また、最も左の列の「２」という値が、「ｉｆ（ｓｔａｔｅ＝＝ｃｏｏｋ）」という条件分岐ワードの位置などとして一時的に記憶される。これにより、階層情報の記録がされるとき、最も左の列に１が格納されている行の一番右の列に２が記録されるようにできる。すなわち、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」という条件が抽出される条件分岐ワードは、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」というアクションに直接かかっておらず、２が格納された行に格納されている条件が抽出される条件分岐ワードがそのアクションに直接かかっていることが示される。
【００５０】
（実施形態２：主な効果）
本実施形態においては、条件分岐ワードがアクションに直接かかっていない場合には、条件分岐ワードがさらに検索され、アクションに直接かかっているものが検索され、階層情報が記録されるので、条件分岐が入れ子になった場合であっても、処理を行なうことができる。
【００５１】
（実施形態３）
実施形態３として、検索された条件分岐ワードがアクションワードに直接的にかかっているとの判断がされた場合には、その条件分岐ワードにて構成される条件とアクションワードを関連づけて記録するプログラム解析装置などについて説明する。
【００５２】
（実施形態３：構成）
図１４は、実施形態３に係るプログラム解析装置の機能ブロック図を例示する。プログラム解析装置１４００は、実施形態２のプログラム解析装置のように、条件抽出部１０１と、アクション抽出部１０２と、相関図生成部１０３と、を有し、条件抽出部１０１は、条件分岐ワード検索手段１００１と、かかり判断手段１００２と、制御手段１００３と、階層情報記録手段１００４と、有する。本実施形態では、アクション抽出部１０２がさらにアクション記録手段１４０１を有する構成となっている。
【００５３】
「アクション記録手段」１４０１は、条件抽出部１０１の かかり判断手段１００２の判断結果が、アクションワードに直接的にかかっているとの判断結果である場合には、その条件分岐ワードにて構成される条件と、アクションワードとを関連付けて記録する。
【００５４】
例えば、図１２（Ａ）のソースコードにおいては、「ｉｆ  （ｓｔａｔｅ＝＝ｃｏｏｋ）」というアクションワードが「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」というアクションに直接的にかかっていると、かかり判断手段１００２により判断されるので、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」は、「ｓｔａｔｅ  ＝＝  ｃｏｏｋ」という条件と関連付けられることになる。また、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」は、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」という条件と関連付けられないようになっていてもよい。「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」を含む条件分岐ワードは、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」のアクションに直接かかっていないからである。
【００５５】
図１５は、このような関連付けとして得られる階層情報を記録する表を例示する。図１５の表は、図１３の表に対応している。本実施形態では、アクション記録手段１４０１により、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」というアクションが、「ｓｔａｔｅ  ＝＝  ｃｏｏｋ」という条件と関連付けられ、図１３のように、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）」と関連付けられることがなくなる。
【００５６】
（実施形態３：主な効果）
本実施形態では、条件分岐ワードがアクションワードに直接的にかかっているとの判断がされた場合に、その条件分岐ワードにて構成される条件とアクションワードを関連づけて記録されるので、同じアクションが複数回記録されることがなくなり、メモリの有効利用などを図ることができる。
【００５７】
（実施形態４）
実施形態４として、条件−アクション相関図が階層的に示した相関図であるようなプログラム解析装置などについて説明する。
【００５８】
（実施形態４：構成）
図１６は、実施形態４に係るプログラム解析装置の機能ブロック図を例示する。プログラム解析装置１６００は、実施形態３に係るプログラム解析装置のように、条件抽出部１０１と、アクション抽出部１０２と、相関図生成部１０３と、を有し、条件抽出部１０１は、条件分岐ワード検索手段１００１と、かかり判断手段１００２と、制御手段１００３と、階層情報記録手段１００４と、を有し、アクション抽出部１０２は、アクション記録手段１４０１を有している。本実施形態では、相関図生成部１０３が階層図作成手段１６０１を有する。
【００５９】
「階層図作成手段」１６０１は、条件抽出部１０１の階層情報記録手段１００４にて記録されている階層情報と、アクション抽出部１０２のアクション記録手段１４０１にて記録されているアクションと、に基づいて、階層的条件−アクション相関図を生成する。階層的条件−アクション相関図とは、条件−アクション相関図を階層的に示した相関図である。「階層的に示す」とは、上下（又は、左右など）に層をなすように示すことをいう。例えば、条件分岐が入れ子になっている場合には、外側の条件分岐の条件を上の層になるようにし、内側の条件分岐の条件を下の層になるようにすることをいう。
【００６０】
図１７は、入れ子になった条件分岐の例を示す。この例では、「ｉｆ  （ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）」の条件分岐ワードの条件分岐の内側に、「ｉｆ  （ｓｔａｔｅ＝＝ｃｏｏｋ）」と「ｉｆ  （ｓｔａｔｅ＝＝ｏｖｅｎ）」という検索分岐ワードの条件分岐が記述されている。このような入れ子になった条件分岐から生成される階層的条件−アクション相関図においては、外側の条件分岐の条件「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」を上の層に示し、内側の条件分岐の条件「ｓｔａｔｅ＝＝ｃｏｏｋ」と「ｓｔａｔｅ＝＝ｏｖｅｎ」をその下の層に示す。
【００６１】
図１８は、階層的条件−アクション相関図の例を示す。「上の層」を左に位置する層であるとすると、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」という条件が、「ｓｔａｔｅ＝＝ｃｏｏｋ」と「ｓｔａｔｅ＝＝ｏｖｅｎ」の層よりも上の層に表示されていることになる。このような階層的条件−アクション相関図により、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」が成り立つと、さらに「ｓｔａｔｅ＝＝ｃｏｏｋ」、「ｓｔａｔｅ＝＝ｏｖｅｎ」が成り立つかどうかの判断がされ、その判断の結果に応じて、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」や「｛  ｔｒａｙ  ＝  ｌｅｆｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」が実行されることが容易に理解できるようになる。
【００６２】
（実施形態４：主な効果）
本実施形態では、外側の条件分岐の条件を例えば上の層に表示し、内側の条件分岐の条件を例えば下の層に表示するので、条件分岐が何重にも入れ子になっていても、平面上に条件−アクション相関図を表示することが可能となる。
【００６３】
（実施形態５）
実施形態５として、条件−アクション相関図がマトリックスになっているようなプログラム解析装置などについて説明する。
【００６４】
（実施形態５：構成）
図１９は、実施形態５に係るプログラム解析装置の機能ブロック図を例示する。プログラム解析装置１９００は、実施形態４のように、条件抽出部１０１と、アクション抽出部１０２と、相関図生成部１０３と、を有し、条件抽出部１０１は、条件分岐ワード検索手段１００１と、かかり判断手段１００２と、制御手段１００３と、階層情報記録手段１００４と、を有し、アクション抽出部１０２は、アクション記録手段１４０１を有している。また、相関図生成部１０３が階層図作成手段１６０１を有する。本実施形態では、階層図作成手段１６０１が、条件マトリックス作成器１９０１と、アクション配置器１９０２とを有する。
【００６５】
「条件マトリックス作成器」１９０１は、階層情報に基づいて、条件区分された条件マトリックスを作成する。「条件マトリックス」とは、平面上に展開された行列、あるいは、座標軸により規定される空間内の立体、などを意味する。「条件区分」とは、条件によって、行列の行あるいは列が区分され、あるいは、条件によって、座標軸が領域に区分されることを意味する。
【００６６】
例えば、図１７に例示された入れ子になった条件分岐の例では、変数ｔｅｍｐｅｒａｔｕｒｅに関する条件と変数ｓｔａｔｅに関する条件とがあるので、変数ｔｅｍｐｅｒａｔｕｒｅに対応する座標軸と、変数ｓｔａｔｅに対応する座標軸と、が設定され、その座標軸が条件区分される。すなわち、変数ｔｅｍｐｅｒａｔｕｒｅに対応する座標軸は、変数ｔｅｍｐｅｒａｔｕｒｅの値が比較される６０により区分され、６０以下の領域と６０を越える領域とに区分される。また、変数ｓｔａｔｅに対応する座標軸は、変数ｓｔａｔｅの値が比較されるｃｏｏｋとｏｖｅｎとにより区分され、ｃｏｏｋに対応する領域とｏｖｅｎに対応する領域に区分される。
【００６７】
なお、ｃｏｏｋとｏｖｅｎとは、例えば、同じ列挙型（ｅｎｕｍｅｒａｔｉｏｎ  ｔｙｐｅ）に属する値であってもよい。列挙型の定義がソースコードに記述されていれば、プログラム解析装置などが、その列挙型の定義を読み込んだときに、座標軸を列挙型に属する値に応じて区分しておくことができる。また、列挙型の定義が構文解析によって解析された結果をプログラム解析装置などが入力として読み込むようになっていてもよい。
【００６８】
「アクション配置器」１９０２は、条件マトリックス作成器１９０１にて作成された条件マトリックスの領域に、対応するアクションを配置する。「条件マトリックスの領域」とは、行列の要素、あるいは、条件区分により区分された座標軸の各区分により指定される領域をいう。例えば、図１７に例示された条件分岐では、図１８に示されるように、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」という条件と「ｓｔａｔｅ＝＝ｃｏｏｋ」という条件とに「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」というアクションが対応しているので、変数ｔｅｍｐｅｒａｔｕｒｅに対応する座標軸の６０以下の区分と変数ｓｔａｔｅに対応する座標軸のｃｏｏｋに対応する区分とで示される領域に「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」が配置される。
【００６９】
図２０は、アクション配置器１９０２によるアクションの配置を説明する図である。入れ子になっている条件分岐ワードの条件が座標位置を表わしていると扱い、図１７の条件分岐の場合には、「（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０，ｓｔａｔｅ＝＝ｃｏｏｋ）」という座標位置に、「｛  ｔｒａｙ  ＝  ｒｉｇｈｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」というアクションを配置し、「（ｔｅｍｐｅｒａｔｕｒｅ＜＝６０，ｓｔａｔｅ＝＝ｏｖｅｎ）」という座標位置に、「｛  ｔｒａｙ  ＝  ｌｅｆｔ；  ｆａｎ  ＝  ｓｔｏｐ；  ｝」というアクションを配置することが表わされる。
【００７０】
図２１は、条件マトリックスを例示する。変数ｔｅｍｐｅｒａｔｕｒｅに対応する座標軸２１０１と変数ｓｔａｔｅに対応する座標軸とが交わって二次元の平面が形成され、座標軸２１０１の「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」の区分と「ｓｔａｔｅ＝＝ｃｏｏｋ」の区分とで指定される領域と、「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」の区分と「ｓｔａｔｅ＝＝ｏｖｅｎ」の区分とで指定される領域と、にそれぞれ、アクションが配置されることになる。
【００７１】
（実施形態５：処理の流れ）
図２２は、本実施形態における相関図生成部１０３での処理の流れを説明するフローチャートを例示している。このフローチャートは、図９のステップＳ９０４をより詳細に説明するものと考えることができる。ステップＳ２２０１において、条件マトリックスを生成する。この処理は、条件マトリックス作成器１９０１により行なわれ、例えば、条件分岐がどれだけの数だけ入れ子になっているかを検出し、また、それぞれの入れ子になっている条件の変数を抽出することにより、マトリックスの次元が決まり、変数の値が比較される値に応じて、マトリックスの領域が決まる。ステップＳ２２０２において、アクションの配置が行なわれる。この処理は、アクション配置器１９０２により行なわれる。
【００７２】
図２３、図２４、図２５は、解析の対象となる条件分岐の例と、作成される条件マトリックスの例を示す。図２３は、３重に入れ子になった条件分岐の例を示している。すなわち、外側の条件分岐は、変数ｔｅｍｐｅｒａｔｕｒｅに関する条件を有し、その内側の条件分岐は、変数ｓｔａｔｅに関する条件を有しており、さらにその内側の条件分岐は、変数ｍｏｄｅに関する条件を有している。
【００７３】
図２４は、階層的条件−アクション相関図を示しており、上の層として、変数ｔｅｍｐｅｒａｔｕｒｅに関する条件が、順に「ｉｆ  （ｔｅｍｐｅｒａｔｕｒｅ＜＝６０）」、「ｅｌｓｅ  ｉｆ  （ｔｅｍｐｅｒａｔｕｒｅ＜＝８０）」、「ｅｌｓｅ」として示されている。ここに、「ｅｌｓｅ  ｉｆ  （ｔｅｍｐｅｒａｔｕｒｅ＜＝８０）」とは、先に示された「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」が成立せず、かつ、「ｔｅｍｐｅｒａｔｕｒｅ＜＝８０」が成立することを意味し、具体的には、「６０＜ｔｅｍｐｅｒａｔｕｒｅ＜＝８０」を表わす。また、「ｅｌｓｅ」とは、先に示された「ｔｅｍｐｅｒａｔｕｒｅ＜＝６０」も「ｔｅｍｐｅｒａｔｕｒｅ＜＝８０」も成立しなかった場合を意味し、具体的には、「８０＜ｔｅｍｐｅｒａｔｕｒｅ」を意味する。このように変数が整数値のように大小が定義される値と比較される場合には、「ｅｌｓｅ  ｉｆ」や「ｅｌｓｅ」などのプログラミング言語の表現を用いると簡潔にわかりやすく表現することが可能である。
【００７４】
変数ｔｅｍｐｅｒａｔｕｒｅに関する条件の下の層には、変数ｓｔａｔｅに関する条件が「ｓｔａｔｅ＝＝ｃｏｏｋ」、「ｓｔａｔｅ＝＝ｓｅｔ」として示されており、さらにその下の層に、変数ｍｏｄｅに関する条件が「ｍｏｄｅ＝＝ｏｖｅｎ」、「ｍｏｄｅ＝＝ｍｉｃｒｏｗａｖｅ」として示されている。
【００７５】
図２５は、条件マトリックスの例を示す。図２５では、変数ｔｅｍｐｅｒａｔｕｒｅに対応する座標軸と、変数ｓｔａｔｅに対応する座標軸と、変数ｍｏｄｅに対応する座標軸と、により３次元の空間が形成され、この空間の物体の領域にアクションが配置される。このように空間が形成される場合には、空間内の物体を自由に回転させ、マウスなどで領域を指定できるようにすることにより、その領域に配置されたアクションをポップアップなどとして表示することもできる。これにより、アクションが記述されていない領域があるかどうかなどを直感的に把握することができる。
【００７６】
（実施形態５：主な効果）
本実施形態では、空間内の物体内の領域に関連づけてアクションを表示することが可能であるので、直感的に理解しやすい表示が可能となる。
【００７７】
（実施形態６）
実施形態６として、条件−アクション相関図に配置されるアクションの同一性または／および類似性を判断するプログラム解析装置などについて説明する。
【００７８】
（実施形態６：構成）
図２６は、実施形態６に係るプログラム解析装置の機能ブロック図を例示する。プログラム解析装置は、実施形態１から５のいずれかのように、条件抽出部１０１と、アクション抽出部１０２と、相関図生成部１０３と、を有する。本実施形態では、相関図生成部１０３が同一類似判断手段２６０１を有する。
【００７９】
「同一類似判断手段」２６０１は、抽出され、条件−アクション相関図に配置されるアクションの同一性または／および類似性を判断する。すなわち、条件−アクション相関図に配置された二つあるいはそれ以上のアクションを比較して、同一かどうか、または、類似しているかどうか、あるいはその両方を判断する。
【００８０】
アクションの同一性または／および類似性の判断の方法として、種々のものがあり、特に限定はしないが、その方法の例を挙げると次のようになる。すなわち、アクションの記述を比較する方法がある。例えば、アクションを記述するソースコードを文字列として比較し、文字列として同一であるか、あるいは、類似しているかどうかを判断する。また、アクションを記述するソースコードの構文を解析して、構文解析木などのデータ構造を比較するようになっていてもよい。また、アクションによる副作用―すなわちアクションを実行することによる動作の結果―を、シミュレーションなどを行なって、結果を得て、比較してもよい。例えば、アクションの中で参照される変数や関数呼び出しを決定して変数の値と関数呼び出しで返される値とを乱数などを生成して決定し、アクションを記述するソースコードを解釈実行し、実行前後の変数の値などの変化を求め、これをアクション間で比較する。また、これらの方法を組み合わせることにより、アクションの同一性や類似性を判断してもよい。
【００８１】
また、アクションが同一であったり、類似している場合には、その旨の表示を行なうようになっていてもよい。これにより、同一であれば、アクションを関数にまとめ、類似であれば、アクションをパラメータを有する関数にまとめ、ソースコードを短くすることができる。
【００８２】
（実施形態６：主な効果）
本実施形態により、同一または類似のアクションを関数などにまとめるための手がかりを得ることができ、ソースコードを短くすることができ、わかりやすいソースコードにすることができる。
【図面の簡単な説明】
【００８３】
【図１】実施形態１に係るプログラム解析装置の機能ブロック図
【図２】構文解析を行なうための構文規則の一例図
【図３】構文解析の結果の一例図
【図４】構文解析の結果得られる構文解析木のデータ構造の一例図
【図５】条件抽出部１０１とアクション抽出部１０２とによる条件とアクションとの抽出の結果の一例図
【図６】構文解析プログラムのモジュール構造図
【図７】条件−アクション相関図の構造の一例図
【図８】条件−アクション相関図の一例図
【図９】プログラム解析装置の処理の流れを説明するフローチャート
【図１０】実施形態２に係るプログラム解析装置の機能ブロック図
【図１１】プログラム解析装置の処理の流れを説明するためのフローチャート
【図１２】入れ子になった条件分岐とその構文解析木の一例図
【図１３】記録された階層情報の一例図
【図１４】実施形態３に係るプログラム解析装置の機能ブロック図
【図１５】階層情報を記録する表の一例図
【図１６】実施形態４に係るプログラム解析装置の機能ブロック図
【図１７】入れ子になった条件分岐の一例図
【図１８】階層的条件−アクション相関図の一例図
【図１９】実施形態５に係るプログラム解析装置の機能ブロック図
【図２０】アクション配置器によるアクションの配置を説明するための図
【図２１】条件マトリックスの一例図
【図２２】相関図生成部での処理の流れを説明するフローチャート
【図２３】解析の対象となる条件分岐の一例図
【図２４】階層的条件−アクション相関図の一例図
【図２５】条件マトリックスの一例図
【図２６】実施形態６に係るプログラム解析装置の機能ブロック図
【符号の説明】
【００８４】
１００  プログラム解析装置
１０１  条件抽出部
１０２  アクション抽出部
１０３  相関図生成部
【図１】
2007080113.tif 000003
【図２】
2007080113.tif 000004
【図３】
2007080113.tif 000005
【図４】
2007080113.tif 000006
【図５】
2007080113.tif 000007
【図６】
2007080113.tif 000008
【図７】
2007080113.tif 000009
【図８】
2007080113.tif 000010
【図９】
2007080113.tif 000011
【図１０】
2007080113.tif 000012
【図１１】
2007080113.tif 000013
【図１２】
2007080113.tif 000014
【図１３】
2007080113.tif 000015
【図１４】
2007080113.tif 000016
【図１５】
2007080113.tif 000017
【図１６】
2007080113.tif 000018
【図１７】
2007080113.tif 000019
【図１８】
2007080113.tif 000020
【図１９】
2007080113.tif 000021
【図２０】
2007080113.tif 000022
【図２１】
2007080113.tif 000023
【図２２】
2007080113.tif 000024
【図２３】
2007080113.tif 000025
【図２４】
2007080113.tif 000026
【図２５】
2007080113.tif 000027
【図２６】
2007080113.tif 000028