(57)【要約】      （修正有）【課題】ソフトウェアの理解を助けるグラフクラスタリング用プログラム及びグラフクラスタリング方法を提供する。【解決手段】グラフクラスタリング用プログラムは、ソフトウエアの設計要素をノードとし、前記設計要素間の関係をエッジとしたグラフにおいて、前記エッジ間の関連の度合を示す関連度を数値として計算するステップと、前記関連度に基づき、複数の前記ノードを複数の集合に分類するステップと、をコンピュータにおいて実行可能に構成される。【選択図】図１Ａ
2017187980.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウエアの設計要素をノードとし、前記設計要素間の関係をエッジとしたグラフにおいて、前記エッジ間の関連の度合を示す関連度を数値として計算するステップと、
前記関連度に基づき、複数の前記ノードを複数の集合に分類するステップと、
をコンピュータにおいて実行可能に構成されたグラフクラスタリング用プログラム。
【請求項２】
所定の値以上の出力エッジ数を持つ前記ノードをハブノードとし、前記ハブノードから出力される前記エッジを出力エッジとした場合、前記ハブノードから出力される前記出力エッジの各々について前記関連度を計算し、
前記出力エッジの前記関連度に従い、前記ノードを分類する、請求項１記載のグラフクラスタリング用プログラム。
【請求項３】
前記関連度の計算は、前記出力エッジの行先の情報に基づき実行される、請求項１記載のグラフクラスタリング用プログラム。
【請求項４】
前記ハブノードの前記出力エッジをグループ分けし、前記グループの各々において、前記グループの各々に含まれる前記出力エッジの結託度合を判定する、請求項２記載のグラフクラスタリング用プログラム。
【請求項５】
前記グループの各々について判定された結託度合を、前記グループの規模に応じて補正する、請求項４記載のグラフクラスタリング用プログラム。
【請求項６】
前記ハブノードから出力される前記出力エッジの情報と、前記出力エッジの行先であるノードに入るエッジの情報とに基づいて、前記結託度合を判定する、請求項４記載のグラフクラスタリング用プログラム。
【請求項７】
前記グループの各々における前記結託度合の判定は、
前記グループに含まれる前記出力エッジが合流する合流ノードを特定し、
前記出力エッジの各々から前記合流ノードへの到達確率を求め、更にその到達確率の積としての合流確率を求め、
前記合流ノードの各々における合流確率の和としての総合流確率を求め、
前記総合流確率に従い、前記結託度合を計算する、請求項４乃至６のいずれか１項に記載のグラフクラスタリング用プログラム。
【請求項８】
前記グループ分けは、複数の前記出力エッジについて複数通り行い、最も大きい前記結託度合が得られるグループ分けの仕方を採用する、請求項４乃至６のいずれか１項に記載のグラフクラスタリング用プログラム。
【請求項９】
ソフトウエアの設計要素をノードとし、前記設計要素間の関係をエッジとしたグラフから数値化を実施すべきエッジを検出して、前記エッジの各々に対応する数値を計算するステップと、
前記数値に基づき、複数の前記ノードを複数の集合に分類するステップと
を備えたグラフクラスタリング方法。
【請求項１０】
所定の値以上の出力エッジ数を持つ前記ノードをハブノードとし、前記ハブノードから出力される前記エッジを出力エッジとした場合、前記ハブノードから出力される前記出力エッジの各々について前記関連度を計算し、
前記出力エッジの前記関連度に従い、前記ノードを分類する、請求項９記載のグラフクラスタリング方法。
【請求項１１】
前記関連度の計算は、前記出力エッジの行先の情報に基づき実行される、請求項９記載のグラフクラスタリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
以下に記載の実施形態は、グラフクラスタリング用プログラム及びグラフクラスタリング方法に関する。
【背景技術】
【０００２】
ソフトウェアの派生開発や保守を行う上で、既存のソフトウェアを理解することが不可欠である。ソフトウェアの理解のために、ソフトウェアの何らかの構成単位とその間の依存関係をグラフ形式で可視化して、グラフ上の構成単位をいくつかのグループに分類・集約して、規模を縮小する手法が開発されている。この手法は一般にクラスタリングと呼ばれ、クラスタリングを行うことにより、より理解のしやすいグラフを得ることができる。
【０００３】
しかし、単に数学的手法だけでクラスタリングを行うと、個々のグループが意味のあるまとまりになるとは限らない。その場合、そのようなクラスタリングがされたグラフは、ソフトウェアを理解するためのものとして適切とは言えない。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１５６６９７号公報
【特許文献２】国際公開第２００９／１０７４１２号
【特許文献３】特開２０１３−１４８９８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
以下に記載の実施形態は、複数のノードを適切にクラスタリングして、ソフトウエアの全体像を把握することを容易にするグラフクラスタリング装置及びグラフクラスタリング方法を提供するものである。
【課題を解決するための手段】
【０００６】
一の実施形態に係るグラフクラスタリング用プログラムは、ソフトウエアの設計要素をノードとし、前記設計要素間の関係をエッジとしたグラフにおいて、前記エッジ間の関連の度合を示す関連度を数値として計算するステップと、前記エッジ数値化部により得られた関連度に基づき、複数の前記ノードを複数の集合に分類するステップと、をコンピュータにおいて実行可能に構成されている。
また、一の実施形態に係るグラフクラスタリング方法は、ソフトウエアの設計要素をノードとし、前記設計要素間の関係をエッジとしたグラフにおいて、前記エッジ間の関連の度合を示す関連度を数値として計算するステップと、前記エッジ数値化部により得られた関連度に基づき、複数の前記ノードを複数の集合に分類するステップとを備える。
【図面の簡単な説明】
【０００７】
【図１Ａ】第１の実施形態に係るグラフクラスタリング装置の構成の概略を示す機能ブロック図である。
【図１Ｂ】図１Ａのクラスタリング装置の構成を示すブロック図である。
【図２】第１の実施形態に係るグラフクラスタリング方法の概要を示すフローチャートである。
【図３】第１の実施形態に係るグラフクラスタリング方法の概要を示す図である。
【図４Ａ】第１の実施形態に係るエッジ数値化部の動作を示すフローチャートである。
【図４Ｂ】図４Ａのフローチャートの説明を補足する概念図である。
【図５】第１の実施形態に係るグラフの一例を示す図である。
【図６】第１の実施形態に係るエッジ数値化部の動作を示す図である。
【図７】第１の実施形態に係るエッジ数値化部の動作を示す図である。
【図８】第１の実施形態に係るエッジ数値化部の動作を示す図である。
【図９】第１の実施形態に係るエッジ数値化部の動作を示す図である。
【図１０】第１の実施形態に係るエッジ数値化部の動作を示す図である。
【図１１】第２の実施形態に係るグラフクラスタリング装置及びプログラムを説明する概念図である。
【図１２】第３の実施形態に係るグラフクラスタリング装置及びプログラムを説明する概念図である。
【発明を実施するための形態】
【０００８】
以下、図面を参照して実施形態について説明する。実施形態の説明の前に、本実施形態で用いられる各種用語の意味を以下に説明する。
【０００９】
「クラスタリング」とは、ソフトウェアにおける設計要素を例えば「ノード」として表現し、更に「ノード」間のつながりを例えば「エッジ」として表現した設計要素関係グラフ（以下、単に「グラフ」と称することもある）を生成又は取得した後、そのグラフに含まれる複数のノードを、所定の手法に従って分類することをいう。設計要素関係グラフに関しては、後ほど図を用いて例示して説明する。
【００１０】
「設計要素」とは、ソフトウェアを構成する一単位となる要素のことであり、例えばソースコード、データベース、コンポーネント、モジュール、関数、ファイル等を含む。すなわち、ソフトウェアは、設計要素の集合である。
【００１１】
「出力エッジ」とは、あるノードから出て他のノードに向かうエッジのことである。また、「入力エッジ」とは、あるノードに入っていくエッジのことである。
「ハブノード」とは、後述するように、そこから出ていく出力エッジの数が所定数以上であるノードであり、具体的には、閾値ｔが与えられた時、出力エッジ数がｔ以上であるノードをいう。
【００１２】
「終点ノード」とは、ハブノードの出力エッジの先にあるノードである。
【００１３】
ノードの「出力確率」とは、あるノードから延びる出力エッジの数がＮ本である場合、当該出力エッジの数Ｎの逆数（１／Ｎ）で表される。
【００１４】
ノードの「入力確率」とは、あるノードに向かう入力エッジの数がＭ本である場合、当該入力エッジの数Ｍの逆数（１／Ｍ）で表される。
［第１の実施形態］
【００１５】
図１Ａ、図１Ｂ、及び図２を参照して、第１の実施形態に係るグラフクラスタリング装置、プログラム、及びグラフクラスタリング方法の概要について説明する。図１Ａは、本実施形態に係るグラフクラスタリング装置１００の構成を示す機能ブロック図である。図１に示すように、グラフクラスタリング装置１００は、設計要素関係グラフ生成部１０１、エッジ数値化部１０２、設計要素関係グラフ抽象化部１０３を備える。このグラフクラスタリング装置１００は、図１Ｂに示すように、一般的なコンピュータ１１と、コンピュータプログラムを格納した記録媒体１２により実現され得る。すなわち、このグラフクラスタリング装置１００の機能は、コンピュータプログラムの形式で提供されてもよい。また、コンピュータプログラムは、記録媒体１２に格納される代りに、図示しない通信手段によりコンピュータ１１にダウンロードされるものであってもよい。
【００１６】
設計要素関係グラフ生成部１０１は、ソースコード１０４を処理して設計要素関係グラフ１０５を生成するように構成される。なお、設計要素関係グラフ１０５が外部から取得可能な状況においては、この設計要素関係グラフ生成部１０１は省略することも可能である。
【００１７】
エッジ数値化部１０２は、設計要素関係グラフ１０５を処理し、ハブノードから出力される出力エッジに重みづけの数値化を行い、重み付けされた設計要素関係グラフ１０６を得るように構成される。ここでいう「重み付け」とは、出力エッジ同士の関連度を示す指標であり、数値により表される。
【００１８】
設計要素関係グラフ抽象化部１０３は、重み付けされた設計要素関係グラフ１０６を基にクラスタリングを行い、クラスタリングがなされた設計要素関係グラフ１０７を得るように構成される。
【００１９】
図２は、本実施形態に係るグラフクラスタリング装置１００の動作を示すフローチャートである。図３は、図２のフローチャートの内容を補足する概念図である。まず、設計要素関係グラフ生成部１０１は、例えば公知の手法により、ソースコード１０４から設計要素間の関係を抽出して、設計要素関係グラフ１０５を生成する（ステップＳ１１）。
【００２０】
次に、エッジ数値化部１０２は、設計要素関係グラフ１０５の中から所定の閾値以上の出力エッジを有するハブノードＨＵＢを検出する。そして、そのハブノードＨＵＢから出力される出力エッジの重み付けのための計算を行い、数値化する（ステップＳ１２）。これにより重み付けされた設計要素関係グラフ１０６を得る。各出力エッジには、図３に示すように、例えば１．２、１．４、２．０、１．５、１．０、０．８のような数値が重み付けの結果として与えられる。この出力エッジの重み付けの方法の詳細については、後述する。
【００２１】
次に、設計要素関係グラフ抽象化部（分類部）１０３は、エッジ数値化部１０２により算出された出力エッジの重み付けの数値に従い、クラスタリングを行う（ステップＳ１３）。この結果、図３に示すように、クラスタリングを行った設計要素関係グラフ１０７が得られる。換言すれば、設計要素関係グラフ抽象化部１０３は、エッジ数値化部１０２が算出した数値に従い複数のノードを分類し、設計要素関係グラフ１０６を抽象化して、クラスタリングされた設計要素関係グラフ１０７を得る。
【００２２】
このようなクラスタリングがなされた設計要素関係グラフ１０７は、出力エッジ間の関連度に基づいた分類がなされているので、ユーザはソフトウエアの構造を理解し易い。
【００２３】
次に、図４Ａ及び図４Ｂを参照して、本実施形態に係るエッジ数値化部１０２における出力エッジの重み付けの方法について説明する。図４Ａは、エッジ数値化部１０２における動作を示すフローチャートである。また、図４Ｂは、図４Ａのフローチャートの説明を補足する模式図である。
【００２４】
まず、エッジ数値化部１０２は、出力エッジ数が閾値ｔ以上のノードを検出し、その検出されたノードをハブノードと判定する。このとき、各ハブノードをｖｉ（ｉ＝１，２，・・・，ｎ）とし、ハブノードの集合を｛ｖ１，ｖ２，・・・，ｖｎ｝とする（ステップＳ１１１）。閾値ｔは、任意の自然数であり、適宜設定可能な値である。
【００２５】
次に、エッジ数値化部１０２は、ハブノードｖｉの各々から出力する出力エッジｅｊ（ｊ＝１，２，・・・，ｍ）の群を、それらの行き先の情報等に基づいてグループ分けすることで、結託するエッジ群を検出する（ステップＳ１１２）。グループ分けに関しては、それぞれの結託度合が最大となるようなグループ分けが選択される。グループ分けの手法及び結託度合の判定については後述する。
そして、ハブノードｖｉの各々から出力する出力エッジｅｊ（ｊ＝１，２，・・・，）の関係を数値化する（ステップＳ１１３）。出力エッジｅｊの関係を数値化する方法については、後述する。
【００２６】
次に、エッジ数値化部１０２は、ハブノードＨＵＢ、出力エッジｅｊ、及び終点ノードＮＥに関する各種情報を使用して、出力エッジｅｊが表す関係（数値）を調整する（ステップＳ１１４）。この数値の調整の詳細については、後述する。
以上の動作が、検出された全てのハブノードｖｉについて行われる。
【００２７】
図５は、本実施形態における設計要素関係グラフ１０５の一例を示す図である。本実施形態においては、図５に示した設計要素関係グラフ１０５において、ハブノードｖ１を対象として数値化を行う手順について説明する。この図５では、説明の簡単化のため、１つのハブノードｖ１を有するグラフを例として説明するが、多数のハブノードが存在するグラフにおいても、以下の説明と同様の処理を実行することができる。
図５において、ハブノードｖ１から出る６本の出力エッジを、出力エッジｅ１〜ｅ６とする。また、出力エッジｅ１〜ｅ６の各々の先にあるノードをノードＡ〜Ｆとする。ノードＡ〜Ｆからは、更にエッジが出力されており、図５において矩形で示す他のノードに接続されている。
【００２８】
図６は、設計要素関係グラフ１０５において、図４ＡのステップＳ１１２に従い、ハブノードｖ１の出力エッジｅ１〜ｅ６に対しグループ分けを行った結果を示す模式図である。図６の例においては、出力エッジｅ１〜ｅ６は３つのグループに分けられている。ここでは、３つのグループを、それぞれ第１グループ、第２グループ、第３グループと称する。
【００２９】
後述するように、本実施形態における出力エッジｅｊのグループ分けは、出力エッジｅｊの組み合わせすべてについて行われる。図６の例は、複数通りのグループ分けの方法のうちの１つを図示したものである。そして、その全てのグループ分けの各々について、各グループに含まれる出力エッジの結託度合を計算して、最も結託度合の高いグループ分け（組み合わせ）を最終的に採用する。結託度合の判定は、後述するように、出力エッジｅ１〜ｅ６の行先に位置する各種ノードＮｇの状態により判定される。
同じグループに含まれる出力エッジｅｊを、結託するエッジ群と呼ぶ。このようなグループ分けは、一例として以下の手順（ステップ１〜ステップ４）で行われる。
【００３０】
（ステップ１）
出力エッジｅｊ（ｊ＝１，２・・・）のグループ分けの仕方を、出力エッジｅｊの全てのグループ分けの仕方（組み合わせ）の中から一つ選び、グループ分けを行う。出力エッジｅｊのグループ分けの仕方の数は、出力エッジのｅｊの数、グループの数によって異なる。図６は、そのグループ分けの仕方のうちの１つである。
（ステップ２）
各グループに対して結託度合を計算する。
（ステップ３）
各グループについて結託度合が計算されたら、その和をとる。
（ステップ４）
すべての出力エッジｅｊのグループ分けの仕方について、上記ステップ２、３による結託度合及び和の数値化を行い、結託度合の和が最大となる組み合わせを最適なグループ分けとして採用する。
ステップ２について更に詳細に説明する。ステップ２の結託度合の計算は、具体的には、次のステップ２−１〜２−４により行われる。
（ステップ２−１）
同一グループ内の全ての出力エッジから先を辿って合流するノード（合流ノード）を特定する。合流ノードは、上述した終点ノードの一態様である。
例えば、図７に示す例では、合流ノードＭ１とＭ２が特定されたものとする。
（ステップ２−２）
出力エッジｅｊ（ｊ＝１、２・・・）の合流ノードＭ１、Ｍ２への到達確率の積を求め、この到達確率の積を合流確率として算出する。ここで、「到達確率」とは、ある出力エッジｅｊが、注目ノードに到達する確率のことであり、この確率は、途中の経路における経由ノードの有無や経由ノードにおける出力エッジの数等によって変化する。合流確率は、結託するエッジ群を見つけるための指標として用いられる。
（ステップ２−３）
合流ノードＭ１、Ｍ２の各々における合流確率の和を取り、この和を総合流確率として算出する。
（ステップ２−４）
総合流確率をグループ規模補正値で補正し、結託度合を算出する。
【００３１】
図８を参照して、ステップ２−２での到達確率の積の計算方法について、具体例を用いて説明する。ここでは、一例として、合流ノードＭ１に着目し、ハブノードｖ１からノードＡ〜Ｃに向かう出力エッジｅ１〜ｅ３を１つの計算対象グループとした場合を説明する。
【００３２】
合流ノードＭ１において、出力エッジｅ１〜ｅ３の各々からの到達確率の積を求める。出力エッジｅ１〜ｅ３の各々から合流ノードＭ１への到達確率は、出力エッジｅ１〜ｅ３の各々が入力されるノードＡ〜Ｃにおける出力エッジの数によって決定される。また、ノードＡ〜Ｃと合流ノードＭ１との間に別のノード（経由ノードＰ）がある場合、出力エッジｅ１〜ｅ３の各々から合流ノードＭ１又はＭ２への到達確率は、出力エッジｅ１〜ｅ３の各々が入力されるノードＡ〜Ｃにおける出力エッジの数と、当該経由ノードにおける出力エッジの数との積により決定される。
【００３３】
図示の例の場合、ノードＡから合流ノードＭ１への到達確率は、ノードＡの出力エッジ数が２であるので、到達確率は１／２である。
また、ノードＢから合流ノードＭ１への到達確率は、ノードＢの出力エッジ数（２）の逆数（１／２）と経由ノードＰの出力エッジ数（４）の逆数（１／４）との積であるので、１／２×１／４＝１／８と算出される。
【００３４】
同様に、ノードＣから合流ノードＭ１への到達確率は、ノードＣの出力エッジ数（２）の逆数（１／２）と、経由ノードＰの出力エッジ数（４）の逆数（１／４）との積であるので、１／２×１／４＝１／８と算出される。
よって、合流ノードＭ１における出力エッジｅ１〜ｅ３の到達確率の積（合流確率）は、
【数１】
2017187980.tif 000003
と算出され得る。
【００３５】
図７の合流ノードＭ２においても同様にして合流確率を計算すると、ノードＡ〜Ｃから合流ノードＭ２への到達確率は各々１／２であり、両者の間に経由ノードは存在しないため、合流確率は１／２×１／２×１／２＝１／８と算出され得る。
【００３６】
次に、ステップ２−３において、各合流ノードＭ１及びＭ２における合流確率の和を求め、総合流確率を得る。上記の例では、合流ノードＭ１及びＭ２の合流確率の和である総合流確率は、
【数２】
2017187980.tif 000004
と算出され得る。
【００３７】
次に、ステップ２−４において、総合流確率をグループ規模補正値で補正する方法の詳細につき、以下に説明する。グループ規模補正値は、２を計算対象グループに含まれるノードの数から１を減じた値により乗じた値として算出され得る。このグループ規模補正値を、総合流確率に掛けることで補正が行われる。すなわち、このステップ２−４では、計算された総合流確率（結託度合）を、各グループの規模を反映したグループ規模補正値により補正するものである。
具体的に、上記の例においては、
【数３】
2017187980.tif 000005
となり、この値がノードＡ、Ｂ、Ｃの結託度合を表す数値となる。この補正の方法はあくまでも一例にすぎず、補正方法は適宜変更可能である。上記の例では、計算対象グループに含まれるノードの数が多いほど、結託度合を高く見積もる必要があるとの観点から［数３］のような計算式を用いているが、同様の趣旨の下、他の計算式を採用可能であることは言うまでもない。
【００３８】
図７及び図８においては、出力エッジｅ１〜ｅ３（ノードＡ〜Ｃ）を１つのグループと仮定した場合の結託度合を計算する方法について説明したが、上記ステップ１〜４をすべてのグループ分けのパターンについて行い、最も結託度合の高いグループ分けの仕方を採用することで、結果として図６に示すようなグループ分けができる。
【００３９】
なお、図４ＡのステップＳ１１２において結託するエッジ群を検出する際、全てのグループ分けのパターンについて結託度合を計算する方法について述べたが、例えば、あるグループ分けの計算の過程において、明らかに結託度合が小さいと判断された場合には計算を中断し、他のパターンについて計算を開始するよう構成されていてもよい。本実施形態においては、全てのグループ分けのパターンについて結託度合を計算することが好ましいが、上述のように、一部の計算を省略しても構わない。例えば、グラフ中で位置が大きく離れている出力エッジ同士は、結託度が明らかに小さいものとして、同一のグループに入れたグループ分けを行わないようにすることも可能である。
【００４０】
このようにして出力エッジｅｊのグループ分けが実行されると、各出力エッジの数値化（図４ＡのＳ１１３）が実行される。図９は、図４ＡのステップＳ１１３において、ハブノードＨＵＢと、ノードＡ〜Ｆとの関係（エッジ）の数値化を行った結果の一例を示す図である。図９に示す例においては、出力エッジｅ１〜ｅ６は、ハブノードＨＵＢから出て、それぞれノードＡ〜Ｆに到達する。このため、この図示の例において出力エッジｅ１〜ｅ６に与えられる数値は、全て１／１８である。
【００４１】
図１０は、図４ＡのステップＳ１１４において、ハブノードＨＵＢと、終点ノードＡ〜Ｆとの関係を示す数値を調整（補正）する方法を示す図である。一例として、図１０に示すように、出力エッジｅ１〜ｅ６の数値の各々に、当該出力エッジが属するグループの要素数（グループに含まれる出力エッジの数）を掛けることで、数値を調整することができる。第１グループにおいては、要素数は１であるので、第１グループに含まれる出力エッジｅ１の重みは、１／１８×１＝１／１８≒０．０６である。また、第２グループにおいては、要素数は３であるので、第２グループに含まれる出力エッジｅ２〜ｅ４の重みは、１／１８×３＝１／６≒０．１７である。第３グループにおいては、要素数は２であるので、第３グループに含まれる出力エッジｅ５〜ｅ６の重みは、１／１８×２＝１／９≒０．１１である。
なお、この図１０の例では、各グループの要素数に基づく補正を行ったが、補正の方法はこれだけに限定されない。例えば、出力エッジｅ１〜ｅ６が向かうノードにおける入力エッジの数なども考慮して補正を行うことも可能である。
【００４２】
以上の調整により、ハブノードＨＵＢの出力エッジｅ１〜ｅ６に対する重み付けの数値化が完了する。この例ではハブノードＨＵＢと最も関係の強いグループは第２グループであることが分かる。この調整の結果に従って、重み付けがなされた設計要素関係グラフ１０６が得られる。設計要素関係グラフ抽象化部１０３は、重み付けがなされた設計要素関係グラフ１０６を基にクラスタリングを行う。このとき、グラフ数値化部１０２における関係の数値化により、ハブノードＨＵＢを第２グループと同じクラスタに含めてクラスタリングを行うことができる。このように、関係の強さを数値化して、ノード間で数値を比較することで、ハブノードと関係の強いノードとを同じクラスタに分けることができるようになる。
【００４３】
このように、第１の実施形態に係るグラフクラスタリング装置によれば、グラフにおける各ノード間の関係の強さを、ソフトウェアの構造ならではの特徴を考慮して数値化し、クラスタリングすることで、各ノードが意味的に関係の深いノードと同じクラスタに分類されるようになるので、意味のあるまとまりを得ることができる。また、本実施形態を適用することで改善されたグラフにより、ソフトウェアの全体像の把握が容易になり、ユーザのソフトウエア構造の一層正確な理解を助けることが可能になる。
【００４４】
［第２の実施形態］
次に、図１１を参照して、第２の実施形態に係るグラフクラスタリング装置、プログラム、及びグラフクラスタリング方法の概要について説明する。
この第２の実施形態の装置の全体構成、及び基本的な動作手順は、第１の実施形態（図１〜図４Ｂ）と同様である。ただし、この実施形態では、ハブノードＨＵＢと終点ノードＸとの関係の強さＷを判断し、その判断結果に従って重み付けの数値を変更する点において、第１の実施形態と異なっている。
【００４５】
図１１に示すパターン１においては、終点ノードＸ１の入力エッジの数によりハブノードＨＵＢ１〜４と終点ノードＸとの関係の強さＷを判断する場合を示している。パターン１の左側において、終点ノードＸに入力される入力エッジ数は４である。一方、パターン１の右側において、終点ノードＸに入力される入力エッジ数は１である。このとき、ハブノードＨＵＢと終点ノードＸとの関係の強さは、
【数４】
2017187980.tif 000006
で表わされ、パターン１の左側の図においては関係の強さＷ１は１／４、右側においては関係の強さＷ２は１となる。これらの大小関係を比較すると、パターン１においては、左側の図に比べ、右側の図における方が、ハブノードＨＵＢ１と終点ノードＸ１との関係が強い事になる。この関係の強さＷが、出力エッジの数値化において反映される。
【００４６】
図１１のパターン２においては、ハブノードＨＵＢ１の出力エッジの数によりハブノードＨＵＢ１と終点ノードＸ１〜Ｘ４との関係の強さを判断する場合を示している。パターン２の左側において、ハブノードＨＵＢ１の出力エッジ数は４であり、パターン２の右側において、ハブノードＨＵＢ１の出力エッジ数は１である。このとき、ハブノードＨＵＢ１と終点ノードＸ１〜Ｘ４との関係の強さは、
【数５】
2017187980.tif 000007
で表され、左側の図においては１／４、右側の図においては１となる。これらの大小関係を比較すると、値の大きい右側の例において、ハブノードＨＵＢ１と終点ノードＸ１との関係が強い事になる。
【００４７】
このように、この第２の実施形態では、ハブノードと終点ノードの関係の強さが、終点ノードの入力エッジの数、ハブノードの出力エッジの数で決まり、この関係の強さが出力エッジの数値化に反映される。より具体的には、関係の強さは、上記の終点ノードＸの入力エッジ数の逆数と、ハブノードの出力エッジ数の逆数との積で表され、下記の数式６で定められる。
【数６】
2017187980.tif 000008
【００４８】
［第３の実施形態］
次に、図１２を参照して、第３の実施形態に係るグラフクラスタリング装置、プログラム、及びグラフクラスタリング方法の概要について説明する。
この第３の実施形態の装置の全体構成、及び基本的な動作手順は、第１の実施形態（図１〜図４Ｂ）と同様である。ただし、この第３の実施形態では、ハブノードＨＵＢと終点ノードＸとの関係の強さＷを判断し、その判断結果に従って重み付けの数値を変更する点において、第１の実施形態と異なっている。
【００４９】
図１２は、ハブノードと終点ノードの関係の数値化の具体例を示している。図１２に示すように、ハブノードＨＵＢと終点ノードＡ〜Ｃ、Ｘとが出力エッジにより接続され、ハブノードＨＵＢ’と終点ノードＤ、Ｅ、Ｘとが出力エッジにより接続されている。すなわち、終点ノードＸは、ハブノードＨＵＢ、ＨＵＢ’と接続されている。
図１２の例において、ハブノードＨＵＢの出力エッジ数は４であるので、ハブノードＨＵＢと終点ノードとの間の出力エッジの重みは全て１／４である。また、ハブノードＨＵＢ’の出力エッジ数は３であるので、これら出力エッジの重みはすべて１／３である。
【００５０】
終点ノードＸは、ハブノードＨＵＢだけでなく、他のハブノードＨＵＢ’とも接続されている。このため、ハブノードＨＵＢ’からの出力エッジの重みも終点ノードＸに与えられる。したがって、終点ノードＸは、終点ノードＡ〜Ｃと比較して、ハブノードＨＵＢとの関係がより弱いことになる。同様に、終点ノードＸは、終点ノードＤ、Ｅと比較して、ハブノードＨＵＢ’との関係がより弱いことになる。第３の実施形態では、このような重みの関係を出力エッジの数値化に反映させることができる。
【００５１】
以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５２】
１００        グラフクラスタリング装置
１０１        設計要素関係グラフ生成部
１０２        エッジ数値化部
１０３        設計要素関係グラフ抽象化部
１０４        ソースコード
１０５        設計要素関係グラフ
１０６        重み付けされた設計要素関係グラフ
１０７        設計要素関係グラフ
【図１Ａ】
2017187980.tif 000009
【図１Ｂ】
2017187980.tif 000010
【図２】
2017187980.tif 000011
【図３】
2017187980.tif 000012
【図４Ａ】
2017187980.tif 000013
【図４Ｂ】
2017187980.tif 000014
【図５】
2017187980.tif 000015
【図６】
2017187980.tif 000016
【図７】
2017187980.tif 000017
【図８】
2017187980.tif 000018
【図９】
2017187980.tif 000019
【図１０】
2017187980.tif 000020
【図１１】
2017187980.tif 000021
【図１２】
2017187980.tif 000022