(57)【要約】【課題】  形式概念分析から得られる情報をより有益なものとするとともに、抽出された特徴に関わるソースコード読解の手間を軽減する。【解決手段】  本発明は、プログラムへの入力操作の集合であり、該プログラムの典型的な機能を網羅するシナリオ群の実行に関するトレース情報が格納されている実行トレース記憶手段と、シナリオをオブジェクトとし、トレース情報に出現するモジュールを属性とする形式文脈を抽出する形式文脈抽出手段と、形式文脈を形式概念分析の手法で分析し、概念束を生成する概念分析手段と、概念束に含まれるモジュールを系列パターンマイニングの手法で分析し、モジュールの頻出系列を抽出する系列パターンマイニング手段と、を有する。【選択図】  図１
2014225198.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの構造や処理の理解を支援するためのプログラム分析装置であって、
プログラムへの入力操作の集合であり、該プログラムの典型的な機能を網羅するシナリオ群の実行に関するトレース情報が格納されている実行トレース記憶手段と、
前記シナリオをオブジェクトとし、前記トレース情報に出現するモジュールを属性とする形式文脈を抽出する形式文脈抽出手段と、
前記形式文脈を形式概念分析の手法で分析し、概念束を生成する概念分析手段と、
前記概念束に含まれるモジュールを系列パターンマイニングの手法で分析し、モジュール間の依存関係を抽出する系列パターンマイニング手段と、
を有することを特徴とするプログラム分析装置。
【請求項２】
前記系列パターンマイニング手段は、
前記概念束のうち理解したい形式概念を選択し、選択した該形式概念が関連するシナリオ群のトレース情報のみを入力として、該形式概念と関係するトレース情報と該トレース情報の部分系列となるモジュールとその頻出系列を出力する手段を含む
請求項１記載のプログラム分析装置。
【請求項３】
プログラムの構造や処理の理解を支援するためのプログラム分析方法であって、
プログラムへの入力操作の集合であり、該プログラムの典型的な機能を網羅するシナリオ群の実行に関するトレース情報が格納されている実行トレース記憶手段と、
形式文脈抽出手段、概念分析手段、系列パターンマイニング手段を有する装置において、
前記形式文脈抽出手段が、前記シナリオをオブジェクトとし、前記トレース情報に出現するモジュールを属性とする形式文脈を抽出する形式文脈抽出ステップと、
前記概念分析手段が、前記形式文脈を形式概念分析の手法で分析し、概念束を生成する概念分析ステップと、
前記系列パターンマイニング手段が、前記概念束に含まれるモジュールを系列パターンマイニングの手法で分析し、モジュール間の依存関係を抽出する系列パターンマイニングステップと、
を行うことを特徴とするプログラム分析方法。
【請求項４】
前記系列パターンマイニングステップにおいて、
前記形式概念のうち理解したい形式概念を選択し、選択した該形式概念が関連するシナリオ群のトレース情報のみを入力として、該形式概念と関係するトレース情報と該トレース情報の部分系列となるモジュールとその頻出系列を出力する
請求項３記載のプログラム分析方法。
【請求項５】
コンピュータを、
請求項１または２記載のプログラム分析装置の各手段として機能させるためのプログラム分析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム分析装置及び方法及びプログラムに係り、特に、形式概念分析と系列パターンマイニングを併用し、情報処理システムを構成する電子計算機向けのプログラムのソースコードのリバースエンジニアリングにおけるプログラム分析装置及び方法及びプログラムに関する。
【背景技術】
【０００２】
様々な業務が電子計算機を利用した情報処理システムとして実現されている。これらの情報処理システムの動作は、プログラミング言語を使用したプログラムとして記述されている。プログラム言語で記述されたプログラムはソースコードと呼ばれる。
【０００３】
プログラミング言語は、電子計算機が解釈し実行することを目的としたものであるが、プログラムの保守や機能追加のための開発を実施する場合には、人間が既存のソースコードを読解し、プログラムの構造や処理の内容を理解する必要がある。係るプログラムを理解するための行為がリバースエンジニアリングである。
【０００４】
リバースエンジニアリングには様々な手法が存在するが、その中に形式概念分析を用いた手法が存在する。
【０００５】
形式概念分析（Formal Concept Analysis）は、数学的な束論（Lattice Theory）を応用した一分野である。オブジェクトの集合Gと、Gに属するオブジェクトが保有する属性の集合Mが有り、どのオブジェクトがどの属性を保有するのかを記述した対応表（形式文脈：Formal Context）が存在する場合に、Gの部分集合であるAとMの部分集合Bについて、Bの要素である属性の全てが、それぞれAの要素であるオブジェクトに保有され、かつ、Aの要素であるオブジェクトの全てに共通する（または、オブジェクトを共通して保有する）属性の集合がBに等しく、かつ、Bの要素である属性全てを保有するオブジェクトの集合がAに等しい、という規則を満たすAとBの組み合わせ（形式概念：Formal Concept）に分類する方法である。形式概念の分類にあたっては、ある形式概念（A1、B1）と別の形式概念（A2、B2）において、A2がA1の部分集合になっている場合には、B1はB2の部分集合になっており、（A1、B1）と（A2、B2）の間に半順序関係が定義できる。このような順序により関係づけられた形式概念の集合は、束の公理を満たすことから、数学的な束論の手法を適用することが可能になる。形式概念の集合を束として表現したものを、概念束（Concept Lattice）と呼ぶ。意味のわかりにくい形式文脈から、形式概念を抽出し、概念束を形成することで形式概念同士の関係を発見することが形式概念分析と呼ばれる手法である。
【０００６】
係る形式概念分析の手法により、ソースコードに含まれるプログラムの部品を分類することで、プログラムの構造や処理の内容を理解するリバースエンジニアリングを実施することが本発明の属する技術分野である。
【０００７】
形式概念分析の手法を利用して、リバースエンジニアリングを実施することの従来の技術としては、非特許文献１に示す技術が存在する。
【０００８】
当該技術では、プログラムを幾つかのシナリオに沿って起動した場合に、それらのシナリオに含まれるプログラムの特徴（Feature）を特定するとともに、その特徴を構成するプログラムの部品「モジュール」を特定する。モジュールとは、例えば手続き型言語における手続き（Procedure）や、オブジェクト指向言語におけるメソッド（Method）などである。
【０００９】
当該技術では、各々のシナリオをオブジェクトとし、シナリオを起動した場合に実行されるプログラムのモジュールを属性とみなして形式文脈を形成し、形式概念分析の手法を適用する。オブジェクトであるシナリオと、属性であるプログラムのモジュールとの間で形式概念を抽出し、概念束を形成することで、シナリオ群に含まれるプログラムの特徴（Feature）が形式概念分析の結果である形式概念として見つけ出せ、同時に概念であるところのプログラムの特徴が、どのような属性、すなわちプログラムのモジュールから構成されるのかを判別することができる。
【００１０】
更に本発明に関係するもう１つの背景技術に、系列パターンマイニングが存在する。系列パターンマイニング（Sequential Pattern Mining）は、非特許文献２により提唱された、順序を有する要素の列の集合から、頻出する要素の部分系列を検出する技術である。系列パターンマイニングを実施するためのアルゴリズムは、PrefixSpan（非特許文献３）、CloSpan（非特許文献４）、BIDE（非特許文献５）など複数が提唱されている。
【００１１】
系列パターンマイニングの手法を利用してリバースエンジニアリングを実施することの従来の技術としては非特許文献６が存在する。この技術は、ソフトウェアの複数の機能を実行した際の複数の実行トレースから、系列パターンマイニングを行ってモジュールの頻出系列を発見するというものである。この技術の問題点は頻出するものであれば全てのモジュールの頻出系列が結果として出力されるため、保守や理解の対象となるモジュールの頻出系列を見つけにくいということである。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】Locating features in source code, Eisenbarth, T.; Koschke, R.; Simon, D.; IEEE Transactions on Software Engineering, Volume: 29 , Issue: 3, Digital Object Identifier: 10.1109/TSE.2003.1183929, Publication Year: 2003 , Page(s): 210 - 224.
【非特許文献２】Mining sequential Patterns, Agrawal, R; Srikant, R.; 11th International Conference on Data Engineering (ICDE'95), Digital Object Identifier: 10.1109/ICDE.1995.380415, Publication Year: 1995 , Page(s): 3 - 14.
【非特許文献３】PrefixSpan: mining sequential patterns efficiently by prefix-projected pattern growth, Pei, J.; Han, J.; Mortazavi-Asl, B.; Chen, Q.; Dayal, U.; Hsu, M.C.; 17th International Conference on Data Engineering (ICDE'01), Digital Object Identifier: 10.1109/ICDE.2001.914830, Publication Year: 2001, Page(s): 215 - 224.
【非特許文献４】CloSpan: Mining Closed Sequential Patterns in Large Databases, X. Yan, J. Han, and R. Afshar,; SDM'03, San Francisco, CA, May 2003.
【非特許文献５】BIDE: Efficient Mining of Frequent Closed Sequences, Wang, J.; Han, J.; 20th International Conference on Data Engineering (ICDE'04), Digital Object Identifier: 10.1109/ICDE.2004.1319986, Publication Year: 2004, Page(s): 79 - 90.
【非特許文献６】Dynamic Analysis of Software Systems using Execution Pattern Mining, Hossein Safyallah and Kamran Sartipi ; Proceedings of the 14th IEEE International Conference on Program Comprehension (ICPC'06) Digital Object Identifier: 10. 1109/ICPC. 2006. 19, Publication Year: 2006, Page(s): 84 - 88.
【発明の概要】
【発明が解決しようとする課題】
【００１３】
非特許文献１により開示された従来技術では、プログラムを幾つかのシナリオに沿って動作させ、シナリオをオブジェクトとし、シナリオの中で実行されるプログラムの部品「モジュール」を属性とし、形式概念分析を行なうことにより、モジュールの部分集合が概念として抽出される。すなわち、シナリオの実行により個々のモジュールが起動されることだけしかわからない。このため、形式概念分析の手法を適用する目的である、プログラムの構造や処理の内容の理解に向けては限定的な情報が得られるに留まっている。したがって、抽出された特徴に含まれるモジュールについてそれぞれソースコードを読解し、関係を紐解く必要があった。
【００１４】
本発明は、上記の点に鑑みなされたもので、形式概念分析から得られる情報をより複雑なものとするとともに、抽出された特徴に関わるソースコード読解の手間を軽減することが可能なプログラム分析装置及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記の課題を解決するため、本発明（請求項１）は、プログラムの構造や処理の理解を支援するためのプログラム分析装置であって、
プログラムへの入力操作の集合であり、該プログラムの典型的な機能を網羅するシナリオ群の実行に関するトレース情報が格納されている実行トレース記憶手段と、
前記シナリオをオブジェクトとし、前記トレース情報に出現するモジュールを属性とする形式文脈を抽出する形式文脈抽出手段と、
前記形式文脈を形式概念分析の手法で分析し、概念束を生成する概念分析手段と、
前記概念束に含まれるモジュールを系列パターンマイニングの手法で分析し、モジュール間の依存関係を抽出する系列パターンマイニング手段と、を有する。
【００１６】
また、本発明（請求項２）は、前記系列パターンマイニング手段において、
前記概念束のうち理解したい形式概念を選択し、選択した該形式概念が関連するシナリオ群のトレース情報のみを入力として、該形式概念と関係するトレース情報と該トレース情報の部分系列となるモジュールとその頻出系列を出力する手段を含む。
【発明の効果】
【００１７】
情報システムの保守や機能拡充を実施する場合、その対象となる機能の実装箇所を特定し、それらの振舞いを素早く理解する必要が生じる。
【００１８】
上記のように本発明によれば、形式概念分析で特徴を抽出した後に、理解したい特徴が関係するシナリオのトレース情報のみを用いて系列パターンマイニングを実施するので、系列パターンマイニングを実施する際の入力の規模を削減することが可能となり、従来では系列パターンマイニングを適用することが出来ないような規模の実行トレースも解析可能となる。
【００１９】
従って、形式概念分析で抽出される特徴に含まれるモジュール間の実行順序関係を、ソースコードを読み解くことなく抽出でき、抽出された特徴に関わるソースコード読解の手間を軽減することが可能となる。特に近年の情報処理システムではオブジェクト指向言語が多用されており、従来の手続き型言語と比較して、理解したい機能に関係するモジュールがプログラム中に分散しているため、それらの特定や、それらの振舞い(実行順序)の理解が容易になるという効果が得られる。
【００２０】
また、Webフレームワークが使用されているようなプレゼンテーション層、アプリケーション層、データ層からなるWeb3層システムの理解に際しては、従来技術では出力できなかった、1つの機能に含まれるモジュール群の、プレゼンテーション層からアプリケーション層、アプリケーション層からデータ層、またはそれらの層を逆に跨ぐような実行順序関係を出力することが可能となる。従って、この様なWebアプリケーションの理解が容易になるという効果が得られる。
【図面の簡単な説明】
【００２１】
【図１】本発明の一実施の形態におけるプログラム分析装置の構成図である。
【図２】本発明の一実施の形態におけるプログラム分析装置の概要動作のフローチャートである。
【図３】本発明の一実施の形態における実行トレース記憶部の格納形式である。
【図４】本発明の一実施の形態におけるプログラム分析装置のステップ２５０の詳細なフローチャートである。
【図５】本発明の一実施の形態における分析の対象となるWebアプリケーションの例である。
【図６】本発明の一実施の形態におけるシナリオ実行により取得した実行トレース情報の例である。
【図７】本発明の一実施の形態における実行トレース情報から得られる形式文脈の例である。
【図８】本発明の一実施の形態における図７より得られる概念束の例である。
【図９】本発明の一実施の形態における実行トレースの部分系列の例である。
【図１０】本発明の一実施の形態における図９の実行トレースの部分系列から得られる頻度２以上の部分系列である。
【図１１】本発明の一実施の形態における図９の実行トレースからPrefixSpanにより得られる射影データベースである。
【図１２】本発明の一実施の形態における図６の実行トレースからPrefixSpanにより得られる射影データベースである。
【発明を実施するための形態】
【００２２】
以下、図面と共に本発明の実施の形態を説明する。
【００２３】
本願発明では、前述の非特許文献１により開示された従来技術と同様、プログラムを幾つかのシナリオに沿って起動した場合に、シナリオの起動により実行されるモジュールを特定する。シナリオをオブジェクト、実行されるモジュールを属性として形式文脈を作成する。この形式文脈に対し形式概念分析の手法を適用して、形式概念を抽出し、概念束および希薄な概念束を形成することで、プログラムの特徴としてモジュールの集合を見つけ出すことができる。そのモジュールの集合に系列パターンマイニングの手法を適用することにより、特徴に含まれるモジュールの実行順序の関係までを見つけ出すことを特徴とする。
【００２４】
最初に本明細書で用いる用語について説明する。
【００２５】
・機能：シナリオにより起動され、システム利用者が実施する操作を入力とし、その操作とプログラムにより記述された手順に従った処理が為され、その処理の結果が出力されるものをいう。例えば、ログイン機能の場合は、ユーザから入力されたＩＤ及びパスワードについて照合処理を行い、照合結果の出力や次の画面への移動を行う。
【００２６】
・理解したい機能：システム利用者が、目的を果たすためにシステム上で実施した操作により起動される、一連の機能のうち、選択した一機能を指す。
【００２７】
・形式概念分析（Formal Concept Analysis）：数学の束論を応用した一分野（例えば、http://www.upriss.org.uk/fca/、http://en.wikipedia.org/wiki/Formal_concept_analysis参照）。
【００２８】
・オブジェクト：形式概念分析が分析の対象とする物事。非特許文献１、本実施の形態では、プログラムの機能を起動する入出力の集合（シナリオ）。
【００２９】
・属性：形式概念分析の対象であるオブジェクトが必ず保有する性質。本発明では、シナリオにより起動されるモジュール。実行トレースに出現したモジュールをオブジェクト（シナリオ）の属性として扱う。
【００３０】
・形式文脈：どのオブジェクトが、どの属性を保有するのかを記述した対応表。
【００３１】
・形式概念：形式概念分析により発見される、オブジェクトの部分集合が保有する属性の部分集合。本発明では、プログラムの機能を実現するモジュールを形式概念として発見する。
【００３２】
・概念束：形式概念を数学の束（そく）として表現したもの。
【００３３】
・希薄な概念束：概念束を、下位概念との属性の差分のみを記述する形で表現したもの。
【００３４】
・モジュール：プログラムを構成する部品。サブルーチンや、ブラウザに送信されるHTML文書などが代表例だが、これに限定されない。当明細書では、プログラムの実行に伴い起動される画面、処理、テーブルが含まれる。
【００３５】
・シナリオ：プログラムの入力装置の集合。本発明や従来技術では、プログラムの機能を起動し、モジュールのトレースを取得するために使用する。取得したシナリオによるトレース情報を形式概念分析のオブジェクトとして扱う。
【００３６】
・系列パターンマイニング：与えられた系列の集合から頻出する部分系列をパターンとして抽出する手法。系列の集合と、部分系列の最小出現頻度を入力とし、系列の集合内の最小出現頻度を満たす部分系列（頻出系列）が出力となる。
【００３７】
・系列：順序を有する要素の列。
【００３８】
・部分系列：系列からその一部の要素を抜き出し、順序を保ったまま並べた列。
【００３９】
・実行トレース：シナリオにより起動されたモジュールの情報が、起動された順に並んだ系列であり、シナリオを起動してログを録ることにより作成され、形式概念分析及び系列パターンマイニングの入力として使用される。
【００４０】
以下に、本実施の形態を詳細に説明する。
【００４１】
本発明では、
１）  理解の対象となるソースコード；
２）  プログラムへの入力操作の集合であり、プログラムの典型的な機能を網羅するシナリオ群；
３）  シナリオを起動した際に、実行されるモジュールの実行トレースを取得する手段；
４）  シナリオをオブジェクトとし、シナリオにより実行されるモジュールを属性とする形式文脈を抽出する手段；
５）  形式文脈を形式概念分析の手法で分析する手段；
６）  理解したい形式概念を選択し、その形式概念に固有でない実行トレースを判別、除去する手段；
７）  系列パターンマイニングを実行するための手段；
を使用することが最良の形態である。１）に対し、２）を定義し、３）によりトレースを取得する。さらにトレースを用いて、４）としてシナリオをオブジェクト、シナリオ実行時に実行されるモジュールを属性とする形式文脈を構成する。これに対し５）を施して、６）により必要の無い情報を判別除去し、７）によりモジュール間の依存関係(実行順序)分析を行なうことで、本願発明が実施可能となる。
【００４２】
１）の理解の対象となるソースコードとして、例えば、Java（登録商標）やJavaScript（登録商標）などのプログラミング言語で記述されたWebアプリケーションのソースコードが該当する。
【００４３】
２）のシナリオ群として、例えば、１）のプログラムの操作説明書などを元に、プログラムが実現する機能を起動するための操作手順が該当する。
【００４４】
３）の依存関係を特定する手段としては、例えば、プログラムの実行を追跡（トレース）することにより、どのモジュールがいつ実行されたかを特定することが可能な、デバッガと呼ばれるツールが利用可能である。デバッガには様々なものが存在するが、例えばJava（登録商標）のデバッガであるjdbや、ウェブサイトのHTML、XML、JavaScript（登録商標）などの記述や修正、デバッグなどを行うことができるFirebugなどが知られている。
【００４５】
５）の形式概念分析の手法の例としては、形式概念分析を実施するためのツールが複数存在し、Concept Explorer（http://conexp.sourceforge.net/）、ToscanaJ（http://toscanaj.sourceforge.net/）はオープンソースプログラムとして公開されている。
【００４６】
図1は、本発明の一実施の形態におけるプログラム分析装置の構成を示す。
【００４７】
同図に示すプログラム分析装置１００は、トレース部１１１、トレース結合部１１２、系列パターン抽出部１１３、形式文脈抽出部１１４、概念分析部１１５、部分系列抽出部１１６を有するＣＰＵ１１０、形式文脈記憶部１２１を格納したメモリ１２０、トレースファイルを格納した実行トレース記憶部１３１を有する磁気ディスク１３０、から構成される。
【００４８】
以下に、形式概念分析及び系列パターンマイニングを用いたプログラム分析装置の動作を説明する。
【００４９】
図２は、本発明の一実施の形態におけるプログラム分析装置の概要動作のフローチャートである。
【００５０】
ステップ２１０）  CPU１１０のトレース部１１１において、解析対象プログラムの典型的な機能を網羅するシナリオ群（入力操作の集合）を解析対象プログラムに入力として与え、そのシナリオに沿ってプログラムを実行することで、その際に起動されるモジュールが判別され、シナリオ群の実行に関する各層でのトレース情報が磁気ディスク上の実行トレース記憶部１３１に出力される。なお、トレース部１１１として、Firebug等のデバッガを用いるものとする。また、本明細書では多層システムの簡単な例としてプレゼンテーション層、アプリケーション層、データ層からなるWeb3層システムを用いる。また、本明細書におけるシナリオとは、ユーザ情報登録、商品閲覧処理、商品購入処理を想定する。
【００５１】
ステップ２２０）  ステップ２１０にて取得した、各層における実行トレース情報を入力とし、CPU１１０のトレース結合部１１２にて実行された時刻をもとに結合し、シナリオ実行時の各層の実行トレースを一つの実行トレースファイルに集約し、磁気ディスク１３０の実行トレース記憶部１３１に出力する。実行トレース記憶部１３１における格納形式の例を図３に示す。同図の実行トレース記憶部１３１には、シナリオを実行した際の実行トレースが格納されており、nは全シナリオ数、ｍは最も長い実行トレースの長さであり、bijはシナリオoiを実行した際に、ｊ番目に実行されたモジュールを表す。
【００５２】
ステップ２３０）  CPU１１０の形式文脈抽出部１１４において、ステップ２２０で作成した実行トレースを入力として、シナリオを「オブジェクト」、実行トレース中に出現するモジュールを「属性」として表にすることで、「形式文脈」が出力として得られる。形式文脈はメモリ１２０上の形式文脈記憶部１２１に出力する。
【００５３】
ステップ２４０）  CPU１１０の概念分析部１１５は、ステップ２３０で形式文脈記憶部に出力された形式文脈を入力とし、形式概念分析を実施することで、出力として「概念束」を得る。ここで、概念分析部１１５として具体的には、Concept Explorer、Toscana-J等を用いる。
【００５４】
ステップ２５０）  CPU１１０の部分系列抽出部１１６は、ステップ２４０にて得られた概念束のうち、人が理解したい特徴に相当する形式概念を選択するという操作と、実行トレースの集合を入力として、選択した形式概念に関係の無い実行トレースやその部分系列を判別、除去することで、選択した形式概念に含まれるモジュールのみが含まれる実行トレースの部分系列を実行トレース部分系列記憶部１２２上に出力として得ることができる。
【００５５】
ステップ２６０）  CPU１１０の系列パターン抽出部１１３は、ステップ２５０にて得られた実行トレースの部分系列と、取出したい部分系列の最小出現頻度を入力として、系列パターンマイニングを実行し、理解したい特徴に相当する形式概念に含まれているモジュールの頻出系列を計算する。これにより、特徴とそれを実現するモジュールと、そのモジュールの実行順序を自動で出力することが可能となる。
【００５６】
次に、上記のステップ２５０の処理を詳細に説明する。
【００５７】
図４は、本発明の一実施の形態におけるプログラム分析装置のステップ２５０の詳細なフローチャートである。
【００５８】
ステップ３１０）  部分系列抽出部１１６は、ステップ２４０で得た概念束が入力されると、理解したい特徴に相当する形式概念を選択し、選択した形式概念に含まれるモジュールの集合と、選択した形式概念が関係するシナリオの集合を出力する。
【００５９】
ステップ３２０）  全ての実行トレースが入力されると、シナリオの順に、シナリオと対応する実行トレースを取出すループを実行し、実行トレースを内側のループに出力として渡す。
【００６０】
ステップ３３０）ステップ３２０で取出された実行トレースに対応するシナリオ、及びステップ３１０で選択した形式概念が関係するシナリオの集合が入力されると、形式概念が関係するシナリオの集合に、外側のループから渡された実行トレースに対応するシナリオが含まれるかを判定し、含まれていた場合は、外側ループから渡された実行トレースをステップ３４０のループに引渡す。そうでない場合は、ステップ３４０のループに入らずステップ３２０に戻り、次のシナリオを取出す。
ステップ３４０）ステップ３３０から実行トレースが渡されると、入力された実行トレースに含まれるモジュールを順に取り出すループを実行し、モジュールをループの内側のステップ３５０に出力として渡す。
ステップ３５０）ステップ３４０からモジュールが渡されると、入力がnullかどうかを判断し、入力がnullでない場合ステップ３６０にモジュールを渡す。入力がnullである場合は、ステップ３４０に戻り次のモジュールを取出す。
【００６１】
ステップ３６０）ステップ３５０からモジュールが入力されると、当該モジュールが、ステップ３１０で選択した形式概念に含まれるモジュールの集合に含まれるかどうかを判断し、含まれていた場合は、ステップ３７０へモジュールを渡す。含まれていなかった場合は、ステップ３４０に戻り次のモジュールを取出す。
【００６２】
ステップ３７０）ステップ３６０からモジュールが入力されると、入力されたモジュールを実行トレース部分系列記憶部１２２に書込む。
【００６３】
以下に具体的な例を示す。
【００６４】
図５に示すWebアプリケーション及びシナリオを以下に説明する。
【００６５】
このプログラムは、５つの画面(p1−p5)、５つのメソッド(m1−m5)、及び３つのテーブル(t1−t3)から構成される。
【００６６】
ユーザ情報登録シナリオ(o1)では、ログイン画面(p1)からユーザ情報登録画面(p5)に移動し、ログイン情報や商品送付先情報等を入力し登録ボタンを押下すると登録処理(m5)が実行され、ログイン情報テーブル(t1)及びユーザ情報テーブル(t3)に各情報が格納され、ログイン画面(p1)に戻る。
【００６７】
商品閲覧シナリオ(o2)では、ログイン画面(p1)から、ログインせずに商品一覧画面(p2)に遷移する。その際、商品一覧表示処理(m2)が商品情報を商品情報テーブル(t2)から呼出す。その後、商品情報一覧から任意の商品を選択しその詳細を表示する商品詳細画面(p3)に遷移する。その際、商品詳細表示処理(m3)が商品の詳細情報を商品情報テーブル(t2)から呼出す。
【００６８】
商品購入シナリオ(o3)では、ログイン画面(p1)からログインし商品一覧画面(p2)に遷移する。その際、ログイン処理(m1)がログイン情報テーブル(t1)からユーザのログイン情報を呼出してユーザの入力と照合し、更に商品一覧表示処理(m2)が商品情報テーブル(t2)から商品一覧情報を取得した後、商品一覧画面(p2)に遷移する。次に、商品一覧画面から任意の商品の「1クリック購入ボタン」を押下し購入完了画面(p4)に遷移する。その際、購入処理(m4)がユーザ情報テーブル(t3)からクレジットカード情報、送付先住所、氏名等を呼出し決済処理を行なう。
【００６９】
図５に示すようなWebアプリケーションに対し、前記の３つのシナリオを実行すると、図６のような実行トレース情報を取得することが出来る。シナリオをオブジェクト、モジュールを属性とすると、図６実行トレース情報から図７のような形式文脈を取得することができる。これに形式概念分析を施すことにより図８のような概念束が得られる。
【００７０】
図８中の丸aで示される形式概念に系列パターンマイニングを適用する例を以下に説明する。
【００７１】
この形式概念に相当する特徴には、ログイン画面(p1)、商品一覧画面(p2)、商品一覧表示処理(m2)、商品情報テーブル(t2)の計４つのモジュールが含まれる。また、この形式概念は商品閲覧シナリオ(o2)、及び商品購入シナリオ(o3)には固有な形式概念であるが、ユーザ情報登録シナリオ(o1)に固有な形式概念ではない。従って、図６に示す実行トレースからステップ２５０に従って、ユーザ情報登録シナリオ(o1)の実行トレースを判別、除去し、更に残った実行トレースから、以上４つのモジュール(p1,p2,m2,t2)以外のモジュールを判別、除去すると、図９に示すように実行トレースの部分系列が出力される。図９の例において、除去されたシナリオの実行トレースは斜字で示している。出力された実行トレースと、最小出現頻度=2という情報を入力として、例えば、非特許文献３のアルゴリズムを用いて系列パターンマイニングを実施すると図１０のように結果の部分系列が出力される。前記の４つのモジュール(p1,p2,m2,t2)が含まれる部分系列として、<p1,m2,t2,p2> : 2 を見つけることができ、これらのモジュールはこの様な順序で実行されるという依存関係を知ることが出来る。なお、ここでは得られるモジュールの実行順序のパターンと、その頻度を用いて、「<パターン> : 頻度」と表記している。
【００７２】
前記の結果を得る際、非特許文献３を用いると具体的には以下の様な計算手順を踏むこととなる。なお、以下の具体的な手順は、非特許文献７（シーケンシャルパターンマイニングを用いたコーディングパターン抽出，石尾隆，伊達浩典，三宅達也，井上克郎，情報処理学会論文誌 Vol.50 No.2 860-871(Feb.2009)）を参考にして説明する。最初に、図９に示す不要な実行トレースの部分系列を除去した後のo2、o3からなる実行トレースに出現する、各モジュールの出現回数(そのモジュールを含む実行トレースの数)を数え上げる。最小出現頻度(ここでは2回とする)以上のモジュールを長さ１のパターンとすると、<p1> : 2，<m2> : 2，<t2> : 2，<p2> : 2，が得られる。PrefixSpanでは、長さkのパターンから長さk+1のパターンを構築する手順を、新たなパターンが抽出されなくなるまで繰り返し実行する。長さkのパターンに対して射影データベースを作成する。これは実行トレースの各実行系列に対しパターンの最初の出現以降の要素の列だけを取出す操作である。例えば、前記のパターン<p1>に対する射影データベースは <m2,t2,p2,t2> と <m2,t2,p2> の２つの系列となる。次に、得られた射影データベース中の各モジュールの出現回数を数え、最低出現回数(ここでは２回)以上の配列に出現したモジュールを用いて長さk+1のパターンを構築する。先程の p1 に関する射影データベースでは、m2、t2、p2が２つの系列に出現していることから、<p1,t2> : 2，<p1,m2> : 2，<p1,p2> : 2というパターンが得られる。図９から得られる長さkのパターン(prefix)、それに関する射影、そして新たに得られる長さk+1のパターンを図１１に示す。記号φは射影の結果が空であることを意味する。
【００７３】
なお、本発明のステップ２５０を踏まずに、図６に示す実行トレースを用いて系列パターンマイニング(PrefixSpan)を実施すると、図１２のような射影データベースを作成する必要があり計算量が増加することがわかる。
【００７４】
入力の規模に対する系列パターンマイニングの時間計算量は、用いるアルゴリズムや実行トレース中のモジュール列の出現の仕方に依存するが、一般的に非特許文献４のFigure 8に示されるように、入力となる系列の数に対して非線型に増加することが知られている。従って、前記の目的を果たす際、本発明により多大な効果を期待することができる。
【００７５】
また、ここで特に対象WebアプリケーションにWebフレームワークが用いられていたとすると、<p1，m2>、<m2，t2>、<t2，p2>のような、画面−処理、処理−テーブル間の依存関係は先行技術では自動で抽出することはできず、人手でコードを読解することになる。
【００７６】
上記の図１に示すプログラム分析装置の各構成要素の動作をプログラムとして構築し、プログラム分析装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【００７７】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【産業上の利用可能性】
【００７８】
情報処理システムを構成するプログラムの機能拡充や更改を実施する際、対象システムについて以下のような事項が想定される。
【００７９】
１）現行のプログラムについて正しく記述した最新のドキュメントが存在しない；
２）対象とする情報システムがミドルウエアやプラットフォーム製品を多用している；
以上の様な情報システムをリバースエンジニアリングを用いて理解する際には、対象システムのアプリケーション部分のトレース情報を取得しても、どのような仕組み・因果関係でアプリケーションが実行されるのか判らない場合がある。例えば、Webフレームワークを用いたシステムにおいて、画面‐メソッド間の依存関係をWebフレームワークが司っており、因果関係がソースコードを読解することでは判らない場合等が挙げられる。このような場合、保守者によるプログラムの構造や処理内容の理解を支援するために従来技術や、本発明を使用することが、産業上の利用方法として想定される。
【００８０】
最初に不完全な設計ドキュメントの記載や、それまで当該情報処理システムを使用していた利用者へのヒアリングなどを通じて、当該情報処理システムが有するであろう機能を利用するためのシナリオ群を作成する。
【００８１】
シナリオ群を実行し、形式概念分析の手法により、互いに関連するモジュールの集合をプログラムの特徴（Feature）として発見する。
【００８２】
プログラムの特徴として発見されたモジュール集合に、系列パターンマイニング手法を施すことにより、特徴を構成するモジュールの振舞いを理解することができる。
【００８３】
設計ドキュメントに記載されている機能に関わるモジュールの集合、及び振舞いが発見された場合には、ドキュメントに記載された機能の実装箇所が特定される、という効果が生じる。
【００８４】
モジュールの集合及び振舞いが発見されたが、現行と異なる設計ドキュメントに記載された機能とは無関係な場合は、新規に追加された機能及び振舞いであるため、設計ドキュメントへの追加を行なう。
【００８５】
このように、既存プログラムの保守にむけて形式概念分析、及び系列パターンマイニングの手法を利用することは、
１）  設計ドキュメントに記載された機能の、プログラムにおける実装箇所を特定する；
２）  特徴として得られたモジュールの実装状況の分析にもとづき、設計ドキュメントの修正に資することができる；
という効果を求める産業上の利用可能性がある。
【符号の説明】
【００８６】
１００  プログラム分析装置
１１０  CPU
１１１  トレース部
１１２  トレース結合部
１１３  系列パターン抽出部
１１４  形式文脈抽出部
１１５  概念分析部
１１６  部分系列抽出部
１２０  メモリ
１２１  形式文脈記憶部
１２２  実行トレース部分系列記憶部
１３０  磁気ディスク
１３１  実行トレース記憶部
【図１】
2014225198.tif 000003
【図２】
2014225198.tif 000004
【図３】
2014225198.tif 000005
【図４】
2014225198.tif 000006
【図５】
2014225198.tif 000007
【図６】
2014225198.tif 000008
【図７】
2014225198.tif 000009
【図８】
2014225198.tif 000010
【図９】
2014225198.tif 000011
【図１０】
2014225198.tif 000012
【図１１】
2014225198.tif 000013
【図１２】
2014225198.tif 000014