(57)【要約】【課題】業務ロジックとして抽出された複数のプログラムの間の重要性に関する情報を提供すること。【解決手段】業務クラス判定部１１が、メソッド内でインスタンス変数を参照又は更新するか否かを判定することによって、対象クラスが業務データクラスであるか否かを判定し、判定結果を業務データクラス情報として出力する。そして、業務データクラス情報に基づいて、点数計算部１５が、プログラム単位、メソッド単位又は最上位の条件文単位で業務の複雑さを表す点数を計算し、点数情報を出力する。そして、優先情報設定部１９が、点数情報に基づいて、プログラム、メソッド又は最上位の条件文を優先付して優先付情報６として出力する。【選択図】図１
2018045463.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
クラス内のインスタンス変数に関する情報及びメソッドに関する情報に基づいて該クラスが業務データに関するクラスである業務データクラスであるか否かを判定し、判定結果を業務データクラス情報として出力し、
前記業務データクラス情報に基づいて、所定の処理単位で業務の複雑さを表す点数を計算し、計算した点数に関する情報を点数情報として出力し、
前記点数情報に基づいて、前記処理単位を優先付した優先付情報を出力する
処理を実行させることを特徴とするプログラム分析プログラム。
【請求項２】
前記点数を計算する処理は、前記所定の処理単位に含まれる各項目について、前記業務データクラス情報に基づいて、項目が業務に関係する業務データ項目であるか否かを判定し、業務データ項目について点数を計算することを特徴とする請求項１に記載のプログラム分析プログラム。
【請求項３】
前記処理単位に基づいて、プログラムの中で点数を計算する対象範囲を特定する処理をさらにコンピュータに実行させ、
前記点数を計算する処理は、前記対象範囲に含まれる文について前記点数を計算することを特徴とする請求項１又は２に記載のプログラム分析プログラム。
【請求項４】
前記点数を計算する処理は、複数の指標に関して点数を計算し、
前記優先付して出力する処理は、前記複数の指標の合計値又は各指標の値に基づいて優先付を行うことを特徴とする請求項１、２又は３に記載のプログラム分析プログラム。
【請求項５】
前記点数を計算する処理は、条件で参照される業務データ項目の回数、条件で参照される業務データ項目の最大回数及び計算式で参照される業務データ項目の数を計算することを特徴とする請求項２に記載のプログラム分析プログラム。
【請求項６】
前記所定の処理単位は、プログラム、メソッド又は最上位の条件文であることを特徴とする請求項１〜５のいずれか１つに記載のプログラム分析プログラム。
【請求項７】
前記業務データ項目は、変数、若しくは、メソッドの引数又は戻り値であることを特徴とする請求項２に記載のプログラム分析プログラム。
【請求項８】
コンピュータが、
クラス内のインスタンス変数に関する情報及びメソッドに関する情報に基づいて該クラスが業務データに関するクラスである業務データクラスであるか否かを判定し、判定結果を業務データクラス情報として出力し、
前記業務データクラス情報に基づいて、所定の処理単位で業務の複雑さを表す点数を計算し、計算した点数に関する情報を点数情報として出力し、
前記点数情報に基づいて、前記処理単位を優先付した優先付情報を出力する
処理を実行することを特徴とするプログラム分析方法。
【請求項９】
クラス内のインスタンス変数に関する情報及びメソッドに関する情報に基づいて該クラスが業務データに関するクラスである業務データクラスであるか否かを判定し、判定結果を業務データクラス情報として出力する業務クラス判定部と、
前記業務データクラス情報に基づいて、所定の処理単位で業務の複雑さを表す点数を計算し、計算した点数に関する情報を点数情報として出力する点数計算部と、
前記点数情報に基づいて、前記処理単位を優先付した優先付情報を出力する優先付情報出力部と
を有することを特徴とするプログラム分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム分析プログラム、プログラム分析方法及びプログラム分析装置に関する。
【背景技術】
【０００２】
近年、コンピュータシステムの発達により、様々な分野でコンピュータシステムが活用されている。人が行う業務の一部の作業を自動化する業務システムについても、様々な業務システムが構築されている。構築された業務システムは、歳月を経ると、改良されたり、全体的に見直しされたりする。このとき、作成されたプログラムの一部の修正を行うためには、業務システムに実装されている業務ロジックの分析が必要となる。
【０００３】
ここで、業務ロジックとは、業務システムの中で業務に特化した処理を行うプログラムである。業務ロジックの例としては、注文内容を基に請求額を計算する処理がある。業務システムには、業務ロジック以外に制御ロジックが含まれる。制御ロジックは、業務に特化しないアプリケーション間の連携や資源管理を行うプログラムである。制御ロジックの例としては、画面から入力されたデータのエラーチェックやデータベースへの保存等の処理がある。業務ロジックの分析のため、業務システムのプログラムを分析し、業務ロジックを抽出する分析装置がある。
【０００４】
なお、クラス情報、メソッド情報及び参照メソッド情報に基づいて、関連元具象クラス・メソッドＩＤと関連先具象クラス・メソッドＩＤのペア情報を生成し、所望のクラス・メソッドに関連する一連の具象クラス・メソッドを抽出して画面に表示する技術がある。この技術によれば、プログラムの保守作業の負担を著しく軽減することができる。
【０００５】
また、プログラム中の変数をフラグ等の内部変数と入出力に関連した業務変数に分類し、業務変数が更新されている箇所及び条件を求め、内部変数で記述されている条件式を業務変数で記述した等価な条件式に置換することで、業務仕様情報を作成する技術がある。
【０００６】
また、ソースプログラムから日常の保守作業において修正対象となり易い部分と、システム更新時に主な修正対象となるＯＳに依存する部分とを自動的に分離・抽出し、システム再構築作業の負荷を軽減する技術がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−１２３２５４号公報
【特許文献２】特開平９−１０１８７９号公報
【特許文献３】特開平７−１０４９９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
業務ロジックとして抽出された複数のプログラムの間では、業務仕様を分析する上での重要性がプログラム毎に異なる。しかしながら、従来の分析装置には、業務ロジックを抽出するだけで、業務ロジックとして抽出された複数のプログラムの間の重要性に関しては分析を行わないという問題がある。
【０００９】
本発明は、１つの側面では、業務ロジックとして抽出された複数のプログラムの間の重要性に関する情報を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、プログラム分析プログラムは、コンピュータに、クラス内のインスタンス変数に関する情報及びメソッドに関する情報に基づいて該クラスが業務データに関するクラスである業務データクラスであるか否かを判定する処理を実行させる。また、プログラム分析プログラムは、コンピュータに、判定結果を業務データクラス情報として出力し、業務データクラス情報に基づいて、所定の処理単位で業務の複雑さを表す点数を計算し、計算した点数に関する情報を点数情報として出力する処理を実行させる。また、プログラム分析プログラムは、コンピュータに、点数情報に基づいて、処理単位を優先付した優先付情報を出力する処理を実行させる。
【発明の効果】
【００１１】
１つの側面では、業務ロジックとして抽出された複数のプログラムの間の重要性に関する情報を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例に係るプログラム分析装置の機能構成を示す図である。
【図２Ａ】図２Ａは、業務データクラス情報の例を示す図である。
【図２Ｂ】図２Ｂは、業務データクラス情報の出力形式の例を示す図である。
【図３Ａ】図３Ａは、プログラムの例（ファイル１つ目）を示す図である。
【図３Ｂ】図３Ｂは、プログラムの例（ファイル２つ目）を示す図である。
【図４】図４は、第１補助情報の例を示す図である。
【図５Ａ】図５Ａは、業務データ項目情報の例を示す図である。
【図５Ｂ】図５Ｂは、業務データ項目情報の出力形式の例を示す図である。
【図５Ｃ】図５Ｃは、業務データ項目情報の例を示す図である。
【図５Ｄ】図５Ｄは、業務データ項目情報の出力形式の例を示す図である。
【図６】図６は、第２補助情報の例を示す図である。
【図７Ａ】図７Ａは、メソッド単位とプログラム単位の点数情報の例を示す図である。
【図７Ｂ】図７Ｂは、メソッド単位とプログラム単位の点数情報の例を示す図である。
【図７Ｃ】図７Ｃは、メソッド単位の出力形式の例を示す図である。
【図７Ｄ】図７Ｄは、プログラム単位の出力形式の例を示す図である。
【図７Ｅ】図７Ｅは、条件文単位の出力形式の例を示す図である。
【図８】図８は、指定業務情報の例を示す図である。
【図９Ａ】図９Ａは、ソフトウェア地図上での可視化例を示す図である。
【図９Ｂ】図９Ｂは、散布図の例を示す図である。
【図１０Ａ】図１０Ａは、プログラム分析装置による処理のフローを示す第１のフローチャートである。
【図１０Ｂ】図１０Ｂは、プログラム分析装置による処理のフローを示す第２のフローチャートである。
【図１１】図１１は、業務クラス判定部による処理のフローを示すフローチャートである。
【図１２Ａ】図１２Ａは、対象範囲特定部（プログラム）による処理のフローを示すフローチャートである。
【図１２Ｂ】図１２Ｂは、対象範囲特定部（メソッド）による処理のフローを示すフローチャートである。
【図１２Ｃ】図１２Ｃは、対象範囲特定部（条件文）による処理のフローを示すフローチャートである。
【図１３Ａ】図１３Ａは、点数計算部による処理のフローを示す第１のフローチャートである。
【図１３Ｂ】図１３Ｂは、点数計算部による処理のフローを示す第２のフローチャートである。
【図１４】図１４は、業務データ判定部による処理のフローを示すフローチャートである。
【図１５】図１５は、優先情報設定部による処理のフローを示すフローチャートである。
【図１６】図１６は、実施例に係るプログラム分析プログラムを実行するコンピュータのハードウェア構成を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示するプログラム分析プログラム、プログラム分析方法及びプログラム分析装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１４】
まず、実施例に係るプログラム分析装置の機能構成について説明する。図１は、実施例に係るプログラム分析装置の機能構成を示す図である。図１に示すように、実施例に係るプログラム分析装置１は、業務クラス判定部１１と、業務データクラス情報記憶部１２と、対象範囲特定部１３と、対象範囲情報記憶部１４と、点数計算部１５と、業務データ判定部１６とを有する。また、プログラム分析装置１は、業務データ項目情報記憶部１７と、点数情報記憶部１８と、優先情報設定部１９とを有する。
【００１５】
業務クラス判定部１１は、プログラム２をファイルから読み込み、プログラム２に含まれるクラスの構造的な特徴に基づいて、クラスが業務データに関するクラスすなわち業務データクラスであるか否かを判定する。具体的には、業務クラス判定部１１は、インスタンス変数があり、インスタンス変数へアクセスするメソッドがあるクラスを業務データクラスと判定する。
【００１６】
そして、業務クラス判定部１１は、判定結果を業務データクラス情報として業務データクラス情報記憶部１２に格納する。業務データクラス情報記憶部１２は、業務データクラス情報を記憶する。図２Ａは、業務データクラス情報の例を示す図であり、図２Ｂは、業務データクラス情報の出力形式の例を示す図である。
【００１７】
また、図３Ａ及び図３Ｂは、判定対象となったプログラムの例を示す図である。業務システム（業務アプリケーション）は複数のプログラムにより構成される。ここでは、図３Ａに示すプログラムと図３Ｂに示すプログラムで業務システムが構成されることとする。図３Ａ及び図３Ｂに示すプログラムは、それぞれ１つのファイルに格納される。
【００１８】
図３Ａは、クラス名がＡｃｃｏｕｎｔＢｅａｎであるクラスを示し、図３Ｂは、クラス名がＴｅｓｔＣｌａｓｓであるクラスを示す。１つのプログラムには複数のクラスが含まれてもよい。また、１つのファイルには、複数のプログラムが含まれてもよい。
【００１９】
業務クラス判定部１１は、ＡｃｃｏｕｎｔＢｅａｎに対して、上位のクラスがあるか否かを判定する。このクラスは特にインタフェースや上位クラスを継承していないため、業務クラス判定部１１は、上位のクラスがないと判定し、該当のクラスだけのインスタンス変数のみを調査する。
【００２０】
ＡｃｃｏｕｎｔＢｅａｎクラスは、ｎａｍｅ（図３Ａの３行目）とｋｉｎｇａｋｕ（図３Ａの４行目）とｋｕｂｕｎ（図３Ａの５行目）という３つのインスタンス変数を有する。したがって、ＡｃｃｏｕｎｔＢｅａｎは、インスタンス変数を有すると判定される。
【００２１】
次に、業務クラス判定部１１は、ＡｃｃｏｕｎｔＢｅａｎクラスのメソッドを取得する。そして、メソッドが１つ以上存在した場合、業務クラス判定部１１は、メソッド全てがインスタンス変数を参照、又は更新するか否かを確認する。ＡｃｃｏｕｎｔＢｅａｎクラスには、ｖａｌｉｄａｔｅ、ｓｅｔＮａｍｅ、ｇｅｔＫｕｂｕｎ、ｓｅｔＫｕｂｕｎ、ｇｅｔＫｉｎｇａｋｕ、ｓｅｔＫｉｎｇａｋｕの６つのメソッドがある。
【００２２】
ｖａｌｉｄａｔｅメソッドは、ｎａｍｅというインスタンス変数を参照する。ｓｅｔＮａｍｅメソッドは、インスタンス変数ｎａｍｅを更新する。ｇｅｔＫｕｂｕｎメソッドは、インスタンス変数ｋｕｂｕｎを参照する。ｓｅｔＫｕｂｕｎメソッドは、インスタンス変数ｋｕｂｕｎを更新する。ｇｅｔＫｉｎｇａｋｕメソッドは、インスタンス変数ｋｉｎｇａｋｕを参照する。ｓｅｔＫｉｎｇａｋｕメソッドは、インスタンス変数ｋｉｎｇａｋｕを更新する。したがって、ＡｃｃｏｕｎｔＢｅａｎクラスの６つのメソッド全部がインスタンス変数を参照又は更新するため、業務クラス判定部１１は、ＡｃｃｏｕｎｔＢｅａｎを業務データクラスであると判定する。
【００２３】
ＴｅｓｔＣｌａｓｓクラスも上位クラスやインタフェースを継承していないため、業務クラス判定部１１は、上位のクラスがないと判定し、該当のクラスだけのインスタンス変数のみを調査する。ＴｅｓｔＣｌａｓｓは、ａｃｃｏｕｎｔというインスタンス変数を有する。次に、業務クラス判定部１１は、メソッドがあるかどうかを調査する。メソッドとしては、ｃｈｅｃｋｖａｌｉｄ、ｃａｌｃＡｃｃｏｕｎｔの２つがある。このうち、ｃｈｅｃｋｖａｌｉｄは、ｋａｉｉｎ、ｋｕｂｕｎ、ｋｉｎｇａｋｕという変数を参照するが、いずれもメソッドの引数であり、メソッド内部の変数である。
【００２４】
したがって、ｃｈｅｃｋｖａｌｉｄは、インスタンス変数を参照しない。このため、ＴｅｓｔＣｌａｓｓクラスは、インスタンス変数の参照又は更新のいずれもしないメソッドがあるので、業務クラス判定部１１は、ＴｅｓｔＣｌａｓｓは業務データクラスではないと判定する。
【００２５】
図２Ａに示すように、業務データクラス情報は、クラス名と判定結果を対応付ける情報である。判定結果は、業務データクラスである場合には「Ｙｅｓ」であり、業務データクラスでない場合には「Ｎｏ」である。図２Ａは、クラス名がＡｃｃｏｕｎｔＢｅａｎであるクラスは業務データクラスであり、クラス名がＴｅｓｔＣｌａｓｓであるクラスは業務データクラスではないことを示す。
【００２６】
また、図２Ｂに示すように、業務データクラス情報の出力形式は、クラス名と「１」又は「０」を「，」で区切った形式である。「１」は対応するクラスが業務データクラスであることを示し、「０」は対応するクラスが業務データクラスでないことを示す。
【００２７】
また、業務クラス判定部１１は、業務データクラスに関してユーザが指定する情報を第１補助情報３としてファイルから入力する。第１補助情報３は、業務データクラスの名前に関する情報である。図４は、第１補助情報３の例を示す図である。図４の例では、業務クラス判定部１１は、Ｂｅａｎ、ＤＡＯ、ＤＴＯ、Ｅｎｔｉｔｙ、ＶＯをクラス名の一部に含むクラスを業務データクラスと判定する。
【００２８】
対象範囲特定部１３は、プログラムの中で点数化する範囲を特定し、特定した範囲の情報を対象範囲情報として対象範囲情報記憶部１４に格納する。点数化する単位としては、プログラム、メソッド、最上位の条件文がある。対象範囲特定部１３は、点数化する単位毎に含まれる文を点数化する範囲として特定する。対象範囲情報記憶部１４は、点数化する単位毎に点数化する範囲に関する情報を記憶する。
【００２９】
例えば、プログラム単位の場合は、対象範囲特定部１３は、対象のソースファイル内部に記述されている範囲を点数化する範囲とする。プログラムの開始は、各クラスの定義の開始であり、プログラムの終了は、各クラスの定義の終了である。図３Ａに示したプログラムの例では、１行目から２９行目までが点数化の対象範囲である。図３Ｂに示したプログラムでは、１行目から３１行目までが点数化の対象範囲である。
【００３０】
メソッド単位の場合は、図３Ａに示したプログラムの例では、ｖａｌｉｄａｔｅ、ｓｅｔＮａｍｅ、ｇｅｔＫｕｂｕｎ、ｓｅｔＫｕｂｕｎ、ｇｅｔＫｉｎｇａｋｕ、ｓｅｔＫｉｎｇａｋｕがそれぞれ点数化の対象範囲である。最上位の条件文の場合、図３Ｂに示したプログラムの例では、ｃａｌｃＡｃｃｏｕｎｔメソッドは２つの条件文があり、１４行目から１６行目までの条件文と、１９行目から２７行目までの条件文が点数化の対象範囲である。
【００３１】
点数計算部１５は、対象範囲情報記憶部１４に記憶された情報に基づいて、点数化する単位毎に点数を計算する。点数計算部１５は、点数化する範囲に含まれる業務データ項目を業務データ判定部１６を用いて特定し、特定した業務データ項目に関して点数を計算する。ここで、項目は、変数、メソッドの引数又はメソッドの戻り値であり、業務データ項目は、業務に関する項目である。
【００３２】
業務データ判定部１６は、業務データクラス情報を用いて対象の項目が業務データ項目であるか否かを判定する。業務データ判定部１６は、対象の項目が業務データクラス、業務データクラスの変数、業務データクラスのメソッドの引数又は業務データクラスのメソッドの戻り値である場合には、対象の項目を業務データ項目と判定する。また、業務データ判定部１６は、代入文による代入元又は代入先として対象の項目から業務データ項目に到達する場合には、対象の項目を業務データ項目と判定する。
【００３３】
業務データ判定部１６は、判定結果の情報を業務データ項目情報記憶部１７に格納する。業務データ項目情報記憶部１７は、項目が業務データ項目であるか否かの情報を含めて項目に関する情報を業務データ項目情報として記憶する。
【００３４】
図５Ａ及び図５Ｃは、業務データ項目情報の例を示す図であり、図５Ｂ及び図５Ｄは、業務データ項目情報の出力形式の例を示す図である。図５Ａ及び図５Ｂは、図３Ａに示したＡｃｃｏｕｎｔＢｅａｎクラスに関する業務データ項目情報及び業務データ項目情報の出力形式である。図５Ｃ及び図５Ｄは、図３Ｂに示したＴｅｓｔＣｌａｓｓに関する業務データ項目情報及び業務データ項目情報の出力形式である。
【００３５】
図５Ａ及び図５Ｃに示すように、業務データ項目情報には、変数名と、型と、変数種別と、メソッド情報と、業務データ情報とが含まれる。変数名は、項目の名前である。型は、項目の型である。変数種別は、項目がインスタンス変数であるかローカル変数であるかを示す。メソッド情報は、項目が引数である場合に引数が用いられるメソッドを示す。業務データ情報は、項目が業務データ項目である（Ｙｅｓ）か否（Ｎｏ）かを示す。
【００３６】
また、図５Ｂ及び図５Ｄに示すように、業務データ項目情報の出力形式は、クラス名と変数名と型と変数種別とメソッド情報と業務データ情報を「，」で区切った形式である。業務データ情報の「１」は項目が業務データ項目であることを示し、「０」は項目が業務データ項目でないことを示す。
【００３７】
例えば、ＡｃｃｏｕｎｔＢｅａｎクラスについては、ＡｃｃｏｕｎｔＢｅａｎクラス全体は業務データクラスであるが、内部の項目に関してはそれぞれの型情報を基に改めて業務データ項目であるか否かが判定される。ＡｃｃｏｕｎｔＢｅａｎクラスには、内部に業務データクラスを有する項目は１つもない。
【００３８】
すなわち、インスタンス変数であるｎａｍｅはＳｔｒｉｎｇ型であり、業務データクラスではない。同様にｋｉｎｇａｋｕも整数型なので、業務データクラスではない。また、引数に関しても、ｖａｌｉｄａｔｅの引数、ｋａｉｉｎ、ｋｕｂｕｎ、ｋｉｎｇａｋｕはいずれも整数型なので業務データではない。
【００３９】
他のメソッドについても、ｓｅｔＮａｍｅは引数として文字列型のｓがあるが、業務データクラスではない。ｇｅｔＫｕｂｕｎは引数がない。ｓｅｔＫｕｂｕｎの引数ｉは整数型で業務データではない。ｇｅｔＫｉｎｇａｋｕは引数がない。ｓｅｔＫｉｎｇａｋｕの引数ｉは整数型で業務データではない。また、上記の変数で代入関係を追跡したとしても、業務データクラスに関係する項目との代入関係がない。したがって、業務データ判定部１６は、いずれの項目も業務データ項目ではないと判定する。
【００４０】
一方、ＴｅｓｔＣｌａｓｓクラスは、インスタンス変数ａｃｃｏｕｎｔを有し、ａｃｃｏｕｎｔの型がＡｃｃｏｕｎｔＢｅａｎである。ＡｃｃｏｕｎｔＢｅａｎは、業務データクラスであるため、インスタンス変数ａｃｃｏｕｎｔは業務データ項目である。その他の変数については、ｃｈｅｃｋｖａｌｉｄメソッド内部にｋａｉｉｎ、ｋｕｂｕｎ、ｋｉｎｇａｋｕが引数としてあるが、ｋａｉｉｎ、ｋｕｂｕｎ、ｋｉｎｇａｋｕは、整数型で業務データクラスではないので、業務データ項目ではない。
【００４１】
ｃａｌｃＡｃｃｏｕｎｔでは、引数ｋａｉｉｎ、ｋｕｂｕｎ、ｋｉｎｇａｋｕは、整数型であり、業務データ項目との代入関係がないため、業務データ項目ではない。ローカル変数ｔｍｐｋｉｎｇａｋｕは、業務データ項目であるａｃｃｏｕｎｔのメソッドの戻り値であるため、業務データ項目である。
【００４２】
ａｃｃｏｕｎｔに対して定数を代入する場合は定数は業務データ項目として扱われない。したがって、ｓｅｔＫｕｂｕｎで設定している値が定数である場合は該当の定数は業務データ項目とされない。一方、ｔｅｍｋｉｎｇａｋｕ＊ｔｈｉｓ．ａｃｃｏｕｎｔ．ｇｅｔＫｕｂｕｎ＊０．１という計算式については、ｔｍｐｋｉｎｇａｋｕは、業務データ項目であり、ｔｈｉｓ．ａｃｃｏｕｎｔ．ｇｅｔＫｕｂｕｎは、業務データのメソッドの引数なので業務データ項目である。また、業務データ項目の引数、戻り値となったものについては、業務データ項目として扱われるため、ｔｈｉｓ．ａｃｃｏｕｎｔ．ｓｅｔＫｉｎｇａｋｕも業務データ項目として扱われる。
【００４３】
点数計算部１５は、業務データ項目の内、条件で参照される業務データ項目の数を点数として数える。この数を以下では業務要因量（Ｒ１）と呼ぶ。また、点数計算部１５は、業務データ項目が条件で参照される回数の最大値を点数として数える。この数を以下では業務判断多重度（Ｒ２）と呼ぶ。また、点数計算部１５は、計算式で参照される業務データ項目の数を点数として数える。この数を以下では業務計算量（Ｒ１−ｃｏｍｐ）と呼ぶ。
【００４４】
そして、点数計算部１５は、業務要因量と業務判断多重度と業務計算量の合計を業務ロジックの複雑度（ｂｌｃ）とする。プログラム分析装置１は、業務ロジックが複雑である部分を重要性が高い部分であるとみなし、業務ロジックの複雑性を業務ロジックの重要性として出力する。
【００４５】
点数計算部１５は、条件や計算式以外で参照される業務データ項目については点数として数えない。また、点数計算部１５は、第２補助情報４を入力して点数計算を行う。第２補助情報４は、点数化対象から除外する条件及び計算式を示す情報である。図６は、第２補助情報４の例を示す図である。図６において、例えば、「ＩＦ，ｎｕｌｌ」は、ｎｕｌｌチェックを行っている部分は業務に関係ない処理であるとして点数化対象から除外することを示す。また、「ＶＡＲ，ｉｎｄｅｘ」は、変数ｉｎｄｅｘを点数化対象から除外することを示す。
【００４６】
点数計算部１５は、計算した点数に関する情報を点数情報として点数情報記憶部１８に格納する。点数情報記憶部１８は、点数化単位で点数情報を記憶する。図７Ａ及び図７Ｂは、メソッド単位とプログラム単位の点数情報の例を示す図である。図７Ａは、ＡｃｃｏｕｎｔＢｅａｎについてメソッド単位とプログラム単位の点数情報を示し、図７Ｂは、ＴｅｓｔＣｌａｓｓについてメソッド単位とプログラム単位の点数情報を示す。
【００４７】
図７Ａ及び図７Ｂに示すように、メソッド単位の点数情報には、Ｃｌａｓｓと、Ｍｅｔｈｏｄと、Ｒ１と、Ｒ２と、Ｒ１−ｃｏｍｐと、ｂｌｃが含まれる。Ｃｌａｓｓは、メソッドが属するクラス名である。Ｍｅｔｈｏｄは、メソッド名である。クラスの点数は、クラスに含まれるメソッドの点数の合計である。
【００４８】
図７Ａに示すように、ＡｃｃｏｕｎｔＢｅａｎクラスの場合、業務データ項目が１つもないため、プログラム、メソッド等の点数はいずれも０点である。一方、ＴｅｓｔＣｌａｓｓクラスは、業務データ項目であるａｃｃｏｕｎｔを有し、ｃｈｅｃｋｖａｌｉｄメソッドは、業務データ項目であるａｃｃｏｕｎｔを参照も更新もしないため、図７Ｂに示すように、点数は０点である。
【００４９】
一方、ｃａｌｃＡｃｃｏｕｎｔメソッドは、業務データ項目ｔｍｐｋｉｎｇａｋｕを条件で参照し、条件で参照する業務データ項目数は１項目であり、１項目を２点として、業務要因量（Ｒ１）の点数は、２点となる。また、ｔｍｐｋｉｎｇａｋｕは、条件で３回参照され、ｃａｌｃＡｃｃｏｕｎｔメソッド内で最大回数参照されるため、業務判断多重度（Ｒ２）は、３回×２点＝６点となる。
【００５０】
さらに、ｃａｌｃＡｃｃｏｕｎｔメソッドには、計算式があり、ｔｈｉｓ．ａｃｃｏｕｎｔ．ｓｅｔＫｉｎｇａｋｕ、ｔｍｐｋｉｎｇａｋｕ、ｔｈｉｓ．ａｃｃｏｕｎｔ．ｇｅｔＫｉｎｇａｋｕはいずれも業務データ項目である。したがって、この３つの項目が計算式に登場するため、業務計算量（Ｒ１−ｃｏｍｐ）は、１項目２点とすると、３項目×２点＝６点となる。業務ロジックの複雑度（ｂｌｃ）は、Ｒ１とＲ２とＲ１−ｃｏｍｐを合計して１４点となる。また、ＴｅｓｔＣｌａｓｓのクラス全体の点数は、ｃｈｅｃｋｖａｌｉｄメソッドとｃａｌｃＡｃｃｏｕｎｔメソッドの点数を合計したものである。
【００５１】
図７Ｃは、メソッド単位の出力形式の例を示す図である。図７Ｃに示すように、メソッド単位の出力形式は、クラス名とメソッド名と業務要因量（Ｒ１）と業務判断多重度（Ｒ２）と業務計算量（Ｒ１−ｃｏｍｐ）と業務ロジックの複雑度（ｂｌｃ）を「，」で区切った形式である。例えば、ＡｃｃｏｕｎｔＢｅａｎのｖａｌｉｄａｔｅメソッドは、業務要因量（Ｒ１）、業務判断多重度（Ｒ２）、業務計算量（Ｒ１−ｃｏｍｐ）、業務ロジックの複雑度（ｂｌｃ）の全てが０である。
【００５２】
図７Ｄは、プログラム単位の出力形式の例を示す図である。図７Ｄに示すように、プログラム単位の出力形式は、クラス名と業務要因量（Ｒ１）と業務判断多重度（Ｒ２）と業務計算量（Ｒ１−ｃｏｍｐ）と業務ロジックの複雑度（ｂｌｃ）を「，」で区切った形式である。例えば、ＴｅｓｔＣｌａｓｓは、業務要因量（Ｒ１）、業務判断多重度（Ｒ２）、業務計算量（Ｒ１−ｃｏｍｐ）、業務ロジックの複雑度（ｂｌｃ）がそれぞれ２、６、６、１４である。
【００５３】
図７Ｅは、条件文単位の出力形式の例を示す図である。図７Ｅに示すように、条件文単位の出力形式は、クラス名とメソッド名と条件文の種類と条件文の開始行番号と業務要因量（Ｒ１）と業務判断多重度（Ｒ２）と業務計算量（Ｒ１−ｃｏｍｐ）と業務ロジックの複雑度（ｂｌｃ）を「，」で区切った形式である。例えば、ＴｅｓｔＣｌａｓｓのｃａｌｃＡｃｃｏｕｎｔにあり、１９行目から開始されるＩＦ文は、業務要因量（Ｒ１）、業務判断多重度（Ｒ２）、業務計算量（Ｒ１−ｃｏｍｐ）、業務ロジックの複雑度（ｂｌｃ）がそれぞれ２、６、０、８である。
【００５４】
優先情報設定部１９は、点数情報と指定業務情報５に基づいて、プログラム、メソッド又は最上位の条件文の優先付を行い、優先付した結果を優先付情報６として出力する。指定業務情報５は、優先付の対象範囲としたい業務のキーワード、プログラム等を指定する情報である。
【００５５】
図８は、指定業務情報５の例を示す図である。図８では、優先順位付の対象範囲としたい業務のキーワードとしてｋｉｎｇａｋｕが指定されている。例えば図３Ｂに示したプログラムの場合、２つのメソッドを有し、ｋｉｎｇａｋｕを含むものは、両方のメソッドであるため、優先情報設定部１９は、ｋｉｎｇａｋｕを含むメソッドに限定した優先付を行う場合は、２つのメソッドに対して優先付を行う。
【００５６】
一方、ｔｍｐｋｉｎｇａｋｕを含むメソッドに限定した場合、対象となるメソッドは、２つ目のメソッドｃａｌｃＡｃｃｏｕｎｔ（１３行目〜３０行目）に限定される。もし多くのメソッドがあれば、キーワード等で限定しても、メソッド数やプログラム数が多いため、複数のセクションが得られ、優先情報設定部１９は、その範囲内で優先付を行う。
【００５７】
図９Ａ及び図９Ｂは、優先情報設定部１９が出力する優先付情報６の例を示す図である。図９Ａは、ソフトウェア地図上での可視化例を示す。図９Ａに示すように、ソフトウェア地図上で、個々のビルの高さを、計算した点数の値を基に表示することで、どの範囲に複雑度が高いプログラムが集中しているかを可視化することができる。この可視化により、複雑度が高いプログラムのグループを区画として取得することができる。また、優先情報設定部１９は、ここで得られたグループ内のプログラムの点数を加算して、グループ単位で優先付することができる。
【００５８】
図９Ｂは、散布図の例を示す。図９Ｂに示すように、優先情報設定部１９は、業務要因量（Ｒ１）、業務判断多重度（Ｒ２）のそれぞれの値を軸に散布図を作成して、原点や軸から遠いものから優先付する。
【００５９】
次に、プログラム分析装置１による処理のフローについて説明する。図１０Ａ及び図１０Ｂは、プログラム分析装置１による処理のフローを示すフローチャートである。図１０Ａに示すように、プログラム分析装置１は、プログラムを取得し（ステップＳ１）、取得したプログラムに含まれるクラスが業務データクラスであるか否かを判定して判定結果を出力する業務クラス判定処理を行う（ステップＳ２）。そして、プログラム分析装置１は、全てのプログラムに対して判定したか否かを判定し（ステップＳ３）、判定していないプログラムがある場合には、ステップＳ１に戻る。
【００６０】
一方、全てのプログラムに対して判定した場合には、プログラム分析装置１は、プログラムを取得し（ステップＳ４）、取得したプログラムで点数化の対象範囲を特定して出力する対象範囲特定処理を行う（ステップＳ５）。そして、プログラム分析装置１は、全てのプログラムに対して点数化の対象範囲を特定したか否かを判定し（ステップＳ６）、特定していないプログラムがある場合には、ステップＳ４に戻る。
【００６１】
一方、全てのプログラムについて点数化の対象範囲を特定した場合には、プログラム分析装置１は、図１０Ｂに示すように、対象範囲を取得し（ステップＳ７）、対象範囲内から条件及び計算式の項目を取得する（ステップＳ８）。そして、プログラム分析装置１は、項目が業務データ項目か否かを判定し（ステップＳ９）、項目が業務データ項目である場合には、業務データ項目の使われ方に基づいて点数を加算する（ステップＳ１０）。
【００６２】
そして、プログラム分析装置１は、対象範囲内の全ての条件及び計算式の項目を取得したか否かを判定し（ステップＳ１１）、取得していない項目がある場合には、ステップＳ８に戻る。一方、全ての条件及び計算式の項目を取得した場合には、プログラム分析装置１は、全ての対象範囲に対して点数付したか否かを判定し（ステップＳ１２）、点数付していない対象範囲がある場合には、ステップＳ７に戻る。
【００６３】
一方、全ての対象範囲に対して点数付した場合には、プログラム分析装置１は、点数情報を出力し（ステップＳ１３）、指定業務情報５があるか否かを判定する（ステップＳ１４）。そして、指定業務情報５がある場合には、プログラム分析装置１は、指定業務情報５に合致する範囲の点数情報を抽出し（ステップＳ１５）、表示装置に出力する。
【００６４】
このように、プログラム分析装置１は、業務データ項目を特定し、特定した業務データ項目の使われ方に基づいて点数付を行うことによって、業務ロジックの重要性に関する情報を提供することができる。
【００６５】
次に、業務クラス判定部１１による処理のフローについて説明する。図１１は、業務クラス判定部１１による処理のフローを示すフローチャートである。なお、図１１に示す処理は、図１０Ａで示したステップＳ２の業務クラス判定処理に対応する。図１１に示すように、業務クラス判定部１１は、対象のプログラムからクラスを取得する（ステップＳ２１）。
【００６６】
そして、業務クラス判定部１１は、対象クラス又は上位クラスにインスタンス変数があるか否かを判定し（ステップＳ２２）、インスタンス変数がある場合には、対象クラスにメソッドが存在するか否かを判定する（ステップＳ２３）。そして、業務クラス判定部１１は、対象クラスにメソッドが存在する場合には、メソッド内でインスタンス変数を参照又は更新するか否かを判定する（ステップＳ２４）。
【００６７】
そして、インスタンス変数を参照又は更新する場合には、業務クラス判定部１１は、対象クラスのメソッドを全て確認したか否かを判定する（ステップＳ２５）。そして、業務クラス判定部１１は、確認していないメソッドがある場合には、ステップＳ２３に戻り、全メソッドを確認した場合には、対象クラスを業務データクラスとして出力する（ステップＳ２６）。
【００６８】
一方、ステップＳ２４においてメソッド内でインスタンス変数を参照も更新もしない場合には、業務クラス判定部１１は、対象クラスの名称に第１補助情報３の文字列を含むか否かを判定し（ステップＳ２８）、含む場合には、ステップＳ２６に移動する。一方、対象クラスの名称に第１補助情報３の文字列を含まない場合には、業務クラス判定部１１は、対象クラスを業務データクラスでないとして出力する（ステップＳ２９）。
【００６９】
また、ステップＳ２３において、対象クラスにメソッドが存在しない場合には、業務クラス判定部１１は、対象クラスにパブリックなデータが存在するか否かを判定し（ステップＳ２７）、存在する場合には、ステップＳ２６に移動する。一方、対象クラスにパブリックなデータが存在しない場合には、業務クラス判定部１１は、ステップＳ２８に移動する。
【００７０】
また、ステップＳ２２において、対象クラスにも上位クラスにもインスタンス変数がない場合には、業務クラス判定部１１は、ステップＳ２８に移動する。
【００７１】
このように、業務クラス判定部１１は、メソッド内でインスタンス変数を参照又は更新するか否かを判定することによって、対象クラスが業務データクラスであるか否かを判定することができる。
【００７２】
次に、対象範囲特定部１３による処理のフローについて説明する。図１２Ａ〜図１２Ｃは、対象範囲特定部１３による処理のフローを示すフローチャートである。図１２Ａは、点数化の対象範囲がプログラムである場合の処理のフローを示し、図１２Ｂは、点数化の対象範囲がメソッドである場合の処理のフローを示し、図１２Ｃは、点数化の対象範囲が条件文である場合の処理のフローを示す。なお、図１２Ａ〜図１２Ｃに示す処理は、図１０Ａで示したステップＳ５の対象範囲特定処理に対応する。
【００７３】
図１２Ａに示すように、対象範囲特定部１３は、対象のプログラムから文を取得し（ステップＳ３１）、プログラム開始文であるか否かを判定する（ステップＳ３２）。そして、プログラム開始文である場合には、対象範囲特定部１３は、プログラムの点数化範囲として文の取得を開始する（ステップＳ３３）。一方、プログラム開始文でない場合には、対象範囲特定部１３は、プログラム終了文であるか否かを判定し（ステップＳ３４）、プログラム終了文である場合には、プログラムの点数化範囲としての文の取得を終了する（ステップＳ３５）。
【００７４】
そして、対象範囲特定部１３は、全ての文を取得したか否かを判定し（ステップＳ３６）、取得していない文がある場合には、ステップＳ３１に戻り、全ての文を取得した場合には、プログラムの点数化の対象範囲情報を出力する（ステップＳ３７）。
【００７５】
図１２Ｂに示すように、対象範囲特定部１３は、対象のプログラムから文を取得し（ステップＳ４１）、メソッド開始文であるか否かを判定する（ステップＳ４２）。そして、メソッド開始文である場合には、対象範囲特定部１３は、メソッドの点数化範囲として文の取得を開始する（ステップＳ４３）。一方、メソッド開始文でない場合には、対象範囲特定部１３は、メソッド終了文であるか否かを判定し（ステップＳ４４）、メソッド終了文である場合には、メソッドの点数化範囲としての文の取得を終了する（ステップＳ４５）。
【００７６】
そして、対象範囲特定部１３は、全ての文を取得したか否かを判定し（ステップＳ４６）、取得していない文がある場合には、ステップＳ４１に戻り、全ての文を取得した場合には、メソッドの点数化の対象範囲情報を出力する（ステップＳ４７）。
【００７７】
図１２Ｃに示すように、対象範囲特定部１３は、対象のプログラムから文を取得し（ステップＳ５１）、条件開始文であるか否かを判定する（ステップＳ５２）。そして、条件開始文である場合には、対象範囲特定部１３は、他の条件文の内部の文でないか否かを判定し（ステップＳ５３）、他の条件文の内部の文でない場合には、条件文の点数化範囲として文の取得を開始する（ステップＳ５４）。一方、他の条件文の内部の文である場合には、対象範囲特定部１３は、ステップＳ５８に進む。
【００７８】
また、ステップＳ５２において条件開始文でない場合には、対象範囲特定部１３は、条件終了文であるか否かを判定する（ステップＳ５５）。そして、対象範囲特定部１３は、条件終了文である場合には、他の条件文の内部の文でないか否かを判定し（ステップＳ５６）、他の条件文の内部の文でない場合には、条件文の点数化範囲としての文の取得を終了する（ステップＳ５７）。一方、他の条件文の内部の文である場合、あるいは、ステップＳ５５において条件終了文でないと判定した場合には、対象範囲特定部１３は、ステップＳ５８に進む。
【００７９】
そして、対象範囲特定部１３は、全ての文を取得したか否かを判定し（ステップＳ５８）、取得していない文がある場合には、ステップＳ５１に戻り、全ての文を取得した場合には、条件文の点数化の対象範囲情報を出力する（ステップＳ５９）。
【００８０】
このように、対象範囲特定部１３が、点数化の対象範囲を特定して対象範囲情報を出力することで、点数計算部１５は、点数化の対象範囲の点数を計算することができる。
【００８１】
次に、点数計算部１５による処理のフローについて説明する。図１３Ａ及び図１３Ｂは、点数計算部１５による処理のフローを示すフローチャートである。図１３Ａは、業務要因量（Ｒ１）及び業務計算量（Ｒ１−ｃｏｍｐ）の値を計算する処理のフローを示し、図１３Ｂは、業務判断多重度（Ｒ２）の値を計算する処理のフローを示す。
【００８２】
図１３Ａに示すように、点数計算部１５は、対象のメソッドから文を取得し（ステップＳ６１）、条件文であるか否かを判定する（ステップＳ６２）。そして、条件文である場合には、点数計算部１５は、条件文に登場する項目を取得し（ステップＳ６３）、取得した項目すなわち対象項目が業務データ項目であるか否かを業務データ判定部１６を用いて判定する（ステップＳ６４）。そして、対象項目が業務データ項目でない場合には、点数計算部１５は、ステップＳ７６へ進む。
【００８３】
一方、対象項目が業務データ項目である場合には、点数計算部１５は、第２補助情報４で指定されたパターンであるか否かを判定し（ステップＳ６５）、第２補助情報４で指定されたパターンである場合には、ステップＳ７６へ進む。一方、第２補助情報４で指定されたパターンでない場合には、点数計算部１５は、対象項目が他の条件文で１回以上登場したか否かを判定し（ステップＳ６６）、登場した場合には、ステップＳ７６へ進む。
【００８４】
一方、対象項目が他の条件文で登場していない場合には、点数計算部１５は、項目別に「条件」で点数を加算する（ステップＳ６７）。ここで、「条件」で加算するとは、業務要因量（Ｒ１）を加算することである。また、加算する値は、例えば「２」である。そして、点数計算部１５は、項目名と点数を保存し（ステップＳ６８）、ステップＳ７６に移動する。
【００８５】
また、ステップＳ６２において、条件文でないと判定した場合には、点数計算部１５は、計算式であるか否かを判定する（ステップＳ６９）。そして、計算式でない場合には、点数計算部１５は、ステップＳ７６へ進む。一方、計算式である場合には、点数計算部１５は、計算式に登場する項目を取得し（ステップＳ７０）、取得した項目すなわち対象項目が業務データ項目であるか否かを業務データ判定部１６を用いて判定する（ステップＳ７１）。そして、対象項目が業務データ項目でない場合には、点数計算部１５は、ステップＳ７６へ進む。
【００８６】
一方、対象項目が業務データ項目である場合には、点数計算部１５は、第２補助情報４で指定されたパターンであるか否かを判定し（ステップＳ７２）、第２補助情報４で指定されたパターンである場合には、ステップＳ７６へ進む。一方、第２補助情報４で指定されたパターンでない場合には、点数計算部１５は、対象項目が他の計算式で１回以上登場したか否かを判定し（ステップＳ７３）、登場した場合には、ステップＳ７６へ進む。
【００８７】
一方、対象項目が他の計算式で登場していない場合には、点数計算部１５は、項目別に「計算式」で点数を加算する（ステップＳ７４）。ここで、「計算式」で加算するとは、業務計算量（Ｒ１−ｃｏｍｐ）を加算することである。また、加算する値は、例えば「２」である。そして、点数計算部１５は、項目名と点数を保存し（ステップＳ７５）、ステップＳ７６に移動する。
【００８８】
そして、点数計算部１５は、対象範囲内の全ての文を取得したか否かを判定し（ステップＳ７６）、取得していない文がある場合には、ステップＳ６１に戻る。一方、全ての文を取得した場合には、点数計算部１５は、対象範囲がプログラムの場合はメソッドの点数の合計値を計算する（ステップＳ７７）。そして、点数計算部１５は、「条件」、「計算式」の点数を点数情報として出力する（ステップＳ７８）。
【００８９】
図１３Ｂに示すように、点数計算部１５は、対象のメソッドから文を取得し（ステップＳ８１）、条件文であるか否かを判定する（ステップＳ８２）。そして、条件文でない場合には、点数計算部１５は、ステップＳ８８へ進む。
【００９０】
一方、条件文である場合には、点数計算部１５は、条件文に登場する項目を取得し（ステップＳ８３）、取得した項目すなわち対象項目が業務データ項目であるか否かを業務データ判定部１６を用いて判定する（ステップＳ８４）。そして、対象項目が業務データ項目でない場合には、点数計算部１５は、ステップＳ８８へ進む。
【００９１】
一方、対象項目が業務データ項目である場合には、点数計算部１５は、第２補助情報４で指定されたパターンであるか否かを判定し（ステップＳ８５）、第２補助情報４で指定されたパターンである場合には、ステップＳ８８へ進む。一方、第２補助情報４で指定されたパターンでない場合には、点数計算部１５は、項目別に「条件」で点数を加算する（ステップＳ８６）。そして、点数計算部１５は、項目名と点数を保存する（ステップＳ８７）。
【００９２】
そして、点数計算部１５は、対象範囲内の全ての文を取得したか否かを判定し（ステップＳ８８）、取得していない文がある場合には、ステップＳ８１に戻る。一方、全ての文を取得した場合には、点数計算部１５は、「条件」の点数で項目別の最高点と項目名を点数情報として出力し（ステップＳ８９）、対象範囲がプログラムの場合はメソッドの点数の合計値を計算して点数情報として出力する（ステップＳ９０）。
【００９３】
このように、点数計算部１５が、業務要因量（Ｒ１）、業務計算量（Ｒ１−ｃｏｍｐ）及び業務判断多重度（Ｒ２）の値を計算することで、プログラム分析装置１は、プログラム単位、メソッド単位又は最上位の条件文単位で優先付を行うことができる。
【００９４】
次に、業務データ判定部１６による処理のフローについて説明する。図１４は、業務データ判定部１６による処理のフローを示すフローチャートである。図１４に示すように、業務データ判定部１６は、対象のプログラムからクラスを取得する（ステップＳ１０１）。ここで、対象のプログラムとは、業務データ項目であるか否かが判定される対象項目が定義されたクラスを含むプログラムである。
【００９５】
そして、業務データ判定部１６は、対象項目が業務データクラスであるか否かを判定し（ステップＳ１０２）、対象項目が業務データクラスである場合には、対象項目は業務データ項目と判断する（ステップＳ１１４）。
【００９６】
一方、対象項目が業務データクラスでない場合には、業務データ判定部１６は、対象項目が業務データクラスの変数であるか否かを判定する（ステップＳ１０３）。そして、対象項目が業務データクラスの変数である場合には、業務データ判定部１６は、対象項目は業務データ項目と判断する（ステップＳ１１４）。
【００９７】
一方、対象項目が業務データクラスの変数でない場合には、業務データ判定部１６は、対象項目が業務データクラスのメソッドの引数か戻り値であるか否かを判定する（ステップＳ１０４）。そして、対象項目が業務データクラスのメソッドの引数か戻り値である場合には、業務データ判定部１６は、対象項目は業務データ項目と判断する（ステップＳ１１４）。
【００９８】
一方、対象項目が業務データクラスのメソッドの引数でも戻り値でもない場合には、業務データ判定部１６は、プログラムの全ての代入文を取得し（ステップＳ１０５）、代入元及び代入先の項目を取得する（ステップＳ１０６）。そして、業務データ判定部１６は、取得した項目がプリミティブ型であるか否かを判定する（ステップＳ１０７）。すなわち、業務データ判定部１６は、取得した項目がクラスでないか否かを判定する。
【００９９】
そして、取得した項目がプリミティブ型である場合には、業務データ判定部１６は、対象項目に対する全ての代入関係を取得する（ステップＳ１０８）。一方、取得した項目がプリミティブ型でない場合には、業務データ判定部１６は、対象クラスの変数及びメソッドと対象項目との全ての代入関係を取得する（ステップＳ１０９）。
【０１００】
そして、業務データ判定部１６は、同一項目で複数の代入関係がある場合はプログラムの最初の関係を優先する（ステップＳ１１０）。そして、業務データ判定部１６は、対象項目を起点に代入元を追跡し、業務データ項目に到達するか否かを判定する（ステップＳ１１１）。そして、業務データ項目に到達した場合には、業務データ判定部１６は、対象項目は業務データ項目と判断する（ステップＳ１１４）。
【０１０１】
一方、業務データ項目に到達しなかった場合には、業務データ判定部１６は、対象項目を起点に代入先を追跡し、業務データ項目に到達するか否かを判定する（ステップＳ１１２）。そして、業務データ項目に到達した場合には、業務データ判定部１６は、対象項目は業務データ項目と判断する（ステップＳ１１４）。
【０１０２】
一方、業務データ項目に到達しなかった場合には、業務データ判定部１６は、対象項目は業務データ項目ではないと判断する（ステップＳ１１３）。
【０１０３】
このように、業務データ判定部１６が、対象項目が業務データ項目であるか否かを判断することによって、点数計算部１５は、業務データ項目について点数を計算することができる。
【０１０４】
次に、優先情報設定部１９による処理のフローについて説明する。図１５は、優先情報設定部１９による処理のフローを示すフローチャートである。図１５に示すように、優先情報設定部１９は、特定の範囲でグループ化して扱うか否かを判定し（ステップＳ１２１）、特定の範囲でグループ化して扱わない場合には、ステップＳ１２７へ進む。
【０１０５】
一方、特定の範囲でグループ化して扱う場合には、優先情報設定部１９は、点数を合計したい範囲を取得する（ステップＳ１２２）。そして、優先情報設定部１９は、グループ化する範囲で業務要因量（Ｒ１）の値を加算する（ステップＳ１２３）。すなわち、優先情報設定部１９は、グループ化する範囲で業務要因量（Ｒ１）の和を計算する。
【０１０６】
そして、優先情報設定部１９は、グループ化する範囲で業務判断多重度（Ｒ２）の値を加算する（ステップＳ１２４）。すなわち、優先情報設定部１９は、グループ化する範囲で業務判断多重度（Ｒ２）の和を計算する。
【０１０７】
そして、優先情報設定部１９は、グループ化する範囲で業務計算量（Ｒ１−ｃｏｍｐ）の値を加算する（ステップＳ１２５）。すなわち、優先情報設定部１９は、グループ化する範囲で業務計算量（Ｒ１−ｃｏｍｐ）の和を計算する。
【０１０８】
そして、優先情報設定部１９は、グループ化する範囲の全てのプログラムの点数を取得したか否かを判定し（ステップＳ１２６）、取得していないプログラムがある場合には、ステップＳ１２２に戻る。
【０１０９】
一方、全てのプログラムの点数を取得した場合には、優先情報設定部１９は、指標値の合計値を利用するか否かを判定し（ステップＳ１２７）、指標値の合計値を利用しない場合には、各指標の値を基に散布図を作成する（ステップＳ１２８）。そして、優先情報設定部１９は、しきい値で優先度高の領域を分類、あるいは、原点からの距離で優先付し、優先付情報６として出力する（ステップＳ１２９）。
【０１１０】
一方、指標値の合計値を利用する場合には、優先情報設定部１９は、各指標の値を合計し（ステップＳ１３０）、各指標の値の合計値を高得点順に並べて優先付情報６として出力する（ステップＳ１３１）。そして、優先情報設定部１９は、指定業務情報５があるか否かを判定し（ステップＳ１３２）、指定業務情報５がない場合には処理を終了する。
【０１１１】
一方、指定業務情報５がある場合には、優先情報設定部１９は、指定業務情報５で設定されたキーワードを含む点数化の範囲に絞り込み（ステップＳ１３３）、絞り込んだ範囲で優先付して優先付情報６として出力する（ステップＳ１３４）。
【０１１２】
このように、優先情報設定部１９が優先付情報６を表示装置に出力することで、プログラム分析装置１は、設計者によるプログラムの分析を支援することができる。
【０１１３】
上述してきたように、実施例では、業務クラス判定部１１が、メソッド内でインスタンス変数を参照又は更新するか否かを判定することによって、対象クラスが業務データクラスであるか否かを判定し、判定結果を業務データクラス情報として出力する。そして、業務データクラス情報に基づいて、点数計算部１５が、プログラム単位、メソッド単位又は最上位の条件文単位で業務の複雑さを表す点数を計算し、点数情報を出力する。そして、優先情報設定部１９が、点数情報に基づいて、プログラム、メソッド又は最上位の条件文を優先付して優先付情報６として出力する。したがって、プログラム分析装置１は、プログラム、メソッド又は最上位の条件文の重要性に関する情報を提供することができる。このため、設計者は、重要性の高い部分から理解を進めることができ、プログラム分析装置１は、設計者による業務ロジックの理解を支援することができる。
【０１１４】
また、実施例では、業務データ判定部１６が、業務データクラス情報に基づいて、項目が業務データ項目であるか否かを判定し、点数計算部１５は、業務データ項目について点数を計算するので、プログラム分析装置１は、正確に点数を計算することができる。
【０１１５】
また、実施例では、対象範囲特定部１３が、点数を計算する範囲を特定するので、点数計算部１５は、対象範囲特定部１３により特定された範囲で点数を計算することで、正確に点数を計算することができる。
【０１１６】
また、実施例では、点数計算部１５は、業務の複雑さを表す指標として、業務要因量（Ｒ１）、業務判断多重度（Ｒ２）及び業務計算量（Ｒ１−ｃｏｍｐ）を計算する。そして、優先情報設定部１９は、業務要因量（Ｒ１）、業務判断多重度（Ｒ２）及び業務計算量（Ｒ１−ｃｏｍｐ）の合計値又は各指標に基づいて優先付を行う。したがって、プログラム分析装置１は、複数の観点で優先付を行うことができる。
【０１１７】
なお、実施例では、プログラム分析装置１について説明したが、プログラム分析装置１が有する構成をソフトウェアによって実現することで、同様の機能を有するプログラム分析プログラムを得ることができる。そこで、プログラム分析プログラムを実行するコンピュータについて説明する。
【０１１８】
図１６は、実施例に係るプログラム分析プログラムを実行するコンピュータのハードウェア構成を示す図である。図１６に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ（Central  Processing  Unit）５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【０１１９】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【０１２０】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【０１２１】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【０１２２】
そして、コンピュータ５０において実行されるプログラム分析プログラムは、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、プログラム分析プログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされたプログラム分析プログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【符号の説明】
【０１２３】
１    プログラム分析装置
２    プログラム
３    第１補助情報
４    第２補助情報
５    指定業務情報
６    優先付情報
１１    業務クラス判定部
１２    業務データクラス情報記憶部
１３    対象範囲特定部
１４    対象範囲情報記憶部
１５    点数計算部
１６    業務データ判定部
１７    業務データ項目情報記憶部
１８    点数情報記憶部
１９    優先情報設定部
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１】
2018045463.tif 000003
【図２Ａ】
2018045463.tif 000004
【図２Ｂ】
2018045463.tif 000005
【図３Ａ】
2018045463.tif 000006
【図３Ｂ】
2018045463.tif 000007
【図４】
2018045463.tif 000008
【図５Ａ】
2018045463.tif 000009
【図５Ｂ】
2018045463.tif 000010
【図５Ｃ】
2018045463.tif 000011
【図５Ｄ】
2018045463.tif 000012
【図６】
2018045463.tif 000013
【図７Ａ】
2018045463.tif 000014
【図７Ｂ】
2018045463.tif 000015
【図７Ｃ】
2018045463.tif 000016
【図７Ｄ】
2018045463.tif 000017
【図７Ｅ】
2018045463.tif 000018
【図８】
2018045463.tif 000019
【図９Ａ】
2018045463.tif 000020
【図９Ｂ】
2018045463.tif 000021
【図１０Ａ】
2018045463.tif 000022
【図１０Ｂ】
2018045463.tif 000023
【図１１】
2018045463.tif 000024
【図１２Ａ】
2018045463.tif 000025
【図１２Ｂ】
2018045463.tif 000026
【図１２Ｃ】
2018045463.tif 000027
【図１３Ａ】
2018045463.tif 000028
【図１３Ｂ】
2018045463.tif 000029
【図１４】
2018045463.tif 000030
【図１５】
2018045463.tif 000031
【図１６】
2018045463.tif 000032