(57)【要約】【課題】ソフトウェア構造の理解を支援すること。【解決手段】分析支援装置１００は、ソフトウェアＳＷ内の複数の構成要素Ｃから分割した構成要素群Ｇの構成要素間の依存関係に基づいて、構成要素列Ｌを作成する。分析支援装置１００は、作成した構成要素列Ｌのうちの同一ランクｒの構成要素集合Ａごとに、構成要素集合Ａに含まれる構成要素Ｃの種類が構成要素集合Ａの中で占める割合ｐを算出する。分析支援装置１００は、算出した算出結果に基づいて、構成要素群Ｇの構造種別を決定する。【選択図】図１
2015056120.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成し、
作成した前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出し、
算出した算出結果に基づいて、前記構成要素群の構造種別を決定する、
処理を実行させることを特徴とする分析支援プログラム。
【請求項２】
前記決定する処理は、
前記同一ランクごとの構成要素集合の全てに前記割合が閾値以上となる種類が存在し、かつ、前記割合が閾値以上となる種類が前記同一ランクごとの構成要素集合の全てで同一となる条件を満たす場合、前記構成要素群の構造種別を、同一種類の構成要素により形成される単種構造に決定することを特徴とする請求項１に記載の分析支援プログラム。
【請求項３】
前記決定する処理は、
前記同一ランクごとの構成要素集合の全てに前記割合が閾値以上となる種類が存在し、かつ、前記割合が閾値以上となる種類が少なくともいずれかの構成要素集合間で異なる条件を満たす場合、前記構成要素群の構造種別を、２種類以上の構成要素により階層化される階層構造に決定することを特徴とする請求項１または２に記載の分析支援プログラム。
【請求項４】
前記決定する処理は、
前記同一ランクごとの構成要素集合を前記構成要素列の上位の構成要素を含む構成要素集合が上位となるように並べた場合に、最上位の構成要素集合から第１の構成要素集合まで連続して特定の種類の前記割合が閾値以上となり、かつ、前記第１の構成要素集合よりも下位の構成要素集合の全てに前記割合が閾値以上となる種類が存在しない条件を満たす場合、前記構成要素群の構造種別を、同一種類の構成要素により上位層が形成され、種々の構成要素により無秩序に下位層が形成される上部単種構造に決定することを特徴とする請求項１〜３のいずれか一つに記載の分析支援プログラム。
【請求項５】
前記決定する処理は、
前記同一ランクごとの構成要素集合を前記構成要素列の上位の構成要素を含む構成要素集合が上位となるように並べた場合に、最上位の構成要素集合から第２の構成要素集合まで連続して前記割合が閾値以上となる種類が存在せず、かつ、前記第２の構成要素集合よりも下位の構成要素集合の全てで特定の種類の前記割合が閾値以上となる条件を満たす場合、前記構成要素群の構造種別を、種々の構成要素により無秩序に上位層が形成され、同一種類の構成要素により下位層が形成される下部単種構造に決定することを特徴とする請求項１〜４のいずれか一つに記載の分析支援プログラム。
【請求項６】
前記コンピュータに、
前記構成要素集合の中に出現する構成要素の種類の数に基づいて、前記構成要素集合の中の構成要素の種類の混在度を算出し、
前記構成要素集合の中に出現する構成要素の種類を出現順に重複なく並べた種類列を生成する、処理を実行させ、
前記決定する処理は、
前記同一ランクごとの構成要素集合の少なくともいずれかの構成要素集合に前記割合が閾値以上となる種類が存在せず、かつ、前記同一ランクごとの構成要素集合の全てで前記混在度が閾値以上となり、かつ、前記同一ランクごとの構成要素集合の全てで前記種類列が一致する条件を満たす場合、前記構成要素群の構造種別を、互いに依存関係の少ない２種類以上の構成要素により形成された複数種構造に決定することを特徴とする請求項１〜５のいずれか一つに記載の分析支援プログラム。
【請求項７】
前記決定する処理は、
前記条件を満たさない場合、前記構成要素群の構造種別を、種々の構成要素により無秩序に形成される混在構造に決定することを特徴とする請求項２〜６のいずれか一つに記載の分析支援プログラム。
【請求項８】
ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成する作成部と、
前記作成部によって作成された前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出する算出部と、
前記算出部によって算出された算出結果に基づいて、前記構成要素群の構造種別を決定する決定部と、
を有することを特徴とする分析支援装置。
【請求項９】
コンピュータが、
ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成し、
作成した前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出し、
算出した算出結果に基づいて、前記構成要素群の構造種別を決定する、
処理を実行することを特徴とする分析支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分析支援プログラム、分析支援装置および分析支援方法に関する。
【背景技術】
【０００２】
ソフトウェアを開発・改良・保守するためにはソフトウェアの理解が重要となる。しかし、ソフトウェアは大規模になればなるほど、ソフトウェアの構造は複雑なものとなり、その把握は容易ではない。このため、ソフトウェアを理解が容易な程度に小規模な部分集合に分割することが行われる場合がある。
【０００３】
また、長期間運用しているソフトウェアでは、業務に合わせてソフトウェア内のプログラムの修正が行われることがある。この際、多くの場合、プログラム間の依存関係が変化するため、ソフトウェア内のプログラム群を区分する業務分類をより管理しやすく定義し直したほうが管理を効率化できることがある。このため、長期間運用している現状のソフトウェア資産を管理する上で、設計当初の業務分類と現状の業務分類とを比較して乖離の有無を調べることが行われる。
【０００４】
関連する先行技術としては、例えば、要件定義から作成した目標アーキテクチャモデルと、製品ロードマップから作成したフィーチャモデルに基づいて、既存のソフトウェア資産であるソースコードファイルから作成した現状アーキテクチャモデルを編集することにより、現実アーキテクチャモデルを作成する技術がある。
【０００５】
また、ストレージシステムからハードウェア要素とソフトウェア要素に関する仕様情報を取得して解析し、ソフトウェアへの影響を示すソフトウェア影響情報を生成して、各開発セクションがソフトウェア影響情報を参照しながら協調して開発を進める技術がある。また、設計された構造とのずれや不適切な要素を指摘して、改変されるソフトウェアの保守作業を支援するための技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２７６９１１号公報
【特許文献２】特開２００６−１４６８４２号公報
【特許文献３】特開２００７−２６５０８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術によれば、設計当初の業務分類と現状の業務分類との乖離の構造の相違を判断できず、ソフトウェアの構造を理解することが困難なものとなる場合がある。例えば、設計当初の業務分類と現状の業務分類との乖離の構造の相違を把握できないと、設計当初の業務分類を、ソフトウェア内のプログラム群を管理しやすい業務分類に修正するために、どのような是正処置を採ればよいか判断することが難しい。
【０００８】
一つの側面では、本発明は、ソフトウェア構造の理解を支援することができる分析支援プログラム、分析支援装置および分析支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一側面によれば、ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成し、作成した前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出し、算出した算出結果に基づいて、前記構成要素群の構造種別を決定する分析支援プログラム、分析支援装置および分析支援方法が提案される。
【発明の効果】
【００１０】
本発明の一態様によれば、ソフトウェア構造の理解を支援することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態１にかかる分析支援方法の一実施例を示す説明図である。
【図２】図２は、分析支援装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、ソースコードＤＢ３００の記憶内容の一例を示す説明図である。
【図４】図４は、依存関係情報３１０の具体例を示す説明図である。
【図５】図５は、既存分類情報テーブル５００の記憶内容の一例を示す説明図である。
【図６】図６は、役割情報６００の具体例を示す説明図である。
【図７】図７は、分析支援装置１００の機能的構成例を示すブロック図である。
【図８】図８は、構造種別の一例を示す説明図である。
【図９】図９は、プログラム列Ｌｉの具体例を示す説明図である。
【図１０】図１０は、２次元配列データの具体例を示す説明図である。
【図１１】図１１は、水平特性値配列の具体例を示す説明図である。
【図１２】図１２は、構造種別リストＬＴの具体例を示す説明図である。
【図１３】図１３は、分析支援装置１００の分析支援処理手順の一例を示すフローチャートである。
【図１４】図１４は、水平特性値配列作成処理の具体的処理手順の一例を示すフローチャートである。
【図１５】図１５は、特性値抽出処理の具体的処理手順の一例を示すフローチャートである。
【図１６】図１６は、構造決定処理の具体的処理手順の一例を示すフローチャート（その１）である。
【図１７】図１７は、構造決定処理の具体的処理手順の一例を示すフローチャート（その２）である。
【図１８】図１８は、出次数・入次数テーブル１８００の記憶内容の一例を示す説明図である。
【図１９】図１９は、更新後の出次数・入次数テーブル１８００の記憶内容の一例を示す説明図である。
【図２０】図２０は、分析支援装置１００の集合作成処理手順の一例を示すフローチャート（その１）である。
【図２１】図２１は、分析支援装置１００の集合作成処理手順の一例を示すフローチャート（その２）である。
【図２２】図２２は、集合Ｓの一例を示す説明図である。
【発明を実施するための形態】
【００１２】
以下に図面を参照して、本発明にかかる分析支援プログラム、分析支援装置および分析支援方法の実施の形態を詳細に説明する。
【００１３】
（実施の形態１）
図１は、実施の形態１にかかる分析支援方法の一実施例を示す説明図である。図１において、分析支援装置１００は、ソフトウェアＳＷの分析を支援するコンピュータである。ソフトウェアＳＷは、分析対象となるコンピュータプログラムであり、複数種類に分類された複数の構成要素Ｃを含む。
【００１４】
構成要素Ｃは、例えば、コンポーネント、モジュール、ソースコード、クラス、関数、データベース、ファイルなどである。構成要素Ｃの種類とは、ソフトウェアＳＷの設計時に構成要素Ｃに与えられる種類である。構成要素Ｃの種類は、例えば、Ｊａｖａ（登録商標）のパッケージ名、Ｃ言語等でのソースファイルのディレクトリ構成、ドキュメント上に記述される業務や機能を分類する命名規約などによって分類される。
【００１５】
ここで、ソフトウェアＳＷを開発・改良・保守するためにはソフトウェアＳＷの理解が重要となる一方で、ソフトウェアＳＷが大規模になればなるほど、ソフトウェアＳＷの構造は複雑なものとなる。このため、ソフトウェアＳＷの構造の把握を容易にすべく、ソフトウェアＳＷを小規模な部分集合に分割することが行われる場合がある。
【００１６】
また、長期間運用しているソフトウェアＳＷでは、業務に合わせてソフトウェアＳＷ内のプログラムの修正等が行われる。この際、多くの場合、プログラム間の依存関係が変化するため、ソフトウェアＳＷ内のプログラム群を区分する業務分類をより管理しやすく定義し直したほうが管理を効率化できることがある。
【００１７】
このため、長期間運用している現状のソフトウェア資産を管理する上で、設計当初等の既存の業務分類と現状の業務分類とを比較して乖離の有無や乖離の構造の相違を調べることが行われる。「乖離の構造」とは、既存の業務分類と現状の業務分類との間に存在する乖離の仕方を示す指標である。
【００１８】
本実施の形態では、分析支援装置１００は、既存の業務分類を、ソフトウェアＳＷ内の構成要素群Ｇを管理しやすい業務分類に修正する是正処置を行う方法を判断するために、既存の業務分類と現状の業務分類との乖離の構造を特定するための情報を提供する。以下、分析支援装置１００の分析処理例について説明する。
【００１９】
（１）分析支援装置１００は、ソフトウェアＳＷ内の複数の構成要素Ｃから分割した構成要素群Ｇの構成要素間の依存関係に基づいて、構成要素列Ｌを作成する。ここで、構成要素間の依存関係とは、例えば、コンポーネント、モジュール、ソースコード、クラス、関数などのプログラム間の呼出関係、継承関係、包含関係やデータアクセス関係などである。
【００２０】
構成要素群Ｇは、ソフトウェアＳＷに含まれる複数の構成要素Ｃの構成要素間の依存関係に基づいて、複数の構成要素Ｃから分割される構成要素Ｃの集合である。構成要素列Ｌは、構成要素群Ｇのうちの関係元の構成要素Ｃを関係先の構成要素Ｃよりも上位に配置し、各構成要素Ｃにランクｒを付与した配列である。
【００２１】
ランクｒは、構成要素群Ｇの構成要素間の依存関係の連鎖の大本となる構成要素Ｃとの関係度合いを示す情報である。例えば、ランクｒは、構成要素群Ｇにおいて、あるプログラムが、プログラム間の依存関係の連鎖の大本となる呼出元のプログラムにどれだけ近いかを示す数値である。ここでは、ランクｒは、構成要素間の依存関係の連鎖の大本となる関係元の構成要素Ｃに近いほど大きな値となる。
【００２２】
図１の例では、ソフトウェアＳＷ内の複数の構成要素Ｃから分割した構成要素群Ｇ１の構成要素間の依存関係に基づいて、構成要素列Ｌ１が作成されている。
【００２３】
（２）分析支援装置１００は、作成した構成要素列Ｌのうちの同一ランクｒの構成要素集合Ａごとに、構成要素集合Ａに含まれる構成要素Ｃの種類が構成要素集合Ａの中で占める割合ｐを算出する。ここで、構成要素集合Ａは、同一ランクｒの構成要素Ｃの集合、例えば、プログラム間の呼出関係の連鎖の大本となるプログラムとの関係度合いが同一のプログラムの集合である。
【００２４】
具体的には、例えば、分析支援装置１００は、構成要素集合Ａに含まれる構成要素Ｃの種類ごとに、構成要素集合Ａに含まれる当該種類の構成要素Ｃの数を、構成要素集合Ａに含まれる構成要素Ｃの総数で割ることにより割合ｐを算出する。これにより、構成要素集合Ａにおいて、ある種類の構成要素Ｃが支配的である、あるいは、種々の構成要素Ｃが混在しているといった構成要素集合Ａの特性を抽出することができる。
【００２５】
図１の例では、構成要素列Ｌ１を同一ランクｒの構成要素Ｃで区分けすることにより、構成要素群Ｇ１が構成要素集合Ａ１〜Ａ５によって階層構造化され、各構成要素集合Ａ１〜Ａ５の特性が抽出される。ただし、構成要素集合Ａ１〜Ａ５は、ランクｒが降順となるように並べたものである。
【００２６】
これにより、階層構造化された構成要素群Ｇ１の各階層（構成要素集合Ａ１〜Ａ５）において、ある種類の構成要素Ｃが支配的である、あるいは、種々の構成要素Ｃが混在しているといった特性を抽出することができる。
【００２７】
（３）分析支援装置１００は、算出した算出結果に基づいて、構成要素群Ｇの構造種別を決定する。具体的には、例えば、分析支援装置１００は、構成要素群Ｇの構造種別を、単種構造、階層構造、上部単種構造、下部単種構造および混在構造いずれかの構造種別に決定する。
【００２８】
ここで、単種構造は、同一種類の構成要素Ｃにより形成される構造である。階層構造は、２種類以上の構成要素Ｃにより階層化される構造である。上部単種構造は、同一種類の構成要素Ｃにより上位層が形成され、種々の構成要素Ｃにより無秩序に下位層が形成される構造である。下部単種構造は、種々の構成要素Ｃにより無秩序に上位層が形成され、同一種類の構成要素Ｃにより下位層が形成される構造である。混在構造は、種々の構成要素Ｃにより無秩序に形成される構造である。
【００２９】
例えば、階層構造化された構成要素群Ｇ１の全階層（構成要素集合Ａ１〜Ａ５）において、ある種類の構成要素Ｃが支配的であるという特性が抽出された場合、分析支援装置１００は、構成要素群Ｇ１の構造種別を「単種構造」に決定する。
【００３０】
以上説明したように、実施の形態１にかかる分析支援装置１００によれば、階層構造化された構成要素群Ｇの各階層の特徴を抽出して構成要素群Ｇの構造種別を決定することができる。これにより、ソフトウェアＳＷから分割される構成要素群Ｇの構造を定量的、客観的に判断することが可能となり、既存の業務分類と現状の業務分類との乖離の構造の相違を判断しやすくしてソフトウェアＳＷの構造の理解を支援することができる。
【００３１】
（実施の形態２）
つぎに、実施の形態２にかかる分析支援装置１００について説明する。実施の形態２では、ソフトウェアＳＷの構成要素Ｃとして、コンポーネント、モジュール、ソースコード、クラス、関数などのプログラムを例に挙げて説明する。また、プログラムの種類を「既存分類Ｋ」と表記する場合がある。なお、実施の形態１で説明した箇所と同様の箇所については説明を省略する。
【００３２】
（分析支援装置１００のハードウェア構成例）
図２は、分析支援装置１００のハードウェア構成例を示すブロック図である。図２において、分析支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、ディスクドライブ２０４と、ディスク２０５と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０６と、キーボード２０７と、マウス２０８と、ディスプレイ２０９と、を有する。また、各構成部はバス２００によってそれぞれ接続される。
【００３３】
ここで、ＣＰＵ２０１は、分析支援装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。ディスクドライブ２０４は、ＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリード／ライトを制御する。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する。ディスク２０５には、例えば、磁気ディスク、光ディスクなどを採用することができる。
【００３４】
Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータに接続される。そして、Ｉ／Ｆ２０６は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。Ｉ／Ｆ２０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３５】
キーボード２０７は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。キーボード２０７は、例えば、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２０８は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。
【００３６】
ディスプレイ２０９は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０９には、例えば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。なお、分析支援装置１００は、上述した構成部のほか、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、スキャナ、プリンタなどを有することにしてもよい。
【００３７】
（ソースコードＤＢ３００の記憶内容）
つぎに、分析支援装置１００が有するソースコードＤＢ（データベース）３００の記憶内容について説明する。ソースコードＤＢ３００は、例えば、図２に示したＲＡＭ２０３、ディスク２０５などの記憶装置により実現される。
【００３８】
図３は、ソースコードＤＢ３００の記憶内容の一例を示す説明図である。図３において、ソースコードＤＢ３００は、分析対象となるソフトウェアＳＷと依存関係情報３１０を記憶する。ソフトウェアＳＷは、プログラム群３０１〜３０４を有する。図３では、説明の便宜上、プログラム群３０１〜３０４の各プログラムを図形により表示する。
【００３９】
図３の例では、ソフトウェアＳＷは、金融システムのソフトウェアである。ソフトウェアＳＷは、新規発行系のプログラム群３０１と、失効処理系のプログラム群３０２と、管理系のプログラム群３０３と、プログラム群３０１〜３０３に共通して利用される共通処理のプログラム群３０４と、に分類されている。
【００４０】
新規発行系、失効処理系、管理系および共通処理が業務分類に相当する。すなわち、ソフトウェアＳＷは、設計当初などの既存の業務分類により分類されている。具体的には、プログラム群３０１は、新規発行系のプログラムａ１〜ａ１５である。また、プログラム群３０２は、失効処理系のプログラムｂ１〜ｂ３２である。また、プログラム群３０３は、管理系のプログラムｃ１〜ｃ２３である。また、プログラム群３０４は、共通処理のプログラムｄ１〜ｄ１２である。
【００４１】
各プログラムに付した符号の先頭のアルファベットは、プログラムの先頭１文字目に出現する既存の業務分類に応じたプログラム名による命名規約を示す。例えば、「ａ」は新規発行系を特定する命令規約、「ｂ」は失効処理系を特定する命令規約、「ｃ」は管理系を特定する命令規約、「ｄ」は共通処理を特定する命令規約を示す。
【００４２】
依存関係情報３１０は、ソフトウェアＳＷに含まれるプログラム間の依存関係を示す情報である。ここで、依存関係情報３１０の具体例について説明する。
【００４３】
図４は、依存関係情報３１０の具体例を示す説明図である。図４において、依存関係情報３１０は、関係元のプログラムと関係先のプログラムとを対応付けて示す情報である。例えば、依存関係が呼び出し関係を示している場合、関係元が「ｃ１」、関係先が「ｃ２」の例では、プログラムｃ１がプログラムｃ２を呼び出していることになる。
【００４４】
（既存分類情報テーブル５００の記憶内容）
つぎに、分析支援装置１００が有する既存分類情報テーブル５００の記憶内容について説明する。既存分類情報テーブル５００は、既存の業務分類に関する情報を、ソフトウェアＳＷ内の各プログラムに関連付けるための情報である。既存分類情報テーブル５００は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置により実現される。
【００４５】
図５は、既存分類情報テーブル５００の記憶内容の一例を示す説明図である。図５において、既存分類情報テーブル５００は、既存業務分類名および命名規約のフィールドを有し、各フィールドに情報を設定することで、既存分類情報５００−１〜５００−４をレコードとして記憶する。
【００４６】
既存業務分類名は、既存の業務分類の名称である。命名規約は、既存の業務分類に応じた命名規約である。ここでは、ソフトウェアＳＷ内の各プログラムの分類基準をプログラム名による命名規約とし、各プログラムは、プログラム名の先頭１文字によって分類される。例えば、先頭１文字が「ａ」のプログラムは、新規発行系に分類される。
【００４７】
既存分類情報５００−１は、新規発行系のプログラムの命名規約「ａ」を示す。既存分類情報５００−２は、失効処理系のプログラムの命名規約「ｂ」を示す。既存分類情報５００−３は、管理系のプログラムの命名規約「ｃ」を示す。既存分類情報５００−４は、共通処理のプログラムの命名規約「ｄ」を示す。
【００４８】
（役割情報６００の具体例）
つぎに、分析支援装置１００が用いる役割情報６００の具体例について説明する。
【００４９】
図６は、役割情報６００の具体例を示す説明図である。図６において、役割情報６００は、ソフトウェアＳＷに含まれるプログラム群３０１〜３０４を、複数のクラスタにクラスタ化した情報である。役割Ｇ１〜Ｇ３がクラスタＣＬ１〜ＣＬ３となる。役割とは、ソフトウェアＳＷに含まれるプログラム間の依存関係を分析して得られるモジュールの単位である。
【００５０】
例えば、役割Ｇ１〜Ｇ３のうち新規発行系のプログラム数が最も多いのは役割Ｇ２であるため、利用者は、役割Ｇ２を現状の新規発行系と解釈することができる。また、利用者は、プログラム数ではなく、重要なプログラムが存在するクラスタを、その重要なプログラムを有する分類として解釈することもできる。例えば、失効処理系のプログラムｂ１〜ｂ３２のうち、ｂ２８〜ｂ３２が失効処理系の機能を実現するために必要不可欠なプログラムであることが分かっている場合、利用者は、役割Ｇ３を現状の失効処理系と解釈することができる。
【００５１】
（分析支援装置１００の機能的構成例）
図７は、分析支援装置１００の機能的構成例を示すブロック図である。図７において、分析支援装置１００は、取得部７０１と、分割部７０２と、作成部７０３と、算出部７０４と、決定部７０５と、出力部７０６と、を含む構成である。取得部７０１〜出力部７０６は制御部となる機能であり、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０６により、その機能を実現する。各機能部の処理結果は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶される。
【００５２】
取得部７０１は、分析対象となるソフトウェアＳＷおよび依存関係情報３１０を取得する機能を有する。具体的には、例えば、取得部７０１は、図２に示したキーボード２０７やマウス２０８を用いた利用者の操作入力により、ソフトウェアＳＷおよび依存関係情報３１０を取得する。取得されたソフトウェアＳＷおよび依存関係情報３１０は、例えば、図３に示したソースコードＤＢ３００に記憶される。
【００５３】
また、取得部７０１は、ソフトウェアＳＷに含まれるプログラム間の依存関係を抽出することにより、依存関係情報３１０を取得することにしてもよい。具体的には、例えば、取得部７０１は、既存の構文解析技術および静的解析技術により、ソフトウェアＳＷのソースコードを解析することにより、プログラム間の依存関係を抽出することができる。
【００５４】
分割部７０２は、ソフトウェアＳＷに含まれるプログラム間の依存関係に基づいて、ソフトウェアＳＷに含まれる複数のプログラムからプログラム群Ｇを分割する機能を有する。具体的には、例えば、分割部７０２は、ソフトウェアＳＷのソースコードおよび依存関係情報３１０に基づいて、ソフトウェアＳＷ内のプログラム群３０１〜３０４を複数のクラスタにクラスタ化することにより、図６に示した役割情報６００を分割結果として出力する。
【００５５】
クラスタは、例えば、ソフトウェアＳＷをグラフで表現し、当該グラフを分割するクラスタリングを実行することで得られる部分グラフに属するプログラムの集合であり、プログラム群Ｇに相当する。クラスタ化の手法としては、既存の任意の手法を用いることができる。
【００５６】
以下の説明では、ソフトウェアＳＷから分割されるプログラム群Ｇを「役割Ｇ」と表記する場合がある。また、ソフトウェアＳＷから分割される複数の役割Ｇを「役割Ｇ１〜Ｇｎ」と表記し、役割Ｇ１〜Ｇｎのうちの任意の役割Ｇを「役割Ｇｉ」と表記する場合がある（ｉ＝１，２，…，ｎ）。
【００５７】
作成部７０３は、役割Ｇｉ内のプログラム間の依存関係に基づいて、プログラム列Ｌｉを作成する機能を有する。ここで、プログラム列Ｌｉは、役割Ｇｉのうちの呼出元のプログラムを呼出先のプログラムよりも上位に配置し、各プログラムにランクｒを付与した配列である。
【００５８】
ランクｒは、役割Ｇｉにおいて、あるプログラムが、プログラム間の依存関係の連鎖の大本となる呼出元のプログラムにどれだけ近いかを示す数値である。ここでは、ランクｒは、プログラム間の依存関係の連鎖の大本となる呼出元のプログラムに近いほど大きな値となる。すなわち、プログラム間の依存関係の連鎖の大本となる呼出元のプログラムに付与されるランクｒが最大となる。
【００５９】
具体的には、例えば、作成部７０３は、依存関係情報３１０および役割情報６００を参照して、各役割Ｇ１〜Ｇ３内のプログラム間の依存関係に基づいて、各役割Ｇ１〜Ｇ３のプログラム列Ｌ１〜Ｌ３を作成する。なお、プログラム列Ｌｉの具体例については、図９を用いて後述する。また、プログラム列Ｌｉの作成例については、図１８〜図２２を用いて後述する。
【００６０】
以下の説明では、プログラム列Ｌｉに含まれる同一ランクｒごとのプログラム集合Ａを「プログラム集合Ａ１〜Ａｍ」と表記し、プログラム集合Ａ１〜Ａｍのうちの任意のプログラム集合を「プログラム集合Ａｊ」と表記する場合がある（ｊ＝１，２，…，ｍ）。
【００６１】
算出部７０４は、作成されたプログラム列Ｌｉのうちの同一ランクｒのプログラム集合Ａｊごとに、プログラム集合Ａｊに含まれる既存分類Ｋの占有率ｐを算出する機能を有する。ここで、占有率ｐは、プログラム集合Ａｊの中で既存分類Ｋのプログラムが占める割合である。
【００６２】
具体的には、例えば、算出部７０４は、プログラム集合Ａｊに含まれる既存分類Ｋのプログラムの数を、プログラム集合Ａに含まれるプログラムの総数で割ることにより、既存分類Ｋごとの占有率ｐを算出する。なお、既存分類Ｋの占有率ｐの算出例については、図１０を用いて後述する。
【００６３】
また、算出部７０４は、プログラム集合Ａｊの中に出現する既存分類Ｋを出現順に重複なく並べた既存分類列Ｅｊを生成することにしてもよい。ここで、既存分類列Ｅｊは、プログラム集合Ａｊの中に出現する既存分類Ｋ、すなわち、プログラムの種類を出現順に重複なく並べた種類列である。
【００６４】
また、上述した実施の形態１では、構成要素集合Ａ（プログラム集合Ａ）に含まれる構成要素Ｃ（プログラム）の並びを考慮しない場合について説明したが、実施の形態２では、各プログラム集合Ａ１〜Ａｍに含まれる同一ランクｒのプログラムは、統一的な価値基準に基づき意味のある順に並べられているものとする。例えば、プログラム間の依存関係の重みに基づいて、関係の近いプログラム同士は近く、関係の遠いプログラム同士は遠くに位置するという順序が与えられる。
【００６５】
重みとは、関係元とその関係先との依存関係の重要度を示す指標である。重みは、その値が大きいほど重要であることを示す。重みとしては、例えば、予め、関係元のプログラム、関係先のプログラム、または、依存関係に対して付与された値が用いられる。例えば、新規発行系のプログラム群３０１の中で重要な機能を実現するプログラムについてはそうでないプログラムよりも重みの値が大きく設定される。
【００６６】
具体的には、例えば、算出部７０４は、プログラム集合Ａｊの中に出現する既存分類Ｋを出現順に重複なく本筋バッファＭＢに格納することにより既存分類列Ｅｊを生成する。本筋バッファＭＢは、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置により実現される。なお、既存分類列Ｅｊの生成例については、図１０を用いて後述する。
【００６７】
また、算出部７０４は、プログラム集合Ａｊの中に出現する既存分類Ｋの数に基づいて、プログラム集合Ａｊの混在度ｃを算出することにしてもよい。ここで、混在度ｃとは、プログラム集合Ａｊの中の既存分類Ｋの混在度合いを示す指標値である。具体的には、例えば、算出部７０４は、本筋バッファＭＢに格納された既存分類Ｋの数から「１」を減じた値を混在度ｃとして算出する。なお、混在度ｃの算出例については、図１０を用いて後述する。
【００６８】
決定部７０５は、算出された算出結果に基づいて、役割Ｇｉの構造種別を決定する機能を有する。ここで、役割Ｇｉの構造種別とは、役割Ｇｉが、単一あるいは複数の既存分類Ｋのプログラムによってどのように構成されているかを判別するためのものである。
【００６９】
具体的には、例えば、決定部７０５は、役割Ｇｉの構造種別を、図８に示すような単種構造、階層構造、上部単種構造、下部単種構造、混在構造および複数種構造のいずれかの構造種別に決定する。ここで、図８を用いて、役割Ｇｉの構造種別の一例について説明する。
【００７０】
図８は、構造種別の一例を示す説明図である。図８において、「単種構造」は、同一種類の既存分類Ｋのプログラムにより形成される構造を示す。すなわち、「単種構造」は、役割Ｇｉを構成するプログラムが特定の既存分類Ｋからなっていることを示す。「単種構造」は、役割Ｇｉが設計当初の業務分類が実態としても機能していることを意味し、保守性の観点から望ましい状態であることを意味する。
【００７１】
「階層構造」は、２種類以上の既存分類Ｋのプログラムにより階層化される構造を示す。すなわち、「階層構造」は、既存分類間に上位下位という依存関係が発生して一つの業務分類上の機能を実現していることを示す。「階層構造」は、保守性として極端に悪いとはいえないが、設計当初の業務分類を見直す余地があることを意味する。
【００７２】
「上部単種構造」は、同一種類の既存分類Ｋのプログラムにより上位層が形成され、種々の既存分類Ｋのプログラムにより無秩序に下位層が形成される構造を示す。すなわち、「上部単種構造」は、役割Ｇｉの上部に位置するプログラムが処理を振り分けて下部に位置する様々なプログラムを呼び出すディスパッチ的な構造になっていることを示す。「上部単種構造」は、役割Ｇｉの上位層を基準にして設計当初の業務分類を見直すことが望ましいことを意味する。
【００７３】
「下部単種構造」は、種々の既存分類Ｋのプログラムにより無秩序に上位層が形成され、同一種類の既存分類Ｋのプログラムにより下位層が形成される構造を示す。すなわち、「下部単種構造」は、役割Ｇｉの下部に共通ルーチンがあり、複数の業務分類から呼び出される構造になっていることを示す。「下部単種構造」は、役割Ｇｉの下位層を基準にして設計当初の業務分類を見直すことが望ましいことを意味する。
【００７４】
「混在構造」は、種々の既存分類Ｋのプログラムにより無秩序に形成される構造を示す。すなわち、「混在構造」は、既存分類Ｋと無関係にプログラムが集まって機能を構成していることを示す。「混在構造」は、ソフトウェアＳＷの再設計を検討することが望ましいことを意味する。
【００７５】
「複数種構造」は、互いに依存関係の少ない２種類以上の既存分類Ｋのプログラムにより形成される構造を示す。すなわち、「複数種構造」は、複数の既存分類Ｋが同一役割内に存在しているが互いの依存関係は少ないことを示す。「複数種構造」は、複数の既存分類Ｋが集まって一つの役割Ｇｉを実現しているが、互いの絡み合いは少なく、「混在構造」の場合ほど保守性の懸念が大きくないことを意味する。
【００７６】
具体的には、例えば、まず、決定部７０５は、プログラム集合Ａｊごとに、占有率ｐが閾値α以上となる既存分類Ｋが存在するか否かを判定する。閾値αは、プログラム集合Ａｊにおける支配的な既存分類Ｋを判別するための値であり、例えば、０．８程度の値に設定される。閾値αは、予め設定されてＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶される。
【００７７】
そして、決定部７０５は、例えば、下記条件（ｉ）を満たす場合に、役割Ｇｉの構造種別を単種構造に決定する。
【００７８】
（ｉ）プログラム集合Ａ１〜Ａｍの全てに占有率ｐが閾値α以上となる既存分類Ｋが存在し、かつ、プログラム集合Ａ１〜Ａｍの全てで占有率ｐが閾値α以上となる既存分類Ｋが同一である。
【００７９】
また、決定部７０５は、例えば、下記条件（ｉｉ）を満たす場合に、役割Ｇｉの構造種別を階層構造に決定する。
【００８０】
（ｉｉ）プログラム集合Ａ１〜Ａｍの全てに占有率ｐが閾値α以上となる既存分類Ｋが存在し、かつ、占有率ｐが閾値α以上となる既存分類Ｋが少なくともいずれかのプログラム集合間で異なる。
【００８１】
また、決定部７０５は、例えば、下記条件（ｉｉｉ）を満たす場合に、役割Ｇｉの構造種別を上部単種構造に決定する。
【００８２】
（ｉｉｉ）プログラム集合Ａ１〜Ａｍのうち最上位のプログラム集合Ａから第１のプログラム集合Ａまで連続して特定の既存分類Ｋの占有率ｐが閾値α以上となり、かつ、第１のプログラム集合Ａよりも下位のプログラム集合Ａの全てに占有率ｐが閾値α以上となる既存分類Ｋが存在しない。
【００８３】
ここで、第１のプログラム集合Ａは、例えば、プログラム集合Ａ１〜Ａｍの上位３０％程度のプログラム集合Ａのうちの最下位のプログラム集合Ａである。上記条件（ｉｉｉ）によれば、プログラム集合Ａ１〜Ａｍの上位３０％程度までは最上位と同じ既存分類Ｋが支配的であり、それ以降は、種々の既存分類Ｋが無秩序に混在していることを判別することができる。
【００８４】
また、決定部７０５は、例えば、下記条件（ｉｖ）を満たす場合に、役割Ｇｉの構造種別を下部単種構造に決定する。
【００８５】
（ｉｖ）プログラム集合Ａ１〜Ａｍのうち最上位のプログラム集合Ａから第２のプログラム集合Ａまで連続して占有率ｐが閾値α以上となる既存分類Ｋが存在せず、かつ、第２のプログラム集合Ａよりも下位のプログラム集合Ａの全てで特定の既存分類Ｋの占有率ｐが閾値α以上となる。
【００８６】
ここで、第２のプログラム集合Ａは、例えば、プログラム集合Ａ１〜Ａｍの上位７０％程度のプログラム集合Ａのうちの最下位のプログラム集合Ａである。上記条件（ｉｖ）によれば、プログラム集合Ａ１〜Ａｍの上位７０％程度までは種々の既存分類Ｋが無秩序に混在しており、それ以降は、特定の既存分類Ｋが支配的であることを判別することができる。
【００８７】
また、決定部７０５は、例えば、下記条件（ｖ）を満たす場合に、役割Ｇｉの構造種別を複数種構造に決定する。
【００８８】
（ｖ）プログラム集合Ａ１〜Ａｍの少なくともいずれかのプログラム集合Ａに占有率ｐが閾値α以上となる既存分類Ｋが存在せず、かつ、プログラム集合Ａ１〜Ａｍの全てで混在度ｃが閾値β以上となり、かつ、プログラム集合Ａ１〜Ａｍの全てで既存分類列Ｅ１〜Ｅｍが一致する。
【００８９】
閾値βは、予め設定されてＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶されている。例えば、閾値βは、２程度の値に設定される。
【００９０】
また、決定部７０５は、例えば、上記条件（ｉ）〜（ｖ）のいずれの条件も満たさない場合に、役割Ｇｉの構造種別を混在構造に決定する。
【００９１】
出力部７０６は、決定された決定結果を出力する機能を有する。具体的には、例えば、出力部７０６は、後述する図１２に示すような構造種別リストＬＴを出力することにしてもよい。出力部７０６の出力形式としては、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置への記憶、ディスプレイ２０９への表示、Ｉ／Ｆ２０６による外部のコンピュータへの送信、不図示のプリンタへの印刷出力などがある。
【００９２】
なお、上述した説明では、分割部７０２が、ソフトウェアＳＷのソースコードと依存関係情報３１０から役割情報６００を出力することにしたが、これに限らない。具体的には、例えば、分析支援装置１００は、外部のコンピュータから役割情報６００を取得することにしてもよい。
【００９３】
また、上述した説明では、作成部７０３が、役割Ｇｉのプログラム列Ｌｉを作成することにしたが、これに限らない。具体的には、例えば、分析支援装置１００は、外部のコンピュータから役割Ｇ１のプログラム列Ｌｉ（例えば、後述する図９参照）を取得することにしてもよい。
【００９４】
（プログラム列Ｌｉの具体例）
ここで、プログラム列Ｌｉの具体例について説明する。ここでは、役割Ｇ１（図６参照）のプログラム列Ｌ１を例に挙げて説明する。
【００９５】
図９は、プログラム列Ｌｉの具体例を示す説明図である。図９において、プログラム列Ｌ１は、役割Ｇ１のうちの呼出元のプログラムを呼出先のプログラムよりも上位に配置し、各プログラムにランクｒを付与した配列である。オーダーは、プログラム列Ｌ１における各プログラムの順序を示す。プログラム名は、各プログラムの名称である。ランクは、各プログラムに付与されたランクｒである。
【００９６】
プログラム列Ｌ１では、ランクｒが最大のプログラムｃ１とｃ４が呼出関係の連鎖の大本に存在する。また、ランクｒが最小のプログラムａ２，ａ３，ｂ３，ｂ５，ｂ７，ｂ１１，ｂ１４，ｃ３，ｃ７，ｃ８が、最も呼出先側に位置し、それ以上の呼出先が（役割Ｇ１内には）存在しない。
【００９７】
（プログラム集合Ａｊの特性値の抽出例）
つぎに、役割Ｇ１のプログラム列Ｌ１を例に挙げて、プログラム列Ｌ１に含まれる同一ランクｒのプログラム集合Ａｊの特性値の抽出例について説明する。ここで、プログラム集合Ａｊの特性値とは、「既存分類Ｋの占有率ｐ」、「既存分類列Ｅｊ」および「混在度ｃ」である。
【００９８】
まず、算出部７０４は、プログラム列Ｌ１のうちの同一ランクｒのプログラムを並べたプログラム集合Ａｊを示す配列データを、ランクｒが降順となるように並べた２次元配列データ（例えば、図１０に示す２次元配列データ１０００）を作成する。ここで、２次元配列データの具体例について説明する。
【００９９】
図１０は、２次元配列データの具体例を示す説明図である。図１０において、２次元配列データ１０００は、プログラム列Ｌ１のうちの同一ランクｒのプログラム（プログラム名）を並べたプログラム集合Ａ１〜Ａ９を示す配列データ１０００−１〜１０００−９を、ランクｒが降順となるように並べた情報である。
【０１００】
例えば、配列データ１０００−１は、ランクｒが最大のプログラムｃ１，ｃ４を並べたプログラム集合Ａ１を示す。また、例えば、配列データ１０００−９は、ランクｒが最小のプログラムａ２，ａ３，ｂ３，ｂ５，ｂ７，ｂ１１，ｂ１４，ｃ３，ｃ７，ｃ８を並べたプログラム集合Ａ９を示す。
【０１０１】
以下の説明では、同一ランクｒの要素（プログラム）が並んでいる方向を「横方向」あるいは「水平方向」と表記し、ランクｒの異なる方向を「縦方向」あるいは「垂直方向」と表記する場合がある。また、記法［］は配列を表す。
【０１０２】
つぎに、算出部７０４は、作成した２次元配列データ１０００に含まれる配列データ１０００−１〜１０００−９ごとの特性値を抽出する。ここで、配列データ１０００−１を例に挙げて、配列データ１０００−１の特性値の抽出例について説明する。
【０１０３】
具体的には、例えば、算出部７０４は、配列データ１０００−１の先頭から順に要素（プログラム）を抽出して、その要素が属する既存分類ＫのカウンタＣＴをインクリメントする。カウンタＣＴは、既存分類Ｋ（例えば、既存分類ａ，ｂ，ｃ，ｄ）ごとに用意される。カウンタＣＴの値は、初期状態では「０」である。
【０１０４】
また、算出部７０４は、抽出した配列データ１０００−１から抽出した要素が属する既存分類Ｋが本筋バッファＭＢにない場合は、抽出した要素が属する既存分類Ｋ（既存業務分類名）を本筋バッファＭＢに格納する。本筋バッファＭＢは、初期状態では空である。
【０１０５】
より詳細に説明すると、算出部７０４は、配列データ１０００−１の配列［ｃ１，ｃ４］の先頭の要素「ｃ１」を抽出する。ここで、プログラムｃ１の既存分類Ｋは「ｃ」である。このため、算出部７０４は、既存分類ｃに対応するカウンタＣＴ（ｃ）をインクリメントして「１」とする。また、既存分類ｃが本筋バッファＭＢに存在しないため、算出部７０４は、本筋バッファＭＢの末尾に既存分類ｃを格納する。これにより、本筋バッファＭＢの内容は、［ｃ］となる。
【０１０６】
つぎに、算出部７０４は、配列データ１０００−１の配列［ｃ１，ｃ４］の２番目の要素「ｃ４」を抽出する。ここで、プログラムｃ４の既存分類Ｋは「ｃ」である。このため、算出部７０４は、既存分類ｃに対応するカウンタＣＴ（ｃ）をインクリメントして「２」とする。一方、既存分類ｃが本筋バッファＭＢに存在するため、算出部７０４は、本筋バッファＭＢに既存分類ｃを格納しない。
【０１０７】
そして、配列データ１０００−１の配列［ｃ１，ｃ４］から抽出されていない未抽出の要素がなくなると、算出部７０４は、配列データ１０００−１に含まれる既存分類Ｋの占有率ｐを算出する。ここで、配列データ１０００−１に含まれる既存分類Ｋは既存分類ｃのみであり、カウンタＣＴ（ｃ）の値は「２」である。
【０１０８】
このため、算出部７０４は、配列データ１０００−１に含まれる既存分類ｃのプログラムの数「２」を、配列データ１０００−１に含まれるプログラムの総数「２」で割ることにより、既存分類ｃの占有率ｐ「ｐ＝１．０」を算出する。また、算出部７０４は、本筋バッファＭＢに格納されている既存分類Ｋの数「１」から１を減じた値「０」を混在度ｃとして混在カウンタＩＣＴに格納する。
【０１０９】
このようにして、配列データ１０００−１の特性値として、各既存分類Ｋの占有率ｐ、本筋バッファＭＢ（既存分類列Ｅ１）および混在度ｃを抽出することができる。以下の説明では、２次元配列データに含まれる各配列データの特性値を「水平特性値」と表記する場合がある。
【０１１０】
例えば、配列データ１０００−１の水平特性値を配列［混在度ｃ，各既存分類Ｋの占有率ｐ，既存分類列Ｅ１］の形で表すと、［０，｛ｃ＝＞１．０｝，［ｃ］］となる。ただし、｛ｃ＝＞１．０｝という表記は、キーｃに対して値１．０が対応する連想配列を意味する。
【０１１１】
そして、算出部７０４は、２次元配列データ１０００に含まれる配列データ１０００−１〜１０００−９ごとの水平特性値を抽出して順次配列に格納していくことにより水平特性値配列（例えば、図１１に示す水平特性値配列１１００）を作成する。ここで、水平特性値配列の具体例について説明する。
【０１１２】
図１１は、水平特性値配列の具体例を示す説明図である。図１１において、水平特性値配列１１００は、図１０に示した２次元配列データ１０００に含まれる配列データ１０００−１〜１０００−９ごとの水平特性値１１００−１〜１１００−９を順次格納した配列である。
【０１１３】
例えば、水平特性値１１００−１は、混在度ｃ「ｃ＝０」、既存分類ｃの占有率ｐ「ｐ＝１．０」および既存分類列［ｃ］を示す。また、例えば、水平特性値１１００−９は、混在度ｃ「ｃ＝２」、既存分類ａの占有率ｐ「ｐ＝０．２」、既存分類ｂの占有率ｐ「ｐ＝０．５」、既存分類ｃの占有率ｐ「ｐ＝０．３」および既存分類列［ａ，ｂ，ｃ］を示す。
【０１１４】
（役割Ｇｉの構造種別の決定例）
つぎに、役割Ｇｉの構造種別の決定例について説明する。ここでは、図１１に示した水平特性値配列１１００を用いて、役割Ｇ１の構造種別を決定する場合を例に挙げて説明する。
【０１１５】
まず、決定部７０５は、水平特性値配列１１００の先頭から水平特性値を順次選択する。つぎに、決定部７０５は、順次選択した水平特性値の既存分類Ｋの占有率ｐを参照して、占有率ｐが閾値α以上となる既存分類Ｋが存在するか否かを判断する。占有率ｐが閾値α以上となる既存分類Ｋが存在する場合は、水平方向に支配的な既存分類Ｋが存在することを意味する。
【０１１６】
ここで、占有率ｐが閾値α以上となる既存分類Ｋが存在する場合、決定部７０５は、水平支配色配列の末尾に、占有率ｐが閾値α以上となる既存分類Ｋ（既存業務分類名）を格納するとともに、支配的カウンタＲＣＴをインクリメントする。一方、占有率ｐが閾値α以上となる既存分類Ｋが存在しない場合、決定部７０５は、水平支配色配列の末尾に、水平方向に種々の既存分類Ｋが混在していることを示す混在印（ここでは、「＊」と表記）を格納する。
【０１１７】
水平支配色配列は、水平特性値配列（例えば、水平特性値配列１１００）において、占有率ｐが閾値α以上となる既存分類Ｋがどのように分布しているかを示す配列である。支配的カウンタＲＣＴは、占有率ｐが閾値α以上となる既存分類Ｋが存在する水平特性値の数を格納するカウンタである。
【０１１８】
水平特性値配列１１００の例では、水平支配色配列は［ｃ，ｃ，ｄ，ｄ，ａ，＊，＊，＊，＊］となる。また、支配的カウンタＲＣＴの値は「５」となる。
【０１１９】
つぎに、決定部７０５は、支配的カウンタＲＣＴの値が、水平特性値配列１１００の行数（水平特性値の数）と一致するか否かを判断する。ここで、水平特性値配列１１００の行数と一致する場合、水平特性値配列１１００の各行が何らかの既存分類Ｋによってほぼ占められていることを意味する。このため、決定部７０５は、水平支配色配列の要素が全て同一か否かに応じて、役割Ｇ１の構造種別を「単種構造」または「階層構造」に決定する。
【０１２０】
水平特性値配列１１００の例では、支配的カウンタＲＣＴの値「５」が、水平特性値配列１１００の行数「９」と一致しない。
【０１２１】
この場合、決定部７０５は、順次選択した水平特性値の混在度ｃを参照して、水平特性値配列１１００の全ての行（水平特性値１１００−１〜１１００−９）で混在度ｃが閾値β以上となるか否かを判断する。水平特性値配列１１００の全ての行で混在度ｃが閾値β以上となる場合は、水平特性値配列１１００の各行に複数の既存分類Ｋが存在することを意味する。
【０１２２】
ここで、全ての行で混在度ｃが閾値β以上の場合、決定部７０５は、水平特性値配列１１００の全ての行で既存分類列Ｅ（本筋バッファＭＢ）が同じであるか否かを判断する。水平特性値配列１１００の全ての行で既存分類列Ｅが同じである場合は、水平特性値配列１１００の全ての行で本筋バッファＭＢの既存分類Ｋの並びが同じであることを意味する。そして、全ての行で既存分類列が同じ場合、決定部７０５は、役割Ｇ１の構造種別を「複数種構造」に決定する。
【０１２３】
水平特性値配列１１００の例では、「β＝３」とすると、水平特性値１１００−６のみ混在度ｃが閾値β以上であり、それ以外は混在度ｃが閾値β未満となる。
【０１２４】
この場合、決定部７０５は、水平支配色配列の先頭が混在であるか否かを判断する。ここで、先頭が混在ではない場合、決定部７０５は、水平支配色配列の先頭からＸ番目まで先頭と同じ既存分類Ｋが連続しているか否かを判断する。水平支配色配列の先頭からＸ番目まで先頭と同じ既存分類Ｋが連続している場合は、水平支配色配列の先頭からＸ番目まで先頭と同じ既存分類Ｋが支配的であり続けていることを意味する。なお、水平支配色配列のＸ番目の要素は、上述した第１のプログラム集合Ａに相当する。
【０１２５】
ここで、水平支配色配列の先頭からＸ番目まで先頭と同じ既存分類Ｋが連続していない場合、決定部７０５は、役割Ｇ１の構造種別を「混在構造」に決定する。一方、水平支配色配列の先頭からＸ番目まで先頭と同じ既存分類Ｋが連続している場合、決定部７０５は、水平支配色配列の（Ｘ＋１）番目から末尾まで混在が連続しているか否かを判断する。水平支配色配列の（Ｘ＋１）番目から末尾まで混在が連続している場合は、水平支配色配列のＸ番目以降は末尾まで混在が支配的であり続けていることを意味する。
【０１２６】
ここで、水平支配色配列の（Ｘ＋１）番目から末尾まで混在が連続している場合、決定部７０５は、役割Ｇ１の構造種別を「上部単種構造」に決定する。一方、水平支配色配列の（Ｘ＋１）番目から末尾まで混在が連続していない場合、決定部７０５は、役割Ｇ１の構造種別を「混在構造」に決定する。
【０１２７】
水平特性値配列１１００の例では、先頭は混在ではなく既存分類ｃになっているが、既存分類ｃが支配的である区間は上位２行であり、全体９行のうちの上位２２％程度にすぎず、閾値である上位３０％に達しない。このため、決定部７０５は、役割Ｇ１の構造種別を「混在構造」に決定する。
【０１２８】
また、水平支配色配列の先頭が混在の場合、決定部７０５は、水平支配色配列の先頭からＹ番目まで混在が連続しているか否かを判断する。水平支配色配列の先頭からＹ番目まで混在が連続している場合は、水平支配色配列の先頭からＹ番目まで混在が支配的であり続けていることを意味する。なお、水平支配色配列のＹ番目の要素は、上述した第２のプログラム集合Ａに相当する。
【０１２９】
ここで、水平支配色配列の先頭からＹ番目まで混在が連続していない場合、決定部７０５は、役割Ｇ１の構造種別を「混在構造」に決定する。一方、水平支配色配列の先頭からＹ番目まで混在が連続している場合、決定部７０５は、水平支配色配列の（Ｙ＋１）番目から末尾まで特定の既存分類Ｋが連続しているか否かを判断する。水平支配色配列の（Ｙ＋１）番目から末尾まで特定の既存分類Ｋが連続している場合は、水平支配色配列のＹ番目以降は末尾まで特定の既存分類Ｋが支配的であり続けていることを意味する。
【０１３０】
ここで、水平支配色配列の（Ｙ＋１）番目から末尾まで特定の既存分類Ｋが連続している場合、決定部７０５は、役割Ｇ１の構造種別を「下部単種構造」に決定する。一方、水平支配色配列の（Ｙ＋１）番目から末尾まで特定の既存分類Ｋが連続していない場合、決定部７０５は、役割Ｇ１の構造種別を「混在構造」に決定する。
【０１３１】
また、例えば、役割Ｇｉの２次元配列データ（プログラム列Ｌｉ）を、［［ａ，ａ，ａ，ｂ，ｂ，ｃ，ｃ］，［ａ，ａ，ａ，ｂ，ｂ，ｃ，ｃ］，［ａ，ａ，ｂ，ｂ，ｂ，ｃ，ｃ］，［ａ，ａ，ｂ，ｂ，ｃ，ｃ，ｃ］］とすると、水平特性値配列は以下のようになる。ただし、ここでは既存分類Ｋの既存業務分類名のみを表記している。
【０１３２】
［［２，｛ａ＝＞０．４３，ｂ＝＞０．２９，ｃ＝＞０．２９｝，［ａ，ｂ，ｃ］］，［２，｛ａ＝＞０．４３，ｂ＝＞０．２９，ｃ＝＞０．２９｝，［ａ，ｂ，ｃ］］，［２，｛ａ＝＞０．２９，ｂ＝＞０．４３，ｃ＝＞０．２９｝，［ａ，ｂ，ｃ］］，［２，｛ａ＝＞０．２９，ｂ＝＞０．２９，ｃ＝＞０．４３｝，［ａ，ｂ，ｃ］］］
【０１３３】
この場合、閾値βを「β＝２」とすると、水平特性値配列の全ての行で混在度ｃが閾値β以上となる。また、水平特性値配列の全ての行で既存分類列Ｅ１〜Ｅ４（本筋バッファＭＢ）が［ａ，ｂ，ｃ］で同じである。この場合、決定部７０５は、役割Ｇｉの構造種別を「複数種構造」に決定する。
【０１３４】
なお、「ある区間において特定の既存分類Ｋ（または、混在）が支配的であり続ける」ための条件は、上述した、ある区間において特定の既存分類Ｋが連続する場合に限らない。例えば、決定部７０５は、ある区間において他の既存分類Ｋの割合が所定の閾値γ以下であれば、その区間において特定の既存分類Ｋが支配的であり続けると判断することにしてもよい。閾値γは、予め設定されてＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶されている。例えば、閾値γは、０．２程度の値に設定される。
【０１３５】
例えば、閾値γを「γ＝０．２」として、水平特性値配列が２０行の場合に、１行目から６行目まで既存分類ａが支配的であるか否かを判断する場合を想定する。この場合、１行目から６行目までのいずれかの１行が既存分類ａが支配的であるという基準を満たさなくても、６行のうちの１行の割合は「０．１７」であり閾値γ以下となる。このため、決定部７０５は、１行目から６行目まで既存分類ａが支配的であると判断する。
【０１３６】
（構造種別リストＬＴの具体例）
図１２は、構造種別リストＬＴの具体例を示す説明図である。図１２において、構造種別リストＬＴは、役割ＩＤおよび構造種別のフィールドを有し、各フィールドに情報を設定することで、各役割Ｇ１〜Ｇ３の構造種別をレコードとして記憶する。役割ＩＤは、役割Ｇｉの識別子である。構造種別は、役割Ｇｉの構造種別である。
【０１３７】
構造種別リストＬＴによれば、ソフトウェアＳＷから分割された各役割Ｇ１〜Ｇ３の構造種別を判別することができる。利用者は、例えば、役割Ｇ１の構造種別が「混在構造」のため、種々の既存分類Ｋのプログラムが集まって役割Ｇ１を実現しており、既存分類Ｋが分類として機能しておらず、ソフトウェアＳＷの保守性の問題が高い状態であると判断することができる。
【０１３８】
（分析支援装置１００の分析支援処理手順）
つぎに、実施の形態２にかかる分析支援装置１００の分析支援処理手順について説明する。
【０１３９】
図１３は、分析支援装置１００の分析支援処理手順の一例を示すフローチャートである。図１３のフローチャートにおいて、まず、分析支援装置１００は、ソフトウェアＳＷに含まれるプログラム間の依存関係に基づいて、ソフトウェアＳＷから役割Ｇ１〜Ｇｎを分割する（ステップＳ１３０１）。
【０１４０】
つぎに、分析支援装置１００は、役割Ｇｉの「ｉ」を「ｉ＝１」として（ステップＳ１３０２）、役割Ｇ１〜Ｇｎから役割Ｇｉを選択する（ステップＳ１３０３）。そして、分析支援装置１００は、役割Ｇｉ内のプログラム間の依存関係に基づいて、役割Ｇｉのプログラム列Ｌｉを作成する（ステップＳ１３０４）。
【０１４１】
つぎに、分析支援装置１００は、プログラム列Ｌｉのうちの同一ランクｒのプログラムを並べたプログラム集合Ａｊを示す配列データを、ランクｒが降順となるように並べた２次元配列データを作成する（ステップＳ１３０５）。そして、分析支援装置１００は、作成した２次元配列データに基づいて、水平特性値配列作成処理を実行する（ステップＳ１３０６）。水平特性値配列作成処理の具体的な処理手順については、図１４を用いて後述する。
【０１４２】
つぎに、分析支援装置１００は、役割Ｇｉの構造種別を決定する構造決定処理を実行する（ステップＳ１３０７）。構造決定処理の具体的な処理手順については、図１６および図１７を用いて後述する。そして、分析支援装置１００は、決定した役割Ｇｉの構造種別を構造種別リストＬＴに登録する（ステップＳ１３０８）。
【０１４３】
つぎに、分析支援装置１００は、役割Ｇｉの「ｉ」をインクリメントして（ステップＳ１３０９）、「ｉ」が「ｎ」より大きくなったか否かを判断する（ステップＳ１３１０）。ここで、「ｉ」が「ｎ」以下の場合（ステップＳ１３１０：Ｎｏ）、分析支援装置１００は、ステップＳ１３０３に戻る。
【０１４４】
一方、「ｉ」が「ｎ」より大きくなった場合（ステップＳ１３１０：Ｙｅｓ）、分析支援装置１００は、構造種別リストＬＴを出力して（ステップＳ１３１１）、本フローチャートによる一連の処理を終了する。これにより、各役割Ｇ１〜Ｇｎの構造種別をリスト化して出力することができる。
【０１４５】
＜水平特性値配列作成処理手順＞
つぎに、図１３に示したステップＳ１３０６の水平特性値配列作成処理の具体的な処理手順について説明する。
【０１４６】
図１４は、水平特性値配列作成処理の具体的処理手順の一例を示すフローチャートである。図１４のフローチャートにおいて、まず、分析支援装置１００は、水平特性値配列を初期化する（ステップＳ１４０１）。つぎに、分析支援装置１００は、図１３に示したステップＳ１３０５において作成した２次元配列データの先頭から配列データを選択する（ステップＳ１４０２）。
【０１４７】
そして、分析支援装置１００は、選択した配列データの特性値抽出処理を実行する（ステップＳ１４０３）。なお、特性値抽出処理の具体的な処理手順については、図１５を用いて後述する。つぎに、分析支援装置１００は、配列データの特性値を水平特性値配列の末尾に格納する（ステップＳ１４０４）。
【０１４８】
そして、分析支援装置１００は、２次元配列データから選択していない未選択の配列データがあるか否かを判断する（ステップＳ１４０５）。ここで、未選択の配列データがある場合（ステップＳ１４０５：Ｙｅｓ）、分析支援装置１００は、ステップＳ１４０２に戻って、２次元配列データから未選択の配列データを選択する。
【０１４９】
一方、未選択の配列データがない場合（ステップＳ１４０５：Ｎｏ）、分析支援装置１００は、本フローチャートによる一連の処理を終了し、水平特性値配列作成処理を呼び出したステップに戻る。これにより、２次元配列データに含まれる配列データごとの特性値を抽出することができる。
【０１５０】
＜特性値抽出処理手順＞
つぎに、図１４に示したステップＳ１４０３の特性値抽出処理の具体的な処理手順について説明する。
【０１５１】
図１５は、特性値抽出処理の具体的処理手順の一例を示すフローチャートである。図１５のフローチャートにおいて、まず、分析支援装置１００は、カウンタＣＴ、本筋バッファ、混在カウンタＩＣＴを初期化する（ステップＳ１５０１）。そして、分析支援装置１００は、配列データの先頭から要素を抽出する（ステップＳ１５０２）。
【０１５２】
つぎに、分析支援装置１００は、抽出した要素が属する既存分類ＫのカウンタＣＴをインクリメントする（ステップＳ１５０３）。そして、分析支援装置１００は、抽出した要素が属する既存分類Ｋが本筋バッファＭＢにあるか否かを判断する（ステップＳ１５０４）。
【０１５３】
ここで、本筋バッファＭＢにある場合（ステップＳ１５０４：Ｙｅｓ）、分析支援装置１００は、ステップＳ１５０６に移行する。一方、本筋バッファＭＢにない場合（ステップＳ１５０４：Ｎｏ）、本筋バッファＭＢの末尾に抽出した要素が属する既存分類Ｋを格納する（ステップＳ１５０５）。
【０１５４】
つぎに、分析支援装置１００は、配列データから抽出していない未抽出の要素があるか否かを判断する（ステップＳ１５０６）。ここで、未抽出の要素がある場合（ステップＳ１５０６：Ｙｅｓ）、分析支援装置１００は、ステップＳ１５０２に戻って、配列データから抽出していない未抽出の要素を抽出する。
【０１５５】
一方、未抽出の要素がない場合（ステップＳ１５０６：Ｎｏ）、分析支援装置１００は、各既存分類ＫのカウンタＣＴの値を、配列データに含まれる要素の総数で割ることにより、各既存分類Ｋの占有率ｐを算出する（ステップＳ１５０７）。そして、分析支援装置１００は、本筋バッファＭＢに格納された既存分類Ｋの数から１を減じた値を混在カウンタＩＣＴに格納して（ステップＳ１５０８）、本フローチャートによる一連の処理を終了し、特性値抽出処理を呼び出したステップに戻る。
【０１５６】
これにより、配列データの特性値として、各既存分類Ｋの占有率ｐ、本筋バッファＭＢ（既存分類列Ｅ）および混在度ｃ（混在カウンタＩＣＴ）を抽出することができる。
【０１５７】
＜構造決定処理手順＞
つぎに、図１３に示したステップＳ１３０７の構造決定処理の具体的な処理手順について説明する。
【０１５８】
図１６および図１７は、構造決定処理の具体的処理手順の一例を示すフローチャートである。図１６のフローチャートにおいて、まず、分析支援装置１００は、水平支配色配列と支配的カウンタＲＣＴを初期化する（ステップＳ１６０１）。
【０１５９】
つぎに、分析支援装置１００は、水平特性値配列の先頭から水平特性値を選択する（ステップＳ１６０２）。そして、分析支援装置１００は、選択した水平特性値の各既存分類Ｋの占有率ｐを参照して、占有率ｐが閾値α以上となる既存分類Ｋが存在するか否かを判断する（ステップＳ１６０３）。
【０１６０】
ここで、占有率ｐが閾値α以上となる既存分類Ｋが存在する場合（ステップＳ１６０３：Ｙｅｓ）、分析支援装置１００は、水平支配色配列の末尾に占有率ｐが閾値α以上の既存分類Ｋを格納する（ステップＳ１６０４）。そして、分析支援装置１００は、支配的カウンタＲＣＴをインクリメントして（ステップＳ１６０５）、ステップＳ１６０７に移行する。
【０１６１】
一方、占有率ｐが閾値α以上となる既存分類Ｋが存在しない場合（ステップＳ１６０３：Ｎｏ）、分析支援装置１００は、水平支配色配列の末尾に混在印を格納する（ステップＳ１６０６）。つぎに、分析支援装置１００は、水平特性値配列から選択していない未選択の水平特性値があるか否かを判断する（ステップＳ１６０７）。
【０１６２】
ここで、未選択の水平特性値がある場合（ステップＳ１６０７：Ｙｅｓ）、分析支援装置１００は、ステップＳ１６０２に戻って、水平特性値配列から選択していない未選択の水平特性値を選択する。一方、未選択の水平特性値がない場合（ステップＳ１６０７：Ｎｏ）、分析支援装置１００は、支配的カウンタＲＣＴの値が水平特性値配列の行数と一致するか否かを判断する（ステップＳ１６０８）。
【０１６３】
ここで、支配的カウンタＲＣＴの値が水平特性値配列の行数と一致する場合（ステップＳ１６０８：Ｙｅｓ）、分析支援装置１００は、水平支配色配列の要素が全て同一か否かを判断する（ステップＳ１６０９）。
【０１６４】
そして、水平支配色配列の要素が全て同一の場合（ステップＳ１６０９：Ｙｅｓ）、分析支援装置１００は、役割Ｇｉの構造種別を「単種構造」に決定して（ステップＳ１６１０）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１６５】
一方、水平支配色配列の要素が同一ではない場合（ステップＳ１６０９：Ｎｏ）、分析支援装置１００は、役割Ｇｉの構造種別を「階層構造」に決定して（ステップＳ１６１１）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１６６】
また、ステップＳ１６０８において、支配的カウンタＲＣＴの値が水平特性値配列の行数と一致しない場合（ステップＳ１６０８：Ｎｏ）、分析支援装置１００は、図１７に示すステップＳ１７０１に移行する。
【０１６７】
図１７のフローチャートにおいて、まず、分析支援装置１００は、水平特性値配列の全ての行で混在カウンタＩＣＴの値（混在度ｃ）が閾値β以上か否かを判断する（ステップＳ１７０１）。ここで、水平特性値配列の全ての行で混在カウンタＩＣＴの値が閾値β以上ではない場合（ステップＳ１７０１：Ｎｏ）、分析支援装置１００は、ステップＳ１７０４に移行する。
【０１６８】
一方、水平特性値配列の全ての行で混在カウンタＩＣＴの値が閾値β以上の場合（ステップＳ１７０１：Ｙｅｓ）、水平特性値配列の全ての行で本筋バッファＭＢ（既存分類列Ｅ）が同じか否かを判断する（ステップＳ１７０２）。
【０１６９】
ここで、水平特性値配列の全ての行で本筋バッファＭＢが同じ場合（ステップＳ１７０２：Ｙｅｓ）、分析支援装置１００は、役割Ｇｉの構造種別を「複数種構造」に決定して（ステップＳ１７０３）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１７０】
一方、水平特性値配列の行で本筋バッファＭＢが同じではない場合（ステップＳ１７０２：Ｎｏ）、分析支援装置１００は、水平支配色配列の先頭が混在であるか否かを判断する（ステップＳ１７０４）。ここで、水平支配色配列の先頭が混在ではない場合（ステップＳ１７０４：Ｎｏ）、分析支援装置１００は、水平支配色配列の先頭からＸ番目まで先頭と同じ既存分類Ｋが連続しているか否かを判断する（ステップＳ１７０５）。
【０１７１】
ここで、先頭からＸ番目まで先頭と同じ既存分類Ｋが連続している場合（ステップＳ１７０５：Ｙｅｓ）、分析支援装置１００は、水平支配色配列の（Ｘ＋１）番目から末尾まで混在が連続しているか否かを判断する（ステップＳ１７０６）。
【０１７２】
ここで、（Ｘ＋１）番目から末尾まで混在が連続している場合（ステップＳ１７０６：Ｙｅｓ）、役割Ｇｉの構造種別を「上部単種構造」に決定して（ステップＳ１７０７）、本フローチャートによる一連の処理を終了し構造決定処理を呼び出したステップに戻る。
【０１７３】
また、ステップＳ１７０５において、先頭からＸ番目まで先頭と同じ既存分類Ｋが連続していない場合（ステップＳ１７０５：Ｎｏ）、分析支援装置１００は、役割Ｇｉの構造種別を「混在構造」に決定して（ステップＳ１７０８）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１７４】
また、ステップＳ１７０６において、（Ｘ＋１）番目から末尾まで混在が連続していない場合（ステップＳ１７０６：Ｎｏ）、分析支援装置１００は、役割Ｇｉの構造種別を「混在構造」に決定して（ステップＳ１７０８）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１７５】
また、ステップＳ１７０４において、水平支配色配列の先頭が混在の場合（ステップＳ１７０４：Ｙｅｓ）、分析支援装置１００は、水平支配色配列の先頭からＹ番目まで混在が連続しているか否かを判断する（ステップＳ１７０９）。
【０１７６】
ここで、先頭からＹ番目まで混在が連続している場合（ステップＳ１７０９：Ｙｅｓ）、分析支援装置１００は、水平支配色配列の（Ｙ＋１）番目から末尾まで特定の既存分類Ｋが連続しているか否かを判断する（ステップＳ１７１０）。
【０１７７】
ここで、（Ｙ＋１）番目から末尾まで特定の既存分類Ｋが連続している場合（ステップＳ１７１０：Ｙｅｓ）、分析支援装置１００は、役割Ｇｉの構造種別を「下部単種構造」に決定して（ステップＳ１７１１）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１７８】
また、ステップＳ１７０９において、先頭からＹ番目まで混在が連続していない場合（ステップＳ１７０９：Ｎｏ）、分析支援装置１００は、役割Ｇｉの構造種別を「混在構造」に決定して（ステップＳ１７０８）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１７９】
また、ステップＳ１７１０において、（Ｙ＋１）番目から末尾まで特定の既存分類Ｋが連続していない場合（ステップＳ１７１０：Ｎｏ）、分析支援装置１００は、役割Ｇｉの構造種別を「混在構造」に決定して（ステップＳ１７０８）、本フローチャートによる一連の処理を終了し、構造決定処理を呼び出したステップに戻る。
【０１８０】
これにより、役割Ｇｉの構造種別を、「単種構造」、「階層構造」、「上部単種構造」、「下部単種構造」、「複数種構造」および「混在構造」のいずれかの構造種別に決定することができる。
【０１８１】
（プログラム列Ｌｉの作成例）
ここで、役割Ｇｉのプログラム列Ｌｉの作成例について説明する。ここでは、役割Ｇ１を例に挙げて、プログラム列Ｌ１の作成例について説明する。作成部７０３は、依存関係情報３１０を参照して、各プログラムの出次数と入次数を算出することにより、関係元のプログラムが関係先のプログラムよりも上位に配列されるプログラム列Ｌ１を作成する。
【０１８２】
具体的には、例えば、まず、作成部７０３は、依存関係情報３１０から有向グラフを作成する。有向グラフとは、プログラムをノード、依存関係を有向なエッジとするグラフである。より詳細に説明すると、エッジの始端のノードが関係元であり、エッジの終端（矢印の先）が関係先である。この有向グラフを示す集合をＧとする。また、ＳｌとＳｒという順序を保持した集合を用意する。
【０１８３】
つぎに、作成部７０３は、ソースコードＤＢ３００内のプログラム群から集合Ｇの要素である役割Ｇ１のプログラムを抽出する。作成部７０３は、依存関係情報３１０を参照して、抽出した各プログラムについて、当該プログラムが依存関係の関係元となっている数を出次数、依存関係の関係先となる数を入次数として記録する。また、作成部７０３は、各プログラムについて、出次数から入次数を引いた差分も記録する。
【０１８４】
例えば、図４を参照すると、作成部７０３は、プログラムａ１について、関係元となっている項目を調査する。この場合、プログラムａ１は、プログラムｃ６，ｃ７，ｂ１３，ｃ９の４個のプログラムの関係元であることが分かる。したがって、プログラムａ１の出次数は「４」である。また、プログラムａ１は、プログラムｄ１，ｄ２の２個のプログラムの関係先であることがわかる。したがって、プログラムａ１の入次数は「２」である。また、プログラムａ１について、出次数から入次数を引いた差分は、「２」である。
【０１８５】
図１８は、出次数・入次数テーブル１８００の記憶内容の一例を示す説明図である。図１８において、出次数・入次数テーブル１８００は、プログラムごとに、出次数、入次数、出次数から入次数を引いた差分を記録するテーブルである。図１８の例では、役割Ｇ１のプログラム群について記録されているが、役割Ｇ２，Ｇ３についても同様に記録される。出次数・入次数テーブル１８００は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置により実現される。
【０１８６】
つぎに、作成部７０３は、図１８に示した出次数・入次数テーブル１８００から出次数が「０」のプログラムを特定する。作成部７０３は、出次数が「０」のプログラムを、集合Ｓｒの先頭に追加し、集合Ｇから削除する。図１８の例では、プログラムａ２，ａ３，ｂ３，ｂ５，ｂ７，ｂ１１，ｂ１４，ｃ３，ｃ７，ｃ８の順に集合Ｓｒの先頭に追加され、集合Ｇから削除される。
【０１８７】
つぎに、作成部７０３は、１０個のプログラムａ２，ａ３，ｂ３，ｂ５，ｂ７，ｂ１１，ｂ１４，ｃ３，ｃ７，ｃ８のレコードを、出次数・入次数テーブル１８００から削除する。また、作成部７０３は、削除後の集合Ｇにより、出次数、入次数、差分を再計算して、削除後の出次数・入次数テーブル１８００を更新する。
【０１８８】
図１９は、更新後の出次数・入次数テーブル１８００の記憶内容の一例を示す説明図である。作成部７０３は、更新後の出次数・入次数テーブル１８００から出次数が「０」のプログラムを特定する。作成部７０３は、出次数が「０」のプログラムを、集合Ｓｒに追加し、集合Ｇから削除する。図１９の例では、プログラムｂ２，ｂ４，ｂ８，ｂ９，ｂ１０，ｂ１３，ｃ１０，ｃ１１，ｄ３の順に集合Ｓｒの先頭に追加され、集合Ｇから削除される。
【０１８９】
つぎに、作成部７０３は、９個のプログラムｂ２，ｂ４，ｂ８，ｂ９，ｂ１０，ｂ１３，ｃ１０，ｃ１１，ｄ３のレコードを、図１９に示した出次数・入次数テーブル１８００から削除する。また、作成部７０３は、削除後の集合Ｇにより、出次数、入次数、差分を再計算して、削除後の出次数・入次数テーブル１８００を更新する。このような処理を、出次数が「０」であるプログラムがなくなるまで繰り返すことになる。これにより、最終的に集合Ｇには、プログラムｃ１，ｃ４が残される。
【０１９０】
出次数が「０」であるプログラムがなくなった場合、作成部７０３は、集合Ｇに残されているプログラム群の各プログラムについて、最新の出次数・入次数テーブル１８００から入次数が「０」のプログラムを特定する。作成部７０３は、入次数が「０」のプログラムを、集合Ｓｌの末尾から追加し、集合Ｇから削除する。
【０１９１】
つぎに、作成部７０３は、入次数が「０」のプログラムのレコードを、最新の出次数・入次数テーブル１８００から削除する。また、作成部７０３は、削除後の集合Ｇにより、出次数、入次数、差分を再計算して、削除後の出次数・入次数テーブル１８００を更新する。この処理を繰り返すことにより、入次数が「０」のプログラムや出次数が「０」のプログラムが集合Ｇから順に取り除かれ、出次数、入次数のいずれも「０」にならないプログラムが集合Ｇに残される。
【０１９２】
このあと、集合Ｇに残存するプログラムについて、作成部７０３は、出次数から入次数を引いた差分を計算する。そして、作成部７０３は、差分が最大となるプログラムを集合Ｓｌの末尾に追加し、集合Ｇから削除する。本例では、差分が最大となるプログラムは、プログラムｃ１，ｃ４であるため、作成部７０３は、プログラムｃ１，ｃ４を集合Ｓｌの末尾に追加し、集合Ｇから削除する。本例では、プログラムｃ１，ｃ４が集合Ｇから削除されたことにより、集合Ｇは空集合になったとする。集合Ｇが空集合になると、作成部７０３は、集合Ｓｌの末尾に集合Ｓｒの先頭を連結して、集合Ｓを作成する。
【０１９３】
以下、図２０および図２１を用いて、分析支援装置１００が集合Ｓを作成する具体的な処理手順について説明する。
【０１９４】
図２０および図２１は、分析支援装置１００の集合作成処理手順の一例を示すフローチャートである。図２０のフローチャートにおいて、まず、分析支援装置１００は、依存関係情報３１０から有向グラフを生成し、有向グラフを集合Ｇとして保持する（ステップＳ２００１）。つぎに、分析支援装置１００は、出次除外回数を０、入次除外回数を０に設定する（ステップＳ２００２）。
【０１９５】
出次数が０のプログラムは後述のステップＳ２０１０において集合Ｇから削除されるが、出次数が０でないプログラムは削除対象にはならないため、出次除外回数とは、出次数が０でないために削除対象にならなかった回数である。同様に、入次数が０のプログラムは後述のステップＳ２０１０において集合Ｇから削除されるが、入次数が０でないプログラムは削除対象にはならないため、入次除外回数とは、入次数が０でないために削除対象にならなかった回数である。したがって、ステップＳ２００２では、初期値として、出次除外回数を０、入次除外回数は０に設定される。
【０１９６】
つぎに、分析支援装置１００は、集合Ｇ内のプログラムごとに出次数と入次数とを算出する（ステップＳ２００３）。算出された出次数と入次数は出次数・入次数テーブル１８００に記録される。そして、分析支援装置１００は、出次数・入次数テーブル１８００を参照して、集合Ｇに出次数が「０」のプログラムがあるか否かを判断する（ステップＳ２００４）。出次数が「０」のプログラムがある場合（ステップＳ２００４：Ｙｅｓ）、分析支援装置１００は、出次数０のプログラムに対して、出次除外回数と種類（ｏｕｔ）とを対応付ける（ステップＳ２００５）。「ｏｕｔ」は出次除外回数であることを示す識別情報である。
【０１９７】
例えば、図１８に示した出次数・入次数テーブル１８００を参照すると、出次数が「０」のプログラムａ２，ａ３，ｂ３，ｂ５，ｂ７，ｂ１１，ｂ１４，ｃ３，ｃ７，ｃ８に対して、出次除外回数＝０が対応付けられる。具体的には、出次数が「０」のプログラムと出次除外回数との組は、（ａ２，（０，Ｏｕｔ）），（ａ３，（０，Ｏｕｔ）），（ｂ３，（０，Ｏｕｔ）），（ｂ５，（０，Ｏｕｔ）），（ｂ７，（０，Ｏｕｔ）），（ｂ１１，（０，Ｏｕｔ）），（ｂ１４，（０，Ｏｕｔ）），（ｃ３，（０，Ｏｕｔ）），（ｃ７，（０，Ｏｕｔ）），（ｃ８，（０，Ｏｕｔ））として記憶領域に保持される。
【０１９８】
このあと、分析支援装置１００は、出次数が「０」のプログラムと出次除外回数との組を集合Ｓｒの先頭に追加して、出次数が「０」のプログラムを集合Ｇから削除する（ステップＳ２００６）。上記の例では、（ａ２，（０，Ｏｕｔ）），（ａ３，（０，Ｏｕｔ）），（ｂ３，（０，Ｏｕｔ）），（ｂ５，（０，Ｏｕｔ）），（ｂ７，（０，Ｏｕｔ）），（ｂ１１，（０，Ｏｕｔ）），（ｂ１４，（０，Ｏｕｔ）），（ｃ３，（０，Ｏｕｔ）），（ｃ７，（０，Ｏｕｔ）），（ｃ８，（０，Ｏｕｔ））の順に、集合Ｓｒの先頭に追加される。
【０１９９】
そして、分析支援装置１００は、出次除外回数に１加算して（ステップＳ２００７）、ステップＳ２００３に戻り、削除後の集合Ｇ内のプログラムごとに、出次数と入次数の算出が実行される（ステップＳ２００３）。出次数と入次数が再算出されると、出次数が「０」のプログラムが再度出現する可能性があるため、出次数が「０」のプログラムがなくなるまで繰り返すことになる。
【０２００】
例えば、出次数と入次数の再算出により、図１９に示した出次数・入次数テーブル１８００を参照して、出次数が「０」のプログラムｂ２，ｂ４，ｂ８，ｂ９，ｂ１０，ｂ１３，ｃ１０，ｃ１１，ｄ３が検出される。したがって、出次数が「０」のプログラムｂ２，ｂ４，ｂ８，ｂ９，ｂ１０，ｂ１３，ｃ１０，ｃ１１，ｄ３に対して、出次除外回数＝１が対応付けられる。
【０２０１】
この場合、具体的には、出次数が「０」のプログラムと出次除外回数の組は、（ｂ２，（１，Ｏｕｔ）），（ｂ４，（１，Ｏｕｔ）），（ｂ８，（１，Ｏｕｔ）），（ｂ９，（１，Ｏｕｔ）），（ｂ１０，（１，Ｏｕｔ）），（ｂ１３，（１，Ｏｕｔ）），（ｃ１０，（１，Ｏｕｔ）），（ｃ１１，（１，Ｏｕｔ）），（ｄ３，（１，Ｏｕｔ））として記憶領域に保持される。
【０２０２】
このあと、出次数が「０」のプログラムと出次除外回数の組（ｂ２，（１，Ｏｕｔ）），（ｂ４，（１，Ｏｕｔ）），（ｂ８，（１，Ｏｕｔ）），（ｂ９，（１，Ｏｕｔ）），（ｂ１０，（１，Ｏｕｔ）），（ｂ１３，（１，Ｏｕｔ）），（ｃ１０，（１，Ｏｕｔ）），（ｃ１１，（１，Ｏｕｔ）），（ｄ３，（１，Ｏｕｔ））は、この順に、集合Ｓｒの先頭に追加される。出次除外回数（＝１）に１加算されて、出次除外回数＝２となる。
【０２０３】
また、出次数が「０」のプログラムｂ２，ｂ４，ｂ８，ｂ９，ｂ１０，ｂ１３，ｃ１０，ｃ１１，ｄ３を集合Ｇから削除して、出次数と入次数を再算出すると、出次数が「０」のプログラムａ５，ｂ６，ｂ１２，ｃ９，ｃ１３が検出されたとする。この場合の出次数が「０」のプログラムと出次除外回数の組は、（ａ５，（２，Ｏｕｔ）），（ｂ６，（２，Ｏｕｔ）），（ｂ１２，（２，Ｏｕｔ）），（ｃ９，（２，Ｏｕｔ）），（ｃ１３，（２，Ｏｕｔ））として記憶領域に保持される。そして、（ａ５，（２，Ｏｕｔ）），（ｂ６，（２，Ｏｕｔ）），（ｂ１２，（２，Ｏｕｔ）），（ｃ９，（２，Ｏｕｔ）），（ｃ１３，（２，Ｏｕｔ））の順に集合Ｓｒの先頭に追加され、出次除外回数（＝２）に１加算されて、出次除外回数＝３となる。
【０２０４】
そして、出次数が「０」のプログラムａ５，ｂ６，ｂ１２，ｃ９，ｃ１３を集合Ｇから削除して、出次数と入次数を再算出し、出次数が「０」のプログラムが検出されなくなると（ステップＳ２００４：Ｎｏ）、ステップＳ２００８に移行する。
【０２０５】
ステップＳ２００８において、分析支援装置１００は、出次数・入次数テーブル１８００を参照して、集合Ｇに入次数が「０」のプログラムがあるか否かを判断する（ステップＳ２００８）。入次数が「０」のプログラムがある場合（ステップＳ２００８：Ｙｅｓ）、分析支援装置１００は、入次数０のプログラムに対して、入次除外回数と種類（ｉｎ）とを対応付ける（ステップＳ２００９）。「ｉｎ」は入次除外回数であることを示す識別情報である。入次数０のプログラムと入次除外回数との組についても、出次数０のプログラムと出次除外回数との組と同様、（プログラム名，（入次除外回数，ｉｎ））のように対応付けて記憶領域に保持される。
【０２０６】
このあと、分析支援装置１００は、入次数が「０」のプログラムと入次除外回数との組を集合Ｓｌの末尾に追加して、入次数が「０」のプログラムを集合Ｇから削除する（ステップＳ２０１０）。そして、分析支援装置１００は、入次除外回数に１加算して（ステップＳ２０１１）、ステップＳ２００３に戻り、削除後の集合Ｇ内のプログラムごとに、出次数と入次数の算出が実行される（ステップＳ２００３）。出次数と入次数が再算出されると、出次数が「０」のプログラムが再度出現する可能性があるため、出次数が「０」のプログラムがなくなるまで繰り返すことになる。一方、ステップＳ２００８において、入次数が「０」のプログラムがない場合（ステップＳ２００８：Ｎｏ）、図２１のステップＳ２１０１に移行する。
【０２０７】
図２１のフローチャートにおいて、まず、分析支援装置１００は、集合Ｇが空になったか否かを判断する（ステップＳ２１０１）。集合Ｇが空になった場合（ステップＳ２１０１：Ｙｅｓ）、ステップＳ２１０８に移行する。一方、集合Ｇが空でない場合（ステップＳ２１０１：Ｎｏ）、分析支援装置１００は、集合Ｇ内のプログラムごとに、出次数から入次数を引いた差分を算出する（ステップＳ２１０２）。そして、分析支援装置１００は、集合Ｇから差分が最大となるプログラムを取得し（ステップＳ２１０３）、差分が最大となるプログラムを、入次除外回数および種類（ｉｎ）に対応付ける（ステップＳ２１０４）。
【０２０８】
そして、分析支援装置１００は、ステップＳ２１０４において生成した差分が最大となるプログラムと入次除外回数との組を集合Ｓｌの末尾に追加して、差分が最大となるプログラムを集合Ｇから削除する（ステップＳ２１０５）。そして、分析支援装置１００は、入次除外回数に１加算する（ステップＳ２１０６）。
【０２０９】
そして、分析支援装置１００は、再度集合Ｇが空になったか否かを判断する（ステップＳ２１０７）。空でない場合（ステップＳ２１０７：Ｎｏ）、図２０のステップＳ２００３に戻り、削除後の集合Ｇ内のプログラムごとに、出次数と入次数の算出が実行される。出次数と入次数が再算出されると、出次数が「０」のプログラムが再度出現する可能性があるため、出次数が「０」のプログラムがなくなるまで繰り返すことになる。また、ステップＳ２１０７において、集合Ｇが空になった場合（ステップＳ２１０７：Ｙｅｓ）、分析支援装置１００は、集合Ｓｌの末尾に集合Ｓｒを連結して集合Ｓを生成して（ステップＳ２１０８）、本フローチャートによる一連の処理を終了する。
【０２１０】
図２２は、集合Ｓの一例を示す説明図である。図２２において、集合Ｓは、図２１に示したステップＳ２１０８において生成される、順序を保持している集合であり、先頭から末尾までの方向に依存関係が存在する。
【０２１１】
この集合Ｓの各プログラムの除外回数に「１」を加算した値が、図９に示したプログラム列Ｌ１の各プログラムのランクｒとなる。すなわち、この集合Ｓの各プログラムの除外回数に「１」を加算し、種別の情報（ｉｎ，ｏｕｔ）を除いたものが、図９に示したプログラム列Ｌ１となる。
【０２１２】
以上説明したように、実施の形態２にかかる分析支援装置１００によれば、ソフトウェアＳＷから分割した役割Ｇｉに含まれるプログラム間の依存関係に基づいて、プログラム列Ｌｉを作成することができる。プログラム列Ｌｉは、関係元のプログラムを関係先のプログラムよりも上位に配置し、プログラム間の依存関係の連鎖の大本となるプログラムとの関係度合いを示すランクｒを各プログラムに付与した配列である。また、分析支援装置１００によれば、プログラム列Ｌｉのうちの同一ランクのプログラム集合Ａｊごとに、プログラム集合Ａｊの中で各既存分類Ｋが占める割合ｐを算出し、算出した算出結果に基づいて、役割Ｇｉの構造種別を決定することができる。これにより、ソフトウェアＳＷから分割される役割Ｇ１〜Ｇｎの構造を定量的、客観的に判断することが可能となり、ソフトウェアＳＷの構造の理解を支援することができる。
【０２１３】
また、分析支援装置１００によれば、プログラム集合Ａ１〜Ａｍの全てに占有率ｐが閾値α以上となる既存分類Ｋが存在し、かつ、プログラム集合Ａ１〜Ａｍの全てで占有率ｐが閾値α以上となる既存分類Ｋが同一である場合に、役割Ｇｉの構造種別を単種構造に決定することができる。これにより、利用者は、例えば、役割Ｇｉが設計当初の業務分類が実態としても機能しており、保守性の観点から望ましい状態であると判断することができる。
【０２１４】
また、分析支援装置１００によれば、プログラム集合Ａ１〜Ａｍの全てに占有率ｐが閾値α以上となる既存分類Ｋが存在し、かつ、占有率ｐが閾値α以上となる既存分類Ｋが少なくともいずれかのプログラム集合間で異なる場合に、役割Ｇｉの構造種別を階層構造に決定することができる。これにより、利用者は、例えば、ソフトウェアＳＷが保守性として極端に悪いとはいえないが、設計当初の業務分類を見直す余地があると判断することができる。
【０２１５】
また、分析支援装置１００によれば、プログラム集合Ａ１〜Ａｍのうち最上位のプログラム集合Ａから第１のプログラム集合Ａまで連続して特定の既存分類Ｋの占有率ｐが閾値α以上となり、かつ、第１のプログラム集合Ａよりも下位のプログラム集合Ａの全てに占有率ｐが閾値α以上となる既存分類Ｋが存在しない場合に、役割Ｇｉの構造種別を上部単種構造に決定することができる。これにより、利用者は、例えば、役割Ｇｉの上位層を基準にして設計当初の業務分類を見直すことが望ましいと判断することができる。
【０２１６】
また、分析支援装置１００によれば、プログラム集合Ａ１〜Ａｍのうち最上位のプログラム集合Ａから第２のプログラム集合Ａまで連続して占有率ｐが閾値α以上となる既存分類Ｋが存在せず、かつ、第２のプログラム集合Ａよりも下位のプログラム集合Ａの全てで特定の既存分類Ｋの占有率ｐが閾値α以上となる場合に、役割Ｇｉの構造種別を下部単種構造に決定することができる。これにより、利用者は、例えば、役割Ｇｉの下位層を基準にして設計当初の業務分類を見直すことが望ましいと判断することができる。
【０２１７】
また、分析支援装置１００によれば、プログラム集合Ａ１〜Ａｍの少なくともいずれかのプログラム集合Ａに占有率ｐが閾値α以上となる既存分類Ｋが存在せず、かつ、プログラム集合Ａ１〜Ａｍの全てで混在度ｃが閾値β以上となり、かつ、プログラム集合Ａ１〜Ａｍの全てで既存分類列Ｅ１〜Ｅｍが一致する場合に、役割Ｇｉの構造種別を複数種構造に決定することができる。これにより、利用者は、例えば、複数の既存分類Ｋが集まって一つの役割Ｇｉを実現しているが、互いの絡み合いは少なく、「混在構造」の場合ほど保守性の懸念が大きくないと判断することができる。この場合、例えば、利用者は、プログラムの業務分類を見直して現状の構造を元に整理するか、あるいは、既存分類同士の依存関係を減らすように修正して、既存分類Ｋに沿った複数の役割Ｇへと分割されるように整理するといった是正処置を採ることができる。
【０２１８】
また、分析支援装置１００によれば、上述したいずれの条件も満たさない場合に、役割Ｇｉの構造種別を混在構造に決定することができる。これにより、利用者は、例えば、ソフトウェアＳＷの再設計を検討することが望ましいと判断することができる。
【０２１９】
このように、分析支援装置１００によれば、ソフトウェアＳＷの構造を定量的、客観的に判断して、ソフトウェアＳＷを構成するプログラムを管理しやすい業務分類に修正するために、どのような是正処置を採ればよいのかの判断を支援することができる。
【０２２０】
具体的には、例えば、ソフトウェアＳＷから分割された役割Ｇ１〜Ｇｎの６割程度が「単種構造」であれば、利用者は「約６０％はプログラムの実態が既存分類Ｋと整合している」と評価するなど、ソフトウェア全体の傾向を数量によって把握することができる。これにより、利用者は既存分類Ｋの妥当性を知ることができ、保守や再設計の判断に役立てることができる。
【０２２１】
なお、本実施の形態で説明した分析支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分析支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本分析支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２２２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２２３】
（付記１）コンピュータに、
ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成し、
作成した前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出し、
算出した算出結果に基づいて、前記構成要素群の構造種別を決定する、
処理を実行させることを特徴とする分析支援プログラム。
【０２２４】
（付記２）前記決定する処理は、
前記同一ランクごとの構成要素集合の全てに前記割合が閾値以上となる種類が存在し、かつ、前記割合が閾値以上となる種類が前記同一ランクごとの構成要素集合の全てで同一となる条件を満たす場合、前記構成要素群の構造種別を、同一種類の構成要素により形成される単種構造に決定することを特徴とする付記１に記載の分析支援プログラム。
【０２２５】
（付記３）前記決定する処理は、
前記同一ランクごとの構成要素集合の全てに前記割合が閾値以上となる種類が存在し、かつ、前記割合が閾値以上となる種類が少なくともいずれかの構成要素集合間で異なる条件を満たす場合、前記構成要素群の構造種別を、２種類以上の構成要素により階層化される階層構造に決定することを特徴とする付記１または２に記載の分析支援プログラム。
【０２２６】
（付記４）前記決定する処理は、
前記同一ランクごとの構成要素集合を前記構成要素列の上位の構成要素を含む構成要素集合が上位となるように並べた場合に、最上位の構成要素集合から第１の構成要素集合まで連続して特定の種類の前記割合が閾値以上となり、かつ、前記第１の構成要素集合よりも下位の構成要素集合の全てに前記割合が閾値以上となる種類が存在しない条件を満たす場合、前記構成要素群の構造種別を、同一種類の構成要素により上位層が形成され、種々の構成要素により無秩序に下位層が形成される上部単種構造に決定することを特徴とする付記１〜３のいずれか一つに記載の分析支援プログラム。
【０２２７】
（付記５）前記決定する処理は、
前記同一ランクごとの構成要素集合を前記構成要素列の上位の構成要素を含む構成要素集合が上位となるように並べた場合に、最上位の構成要素集合から第２の構成要素集合まで連続して前記割合が閾値以上となる種類が存在せず、かつ、前記第２の構成要素集合よりも下位の構成要素集合の全てで特定の種類の前記割合が閾値以上となる条件を満たす場合、前記構成要素群の構造種別を、種々の構成要素により無秩序に上位層が形成され、同一種類の構成要素により下位層が形成される下部単種構造に決定することを特徴とする付記１〜４のいずれか一つに記載の分析支援プログラム。
【０２２８】
（付記６）前記コンピュータに、
前記構成要素集合の中に出現する構成要素の種類の数に基づいて、前記構成要素集合の中の構成要素の種類の混在度を算出し、
前記構成要素集合の中に出現する構成要素の種類を出現順に重複なく並べた種類列を生成する、処理を実行させ、
前記決定する処理は、
前記同一ランクごとの構成要素集合の少なくともいずれかの構成要素集合に前記割合が閾値以上となる種類が存在せず、かつ、前記同一ランクごとの構成要素集合の全てで前記混在度が閾値以上となり、かつ、前記同一ランクごとの構成要素集合の全てで前記種類列が一致する条件を満たす場合、前記構成要素群の構造種別を、互いに依存関係の少ない２種類以上の構成要素により形成された複数種構造に決定することを特徴とする付記１〜５のいずれか一つに記載の分析支援プログラム。
【０２２９】
（付記７）前記決定する処理は、
前記条件を満たさない場合、前記構成要素群の構造種別を、種々の構成要素により無秩序に形成される混在構造に決定することを特徴とする付記２〜６のいずれか一つに記載の分析支援プログラム。
【０２３０】
（付記８）前記構成要素間の依存関係に基づいて、前記複数の構成要素から構成要素群を分割する処理を実行させることを特徴とする付記１〜７のいずれか一つに記載の分析支援プログラム。
【０２３１】
（付記９）ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成する作成部と、
前記作成部によって作成された前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出する算出部と、
前記算出部によって算出された算出結果に基づいて、前記構成要素群の構造種別を決定する決定部と、
を有することを特徴とする分析支援装置。
【０２３２】
（付記１０）コンピュータが、
ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成し、
作成した前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出し、
算出した算出結果に基づいて、前記構成要素群の構造種別を決定する、
処理を実行することを特徴とする分析支援方法。
【０２３３】
（付記１１）コンピュータに、
ソフトウェアに含まれる複数種類に分類された複数の構成要素から分割した構成要素群の構成要素間の依存関係に基づいて、前記構成要素群のうちの関係元の構成要素を関係先の構成要素よりも上位に配置し、前記構成要素間の依存関係の連鎖の大本となる構成要素との関係度合いを示すランクを各構成要素に付与した構成要素列を作成し、
作成した前記構成要素列のうちの同一ランクの構成要素集合ごとに、前記構成要素集合に含まれる構成要素の種類が前記構成要素集合の中で占める割合を算出し、
算出した算出結果に基づいて、前記構成要素群の構造種別を決定する、
処理を実行させる分析支援プログラムを記録したことを特徴とする前記コンピュータに読み取り可能な記録媒体。
【符号の説明】
【０２３４】
１００  分析支援装置
７０１  取得部
７０２  分割部
７０３  作成部
７０４  算出部
７０５  決定部
７０６  出力部
【図１】
2015056120.tif 000003
【図２】
2015056120.tif 000004
【図３】
2015056120.tif 000005
【図４】
2015056120.tif 000006
【図５】
2015056120.tif 000007
【図６】
2015056120.tif 000008
【図７】
2015056120.tif 000009
【図８】
2015056120.tif 000010
【図９】
2015056120.tif 000011
【図１０】
2015056120.tif 000012
【図１１】
2015056120.tif 000013
【図１２】
2015056120.tif 000014
【図１３】
2015056120.tif 000015
【図１４】
2015056120.tif 000016
【図１５】
2015056120.tif 000017
【図１６】
2015056120.tif 000018
【図１７】
2015056120.tif 000019
【図１８】
2015056120.tif 000020
【図１９】
2015056120.tif 000021
【図２０】
2015056120.tif 000022
【図２１】
2015056120.tif 000023
【図２２】
2015056120.tif 000024