(57)【要約】【課題】業務システムを構成しているソースコードに基づく業務仕様の分析作業を効率よく行う。【解決手段】業務仕様分析支援装置は、業務システムを構成しているプログラムのソースコードによって実現される機能と上記機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求めるプログラムスライス算出部と、求めたプログラムスライスを構成する部品の夫々について、上記プログラムスライスの夫々に対する特有性の度合いを示す指標を求める特有性算出部と、上記指標に基づき上記部品の夫々の有用性を判定する有用性判定部と、有用と判定された上記部品に関する情報である有用情報をソースコードに基づき生成する有用情報生成部と、を備える。【選択図】図５
2018120341.tif 000002
【特許請求の範囲】
【請求項１】
業務システムを構成しているプログラムのソースコードによって実現される機能と前記機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求めるプログラムスライス算出部と、
求めた前記プログラムスライスを構成する部品の夫々について、前記プログラムスライスの夫々に対する特有性の度合いを示す指標を求める特有性算出部と、
前記指標に基づき前記部品の夫々の有用性を判定する有用性判定部と、
有用と判定された前記部品に関する情報である有用情報を前記ソースコードに基づき生成する有用情報生成部と、
を備える、業務仕様分析支援装置。
【請求項２】
請求項１に記載の業務仕様分析支援装置であって、
前記プログラムスライス算出部は、複数の前記機能の夫々について、一の前記機能と当該機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求め、
前記有用性判定部は、特定の前記機能についての前記プログラムスライスに対する前記有用性の指標が予め定められた閾値を超える前記部品を有用な部品と判定する、
業務仕様分析支援装置。
【請求項３】
請求項１に記載の業務仕様分析支援装置であって、
前記プログラムスライス算出部は、複数の前記機能の夫々について、一の前記機能と当該機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求め、
前記有用性判定部は、特定の前記変数についての前記プログラムスライスに対する前記有用性の指標が予め定められた閾値を超える前記部品を有用な部品と判定する、
業務仕様分析支援装置。
【請求項４】
請求項１乃至３のいずれか一項に記載の業務仕様分析支援装置であって、
前記有用性判定部は、特定の前記プログラムスライスに対する前記有用性の指標が予め定められた閾値を超える前記部品を有用と判定する、
業務仕様分析支援装置。
【請求項５】
請求項１乃至３のいずれか一項に記載の業務仕様分析支援装置であって、
前記特有性算出部は、前記部品ごとに重み付けを行って前記特有性の度合いを求める、
業務仕様分析支援装置。
【請求項６】
請求項１乃至３のいずれか一項に記載の業務仕様分析支援装置であって、
前記部品は、ソースコードの一部、メソッド、及びモジュールのうちの少なくともいずれかである、
業務仕様分析支援装置。
【請求項７】
請求項１乃至３のいずれか一項に記載の業務仕様分析支援装置であって、
前記変数は、変数群又は前記機能の影響を受けるデータに関するオブジェクトである、
業務仕様分析支援装置。
【請求項８】
請求項１乃至３のいずれか一項に記載の業務仕様分析支援装置であって、
前記有用情報生成部は、前記ソースコードの記述中に、有用と判定された前記部品の記述部分を強調表示した内容を含む情報を前記有用情報として生成する、
業務仕様分析支援装置。
【請求項９】
請求項１乃至３のいずれか一項に記載の業務仕様分析支援装置であって、
前記有用情報生成部は、前記ソースコードにおける有用と判定された前記部品の記述部分を集約した内容を含む情報を前記有用情報として生成する、
業務仕様分析支援装置。
【請求項１０】
請求項１乃至３のいずれか一項に記載の業務仕様分析支援装置であって、
前記スライシング基準の設定を受け付けるユーザインタフェースを備える、
業務仕様分析支援装置。
【請求項１１】
情報処理装置が、
業務システムを構成しているプログラムのソースコードによって実現される機能と前記機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求める第１ステップ、
求めた前記プログラムスライスを構成する部品の夫々について、前記プログラムスライスの夫々に対する特有性の度合いを示す指標を求める第２ステップ、
前記指標に基づき前記部品の夫々の有用性を判定する第３ステップ、
有用と判定された前記部品に関する情報である有用情報を前記ソースコードに基づき生成する第４ステップ、
を実行する、業務仕様分析支援方法。
【請求項１２】
請求項１１に記載の業務仕様分析支援方法であって、
前記情報処理装置が、
前記第１ステップにおいて、複数の前記機能の夫々について、一の前記機能と当該機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求め、
前記第３ステップにおいて、特定の前記機能についての前記プログラムスライスに対する前記有用性の指標が予め定められた閾値を超える前記部品を有用な部品と判定する、
業務仕様分析支援方法。
【請求項１３】
請求項１１に記載の業務仕様分析支援方法であって、
前記情報処理装置が、
前記第１ステップにおいて、複数の前記機能の夫々について、一の前記機能と当該機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求め、
前記第３ステップにおいて、特定の前記変数についての前記プログラムスライスに対する前記有用性の指標が予め定められた閾値を超える前記部品を有用な部品と判定する、
業務仕様分析支援方法。
【請求項１４】
請求項１１乃至１３のいずれか一項に記載の業務仕様分析支援方法であって、
前記情報処理装置が、前記第３ステップにおいて、特定の前記プログラムスライスに対する前記有用性の指標が予め定められた閾値を超える前記部品を有用と判定するステップ、
を実行する、業務仕様分析支援方法。
【請求項１５】
情報処理装置に、
業務システムを構成しているプログラムのソースコードによって実現される機能と前記機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求める機能と、
求めた前記プログラムスライスを構成する部品の夫々について、前記プログラムスライ
スの夫々に対する特有性の度合いを示す指標を求める機能と、
前記指標に基づき前記部品の夫々の有用性を判定する機能と、
有用と判定された前記部品に関する情報である有用情報を前記ソースコードに基づき生成する機能と、
を実現するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、業務仕様分析支援装置、業務仕様分析支援方法、及びプログラムに関する。
【背景技術】
【０００２】
特許文献１には、「プログラムドキュメントを作成する際の手助けとなる情報を出力するプログラムドキュメント作成補助装置に於いて、下位関数に至るまでの呼び出し関係を含むプログラムドキュメントの作成を容易にする情報を出力する。」、「キーワード検索部は、プログラムドキュメントの作成対象ソースプログラムを検索し、キーワード（変数名）を含む検索一致行を出力する。検索結果解析部は、その行の命令部分，コメント部分を含む分類データを出力する。検索結果解析部は、検索一致行に、キーワード，対応引数名が関数を呼び出す為の引数として設定されている場合は、呼び出し先の関数名を出力する。引数解析部は、関数内に於けるキーワードと対応する対応引数名を求め、引数検索部は、対応引数名を含む引数一致行を出力する。検索結果解析部は、引数一致行についても同様の処理を行う。」と記載されている。
【０００３】
特許文献２には、「既存のプログラム情報を解析して業務ルール情報を作成し、業務ルール情報とオブジェクト情報とからオブジェクトのメソッドを生成する方法において、メソッド種別に基づいて精度の高いメソッドを生成する。」、「業務ルール種判定は業務ルール情報とデータ項目情報を入力し、業務ルールの種別を判定して業務ルール情報を作成する。オブジェクト情報は各オブジェクトの属性の名称と種別を設定する。メソッド設定表はルール種別と属性種別とから定まるメソッド種別を設定する。業務ルール選択は対応するオブジェクトが存在する業務ルールを選択し、メソッド種特定はメソッド設定表を参照してメソッド種を特定し、メソッド設定以下の処理を経てメソッドを生成し、メソッド情報に格納する。」と記載されている。
【０００４】
特許文献３には、「複雑化された既存プログラムの論理を容易に抽出し、更に抽出された論理を再利用できるように整理し、新たなプログラム構造を生成する作業の効率化を図る。」、「既存プログラムを入力し、該プログラムの各トランザクションを、個々のデータ要素に分解し、分解したデータ要素を一対のデータ要素（２項オブジェクト）にて表現してその固有のプロセスより構成されるカプセルに置換し、カプセル化した該情報の重複排除を行い、再利用が可能なデータ蓄積構造へ格納し、カプセル化した該情報よりプログラム論理を抽出する。」と記載されている。
【０００５】
特許文献４には、「情報処理システムに使用されるソースプログラムから、従来に比較して、細かく、かつ一定の粒度により、業務モデル及び物理モデルを対応させて抽出するリバースエンジニアリング支援装置を提供する。」、「リバースエンジニアリング支援装置は、ソースプログラムの業務仕様の抽出を行う装置であり、ソースプログラムのソースコードから、コード種類、コード組合せ及びコード配置と、処理機能を示す単位プログラムとの対応関係が予め設定された第１ルールに従い、ソースコードから、処理機能に対応する単位プログラムを抽出する処理機能抽出部と、単位プログラムの処理機能の種類、組合せ及び配置順番と、単位プログラムの配置順番の変更、統廃合処理との対応関係を予め設定した第２ルールに従い、単位プログラムの配置順の変更、統合及び廃棄の統廃合処理を行い、物理モデルとして出力する処理機能統廃合部とを有する。」と記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−６３４９３号公報
【特許文献２】特開平１０−２４０５０８号公報
【特許文献３】特開平６−２１４７７２号公報
【特許文献４】特許第４８２０９２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
一般に業務システムのリプレースにおいては、新システムが既存のシステムの業務仕様の多くを踏襲していることが多く、新システムの開発者は旧システムの業務仕様を把握しておく必要がある。とくにリプレースが単なるソースコードのストレートコンバージョンに留まらず、業務仕様をＢＲＭＳ（Business Rules Management System）に管理するアーキテクチャへ変更するような場合、開発者等は旧システムの業務仕様を詳細に把握しておく必要がある。
【０００８】
しかし既存のシステムのドキュメントが存在しない、存在していても内容が正確でなかったり最新の状態に更新されていない、といったことも多く、そうした場合、開発者等は、既存システムのログ情報や最新の業務仕様が反映されたソースコードを分析して既存システムの仕様を把握しなければならない。しかし業務システムが抱えるソースコードの量は一般に膨大であり、またソースコードには業務仕様に直接貢献しない記述も多く含まれているため、分析に際しては多大な労力と時間、知見や経験を要する。そのため、作業の効率化が課題となっている。
【０００９】
ここで上記の特許文献１〜４には、プログラムの仕様を分析する技術が記載されている。しかしいずれの技術も、把握可能な業務仕様は低水準（プログラムのコール関係などの可視化）のものに限られ、またいずれの技術も全てのプログラムを等価に扱っているため、プログラムに反映されている業務仕様を必ずしも効率よく把握することはできない。また特許文献１の方法では業務仕様の理解のために開発者等がドキュメントの全体を理解する必要があるので人的負担が大きい。また特許文献２、３の方法では、例えば、複数の構造（モジュール、メソッド等）に跨がって実現されているような業務仕様については把握することができない。
【００１０】
本発明は、こうした背景に鑑みてなされたものであり、ソースコードに基づく業務仕様の分析作業を支援する、業務仕様分析支援装置、業務仕様分析支援方法、及びプログラムを提供することを目的としている。
【課題を解決するための手段】
【００１１】
本発明のうちの一つは、業務仕様分析支援装置であって、業務システムを構成しているプログラムのソースコードによって実現される機能と前記機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とした複数のプログラムスライスを求めるプログラムスライス算出部と、求めた前記プログラムスライスを構成する部品の夫々について、前記プログラムスライスの夫々に対する特有性の度合いを示す指標を求める特有性算出部と、前記指標に基づき前記部品の夫々の有用性を判定する有用性判定部と、有用と判定された前記部品に関する情報である有用情報を前記ソースコードに基づき生成する有用情報生成部と、を備える。
【００１２】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
【発明の効果】
【００１３】
本発明によれば、業務システムを構成しているソースコードに基づく業務仕様の分析作業を効率よく行うことができる。
【図面の簡単な説明】
【００１４】
【図１】部品の有用性を判定する方法の一態様を説明する図である。
【図２】部品の有用性を判定する方法の一態様を説明する図である。
【図３】部品の有用性を判定する方法の一態様を説明する図である。
【図４】業務仕様分析支援装置のハードウェア構成を示す図である。
【図５】業務仕様分析支援装置の機能及び業務仕様分析支援装置が記憶するデータを示す図である。
【図６】ソースコードの一例である。
【図７】部品情報テーブルの一例である。
【図８】スライス定義情報テーブルの一例である。
【図９】プログラム依存グラフの一例である。
【図１０】スライス情報テーブルの一例である。
【図１１】指標テーブルの一例である。
【図１２】正規化指標テーブルの一例である。
【図１３】有用性判定結果テーブルの一例である。
【図１４】有用情報の一例である。
【図１５】有用情報の一例である。
【図１６】有用部品情報生成処理を説明するフローチャートである。
【図１７】指標算出処理の詳細を説明するフローチャートである。
【図１８】有用性判定処理の詳細を説明するフローチャートである。
【発明を実施するための形態】
【００１５】
以下、実施形態について適宜図面を参照しつつ詳細に説明する。尚、以下の説明において、同一の又は類似する構成に共通の符号を付して重複した説明を省略することがある。
【００１６】
［概要］
企業や官公庁等の組織における業務支援を目的として導入されているエンタープライズシステム等の情報処理システム（以下、業務システムと称する。）は、業務仕様（業務ルール、業務ロジック、ビジネスルール等）の実装の観点から、一般に次のような特徴を有している。
【００１７】
（１）業務システムを実現しているソフトウェアのソースコードは、何らかの観点でメソッド化やモジュール化がなされている。
（２）業務システムの機能は、モジュールの組み合わせによって実現されている。
（３）モジュールは、業務システムのある機能に特有（固有）の処理を実現するものと、複数の機能について共通の処理を実現するものとに分類される。
（４）業務システムの機能は、入力側のリソース（画面、ファイル、データベース等）から取得されるデータに対して何らかの処理を施すことにより、出力側のリソースに出力するデータを生成する。
（５）業務仕様は、入力側のリソースから出力側のリソースを作成する際に通過するモジュールに必ず実現されている。
（６）業務システムの機能の処理対象となるデータは当該機能がサポートする業務に関して構造化されたオブジェクトである。
【００１８】
本実施形態で説明する業務仕様分析支援装置（以下、支援装置１０と称する。）は、業務システムが有する上記の特徴を踏まえ、以下の主たる機能を備える。
【００１９】
支援装置１０は、業務システムを構成しているプログラムのソースコードによって実現される機能と当該機能の影響を受ける複数の変数（変数群や機能の影響を受けるデータに
関するオブジェクト（例えば、データベースのテーブルやＤＡＯ（Data Access Object）等）であってもよい。）との複数の組み合わせの夫々をスライシング基準（slicing criterion）とした複数のプログラムスライスを求める。また支援装置１０は、求めたプログ
ラムスライスを構成する部品の夫々について、上記プログラムスライスの夫々に対する特有性（あるプログラムスライスに特有の部品であること）の度合いを示す指標を求める。尚、本実施形態では、上記特有性が高い程、上記指標は大きな値をとるものとする。支援装置１０は、上記指標に基づき上記部品の夫々の有用性を判定し、有用と判定された部品（以下、有用部品と称する。）に関する情報である有用情報をソースコードに基づき生成する。
【００２０】
上記の有用性の判定に際し、支援装置１０は、例えば、特定のプログラムスライスに対する特有性が高い（指標が予め定められた閾値を超える）部品を有用部品と判定する。尚、有用部品は業務仕様を抽出する観点からみて特徴のある情報を含んでいる可能性が高い。
【００２１】
上記判定について図１とともに説明する。同図には上記組み合わせの夫々をスライシング基準とする複数のプログラムスライス（機能Ｘと変数Ａ、機能Ｘと変数Ｂ、機能Ｘと変数Ｃの夫々をスライシング基準とするプログラムスライスＳ０１〜Ｓ０３）を例示している。
【００２２】
同図において、Ｍ１〜Ｍ５の符号を付した楕円は夫々一つの部品を示す。本例の場合、支援装置１０は、部品Ｍ２についてはプログラムスライスＳ０１に対して、部品Ｍ３についてはプログラムスライスＳ０２に対して、部品Ｍ４についてはプログラムスライスＳ０３に対して、夫々、特有性が高いと判定し、これらの部品を有用部品と判定する。一方、部品Ｍ１、Ｍ５については、いずれもプログラムスライスＳ０１〜Ｓ０３に共通に用いられている部品であるので特有性が低く、支援装置１０は、これらの部品は業務仕様を把握する観点からの有用性は低いと判定する。
【００２３】
また上記有用性の判定に際し、支援装置１０は、例えば、複数の上記機能の夫々について、一の機能と当該機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とする複数のプログラムスライスを求める。そして支援装置１０は、特定の機能についてのプログラムスライスに対する特有性の指標が予め定められた閾値を超える部品を有用部品と判定する。尚、このようにして有用部品と判定された部品は、特定の機能の主たる部品（メインメソッド、メインモジュール、ファサード（Facade）等）である可能性が高く、業務仕様を把握する観点からの有用性は高い（業務仕様を把握する観点から特徴のある情報を含んでいる可能性が高い）。
【００２４】
この場合の上記判定について図２とともに説明する。同図には上記組み合わせの夫々をスライシング基準とする複数のプログラムスライス（機能Ｘと変数Ａ、機能Ｘと変数Ｂ、機能Ｘと変数Ｃ、機能Ｙと変数Ｄ、機能Ｙと変数Ｅの夫々をスライシング基準とするプログラムスライスＳ０１〜Ｓ０５）を例示している。同図において、Ｍ１〜Ｍ８の符号を付した楕円は夫々一つの部品を示す。本例の場合、支援装置１０は、部品Ｍ１は機能ＸについてのプログラムスライスＳ０１〜Ｓ０３に対する特有性が高いと判定し、部品Ｍ１を有用部品と判定する。また支援装置１０は、部品Ｍ６は機能ＹについてのプログラムスライスＳ０４〜Ｓ０５に対する特有性が高いと判定し、部品Ｍ６を有用部品と判定する。
【００２５】
また上記有用性の判定に際し、支援装置１０は、例えば、複数の上記機能の夫々について、一の機能と当該機能の影響を受ける複数の変数との複数の組み合わせの夫々をスライシング基準とする複数のプログラムスライスを求める。そして支援装置１０は、特定の変数についてのプログラムスライスに対する特有性の指標が予め定められた閾値を超える部
品を有用部品と判定する。尚、このようにして有用部品と判定された部品は、データの編集や検証を行っている部品やＤＡＯメソッド等である可能性が高く、業務仕様を把握する観点からの有用性は高い（特徴のある情報を含んでいる可能性が高い）。
【００２６】
この場合の上記判定について図３とともに具体的に説明する。同図には上記組み合わせの夫々をスライシング基準とする複数のプログラムスライス（機能Ｘと変数Ａ、機能Ｙと変数Ａ、機能Ｚと変数Ａ、機能Ｐと変数Ｂ、機能Ｑと変数Ｂの夫々をスライシング基準とするプログラムスライスＳ０１〜Ｓ０５）を例示している。同図において、Ｍ１〜Ｍ８の符号を付した楕円は夫々一つの部品を示す。本例の場合、支援装置１０は、部品Ｍ５は変数ＡについてのプログラムスライスＳ０１〜Ｓ０３に対する特有性が高いと判定し、部品Ｍ５を有用部品と判定する。また支援装置１０は、部品Ｍ８は変数ＢについてのプログラムスライスＳ０４〜Ｓ０５に対する特有性が高いと判定し、部品Ｍ８を有用部品と判定する。
【００２７】
［装置構成］
続いて、以上の仕組みを実現するための具体的な装置構成について説明する。
図４に支援装置１０のハードウェア構成を示している。支援装置１０は、情報処理装置（コンピュータ）であって、プロセッサ１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５、及び通信装置１６を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。
【００２８】
プロセッサ１１は、例えば、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro Processing Unit）を用いて構成されている。プロセッサ１１が、主記憶装置１２に格納されているプログラムを読み出して実行することにより、支援装置１０の様々な機能が実現される。主記憶装置１２は、プログラムやデータを記憶する装置であり、例えば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、不揮発性半導体メモリ（ＮＶＲＡＭ（Non Volatile RAM））等である。
【００２９】
補助記憶装置１３は、例えば、ハードディスクドライブ、ＳＳＤ（Solid State Drive
）、光学式記憶装置（ＣＤ（Compact Disc）、ＤＶＤ(Digital Versatile Disc)等）、ストレージシステム、ＩＣカード、ＳＤメモリカードや光学式記録媒体等の記録媒体の読取／書込装置、クラウドサーバの記憶領域等である。補助記憶装置１３に格納されているプログラムやデータは主記憶装置１２に随時ロードされる。補助記憶装置１３は、例えば、ネットワークストレージのように通信手段を介して接続するものであってもよい。
【００３０】
入力装置１４は、外部入力を受け付けるユーザインタフェースであり、例えば、キーボード、マウス、タッチパネル等である。出力装置１５は、処理経過や処理結果等の各種情報を提供するユーザインタフェースであり、例えば、画面表示装置（液晶モニタ、ＬＣＤ（Liquid Crystal Display）、グラフィックカード等）、印字装置等である。尚、例えば、通信装置１６を介して他の装置との間で情報の入力や出力を行う構成、即ち、通信装置１６が、入力装置１４や出力装置１５として機能する構成としてもよい。
【００３１】
通信装置１６は、ＬＡＮやインターネット等の通信手段を介して行われる他の装置との間の通信を実現する有線方式または無線方式の通信インタフェースであり、例えば、ＮＩＣ（Network Interface Card）や無線通信モジュール等である。
【００３２】
図５に支援装置１０の機能及び支援装置１０が管理もしくは記憶するデータを示している。同図に示すように、支援装置１０は、ソースコード管理部２１１、部品情報管理部２１２、スライス定義情報管理部２１３、スライス算出部２１４、指標算出部２１５、指標正規化部２１６、有用性判定部２１７、及び有用情報生成部２１８の各機能を（機能部、
処理部）を備える。これらの機能は、例えば、支援装置１０のプロセッサ１１が、主記憶装置１２や補助記憶装置１３に格納されているプログラムを読み出して実行することにより実現される。またこれらの機能は、例えば、画面情報生成装置１００が備えるハードウェア（ＡＳＩＣ（Application Specific Integrated Circuit）等）によって実現される
。尚、支援装置１０は、これらの機能以外に、例えば、オペレーティングシステム、デバイスドライバ、ＤＢＭＳ（DataBase Management System）等が動作するものであってもよい。
【００３３】
同図に示すように、支援装置１０は、ソースコード２５１、部品情報テーブル２５２、スライス定義情報テーブル２５３、プログラム依存グラフ２５４、スライス情報テーブル２５５、指標テーブル２５６、正規化指標テーブル２５７、有用性判定結果テーブル２５８、及び有用情報２６０の各データを記憶する。支援装置１０は、これらのデータを、例えば、ファイルシステムやＤＢＭＳによって管理する。
【００３４】
ソースコード管理部２１１は、例えば、入力装置１４や通信装置１６を介してソースコードを取得し、取得したソースコードをソースコード２５１として記憶する。
【００３５】
図６はソースコード２５１の一例（一部省略行有り）である。ソースコード２５１は、支援装置１０による分析の対象となる業務システムの機能を実現するソフトウェアの実行コードの生成元となるデータである。ソースコード２５１は、所定のプログラミング言語（例えば、Ｃ言語、各種オブジェクト指向言語（Ｃ＋＋、Ｃ＃等）、各種オブジェクト指向スクリプト言語（ＪａｖａＳｃｒｉｐｔ（登録商標）等)、各種マークアップ言語（Ｈ
ＴＭＬ（Hyper Text Markup Language）、ＸＭＬ（Extensible Markup Language）等）で記述された記述文を含む。
【００３６】
部品情報管理部２１２は、ソースコード２５１に含まれている部品に関する情報（部品の所在や内容等。以下、部品情報と称する。）を部品情報テーブル２５２に管理する。部品情報テーブル２５２の内容は、例えば、入力装置１４や通信装置１６を介してユーザが設定する。
【００３７】
尚、本実施形態では、部品がソースコード２５１の一行分の記述（以下、コード片とも称する。）である場合を例として説明するが、部品の態様は限定されない。部品は、例えばソースコード２５１に含まれているメソッドやモジュールの一又は複数単位等であってもよい。
【００３８】
図７に部品情報テーブル２５２の一例を示す。同図に示すように、部品情報テーブル２５２は、コード片ＩＤ２５２１、モジュール名２５２２、記述位置２５２３、文種別２５２４、実体２５２５の各項目を含む一つ以上のレコード（行）で構成される。一つのレコードは一つの部品に対応している。
【００３９】
コード片ＩＤ２５２１には、コード片ごとに付与される識別子（以下、コード片ＩＤと称する。）が設定される。モジュール名２５２２には、当該コード片が記述されているモジュール（本例ではファイル）の識別子（本例ではファイル名。以下、モジュール名と称する。）が設定される。記述位置２５２３には、モジュール名２５２２で特定されるモジュールにおいて当該コード片が記述されている位置（以下、記述位置とも称する。）を示す情報が設定される。文種別２５２４には、コード片の種別（コード片が定義文であることを意味する「定義」、実行文であることを意味する「実行」、条件文であることを意味する「条件」等。以下、文種別と称する。）が設定される。実体２５２５には、部品の実体（本例ではコード片そのもの）が設定される。
【００４０】
図５に戻り、スライス定義情報管理部２１３は、スライシング基準等のプログラムスライスの算出に際して必要な情報をスライス定義情報テーブル２５３に管理する。スライス定義情報テーブル２５３の内容は、例えば、入力装置１４や通信装置１６を介してユーザが設定する。
【００４１】
図８にスライス定義情報テーブル２５３の一例を示す。同図に示すように、スライス定義情報テーブル２５３は、スライスＩＤ２５３１、開始位置２５３２、終了位置２５３３、及び追跡変数２５３４の各項目を含む一つ以上のレコード（行）で構成される。一つのレコードは、支援装置１０が算出するプログラムスライスの一つに対応している。
【００４２】
スライスＩＤ２５３１には、プログラムスライスごとに付与される識別子（以下、スライスＩＤと称する。）が設定される。開始位置２５３２には、プログラムスライスの開始位置を特定する情報が設定される。本例では、コード片ＩＤ、モジュール名、及び位置（行番号）によってプログラムスライスの開始位置を特定している。開始位置２５３２には、プログラムスライスの終了位置を特定する情報が設定される。本例では、コード片ＩＤ、モジュール名、及び位置（行番号）によってプログラムスライスの終了位置を特定している。追跡変数２５３４には、プログラムスライスが追跡の対称とする変数（以下、追跡変数と称する。）が設定される。
【００４３】
開始位置２５３２と終了位置２５３３とで特定されるソースコード２５１により実現される機能は、図１乃至図３とともに説明した「機能」に相当する。また追跡変数２５３４は、図１乃至図３とともに説明した「変数」に相当する。ユーザは、入力装置１４等のユーザインタフェースを介してスライス定義情報テーブル２５３を設定することで、図１乃至図３とともに説明したような様々な観点でソースコード２５１から有用部品を抽出することができる。
【００４４】
図５に戻り、スライス算出部２１４は、スライス定義情報テーブル２５３に基づき、ソースコード２５１のプログラムスライスを求める。スライス算出部２１４は、例えば、業務システムを実現するソフトウェアの全部、又は上記ソフトウェアの一部（例えば、特定のアプリケーションに関するソフトウェア）についてのソースコード２５１を対象としてプログラムスライスを算出する。スライス算出部２１４は、算出した結果をスライス情報テーブル２５５に記憶する。尚、プログラムスライスには、動的スライス、静的スライス、動的スライスと静的スライスを併用するもの（Ｃａｌｌ−Ｍａｒｋスライス、Ｓｔａｔｅｍｅｎｔ−Ｍａｒｋスライス、Ｄ３スライス、部分解析法等）等が知られているが、スライス算出部２１４が算出するプログラムスライスの種類は必ずしも限定されない。
【００４５】
図９はプログラムスライスを求める際に用いられるプログラム依存グラフ２５４（ＰＤＧ（Program Dependence Graph））の一例である。スライス算出部２１４は、プログラムスライスの算出に際し、例えば、同図に示すようなプログラム依存グラフ２５４を生成する。同図に示すプログラム依存グラフ２５４は、図６のソースコード２５１の内容、図７の部品情報テーブル２５２の内容、及び図８のスライス定義情報テーブル２５３の内容と対応している。同図に示すように、太い実線で示す矢線はデータ依存関係を、破線で示す矢線は直列の制御依存関係を、一点鎖線で示す矢線は条件分岐を含む制御依存関係を、細い実線で示す矢線は呼出の制御依存関係を、夫々示す。
【００４６】
図１０は、支援装置１０が図９に示したプログラム依存グラフ２５４に基づき生成するスライス情報テーブル２５５の一例である。同図において、スライスＩＤ２５５１には前述したスライスＩＤが設定される。コード片ＩＤ２５５２には前述したコード片ＩＤが設定される。
【００４７】
スライス情報テーブル２５５において、スライスＩＤ２５５１とコード片ＩＤ２５５２とで特定される欄（セル）には、「０」又は「０」以外の正の整数が設定される。本例では、プログラムスライスの構成部品のコード片の欄に「０」以外の正の整数を設定し、構成部品でないコード片ＩＤの欄には「０」を設定している。本例ではプログラムスライスの構成部品のコード片の欄に基礎値として「１」を設定している。
【００４８】
また本例では、スライスＩＤ２５５１が「Ｓ０１」のプログラムスライスのコード片ＩＤ２５５２が「Ｐ０７」の構成部品について、当該部品が条件文であることに基づく補正（重み付け）を行い、基礎値「１」を３倍して「３」を設定している。またスライスＩＤ２５５１が「Ｓ０２」のプログラムスライスのコード片ＩＤ２５５２が「Ｐ０７」の構成部品について、当該部品が条件文であることから補正を行い、基礎値「１」を２倍して「２」を設定している。
【００４９】
図５に戻り、指標算出部２１５は、スライス算出部２１４によって求められたプログラムスライス（スライス算出部２１４によって生成されたスライス情報テーブル２５５）に基づき前述した指標を算出し、算出結果を指標テーブル２５６に格納する。
【００５０】
図１１は指標テーブル２５６の一例である。同図において、スライスＩＤ２５６１にはスライスＩＤが設定される。またコード片ＩＤ２５６２にはコード片ＩＤが設定される。同図に示すように、プログラムスライスの構成部品となるコード片ＩＤの欄に指標が設定されている。
【００５１】
本例では、図１０に示すスライス情報テーブル２５５の各欄に設定されている数値に基づき指標を算出している。即ち、図１０のスライス情報テーブル２５５においてスライスＩＤ２５５１で特定されるプログラムスライスの列の数値の合計値（本例では「Ｓ０１」については「１７」、「Ｓ０２」については「２０」）を分母とし、図１０に示すスライス情報テーブル２５５の各欄に設定されている数値を上記合計値で除算した値を求め、求めた上記値に、さらにスライスＩＤ２５５１で特定される各列（本例では「Ｓ０１」と「Ｓ０２」で特定される各列）間での特有性（各列間の共通部品でない部品ほど特有性が高い）に応じた値を乗算した値を指標として設定している。尚、本例では、上記各列間での特有性を、以下に示すようなＴＦ／ＩＤＦ（Term Frequency／Inverse Document Frequency）類似の方法で求めている。
【００５２】
例えば、図１０において、スライスＩＤ２５５１が「Ｓ０１」のプログラムスライスの部品である「Ｐ０１」については、このプログラムスライスの構成部品（コード片）の数値の合計値（列合計）が「１７」、設定されている数値が「１」であり、この部品「Ｐ０１」はスライスＩＤ２５５１が「Ｓ０２」のプログラムスライスの部品でもあるので（スライスＩＤ２５５１が夫々「Ｓ０１」、「Ｓ０２」の２つのプログラムスライスの共通部品）、上記数値として「２／２」（２つ（分母）のプログラムスライスのうちの２つ（分子）のプログラムスライスの部品であるという意味）の逆数（２／２）を乗算した「１／１７×（２／２）＝「０．０５８８２３５２９」を図１１の指標テーブル２５６の該当欄に設定している。
【００５３】
また例えば、図１０において、スライスＩＤ２５５１が「Ｓ０２」のプログラムスライスの部品である「Ｐ０４」については、このプログラムスライスの構成部品（コード片）の数値の合計値（列合計）が「２０」、設定されている数値が「１」であり、この部品「Ｐ０４」はスライスＩＤ２５５１が「Ｓ０２」のプログラムスライスのみについての部品であるので（スライスＩＤが「Ｓ０２」のプログラムスライスに特有の部品）、上記数値として「１／２」（２つ（分母）のプログラムスライスのうちの１つ（分子）のプログラムスライスの部品であるという意味）の逆数（２／１）を乗算した「１／２０×（２／１
）＝「０．１」を図１１の指標テーブル２５６の該当欄に設定している。
【００５４】
図５に戻り、指標正規化部２１６は、指標算出部２１５によって求められた指標を正規化し、正規化した指標を正規化指標テーブル２５７に記憶する。
【００５５】
図１２は、図１１に示した指標テーブル２５６に基づき指標正規化部２１６が生成した正規化指標テーブル２５７の一例である。同図において、スライスＩＤ２５７１にはスライスＩＤが設定される。またコード片ＩＤ２５７２にはコード片ＩＤが設定される。
【００５６】
本例では、プログラムスライスの各構成部品に設定されている数値うち最大の数値（列内の最大値）を「１」として正規化している。例えば、図１１の指標テーブル２５６においてスライスＩＤ２５６１が「Ｓ０１」のプログラムスライスは、コード片ＩＤ２５６２が「Ｐ０７」の構成部品の数値が最大であるので、これを「１」として同列の各数値を正規化している。また例えば、図１１の指標テーブル２５６においてスライスＩＤ２５６１が「Ｓ０２」のプログラムスライスは、コード片ＩＤ２５６２が「Ｐ１１」の構成部品の数値が最大であるので、これを「１」として同列の各数値を正規化している。
【００５７】
図５に戻り、有用性判定部２１７は、正規化指標テーブル２５７に基づき、ソースコード２５１から業務仕様を把握しようとする際に有用な部品を選択する。具体的には、有用性判定部２１７は、正規化指標テーブル２５７の指標が予め設定された閾値を超える部品（コード片）を選択し、選択した結果を設定した有用性判定結果テーブル２５８を生成する。
【００５８】
図１３に図１２に示す正規化指標テーブル２５７に基づき有用性判定部２１７が生成する有用性判定結果テーブル２５８を示す。同図において、有用性判定部２１７が有用と判定した数値（部品（コード片））に「*」の記号が設定されている。本例では閾値を「０
．３」に設定している。閾値は、例えば、ユーザが経験則や実験に基づき、入力装置１４等のユーザインタフェースを介して自由に設定することができる。また閾値は、例えば機械学習等の手法を用いて自動的に求めてもよい。
【００５９】
図５に戻り、有用情報生成部２１８は、ソースコード２５１と有用性判定結果テーブル２５８とに基づき、業務仕様を把握しようとする際に有用な部品に関する情報（有用情報２６０）を生成し、生成した有用情報２６０を出力装置１５や通信装置１６から出力する。
【００６０】
図１４及び図１５に有用情報２６０の一例を示す。図１４に示す有用情報２６０は、ソースコード２５１の記述中に、有用部品の記述部分を強調表示した内容を含む。また図１５に示す有用情報２６０は、ソースコード２５１における有用部品の記述部分を集約（抜粋）した内容を含む。同図に示すように、各有用部品の記述には、有用部品の所在（有用部品が所属するファイル名やクラス名等）、部品間の呼出関係、プログラムスライシングを行った範囲を示す情報等を含む。有用情報２６０を参照することで、ユーザはソースコード２５１の全体を読み込むことなく業務仕様を効率よく把握することができる。
【００６１】
［処理例］
図１６は、支援装置１０が、ソースコードに基づき有用情報２６０を生成する際に行う処理（以下、有用部品情報生成処理Ｓ１６００と称する。）を説明するフローチャートである。以下、同図とともに有用部品情報生成処理Ｓ１６００について説明する。
【００６２】
まずソースコード管理部２１１は、既に入力装置１４や通信装置１６を介して分析の対象となるソースコード２５１を取得して記憶する（Ｓ１６１１）。
【００６３】
続いて、部品情報管理部２１２が、ソースコード２５１に基づき部品情報テーブル２５２を生成する（Ｓ１６１２）。
【００６４】
続いて、スライス定義情報管理部２１３が、入力装置１４や通信装置１６を介して入力される情報に基づきスライス定義情報テーブル２５３を生成する（Ｓ１６１３）。
【００６５】
続いて、スライス算出部２１４がプログラムスライスを算出し、算出結果をスライス情報テーブル２５５に格納する（Ｓ１６１４）。
【００６６】
続いて、指標算出部２１５が、スライス情報テーブル２５５に基づき特有性の指標を算出し、算出結果を指標テーブル２５６に格納する（Ｓ１６１５）。尚、この処理（以下、指標算出処理Ｓ１６１５と称する。）の詳細については後述する。
【００６７】
続いて、有用性判定部２１７が、指標テーブル２５６に基づき部品の有用性を判定し、評価結果を有用性判定結果テーブル２５８に格納する（Ｓ１６１６）。尚、この処理（以下、有用性判定処理Ｓ１６１６と称する。）の詳細については後述する。
【００６８】
続いて、有用情報生成部２１８が、有用性判定結果テーブル２５８に基づき有用情報２６０を生成し、生成した有用情報２６０を出力装置１５から出力する。
【００６９】
図１７は、図１６に示した指標算出処理Ｓ１６１５の詳細を説明するフローチャートである。以下、同図とともに指標算出処理Ｓ１６１５について説明する。
【００７０】
指標算出部２１５は、スライス情報テーブル２５５から未選択のプログラムスライス（スライスＩＤで特定されるプログラムスライス）を一つ選択する（Ｓ１７１１）。
【００７１】
続いて、指標算出部２１５は、スライス情報テーブル２５５の選択中のプログラムスライス（以下、選択中スライスと称する。）の各構成部品（コード片）の欄に基礎値（正の整数）を設定する（Ｓ１７１２）。
【００７２】
続いて、指標算出部２１５は、スライス情報テーブル２５５の各構成部品（コード片）の基礎値を補正（重み付け）する（Ｓ１７１３）。
【００７３】
続いて、指標算出部２１５は、スライス情報テーブル２５５に未選択のプログラムスライスがあるか否かを判定する（Ｓ１７１４）。未選択のプログラムスライスがあれば（Ｓ１７１４：ＹＥＳ）、Ｓ１７１１の処理に戻る。未選択のプログラムスライスがなければ（Ｓ１７１４：ＮＯ）、Ｓ１７１５の処理に進む。
【００７４】
Ｓ１７１５では、指標算出部２１５は、スライス情報テーブル２５５の各プログラムスライスについて構成部品の値の総和（各列の総和）を求める。
【００７５】
続いて、指標算出部２１５は、各プログラムスライスについて算出した総和を用いて各プログラムスライスの構成部品の指標を求める（Ｓ１７１６）。
【００７６】
続いて、指標算出部２１５は、算出した指標を設定した指標テーブル２５６を生成する（Ｓ１７１７）。その後、処理は図１６のＳ１６１６に進む。
【００７７】
図１８は、図１６に示した有用性判定処理Ｓ１６１６の詳細を説明するフローチャートである。以下、同図とともに説明する。
【００７８】
まず指標正規化部２１６が、指標テーブル２５６から未選択のプログラムスライス（スライスＩＤで特定されるプログラムスライス）を一つ選択する（Ｓ１８１１）。
【００７９】
続いて、指標正規化部２１６が、選択中のプログラムスライスの指標を正規化し（Ｓ１８１２）、結果を正規化指標テーブル２５７に反映する（Ｓ１８１３）。
【００８０】
続いて、指標正規化部２１６は、指標テーブル２５６に未選択のプログラムスライスがあるか否かを判定する（Ｓ１８１４）。未選択のプログラムスライスがあれば（Ｓ１８１４：ＹＥＳ）、Ｓ１８１１の処理に戻る。未選択のプログラムスライスがなければ（Ｓ１８１４：ＮＯ）、Ｓ１８１５の処理に進む。
【００８１】
Ｓ１８１５では、有用性判定部２１７が、正規化指標テーブル２５７から未選択のプログラムスライスを一つ選択する。
【００８２】
続いて、有用性判定部２１７が、選択中のプログラムスライスの各構成要素の正規化された指標を閾値と比較して有用性を判定し（Ｓ１８１６）、結果を有用性判定結果テーブル２５８に反映する（Ｓ１８１７）。
【００８３】
続いて、有用性判定部２１７は、正規化指標テーブル２５７に未選択のプログラムスライスがあるか否かを判定する（Ｓ１８１８）。未選択のプログラムスライスがあれば（Ｓ１８１８：ＹＥＳ）、Ｓ１８１５の処理に戻る。未選択のプログラムスライスがなければ（Ｓ１８１８：ＮＯ）、図１６のＳ１６１７の処理に進む。
【００８４】
以上、詳細に説明したように、本実施形態の支援装置１０によれば、業務システムにおけるソースコードから業務仕様を効率よく把握するために有用な情報（メソッド、モジュール、コード片等）を抽出することができる。このため、例えば、業務システムのリプレース等に際し、新システムの開発者等は、既存のシステムの業務仕様を効率よく把握することができる。
【００８５】
尚、本発明は上記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、上記の実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、上記実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００８６】
また上記の各構成、機能部、処理部、処理手段等は、それらの一部または全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、また
はＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【００８７】
また上記の各図において、制御線や情報線は説明上必要と考えられるものを示しており、必ずしも実装上の全ての制御線や情報線を示しているとは限らない。例えば、実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
【００８８】
また以上に説明した支援装置１０の各種機能部、各種処理部、各種データベースの配置形態は一例に過ぎない。各種機能部、各種処理部、各種データベースの配置形態は、支援装置１０が備えるハードウェアやソフトウェアの性能、処理効率、通信効率等の観点から
最適な配置形態に変更し得る。
【００８９】
また前述したデータベースの構成（スキーマ（Schema）等）は、リソースの効率的な利用、処理効率向上、アクセス効率向上、検索効率向上等の観点から柔軟に変更し得る。
【符号の説明】
【００９０】
１０  支援装置、２１１  ソースコード管理部、２１２  部品情報管理部、２１３  スライス定義情報管理部、２１４  スライス算出部、２１５  指標算出部、２１６  指標正規化部、２１７  有用性判定部、２１８  有用情報生成部、２５１  ソースコード、２５２
部品情報テーブル、２５３  スライス定義情報テーブル、２５４  プログラム依存グラフ、２５５  スライス情報テーブル、２５６  指標テーブル、２５７  正規化指標テーブル、２５８  有用性判定結果テーブル、２６０  有用情報、Ｓ１６００  有用部品情報生成処理、Ｓ１６１５  指標算出処理、Ｓ１６１６  有用性判定処理
【図１】
2018120341.tif 000003
【図２】
2018120341.tif 000004
【図３】
2018120341.tif 000005
【図４】
2018120341.tif 000006
【図５】
2018120341.tif 000007
【図６】
2018120341.tif 000008
【図７】
2018120341.tif 000009
【図８】
2018120341.tif 000010
【図９】
2018120341.tif 000011
【図１０】
2018120341.tif 000012
【図１１】
2018120341.tif 000013
【図１２】
2018120341.tif 000014
【図１３】
2018120341.tif 000015
【図１４】
2018120341.tif 000016
【図１５】
2018120341.tif 000017
【図１６】
2018120341.tif 000018
【図１７】
2018120341.tif 000019
【図１８】
2018120341.tif 000020