(57)【要約】      （修正有）【課題】企業情報システムのプログラム分析把握において、プログラム関連図の作成・表示技術がある。大規模システムでは、プログラム関連図を構成するプログラム数が大量に存在するが、その概要を理解するのに時間がかからないようにする。【解決手段】プログラムファイルを分析し、プログラムの関連性を作成し表示するものであって、プログラムファイルの構文を解析しプログラム間の呼出情報とデータ項目の情報を入手し、プログラム関連図を作成し、また、データ項目の参照と更新の関係からグループ化を実施し、業務データ項目と関連するプログラムを抽出し、業務データ項目との関連性に基づきプログラムを分類し、プログラムの分類結果に基づきプログラム関連図を作成し表示する。【選択図】図１
2015102878.tif 000002
【特許請求の範囲】
【請求項１】
プログラムファイルを分析し、プログラムの関連性を作成し表示するプログラム関連分析装置であって、
前記プログラムファイルを受付る手段と、
受付けられた前記プログラムファイルの構文を解析しプログラム間の呼出情報とデータ項目の情報を入手し、プログラム関連図を作成する手段と、
前記データ項目の参照と更新の関係から、当該データ項目を業務毎の業務データ項目にグループ化を実施する手段と、
前記業務データ項目と当該業務データ項目に関連するプログラムを抽出する手段と、
前記業務データ項目との関連性に基づき、前記プログラムファイルに含まれるプログラムを分類する手段と、
前記プログラムの分類結果に基づきプログラム関連図を作成し表示する手段とを有することを特徴とするプログラム関連分析装置。
【請求項２】
請求項１に記載のプログラム関連分析装置であって、
前記グループ化を実現する手段は、プログラム動作の際に引数として取得するデータ項目を起点として、前記データ項目のグループ化を実施することを特徴とするプログラム関連分析装置。
【請求項３】
請求項１に記載のプログラム関連分析装置であって、
前記グループ化を実現する手段は、プログラム呼び出しの際に引数として利用するデータ項目を起点として、前記データ項目のグループ化を実施する手段を有することを特徴とするプログラム関連分析装置。
【請求項４】
請求項１に記載のプログラム関連分析装置であって、
前記プログラムを抽出する手段は、前記業務データ項目の属しているグループと関連する他グループを抽出することで関連するプログラムを抽出することを特徴とするプログラム関連分析装置。
【請求項５】
請求項１に記載のプログラム関連分析装置であって、
前記表示する手段は、プログラムと業務の関連に基づきプログラムを分類し、プログラム関連図を作成し表示することを特徴とするプログラム関連分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューティングシステムのプログラムの分析に関する。その中でも特に、所定の業務を行うための業務システムにおける分析とこの分析結果の出力する技術に関する。
【背景技術】
【０００２】
コンピューティングシステムにおいては、そこで使われるプログラムの分析が必要になっている。これは、当該システムのリプレイスや新たなシステムを開発する際などに、既存システムや開発中システムの内容を把握し、新たな開発へのフィードバックや既存システムの問題把握に役立てている。このような本技術分野の背景技術として、特開２００８−２９３４８６号公報（特許文献１）がある。この公報には、「関数呼び出し、ファイル、クラス、ライブラリなどの構造に基づいて複数のプログラムをモジュールという単位でグループ化し、その関連図を表示する。これにより、大量のプログラムの関連（以下プログラム関連図と呼ぶ）を解析目的に応じて効果的に表示できる。」と記載されている（要約参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２９３４８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
近年、リプレース案件の増加に伴い、既存アプリ分析・把握技術が注目されており、その技術のひとつとして、プログラム呼出関係をグラフ構造で表示したプログラム関連図の生成・表示が挙げられる。しかし、大規模システムでは、プログラム関連図を構成するプログラム数が大量に存在するため、プログラム関連図の概要を理解するのに時間がかかってしまう。前記特許文献１には、フォルダ構成や関数の呼び出し方等のプログラム構造に着目したグループ化を行うことで、プログラム関連図を効果的に表示している。
【０００５】
しかし、前記特許文献１には、フォルダ構成や関数の呼び出し方等のプログラム構造に着目したグループ化であるため、業務観点でプログラム関連図を効果的に表示するのは困難である。例えば、ひとつのプログラム関連図の中で、複数の業務処理を実装している場合、業務共通で実行される部分と業務個別で実行される部分を分類して表示することや、業務と無関係なログ出力やエラーチェックなどのシステム向け処理を実装している部分を省略して表示する等である。
【０００６】
一方、エンタープライズ向けの企業情報システムでは、業務に関係するデータを格納しているデータベースへの参照と更新が主な機能であり、業務とデータ項目の関係は把握できているケースが少なくない。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明は、プログラム関連図を構成するプログラムを業務と関連している業務データ項目に基づきグループ化することで、可読性を向上するものである。そのより具体的な態様として、例えば特許請求の範囲に記載の構成を採用する。つまり、本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、プログラムファイルを分析し、プログラムの関連性を作成し表示するプログラム関連分析方法であって、プログラムファイルの構文を解析しプログラム間の呼出情報とデータ項目の情報を入手し、プログラム関連図を作成する手段を備え、データ項目の参照と更新の関係からグループ化を実施する手段と、業務データ項目と関連するプログラムを抽出する手段と、業務データ項目との関連性に基づきプログラムを分類する手段と、プログラムの分類結果に基づきプログラム関連図を作成し表示する手段とを有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、プログラム関連図を構成する大量のプログラムを業務用データ項目に基づきグループ化することで、可読性を向上できる。これにより、例えば業務観点でのプログラム関連把握の作業時間を短縮することができる。
【０００９】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態におけるプログラム分析装置の構成図の例である。
【図２】本発明の一実施形態におけるプログラム分析装置の処理を説明するフローチャートの例である。
【図３】本発明の一実施形態におけるプログラム分析装置の構文解析の処理を説明するためのプログラムファイルの例である。
【図４】本発明の一実施形態におけるデータ項目のグルーピングの処理を説明するフローチャートの例である。
【図５】本発明の一実施形態におけるデータ項目のグルーピングの処理を説明するためのプログラムファイルの例である。
【図６】本発明の一実施形態における動作開始時引数別グルーピング結果１１４を説明するテーブルの例である。
【図７】本発明の一実施形態におけるデータ項目のグルーピングの処理を説明するためのプログラムファイルの例である。
【図８】本発明の一実施形態におけるＣＡＬＬ引数別グルーピング結果１１５を説明するテーブルの例である。
【図９】本発明の一実施形態におけるプログラム間引数対応一覧１１６を説明するテーブルの例である。
【図１０】本発明の一実施形態における業務データ項目と関連するプログラムの抽出の処理を説明するフローチャートの例である。
【図１１】本発明の一実施形態における業務データ項目一覧１１２を説明するテーブルの例である。
【図１２】本発明の一実施形態における業務データ項目・プログラム関連１１７を説明するテーブルの例である。
【図１３】本発明の一実施形態における業務データ項目と関連する呼出元プログラムを抽出するフローチャートの例である。
【図１４】本発明の一実施形態における業務データ項目と関連する呼出先プログラムを抽出するフローチャートの例である。
【図１５】本発明の一実施形態におけるプログラム分類結果１１８を説明するテーブルの例である。
【図１６】本発明の一実施形態における作業者に結果を表示する画面のイメージ図の例である。
【図１７】本発明の一実施形態における作業者に結果を表示する画面のイメージ図の例である。
【発明を実施するための形態】
【００１１】
以下、本発明の一実施形態を図面を用いて説明する。
本実施実施形態では、いわゆる業務システムのプログラム関連分析装置の例を説明する。
図１は、本実施例のプログラム関連分析装置の構成図の例である。
プログラム分析装置１は、ＣＰＵ１０、メインメモリ１１、記憶装置１２、入力装置１３、出力装置１４、及び通信インタフェース１５とからなる計算機であり、これらは内部バス等により接続される。ＣＰＵ１０は、記憶装置１２に格納されている部をメインメモリ１１に読み込み、実行することにより、種々の処理を行う。記憶装置１２は、プログラムファイルの構文を解析するプログラム構文解析部１０１、データ項目の参照と更新の関係からグループ化を実施するデータ項目グルーピング部１０２、業務データ項目と関連するプログラムを抽出する業務データ項目関連プログラム抽出部１０３、業務データ項目との関連性に基づきプログラムを分類するプログラム分類部１０４、プログラムの分類結果に基づきプログラム関連図を作成し表示するプログラム関連表示部１０５、分析対象となるプログラムファイル１１１、業務と関連している業務データ項目を格納している業務データ項目一覧１１２、各プログラムファイルの構文を解析した結果を格納するプログラム構文解析結果１１３、プログラム動作時に引数として取得するデータ項目（以下、動作開始時引数と呼ぶ）に着目してグループ化したデータ項目の情報を格納する動作開始時引数別グルーピング結果１１４、プログラム呼び出し時に引数として利用するデータ項目（以下、ＣＡＬＬ文引数と呼ぶ）に着目してグループ化したデータ項目の情報を格納するＣＡＬＬ引数別グルーピング結果１１５、ＣＡＬＬ文引数と動作開始時引数を対応付けした結果を格納するプログラム間引数対応一覧１１６、業務データ項目と関連するプログラムの情報を格納する業務データ項目・プログラム関連１１７、業務データ項目との関連性に基づきプログラムを分類した結果を格納するプログラム分類結果１１８を格納している。
【００１２】
図２は、本実施形態のプログラム関連分析装置の処理を説明するフローチャートの例である。以降、図２のフローチャートに基づいて、図１の各部の動作を説明する。
【００１３】
Ｓ１１プログラム構文解析では、プログラム構文解析部１０１がプログラムファイル１１１の構文を解析する。構文解析により、プログラム名称、データ項目情報、動作開始時引数情報、プログラム呼出情報を抽出し、プログラム構文解析結果１１３に格納する。データ項目情報はプログラムで使用しているデータ項目名称、型、サイズ、各データ項目を使用している箇所を示すデータ項目使用箇所、使用箇所でそのデータ項目が参照されているか更新されているかを示すデータ項目の利用方法等を格納している。動作開始時引数情報では各プログラムの動作開始時引数のサイズ、型などの情報を格納している。例えば、ＣＯＢＯＬの動作開始時引数はＬＩＮＫＡＧＥ  ＳＥＣＴＩＯＮで宣言しているデータ項目のことである。プログラム呼出情報は構文解析しているプログラムから呼び出している他プログラムの名称、他プログラムを呼び出している箇所を示すＣＡＬＬ文使用箇所、呼び出しているプログラムにどのデータ項目を引数としているかのＣＡＬＬ文引数名称を格納している。プログラム呼び出し引数の例としてＣＯＢＯＬの場合、ＣＡＬＬ文のＵＳＩＮＧ句で割り当てた引数があげられる。
【００１４】
次に、図３を例に、ここで説明した抽出する情報を示す。図３のプログラムは、動作開始時にデータ項目Ａ１を動作開始時の引数とし、行番号００１０１でＡ１に１を加えてデータ項目Ａ２に値をセットし、行番号００１０２でＰＧＭ００２を呼び出すプログラムである。プログラム構文解析部１０１は、プログラム名称として、ＰＧＭ００１を抽出する。データ項目情報としてＡ１は行番号００１０１で参照されていること、Ａ２は行番号００１０１で更新されており、行番号００１０２で参照されていることを抽出する。動作開始時引数情報としてＡ１を抽出する。プログラム呼出情報として行番号００１０２でＰＧＭ００２をよびだしており、その引数としてＡ２を使用していることを抽出する。
これらの情報を取得する手段は特許文献１や既存のコンパイラ技術の利用により実現可能である。
【００１５】
Ｓ１２データ項目グルーピングでは、データ項目グルーピング部１０２が動作開始時引数、ＣＡＬＬ文で引数として指定されたデータ項目を起点とし、データ項目の参照と更新の関係からグループ化を実施する。図４は、Ｓ１２の詳細フローチャートの例である。Ｓ１２１では、動作開始時引数名称を起点とし、それを参照しているデータ項目を追跡することでグループ化を行い、動作開始時引数別グルーピング結果１１４に結果を格納する。図５を例として説明する。図５は行番号００２０１で動作開始時引数Ａｒｇ１を参照してＡ１の値を更新し、行番号００２０２でＡ１を参照してＡ２の値を更新しているプログラムＰＧＭ００１である。また、行番号００３０１で動作開始時引数Ａｒｇ１を参照してＡ３の値を更新している。データ項目グルーピング部１０２は、データ項目情報を検索し、動作開始時引数であるＡｒｇ１を参照して値を更新するデータ項目であるＡ１、Ａ３を抽出する。次に抽出したデータ項目Ａ１もしくはＡ３を参照して値を更新するデータ項目Ａ２を抽出する。この作業を繰り返し、抽出するデータ項目が無くなった場合、抽出したデータ項目をまとめてひとつのグループとする。本例では、Ａｒｇ１，Ａ１，Ａ２，Ａ３がひとつのグループとなる。データ項目グルーピング部１０２は動作開始時引数別グルーピング結果１１４に結果を格納する。図６は動作開始時引数別グルーピング結果１１４の例である。プログラム名１１４１にＰＧＭ００１、動作開始時引数１１４２にＡｒｇ１、引数別データ項目グループ１１４３にＡｒｇ１，Ａ１，Ａ２，Ａ３、引数別グループＩＤに各レコードが一意になる識別子番号ＧＨ００１を格納する。
【００１６】
Ｓ１２２では、ＣＡＬＬ文の引数をキーとし、それを更新しているデータ項目を追跡し、グループ化を行い、ＣＡＬＬ文引数別グルーピング結果１１５に結果を格納する。図７を例として説明する。図７は行番号００４０１で動作開始時引数ＡＲＧ２を参照してＢ１の値を更新し、行番号００４０２でデータ項目Ｂ１を参照してＢ２の値を更新し、行番号００４０３でＰＧＭ００３というプログラムをＢ２を引数として呼び出しているプログラムＰＧＭ００２である。データ項目グルーピング部１０２は、データ項目情報を検索し、プログラム呼び出しの引数としているデータ項目Ｂ２の値を更新する時に参照しているデータ項目であるＢ１を抽出する。次に抽出したデータ項目Ｂ１の値を更新する際に参照しているデータ項目Ａｒｇ２を抽出する。この作業を繰り返し、抽出するデータ項目が無くなった場合、抽出したデータ項目をまとめてひとつのグループとする。本例では、Ｂ２、Ｂ１、Ａｒｇ２がひとつのグループとなる。データ項目グルーピング部１０２はＣＡＬＬ文引数別グルーピング結果１１５に結果を格納する。図８は、ＣＡＬＬ文引数別グルーピング結果１１５の例である。呼出元プログラム名１１５１にＰＧＭ００２、ＣＡＬＬ文行番号１１５２に００４０３、呼出先プログラム名１１５３にＰＧＭ００３、ＣＡＬＬ文引数１１５４にＢ２、ＣＡＬＬ別データ項目グループ１１５５にＢ２、Ｂ１、Ａｒｇ２、ＣＡＬＬ別グループＩＤに各レコードを識別する識別子番号を格納する。
【００１７】
なお、Ｓ１２１とＳ１２２の例では、各プログラムにひとつしかグループが存在しないように記述しているが、実際は、ひとつのプログラム内に複数のグループが存在する。
【００１８】
Ｓ１２３では、データ項目グルーピング部１０２がプログラム呼出情報に格納しているＣＡＬＬ文使用箇所に基づき、ＣＡＬＬ文引数名称と呼び出すプログラムの動作時引数の対応付けを行い、その結果をプログラム間引数対応一覧１１６に格納する。図９にプログラム間引数対応一覧１１６の例を示す。図７において、ＰＧＭ００３の動作開始時引数がＣ１の場合、プログラム間引数対応一覧１１６の呼出元プログラム名１１６１にＰＧＭ００２、ＣＡＬＬ文行番号１１６２に００４０３、ＣＡＬＬ文引数１１６３にＢ２、呼出先プログラム名１１６４にＰＧＭ００３、動作開始時引数１１６５にＣ１が格納される。
【００１９】
Ｓ１３業務データ項目関連プログラム抽出では、業務データ項目関連プログラム抽出部１０３が業務データ項目と同じグループに属するデータ項目を抽出することで、関連するプログラムを抽出する。図１０は、Ｓ１３の詳細フローチャートの例である。Ｓ１３１では、業務データ項目一覧１１２を参照して各業務と関連する業務データ項目の名称を取得し、取得した各業務データ項目がどのグループに属しているかを抽出し、その結果を業務データ項目・プログラム関連１１７に格納する。図１１に業務データ項目一覧１１２の例を示す。業務の名称を業務名１１２１、業務と関連するデータ項目を業務データ項目１１２２に格納している。図１２に業務データ項目・プログラム関連１１７の例を示す。業務データ項目名１１７１、業務データ項目名と関連するプログラムである関連プログラム１１７２、関連データ項目の属しているグループのＩＤであるグループＩＤ１１７３で構成される。
【００２０】
また、抽出手法の例として、プログラム構文解析結果１１３に格納したデータ項目情報の文字列検索などが挙げられる。
Ｓ１３２では、Ｓ１３１で抽出したプログラムを呼び出しているプログラムが業務データ項目の観点で関連しているかを判定する。図１３は、Ｓ１３２の詳細フローチャートの例である。
【００２１】
Ｓ１３２１では、動作開始時引数別グルーピング結果１１４を検索し、Ｓ１３１で抽出したプログラムの中で、業務データ項目を含むグループを抽出する。Ｓ１３２２では、抽出したグループに動作開始時引数が存在するかを確認する。存在すればＳ１３２３に進む。Ｓ１３２３では、プログラム間引数対応一覧１１６をＳ１３２２で抽出した動作開始時引数で検索し、呼出元プログラムとＣＡＬＬ文引数を取得する。Ｓ１３２４では、呼出元プログラムとＣＡＬＬ文引数の属しているグループ名を業務データ項目・プログラム関連１１７に登録する。Ｓ１３２５では、登録したグループに動作開始時引数が存在するかを確認する。存在すればＳ１３２３に戻る。Ｓ１３２６では、未調査のグループがあれば、Ｓ１３２２に戻り、未調査のグループに同様の処理を行う。
【００２２】
Ｓ１３３では、Ｓ１３１で抽出したプログラムから呼び出されているプログラムが業務データ項目の観点で関連しているかを判定する。図１４は、Ｓ１３３の詳細フローチャートの例である。Ｓ１３３１では、ＣＡＬＬ別グルーピング結果１１５を検索し、Ｓ１３１で抽出したプログラムの中で、業務データ項目を含むグループを抽出する。Ｓ１３３２では、抽出したグループにＣＡＬＬ文引数が存在するかを確認する。存在すればＳ１３３３に進む。Ｓ１３３３では、プログラム間引数対応一覧１１６をＳ１３３２で抽出したＣＡＬＬ文引数で検索し、呼出先プログラムと動作開始時引数を取得する。Ｓ１３３４では、呼出先プログラムと動作開始時引数の属しているグループ名を業務データ項目・プログラム関連１１７に登録する。Ｓ１３３５では、登録したグループにＣＡＬＬ文引数が存在するかを確認する。存在すればＳ１３３３に戻る。Ｓ１３３６では、未調査のグループがあれば、Ｓ１３３２に戻り、未調査のグループに同様の処理を行う。
【００２３】
Ｓ１４プログラム分類では、プログラム分類部１０４が、プログラムと業務の関連に基づき、業務特有の処理、複数業務利用の処理、エラー処理などの業務以外の処理に分類する。プログラム分類部１０４は、業務データ項目・プログラム関連１１７を検索し、各プログラムと関連する業務データ項目を抽出する。次に、業務データ項目一覧１１２に基づき、プログラムを業務観点で分類し、分類結果をプログラム分類結果１１８に格納する。図１５にプログラム分類結果１１８の例を示す。プログラム名１１８１、関連する業務名１１８２、分類パターン１１８３を格納している。分類パターン１１８３の例として、抽出した業務データ項目が全て同じ業務に属していた場合、そのプログラムは業務個別の処理とみなし、分類パターンを業務個別とする。また、複数の業務に属していた場合、複数共通の処理とみなし、分類パターンを業務共通とする。また、関連する業務データ項目が無い場合、業務以外の処理とみなし、分類パターンを業務以外とする。
【００２４】
Ｓ１５プログラム関連表示部では、プログラム分類結果１１８に基づき、プログラムを業務個別、業務共通、業務以外に分類し、プログラム関連図を表示する。図１６と図１７は表示の例である。図１６はユーザが業務名を指定し、その業務と関連するプログラムだけを強調表示している例であり、業務と関連しているプログラムであるＰＧＭ００１、００２、００３、０１１、０１２を表示し、それ以外のプログラムは非表示としている。図１７は業務共通で利用しているプログラムと業務個別で利用しているプログラムを強調表示している例である。
【符号の説明】
【００２５】
１０１    プログラム構造解析部
１０２    データ項目グルーピング部
１０３    業務データ項目関連プログラム抽出部
１０４    プログラム分類部
１０５    プログラム関連表示部
１１１    プログラムファイル
１１２    業務データ項目一覧
１１３    プログラム構文解析結果
１１４    動作開始時引数別グルーピング結果
１１５    ＣＡＬＬ引数別グルーピング結果
１１６    プログラム間引数対応一覧
１１７    業務データ項目・プログラム関連
１１８    プログラム分類結果
【図１】
2015102878.tif 000003
【図２】
2015102878.tif 000004
【図３】
2015102878.tif 000005
【図４】
2015102878.tif 000006
【図５】
2015102878.tif 000007
【図６】
2015102878.tif 000008
【図７】
2015102878.tif 000009
【図８】
2015102878.tif 000010
【図９】
2015102878.tif 000011
【図１０】
2015102878.tif 000012
【図１１】
2015102878.tif 000013
【図１２】
2015102878.tif 000014
【図１３】
2015102878.tif 000015
【図１４】
2015102878.tif 000016
【図１５】
2015102878.tif 000017
【図１６】
2015102878.tif 000018
【図１７】
2015102878.tif 000019