以下に図面を参照して、実施形態について説明する。図1は、解析装置の概要を説明する図である。
本実施形態では、解析システム100は、解析装置200と、端末装置300とを含む。解析システム100において、解析装置200と端末装置300とは、ネットワーク等を介して接続される。
本実施形態の解析装置200は、解析処理部230と、出力部240とを有する。解析装置200は、例えば、端末装置300から、分析対象のプログラムのソースコード211と解析要求との入力を受け付けると、解析処理部230によってソースコード211を解析し、解析結果情報218を生成する。ソースコード211は、分析対象のプログラムに含まれる複数のプログラム部品の呼び出し関係を示す情報である。
本実施形態では、分析対象のプログラムとは、複数のプログラムを含むプログラム群である。したがって、ソースコード211は、複数のプログラムのソースコードが含まれる。
以下の説明では、分析対象のプログラムに含まれる複数のプログラムの各プログラムを、プログラム部品と呼ぶ場合がある。
本実施形態の解析処理部230は、ソースコード211が入力されると、予め決められたタイプ定義情報を参照して各プログラム部品の処理内容のタイプ(種類)を判定し、各プログラム部品に対し、タイプに応じた優先度を付与する。そして、解析処理部230は、各プログラム部品を識別する情報と、タイプと、優先度とを対応付けた情報である解析結果情報218を生成する。タイプ定義情報の詳細は後述する。
また、解析処理部230は、ソースコード211に基づき生成されたコールグラフに、解析結果情報218の一部を追加したコールグラフを生成する。以下の説明では、解析処理部230において、解析結果情報218の一部が追加されたコールグラフを、情報追加コールグラフ216と呼ぶ場合がある。
本実施形態の出力部240は、解析処理部230が生成した解析結果情報218と情報追加コールグラフ216とを端末装置300へ出力し、端末装置300に表示させる。このとき、解析結果情報218は、各プログラム部品を優先度が高い順にソートした状態で表示される。
本実施形態では、このように、分析対象のプログラムに含まれる各プログラム部品を、処理内容のタイプに応じて付与された優先度が高い順に一覧表示させる。
したがって、本実施形態によれば、プログラムを解読する順番を決める際の判断を支援できる。
また、本実施形態では、解析結果情報218の一部が追加された情報追加コールグラフ216を、解析結果情報218と共に端末装置300に表示させても良い。本実施形態では、解析結果情報218と情報追加コールグラフ216とを共に表示させることで、各プログラム部品の処理内容と呼び出し関係を提示することができる。
尚、図1の例では、情報追加コールグラフ216と解析結果情報218の出力先を端末装置300としたが、これに限定されない。情報追加コールグラフ216と解析結果情報218は、解析装置200のディスプレイ等に表示されても良い。
また、図1の例では、ソースコード211が端末装置300から入力されるものとしたが、これに限定されない。ソースコード211は、例えば、記録媒体等に格納されており、解析装置200によって記録媒体等から読み出されても良い。また、ソースコード211は、例えば、インターネット等を介して解析装置200が取得しても良い。
以下に、本実施形態の解析装置200のハードウェア構成について説明する。図2は、解析装置のハードウェア構成の一例を示す図である。
本実施形態の解析装置200は、それぞれバスBで相互に接続されている入力装置21、出力装置22、ドライブ装置23、補助記憶装置24、メモリ装置25、演算処理装置26及びインターフェース装置27を含むコンピュータである。
入力装置21は、各種の情報の入力を行うための装置であり、例えばキーボードやポインティングデバイス等により実現される。出力装置22は、各種の情報の出力を行うためものであり、例えばディスプレイ等により実現される。インターフェース装置27は、LANカード等を含み、ネットワークに接続する為に用いられる。
解析処理部230を実現させる解析プログラムは、解析装置200を制御する各種プログラムの少なくとも一部である。解析プログラムは、例えば記憶媒体28の配布やネットワークからのダウンロード等によって提供される。解析プログラムを記録した記憶媒体28は、CD−ROM、フレキシブルディスク、光磁気ディスク等の様に情報を光学的、電気的或いは磁気的に記録する記憶媒体、ROM、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記憶媒体を用いることができる。
また、解析プログラムは、解析プログラムを記録した記憶媒体28がドライブ装置23にセットされると、記憶媒体28からドライブ装置23を介して補助記憶装置24にインストールされる。ネットワークからダウンロードされた通信制御プログラムは、インターフェース装置27を介して補助記憶装置24にインストールされる。
補助記憶装置24は、解析装置200の有する各記憶部等を実現するものであり、解析装置200にインストールされた解析プログラムを格納すると共に、解析装置200による各種の必要なファイル、データ等を格納する。メモリ装置25は、解析装置200の起動時に補助記憶装置24から解析プログラムを読み出して格納する。そして、演算処理装置26はメモリ装置25に格納された解析プログラムに従って、後述するような各種処理を実現している。
次に、図3を参照して、本実施形態の解析装置200の機能について説明する。図3は、解析装置の機能を説明する図である。
本実施形態の解析装置200は、記憶部210、コールグラフ生成部220、解析処理部230、出力部240を有する。
記憶部210は、例えば、補助記憶装置24、メモリ装置25等によって実現される。本実施形態のコールグラフ生成部220、解析処理部230、出力部240は、演算処理装置26が補助記憶装置24、メモリ装置25等に記憶された解析プログラムを読み出して実行することで実現される。
本実施形態の記憶部210は、記憶領域210aと記憶領域210bとを含む。記憶領域210aは、解析装置200に入力された情報が格納される。記憶領域210bは、コールグラフ生成部220と解析処理部230の処理によって生成された情報が格納される。
本実施形態の記憶領域210aは、ソースコード211、タイプ定義情報212が格納される。
ソースコード211は、例えば、端末装置300から入力される情報であり、分析対象のプログラムのソースコードである。
タイプ定義情報212は、解析処理部230に参照される情報であり、分析対象のプログラムに含まれる各プログラム部品の処理内容のタイプが定義された情報である。タイプ定義情報212の詳細は、後述する。
記憶領域210bは、コールグラフ213、属性情報214、タイプ判定結果情報215、情報追加コールグラフ216、優先度情報217、解析結果情報218が格納される。
コールグラフ213は、コールグラフ生成部220によって、ソースコード211から生成される。
属性情報214は、プログラム部品毎の属性を示す情報である。より具体的には、属性情報214は、各プログラム部品をタイプ定義情報212に定義された方法によって分析した結果を示す情報である。
タイプ判定結果情報215は、プログラム部品毎のタイプを示す情報である。より具体的には、タイプ判定結果情報215は、属性情報214とタイプ定義情報212とに基づき判定された各プログラム部品のタイプを示す情報である。
情報追加コールグラフ216は、コールグラフ213に属性情報214の一部と、タイプ判定結果情報215とを追加したコールグラフである。
優先度情報217は、各プログラム部品のタイプとタイプ定義情報212とに基づき、各プログラム部品に付与された優先度を示す情報である。解析結果情報218は、属性情報214、タイプ判定結果情報215、優先度情報217を、各プログラム部品の識別情報と対応付けた情報である。
コールグラフ生成部220は、構文解析部221、コール関係収集部222、コールグラフ描画部223を有し、ソースコード211を解析してコールグラフ213を生成する。
構文解析部221は、ソースコード211の構文を解析し、各プログラム部品を識別する。コール関係収集部222は、構文解析結果を用いて、コール関係(呼び出し関係)を収集する。コールグラフ描画部223は、収集したコール関係に基づき、コールグラフ213を生成する。言い換えれば、コールグラフ描画部223は、コール関係に基づき、コールグラフ213を描画するためのデータを生成する。
解析処理部230は、属性分析部231、情報追加部232、タイプ判定部233、優先度判定部234、解析結果生成部235を有する。
属性分析部231は、各プログラム部品について、タイプ定義情報212に定義された方法で分析を行う。また、属性分析部231は、分析の結果を属性情報214として取得し、記憶領域210bへ格納する。
情報追加部232は、属性情報214の一部をコールグラフ213の各プログラム部品に追加する。また、情報追加部232は、タイプ判定部233により取得されたタイプ判定結果情報215を、コールグラフ213に追加する。
タイプ判定部233は、属性情報214と、タイプ定義情報212とに基づき、各プログラム部品の処理内容のタイプを判定する。言い換えれば、タイプ判定部233は、各プログラム部品を、タイプ定義情報212で定義されたタイプに分類する。また、タイプ判定部233は、判定した結果をタイプ判定結果情報215として取得し、記憶領域210bへ格納する。
優先度判定部234は、タイプ定義情報212とタイプ判定結果情報215とに基づき、各プログラム部品の優先度を判定する。また、優先度判定部234は、判定結果を優先度情報217として取得し、記憶領域210bに格納する。
解析結果生成部235は、各プログラム部品を識別する識別情報と、属性情報214、タイプ判定結果情報215、優先度情報217とを対応付けた解析結果情報218を生成し、記憶領域210bに格納する。このとき、解析結果情報218は、優先度情報217が示す優先度が高いプログラム部品から順に並にソートされていても良い。
次に、図4を参照して、本実施形態のタイプ定義情報212について説明する。図4は、タイプ定義情報の一例を示す図である。
本実施形態のタイプ定義情報212は、例えば、ソースコード211を解読する作業を行う作業者等によって、予め作成されて、解析装置200に与えられた情報である。
本実施形態のタイプ定義情報212は、情報の項目として、No.、タイプ名称、分析方法、追加方法、優先度を有し、項目「No.」とその他の項目とが対応付けられている。本実施形態では、項目「No.」と、項目「No.」と対応付けられた各項目と、項目「No.」の値と、項目「No.」と対応付けられた各項目の値とを含む情報を、タイプ定義情報212と呼ぶ。
項目「No.」の値は、タイプを特定するための識別情報である。項目「タイプ名称」の値は、プログラム部品の処理内容のタイプの名称を示す。
項目「分析方法」の値は、タイプ毎のプログラム部品の分析方法を示す。具体的には、項目「分析方法」の値は、プログラム部品を対応するタイプに分類するための条件を示す。したがって、本実施形態におけるプログラム部品の分析とは、項目「分析方法」の値が示す条件を満たすか否かを判定することと言える。
項目「追加方法」の値は、項目「分析方法」の値に示される分析方法に基づき各プログラム部品を分析して取得された属性情報214のコールグラフ213への追加の仕方を示す。項目「優先度」の値は、タイプ毎の優先度を示す。本実施形態では、項目「優先度」の値が小さい程、優先度が高いことを示す。
図4に示すタイプ定義情報212では、プログラム部品の処理内容のタイプとして、振分処理、概要処理、詳細処理、設定実行、データベースアクセス(以下、DBアクセス)、処理委任、エラー処理の7つが定義されていることがわかる。
また、図4に示すタイプ定義情報212では、優先度が最も高いタイプは、項目「優先度」の値が「1」である概要処理であり、その次に優先度が高いタイプは、項目「優先度」の値が「2」である振分処理である。また、その次に優先度が高いタイプは、項目「優先度」の値が「3」である詳細処理とDBアクセスであり、その次に優先度が高いタイプは、項目「優先度」の値が「4」である設定実行と処理委任である。そして、図4のタイプ定義情報212では、項目「優先度」の値が「5」であるエラー処理の優先度が最も低くなる。
以下に、本実施形態におけるタイプ毎の優先度の決め方について説明する。
プログラムは、コンピュータに自動実行させる処理を、プログラム言語の一連の命令文として、記述したものである。一般的なプログラム言語では、一連の命令文は、人の理解し易さや、部分的な処理の再利用を考慮して、部分に分けて部分的なプログラム(プログラム部品)として管理される。また、プログラム部品は、それぞれを呼び出し関係によって構造化することで、一連の命令文を構成する。そして、コンピュータは、プログラム部品を適切に呼び出すことによって、一連の命令文を実行し、所望の処理を実現する。
一連の処理を、プログラム部品に分けて記述したことは、プログラム部品の理解や再利用において有利であるが、各プログラム部品の処理内容を把握していない場合には、プログラム部品群を含むプログラムの理解が難しい場合がある。
ところで、複雑なものを理解する場合は、まず全体の概要を把握し、次に詳細な部分を理解していくことが一般的である。
本実施形態では、この点に着目し、プログラム部品群を含むプログラムを理解する場合にも、コールツリー上で、処理の概要に該当する部分を検出し、そこから順に、詳細を解読させるようにする。
処理の概要は、タイプ名称「概要処理」が示す処理内容に相当する。本実施形態では、処理内容が概要処理に相当するプログラム部品を特定するため、概要処理に分類されるプログラム部品の優先度を最も高い値「1」とした。
次に、タイプ名称「振分処理」が示す処理内容は、複数の同様な処理の何かから、ある処理を選択するものである。この処理内容も、処理の概要に相当する。したがって、本実施形態では、振分処理に分類されるプログラム部品の優先度を、概要処理の次に高い値「2」とした。
また、タイプ名称「詳細処理」に分類されるプログラム部品は、概要処理や振分処理に分類されたプログラム部品から呼び出される業務ロジック等の詳細な処理を記述したものである。したがって、本実施形態では、詳細処理、設定実行に分類されるプログラム部品の優先度を、詳細処理の次に高い値「3」とした。
また、タイプ名称「DBアクセス」に分類されるプログラム部品は、外部システムであるデータベースの処理の詳細を記述したものであり、データベースの動作の理解に必要となる。したがって、本実施形態では、DBアクセスに分類されるプログラム部品の優先度、を、詳細処理の次に高い値「3」とした。
また、タイプ名称「処理委任」、「設定実行」が示す処理内容は、概要処理や振分処理から呼び出されるが、処理の全体の成否に影響しないような処理である。したがって、本実施形態では、処理委任、設定実行に分類されるプログラム部品の優先度を、詳細処理、DBアクセスの次に高い値「4」とした。
また、タイプ名称「エラー処理」が示す処理内容は、処理が失敗した場合の対処の処理であり、重要ではあるが、処理のメイン機能とは別である。したがって、本実施形態では、エラー処理に分類されるプログラム部品の優先度を「5」とした。
尚、上述したタイプ名称毎の優先度は、例えば、解析処理部230による解析の結果に基づき、プログラムの解読を行う人によって任意に変更されても良い。また、本実施形態では、タイプ定義情報212に、プログラムの解読を行う人によって、新たなタイプ定義情報が追加されても良い。
次に、図5を参照して、本実施形態の解析装置200の処理について説明する。図5は、解析装置の処理を説明する第一のフローチャートである。
本実施形態の解析装置200は、コールグラフ生成部220により、分析対象のプログラムのソースコード211が入力されたか否かを判定する(ステップS501)。ステップS501において、ソースコード211が入力されていない場合、解析装置200は、ソースコード211が入力されるまで待機する。
ステップS501において、ソースコード211が入力されると、解析装置200は、コールグラフ生成部220と解析処理部230により、入力されたソースコード211の解析を行い(ステップS502)、出力部240により解析結果を出力する(ステップS503)。尚、ここで、入力されたソースコード211は、記憶部210に格納される。
以下に、図6を参照して、コールグラフ生成部220と解析処理部230の処理について説明する。図6は、解析装置の処理を説明する第二のフローチャートである。図6では、図5のステップS502の処理に詳細を示している。
本実施形態の解析装置200は、コールグラフ生成部220により、入力されたソースコード211を記憶部210から取得し、解析処理部230により、タイプ定義情報212を取得する(ステップS601)。
続いて、コールグラフ生成部220は、構文解析部221により、ソースコード211を解析してプログラム部品の構文解析を行い、プログラム部品群を認識する(ステップS602)。続いて、コールグラフ生成部220は、コール関係収集部222により、構文解析を行った結果から、各プログラム部品のコール関係を収集し、コールグラフ描画部223により、コールグラフ213を生成する(ステップS603)。
続いて、解析装置200は、解析処理部230の属性分析部231により、プログラム部品群からプログラム部品を選択する(ステップS604)。
続いて、解析処理部230は、属性分析部231により、選択したプログラム部品について、タイプ定義情報212を参照して分析し、分析結果として属性情報214を取得する(ステップS605)。
尚、属性分析部231は、プログラム部品に対して、タイプ定義情報212に定義された全てのタイプと対応する分析方法に基づく分析を行う。したがって、属性情報214は、タイプ定義情報212に定義された全てのタイプと対応する分析方法に基づく分析を行った結果を示す情報である。
具体的には、本実施形態では、タイプ定義情報212において、7つのタイプが定義されており、タイプ毎に分析方法が決められている。したがって、本実施形態の属性分析部231は、選択されたプログラム部品に対して、7通りの分析を行い、各分析の結果を選択されたプログラム部品の属性情報214として取得する。
続いて、解析処理部230は、情報追加部232により、属性情報214をコールグラフ213に追加する(ステップS606)。続いて、解析処理部230は、タイプ判定部233により、タイプ定義情報212を参照してプログラム部品のタイプを判定し、情報追加部232により、判定結果をコールグラフ213に追加して、情報追加コールグラフ216とする(ステップS607)。
続いて、解析処理部230は、優先度判定部234により、タイプ定義情報212を参照して、判定されたタイプに応じた優先度をプログラム部品に付与する(ステップS608)。
続いて、解析処理部230は、ソースコード211が示す分析対象のプログラムに含まれる全てのプログラム部品について、ステップS605からステップS608までの処理を実行したか否かを判定する(ステップS609)。
ステップS609において、全てのプログラム部品について処理が実行されていない場合、解析処理部230は、ステップS604に戻る。ステップS608において、全てのプログラム部品について処理が実行された場合、解析処理部230は、解析結果生成部235により、各プログラム部品の識別情報と、属性情報214と、タイプ判定結果情報215と、優先度情報217とを対応付けた解析結果情報218を生成し(ステップS610)、処理を終了する。尚、プログラム部品の識別情報とは、プログラム部品の名称等であっても良い。
以下に、図7乃至図10を参照して、解析処理部230の属性分析部231とタイプ判定部233による分析について具体的に説明する。
図7は、振分処理について説明する第一の図であり、図8は、振分処理について説明する第一の図である。
図7及び図8では、属性分析部231によって行われるプログラム部品のタイプが振分処理であるか否かを判定するための分析について説明する。
図7に示す記述71は、プログラム部品の1つである。記述71が示すプログラム部品の名称は、PG0である。
タイプ定義情報212において、振分処理と対応する分析方法では、「対象PG(プログラム部品)において、並列の位置にあるCALL文の割合を算出し、算出された割合が閾値以上であることを判定」すること、「コールグラフでの位置が上位であることを判定」すると定義されている。
しだかって、属性分析部231は、プログラム部品PG0が、「並列の位置にあるCALL文の割合を算出し、算出された割合が閾値以上である」という条件と、「コールグラフでの位置が上位である」という条件と、を満たすか否かを分析する。本実施形態のタイプ判定部233は、振分処理の分析方法が示す2つの条件の両方を満たす場合に、このプログラム部品を振分処理に分類する。
はじめに、図7を参照して、プログラム部品PG0が1つ目の条件を満たすか否かについて説明する。
本実施形態では、CALL文の個数をNとし、並列に位置するCALL文の個数をnとした場合に、n/N≧0.6となる場合に、1つ目の条件を満たすと判定される。言い換えれば、振分処理の1つ目の条件における閾値は、0.6である。
記述71には、CALL文は5つ存在するため、N=5である。また、並列の位置にあるCALL文とは、IF文などの条件分岐文の複数の分岐に存在するCALL文である。
記述71では、EVALUATE文の分岐内に、CALL PG1、CALL PG2、CALL PG3が存在する。また、記述71では、CALL PG5は、一つの分岐にだけなので、並列のCALL文に該当しない。
したがって、記述71が示すプログラム部品PG0では、N=5、n=3であり、n/N≧0.6となる。したがって、プログラム部品PG0は、振分処理の分析方法が示す2つの条件のうち、1つ目の条件を満たす。
尚、本実施形態では、CALL文の割合の閾値は、予め設定されていても良いし、任意に変更されても良い。また、CALL文の割合の閾値は、分析対象のプログラム全体において、振分処理と判定されるプログラム部品が所定の個数となるように調整されても良い。
具体的には、例えば、振分処理と判定されたプログラム部品の個数が、分析対象のプログラム内で多数又は少数となった場合は、閾値を小さくする又は大きくすることができる。
次に、図8を参照して、プログラム部品PG0が2つ目の条件を満たすか否かについて説明する。
本実施形態では、コールグラフ213において、最上位の階層(根本)のプログラム部品から末端の階層のプログラム部品までのCALL階層(エッジの個数、入れ子の個数)をMとし、最上位の階層のプログラム部品から分析の対象となるプログラム部品までのCALL階層をmとした場合に、m/M≦0.4となる場合に、2つ目の条件を満たすと判定される。言い換えれば、振分処理の2つ目の条件における閾値は、0.4である。
図8(A)に示すコールグラフ213では、CALL階層を示すM=4である。また、最上位の階層のプログラム部品PG7から振分処理の分析の対象となるプログラム部品PG0までのCALL階層を示すm=1である。
したがって、図8(A)に示すプログラム部品PG0は、m/M=0.25となり、m/M≦0.4を満たすため、振分処理の分析方法が示す2つの条件のうち、2つ目の条件を満たす。
図8(B)に示すコールグラフ213では、CALL階層を示すM=4である。また、最上位の階層のプログラム部品PG7から振分処理の分析の対象となるプログラム部品PG0までのCALL階層を示すm=3である。
したがって、図8(B)に示すプログラム部品PG0は、m/M=0.75となり、m/M≦0.4を満たさないため、振分処理の分析方法が示す2つの条件のうち、2つ目の条件を満たしていない。
次に、図9を参照して、概要処理について説明する。図9は、概要処理について説明する図である。図9では、属性分析部231によって行われる、プログラム部品のタイプが概要処理であるか否かを判定するための分析について説明する。
図9に示す記述91は、プログラム部品の1つである。記述91が示すプログラム部品の名称は、PG0である。
タイプ定義情報212において、概要処理と対応する分析方法では、「対象PG(プログラム部品)において、直列の位置にあるCALL文の割合を算出し、算出された割合が閾値以上であることを判定」すること、「コールグラフでの位置が上位であることを判定」すると定義されている。
したがって、属性分析部231は、プログラム部品PG0が、「直列の位置にあるCALL文の割合を算出し、算出された割合が閾値以上である」という条件と、「コールグラフでの位置が上位である」という条件と、を満たすか否かを分析する。本実施形態のタイプ判定部233は、概要処理の分析方法が示す2つの条件の両方を満たす場合に、このプログラム部品を概要処理に分類する。
直列に位置するCALL文とは、プログラム部品の一連の命令文で、前後関係にあるCALL文である。尚、このとき、並列の位置にあるCALL文は、まとめて一つのCALL文であるとみなす。
本実施形態では、CALL文の個数をNとし、直列に位置するCALL文の個数をnとした場合に、n/N≧0.6となる場合に、1つ目の条件を満たすと判定される。言い換えれば、概要処理の1つ目の条件における閾値は、0.6である。
記述91が示すプログラム部品PG0には、CALL PG1、CALL PG2、CALL PG3、CALL PG4、CALL PG5の5つのCALL文が存在する。このうち、CALL PG3と、CALL PG4は、並列のCALL文であるため、1つの直列のCALL文とする。
すると、記述91が示すプログラム部品PG0には、CALL PG1、CALL PG2、(CALL PG3、CALL PG4)、CALL PG5の4つの直列のCALL文が存在することになる。
したがって、図9に示すプログラム部品PG0は、n/N=0.8となり、n/N≧0.6を満たすため、概要処理の分析方法が示す2つの条件のうち、1つ目の条件を満たす。
尚、概要処理の分析方法のうち、2つ目の条件を満たすか否かの判定の仕方は、図8で説明した振分処理と同様であるため、説明を省略する。
次に、図10を参照して、詳細処理について説明する。図10は、詳細処理について説明する図である。図10では、属性分析部231によって行われる、プログラム部品のタイプが詳細処理であるか否かを判定するための分析について説明する。
図10に示す記述101は、プログラム部品の1つである。記述101が示すプログラム部品の名称は、PG0である。
タイプ定義情報212において、詳細処理と対応する分析方法では、「IF文等の命令文の個数をカウントし、個数が閾値以上であるかを判定」すること、「コールグラフでの位置が末端の方であるかを判定」すること、「概要処理又は振分処理に分類されたプログラム部品からコールされるかを判定」すること、「戻り値が何らかの演算結果であるかを判定」すること、と定義されている。
したがって、属性分析部231は、プログラム部品PG0が、「IF文等の命令文の個数が閾値以上である」という条件と、「コールグラフでの位置が末端の方である」という条件と、「概要処理又は振分処理に分類されたプログラム部品からコールされる」という条件と、「戻り値が何らかの演算結果である」という条件と、を満たすか否かを分析する。
本実施形態のタイプ判定部233は、分析の対象であるプログラム部品が、詳細処理の分析方法が示す4つの条件の全てを満たす場合に、このプログラム部品を詳細処理に分類する。
本実施形態では、IF文等の命令文の個数をkとし、命令文の数をカウントする。また、本実施形態では、プログラム部品PG0のサイズの影響を考慮し、プログラム部品PG0の行数Lで、個数kを正規化する。そして、本実施形態では、正規化された命令文の個数k/L≧0.3となる場合に、詳細処理の1つ目の条件を満たすと判定される。言い換えれば、詳細処理の1つ目の条件における閾値は、0.3である。
図10に示す記述101が示すプログラム部品PG0において、IF文等の命令文の数k=3である。また、記述101が示すプログラム部品PG0の行数L=9とした。
この場合、記述101が示すプログラム部品PG0は、k/L=0.3となり、k/L≧0.3を満たすため、詳細処理の分析方法が示す4つの条件のうち、1つ目の条件を満たす。
尚、正規化された命令文の個数の割合の閾値は、予め設定されていても良いし、任意に変更されても良い。また、この閾値は、分析対象のプログラム全体において、正規化した命令文の統計量(平均値等)に基づいて設定されても良い。
また、本実施形態において、「コールグラフでの位置が末端の方であるかを判定」する方法は、図8で説明した方法と同様である。
具体的には、本実施形態では、m/Mの値が、予め設定された閾値未満となれば、記述101が示すプログラム部品PG0は、詳細処理に分類するための2つ目の条件を満たすと判定される。
また、本実施形態では、記述101が示すプログラム部品PG0が、コールグラフ213において、振分処理又は概要処理に分類されたプログラム部品からCALLされるか否かを判定する。ここで、記述101が示すプログラム部品PG0は、振分処理又は概要処理に分類された他のプログラム部品にCALLされる場合に、詳細処理に分類するための3つ目の条件を満たすと判定される。
また、本実施形態では、記述101が示すプログラム部品PG0において、他のプログラム部品の戻り値の変数の値が、演算結果の値に設定されているか否かを判定する。ここで、記述101が示すプログラム部品PG0は、他のプログラム部品の戻り値の変数の値が、演算結果の値に設定されている場合に、詳細処理に分類するための4つ目の条件を満たすと判定される。
次に、図4を参照して、プログラム部品を、設定実行、DBアクセス、処理委任、エラー処理のそれぞれに分類される条件について説明する。
プログラム部品を、設定実行、DBアクセス、処理委任、エラー処理のそれぞれに分類する際には、既存のソースコードの静的解析が用いられる。
はじめに、プログラム部品の処理内容を「設定実行」に分類する際の条件について説明する。
タイプ定義情報212において、設定実行と対応する分析方法では、「IF文の分岐で引数を設定し、単一のCALLを実行するか判定」すること、「詳細処理を呼び出すプログラム部品であるか判定」すること、と定義されている。
したがって、属性分析部231は、プログラム部品が、「IF文の分岐で引数を設定し、単一のCALLを実行する」という条件と、「詳細処理を呼び出すプログラム部品である」という条件と、を満たすか否かを分析する。
本実施形態のタイプ判定部233は、分析の対象であるプログラム部品が、設定実行の分析方法が示す2つの条件の全てを満たす場合に、このプログラム部品のタイプを設定実行に分類する。
また、タイプ定義情報212において、DBアクセスと対応する分析方法では、「SQL文を処理しているか判定」することと、「コールグラフの末端であるか判定」することと、「エラー処理に分類されたプログラム部品以外をCALLしないか判定」すること、と定義されている。
したがって、属性分析部231は、プログラム部品が、「SQL文を処理している」という条件と、「コールグラフの末端である」という条件と、「エラー処理に分類されたプログラム部品以外をCALLしない」という条件を満たすか否かを分析する。
本実施形態のタイプ判定部233は、分析の対象であるプログラム部品が、DBアクセスの分析方法が示す3つの条件の全てを満たす場合に、このプログラム部品のタイプをDBアクセスに分類する。
また、タイプ定義情報212において、処理委任と対応する分析方法では、「戻り値が処理の成否を示すか、あるいは、戻り値がないかを判定」することと、「コールグラフの末端であるか判定」すること、と定義されている。
したがって、属性分析部231は、プログラム部品が、「戻り値が処理の成否を示す、あるいは、戻り値がない」という条件と、「コールグラフの末端である」という条件とを満たすか否かを分析する。
本実施形態のタイプ判定部233は、分析の対象であるプログラム部品が、処理委任の分析方法が示す2つの条件の全てを満たす場合に、このプログラム部品のタイプを処理委任に分類する。
また、タイプ定義情報212において、エラー処理と対応する分析方法では、「実行終了文があるか判定」することと、「コールグラフの末端であるか判定」すること、と定義されている。
したがって、属性分析部231は、プログラム部品が、「実行終了文がある」という条件と、「コールグラフの末端である」という条件とを満たすか否かを分析する。
本実施形態のタイプ判定部233は、分析の対象であるプログラム部品が、エラー処理の分析方法が示す2つの条件の全てを満たす場合に、このプログラム部品のタイプをエラー処理に分類する。
尚、本実施形態では、分析対象のプログラムに含まれる全てのプログラム部品について、タイプ毎に分類する処理を行うが、プログラム部品の中には、タイプ定義情報212に示すどのタイプにも当てはまらないものが存在する可能性がある。
具体的には、例えば、各分析方法に応じて分析した結果の値が、閾値を超過せず、タイプに分類するための条件を満たさないプログラム部品や、他のプログラム部品とコール関係がなく、コールグラフ213に登場しないプログラム部品等は、どのタイプにも分類されない可能性がある。
そこで、本実施形態では、タイプ定義情報212で定義されたタイプに分類されないプログラム部品を、処理内容「判定不能」に分類し、処理内容「判定不能」の優先度も「判定不能」とするものとした。
次に、図11乃至図13を参照して、本実施形態の情報追加部232と優先度判定部234の処理について説明する。
図11は、解析装置の処理を具体的に説明する第一の図である。図11では、分析対象のプログラムに、プログラム部品PG1からPG9までの8つのプログラム部品が含まれる場合を示している。
図11において、プログラム部品PG1は、3つのCALL文が存在し、プログラム部品PG2、PG3、PG4を直列にコールする。また、プログラム部品PG2は、3つのCALL文が存在し、条件によってプログラム部品PG5、PG6、PG7を選択してコールする。プログラム部品PG3は、複数のIF文が存在し、演算処理等が含まれる。
プログラム部品PG4、PG5、PG6、PG7は、CALL文が1つであり、単一のCALLを実行する。プログラム部品PG8は、SQL文を処理している。プログラム部品PG9は、実行を中断する文が含まれる。
以下に、図12を参照して、これらのプログラム部品PG1からプログラム部品PG9について、タイプ定義情報212を参照して分析を行った場合に得られる解析結果情報218について説明する。
図12は、解析結果情報の一例を示す図である。図12に示す解析結果情報218は、情報の項目として、「No.」、「PG名」、「タイプ」、「優先度」、「値1」、「値2」、「値3」、「値4」、「値5」、「値6」等を有する。
項目「No.」とその他の項目とは、対応付けられており、解析結果情報218は、項目「No.」の値と、その他の項目の値とを含む。
項目「No.」の値は、解析結果情報218のレコードを特定するための識別情報である。項目「PG名」の値は、プログラム部品の名称を示す。言い換えれば、項目「PG名」の値は、プログラム部品を識別する識別情報である。
項目「タイプ」の値は、プログラム部品毎にタイプ判定部233によって判定された処理内容のタイプを示す。本実施形態において、項目「タイプ」の値は、タイプ判定結果情報215である。
項目「優先度」の値は、プログラム部品毎にタイプに応じて付与された優先度を示す。本実施形態において、項目「優先度」の値は、優先度情報217である。
項目「値1」の値は、プログラム部品に含まれるCALL文のうち、直列の位置にあるCALL文の割合を示す。言い換えれば、項目「値1」の値は、概要処理と対応する分析方法のうち、「対象PG(プログラム部品)において、直列の位置にあるCALL文の割合を算出し、算出された割合が閾値以上であることを判定」する分析を行った結果を示す。
項目「値2」の値は、プログラム部品に含まれるCALL文のうち、並列の位置にあるCALL文の割合を示す。言い換えれば、項目「値2」の値は、振分処理と対応する分析方法のうち、「対象PG(プログラム部品)において、並列の位置にあるCALL文の割合を算出し、算出された割合が閾値以上であることを判定」する分析を行った結果を示す。
項目「値3」の値は、コールグラフ213におけるプログラム部品の位置を示す。言い換えれば、項目「値3」の値は、概要処理又は振分処理と対応する分析方法のうち、「コールグラフでの位置が上位であることを判定」する分析を行った結果を示す。又は、項目「値3」の値は、処理委任と対応する分析方法のうち、「コールグラフの末端であるか判定」する分析を行った結果を示す。
項目「値4」の値は、プログラム部品に含まれる命令文における、正規化されたIF文の割合を示す。言い換えれば、項目「値4」の値は、詳細処理と対応する分析方法のうち、「IF文等の命令文の個数をカウントし、個数が閾値以上であるかを判定」する分析を行った結果を示す。
項目「値5」の値は、プログラム部品が概要処理又は振分処理に分類されたプログラム部品から呼び出されているか否かを示す。言い換えれば、項目「値5」の値は、詳細処理と対応する分析方法のうち、「概要処理又は振分処理に分類されたプログラム部品からコールされるかを判定」する分析を行った結果を示す。図12の例では、項目「値5」の値が「真」である場合に、「概要処理又は振分処理に分類されたプログラム部品からコールされる」という条件を満たすことを示す。
項目「値6」の値は、戻り値が何らかの演算結果であるか否かを示している。言い換えれば、項目「値6」の値は、処理委任と対応する分析方法のうち、「戻り値が何らかの演算結果であるかを判定」する分析を行った結果を示す。図12の例では、項目「値6」の値が「真」である場合に、「戻り値が何らかの演算結果である」という条件を満たすことを示す。
つまり、図12に示す項目「値1」〜「値6」の値は、属性分析部231による分析結果として取得される属性情報214である。
本実施形態の属性情報214には、タイプ定義情報212で定義された全ての分析方法についての分析結果が含まれる。
図12では、例えば、プログラム部品PG1は、直列の位置にあるCALL文の割合が1であり、コールグラフ213における位置が最上位であり、概要処理に分類されたことがわかる。また、プログラム部品PG1の優先度は、概要処理と対応する「1」である。
また、図12において、プログラム部品PG2は、並列の位置にあるCALL文の割合が1であり、コールグラフ213における位置が上位であり、振分処理に分類されたことがわかる。また、プログラム部品PG2の優先度は、振分処理と対応する「2」である。
また、図12において、プログラム部品PG3は、コールグラフ213における位置が上位ではなく、正規化されたIF文の数の割合が0.3であり、概要処理又は振分処理からコールされ、戻り値が演算結果であり、詳細処理に分類されたことがわかる。また、プログラム部品PG3の優先度は、詳細処理と対応する「3」である。
このように、本実施形態の解析結果生成部235は、属性情報214とタイプ判定結果情報215と優先度情報217が取得されると、これらとプログラム部品の識別情報とを対応付けた解析結果情報218を生成する。
次に、図13A、図13Bを参照して、本実施形態の情報追加コールグラフ216の作成について説明する。図13Aは、コールグラフの一例を示す図である。図13Bは、情報追加コールグラフの一例を示す図である。
図13Aは、9つのプログラム部品を含む分析対象のプログラムのソースコード211から生成されたコールグラフ213を示す。図13Bは、情報追加部232により、コールグラフ213に情報が追加された情報追加コールグラフ216を示す。
本実施形態の情報追加部232は、タイプ定義情報212の追加方法で定義されている方法で、属性情報214と、タイプ判定結果情報215とをコールグラフ213に追加する。
タイプ定義情報212において、概要処理と対応する追加方法は、「<>でタイプ名称を追記」、「直列CALLを明示」である。また、プログラム部品PG1は、タイプ判定部233によって、概要処理に分類されている。
したがって、情報追加コールグラフ216では、プログラム部品PG1に対し、タイプの名称「概要処理」を示す情報131が追加される。また、情報追加コールグラフ216では、プログラム部品PG1が、直列の位置にあるCALL文によってプログラム部品PG2、PG3、PG4をコールすることを示す情報151、152、153が追加される。つまり、ここでは、プログラム部品PG1に含まれる命令文の種類を示す情報が追加される。
また、タイプ定義情報212において、振分処理と対応する追加方法は、「<>でタイプ名称を追記」、「並列CALLを明示」である。また、プログラム部品PG2は、タイプ判定部233によって、振分処理に分類されている。
したがって、情報追加コールグラフ216では、プログラム部品PG2に対し、タイプの名称「振分処理」を示す情報141が追加される。また、情報追加コールグラフ216では、プログラム部品PG2が、条件によってプログラム部品PG5、PG6、PG7のいずれかを選択してコールすることを示す情報171、172、173が追加される。つまり、ここでは、プログラム部品PG2に含まれる命令文の種類を示す情報が追加される。
また、タイプ定義情報212において、詳細処理と対応する追加方法は、「<>でタイプ名称を追記」である。また、プログラム部品PG5は、タイプ判定部233によって、詳細処理に分類されている。
したがって、情報追加コールグラフ216では、プログラム部品PG5に対し、タイプの名称「詳細処理」を示す情報161が追加される。尚、本実施形態では、例えば、詳細処理に分類されたプログラム部品については、情報追加コールグラフ216において、プログラム部品の複雑度を追加しても良い。プログラム部品の複雑度とは、例えば、IF文の数等であっても良い。
また、タイプ定義情報212において、DBアクセスと対応する追加方法は、「<>でタイプ名称を追記」、「アクセスするDB情報を追記」である。また、プログラム部品PG8は、タイプ判定部233によって、DBアクセスに分類されている。
したがって、情報追加コールグラフ216では、プログラム部品PG8に対し、タイプの名称「DBアクセス」を示す情報181と、アクセスするデータベースを示す情報182とが追加される。
また、タイプ定義情報212において、エラー処理と対応する追加方法は、「<>でタイプ名称を追記」、「終了文を追記」である。また、プログラム部品PG9は、タイプ判定部233によって、エラー処理に分類されている。
したがって、情報追加コールグラフ216では、プログラム部品PG9に対し、タイプの名称「エラー処理」を示す情報191と、終了文を示す情報192とが追加される。
このように、本実施形態の情報追加部232は、コールグラフ213に対し、属性情報214の一部とタイプ判定結果情報215とを追加して、情報追加コールグラフ216を生成する。言い換えれば、情報追加コールグラフ216は、複数のプログラム部品の呼び出し関係を示す情報であるコールグラフ213に、各プログラム部品に含まれる命令文の種類を示す情報と、タイプの名称を示す情報とが追加されたコールグラフである。
次に、図14を参照して、端末装置300の表示例について説明する。図14は、端末装置の表示例を示す図である。
本実施形態の解析処理部230は、解析結果情報218と情報追加コールグラフ216とが生成されると、出力部240によって、解析結果情報218と情報追加コールグラフ216とを端末装置300に出力する。
図14に示す画面140は、端末装置300に表示された画面の例を示す。尚、画面140は、解析装置200の出力装置22(ディスプレイ)等に表示されても良い。
画面140では、分析対象のプログラムを解析した結果として、解析結果情報218と情報追加コールグラフ216とが共に表示されている。
解析結果情報218では、プログラム部品毎のレコードが、優先度が高い順にソートされている。
本実施形態では、このように、プログラム部品の処理内容のタイプに応じて付与された優先度順に、プログラム部品の一覧を表示させる。また、本実施形態では、解析結果情報218の一部として、プログラム部品の分析結果である属性情報214を表示させる。
このため、本実施形態では、プログラムを解読する順番を決める際に参照する情報として、有用な情報を提示することができ、プログラムを解読する順番を決める際の判断を支援できる。
また、本実施形態では、プログラム部品毎に、タイプの名称と属性情報214の一部と、が追加された情報追加コールグラフ216が表示される。したがって、本実施形態によれば、分析対象のプログラム全体の構成の把握を支援することができる。
また、本実施形態によれば、呼び出し関係のみを表現したコールグラフのように、プログラム部品が他のどのプログラム部品を呼び出す処理なのか判断できない、といった事態を回避できる。
尚、図14の例では、情報追加コールグラフ216と解析結果情報218とが1つの画面140に表示されるものとしたが、これに限定されない。情報追加コールグラフ216と解析結果情報218とは、それぞれが別々に表示されても良い。
また、本実施形態では、タイプの判定が不能であったプログラム部品が存在する場合には、解析結果情報218の項目「タイプ」の値を「判定不能」としても良い。
以下に、図15を参照して、タイプの判定が不能であった場合の解析結果情報218について説明する。図15は、変形例を示す図である。
図15(A)に示す解析結果情報218Aには、タイプの判定が不能であったプログラム部品PGNが含まれる。
図15の例では、解析結果情報218Aが端末装置300に表示された際に、項目「タイプ」の値が選択されると、属性情報214の詳細が表示される。
例えば、解析結果情報218Aにおいて、プログラム部品PG1の項目「タイプ」の値は、「概要処理」である。
したがって、解析結果情報218Aが表示された画面において、プログラム部品PG1の項目「タイプ」の値は、「概要処理」が選択されると、図15(B)に示す属性情報214の詳細155が表示される。
また、変形例では、解析結果情報218Aが表示された画面において、プログラム部品PGNの項目「タイプ」の値「判定不能」が選択されると、図15(C)に示す属性情報214の詳細156が表示される。
図15(B)に示す属性情報214の詳細155は、プログラム部品PG1について、タイプ定義情報212で定義された各タイプの分析方法によって分析した結果を示している。
より具体的には、属性情報214の詳細155は、図6のステップS604において、プログラム部品PG1が選択されて、ステップS605からステップS607までの処理が実行された場合に収集される情報を示している。
具体的には、属性情報214の詳細155は、情報の項目として、No、タイプ、成否、「値1」〜「値6」等を含み、項目「No」とその他の項目とが対応付けられている。
項目「No」の値は、属性情報214の詳細155のレコードを特定する識別情報である。項目「タイプ」の値は、タイプの名称を示す。項目「成否」の値は、対応するタイプに分類されるための条件を満たす割合を示す。
図15(B)に示す属性情報214の詳細155では、プログラム部品PG1について、タイプ定義情報212で定義されるタイプ毎の分析結果を示している。
具体的には、例えば、プログラム部品PG1は、概要処理に分類するための2つの条件を満たし、振分処理に分類するための2つの条件のうち、1つの条件を満たし、詳細処理に分類するための4つの条件は、どれも満たしていないことがわかる。
また、図15(C)に示す属性情報214の詳細156では、プログラム部品PGNについて、タイプ定義情報212で定義されるタイプ毎の分析結果を示している。
具体的には、例えば、プログラム部品PGNは、概要処理に分類するための2つの条件のうち1つの条件を満たし、振分処理に分類するための2つの条件のうち1つの条件を満たし、詳細処理に分類するための4つの条件のうち3つの条件を満たしていることがわかる。
したがって、プログラム部品PGNの処理内容は、詳細処理に近い内容であることが推測できる。
このように、本実施形態では、処理内容のタイプを分類することができなかったプログラム部品についても、分析結果の詳細を出力することができる。本実施形態によれば、例えば、タイプ定義情報212を作成する作成者等に、属性情報214の詳細156を提示することができる。タイプ定義情報212の作成者は、属性情報214の詳細156を参照して、タイプ定義情報212に定義された分析方法における各閾値の見直し等を行うことができる。
開示の技術では、以下に記載する付記のような形態が考えられる。
(付記1)
複数のプログラム部品それぞれについて、
複数のプログラム部品の呼び出し関係を示す情報と、各プログラム部品のソースコード中に含まれる命令文の情報と、に基づいて、各プログラム部品のタイプを判定し、
判定結果と、タイプ毎の優先度が定義された定義情報とに基づいて、各プログラム部品の優先度を決定し、
前記各プログラム部品の識別情報を前記優先度にしたがって表示させる、処理をコンピュータに実行させる解析プログラム。
(付記2)
前記各プログラム部品のタイプの名称を示す情報を、前記各プログラム部品の識別情報及び前記優先度と対応付けて表示させる、処理を前記コンピュータに実行させる付記1記載の解析プログラム。
(付記3)
前記複数のプログラム部品の呼び出し関係を示す情報に、前記プログラム部品のタイプの名称を示す情報と、前記プログラム部品に含まれる命令文の種類を示す情報と、を追加した情報追加コールグラフを表示させる、処理を前記コンピュータに実行させる付記1又は2記載の解析プログラム。
(付記4)
前記定義情報は、前記タイプの名称と、プログラム部品の処理内容を前記タイプに分類するための条件とが対応付けられており、
前記複数のプログラム部品毎に、前記定義情報に定義された前記タイプ毎の条件を満たすか否かを分析し、
分析した結果を前記プログラム部品の属性情報として収集する、処理を前記コンピュータに実行させる、付記1乃至3記載の何れか一項に記載の解析プログラム。
(付記5)
前記プログラム部品に含まれる命令文の種類を示す情報は、前記属性情報に含まれる、付記4記載の解析プログラム。
(付記6)
コンピュータによる解析方法であって、前記コンピュータが、
複数のプログラム部品それぞれについて、
複数のプログラム部品の呼び出し関係を示す情報と、各プログラム部品のソースコード中に含まれる命令文の情報と、に基づいて、各プログラム部品のタイプを判定し、
判定結果と、タイプ毎の優先度が定義された定義情報とに基づいて、各プログラム部品の優先度を決定し、
前記各プログラム部品の識別情報を前記優先度にしたがって表示させる、解析方法。
(付記7)
複数のプログラム部品それぞれについて、複数のプログラム部品の呼び出し関係を示す情報と、各プログラム部品のソースコード中に含まれる命令文の情報と、に基づいて、各プログラム部品のタイプを判定するタイプ判定部と、
判定結果と、タイプ毎の優先度が定義された定義情報とに基づいて、各プログラム部品の優先度を決定する優先度判定部と、
前記各プログラム部品の識別情報を前記優先度にしたがって表示させる出力部と、を有する解析装置。
本発明は、具体的に開示された実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。