【文献】
岩山 浩将 他,「識別子の共起頻度に基づく凝集度遷移過程の可視化と測定」,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2013年 9月 5日,第113巻 第215号,第7頁-第12頁
(58)【調査した分野】(Int.Cl.,DB名)
各前記モジュールについて設定された前記観点関連度を、当該モジュールを可視化するか否かの基準を補正するための判定項目、判定条件、前記観点情報、判定閾値、及び観点関連度補正値を対応付けて観点関連判定補正情報として格納する観点関連判定補正情報記憶部と、
前記観点関連度を算出したモジュールに関して、前記算出した観点関連度の値と、該観点関連判定補正情報記憶部から取得した閾値またはユーザ指定の閾値とを比較して対応する観点関連度補正値を取得し、該観点関連度補正値を用いて前記観点関連度を補正し、補正結果を前記モジュール別観点関連判定データ記憶部に格納する観点関連度補正部と、
を備えることを特徴とする請求項1に記載のプログラム可視化装置。
前記観点関連度補正部が、観点関連判定補正項目として、各前記観点依存モジュールを基準とした呼出元側モジュールへの観点非関連パスの数、呼出元側モジュールへの全パスに対する前記観点非関連パスの比率、または前記観点依存モジュールからの呼出段数を利用し、前記観点関連判定補正項目の値が、該観点関連判定補正情報記憶部から取得した閾値またはユーザ指定の閾値より大きい場合に前記観点関連度の補正を行い、前記観点関連判定補正項目の値が、前記いずれかの閾値より小さい場合に前記観点関連度の補正を行わないことを特徴とする、請求項3に記載のプログラム可視化装置。
前記データ解析部が、前記観点依存モジュールの呼出先または呼出元に観点関連モジュールが1つ存在する前記モジュールに対し、該観点関連モジュールへ到達する迄に存在する全ての呼出パスに設定されている前記観点関連度ウェイトと該観点関連モジュールについて算出された前記観点関連度とを乗算することで、前記観点関連度を算出することを特徴とする、請求項1に記載のプログラム可視化装置。
前記データ解析部が、呼出先または呼出元に観点関連モジュールが複数存在するモジュールに対し、それぞれの観点関連モジュールを基に算出した観点関連度を全て加算することで、観点関連度を算出することを特徴とする、請求項5に記載のプログラム可視化装置。
前記データ解析部が、複数の前記モジュールが共通のデータを利用しているかを判定し、該判定結果に応じた観点関連度重み付け係数を用いて各前記モジュールの観点関連度を算出することを特徴とする、請求項1に記載のプログラム可視化装置。
前記データ解析部が、複数の前記モジュールが共通のデータを利用しているかを判定する際に、各前記モジュールの呼出関係と関係のない共通データ利用判定項目、または各前記モジュールの呼出関係と関係のある前記共通データ利用判定項目を利用し、各前記モジュールの呼出関係と関係のある前記共通データ利用判定項目を利用する場合に前記モジュール間の呼出パスに対して観点関連度ウェイトを設定することを特徴とする、請求項7に記載のプログラム可視化装置。
前記データ解析部が、複数の前記モジュールが共通のデータを利用しているかの判定項目として、複数の前記モジュールが共通のグローバル変数へ代入しているか、共通のファイルまたはDBへ書き込みしているか、変数を参照渡しで受け取り該変数へ代入しているか、または戻り値を変数で受け取り利用しているかとの判定基準を利用し、いずれかの判定基準が満たされた場合、それぞれの項目に応じた観点関連度ウェイトを用いて各前記モジュールの観点関連度を算出することを特徴とする、請求項6に記載のプログラム可視化装置。
前記データ解析部が、複数の前記モジュールが共通のデータを利用しているかを判定する際に、前記モジュール相互間の呼出関係と関係のない共通データ利用判定項目を利用した後に、前記モジュール相互間の呼出関係と関係のある前記共通データ利用判定項目を利用することを特徴とする、請求項1に記載のプログラム可視化装置。
【発明を実施するための形態】
【0009】
以下、本発明の一実施形態によるプログラム可視化装置、プログラム可視化方法、及びプログラム可視化プログラムについて、図面を用いて詳細に説明する。
【0010】
本実施形態では、複数のモジュールを含む可視化対象ソースコードに対して、特定の観点に関連するモジュールのみで構成されたプログラム図を生成することにより可視化する方法の一例を説明する。特定の観点としてここでは「マイコン」を取り上げるが、観点は左記に限定されることはない。
【0011】
まず、本実施形態による情報処理装置100を含む情報処理システム1について、
図1を参照して説明する。
図1は、本実施形態に係る情報処理システム1に含まれる情報処理装置100のハードウェア及びシステム構成の一例を示す図である。情報処理システム1は、本実施形態における主要な機能が実装されている情報処理装置100と、他の情報処理装置、ネットワークストレージといった、データを保存することが可能な情報装置A(110)と、情報装置B(120)とを含み、これらの間が、例えば、インターネット等の通信ネットワーク130により接続されることによって構成されている。本実施形態の情報処理システム1では、情報装置A、情報装置Bにおいて情報処理システム1の機能を実現するためのデータ処理が実行され、情報処理装置100に実装されている本実施形態のプログラム可視化機能によって、情報装置A,Bに実装されているプログラムの改修時等に必要な可視化処理が実行される。
【0012】
情報処理装置100は、ハードウェアとして、CPU(Central Processing Unit)、
MPU(MicroProcessing Unit)等のプロセッサ101、キーボード、マウス等のデータ入力デバイスを含む入力装置102、ハードディスクドライブ(HDD)、半導体ドライブ
(SSD)等の記憶デバイスを含む二次記憶装置103、ROM(Read Only Memory)、R
AM(Random Access Memory)等の記憶デバイスを含む主記憶装置104、ディスプレイ等の表示装置105、及びプロセッサ101が通信ネットワーク130と通信するための機能が実装された、ネットワークインタフェースカード(NIC)等を含む通信装置107を有する。なお、各装置はバス106によって接続され、各装置間で相互にデータの送受信が可能である。また、
【0013】
次に、情報処理装置100、情報装置A(110)、及び情報装置B(120)のソフトウェア構成について説明する。
図2は、本実施形態に係る情報処理装置100、情報装置A(110)、及び情報装置B(120)の機能ブロックの一例を示す図である。なお、本実施形態においては、情報処理装置100の機能ブロックの全てがプロセッサ101によって実行または操作されるソフトウェアプログラム、データであるものとして説明するが、前記機能ブロックの一部または全ては、ハードウェアとして実現されてもよい。また、本来は、
図2に例示している機能ブロックに加え、各機能ブロックの起動、管理等を行うオペレーティングシステム(OS)、制御プログラム等が存在するが、本実施形態では、これらの機能ブロックの連携動作を適宜説明することとし、OS、制御プログラムがここで適宜説明された連携動作に必要となる機能ブロックの起動、動作管理を行うことは自明であるので、これらのOS、制御プログラムについては説明及び記載を省略する。
【0014】
図2に示すように、本実施形態に係る情報処理装置100は、機能ブロックとして、処理対象ソースコードを取得するためのソースコード取得部200、ソースコード解析のキーワードを取得するためのキーワード取得部201(ワードデータ記憶部)、ソースコードを解析するためのデータ解析部202、ソースコードに含まれるモジュール単位で可視化するか否かを判定するための可視化判定部203、プログラム図の描画を実行するための描画指示部204、可視化処理結果であるプログラム図作成の全体処理を管理するためのプログラム図作成制御部205、ソースコード解析のキーワードを格納しているキーワードデータベース(DB)211、ソースコードに含まれる全モジュールの呼出関係を示す
図を作成するためのモジュール呼出関係図作成部212、モジュール可視化の観点を含む観点表213(観点情報記憶部)、各モジュールの可視化観点との関連度を判定するためのデータを含む観点関連判定ノイズ補正閾値データテーブル214(観点関連判定補正情報記憶部)、モジュール別観点関連判定データテーブル215(モジュール別観点関連判定データ記憶部)、作用判定表216、及びモジュール間パスの観点関連度ウェイトデータテーブル217(モジュール間パスの観点関連度ウェイトデータ記憶部)を有する。また、情報装置A(110)は、情報処理システム1によって実行されるプロジェクトA(図中では「PJA」と略称する。)に関するソースコード群206、及びソースコードA(
207)を有する。ソースコードA(207)は、モジュールという単位の部分的プログラムで構成されている。また、情報装置B(120)は、同じく情報処理システム1によって実行されるプロジェクトB(図中では「PJB」と略称する。)に関するソースコード
群208、及びソースコードB(209)を有する。ソースコードB209は、ソースコードA(207)と同様に、モジュールという単位の部分的プログラムで構成されている。なお、プロジェクトAに関するソースコード群206、及びソースコードA(207)、プロジェクトBに関するソースコード群208、及びソースコードB(209)は必ずしも上述の場所に配置される必要はなく、情報処理装置100、情報装置A(110)、及び情報装置B(120)のいずれに格納されていてもよい。なお、上記の各機能ブロック及びデータ群については、情報処理装置100等のデータ処理内容に関連して以下に順次説明する。
【0015】
ここで、本実施形態の情報処理装置100での可視化処理に使用されるデータ類について説明する。まず、観点表213について説明する。
図3に、観点表213の一構成例を示す。この観点表213は、システム管理者等が、情報処理装置100の運用開始前にあらかじめ適宜の記憶領域内に設定して格納しておく。観点表213には、処理対象プログラムにおいて可視化するモジュールの観点を示すワードデータと、その観点に関連するモジュールを選択する際に用いる観点関連度の閾値とが格納される。
図3の例では、観点を示すワードとして、カテゴリと、カテゴリに関係するキーワードとを採用してデータを整理している。例えば、マイコンというカテゴリには、SH(SuperH(登録商標))、ARM(
登録商標)等のマイコンカテゴリーに属する下位のキーワード等が含まれる。また、バイトオーダというカテゴリには、バイトデータの並び順種別を示すLITTLE_ENDIAN(リトル
エンディアン)、BIG_ENDIAN(ビッグエンディアン)等のキーワードが含まれる。これらのカテゴリ及びキーワードは、情報処理装置100の機能ブロックであるキーワード取得部201が、ソースコード、あるいはソースコードに関する開発・保守データ等で設定されているマクロ、キーワード情報等を取得し、キーワードDB211へ格納する際に利用する。観点関連度の閾値は、可視化処理の観点に関連するモジュールを選択する際に用いられる。観点関連度の算出に関しては後述するが、観点関連度はモジュール毎に算出される。このモジュール観点での関連度は観点表213記載の閾値と比較されて当該モジュールを可視化するか否かを判定するために利用される。なお、この観点に関連するモジュールの選択は、可視化するか否かを判定するために行うだけでなく、特定のモジュールを強調表示するなどの他の制御に利用することもできる。
【0016】
次に、観点関連判定ノイズ補正閾値データテーブル214について説明する。
図4に、観点関連判定ノイズ補正閾値データテーブル214の一構成例を示す。この観点関連判定ノイズ補正閾値データテーブル214は、システム管理者等が、情報処理装置100の運用開始前にあらかじめ適宜の記憶領域内に設定して格納しておく。観点関連判定ノイズ補正閾値データテーブル214は、観点関連度0のモジュールであるべきにもかかわらず観点関連度が0より大きく算出されている、といったように、本来あるべき値よりも高く観点関連度が算出されているモジュールをノイズと判断してその観点関連度を補正する目的で使用する。観点関連判定ノイズ補正閾値データテーブル214には、ノイズ補正判定項目、条件、観点、閾値、及び観点関連度補正値の各項目が格納される。
図4の例では、こ
れらの判定項目として、呼出元側観点非関連パスの数、呼出元側全パスに対する観点非関連パスの比率(%)、及び観点依存モジュールからの呼出段数を設定している。この判定項目には、各項目が前提とする条件を設定することも可能である。
図4の例では、「呼出元側観点非関連パスの数」及び「呼出元側全パスに対する観点非関連パスの比率(%)」の項目に、「観点関連度ウェイトが0より大きなモジュール間パスを辿り、呼出先側で観点関連モジュールに辿りつけない、且つ呼出元側で観点関連モジュールに辿りつける」という状況下での項目であるという条件がついている。この判定項目と前提条件については、後に詳述する。この条件を満たしていない場合はその判定項目については偽、すなわちノイズ補正の対象でないと判定される。
【0017】
また、
図4の例では、ユーザが指定する、モジュールの観点を指すカテゴリ、キーワードとして、SH、マイコン、及びLITTLE_ENDIANを挙げており、それぞれ閾値を図の通りに
設定している。ここで、観点関連モジュールについて説明する。観点関連モジュールとは、以下の(1)〜(4)の四種類のタイプのモジュールを指すものとする。
(1)上述した観点に関するキーワードが、コメントやマクロ等の形で直接記述されているモジュール。このタイプのモジュールは、観点関連モジュールであり、観点依存モジュールともいうことができる。
(2)観点依存モジュールを、直接的または間接的な形で呼出先に持つモジュール。このタイプのモジュールは、観点依存モジュールを使用するという点で、観点関連モジュールということができる。ただし、本タイプは、観点依存モジュールを使用する必然性のないモジュールも含まれる可能性があるため、こういったモジュールは可視化対象から除く必要がある。
(3)観点依存モジュールを、直接的または間接的な形で呼出元に持つモジュール。このタイプのモジュールは、観点依存モジュールから使用されるという点で、観点関連モジュールということができる。ただし、本タイプには、汎用的に利用されるモジュールも含まれる可能性があり、そのようなモジュールは除く必要がある。
(4)観点関連モジュールが使用しているデータに対し代入を行うモジュール。データを介して互いに作用し合う関係であるため、観点関連モジュールであると言える。ただし、本タイプには共通のデータを参照しているだけの関係にあるモジュールも含まれる可能性があり、その場合には互いに作用し合わないモジュールとして除く必要がある。
【0018】
本実施例では、簡単のために、観点関連度が0のモジュールを観点非関連モジュール、観点関連度が0より大きなモジュールを観点関連モジュールと判定するものとしている。これに限らず、観点関連度がある閾値未満のモジュールを観点非関連モジュールと判定し、観点関連度がある閾値以上のモジュールを観点関連モジュールと判定することも可能である。
【0019】
また、
図4の例では、観点関連判定ノイズ補正項目として、呼出元側観点非関連パスの数、呼出元側全パスに対する観点非関連パスの比率(%)、及び観点依存モジュールからの呼出段数の三つを挙げている。呼出元側観点非関連パスの数は、判定対象モジュールから呼出元側の最も先頭のモジュールまで辿った時に、そのパス上に存在する全てのモジュールが非関連モジュールであるパスの数である。一般的に、観点と非関連なモジュールから利用されればされる程、判定対象モジュールが観点非関連である可能性が高くなる。呼出元側全パスに対する観点非関連パスの比率(%)は、判定対象モジュールから呼出元側の最も先頭のモジュールまで辿った時に存在する全てのパスに対する、呼出元側観点非関連パス数の比率である。一般的に、観点と非関連なモジュールから利用されればされる程観点非関連パスの比率が高くなり、判定対象モジュールが観点非関連である可能性が高くなる。観点依存モジュールからの呼出段数は、判定対象モジュールと、該モジュールから最も近い観点依存モジュールとの間の呼出段数である。一般的に、観点関連のモジュール同士は近い呼出関係となるため、観点依存モジュールから離れれば離れる程、判定対象モ
ジュールが観点非関連である可能性が高くなる。本実施例では、観点関連判定ノイズ補正項目の判定が真になったときの観点関連補正値として0を使用し、当該モジュールを観点非関連モジュールとして扱うこととしている。
【0020】
次に、モジュール別観点関連判定データテーブル215について説明する。
図5に、モジュール別観点関連判定データテーブル215の一構成例を示す。モジュール別観点関連判定データテーブル215は、システム管理者等が、情報処理装置100の運用開始前にあらかじめ適宜の記憶領域内に設定して格納しておく。モジュール別観点関連判定データテーブル215には、可視化対象のプログラムに含まれる各モジュールに対して算出した観点関連度が格納される。
図5の例では、各モジュールについての観点を意味するキーワード、あるいはカテゴリである、SH、マイコン等に関して、可視化対象ソースコード内のモジュールである、モジュールA、モジュールB、及びモジュールCまたはモジュールDの観点関連度を記載している。観点関連度の値は0〜1の範囲の数値であり、観点非関連の場合には0であり、観点の関連が強くなるほど数値が大となる。
【0021】
次に、作用判定表216について説明する。
図6に、作用判定表216の一構成例を示す。作用判定表216は、システム管理者等が、情報処理装置100の運用開始前にあらかじめ適宜の記憶領域内に設定して格納しておく。作用判定表216には、判定対象モジュールが、観点関連モジュールとデータの共通利用を通じて互いに作用し合うかを調べることで、モジュール同士に関連があるか否かを判定するための項目が格納される。これらの判定項目は、判定状況に応じて使い分けるものとし、モジュールの呼出関係がある時に限定される項目か否かによって分類されている。モジュールの呼出関係に限定される項目として、例えば、「変数を参照渡しで受け取り、該変数へ代入しているか」、及び「戻り値を変数で受け取り、利用しているか」の項目が挙げられる。また、モジュールの呼出関係に限定されない項目として、例えば、「観点関連モジュールが使用しているグローバル変数へ代入しているか」、「観点関連モジュールが使用しているファイルへ代入しているか」の項目が挙げられる。「戻り値を変数で受け取り、利用しているか」の項目に関しては、該戻り値を、例えば割込み処理等で使用するフラグとして活用可能な変数で受け取って利用している場合、エラー値チェックで利用している場合、等に限定することで、プログラム改修等担当者にとってより有意義な作用関係をより精度よく判定することができる。作用判定表216では、判定項目毎に観点別の観点関連度ウェイトデータ(以下単に「観点関連度ウェイト」)を記載している。該観点関連度ウェイトは、モジュールの観点関連度を算出する際、またはモジュール間の呼出パスの観点関連度ウェイトを設定する際に使用する値であり、これについては後述する。
【0022】
次に、モジュール間パスの観点関連度ウェイトデータテーブル217について説明する。
図7に、モジュール間パスの観点関連度ウェイトデータテーブル217の一例を示す。モジュール間パスの観点関連度ウェイトデータテーブル217は、システム管理者等が、情報処理装置100の運用開始前にあらかじめ適宜の記憶領域内に設定して格納しておく。モジュール間パスの観点関連度ウェイトデータテーブル217には、プログラム可視化にあたっての観点毎に、モジュール間の呼出パスに設定された観点関連度ウェイトが記録される。モジュール間パスの観点関連度ウェイトデータテーブル217に記録される観点関連度ウェイトは、
図6の作用判定表216に記載された観点関連度ウェイトを利用して設定するが、その処理内容については後述する。
【0023】
次に、本実施形態の情報処理装置100により、プログラムを可視化する処理について説明する。
図8に、情報処理装置100で、
図2の情報装置A(110)に実装されているソースコードA(207)を可視化する処理の処理フロー例を示している。
【0024】
情報処理装置100の入力装置102からの指示等により、プログラム図作成制御部2
05は、プログラム図作成を開始する(S800)。本実施形態では、プログラム図としてプログラム内のモジュールを全て可視化せず、「マイコン」に関連するモジュールのみで構成されたプログラム図を作成する例を示す。
【0025】
まず、プログラム図作成制御部205は、入力装置102等を通じて、ソースコード群206の中から可視化するソースコードの指定を受け付ける。本実施形態では、可視化対象ソースコードとして、情報装置AのソースコードAが指定されたものとする。可視化対象ソースコードが指定されると、ソースコード取得部200が、通信装置107を介し、プロジェクトA(PJA)に関するソースコード群206の中から、可視化対象であるソースコードAを取得する(S801)。ソースコード群206のサイズが巨大で、ソースコードAの検索に時間を要すると予想される場合には、ユーザ指示により、予め、使用が予想されるファイルを、例えば情報処理装置100といった高速な検索が可能となる記憶領域へ移動またはコピーしておくことができる。
【0026】
次いで、キーワード取得部201は、S801で取得した可視化対象ソースコードAが属するプロジェクトAに関するソースコード群206で設定されているマクロ、キーワード情報を取得し、キーワードDB211に格納する(S802)。この際、観点表213によるキーワードの分類を参考にして、キーワードDB211へ格納するようにしてもよい。このようにすることで、例えば、キーワードであるSHと、それを含むカテゴリであるマイコンといったように、キーワードの上位概念まで含めてまとめることができる。なお、本例では、キーワード取得部201が取得するキーワードとして、ソースコード内に記述されるマクロ、キーワードを挙げているが、左記に限定されることはなく、例えば、変数名、関数名等種々の記述内容利用することができる。さらに、キーワードを取得する対象として、可視化対象ソースコードAが属するプロジェクトAに関するソースコード群206に限定されず、可視化対象と関係のないソースコードB(209)が属するプロジェクトB(PJB)に関するソースコード群208等、様々なソースコードやそれに関する開発・保守データを利用することも可能である。
【0027】
次に、プログラム図作成制御部205は、入力装置102を介して、キーワードDB211に格納されている観点(キーワード/カテゴリ)の指定を受け付ける。この際、カテ
ゴリの概念を利用することで、一つのキーワードだけでなく、関係のある複数のキーワードをまとめて、モジュール選択に活用することができる。本例では、観点としてカテゴリであるマイコンをユーザが指定したものとする。また、プログラム図作成制御部205は、入力装置102から、観点関連判定ノイズ補正項目の指定を受け付ける。本例では、観点関連判定ノイズ補正項目として、観点関連判定ノイズ補正閾値データテーブル214で挙げている項目である、呼出元側観点非関連パスの数、呼出元側全パスに対する観点非関連パスの比率(%)、及び観点依存モジュールからの呼出段数を想定している。ここでは、ユーザが、観点関連判定ノイズ補正項目として、呼出元側観点非関連パスの数を指定したものとする。なお、観点関連判定ノイズ補正項目として左記で挙げた項目に限定されることはなく、また、ノイズ除去項目として一つのみの選択に限定されることはなく、複数の項目を同時に利用することも可能である。また、観点関連判定ノイズ補正項目は、必ずしもユーザが入力する必要はなく、使用率が高い項目を優先的に自動で選択するといったように、様々な選択方法が考えられる。
【0028】
次に、モジュール呼出関係図作成部212が、S801でユーザが指定した可視化対象ソースコードA内で定義しているモジュール、またはソースコードA内で呼び出しているモジュールに関する呼出関係図を作成する(S804)。この際、ソースコードAに関わるモジュールから直接呼び出しているモジュール、及びソースコードAに関わるモジュールを直接呼び出しているモジュールだけを考慮するのではなく、ソースコードAに関わるモジュールから間接的に呼び出されているモジュール、ソースコードAに関わるモジュー
ルを間接的に呼び出しているモジュールも含めて呼出関係図を作成する。この際、さらに、ソースコードのコンパイル時に指定するコンパイラオプション、#pragma等の内容も考
慮することも考えられる。
【0029】
次に、データ解析部202が、S804で作成したモジュール呼出関係図に含まれる全モジュールについて、観点関連度の算出を行い、結果をモジュール別観点関連判定データテーブル215へ格納する(S805)。なお、本処理内容は後に詳述する。
【0030】
次に、プログラム図作成制御部205が、S801で取得したソースコードAに含まれる、未だ可視化判定していないモジュールの内、一つのモジュールを可視化判定対象モジュールとして取得する(S806)。次いで、可視化判定部203が、該モジュールを可視化するか否かを判定する(S807)。この際、モジュール別観点関連判定データテーブル215に格納されているモジュール毎の観点関連度と、観点表213に格納されている、S803でユーザが指定した観点の閾値とを比較し、前者の値が後者の値より大きいと判定した場合(S807,Yes)、次いで描画指示部204が、該モジュールを表示する(S808)。観点関連度の値が閾値より小さいと判定した場合(S807,No)、描画指示部204が、該モジュールを非表示にする(S809)。
【0031】
次いで、プログラム図作成制御部205が、S801で取得したソースコードAに未だ可視化判定していないモジュールがあるか否かを判定する(S810)。可視化判定していないモジュールがあると判定した場合(S810,Yes)、プログラム図作成制御部205はS806の処理へ戻る。可視化判定していないモジュールがないと判定した場合(S810,No)、プログラム図作成制御部205は、プログラム図作成処理を終了する(S811)。以上のプログラム図作成処理により、可視化対象プログラムにおける観点関連度に応じたモジュールを含むプログラム図を作成することができる。
【0032】
次に、
図8に例示したプログラム図作成処理におけるモジュールの観点関連度算出処理について説明する。
図9に、モジュールの観点関連度算出処理(
図8のS805)の処理フロー例を示す。S900で処理を開始すると、まずデータ解析部202が、S804で作成したモジュール呼出関係図に関わる全モジュールの名称をモジュール別観点関連判定データテーブル215へ記録し、S804で作成したモジュール呼出関係図に関わる全モジュールの中から観点依存モジュールを抽出する(S901)。この際、本例ではソースコードAが属するプロジェクトAに関するソースコード群206の全ソースコードを活用するものとし、S803でユーザが指定した観点として、キーワードが指定されていた場合、該キーワードの記述を含むモジュールを、また、カテゴリが指定されていた場合、観点表213に記載された、一または複数のカテゴリ内キーワードのうちのいずれか一のキーワード記述があるモジュールを、観点依存モジュールとして抽出する。本例では、マイコンというカテゴリがユーザより指定された場合を想定する。観点表213には、マイコンというカテゴリに、SHとARMという二つのキーワードが記載されているため、これらの
キーワードのいずれかの記述があるモジュールを観点依存モジュールとして抽出する。S901で抽出する観点依存モジュールについては、モジュール別観点関連判定データテーブル215の観点関連度に1を記録する。ここで記載する観点関連度として、1以外の値を記録してもよい。また、観点依存モジュールを抽出する本処理で活用するソースコード群は、可視化対象ソースコードAが属するプロジェクトAに関するソースコード群206に限らず、別のプロジェクトのソースコード、例えばプロジェクトBに関するソースコード群208が活用可能ならば、適宜活用して差し支えない。
【0033】
次に、データ解析部202が、S901で抽出した観点依存モジュール(モジュール別観点関連判定データテーブル215に記録されている観点関連度が1である観点関連モジュール)を基点として、互いに呼出関係にあるか否かに限定されず、該モジュールと共通
のデータを介した作用関係にあるモジュールを観点関連モジュールとして抽出する(S902)。本処理内容は後に詳述する。
【0034】
次いで、データ解析部202が、S804で作成したモジュール呼出関係図に関わる全モジュール間に存在する呼出パスの観点関連度ウェイトを設定する(S903)。本処理内容は後に詳述する。
【0035】
次に、データ解析部202が、モジュールの呼出関係を利用してモジュールの観点関連度算出を行う(S904)。本処理内容は後に詳述する。
【0036】
次いで、データ解析部202が、S904で算出したモジュール観点関連度の補正を行う(S905)。本処理内容は後に詳述する。以上の処理により、観点依存モジュール及びそれらと呼出関係にあるモジュールについて、可視化するか否かの判定指標となる観点関連度を算出することができる。
【0037】
図10に、互いに呼出関係にはないが、観点依存モジュールと共通のデータを介した作用関係にあるモジュールを観点関連モジュールとして抽出する際の一例であるフローチャートを示す。本フローは、
図9に例示するモジュールの観点関連度算出処理におけるS902の処理を詳細化したものである。なお、
図10の例では観点依存モジュールを基点としてS902の処理を行うが、観点関連度がある閾値以上と判定されるモジュールを基点としてS902の処理を行うことも可能である。
【0038】
図10のS1000で本処理が開始されると、まず、データ解析部202が、S901の処理を未だ行っていない観点依存モジュール(A)を一つ選択する(S1001)。該モジュールは、
図10の例では、モジュール別観点関連判定データテーブル215に記載されている、観点関連度1と判定されているモジュールである。
【0039】
次に、データ解析部202が、互いに呼出関係にあるか否かに限定されず、モジュール(A)と作用関係にあるモジュールを抽出する(S1002)。S1002で抽出したモジュールは、モジュール観点関連度を算出した後に、その値をモジュール別観点関連判定データテーブル215に記載する。なお、この際の判定項目として、作用判定表216に記載されている「呼出関係に限定されず」の状況で利用する項目を用いる。
図10の例では、左記の内、「観点関連モジュールが使用しているグローバル変数へ代入しているか」という項目を判定で用いている。本処理で抽出したモジュールの観点関連度は、作用関係にあるモジュールの観点関連度に、作用判定表216記載の観点関連度ウェイトを乗算した値を用いることとし、この算出値をモジュール別観点関連判定データテーブル215に記載する。
図10の例では、
図6の例により、マイコン依存モジュールの観点関連度1に、観点関連度ウェイト0.8を乗算して得られる数値0.8が観点関連度となる。ここでは、マイコンというカテゴリがユーザによって指定された場合を想定しているが、判定項目は本例で使用したものに限定されることはなく、「観点関連モジュールが使用しているファイルへ書き込みしているか」等の他の項目を用いることもでき、または複数の判定項目を加味して用いることも可能である。
【0040】
次に、データ解析部202が、
図9のS901で抽出した観点依存モジュールの内、未だS901の処理を行っていないものがあるか否かを判定する(S1003)。S901の処理を行っていないものがあると判定した場合(S1003,No)、データ解析部202はS1001に戻って未処理の観点依存モジュールを取得する。すべての観点依存モジュールについてS901の処理を行ったと判定した場合(S1003,Yes)、データ解析部202は、本処理フローを抜けて
図9のS902の処理へ進む。以上の処理フローにより、呼出関係に限定されず観点依存モジュールと作用関係にあるモジュールを抽出
することができる。
【0041】
次に、
図9に例示するモジュールの観点関連度算出処理フローにおけるモジュール間パスの観点関連度ウェイト設定処理について説明する。
図11に、モジュール同士の呼出関係、及び共通のデータを介した直接的または間接的な作用関係を利用して、
図8のS804で作成したモジュール呼出関係図に関わる全モジュール間に存在する呼出パスの観点関連ウェイト設定を行う際のフローチャート例を示す。本フローは、
図9のS903の処理を詳細化したものである。本処理フローでの判定項目としては、
図6の作用判定表216に記載されている「呼出関係に限定」の状況で利用する項目を用いる。これらの項目を利用することで、呼出関係を利用した、モジュール間のデータを介する作用関係の度合いを示す指標である観点関連度ウェイトをモジュール間パスに設定し、後に行うモジュール毎の観点関連度算出で利用することができる。
【0042】
S1100で処理を開始すると、データ解析部202が、
図8のS804で作成したモジュール呼出関係図に関わる全モジュールの内、S903の処理を未だ行っていないモジュール(B)を一つ選択する(S1101)。次いで、データ解析部202が、選択したモジュール(B)とその呼出先モジュール(B1)との間のモジュール間パスの観点関連度ウェイト設定を行う。なお、この際、
図11の例では、ウェイト設定で用いる項目として、
図6の作用判定表216に記載されている「呼出関係に限定」の状況で利用する項目を利用している。本例では、「変数を参照渡しで受け取り、該変数へ代入しているか」という項目を利用するものとする。すなわち、データ解析部202は、モジュール(B)の呼出先モジュール(B1)は、(B)から変数を参照渡しで受け取り、該変数へ代入を行うモジュールであるか判定し、モジュール(B)から変数を参照渡しで受け取り、該変数へ代入を行うモジュールであると判定した場合(S1102,Yes)、モジュール(B)−(B1)間のパスの観点関連度ウェイトとして、
図6の作用判定表216記載の観点関連度ウェイトを利用する。ここでは観点はマイコンであることから、
図6より観点関連度ウェイトとして0.8をモジュール間パスの観点関連度ウェイトデータテーブル217へ記載する(S1103)。モジュール(B)から変数を参照渡しで受け取り、該変数へ代入を行うモジュールでないと判定した場合(S1102,No)、モジュール間パスの観点関連度ウェイトとしては、ウェイトとして0を利用するものとし、モジュール間パスの観点関連度ウェイトデータテーブル217へ記載する(S1104)。全ての呼出先モジュールの判定が終わると、データ解析部202はS1105の処理へ進む。なお、モジュール(B)から変数を参照渡しで受け取り、該変数へ代入を行うモジュールでないと判定した場合の観点関連度ウェイトは本例では0としたが、別の値を用いることも可能である。
【0043】
次に、データ解析部202が、S1101で取得したモジュール(B)とその呼出元モジュール(B0)との間のモジュール間パスの観点関連度ウェイト設定を行う。なお、この際、ウェイト設定で用いる項目として、
図6の作用判定表216に記載されている「呼出関係に限定」の状況で利用する項目を利用する。本例では、
図6にある「戻り値を変数で受け取り、利用しているか」という項目を利用するものとする。戻り値を変数で受け取り、利用していると判定した場合(S1105,Yes)、データ解析部202は、該当モジュール間パスの観点関連度ウェイトとして、
図6の作用判定表216記載の観点関連度ウェイトを利用する。すなわち、
図6の例では、観点はマイコンであることから、モジュール間パスの観点関連度ウェイトデータ217へ、観点関連ウェイトとして0.5を記載する(S1106)。戻り値を変数で受け取り、利用していないと判定した場合(S1105,No)、データ解析部202は、該当モジュール間パスの観点関連度ウェイトとしては、本例では0を利用するものとし、モジュール間パスの観点関連度ウェイトデータテーブル217へ記載する(S1107)。
【0044】
全ての呼出先モジュールの判定が終わると、データ解析部202はS1108へ進む。なお、S1102、S1105の判定処理で判定結果が偽であった場合の観点関連度ウェイトは、
図11の例では0と設定したが、別の値を用いることも可能である。また、S1103、S1104、S1106、S1107において、観点関連ウェイトをモジュール間パスの観点関連度ウェイトデータテーブル217に記載する際に、既に値が記載されていることも考えられる。その際は、既に記載されている値と今回の値のどちらか値の高い方を利用する、両者の値の平均値を設定する等の処理が考えられる。本例では、そのような場合、値の高い方を利用するものとしている。また、本例では、S1102、S1105のように、呼出先モジュールへのパスと呼出元モジュールへのパスの観点関連度設定を行っているが、必ずしも両方行う必要はない。
【0045】
次に、データ解析部202が、
図8のS804で作成したモジュール呼出関係図に関わる全モジュールの内、未だS903の処理を行っていないものがあるか否かを判定する(S1108)。未だS903の処理を行っていないものがあると判定した場合(S1108,Yes)、データ解析部202は、S1101の処理へ戻り、次のモジュール(B)を取得する。すべてのモジュールについてS903の処理を行ったと判定した場合(S1108,No)、データ解析部202は、本処理フローを抜けて、
図9のS904へ進む。
【0046】
次に、呼出関係を利用したモジュールの観点関連度算出処理について説明する。
図12に、
図8のS804で作成したモジュール呼出関係図に関わる全モジュールに対して
図9のS904で行うモジュール観点関連度算出処理の処理フロー例を示している。
【0047】
S1200で処理を開始すると、まず、データ解析部202が、モジュール別観点関連判定データテーブル215に記載されたモジュールの内、観点関連度の値が所定閾値以上であるモジュール(C)を全て取得する(S1201)。本例では、観点関連度の数値が1以上であるモジュール、つまり観点依存モジュールをすべて取得するものとする。
【0048】
次いで、データ解析部202が、モジュール別観点関連判定データテーブル215に観点関連度が記載されていないモジュールの一つを、観点関連度を算出する対象のモジュールとして取得する(S1202)。
【0049】
次いで、データ解析部202が、S1202で取得した対象モジュールから、モジュール間パスの観点関連度ウェイトデータテーブル217記載の観点関連度ウェイトの数値が0より大きなモジュール間パスを辿り、呼出先側または呼出元側方向でモジュール(C)に到達可能か否かを判定する(S1203)。今後、これらの到達可能なモジュール(C)を、全てまとめて「到達可能モジュール」と呼ぶこととする。呼出先側または呼出元側方向でモジュール(C)に到達可能であると判定した場合(S1203,Yes)、データ解析部202は、S1204へ進む。S1204では、データ解析部202が、対象モジュールの観点関連度を算出して、モジュール別観点関連判定データテーブル215へ記載する。この際の観点関連度の算出方法は複数考えられる。本例では、到達可能なモジュール(C)の観点関連度、及びそこまでに辿った呼出パス全ての観点関連度ウェイトを乗算する計算を、全ての到達可能モジュールに対して行い、それらの計算結果の和を取ったものを対象モジュールの観点関連度としている。
【0050】
呼出先側または呼出元側方向でモジュール(C)に到達可能でないと判定した場合(S1203,No)、データ解析部202は、対象モジュールの観点関連度を0と設定して、モジュール別観点関連判定データテーブル215へ記載する。なお、関連度算出対象モジュールに対するモジュール(C)の呼出段数は、必ずしも呼出先一段目または呼出元一段目のモジュールである必要はなく、呼出先または呼出元から二段目以降のモジュールで
あってもよい。
図14に、この呼出段数の詳細を示している。
図14に示すように、対象モジュールを直接呼び出しているモジュールは呼出元一段目のモジュールと、呼出元一段目のモジュールを直接呼び出しているモジュールは呼出元二段目のモジュールと定義される。同様に、対象モジュールから直接呼び出されるモジュールは呼出先一段目のモジュールであり、呼出先一段目のモジュールから直接呼び出されるモジュールは呼出先二段目のモジュールである。
【0051】
次いで、データ解析部202が、モジュール別観点関連判定データテーブル215に観点関連度が記載されていないモジュールがあるか否かを判定する(S1206)。モジュール別観点関連判定データテーブル215に観点関連度が記載されていないモジュールがあると判定した場合(S1206,Yes)、データ解析部202は、S1202にて次の関連度算出対象モジュールを取得する。モジュール別観点関連判定データテーブル215に観点関連度が記載されていないモジュールがないと判定した場合(S1206,No)、データ解析部202は
図12の処理フローを抜けて、
図9のS905へ進む。
【0052】
次に、モジュールの観点関連度の補正処理について説明する。
図13に、モジュール別観点関連判定データテーブル215に記載された全モジュールの観点関連度の補正処理の処理フロー例を示す。本処理フローは、
図9のS905を詳細化したものである。
【0053】
S1300で処理を開始すると、データ解析部202が、
図8のS804で作成したモジュール呼出関係図に関わる全モジュールの内、S1301で選択されたモジュールを把握するために作成しているリストに記録されていないモジュールを一つ選択する。その後、本処理で選択されたモジュールを前記リストへ追加する(S1301)。
【0054】
次に、データ解析部202が、S1301で選択した対象モジュールに関して、モジュール別観点関連判定データテーブル215に記載された観点関連度の補正を行うか否かを判定する。具体的には、
図13に示すように、これら一連の補正処理は、S1302〜S1304までのフローで行う。本例で用いる補正を行うか否かの判定項目としては、観点関連判定ノイズ補正閾値データテーブル214に記載されている項目を使用する。本例では、呼出元側に存在する観点非関連のパス数の項目で判定するが、これ以外の判定項目を用いることも可能である。なお、観点関連判定ノイズ補正閾値データテーブル214によると、本判定項目には条件が指定してあり、S1301で選択した対象モジュールから、観点関連度ウェイトが0より大きなモジュール間パスを辿り、呼出先側で観点関連度が0より大きなモジュールに辿りつくことができない、且つ呼出元側で観点関連度が0より大きなモジュールに辿りつくことができる必要がある。これは、本例では観点非関連の定義を観点関連度が0であることとしているためである。観点非関連の定義をモジュールの観点関連度がある閾値以下のものとしている場合には、前記の条件は、呼出先側で観点関連度が該閾値より大きいモジュールに辿りつくことができない、且つ呼出元側で観点関連度が該閾値より大きなモジュールに辿りつくことができる、となる。データ解析部202は、前記条件が成立し、且つ呼出元側に観点非関連のパスが存在するか否かを判定する(S1302)。前記条件が成立し、且つ呼出元側に観点非関連のパスが存在すると判定した場合(S1302,Yes)、データ解析部202は、S1302へ進む。前記条件が成立しない、又は呼出元側に観点非関連のパスが存在しないと判定した場合(S1302,No)、データ解析部202は、観点関連度の補正を行わないものとし、S1305へ進む。
【0055】
次に、データ解析部202が、S1302での判定が真とされたモジュールについて、
図8のS803でユーザが指定した観点関連判定ノイズ補正項目の値が、観点関連判定ノイズ補正閾値データ214に記載されている閾値以上か否かを判定する(S1303)。観点関連判定ノイズ補正項目の値が、観点関連判定ノイズ補正閾値データ214に記載さ
れている閾値以上であると判定した場合(S1303,Yes)、データ解析部202は、処理対象となっているモジュールを観点関連度の補正対象として、S1304へ進む。観点関連判定ノイズ補正項目の値が、観点関連判定ノイズ補正閾値データ214に記載されている閾値未満であると判定した場合(S1303,No)、データ解析部202は、観点関連度の補正を行わないものとし、S1305へ進む。なお、本例では、
図8のS803で、カテゴリとしてマイコンをユーザが指定し、また観点関連判定ノイズ補正項目として「呼出元側観点非関連パスの数」をユーザが指定したものと想定しているため、観点関連判定ノイズ補正閾値データテーブル214から利用する閾値は1となる。つまり、対象モジュールの呼出元側に一本でも観点非関連パスが存在すれば、観点関連度の補正対象となる。
【0056】
次に、データ解析部202が、S1302、S1303で選択した対象モジュールに関して、モジュール別観点関連判定データテーブル215に記載された観点関連度の補正を行う。補正には、補正を行うか否かの判定時に使用した、観点関連判定ノイズ補正閾値データテーブル214記載の項目の観点関連度補正値を利用する。本例では、
図8のS803で、カテゴリとしてマイコンをユーザが指定し、また観点関連判定ノイズ補正項目として呼出元側観点非関連パスの数をユーザが指定したものと想定しているため、補正値は0となる。データ解析部202は、モジュール別観点関連判定データテーブル215に記載された対象モジュールの観点関連度に補正値0を乗算した値を、対象モジュールの観点関連度とし、モジュール別観点関連判定データテーブル215へ記載する(S1304)。
【0057】
次に、データ解析部202は、今回本処理で補正を行ったモジュールがあるか否かを判定する(S1305)。今回本処理で補正を行ったモジュールがあると判定した場合(S1305,Yes)、データ解析部1305は、対象モジュールリストをクリアしてS1301へ進む(S1306)。今回本処理で補正を行ったモジュールがないと判定した場合(S1305,No)、データ解析部1305は、S1307へ進む。
【0058】
S1307において、データ解析部202は、
図8のS804で作成したモジュール呼出関係図に関わる全モジュールの内、本S1301で選択されたモジュールを把握するために作成しているリストに記録されていないモジュールがあるか否かを判定する。当該リストに記録されていないモジュールがあると判定した場合(S1307,Yes)、データ解析部202はS1301へ進む。当該リストに記録されていないモジュールがないと判定した場合(S1307,No)、データ解析部202は、本処理フローを抜けて
図9のS906から
図8のS806へ進む。
【0059】
以上説明したように、本実施形態の情報処理装置100によれば、リファクタリング観点でのモジュールは自動で選択できるが、その他の観点でのモジュールは選択できず、そのため人の手で対象モジュールを選択する必要があり、モジュール選択に工数が掛かっていた、という課題を解決し、モジュールの呼出関係と共通データの利用関係とを用いて、ソースコード内に含まれる、特定の観点に関連するモジュールを自動で選択して、プログラム図を構築・表示することで、可視化工数を削減することができる。
【0060】
図15に、本実施形態の情報処理装置100によって可視化されたプログラムの例を示している。
図15に例示するプログラム
図1500は、対象プログラムを構成するモジュールと、モジュール間のデータパスとを示している。本発明の可視化方法を利用して作成するプログラム図では、観点関連度の閾値、あるいは観点関連判定ノイズ補正閾値を変更することにより、その表示モジュールを変更することができる。本プログラム図を利用する目的、意図に応じて、観点関連度、ノイズモジュールをどの程度まで図に含めるかの考え方は異なる。したがって、例えば、観点表213に記載された観点関連度の閾値の代わりに、
図15で示すように、観点関連度閾値スライダ1501を調整してその値を閾値と
して利用することで、プログラム図利用の目的、意図に応じて、プログラム図を適宜作り替えることが可能である。なお、本実施例では、モジュールの観点関連度を、モジュールを表示するか否かで利用することとしたが、左記に限らず、モジュールを強調表示するか否かで利用する等、様々な利用法が考えられる。
【0061】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば,上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施形態の構成の一部を他の構成に置き換えることが可能であり、また、ある実施形態の構成に他の構成を加えることも可能である。