以下に添付図面を参照して、発明にかかる分析支援装置、分析支援方法、および分析支援プログラムの実施の形態を詳細に説明する。また、本実施の形態において、ソフトウェアを構成する要素を、「エンティティ」と称す。たとえば、コンポーネント、モジュール、ソースコード、クラス、関数、データベース、ファイルなどは、エンティティに該当する。本実施の形態では、エンティティとして、コンポーネント、モジュール、ソースコード、クラス、関数などのプログラムを例に挙げて説明する。
また、ソフトウェアは、たとえば、ドキュメント上に記述している業務の分類や、業務を分類した命名規約、ディレクトリの分類、Java(登録商標)のパッケージ名による分類などにより、管理されている。このような、ソフトウェアを管理するために行っているプログラムの分類を「業務分類」と称す。
また、本実施の形態の分析支援装置は、既存の業務分類を、ソフトウェアを構成するプログラム群を管理しやすい業務分類に修正する是正処置を行う方法を判断するため、既存の業務分類と現状の業務分類との乖離の構造を特定する。
ここで、「乖離の構造」とは、既存の業務分類と現状の業務分類との間に乖離が存在するが、その乖離の仕方を示す一つの指標である。業務分類間の乖離があった場合、業務分類間の乖離の構造は、以下の3種類の違いとして得られる。
(1)業務分類の相違
(2)業務分類が保持するプログラムの相違
(3)業務分類が保持するプログラム間の依存関係の相違
上記(1)〜(3)の相違は同時に存在する可能性があるが、いずれか1つでも存在すれば乖離は存在する。乖離の構造は、上記(1)〜(3)の各々の相違の大きさや相互の関係を示す。具体的には、乖離の構造は、業務分類の相違の大きさや、業務分類が保持する異なるプログラムの数や、異なるプログラムが他のプログラムとどのような依存関係にあるのかという依存関係の相違を意味する。
たとえば、プログラム間の依存関係として、プログラム間の呼出関係を取得できた場合は、その呼出構造の呼出元が異なる場合も呼出先が異なる場合も乖離に相当する。また、この場合、乖離があるプログラムが異なる。乖離の構造は、コンポーネント、モジュール、ソースコード、クラス、関数といったプログラムに限らず、データベース、ファイルについても同様である。
したがって、本実施の形態の分析支援装置は、ソフトウェアをより小規模なサブモジュールに分割した上で、平面または空間上に、サブモジュール内部のプログラムを示す図形を「役割」の依存方向および重みを反映した状態で配置する。プログラムを配置する平面または空間を「区画」と称す。また、本実施の形態は、既存の分類情報を色・形・模様など(以下、「色等」)で表現することにより、ソフトウェアの現在の分類と既存の分類との乖離の構造を解釈できる状態で出力する。これにより、ソフトウェアを構成する各プログラムを示す図形の配置と当該図形に施される既知の分類との混在形態から、ソフトウェアの構造が明らかになる。
ここで、「役割」とは、一つの業務や機能を実現している単位である。ソフトウェアのサブモジュールである役割は、ソフトウェアを分割して得られた「業務分類」として扱われる。役割の内部の依存関係の構造は、第1軸と第2軸を利用して平面または空間上でのプログラムを示す図形の配置結果として表現される。
第1軸の方向は、役割の依存方向を示す。呼出元、呼出先といった呼出関係などの依存関係を把握できるように、第1軸の方向の一端側は関係元となり、他端側は関係先となる。また、第2軸の方向は、役割の重みを反映しており、重みのある依存関係があるプログラムの図形同士が、第2軸の方向に沿って近接するように配置されるようにする。
既存の分類と現状の分類である役割とに乖離がない場合、同一役割内のプログラムの図形同士は、第2軸の方向に沿って密集し、密集内のプログラムの図形は同一色等になる。また、第1軸の方向に沿って、役割間の依存関係が表現される。一方、分類に乖離がある場合、同一役割内に異なるプログラムの図形が混在し、同一の役割内に異なる色等のプログラムの図形が配置されることになる。このように、本実施の形態の分析支援装置は、役割の配置と既知の分類の混在形態から、ソフトウェアの内部構造の解釈をしやすいように乖離の構造を出力する。
(実施の形態1)
<乖離の構造の取得例>
図1は、乖離の構造の取得例を示す説明図である。本実施の形態では、(A)複数種類に分類されている設計当初などの既存のソフトウェア100を、(B)ソフトウェア100の構成要素であるプログラム間の依存関係を元に役割の単位で分割し、(C)役割ごとに、既存の分類と現状の分類との乖離の構造を直感的に理解しやすく表示する技術である。
(A)では、例として金融システムのソフトウェア100を用いて説明する。ソフトウェア100は、たとえば、新規発行系のプログラム群101と、失効処理系のプログラム群102と、管理系のプログラム群103と、プログラム群101〜103に共通して利用される共通処理のプログラム群104と、により分類されている。新規発行系、失効処理系、管理系、および共通処理が業務分類に相当する。すなわち、ソフトウェア100は、設計当初などの既存の業務分類により分類されている。
また、ソフトウェア100のうち、a1〜a26は新規発行系のプログラムであり、b1〜b58は、失効処理系のプログラムであり、c1〜c25は管理系のプログラムであり、d1〜d62は共通処理のプログラムである。
(B)において、クラスタCL1〜CL3は、現状の分類を示す役割である。たとえば、役割1〜3のうち新規発行系のプログラム数が最も多いのは役割3であるため、利用者は、役割3を現状の新規発行系と解釈することができる。また、利用者は、プログラム数ではなく、重要なプログラムが存在するクラスタを、その重要なプログラムを有する分類として解釈することもできる。たとえば、失効処理系のプログラムb1〜b58のうち、b19〜b22が失効処理系の機能を実現するために必要不可欠なプログラムであることがわかっている場合、利用者は、役割2を現状の失効処理系と解釈することができる。
(C)では、ソフトウェア100を構成するプログラム群101〜104が、既存の業務分類と現状の業務分類との乖離の構造がわかるように配置される。具体的には、(B)のクラスタCL1〜CL3ごとに、区画D1〜D3が生成され、区画D1〜D3内にプログラムを示す図形が配置される。各区画D1〜D3は、第1軸と第2軸により張られる平面の矩形であり、乖離の構造を示す配置結果110,120,130として表示される。
ここで、第1軸は、依存関係の方向を示す軸である。たとえば、第1軸方向に並ぶプログラムの図形のうち、上の図形のプログラムが依存関係における関係元を示し、下の図形のプログラムが依存関係における関係先を示す。また、各プログラムは、業務分類ごとに色分けされる。たとえば、新規発行系は黄、失効処理系は青、管理系は緑、共通処理は赤といったように色別に表示される。なお、色ではなく、図形の形状や大きさにより区別してもよい。
また、第2軸は、プログラム間の依存関係の強さを示す軸である。依存関係とは、プログラム間の呼び出し関係や継承関係、包含関係、データアクセス関係などの関係をいう。たとえば、第2軸方向に隣り合うプログラムの図形は、そうでないプログラムの図形に比べて強い関係がある。
たとえば、配置結果110は、業務分類ごとに第1軸方向に階層化されている。具体的には、配置結果110は、第1軸方向の上から、新規発行系、失効処理系、共通処理、管理系の順に配置されている。すなわち、新規発行系と失効処理系との間には依存関係があり、新規発行系が関係元、失効処理系が関係先であることが視認できる。
このように、配置結果110により、独立している既存の業務分類間のプログラム群101〜104に依存関係があり、その依存方向が得られたことになる。したがって、ソフトウェア100を保守、管理する上で、管理者は、4層構造に見える既存の業務分類の各々を、新規の業務分類として定義して分類を見直すか否かの判断を行うことができる。また、業務分類別に担当者が割り当てられていた場合、分類の見直しに伴って担当者の担当箇所を見直すか否かの判断を行うこともできる。
また、配置結果120は、業務分類ごとに第2軸方向に階層化されている。配置結果120では、依存関係の強さを示す第2軸方向に既存の業務分類を示すプログラムの図形が複数存在しているため第2軸方向に色の混在があり、業務分類の乖離が発生していることが視認できる。また、配置結果120では、第1軸方向には、それぞれ同一業務分類しか並んでいないため、業務分類間の依存関係は得られない。
ただし、依存関係の強い図形同士が近くに配置されるため、近い位置にある既存業務分類は関係が強いと解釈できる。たとえば、配置結果120では、共通処理と新規発行系が第2軸方向に隣接しているため、両者の間には強い依存関係があることがわかる。このように、配置結果120により、ソフトウェア100を保守、管理する上で、管理者は、従来では既存の業務分類が独立であったが、現在は依存関係の強さから、隣接しあう業務分類を同一の業務分類としてグループ化するか否かの判断を行うことができる。
また、配置結果130は、業務分類に関係なく混在状態となり、既存の業務分類と現状の業務分類とは、全く異なり、その構造もわからない。既存の設計分類が利用できないほど、現状のソフトウェア100ではプログラムが混在しているので、既存の業務分類は、プログラム群101〜104の管理を行う上で利用できていないことがわかり、品質の低下が懸念される。したがって、品質を確保するために、管理者は、再構築が必要であるという判断を行うことができる。
<分析支援装置のハードウェア構成例>
図2は、分析支援装置のハードウェア構成例を示すブロック図である。図2において、分析支援装置は、CPU(Central Processing Unit)201と、ROM(Read Only Memory)202と、RAM(Random Access Memory)203と、磁気ディスクドライブ204と、磁気ディスク205と、光ディスクドライブ206と、光ディスク207と、ディスプレイ208と、I/F(Interface)209と、キーボード210と、マウス211と、スキャナ212と、プリンタ213と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。
ここで、CPU201は、分析支援装置の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスクドライブ204は、CPU201の制御にしたがって磁気ディスク205に対するデータのリード/ライトを制御する。磁気ディスク205は、磁気ディスクドライブ204の制御で書き込まれたデータを記憶する。
光ディスクドライブ206は、CPU201の制御にしたがって光ディスク207に対するデータのリード/ライトを制御する。光ディスク207は、光ディスクドライブ206の制御で書き込まれたデータを記憶したり、光ディスク207に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ208は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ208は、たとえば、液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)209は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク214に接続され、このネットワーク214を介して他の装置に接続される。そして、I/F209は、ネットワーク214と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F209には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード210は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス211は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ212は、画像を光学的に読み取り、分析支援装置内に画像データを取り込む。なお、スキャナ212は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ213は、画像データや文書データを印刷する。プリンタ213には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。なお、光ディスクドライブ206、光ディスク207、ディスプレイ208、キーボード210、マウス211、スキャナ212、およびプリンタ213の少なくともいずれか1つは、なくてもよい。
<各種情報の記憶内容>
図3は、ソースコードDB(Data Base)の記憶内容の一例を示す説明図である。図3において、ソースコードDB300は、乖離の構造の分析対象となるソフトウェア100が格納されている。ソースコードDB300は、記憶装置により構成される。図3では、図1に示したように、説明の便宜上、プログラム群101〜104の各プログラムを図形により示している。なお、本例では、新規発行系のプログラム群101の各プログラムを、プログラムa1〜a15とする。また、失効処理系のプログラム群102の各プログラムを、プログラムb1〜b32とする。また、管理系のプログラム群103の各プログラムを、プログラムc1〜c23とする。また、共通処理のプログラム群104の各プログラムを、プログラムd1〜d12とする。
なお、各プログラムに付した符号の先頭のアルファベットは、プログラムの先頭1文字目に出現する既存の業務分類に応じたプログラム名による命名規約を示している。たとえば、aは新規発行系を特定する命令規約、bは失効処理系を特定する命令規約、cは管理系を特定する命令規約、dは共通処理を特定する命令規約を示す。また、ソースコードDB300には、ソフトウェア100を構成するプログラムごとの依存関係を示す依存関係情報301が格納されている。
図4は、依存関係情報301の一例を示す説明図である。依存関係情報301は、関係元のプログラムと関係先のプログラムとを関連付けた情報である。たとえば、依存関係が呼び出し関係を示している場合、関係元が「c1」、関係先が「c2」の例では、プログラムc1がプログラムc2を呼び出していることになる。依存関係情報301は記憶装置に記憶される。
図5は、既存分類情報を示す説明図である。既存分類情報500とは、既存の業務分類に関する情報を、ソフトウェア100内の各プログラムに関連付けるための情報である。既存分類情報500は記憶装置に記憶される。既存分類情報500は、既存業務分類名項目と、命令規約項目と、色情報項目とを有し、既存の業務分類ごとにレコードを構成するテーブルである。既存業務分類名項目は、既存の業務分類名として、たとえば、「新規発行系」、「失効処理系」、「管理系」、「共通処理」を記憶する項目である。
命令規約項目は、既存の業務分類に応じた命令規約を記憶する項目である。本実施の形態では、ソフトウェア100内の各プログラムの分類基準を、一例としてプログラム名による命名規約とする。したがって、たとえば、プログラム名の先頭1文字によって、分類される。ここで、たとえば、先頭1文字が「a」のプログラムは、新規発行系の既存業務分類名に分類される。なお、命令規約ではなく、ディレクトリ構造を採用してもよい。
色情報項目は、既存の業務分類に応じたプログラムを示す図形に施す色情報を記憶する項目である。本実施の形態では、上述したように、新規発行系は黄、失効処理系は青、管理系は緑、共通処理は赤といったように色別に表示される。また、図5では、色情報としたが、プログラムを示す図形の大きさや形状、図形に施される模様などでもよい。
<分析支援装置の機能的構成例>
図6は、分析支援装置の機能的構成例を示すブロック図である。分析支援装置600は、区画単位取得部601と、設定部602と、区画配置処理部603と、分類処理部604と、を有する。区画単位取得部601、設定部602、区画配置処理部603、および分類処理部604は、具体的には、たとえば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F209により、その機能を実現する。
区画単位取得部601は、ソースコードDB300内のソフトウェア100のソースコードおよび依存関係情報301を入力して、重み付き依存関係情報および役割情報を出力する。ここで、重み付き依存関係情報および役割情報について、具体例を挙げて説明する。
図7は、重み付き依存関係情報の一例を示す説明図である。重み付き依存関係情報700は、図4に示した依存関係情報301の各レコードに重みを関連付けた情報である。重みとは、関係元とその関係先との依存関係の重要度を示す指標である。重みは、その値が大きいほど重要であることを示す。重みとしては、たとえば、予め、関係元のプログラム、関係先のプログラム、または、依存関係に対して付与された値が用いられる。たとえば、新規発行系のプログラム群の中で重要な機能を実現するプログラムについてはそうでないプログラムよりも重みの値が大きく設定される。
また、重みとして本質度を用いることもできる。本質度とは、依存関係において、関係元が役割を果たすためにその依存関係がどれだけ重要かを示す度合いである。本質度を用いた例については後述する。なお、本実施の形態では、入力された依存関係情報301に対し重みを付与して、重み付き依存関係情報700を出力することとしたが、外部装置から重み付き依存関係情報700を受け付けることとしてもよい。
図8は、役割情報の一例を示す説明図である。役割情報800は、ソフトウェア100を構成するプログラム群101〜104を、複数のクラスタにクラスタ化した情報である。役割1〜3がクラスタCL1〜CL3となる。たとえば、役割1〜3のうち新規発行系のプログラム数が最も多いのは役割2であるため、利用者は、役割2を現状の新規発行系と解釈することができる。また、利用者は、プログラム数ではなく、重要なプログラムが存在するクラスタを、その重要なプログラムを有する分類として解釈することもできる。たとえば、失効処理系のプログラムb1〜b32のうち、b28〜b32が失効処理系の機能を実現するために必要不可欠なプログラムであることがわかっている場合、利用者は、役割3を現状の失効処理系と解釈することができる。
図9は、図8に示した役割1の具体例を示す説明図である。図9では、プログラムごとに「役割1」が関連付けられている。図9では、役割情報800のうち役割1について詳細化しているが、役割2,3についても同様に、プログラムごとに、「役割2」、「役割3」が関連付けられる。また、クラスタ化の手法としては、上述した特許文献1,2や非特許文献1〜3の技術を適用することができる。また、重み付き依存関係情報700の重みが本質度の場合のクラスタ化については後述する。また、重み付き依存関係情報700と同様、役割情報800は、入力されたソフトウェア100のソースコードから役割情報を出力することとしたが、外部装置から役割情報800を受け付けることとしてもよい。
図6に戻り、設定部602は、役割ごとに、役割内の各プログラムに含まれる属性に応じた分類情報を設定する。具体的には、たとえば、設定部602は、既存分類情報500を参照して、プログラムごとに既存の分類情報を取得する。たとえば、プログラムa1〜a12の場合、先頭1文字目には属性の一例として命令規約「a」が記述されているため、色情報「黄色」を分類情報として取得する。図10は、分類情報の一例を示す説明図である。図10は、図9に示した役割1に含まれるプログラム群についての分類情報1000である。
区画配置処理部603は、区画単位取得部601によって取得された区画の分類とその区画内部の構造を区画に配置し、配置結果として出力する。具体的には、たとえば、区画配置処理部603は、役割1〜3ごとに区画を設定し、区画内にプログラムを示す図形を配置する。区画において、第1軸は役割の依存方向を示しているため、ある関係元とその関係先に関しては、関係元が上流、関係先が下流に位置するように、関係元のプログラムを示す図形と関係先のプログラムを示す図形を配置する。より具体的には、区画配置処理部603は、Greedy−Cycle−Removal法を利用して、第1軸の上から依存関係の逆流が少ない形で配置する。また、第2軸は役割の近さを示しているため、区画配置処理部603は、依存関係に重みを反映して、依存関係があるプログラム同士を第2軸の方向に沿って近接して配置する。
区画配置処理部603は、生成部631と、配置部632と、入替部633と、判断部634とを有する。生成部631は、重み付き依存関係情報700を参照して、各プログラムの出次数と入次数を算出することにより、関係元のプログラムが関係先のプログラムよりも上位に配列されるプログラム列を生成する。具体的には、たとえば、生成部631は、Greedy−Cycle−Removal法を利用して第1軸の上流から依存関係の逆流が少ないプログラム列を生成する。
ここで、役割1を例に挙げてGreedy−Cycle−Removal法を利用した生成部631の詳細な処理内容について説明する。まず、生成部631は、図7に示した役割1の重み付き依存関係情報700から、有向グラフを生成する。有向グラフとは、プログラムをノード、依存関係を有向なエッジとするグラフである。具体的には、エッジの始端のノードが関係元であり、エッジの終端(矢印の先)が関係先である。この有向グラフを示す集合をGとする。また、SlとSrという順序を保持した集合を用意する。
つぎに、生成部631は、ソースコードDB300内のプログラム群から集合Gの要素である役割1のプログラムを抽出する。生成部631は、重み付き依存関係情報700を参照して、抽出した各プログラムについて、当該プログラムが依存関係の関係元となっている数を出次数、依存関係の関係先となる数を入次数として記録する。また、生成部631は、各プログラムについて、出次数から入次数を引いた差分も記録する。
たとえば、図7を参照すると、生成部631は、プログラムa1について、関係元となっている項目を調査する。この場合、プログラムa1は、プログラムc6,c7,b13,c9の4個のプログラムの関係元であることがわかる。したがって、プログラムa1の出次数は「4」である。また、プログラムa1は、プログラムd1,d2の2個のプログラムの関係先であることがわかる。したがって、プログラムa1の入次数は「2」である。また、プログラムa1について、出次数から入次数を引いた差分は、「2」である。
図11は、出次数・入次数テーブルを示す説明図である。出次数・入次数テーブル1100は、プログラムごとに、出次数、入次数、出次数から入次数を引いた差分を記録するテーブルである。図11では、役割1のプログラム群について記録されているが、役割2,3についても同様に記録される。
つぎに、生成部631は、図11に示した出次数・入次数テーブル1100から出次数が「0」のプログラムを特定する。生成部631は、出次数が「0」のプログラムを、集合Srの先頭に追加し、集合Gから削除する。図11の例では、プログラムa2,a3,b3,b5,b7,b11,b14,c3,c7,c8の順に集合Srの先頭に追加され、集合Gから削除される。
つぎに、生成部631は、10個のプログラムa2,a3,b3,b5,b7,b11,b14,c3,c7,c8のレコードを、出次数・入次数テーブル1100から削除する。また、生成部631は、削除後の集合Gにより、出次数、入次数、差分を再計算して、削除後の出次数・入次数テーブル1100を更新する。
図12は、更新後の出次数・入次数テーブル1100を示す説明図である。生成部631は、更新後の出次数・入次数テーブル1100から出次数が「0」のプログラムを特定する。生成部631は、出次数が「0」のプログラムを、集合Srに追加し、集合Gから削除する。図12の例では、プログラムb2,b4,b8,b9,b10,b13,c10,c11,d3の順に集合Srの先頭に追加され、集合Gから削除される。
つぎに、生成部631は、9個のプログラムb2,b4,b8,b9,b10,b13,c10,c11,d3のレコードを、図12に示した出次数・入次数テーブル1100から削除する。また、生成部631は、削除後の集合Gにより、出次数、入次数、差分を再計算して、削除後の出次数・入次数テーブル1100を更新する。このような処理を、出次数が「0」であるプログラムがなくなるまで繰り返すことになる。これにより、最終的に集合Gには、プログラムc1,c4が残される。
出次数が「0」であるプログラムがなくなった場合、生成部631は、集合Gに残されているプログラム群の各プログラムについて、最新の出次数・入次数テーブル1100から入次数が「0」のプログラムを特定する。生成部631は、入次数が「0」のプログラムを、集合Slの末尾から追加し、集合Gから削除する。つぎに、生成部631は、入次数が「0」のプログラムのレコードを、最新の出次数・入次数テーブル1100から削除する。また、生成部631は、削除後の集合Gにより、出次数、入次数、差分を再計算して、削除後の出次数・入次数テーブル1100を更新する。この処理を繰り返すことにより、入次数が「0」のプログラムや出次数が「0」のプログラムが集合Gから順に取り除かれ、出次数、入次数のいずれも「0」にならないプログラムが集合Gに残される。
このあと、集合Gに残存するプログラムについて、生成部631は、出次数から入次数を引いた差分を計算する。そして、生成部631は、差分が最大となるプログラムを集合Slの末尾に追加し、集合Gから削除する。本例では、差分が最大となるプログラムは、プログラムc1,c4であるため、生成部631は、プログラムc1,c4を集合Slの末尾に追加し、集合Gから削除する。本例では、プログラムc1,c4が集合Gから削除されたことにより、集合Gは空集合になったとする。集合Gが空集合になると、生成部631は、集合Slの末尾に集合Srの先頭を連結して、集合Sを作成する。
図13は、集合Sの一例を示す説明図である。集合Sのうち順序1〜2のレコードが集合Slの部分であり、順序3〜36が集合Srの部分である。また、集合Srの部分のうち、順序27〜36が、図11の例により集合Srに追加されたプログラム群であり、順序18〜26が図12の例により集合Srに追加されたプログラム群である。
集合Sは、順序を保持している集合であり、先頭から末尾までの方向に依存関係が存在する。すなわち、先頭に行くほど関係元となり、末尾に行くほど関係先となる。したがって、依存関係の逆流が抑制される。
配置部632は、関係元を上流とし関係先を下流とした場合に上流から下流に向かう依存方向を示す第1軸と、重みを示す第2軸と、により規定される平面の区画に対し、生成部631によって生成されたプログラム列の各プログラムを示す図形を配置する。具体的には、配置部632は、プログラム列の上位からプログラムを抽出して、第2軸の方向に沿い、かつ、第2軸の方向に沿って配置される図形の列が依存方向の上流から下流に向かうように配置する。
具体的には、たとえば、配置部632は、集合Sの先頭から順にプログラムを取り出し、区画内に配置する。配置先となる区画の第1軸方向の長さと第2軸方向の長さは集合S内のプログラム数に応じて決定される。ただし、第1軸と第2軸により規定される区画となる矩形は、第1軸方向および第2軸方向に複数列のプログラムを示す図形が配置されるような区画とする。区画は正方形またはそれに近い矩形が好ましいため、集合S内のプログラム数をpとすると、たとえば、(q−1)2<p≦q2を満たす矩形とすればよい。qは1以上の整数である。これにより、第1軸方向に最大q個、第2軸方向にも最大q個のプログラムの図形が配置可能となる。そして、第1軸と第2軸により規定される区画となる矩形内に収まるように、プログラムを示す図形が配置される。
図14は、図13に示した集合Sの順序番号の昇順にしたがってプログラムが配置された配置結果例を示す説明図である。配置結果1400は、集合Sのプログラム数は36個であるため、区画を規定する矩形も6行6列の矩形となっている。配置部632は、集合Sの順序番号の昇順に、プログラムを示す図形を区画に配置していく。この場合、順序番号1のプログラムc1を示す図形は、(x,y)=(1,1)に配置され、昇順に第2軸方向に配置される。第2軸方向の末端まで配置されると、つぎのプログラムa1を示す図形は、(x,y)=(2,1)に配置され、昇順に第2軸方向に配置される。そして、昇順の最後のプログラムb14を示す図形は、(x,y)=(6,6)に配置される。
図15は、図14に示した配置結果1400に応じた配置情報を示す説明図である。配置情報は、プログラムごとにx座標値とy座標値を有する。x座標値は、第2軸方向の座標値であり、y座標値は第1軸方向の座標値である。なお、区画の左上頂点を原点とする。また、座標値単位は、図形の個数である。たとえば、プログラムc4は、第2軸方向に2個目、第1軸方向に1個目であるため、(x,y)=(2,1)となる。
また、入替部633は、配置部632によって配置された配置結果のうち第2軸の方向に配置されている図形の列の中から選ばれた2つの図形を入れ替える。具体的には、たとえば、入替部633は、第2軸方向に沿った同一行について、2つのプログラムの図形を選択する。選択方法としては、たとえば、隣接しあうプログラムの図形が選択される。
また、判断部634は、依存関係の重みと、依存関係により特定される関係元のプログラムから関係先のプログラムまでの第2軸の方向に関する距離と、に基づく、依存関係の強さを示す依存関係ごとのスコアを算出する。つぎに、判断部634は、算出された依存関係ごとのスコアの総和を算出する。判断部634は、依存関係ごとのスコアの算出と、当該スコアの総和の算出を、入替部633による入替前後の配置結果の各々について実行する。そして、判断部634は、入替後の総和が入替前の総和以上であるか否かを判断する。
具体的には、たとえば、判断部634は、図14に示した配置結果1400を初期状態として、区画内のプログラムごとに、プログラム間の重みが大きい依存関係をより近くに配置できるようにスコアを計算し、スコアに応じて再配置を実行する。これにより、依存関係が強いプログラム同士が近接配置されるようになる。以下、具体的に説明する。
まず、判断部634は、重み付き依存関係情報700を参照して、区画内の各プログラムの重みを取得する。つぎに、判断部634は、プログラムごとに、取得した重みと距離とに基づいてスコアを算出する。ここで、距離とは、算出対象となる関係元のプログラムから関係先のプログラムまでの第2軸方向の図形の個数である。たとえば、配置結果1400において、プログラムc1が関係元、プログラムc5がその関係先である場合、距離は「3」である。また、プログラムc4が関係元、プログラムc1がその関係先である場合、距離は「1」である。また、プログラムd3が関係元、プログラムc8がその関係先である場合、距離は「3」である。また、プログラムd2が関係元、プログラムd3がその関係先である場合、距離は「4」である。そして、判断部634は、区画内のプログラムごとのスコアの総和を算出する。
図16は、スコア算出テーブルの一例を示す説明図である。図16のスコア算出テーブル1600において、プログラムc1が関係元、プログラムc2がその関係先である場合、重みが「1」であり、距離が「2」であるため、スコアは、1×2=2となる。判断部634は、他のプログラムについても同様にスコアを算出し、算出されたスコアの総和を求める。この場合、スコアの総和は、「95.2」となる。
配置結果が示す区画は、第2軸方向に複数のプログラムの列が複数存在するため、入替部633による第2軸方向の入れ替え作業が実行される。上述したように、入替部633は、第2軸方向に沿った同一行について、2つのプログラムの図形を選択する。選択方法としては、たとえば、隣接しあうプログラムの図形が選択される。そして、判断部634は、選択されたプログラムの図形を入れ替えた場合のスコアを算出する。判断部634は、入れ替え前後のスコアを比較し、入れ替え後のスコアの総和が入れ替え前より低ければ、入れ替え後のスコアを採用する。入替部633は、この入れ替え作業を各プログラムに対して繰り返し実行する。
図17は、プログラムの入れ替え作業(1回目)を示す説明図である。図17では、配置結果1400において、隣接しあうプログラムc1,c4が選択されて、プログラムc1,c4の図形の位置が入れ替えられた配置結果1700となる。
たとえば、区画の1行目のプログラムc1,c4が選択された場合、判断部634は、プログラムc1とプログラムc4との各々を関係元または関係先とする依存関係について、スコア計算を実行する。プログラムc1,c4の場合、以下の依存関係が存在する。なお、以下の{f,g}は、fが関係元のプログラム、gが関係先のプログラムとなる依存関係である。
{c1,c2}
{c1,c4}
{c1,c5}
{c4,c5}
{c4,c1}
{c4,b1}
{c1,c2}の距離は、入れ替え前の「2」から入れ替え後の「1」に変更される。{c1,c4}の距離は、入れ替え前後でともに「1」であるため変更なしである。{c1,c5}の距離は、入れ替え前の「3」から入れ替え後の「2」に変更される。{c4,c5}の距離は、入れ替え前の「2」から入れ替え後の「3」に変更される。{c4,c1}の距離は、入れ替え前後でともに「1」であるため変更なしである。{c4,b1}の距離は、入れ替え前の「0」から入れ替え後の「1」に変更される。
したがって、{c1,c2}のスコアは「1」、{c1,c4}のスコアは「1」、{c1,c5}のスコアは「2」、{c4,c5}のスコアは「3」、{c4,c1}のスコアは「0.1」、{c4,b1}のスコアは「1」となる。入れ替えた依存関係のスコアと残りの依存関係のスコアの総和を求めると、図16に示したように、入れ替え前と同じ95.2点である。したがって、プログラムc1の図形とプログラムc4の図形とは入れ替えず、元の位置を採用する。すなわち、図17の入れ替え後の配置結果1700の採用は見送られ、図14の入れ替え前の配置結果1400が維持される。区画配置処理部603は、同様の処理を、第2軸方向のプログラムを1つシフトしてプログラムを選択して、実行することになる。具体的には、プログラムc4,c2が選択される。
図18は、プログラムの入れ替え作業(2回目)を示す説明図である。図18では、配置結果1400において、隣接しあうプログラムc4,c2が選択されて、図14に比べて、プログラムc4,c2の図形の位置が入れ替えられた配置結果1800となる。この場合の入れ替え後のスコアの総和は、図16に示したように、96.3点となり、入れ替え前のスコアの総和95.2点より大きいため、図18の配置結果1800の採用は見送られ、図14の入れ替え前の配置結果1400が維持される。
図19は、プログラムの入れ替え作業(3回目)を示す説明図である。図19では、配置結果1400において、隣接しあうプログラムc2,c5が選択されて、図14に比べて、プログラムc2,c5の図形の位置が入れ替えられた配置結果1900となる。この場合の入れ替え後のスコアの総和は、図16に示したように、93.3点となり、入れ替え前のスコアの総和95.2点を下回るため、図19の配置結果1900が採用される。すなわち、入れ替え後の方が、全体的に距離が近くなっていることを示している。したがって、次の入れ替え作業では、図19の配置結果1900が基準となる。
図20は、プログラムの入れ替え作業(4回目)を示す説明図である。図20では、配置結果1900において、隣接しあうプログラムc2,d1が選択されて、図19に比べて、プログラムc2,d1の図形の位置が入れ替えられた配置結果2000となる。この場合の入れ替え後のスコアの総和は、図16に示したように、93.3点となり、入れ替え前のスコアの総和93.3点と同じであるため、図20の配置結果2000の採用は見送られ、図19の入れ替え前の配置結果1900が維持される。
図21は、プログラムの入れ替え作業(5回目)を示す説明図である。図21では、配置結果1900において、隣接しあうプログラムd1,d2が選択されて、図19に比べて、プログラムd1,d2の図形の位置が入れ替えられた配置結果2100となる。この場合の入れ替え後のスコアの総和は、図16に示したように、93.3点となり、入れ替え前のスコアの総和93.3点と同じであるため、図21の配置結果2100の採用は見送られ、図19の入れ替え前の配置結果1900が維持される。以下、同様にすべてのプログラムが選択されるまで第2軸方向の行ごとに実行される。
なお、図14〜図21の例では、隣接しあうプログラム同士を選択したが、すべてのプログラムが選択されるまで、第2軸方向の同一行であれば離間しているプログラム同士の選択を行って入れ替え作業を実行してもよい。このように、入替後のスコアの総和が入替前のスコアの総和を下回るように入れ替え作業を実行することにより、依存関係が強いプログラムほど、より近接した位置に配置されることになる。
図6に戻って、分類処理部604は、区画内の各プログラムを示す図形に対して、既存の分類情報により指定された色等を割り当てて表示する。具体的には、たとえば、分類処理部604は、決定部641と、割当部642と、出力部643と、を有する。決定部641は、判断部634により入替後の総和が入替前の総和以上である場合は入替前の配置結果を分類情報1000の割当対象に決定し、入替後の総和が入替前の総和未満である場合は入替後の配置結果を分類情報1000の割当対象に決定する。すなわち、決定部641は、判断部634によって採用された配置結果を、分類情報の割当対象に決定する。
割当部642は、決定部641によって割当対象に決定された配置結果内の各図形に対し当該図形が示すプログラムに対応する分類情報1000を割り当てる。割当部642による分類情報1000の割当ては、区画配置処理部603での入れ替え作業開始時でもよく、また、入れ替え作業完了後でもよい。また、出力部643は、割当部642による割当結果を出力する。出力形式としては、たとえば、ディスプレイ208による表示、プリンタ213による印刷、他の装置への送信、分析支援装置600内の記憶装置への格納などがある。
これにより、既存の分類が現状の分類を示す役割の中でどのような位置に存在するかが直感的に把握し易くなり、乖離の構造の理解の容易化を図ることができる。区画配置処理部603および分類処理部604による処理が完了すると、出力結果610が出力される。
図22〜図27は、出力結果610の一例を示す説明図である。図22の配置結果2200は、図1に示した配置結果110と同じ内容である。配置結果2200により、ソフトウェア100を保守、管理する上で、管理者は、4層構造に見える既存の業務分類の各々を、新規の業務分類として定義して分類を見直すか否かの判断を行うことができる。また、業務分類別に担当者が割り当てられていた場合、分類の見直しに伴って担当者の担当箇所を見直すか否かの判断を行うこともできる。
図23の配置結果2300は、図1に示した配置結果120と同じ内容である。配置結果2300により、ソフトウェア100を保守、管理する上で、管理者は、従来では既存の業務分類が独立であったが、現在は依存関係の強さから、隣接しあう業務分類を同一の業務分類としてグループ化するか否かの判断を行うことができる。
図24の配置結果2400は、図1に示した配置結果130と同じ内容である。配置結果2400により、既存の設計分類が利用できないほど、現状のソフトウェア100ではプログラムが混在しているので、既存の業務分類は、プログラム群の管理を行う上で利用できていないことがわかり、品質の低下が懸念される。したがって、品質を確保するために、管理者は、再構築が必要であるという判断を行うことができる。
図25の配置結果2500は、部分的に異なる分類のプログラムが混在している構造を示している。関係元を第1軸方向の上位、関係先を第1軸方向の下位、その中間に位置するものを中位とする。配置結果2500は、「上位が混在、下位は一色」に該当するため、下位において集約されているプログラム群を呼び出す上位のプログラム群は複数の分類が混在する構造であるため、下位において集約されているプログラム群が、上位のプログラム群に対して支配的ということが言える。
配置結果2500において、たとえば、下位のプログラム群が共通処理であれば、管理者は、上位の混在しているプログラム群を共通処理に関係するプログラム群として再分類することにより、プログラムの関係先に基づいて当該区画内のプログラム群を管理することができる。
図26の配置結果2600は、配置結果2500とは逆に、「上位が一色、下位が混在」に該当する構造である。配置結果2600の場合、一種類の上位のプログラム群が、他の混在するプログラム群を下位に保持しているとみることができる。このことから、区画により規定される役割において、ディスパッチの可能性がある。したがって、管理者は、混在する下位のプログラム群をまとめて上位のプログラム群の役割として再分類(再構成)してプログラムを管理することができる。
図27の配置結果2700は、配置結果2500,2600のように上位、下位といえないが、支配的な色がある構造を示している。既存の業務分類で中心的なプログラムがあるが、上位、下位という依存関係の方向がなく、依存関係の強さを示す近さの情報も得られていない。したがって、管理者は、完全混在と近いと判断して、既存の業務分類は、プログラムの管理を行う上で全く利用できていないと判断することができる。すなわち、品質の低下が懸念されるため、品質を確保するために、管理者は、再構築が必要という判断をすることができる。
<分析支援装置600による分析支援処理手順例>
図28は、設定部602による設定処理手順例を示すフローチャートである。まず、分析支援装置600は、既存分類情報500を読み込み(ステップS2801)、ソースコードDB300内のプログラム群の中から、未選択のプログラムを1つ選択する(ステップS2802)。そして、分析支援装置600は、既存分類情報500を参照して、選択プログラムが既存業務分類に該当するか否かを判断する(ステップS2803)。既存業務分類に該当する場合(ステップS2803:Yes)、分析支援装置600は、既存分類情報500を参照して、該当する分類の色情報を選択プログラムに割り当てて(ステップS2804)、ステップS2806に移行する。一方、既存業務分類に該当しない場合(ステップS2803:No)、分析支援装置600は、既存分類情報500にはない「その他」を示す色情報を選択プログラムに割り当てて(ステップS2805)、ステップS2806に移行する。
ステップS2806では、分析支援装置600は、未選択のプログラムがあるか否かを判断する(ステップS2806)。未選択のプログラムがある場合(ステップS2806:Yes)、ステップS2802に戻り、未選択のプログラムを1つ選択することになる。一方、未選択のプログラムがない場合(ステップS2806:No)、設定部602による設定処理を終了する。これにより、図10に示したような分類情報1000が得られることになる。
これにより、未選択のプログラムがなくなるまで業務分類に応じた色情報の割当てが実行されるため、ソフトウェア100を構成する各プログラムを表示させる色が確定することになる。したがって、出力結果が表示された場合、どの分類のプログラムがどの位置にいるかを、利用者は直感的に把握することができる。
図29は、区画配置処理部603による区画配置処理手順例を示すフローチャート(前半)である。区画配置処理部603による区画配置処理は、役割ごと、すなわち、区画ごとに実行される。まず、分析支援装置600は、重み付き依存関係情報700から有向グラフを生成し、有向グラフを集合Gとして保持する(ステップS2901)。つぎに、分析支援装置600は、集合G内のプログラムごとに出次数と入次数とを算出する(ステップS2902)。算出された出次数と入次数は出次数・入次数テーブル1100に記録される。
そして、分析支援装置600は、出次数・入次数テーブル1100を参照して、集合Gに出次数が「0」のプログラムがあるか否かを判断する(ステップS2903)。出次数が「0」のプログラムがある場合(ステップS2903:Yes)、分析支援装置600は、出次数が「0」のプログラムを集合Srの先頭に追加して、集合Gから削除する(ステップS2904)。そして、ステップS2902に戻り、削除後の集合G内のプログラムごとに、出次数と入次数の算出が実行される(ステップS2902)。出次数と入次数が再算出されると、出次数が「0」のプログラムが再度出現する可能性があるため、出次数が「0」のプログラムがなくなるまで繰り返すことになる。
また、ステップS2903において、出次数が「0」のプログラムが集合Gにない場合(ステップS2903:No)、分析支援装置600は、出次数・入次数テーブル1100を参照して、集合Gに入次数が「0」のプログラムがあるか否かを判断する(ステップS2905)。入次数が「0」のプログラムがある場合(ステップS2905:Yes)、分析支援装置600は、入次数が「0」のプログラムを集合Slの末尾に追加して、集合Gから削除する(ステップS2906)。そして、ステップS2902に戻り、削除後の集合G内のプログラムごとに、出次数と入次数の算出が実行される(ステップS2902)。出次数と入次数が再算出されると、出次数が「0」のプログラムが再度出現する可能性があるため、出次数が「0」のプログラムがなくなるまで繰り返すことになる。
一方、ステップS2905において、入次数が「0」のプログラムがない場合(ステップS2905:No)、分析支援装置600は、集合Gが空になったか否かを判断する(ステップS2907)。集合Gが空になった場合(ステップS2907:Yes)、ステップS2912に移行する。一方、集合Gが空でない場合(ステップS2907:No)、分析支援装置600は、集合G内のプログラムごとに、出次数から入次数を引いた差分を算出する(ステップS2908)。そして、分析支援装置600は、集合Gから差分が最大となるプログラムを取得し(ステップS2909)、集合Slの末尾に追加して、集合Gから削除する(ステップS2910)。
そして、分析支援装置600は、再度集合Gが空になったか否かを判断する(ステップS2911)。空でない場合(ステップS2911:No)、ステップS2902に戻り、削除後の集合G内のプログラムごとに、出次数と入次数の算出が実行される(ステップS2902)。出次数と入次数が再算出されると、出次数が「0」のプログラムが再度出現する可能性があるため、出次数が「0」のプログラムがなくなるまで繰り返すことになる。また、ステップS2911において、集合Gが空になった場合(ステップS2911:Yes)、分析支援装置600は、集合Slの末尾に集合Srを連結して集合Sを生成する(ステップS2912)。このあと、図30のステップS3001に移行する。
図30は、区画配置処理部603による区画配置処理手順例を示すフローチャート(後半)である。図29のステップS2912により集合Sを生成したあと、図30において、分析支援装置600は、集合Sからプログラムを先頭から順に取り出し、区画内に第2軸方向を優先して配置する(ステップS3001)。これにより、配置結果が得られることになる。つぎに、分析支援装置600は、重み付き依存関係情報700を参照して、依存関係ごとの重みを取得し(ステップS3002)、スコア算出テーブル1600を用いて、依存関係ごとに、重みに距離を乗じたスコアとその総和を算出する(ステップS3003)。
そして、分析支援装置600は、現時点で最新の配置結果を保存する(ステップS3004)。つぎに、分析支援装置600は、プログラムに対して第2軸方向で入れ替えが可能であるか否かを判断する(ステップS3005)。たとえば、入れ替えにおいて未選択のプログラムがあれば入れ替え可能と判断される。
入れ替え可能でない場合(ステップS3005:No)、区画配置処理を終了する。一方、入れ替え可能である場合(ステップS3005:Yes)、分析支援装置600は、第2軸方向の入れ替え対象に選ばれた行内で、2つのプログラムの図形の位置を入れ替える(ステップS3006)。そして、分析支援装置600は、ステップS3003と同様、入れ替え後において、入れ替えられたプログラムを含む依存関係についてスコアを算出し、入れ替えられたプログラムを含まない依存関係のスコアとともに、スコアの総和を算出する(ステップS3007)。
そして、分析支援装置600は、入れ替え前後のスコアの総和を比較して、入れ替え後のスコアの総和が入れ替え前のスコアの総和を下回ったか否かを判断する(ステップS3008)。下回った場合(ステップS3008:Yes)、分析支援装置600は、入れ替え後の配置結果を採用して(ステップS3009)、ステップS3011に移行する。一方、下回っていない場合(ステップS3008:No)、分析支援装置600は、入れ替え後の配置結果を採用せず、入れ替え前の配置結果を維持して(ステップS3010)、ステップS3011に移行する。
ステップS3011では、分析支援装置600は、入れ替え対象の行内において、入れ替えを試行すべきプログラムの入れ替えをすべて試行したか否かを判断する(ステップS3011)。なお、入れ替えを試行すべきプログラムは、入れ替え対象の行内の全プログラムでもよく、一部のプログラムでもよい。試行すべきプログラムが試行されていない場合(ステップS3011:No)、ステップS3005に戻る。一方、試行すべきプログラムがすべて試行された場合(ステップS3011:Yes)、分析支援装置600は、試行すべきすべての行をすべて入れ替え対象の行として試行したか否かを判断する(ステップS3012)。
試行していない場合(ステップS3012:No)、ステップS3005に戻り、分析支援装置600は、試行すべき行を入れ替え対象の行とし、第2軸方向で入れ替え可能か否かを判断することになる。一方、試行された場合(ステップS3012:Yes)、ステップS3004で保存された最新の配置結果と比較して、入れ替えがあったか否かを判断する(ステップS3013)。入れ替えがあった場合(ステップS3013:Yes)、ステップS3004に戻り、分析支援装置600は、配置結果を更新することになる。一方、入れ替えがなかった場合(ステップS3013:No)、区画配置処理部603による区画配置処理を終了する。これにより、依存関係が強いプログラムほど、より近接した位置に配置されることになる。
図31は、分類処理部604による分類処理手順例を示すフローチャートである。分類処理部604による分類処理も、区画配置処理部603による区画配置処理と同様、役割ごと、すなわち、区画ごとに実行される。まず、分析支援装置600は、分類情報を取得し(ステップS3101)、分類情報からプログラムごとの色情報を取得する(ステップS3102)。そして、区画内の配置結果から順にプログラムの図形を取得し(ステップS3103)、ステップS3102で取得した色情報を設定する(ステップS3104)。
このあと、分析支援装置600は、未設定のプログラムがあるか否かを判断し(ステップS3105)、未設定のプログラムがある場合(ステップS3105:Yes)、分析支援装置600は、未設定のプログラムに対し、ステップS3102で取得した色情報を設定する(ステップS3104)。一方、未設定のプログラムがない場合(ステップS3105:No)、分類処理部604による分類処理を終了する。これにより、既存の分類が現状の分類を示す役割の中でどのような位置に存在するかが直感的に把握し易くなり、乖離の構造の理解の容易化を図ることができる。
このように、実施の形態1では、出次数と入次数の関係から、関係元と関係先に順序を設けることで、関係数が多く複雑なプログラム群に対して集合Sで示した順序を決定することができる。順序を決定した時点では、最も逆流の少なくなるように順序が定められているが、逆流がいくつか存在したり、依存関係数に関係なく、順番を飛び越えて依存があるプログラムが存在したりする可能性がある。したがって、集合Sで得られている順序は、依存関係が一方向に流れるとは限らない場合も含んでいる。
また、順序の決定時点では、区画内の依存関係の方向は取得しているが、依存関係の重みを利用していない。そこで、一度、区画内に順に配置し、第2軸方向に限って各プログラムを順に入れ替えてスコアを計算し、区画内のスコアの総和の最小値を選択することで、依存関係の重みが強いプログラム同士を近接した距離に配置することができる。したがって、第2軸方向の距離が調整された配置が得られる。
第2軸方向に入れ替えがあったとしても、関係元が多いプログラムが上位、関係元が少ないプログラムが下位となる第1軸方向の配置は保持されるため、依存関係の方向は、第1軸方向により示される。たとえば、第1軸が一列の区画に対して順に配置した場合は、依存方向のみの配置結果となる。一方、第2軸が一列の区画に対して配置した場合は、依存方向に基づいて配置した後、各プログラムに対して、入れ替え操作を行い、重みがあるプログラム同士が近くに寄せられた配置結果が得られるため、依存関係の重みの強さに応じた近さが得られる。したがって、実施の形態1の区画は、第1軸方向および第2軸方向のいずれも表現かのうな2行2列以上の区画となる。
このように、実施の形態1によれば、より多くの関係先と依存関係がある関係元が第1軸の上流側に配置され、関係先との依存関係がない、または、少ない関係元であるほど第1軸の下流側に配置される。このため、管理者は、第1軸の方向により、関係元から関係先への依存関係の方向を把握することができる。また、第2軸において依存関係が強いプログラムほど、より近接した位置に配置されることになる。このため、管理者は、第2軸の方向により、依存関係のある2つのプログラム間の重要度を把握することができる。
したがって、第1軸と第2軸により規定される区画上の配置によりプログラムの依存関係や重みの強さを表現し、かつ、プログラムの分類を図形の色等で表現することにより、既存の分類が現状の分類を示す役割の中でどのような位置に存在するかが直感的に把握し易くなり、乖離の構造の特定の容易化を図ることができる。また、配置結果のうち、第2軸方向に沿う行内の2つの図形を入れ替えることにより、他の行にまたがる入替を防止することができ、依存関係の方向を維持することができる。
(実施の形態2)
つぎに、実施の形態2について説明する。実施の形態1では、分析支援装置が区画を平面として表示することとしたが、実施の形態2では、分析支援装置が区画を3次元の空間として表示する例である。
図32は、実施の形態2にかかる配置結果例を示す説明図である。図32において、配置結果3200は、図21に示した配置結果に対し、第3軸方向にプログラムの図形を伸ばしたデータである。第3軸とは、第1軸および第2軸により規定される平面に交差する軸である。具体的には、図13に示した集合Sにおけるプログラムの配列に対し、順序番号が小さい方を上流、大きい方を下流と定義する。配置結果3200では、プログラムc1が最も上流に位置し、プログラムb14が最も下流に位置している。そして、分析支援装置は、上流側のプログラムが下流側のプログラムよりも第3軸の値が高くなるように、グループ化することになる。
図33は、図32に示した配置結果3200の平面図である。図33では、区画内のぷプログラム群が9個のグループg1〜g9に分類される。そして、グループg1〜g9において、分析支援装置は、上流側のグループが下流側のグループよりも第3軸の値が高くなるように、第3軸の値をグループg1〜g9に割り当てる。本例では、グループg1の第3軸の値が最も高くなり、グループg9の第3軸の値は最も低くなる。なお、同一グループ内の第3軸の値は同一の値となる。実施の形態1のように区画が平面の場合は、依存関係において関係元になり、かつ、依存関係が強いプログラムほど、上流側に配置されることがわかるが、実施の形態2では、さらに、第3軸の値によりグループg1〜g9のように階層化される。したがって、依存関係の強さに応じてプログラムをグループ化でき、視認性の向上を図ることができる。
<区画配置処理部603による区画配置処理手順例>
つぎに、実施の形態2にかかる区画配置処理部603による区画配置処理手順例について図34〜図37を用いて説明する。実施の形態2においても、区画配置処理部603による区画配置処理は、役割ごと、すなわち、区画ごとに実行される。
図34は、区画配置処理部603による区画配置処理手順例を示すフローチャート(その1)である。まず、分析支援装置600は、重み付き依存関係情報700から有向グラフを生成し、有向グラフを集合Gとして保持する(ステップS3400)。つぎに、分析支援装置600は、出次除外回数を0、入次除外回数を0に設定する(ステップS3401)。
出次数が0のプログラムは後述のステップS3405において集合Gから削除されるが、出次数が0でないプログラムは削除対象にはならないため、出次除外回数とは、出次数が0でないために削除対象にならなかった回数である。同様に、入次数が0のプログラムは後述のステップS3409において集合Gから削除されるが、入次数が0でないプログラムは削除対象にはならないため、入次除外回数とは、入次数が0でないために削除対象にならなかった回数である。したがって、ステップS3401では、初期値として、出次除外回数を0、入次除外回数は0に設定される。
つぎに、分析支援装置600は、集合G内のプログラムごとに出次数と入次数とを算出する(ステップS3402)。算出された出次数と入次数は出次数・入次数テーブル1100に記録される。そして、分析支援装置600は、出次数・入次数テーブル1100を参照して、集合Gに出次数が「0」のプログラムがあるか否かを判断する(ステップS3403)。出次数が「0」のプログラムがある場合(ステップS3403:Yes)、分析支援装置600は、出次数0のプログラムに対して、出次除外回数と種類(out)とを対応付ける(ステップS3404)。「out」は出次除外回数であることを示す識別情報である。
たとえば、図11に示した出次数・入次数テーブル1100を参照すると、出次数が「0」のプログラムa2,a3,b3,b5,b7,b11,b14,c3,c7,c8に対して、出次除外回数=0が対応付けられる。具体的には、出次数が「0」のプログラムと出次除外回数との組は、(a2,(0,Out)),(a3,(0,Out)),(b3,(0,Out)),(b5,(0,Out)),(b7,(0,Out)),(b11,(0,Out)),(b14,(0,Out)),(c3,(0,Out)),(c7,(0,Out)),(c8,(0,Out))として記憶領域に保持される。
このあと、分析支援装置600は、出次数が「0」のプログラムと出次除外回数との組を集合Srの先頭に追加して、出次数が「0」のプログラムを集合Gから削除する(ステップS3405)。上記の例では、(a2,(0,Out)),(a3,(0,Out)),(b3,(0,Out)),(b5,(0,Out)),(b7,(0,Out)),(b11,(0,Out)),(b14,(0,Out)),(c3,(0,Out)),(c7,(0,Out)),(c8,(0,Out))の順に、集合Srの先頭に追加される。そして、分析支援装置600は、出次除外回数に1加算して(ステップS3406)、ステップS3402に戻り、削除後の集合G内のプログラムごとに、出次数と入次数の算出が実行される(ステップS3402)。出次数と入次数が再算出されると、出次数が「0」のプログラムが再度出現する可能性があるため、出次数が「0」のプログラムがなくなるまで繰り返すことになる。
たとえば、出次数と入次数の再算出により、図12に示した出次数・入次数テーブル1100を参照して、出次数が「0」のプログラムb2,b4,b8,b9,b10,b13,c10,d3が検出される。したがって、出次数が「0」のプログラムb2,b4,b8,b9,b10,b13,c10,d3に対して、出次除外回数=1が対応付けられる。
この場合、具体的には、出次数が「0」のプログラムと出次除外回数の組は、(b2,(1,Out)),(b4,(1,Out)),(b8,(1,Out)),(b9,(1,Out)),(b10,(1,Out)),(b13,(1,Out)),(c10,(1,Out)),(d3,(1,Out))として記憶領域に保持される。
このあと、出次数が「0」のプログラムと出次除外回数の組(b2,(1,Out)),(b4,(1,Out)),(b8,(1,Out)),(b9,(1,Out)),(b10,(1,Out)),(b13,(1,Out)),(c10,(1,Out)),(d3,(1,Out))は、この順に、集合Srの先頭に追加される。出次除外回数(=1)に1加算されて、出次除外回数=2となる。
また、出次数が「0」のプログラムb2,b4,b8,b9,b10,b13,c10,d3を集合Gから削除して、出次数と入次数を再算出すると、出次数が「0」のプログラムa5,b6,b12,c9,c13が検出されたとする。この場合の出次数が「0」のプログラムと出次除外回数の組は、(a5,(2,Out)),(b6,(2,Out)),(b12,(2,Out)),(c9,(2,Out)),(c13,(2,Out))として記憶領域に保持される。そして、(a5,(2,Out)),(b6,(2,Out)),(b12,(2,Out)),(c9,(2,Out)),(c13,(2,Out))の順に集合Srの先頭に追加され、出次除外回数(=2)に1加算されて、出次除外回数=3となる。
そして、出次数が「0」のプログラムa5,b6,b12,c9,c13を集合Gから削除して、出次数と入次数を再算出し、出次数が「0」のプログラムは検出されなくなると(ステップS3403:No)、ステップS3407に移行する。
ステップS3407において、分析支援装置600は、出次数・入次数テーブル1100を参照して、集合Gに入次数が「0」のプログラムがあるか否かを判断する(ステップS3407)。入次数が「0」のプログラムがある場合(ステップS3407:Yes)、分析支援装置600は、入次数0のプログラムに対して、入次除外回数と種類(in)とを対応付ける(ステップS3408)。「in」は出次除外回数であることを示す識別情報である。入次数0のプログラムと入次除外回数との組についても、出次数0のプログラムと出次除外回数との組と同様、(プログラム名,(入次除外回数,in))のように対応付けて記憶領域に保持される。
このあと、分析支援装置600は、入次数が「0」のプログラムと入次除外回数との組を集合Slの末尾に追加して、入次数が「0」のプログラムを集合Gから削除する(ステップS3409)。そして、分析支援装置600は、入次除外回数に1加算して(ステップS3410)、ステップS3402に戻り、削除後の集合G内のプログラムごとに、出次数と入次数の算出が実行される(ステップS3402)。出次数と入次数が再算出されると、出次数が「0」のプログラムが再度出現する可能性があるため、出次数が「0」のプログラムがなくなるまで繰り返すことになる。一方、ステップS3407において、入次数が「0」のプログラムがない場合(ステップS3407:No)、図35のステップS3501に移行する。
図35は、区画配置処理部603による区画配置処理手順例を示すフローチャート(その2)である。ステップS3501において、分析支援装置600は、集合Gが空になったか否かを判断する(ステップS3501)。集合Gが空になった場合(ステップS3501:Yes)、ステップS3508に移行する。一方、集合Gが空でない場合(ステップS3501:No)、分析支援装置600は、集合G内のプログラムごとに、出次数から入次数を引いた差分を算出する(ステップS3502)。そして、分析支援装置600は、集合Gから差分が最大となるプログラムを取得し(ステップS3503)、差分が最大となるプログラムを、入次除外回数および種類(in)に対応付ける(ステップS3504)。
そして、分析支援装置600は、ステップS3504において生成した差分が最大となるプログラムと入次除外回数との組を集合Slの末尾に追加して、差分が最大となるプログラムを集合Gから削除する(ステップS3505)。そして、分析支援装置600は、入次除外回数に1加算する(ステップS3506)。
そして、分析支援装置600は、再度集合Gが空になったか否かを判断する(ステップS3507)。空でない場合(ステップS3507:No)、図34のステップS3402に戻り、削除後の集合G内のプログラムごとに、出次数と入次数の算出が実行される(ステップS3402)。出次数と入次数が再算出されると、出次数が「0」のプログラムが再度出現する可能性があるため、出次数が「0」のプログラムがなくなるまで繰り返すことになる。また、ステップS3507において、集合Gが空になった場合(ステップS3507:Yes)、分析支援装置600は、集合Slの末尾に集合Srを連結して集合Sを生成する(ステップS3508)。
図38は、ステップS3508により生成された集合Sの一例を示す説明図である。集合Sは、順序を保持している集合であり、先頭から末尾までの方向に依存関係が存在する。ステップS3508のあと、図36のステップS3601に移行する。
図36は、区画配置処理部603による区画配置処理手順例を示すフローチャート(その3)である。図36の処理は、図38の集合Sの各プログラムに対応付けられている入次除外回数および出次除外回数から第3軸の値を設定する処理である。ステップS3601において、分析支援装置600は、まず、集合S内のプログラムを順序番号の末尾から取得する(ステップS3601)。取得したプログラムは第3軸の値の割当対象となる。以降、取得したプログラムを割当対象プログラムと称す。ステップS3608で取得される場合も同様である。
つぎに、分析支援装置600は、割当対象プログラムに対応付けられている除外回数とその種類(inまたはout)を保持する(ステップS3602)。現時点で保持されている最新のプログラムの除外回数とその種類は、割当対象プログラムと比較される。以降、保持されたプログラムを比較対象プログラムと称す。ステップS3605で更新された場合も同様である。
そして、分析支援装置600は、第3軸の値を0に設定する(ステップS3603)。つぎに、分析支援装置600は、割当対象プログラムの除外回数とその種類のいずれかが、ステップS3602またはS3605において現時点で保持されている最新のプログラムとその種類と異なるか否かを判断する(ステップS3604)。
同一である場合(ステップS3604:No)、現時点で保持されている最新のプログラムとその種類はそのまま保持され、ステップS3606に移行する。一方、異なる場合(ステップS3604:Yes)、分析支援装置600は、比較対象プログラムの除外回数とその種類を、割当対象プログラムの除外回数とその種類に更新し、第3軸の値に1を加算する(ステップS3605)。
そして、分析支援装置600は、ステップS3605において1加算された最新の第3軸の値を、割当対象プログラムに割り当てる(ステップS3606)。このあと、分析支援装置600は、集合S内において、未割当のプログラムがあるか否かを判断する(ステップS3607)。未割当のプログラムがある場合(ステップS3607:Yes)、分析支援装置600は、集合Sから未割当のプログラムを1つ取得して(ステップS3608)、ステップS3604に移行する。これにより、未割当のプログラムがなくなるまで、第3軸の値の割当が実行されることになる。一方、未割当のプログラムがない場合(ステップS3607:No)、図37のステップS3701に移行する。
図36に示した処理では、図38を参照すると、末尾から(0,Out),(1,Out),(2,Out),(3,Out),(4,Out),(5,Out),(6,Out),(7,Out),(8,In)が除外回数として得られる。したがって、図36に示した処理では、第3軸の値として、(0,Out)に「1」、(1,Out)に「2」、(2,Out)に「3」、(3,Out)に「4」、(4,Out)に「5」、(5,Out)に「6」、(6,Out)に「7」、(7,Out)に「8」、(8,In)に「9」が割り当てられる。
図39は、集合Sにおける第3軸の値の割当結果を示す説明図である。なお、第3軸の値である第3軸方向の高さは、第2軸方向の重みを伴う入れ替え手順の中では変更されない。つぎに、図37の処理について説明する。
図37は、区画配置処理部603による区画配置処理手順例を示すフローチャート(その4)である。図36において未割当のプログラムがない場合(ステップS3607:No)、図37において、分析支援装置600は、集合Sからプログラムを先頭から順に取り出し、区画内に第2軸方向を優先して配置する(ステップS3701)。これにより、配置結果が得られることになる。つぎに、分析支援装置600は、重み付き依存関係情報700を参照して、依存関係ごとの重みを取得し(ステップS3702)、スコア算出テーブル1600を用いて、依存関係ごとに、重みに距離を乗じたスコアとその総和を算出する(ステップS3703)。
そして、分析支援装置600は、現時点で最新の配置結果を保存する(ステップS3704)。つぎに、分析支援装置600は、プログラムに対して第2軸方向で入れ替えが可能であるか否かを判断する(ステップS3705)。たとえば、入れ替えにおいて未選択のプログラムがあれば入れ替え可能と判断される。
入れ替え可能でない場合(ステップS3705:No)、区画配置処理を終了する。一方、入れ替え可能である場合(ステップS3705:Yes)、分析支援装置600は、第2軸方向の入れ替え対象に選ばれた行内で、2つのプログラムの図形の位置を入れ替える(ステップS3706)。そして、分析支援装置600は、ステップS3703と同様、入れ替え後において、入れ替えられたプログラムを含む依存関係についてスコアを算出し、入れ替えられたプログラムを含まない依存関係のスコアとともに、スコアの総和を算出する(ステップS3707)。
そして、分析支援装置600は、入れ替え前後のスコアの総和を比較して、入れ替え後のスコアの総和が入れ替え前のスコアの総和を下回ったか否かを判断する(ステップS3708)。下回った場合(ステップS3708:Yes)、分析支援装置600は、入れ替え後の配置結果を採用して(ステップS3709)、ステップS3711に移行する。一方、下回っていない場合(ステップS3708:No)、分析支援装置600は、入れ替え後の配置結果を採用せず、入れ替え前の配置結果を維持して(ステップS3710)、ステップS3711に移行する。
ステップS3711では、分析支援装置600は、入れ替え対象の行内において、入れ替えを試行すべきプログラムの入れ替えをすべて試行したか否かを判断する(ステップS3711)。なお、入れ替えを試行すべきプログラムは、入れ替え対象の行内の全プログラムでもよく、一部のプログラムでもよい。試行すべきプログラムが試行されていない場合(ステップS3711:No)、ステップS3705に戻る。一方、試行すべきプログラムがすべて試行された場合(ステップS3711:Yes)、分析支援装置600は、試行すべきすべての行をすべて入れ替え対象の行として試行したか否かを判断する(ステップS3712)。
試行していない場合(ステップS3712:No)、ステップS3705に戻り、分析支援装置600は、試行すべき行を入れ替え対象の行とし、第2軸方向で入れ替え可能か否かを判断することになる。一方、試行された場合(ステップS3712:Yes)、ステップS3704で保存された最新の配置結果と比較して、入れ替えがあったか否かを判断する(ステップS3713)。入れ替えがあった場合(ステップS3713:Yes)、ステップS3704に戻り、分析支援装置600は、配置結果を更新することになる。一方、入れ替えがなかった場合(ステップS3713:No)、区画配置処理部603による区画配置処理を終了する。これにより、依存関係が強いプログラムほど、より近接した位置に配置されることになる。さらに、第3軸の値により区画内のプログラムが入次数および出次数により階層化される。したがって、依存関係の強さに応じてプログラムをグループ化でき、視認性の向上を図ることができる。したがって、実施の形態2においても乖離の構造の特定の容易化を図ることができる。
(実施の形態3)
つぎに、実施の形態3について説明する。実施の形態3は、実施の形態1,2の区画単位取得部601において、重み付き依存関係情報700を用いてソフトウェア100のソースコードをクラスタ化する例である。
図40は、グラフ化されたソフトウェアの一例を示す説明図である。図40中、□の図形は、ソフトウェアの構成要素であるエンティティを示している。実施の形態1の冒頭で説明したように、エンティティには、たとえば、コンポーネント、モジュール、ソースコード、クラス、関数、データベース、ファイルなどが含まれる。実施の形態1,2では、コンポーネント、モジュール、ソースコード、クラス、関数などのプログラムをエンティティの一例として説明した。また、図40において、エンティティ間の矢印は、依存関係を示している。矢印の始端が関係元エンティティ、矢印の終端(矢印の先)が関係先エンティティとする。たとえば、依存関係が呼び出し関係を示す場合、関係元エンティティが関係先エンティティを呼び出すことになる。
実施の形態3の区画単位取得部601でのソフトウェア分割は、以下の性質(1)〜(3)を有する。
(1)ソフトウェア分割は、エンティティの集合であるソフトウェアにおいて、ソフトウェアの処理の本筋となるエンティティや依存関係を重視してエンティティをグループ化することにより実行される。
(2)ソフトウェア分割は、ユーティリティのような理解の妨げとなるエンティティや依存関係を軽視し、必要ならば分割されたグループから外すように実行される。
(3)ただし、ソフトウェア分割は、一見軽視されるようなエンティティであっても、分割されたグループを特徴付けるようなエンティティならば、当該グループに包含させるように実行される。
このようにして、実施の形態3の区画単位取得部601は、図40に示したようなエンティティの集合であるソフトウェアを理解が容易な程度の部分集合に分割することになる。なお、ソフトウェアをグラフで表現し、当該グラフを部分グラフに分割したとき、部分グラフまたは部分グラフに属するエンティティの集合のことを、グループまたはクラスタと呼ぶ。グラフをクラスタに分割することをクラスタリングと呼ぶ。
<依存関係の一例>
図41は、依存関係の一例を示す説明図である。実施の形態1において説明した本質度は、依存関係ごとに与えられ、依存関係に対応する辺の重みとして用いられる。本例では、本質度は、たとえば、下記式(1)のように表現される。
上記式(1)において、左辺のE(A,B)は、エンティティAからエンティティBへの依存関係の本質度を示している。右辺の分母のdin(B)は、エンティティBの入次数(Bが関係先エンティティとなる辺の数、または被依存関係数)を意味する。右辺はここでは式(1)の形態を用いているが、たとえばエンティティBの相対サイズ値や予め与えた重要度数値など別の形態であってもよい。
図41の(a)は、本質度の一例を示している。エンティティA1,A2において、エンティティA1は関係先エンティティであり、エンティティA2は関係元エンティティである。エンティティA1がエンティティA2のみから依存されるため、エンティティA2にとってエンティティA1との依存関係は、複数のエンティティから依存される場合よりも重要であるとして高い値になる。その理由は、エンティティA2が役割を果たすためにエンティティA1が作成されている可能性が高く、エンティティA1はエンティティA2にとって重要であるとみなせるからである。具体的には、たとえば、辺の数は1本(入次数=1)であるため、エンティティA1にとってエンティティA2との依存関係がどれだけ重要かを示す本質度は「1」である。
図41の(b)は、関係元エンティティが複数存在する場合の本質度の一例を示している。エンティティD1〜D4は、関係元エンティティであり、エンティティBは、エンティティD1〜D4に共通の関係先エンティティである。この場合、エンティティD1にとってエンティティBとの依存関係は重要ではないとして低い値となる。その理由は、エンティティD1が役割を果たすためにエンティティBが作成されているという可能性は低く、エンティティBはエンティティD1にとって重要とは言い難いからである。エンティティD2〜D4についても同様である。具体的には、たとえば、エンティティBを関係元エンティティとする辺の数は4本(入次数=4)であるため、エンティティD1〜D4の各々にとってエンティティBとの依存関係がどれだけ重要かを示す本質度は「1/4」である。
図41の(c)は、(b)の場合において、エンティティBをエンティティD1〜D4が属するグループDに含めるか否かを示している。エンティティD1からエンティティBへの本質度は1/4と低いが、エンティティD1〜D4からなるグループDからエンティティBへの本質度の合計は「1」となるため、高い値となる。一方、グループEの各エンティティE1〜E3からエンティティBへの本質度は、いずれも「0」であるため、グループEからエンティティBへの本質度の合計も「0」であり、グループDに比べて低い値となる。この場合、エンティティBは、グループEよりもグループDに包含させるべきであり、上記性質(3)を満たすことになる。
<区画単位取得部601の機能的構成例>
図42は、実施の形態3にかかる区画単位取得部601の機能的構成例を示すブロック図である。区画単位取得部601は、関係抽出部4201と、本質度算出部4202と、分割部4203と、を有する。関係抽出部4201、本質度算出部4202、および分割部4203は、具体的には、たとえば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F209により、その機能を実現する。
関係抽出部4201は、ソフトウェア内のエンティティ間の依存関係を抽出する。具体的には、たとえば、関係抽出部4201は、ソースコードDB300からソフトウェアのソースコードを読み込んで、既存の構文解析技術および静的解析技術により、ソースコードを解析する。ソースコードDB300は、ソフトウェアのソースコードを記憶する。ソースコードDB300は、記憶装置により構成される。
図43は、ソフトウェアのグラフ表現例を示す説明図である。図43のソフトウェアは、説明の便宜上、エンティティの数を16個としている。各エンティティは、たとえば、Java(登録商標)言語のクラスを示しており、エンティティの番号は図44のクラスの番号に対応する。たとえば、エンティティ#(#は数字の意味)は、クラスC#に対応する。
図44は、図43に示したソフトウェアのソースコード例を示す説明図である。図44では、Java言語のソースコードを例に挙げて説明している。図44の(a)は、クラスC2がクラスC5,C9,C14,C1を呼び出すことを示すソースコードである。
図42に戻り、関係抽出部4201は、解析されたソースコードからエンティティを抽出する。たとえば、関係抽出部4201は、図44の(a)のソースコードから、クラスC2を関係元エンティティとして抽出する。また、関係抽出部4201は、図44の(a)のソースコード4401から、クラスC2の呼び出し先となるクラスC5,C9,C14,C1を、クラスC2の関係先エンティティとして抽出する。これにより、関係元エンティティの依存関係が抽出されることになる。図44の(b)のソースコード4402についても同様に、関係抽出部4201は、クラスC5を関係元エンティティとして抽出し、クラスC1を関係先エンティティとして抽出する。
関係抽出部4201は、抽出した関係元エンティティとその関係先エンティティとの組を、依存関係情報4210のレコードとして格納する。たとえば、関係抽出部4201は、図44の(a)の場合、{2,5},{2,9},{2,14},{2,1}を依存関係情報4210に格納する。{a,b}は、関係元エンティティの番号aとその関係先エンティティの番号bとの組を示す。これにより、依存関係情報4210が生成される。
図45は、図43に示したソフトウェアに関する依存関係情報4210の一例を示す説明図である。依存関係情報4210は、関係元エンティティとその関係先エンティティとを関連付けて記憶するテーブルである。依存関係情報4210は記憶装置に記憶される。
本質度算出部4202は、関係元エンティティからその関係先エンティティへの本質度を算出する。具体的には、たとえば、本質度算出部4202は、上述した式(1)により算出する。そして、本質度算出部4202は、依存関係情報4210の各レコードの依存関係に、対応する本質度を関連付けた重み付き依存関係情報4220を生成する。
図46は、重み付き依存関係情報4220の一例を示す説明図である。重み付き依存関係情報4220は記憶装置に記憶される。重み付き依存関係情報4220において、本質度は、一例として、関係先エンティティへの入次数の逆数で表現される。重み付き依存関係情報4220において、たとえば、1行目の例では、関係元エンティティがC2、関係先エンティティがC1である。関係先エンティティであるC1の入次数となる辺の数は15本であるため、本質度は「1/15」となる。
分割部4203は、本質度を用いてソフトウェアをクラスタリングする。分割部4203は、本質度を用いてソフトウェアのグラフを部分グラフに分割するクラスタリングを実行し、ソフトウェアの分割結果を役割情報4230として出力する。また、分割部4203は、上述した性質(1)〜(3)を満たすために、クラスタ内の辺の本質度の合計がその期待値より大きくなるように(または、部分グラフに属さない辺の本質度の合計が小さくなるように)クラスタリングを行う。性質(1)〜(3)を満たせば、クラスタを特徴付ける(すなわち、そのクラスタへの合計本質度が高い)エンティティはクラスタ内に含まれることになる。
分割部4203では、性質(1)〜(3)を満たすクラスタリングアルゴリズムとして、つぎに示す技術を拡張したものを用いる。
(参考文献) M. E. J. Newman (2004). "Fast algorithm for detecting community structure in networks". Physical Review E 69 (6): 066133.
上記参考文献は、「Newmanのグラフクラスタリングアルゴリズム」または「モジュラリティ最大化アルゴリズム」と呼ばれるアルゴリズムを提案している文献である。当該アルゴリズムは、グラフのクラスタリングの良さを示す尺度であるモジュラリティ評価関数(モジュール性とも呼ばれる)を用い、モジュラリティ評価関数が最大となるクラスタリング(クラスタへの分割)を貪欲法にて探索する。
ただし、上記アルゴリズムは、モジュラリティ評価関数が「重み無し」「無向」グラフを対象にしたアルゴリズムであるため、そのままでは本実施の形態では利用できない。そこで本実施の形態では、「重み付き」「有向」グラフに利用できるように拡張したモジュラリティ評価関数QDWが下記式(2)で定義される。
上記式(2)において、Aijは、グラフの隣接行列Aの要素である。添え字のiは関係元エンティティである頂点の番号、添え字のjは関係先エンティティである頂点の番号を示す。隣接行列Aの要素の値は辺の重みであり、非負であり、0より大きい場合は辺有り、0の場合は辺無しを意味する。有向グラフであるため、隣接行列Aは非対称行列である。
また、ki OUTは、頂点iが関係元エンティティとなる辺の重みの合計である。具体的には、下記式(3)により表される。
kOUT i=ΣjAij・・・・・・・・・・(3)
また、kj INは、頂点jが関係先エンティティとなる辺の重みの合計である。具体的には、下記式(4)により表される。
kj IN=ΣiAij・・・・・・・・・・(4)
また、mは、辺の重み(要素Aij)の合計であり、隣接行列Aの要素Aijの総和である。具体的には、下記式(5)により表される。
m=ΣiΣjAij・・・・・・・・・・(5)
また、ciは、頂点iが属するクラスタを示す。すべての頂点はいずれかのクラスタに属するものとする。
δ(ci,cj)は、クロネッカーのデルタ関数である。すなわち、クラスタciとクラスタcjが同じならばδ(ci,cj)=1、異なるならδ(ci,cj)=0となる。
モジュラリティ評価関数QDWの値域は[−1,1]となり、大きいほどよいクラスタリングであることを意味し、小さいほど悪いクラスタリングであることを意味する。ただし、実際の上限値と下限値はグラフに依存し、実際には上限値が1近くになることはめったに無い。
上記式(2)の意図を説明する。クロネッカーのデルタ関数δ(ci,cj)は、クラスタ内の辺のみを考慮しクラスタ外の辺を無視するための関数である。クロネッカーのデルタ関数δ(ci,cj)は、各クラスタ内にある辺についての式となる。すなわち、クラスタciとクラスタcjが異なるならδ(ci,cj)=0となるため、モジュラリティ評価関数QDWへの寄与は0となる。
隣接行列Aijは頂点iから頂点jへの辺の重みである。頂点iから辺が出る重み付き確率の期待値はki OUT/mであり、頂点jへ辺が入る重み付き確率の期待値はkj IN/mであるため、エンティティiからエンティティjへの辺の重みの期待値は、下記式(6)で表される。
m・(ki OUT/m)・(kj IN/m)=ki OUT・kj IN/m・・・(6)
上記式(6)の右辺は式(2)の一部である。すなわち、式(2)のモジュラリティ評価関数QDWは、各クラスタに属する辺の本質度の合計とその期待値との差をクラスタについて合計したものを、値域が[1,−1]になるように正規化したものである。
より直観的な表現で表すと、モジュラリティ評価関数QDWは、クラスタ内の辺の本質度の合計がその期待値より大きい場合に高くなると言える。言い換えれば、クラスタ内の辺の本質度の密度が高い場合に高くなる、また、クラスタ外の辺の本質度の合計が少ない場合に高くなると言える。
図47は、ある有向グラフの分割例を示す説明図である。図47では、説明を単純化するため、6個の頂点からなる有向グラフを用いて説明する。なお、説明を単純化するため、すべての辺の重みは「1」である。分割例(1)は、グラフを全く分割しない場合で、このとき、QDW=0である。また、分割例(2)は、最適な分割を行った場合で、QDW=0.367であり、直感的な分割と一致している。分割例(3)は最適ではないがそれに近い分割で、QDW=0.122と最適値からの若干の悪化を示している。
分割例(4)と分割例(5)は敢えて非合理的な分割を行った例で、この場合、QDWは負値となり、数値の悪さと直感が一致している。分割例(6)は完全分割でこのとき、QDW=−0.163となり、過度の分割がかえって悪い結果となることが数値として表れている。分割例(1)〜(6)から、直感とモジュラリティ評価関数QDWとが整合することがわかる。
図48は、図46に示した重み付き依存関係情報4220を用いた場合の隣接行列Aを示す説明図である。隣接行列Aの要素Aijは、関係元エンティティである頂点iから関係先エンティティである頂点jへの本質度を示している。
図49は、図46に示した重み付き依存関係情報4220を用いた場合のエンティティごとに、kIN jとkOUT iとを関連付けたパラメータテーブルを示す説明図である。パラメータテーブル4900は、モジュラリティ評価関数QDWの計算途中で生成されるテーブルである。なお、本例では、m=10となる。
本質度を用いたクラスタリングの処理過程について説明する。まず、本質度を用いたクラスタリングの処理過程で用いる記号の定義と表記法について説明する。グラフのすべての頂点の集合をVとする。頂点はエンティティを示す。頂点は1以上の連番の整数で表し、頂点数をnとする。すなわち、V={1,2,…,n}である。Vのある分割をDで表す。Dは、空集合でない互いに素なVの部分集合Siを要素とする集合であり、D={S1,S2,…,S|D|}と表す。|D|は分割Dの要素数を意味する。
このとき、集合Vは、下記式(7)によって表される。
S1∪S2∪…∪S|D|=V・・・・・(7)
頂点iがSxの要素である場合、頂点iのクラスタciはxと求まる。すなわち、分割Dを定めるとモジュラリティ評価関数QDWの値が定まる。この場合、QDW(D)と表す。また、分割D内の異なる2つの要素Si,Sjを併合させたD[i,j]を下記式(8)で定義する。
D[i,j]=(D−{Si}−{Sj})∪{Si∪Sj}・・・・・・(8)
ここで、式(8)中、A−Bは集合Aから集合Bの要素を除いた差集合を意味する。ある状態kのときの分割Dを、D(k)={S(k) 1,S(k) 2,…,S(k) |D(k)|}とする。たとえば、D={S1,S2,S3,S4}において、部分集合S1,S2を併合する場合、併合後の分割D[i,j]は、D[i,j]=D[1,2]={S1∪S2,S3,S4}となる。S1∪S2は、部分集合S1,S2の和集合である。
図50は、図46に示した重み付き依存関係情報4220を用いた場合の本質度を用いたクラスタリングの処理過程を示す説明図である。なお、状態kでの分割Dのモジュラリティ評価関数QDWをQDW(D(k))とする。
(A)は、初期状態(k=0)の分割D(0)を示している。初期状態では、1つの頂点が1つのクラスタとなる。この場合のモジュラリティ評価関数QDW(D(0))は、QDW(D(0))=−0.045である。この状態から、総当りで2つの部分集合が併合され、併合後のQDWが最も高くなる併合が採用され、次状態(k=1)とする。この場合、部分集合{6}と{14}の併合が、QDWが最も高くなる併合である。
(B)は、(A)の次状態(k=1)の分割D(1)を示している。この場合のモジュラリティ評価関数QDW(D(1))は、QDW(D(1))=0.075である。この状態から、総当りで2つの部分集合が併合され、併合後のQDWが最も高くなる併合が採用され、次状態(k=2)とする。この場合、部分集合{6,14}と{11}の併合がQDWが最も高くなる併合である。
(C)は、(B)の次状態(k=2)の分割D(2)を示している。この場合のモジュラリティ評価関数QDW(D(2))は、QDW(D(2))=0.138である。この状態から、総当りで2つの部分集合が併合され、併合後のQDWが最も高くなる併合が採用され、次状態(k=3)とする。このような処理が繰り返し行われる。
(D)は、初期状態から13回反復された場合のk=13のときの状態の分割D(13)を示している。QDW(D(13))=0.481である。この状態から、総当りで2つの部分集合が併合される。k=13では、部分集合{2,5,6,11,14}と{1,7,9,10,15,16}との併合、部分集合{2,5,6,11,14}と{3,4,8,12,13}との併合、部分集合{1,7,9,10,15,16}と{3,4,8,12,13}との併合がある。いずれの併合も、QDW(D(13))=0.481を下回るため、分割D(13)でクラスタリングが終了する。これにより、ソフトウェアは、3個の部分集合{2,5,6,11,14},{1,7,9,10,15,16},{3,4,8,12,13}に分割されたことになる。
図51は、図50のクラスタリングに基づく役割情報4230の一例を示す説明図である。図50では、3個の部分集合に分割されているため、部分集合{2,5,6,11,14}はクラスタ番号:1、部分集合{1,7,9,10,15,16}にはクラスタ番号:2、部分集合{3,4,8,12,13}にはクラスタ番号:3が割り当てられている。これにより、たとえば、1行目では、頂点1はクラスタ2に属していることがわかる。なお、役割情報4230は、図49のような表データに限らず、図48に示した併合過程を木構造表現したデータでもよい。
図52は、図50のクラスタリングに基づく役割情報4230の他の例を示す説明図である。図52のグラフは、図51の役割情報4230による自動分割に従って整理を行った図43のグラフと同一論理構造のグラフである。図52において、太い破線の囲みがソフトウェアの分割である。矢印が、太い直線、中間の点線、細い一点鎖線の3種の線で描かれているが、依存関係を本質度の強中弱で分別したものである。図52のグラフを見ることにより、ユーザは、ソフトウェアの構造が容易に見て取れることがわかる。また、ユーザは、得られた3つの分割が合理的であることもわかる。このように、本実施の形態によれば、上述した性質(1)〜(3)を満たすソフトウェアの分析が実現できる。
<分割処理手順例>
図53は、実施の形態3にかかる区画単位取得部601による分割処理手順例を示すフローチャートである。分析支援装置600は、関係抽出部4201による関係抽出処理(ステップS5301)、本質度算出部4202による本質度算出処理(ステップS5302)、分割部4203によるクラスタリング処理(ステップS5303)を実行する。これにより、図51に示したような役割情報4230が得られることになる。
図54は、図53に示した関係抽出処理(ステップS5301)の詳細な処理手順例を示すフローチャートである。まず、分析支援装置600は、ソフトウェアのソースコードをソースコードDB300から読み込む(ステップS5401)。つぎに、分析支援装置600は、読み込んだソースコードを構文解析技術および静的解析技術を用いて解析する(ステップS5402)。そして、分析支援装置600は、解析されたソースコードからエンティティを抽出するとともに(ステップS5403)、エンティティ間の依存関係を抽出する(ステップS5404)。
このあと、分析支援装置600は、抽出により得られた関係元エンティティと関係先エンティティの組を依存関係情報4210のレコードとして格納して(ステップS5405)、関係抽出処理(ステップS5301)を終了する。これにより、依存関係情報4210が生成される。
図55は、図53に示した本質度算出処理(ステップS5302)の詳細な処理手順例を示すフローチャートである。まず、分析支援装置600は、依存関係情報4210を読み込み(ステップS5501)、未選択の関係先エンティティがあるか否かを判断する(ステップS5502)。未選択の関係先エンティティがある場合(ステップS5502:Yes)、分析支援装置600は、未選択の関係先エンティティを1つ選択する(ステップS5503)。
そして、分析支援装置600は、式(1)を用いて、選択エンティティの辺ごとに、本質度を算出する(ステップS5504)。そして、分析支援装置600は、辺ごとに算出された本質度を、重み付き依存関係情報4220に格納して(ステップS5505)、ステップS5502に戻る。ステップS5502において、分析支援装置600は、未選択の関係先エンティティがないと判断された場合(ステップS5502:No)、本質度算出処理(ステップS5302)を終了する。これにより、重み付き依存関係情報4220が生成される。
図56は、図53に示したクラスタリング処理(ステップS5303)の詳細な処理手順例を示すフローチャートである。まず、分析支援装置600は、依存関係情報4210および重み付き依存関係情報4220を読み込み(ステップS5601)、隣接行列Aを生成する(ステップS5602)。また、分析支援装置600は、隣接行列Aの要素Aijである辺の重みを合計することにより、モジュラリティ評価関数QDWのパラメータmの値を算出する(ステップS5603)。また、分析支援装置600は、モジュラリティ評価関数QDWのパラメータki OUT,kj IN=も算出する(ステップS5604)。
このあと、分析支援装置600は、重み付き有向モジュラリティ最大化処理を実行する(ステップS5605)。重み付き有向モジュラリティ最大化処理(ステップS5605)では、分析支援装置600は、モジュラリティ評価関数QDWを用いてモジュラリティ評価関数QDWの値が最大となるように部分集合を併合していく。重み付き有向モジュラリティ最大化処理(ステップS5605)の詳細は図57で説明する。
そして、分析支援装置600は、重み付き有向モジュラリティ最大化処理(ステップS5605)で得られた分割結果を、役割情報4230として出力する(ステップS5606)。たとえば、分析支援装置600は、役割情報4230を重み付き依存関係情報4220とともに区画配置処理部603に渡す。これにより、クラスタリング処理(ステップS5303)を終了する。
図57は、重み付き有向モジュラリティ最大化処理(ステップS5605)の詳細な処理手順例を示すフローチャートである。まず、分析支援装置600は、状態kをk=0に設定し、分割D(k)=D(0)={S(0) 1,S(0) 2,…,S(0) n}を設定する(ステップS5701)。つぎに、分析支援装置600は、|D(k)|=1であるか否かを判断する(ステップS5702)。
|D(k)|=1でない場合(ステップS5702:No)、分析支援装置600は、分割D(k)に対し、モジュラリティ評価関数QDWの値が最大となるiとjの組を求め、そのときの分割D(k)[i,j]をD(k+1)とする(ステップS5703)。そして、分析支援装置600は、QDW(D(k))とQDW(D(k+1))とを比較する(ステップS5704)。そして、QDW(D(k+1))>QDW(D(k))の場合(ステップS5704:Yes)、まだ、QDWが増加できる余地があるとして、分析支援装置600は、kをインクリメントして(ステップS5705)、ステップS5702に戻る。図12に示した内容が、ステップS5702〜S5705のループに相当する。
そして、ステップS5702において、|D(k)|=1である場合(ステップS5702:Yes)、これ以上分割する必要がないため、ステップS5706に移行する。また、ステップS5704において、QDW(D(k+1))>QDW(D(k))でない場合(ステップS5704:No)、QDWが増加できる余地がないとして、ステップS5706に移行する。
ステップS5706では、分析支援装置600は、分割D(k)による分割処理を行う(ステップS5706)。たとえば、分析支援装置600は、分割D(k)を用いて図13や図14に示した役割情報4230を生成する。これにより、重み付き有向モジュラリティ最大化処理(ステップS5605)を終了する。
このように、実施の形態3によれば、ソフトウェアをその構成要素となるエンティティの集合として扱い、ソフトウェアを理解が容易な程度の部分集合に分割することができ、分割精度の向上を図ることができる。また、分割前の既存の業務分類のソフトウェア内のプログラム群が、分割後の各クラスタに含まれることになり、管理者は、既存の業務分類を構成するプログラム群と現状の業務分類を構成するプログラム群との違いを把握することができる。そして、このような役割情報4230を用いることにより、役割ごと(クラスタごと)に、構造の乖離を表現した出力結果を得ることができる。したがって、実施の形態3においても乖離の構造の特定の容易化を図ることができる。
以上説明したように、実施の形態1によれば、より多くの関係先と依存関係がある関係元が第1軸の上流側に配置され、関係先との依存関係がない、または、少ない関係元であるほど第1軸の下流側に配置される。このため、管理者は、第1軸の方向により、関係元から関係先への依存関係の方向を把握することができる。また、第2軸において依存関係が強いプログラムほど、より近接した位置に配置されることになる。このため、管理者は、第2軸の方向により、依存関係のある2つのプログラム間の重要度を把握することができる。
このように、第1軸と第2軸により規定される区画上の配置によりプログラムの依存関係や重みの強さを表現し、かつ、プログラムの分類を図形の色等で表現することにより、既存の分類が現状の分類を示す役割の中でどのような位置に存在するかが直感的に把握し易くなり、乖離の構造の特定の容易化を図ることができる。また、配置結果のうち、第2軸方向に沿う行内の2つの図形を入れ替えることにより、他の行にまたがる入替を防止することができ、依存関係の方向を維持することができる。
また、実施の形態2によれば、第3軸の値により区画内のプログラムが入次数および出次数により階層化される。したがって、依存関係の強さに応じてプログラムをグループ化でき、視認性の向上を図ることができる。
また、実施の形態3によれば、既存の業務分類により区分けされているソフトウェアを、現状の役割にあったクラスタに分割することができるため、管理者は、既存の業務分類を構成するプログラム群と現状の業務分類を構成するプログラム群との違いを把握することができる。そして、このような役割情報を用いることにより、役割ごと(クラスタごと)に、実施の形態1,2で示したように、構造の乖離を表現した出力結果を得ることができる。以上のことから、本発明は、乖離の構造の特定の容易化を図ることができる。
なお、本実施の形態で説明した方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分析支援プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)ソフトウェアの構成要素であるエンティティ群から分割された複数の分割エンティティ群のいずれかの分割エンティティ群について関係元のエンティティが関係先のエンティティに依存する依存関係と当該依存関係の重要度を示す重みとを対応付けた前記分割エンティティ群の対応情報を参照して、各エンティティの出次数と入次数を算出することにより、前記関係元のエンティティが前記関係先のエンティティよりも上位に配列されるエンティティ列を生成する生成部と、
前記関係元を上流とし前記関係先を下流とした場合に上流から下流に向かう依存方向を示す第1軸と、前記重みを示す第2軸と、により規定される平面の区画に対し、前記生成部によって生成されたエンティティ列の各エンティティを示す図形を、前記エンティティ列の上位から抽出して、前記第2軸の方向に沿い、かつ、前記第2軸の方向に沿って配置される図形の列が前記依存方向の上流から下流に向かうように配置する配置部と、
前記配置部によって配置された配置結果のうち前記第2軸の方向に配置されている図形の列の中から選ばれた2つの図形を入れ替える入替部と、
前記依存関係の重要度を示す重みと、前記依存関係により特定される前記関係元のエンティティから前記関係先のエンティティまでの前記第2軸の方向に関する距離と、に基づく、前記依存関係の強さを示す依存関係ごとのスコアの総和を、前記入替部による入替前後の配置結果の各々について求め、入替後の総和が入替前の総和を下回ったか否かを判断する判断部と、
前記分割エンティティ群の各エンティティに含まれる属性に応じた分類情報を設定する設定部と、
前記判断部により前記入替後の総和が前記入替前の総和を下回った場合は入替後の配置結果を前記分類情報の割当対象に決定し、前記入替後の総和が前記入替前の総和を下回っていない場合は入替前の配置結果を前記分類情報の割当対象に決定する決定部と、
前記設定部によって設定された分類情報を、前記決定部によって割当対象に決定された配置結果内の各図形が示すエンティティに割り当てる割当部と、
前記割当部による割当結果を出力する出力部と、
を有することを特徴とする分析支援装置。
(付記2)前記入替部は、
前記決定部によって決定された配置結果のうち前記第2軸の方向に配置されている図形の列の中から選ばれた2つの図形を入れ替えることを特徴とする付記1に記載の分析支援装置。
(付記3)前記入替部は、
未選択の図形がなくなるまで入れ替えを行うことを特徴とする付記2に記載の分析支援装置。
(付記4)前記生成部は、
前記分割エンティティ群からの出次数が0のエンティティの削除と当該削除後の分割エンティティ群の各エンティティの出次数および入次数の再計算とを、出次数が0のエンティティが出現しなくなるまで実行する第1の削除処理と、
前記第1の削除処理後の分割エンティティ群からの入次数が0のエンティティの削除と当該削除後の分割エンティティ群についての前記第1の削除処理の実行とを、入次数が0のエンティティが出現しなくなるまで実行する第2の削除処理と、を実行し、
前記第2の削除処理において入次数が0のエンティティが存在しない場合、残存するエンティティを上位に配列させ、前記第1の削除処理により先に削除されたエンティティほど下位に配列させることにより、前記エンティティ列を生成することを特徴とする付記1〜3のいずれか一つに記載の分析支援装置。
(付記5)前記生成部は、
前記第1の削除処理または前記第2の削除処理において削除されるまでに削除から除外された除外回数をエンティティごとに計数し、計数された前記除外回数の多さに応じた前記平面に交差する第3軸の値を各エンティティに対応付け、
前記配置部は、
前記配置結果内の各図形が示すエンティティに対応付けられた前記第3軸の値に基づいて、前記各図形を前記第3軸の方向に伸ばした立体図形に変換した配置結果を生成することを特徴とする付記4に記載の分析支援装置。
(付記6)前記ソフトウェアの構成要素であるエンティティ群について関係元のエンティティが関係先のエンティティに依存する依存関係と当該依存関係の重要度を示す重みとを対応付けた前記ソフトウェアの対応情報を参照して、前記ソフトウェアの対応情報により特定される前記依存関係の重要度を示す重みに基づいて、前記依存関係の重要度を示す重みの第1の合計が、各エンティティが前記関係元となる場合の前記依存関係の重要度を示す重みの第2の合計と前記各エンティティが前記関係先となる場合の前記依存関係の重要度を示す重みの第3の合計とに基づいて得られる前記第1の合計の期待値よりも高くなるように、前記エンティティ群を分割することにより、前記複数の分割エンティティ群を取得する取得部を有し、
前記生成部は、
前記取得部によって取得された前記複数の分割エンティティ群のいずれかの分割エンティティ群の前記対応情報を参照し、前記各エンティティの出次数と入次数を算出することにより、前記エンティティ列を生成することを特徴とする付記1〜5のいずれか一つに記載の分析支援装置。
(付記7)前記取得部は、
各々エンティティを有する部分グラフの集合の中から選ばれた複数の部分グラフを併合し、前記部分グラフの集合について各部分グラフに含まれる前記依存関係の重要度を示す重みの前記第1の合計と前記第1の合計の期待値との差を前記各部分グラフについて合計した評価関数の値を、併合前後の部分グラフの集合について求め、併合前よりも併合後の評価関数の値が大きくなる併合がある場合に、併合後の部分グラフの集合を前記複数の分割エンティティ群として取得することを特徴とする付記6に記載の分析支援装置。
(付記8)前記ソフトウェアの対応情報を参照して、前記関係先に対して前記依存関係がある前記関係元の個数に基づいて、前記関係元が当該関係元の役割を果たすために前記依存関係がどの程度重要であるかを示す、前記関係元についての前記関係先に関する本質度を算出する本質度算出部を有し、
前記取得部は、
前記本質度算出部によって算出された本質度を前記依存関係の重要度を示す重みとして用いることにより、前記エンティティ群を分割することにより、前記複数の分割エンティティ群を取得することを特徴とする付記6または7に記載の分析支援装置。
(付記9)コンピュータが、
ソフトウェアの構成要素であるエンティティ群から分割された複数の分割エンティティ群のいずれかの分割エンティティ群について関係元のエンティティが関係先のエンティティに依存する依存関係と当該依存関係の重要度を示す重みとを対応付けた前記分割エンティティ群の対応情報を参照して、各エンティティの出次数と入次数を算出することにより、前記関係元のエンティティが前記関係先のエンティティよりも上位に配列されるエンティティ列を生成し、
前記関係元を上流とし前記関係先を下流とした場合に上流から下流に向かう依存方向を示す第1軸と、前記重みを示す第2軸と、により規定される平面の区画に対し、生成された前記エンティティ列の各エンティティを示す図形を、前記エンティティ列の上位から抽出して、前記第2軸の方向に沿い、かつ、前記第2軸の方向に沿って配置される図形の列が前記依存方向の上流から下流に向かうように配置し、
配置された前記配置結果のうち前記第2軸の方向に配置されている図形の列の中から選ばれた2つの図形を入れ替え、
前記依存関係の重要度を示す重みと、前記依存関係により特定される前記関係元のエンティティから前記関係先のエンティティまでの前記第2軸の方向に関する距離と、に基づく、前記依存関係の強さを示す依存関係ごとのスコアの総和を、入替前後の配置結果の各々について求め、入替後の総和が入替前の総和を下回ったか否かを判断し、
前記分割エンティティ群の各エンティティに含まれる属性に応じた分類情報を設定し、
前記入替後の総和が前記入替前の総和を下回った場合は入替後の配置結果を前記分類情報の割当対象に決定し、前記入替後の総和が前記入替前の総和を下回っていない場合は入替前の配置結果を前記分類情報の割当対象に決定し、
設定された前記分類情報を、前記割当対象に決定された配置結果内の各図形が示すエンティティに割り当て、
割当結果を出力する、
処理を実行することを特徴とする分析支援方法。
(付記10)ソフトウェアの構成要素であるエンティティ群から分割された複数の分割エンティティ群のいずれかの分割エンティティ群について関係元のエンティティが関係先のエンティティに依存する依存関係と当該依存関係の重要度を示す重みとを対応付けた前記分割エンティティ群の対応情報を参照して、各エンティティの出次数と入次数を算出することにより、前記関係元のエンティティが前記関係先のエンティティよりも上位に配列されるエンティティ列を生成し、
前記関係元を上流とし前記関係先を下流とした場合に上流から下流に向かう依存方向を示す第1軸と、前記重みを示す第2軸と、により規定される平面の区画に対し、生成された前記エンティティ列の各エンティティを示す図形を、前記エンティティ列の上位から抽出して、前記第2軸の方向に沿い、かつ、前記第2軸の方向に沿って配置される図形の列が前記依存方向の上流から下流に向かうように配置し、
配置された前記配置結果のうち前記第2軸の方向に配置されている図形の列の中から選ばれた2つの図形を入れ替え、
前記依存関係の重要度を示す重みと、前記依存関係により特定される前記関係元のエンティティから前記関係先のエンティティまでの前記第2軸の方向に関する距離と、に基づく、前記依存関係の強さを示す依存関係ごとのスコアの総和を、入替前後の配置結果の各々について求め、入替後の総和が入替前の総和を下回ったか否かを判断し、
前記分割エンティティ群の各エンティティに含まれる属性に応じた分類情報を設定し、
前記入替後の総和が前記入替前の総和を下回った場合は入替後の配置結果を前記分類情報の割当対象に決定し、前記入替後の総和が前記入替前の総和を下回っていない場合は入替前の配置結果を前記分類情報の割当対象に決定し、
設定された前記分類情報を、前記割当対象に決定された配置結果内の各図形が示すエンティティに割り当て、
割当結果を出力する、
処理をコンピュータに実行させるための分析支援プログラム。