(57)【要約】【課題】モジュール間の依存関係の複雑さを引き起こしている多対多関係モジュール群を把握する（指摘する）技術を提供する。【解決手段】本装置は設計情報記憶部と多対多関係モジュール群情報生成部を有する。設計情報記憶手段は、ソフトウエアに含まれるすべてのモジュールを記録したモジュール記憶表と、前記モジュールのうち、依存関係を有する始点モジュールと終点モジュールの組を記録した依存関係記憶表とを記憶する。多対多関係モジュール群情報生成手段は、前記表を参照して複数のモジュールを有する第１のモジュール群に含まれるモジュールのそれぞれが自己を始点モジュールとし、複数のモジュールを有する第２のモジュール群に含まれるモジュールのすべてを終点モジュールとする依存関係を有する場合、この始点モジュール群と終点モジュール群とを対応付けた多対多関係モジュール群記憶表を生成する。【選択図】図１３
2014109949.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウエアに含まれるすべてのモジュールを記録した第１の情報と、前記モジュールのうち、依存関係を有する始点モジュールと終点モジュールの組を記録した第２の情報とを記憶する記憶手段と、
前記第１の情報及び第２の情報を参照して、複数のモジュールを有する第１のモジュール群と複数のモジュールを有する第２のモジュール群において、前記第１のモジュール群に含まれるモジュールのそれぞれが自己を始点モジュールとし、前記第２のモジュール群に含まれるモジュールのすべてを終点モジュールとする依存関係を有する場合、前記第１のモジュール群を始点モジュール群とし、前記第２のモジュール群を終点モジュール群とし、この始点モジュール群と終点モジュール群とを対応付けて記憶する情報である多対多関係モジュール群情報を生成する生成手段と
を有する、ソフトウエアの複雑度測定装置。
【請求項２】
前記生成手段は、前記第１の情報及び第２の情報から、複数の他のモジュールを終点モジュールとする依存関係を有する第１のモジュールが存在するか否かを調べ、第１のモジュールが存在する場合、前記第１のモジュールについて終点モジュールとなっているモジュールのすべてを自己の終点モジュールとする、第１のモジュールとは別のモジュールである第２のモジュールが存在するか否かを調べ、第２のモジュールが一つ以上存在する場合は、前記第１のモジュール及びすべての第２のモジュールを始点モジュール群とし、前記終点モジュールを終点モジュール群とし、この始点モジュール群と終点モジュール群とを対応付けて記憶する情報である前記第３の情報を生成する、
請求項１に記載のソフトウエアの複雑度測定装置。
【請求項３】
上記始点モジュール群のモジュールの数と、上記終点モジュール群のモジュールの数から値を算出し、この値を多対多関係モジュール群の第１の指標の値として記憶する算出手段をさらに有する、請求項１又は請求項２に記載のソフトウエアの複雑度測定装置。
【請求項４】
前記算出手段は、このソフトウエアに含まれるすべての多対多関係モジュール群の多対多関係複雑度を合計した値を算出し、この値をこのソフトウエアの第２の指標の値として記憶する、
請求項３に記載のソフトウエアの複雑度測定装置。
【請求項５】
前記算出手段は、ソフトウエアに含まれるすべての多対多関係モジュール群のモジュール間の依存関係の総数を、このソフトウエアに含まれるすべての多対多関係モジュール群に含まれるモジュールの総数で割った値を算出し、この値をこのソフトウエアの第３の指標の値として記憶する
請求項３又は請求項４に記載のソフトウエアの複雑度測定装置。
【請求項６】
前記算出手段は、ソフトウエアに含まれるすべての多対多関係モジュール群のモジュールの総数を、そのソフトウエアのモジュールの総数で割った値を算出し、この値をこのソフトウエアの第４の指標の値として記憶する、
請求項３から請求項５のいずれかに記載のソフトウエアの複雑度測定装置。
【請求項７】
前記算出手段は、そのソフトウエアに含まれるすべての多対多関係モジュール群のモジュール間依存関係の総数を、このソフトウエア全体の依存関係の総数で割った値を算出し、この値をこのソフトウエアの第５の指標の値として記憶する、
請求項３から請求項６のいずれかに記載のソフトウエアの複雑度測定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載の実施の形態は、ソフトウエアの複雑度測定装置に関する。
【背景技術】
【０００２】
近年のソフトウエアの巨大化、複雑化は著しく、ソフトウエアに含まれるモジュール数も膨大となり、またモジュール間の依存関係も著しく複雑化してきている。しかし、モジュール間の依存関係がスパゲティ状に複雑になるほど、ソフトウエアの保守性は低くなる。
【０００３】
そこで、モジュール間の依存関係の複雑さを表す指標によって、保守性に問題のあるモジュール構造を定量的に判断し、改善につなげることが試みられてきた。
モジュール間の依存関係の複雑さを表す従来の一般的な指標として、以下の指標が提案されている。
【０００４】
Inter-Module Complexity（Henry-Kafura）は、モジュールのfan-in数とfan-out数に着目し、(fan-in * fan-out)^2 をモジュールの複雑さとして評価する指標である。
【０００５】
Cyclomatic complexity（McCabe）は、本来はプログラムの制御構造グラフの複雑さを表す指標だが、モジュールをノード、モジュール間の依存関係をエッジでグラフ表現することで、モジュール間の依存関係の複雑さを表すことができる。
【０００６】
モジュール結合度は、二つのモジュール間のデータの受け渡し方法や受け渡しデータの構造、種類により、二つのモジュール間の関連の度合いを表す。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−３２５１００号公報
【特許文献２】特開２０００−２１５０４５号公報
【特許文献３】特開２００８−０８３９１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記のモジュール間の依存関係の複雑さを表す技術には以下の問題点がある。
上記の「Inter-Module Complexity（Henry-Kafura）」は、個々のモジュールにつながる依存関係の多さは判断できるが、依存関係の複雑さを引き起こしている特定のモジュール群を指摘することは難しい。
上記の「Cyclomatic complexity（McCabe）」は、全モジュール間の依存関係が総合的に複雑かどうかを判断できるが、複雑さを引き起こしている特定のモジュール群を指摘することは難しい。
「モジュール結合度」は、二つのモジュール間の依存関係が複雑かどうかは判断できるが、複雑さを引き起こしている特定のモジュール群を指摘することは難しい。
【０００９】
すなわち、既存の指標では、依存関係の複雑さを引き起こしている特定のモジュール群（モジュールの組み合わせ）とその複雑さ度合いを、ピンポイントに指摘して数値化することが難しく改善につなげにくいという課題があった。
【００１０】
この発明は、モジュール間の依存関係の複雑さを引き起こしている多対多関係モジュール群を把握する（指摘する）技術を提供することを目的とする。
また、この発明は、多対多関係モジュール群について複雑さの度合いを、数値によって把握可能とする技術を提供することを別の目的とする。
【課題を解決するための手段】
【００１１】
以下に説明する実施の形態のソフトウエアの複雑度測定装置は記憶手段と、生成手段を有する。記憶手段は、ソフトウエアに含まれるすべてのモジュールを記録した第１の情報と、前記モジュールのうち、依存関係を有する始点モジュールと終点モジュールの組を記録した第２の情報とを記憶する。生成手段は、前記第１の情報及び第２の情報を参照して、複数のモジュールを有する第１のモジュール群と複数のモジュールを有する第２のモジュール群において、前記第１のモジュール群に含まれるモジュールのそれぞれが自己を始点モジュールとし、前記第２のモジュール群に含まれるモジュールのすべてを終点モジュールとする依存関係を有する場合、前記第１のモジュール群を始点モジュール群とし、前記第２のモジュール群を終点モジュール群とし、この始点モジュール群と終点モジュール群とを対応付けて記憶する情報である第３の情報を生成する。
【００１２】
また、この生成手段は、前記第１の情報及び第２の情報から、複数の他のモジュールを終点モジュールとする依存関係を有する第１のモジュールが存在するか否かを調べ、第１のモジュールが存在する場合、前記第１のモジュールについて終点モジュールとなっているモジュールのすべてを自己の終点モジュールとする、第１のモジュールとは別のモジュールである第２のモジュールが存在するか否かを調べ、第２のモジュールが一つ以上存在する場合は、前記第１のモジュール及びすべての第２のモジュールを始点モジュール群とし、前記終点モジュールを終点モジュール群とし、この始点モジュール群と終点モジュール群とを対応付けて記憶する情報である前記第３の情報を生成する。
【図面の簡単な説明】
【００１３】
【図１】モジュールＸの関数がモジュールＹの関数を呼び出す関係にあることを示す図
【図２】図１のモジュールＸのソースコードの一部を示す図
【図３】図１のモジュールＹのソースコードの一部を示す図
【図４】モジュールＸの関数がモジュールＹの変数を呼び出す関係にあることを示す図
【図５】図４のモジュールＸのソースコードの一部を示す図
【図６】図４のモジュールＹのソースコードの一部を示す図
【図７】多対多関係モジュール群の例を示す図
【図８】多対多関係モジュール群が存在する場合のソフトウエアの例を示す図
【図９】多対多関係モジュール群が存在しない場合のソフトウエアの例を示す図
【図１０】多対多関係モジュール群が存在しない場合のソフトウエアの別の例を示す図
【図１１】多対多関係モジュール群を有するソフトウエアの例を示す図
【図１２】ソフトウエアの構成例を示す図
【図１３】複雑度測定装置の構成例を示すブロック図
【図１４Ａ】ソフトウエアの一例であって、当該ソフトウエアに含まれるモジュールとモジュール菅の依存関係を矢印で示した図
【図１４Ｂ】ソフトウエアＳＷ７について生成されたモジュール記憶表の例を示す図
【図１５】依存関係記憶表の例を示す図
【図１６】多対多関係モジュール群記憶表を示す図
【図１７】本実施形態における指標算出部の構成例を示す図
【図１８】複雑度測定装置１の主たる動作である複雑度測定処理の一例を示すフローチャート
【図１９】対多関係モジュール群情報生成処理の例を示したフローチャート
【図２０】図１９に続く対多関係モジュール群情報生成処理の例を示したフローチャート
【図２１】多対多関係複雑度算出処理の例を示すフローチャート
【図２２】全多対多関係複雑度算出処理の例を示すフローチャート
【図２３】多対多関係強度算出処理の例を示すフローチャート
【図２４】多対多関係モジュール率、多対多関係依存率算出処理の例を示すフローチャート
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、この発明の実施の形態にかかる、ソフトウエアの複雑度測定装置を詳細に説明する。
【００１５】
[０．定義]
本明細書中で使用する用語の定義を以下に掲げる。
【００１６】
[０．１．モジュール]
「モジュール」とは、関数や変数といったソフトウエアの構成要素のうち、関係があると思われる構成要素をまとめたものをいう。なお、関係があると思われる構成要素をまとめたものであれば、どのようなものでも本明細書でいう「モジュール」に相当し、例えばファイル、クラス、オブジェクトなども「モジュール」に含まれる概念である。
【００１７】
[０．２．依存関係]
「依存関係」とは、あるモジュールに含まれる関数が、別モジュールに含まれる関数を呼び出したり、別モジュールに含まれる変数を読み書きたりする関係にあることをいう。
【００１８】
以下に、依存関係にあるモジュールＸとモジュールＹの二つのタイプを示す。
（１）タイプ1：モジュールＸの関数がモジュールＹの関数を呼び出す
図１は、モジュールＸの関数がモジュールＹの関数を呼び出す関係にあることを示す図である。また、このモジュールＸのソースコードの一部を図２に示し、モジュールＹのソースコードの一部を図３に示す。
【００１９】
図１から図３に示すように、モジュールＸ内の関数「funcA(void)」は、内部にモジュールＹに含まれる関数「funcB()」の呼び出しが記述されている。関数を呼び出す側のモジュールを始点モジュールと呼び、呼び出される関数を含むモジュールを終点モジュールと呼ぶ。図１の例では、モジュールＸとモジュールＹは、モジュールＸを始点モジュールとし、モジュールＹを終点モジュールとする依存関係を有する。なお、本明細書中の図面においては、依存関係にあるモジュールを矢印線で接続することで表現する。始点モジュールは矢印の後端に接した四角枠、終点モジュールは矢印の先端に接した四角枠で図示する。
【００２０】
（２）タイプ２：モジュールＸの関数がモジュールＹの変数を呼び出す
図４は、モジュールＸの関数がモジュールＹの変数を呼び出す関係にあることを示す図である。また、このモジュールＸのソースコードの一部を図５に示し、モジュールＹのソースコードの一部を図６に示す。
【００２１】
図４から図６に示すように、モジュールＸ内の関数「funcA(void)」は、内部にモジュールＹに含まれる変数「verC」を参照することが記述されている。変数を参照する側のモジュールを始点モジュールと呼び、参照される変数を含むモジュールを終点モジュールと呼ぶ。図４の例では、モジュールＸとモジュールＹは、モジュールＸを始点モジュールとし、モジュールＹを終点モジュールとする依存関係を有する。図示の方法については、上記（１）の場合と同様である。
【００２２】
[０．３．保守性]
「保守性」とは、保守作業（変更時の内容理解、修正、テストなど）に必要な努力の度合いをいう。保守性が高いソフトウエアは保守作業に必要な努力（工数）が少なく、保守性が低いソフトウエアは保守作業に必要な努力（工数）が多い。
【００２３】
[１．多対多関係モジュール群]
本実施の形態が発見する対象の一つである「多対多関係モジュール群」について説明する。多対多関係モジュール群は、依存関係の複雑さを引き起こしているモジュール群と捉えることができる。
【００２４】
[１．１．多対多関係モジュール群の例]
図７に、多対多関係モジュール群の例を示す。図７に示す例において、ソフトウエアＳＷ１は、モジュールＸ、Ｙ及びＡ、Ｂ、Ｃ、Ｄを含んでいる。
【００２５】
モジュールＸ、Ｙ及びＡ、Ｂ、Ｃ、Ｄの依存関係は以下のとおりである。モジュールＸは自己を始点モジュールとし、モジュールＡ、Ｄを終点モジュールとする依存関係を有する。モジュールＡは自己を始点モジュールとし、モジュールＢ、Ｃを終点モジュールとする依存関係を有する。モジュールＤは自己を始点モジュールとし、モジュールＢ、Ｃを終点モジュールとする依存関係を有する。モジュールＢは自己を始点モジュールとし、モジュールＹを終点モジュールとする依存関係を有する。モジュールＣは自己を始点モジュールとし、モジュールＹを終点モジュールとする依存関係を有する。モジュールＹは自己を始点モジュールとし他のモジュールを終点モジュールとする依存関係は有さない。
【００２６】
この図７に示す例において、モジュールＡについて調べると、モジュールＡを始点モジュールとし、２個以上の他のモジュール（具体的にはモジュールＢ、Ｃ）を終点モジュールとする依存関係が存在するか否かを調べる。この依存関係ではモジュールＢ、Ｃが終点モジュールとなっている。
【００２７】
次に、終点モジュールとなった２個以上のモジュール（この例ではモジュールＢ、Ｃ）のすべてを終点モジュールとする依存関係を有する別のモジュールが存在するか否かを調べる。この例ではモジュールＤが、終点モジュールとなった２個以上のモジュールＢ、Ｃのすべてを終点モジュールとする依存関係を有する別のモジュールである。
【００２８】
このようにして見つけられたモジュールの集合であるモジュール群（Ａ、Ｂ、Ｃ、Ｄ）を多対多関係モジュール群とする。
【００２９】
なお、上記はモジュールＡについて多対多関係モジュール群の判定例であるが、他のモジュールのそれぞれについても同様に多対多関係モジュール群の判定を行う。ソフトウエアＳＷ１内に複数の多対多関係モジュール群が存在する場合は、それぞれの多対多関係モジュール群が発見される。
【００３０】
多対多関係モジュール群が存在する場合、存在しない場合と比較して、モジュール間の依存関係はより複雑でわかりにくい傾向にある。図８に多対多関係モジュール群が存在する場合のソフトウエアの例を示す。図８に示す例において、ソフトウエアＳＷ２は、モジュールＸ、Ｙ、Ｚ及びＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈを含んでいる。
【００３１】
モジュールＸ、Ｙ、Ｚ及びＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈの依存関係は以下のとおりである。モジュールＸは自己を始点モジュールとし、モジュールＡ、Ｂ、Ｃ、Ｄを終点モジュールとする依存関係を有する。モジュールＡは自己を始点モジュールとし、モジュールＥ、Ｆ、Ｇを終点モジュールとする依存関係を有する。モジュールＢは自己を始点モジュールとし、モジュールＥ、Ｆ、Ｇを終点モジュールとする依存関係を有する。モジュールＣは自己を始点モジュールとし、モジュールＥ、Ｆ、Ｇを終点モジュールとする依存関係を有する。モジュールＤは自己を始点モジュールとし、モジュールＨを終点モジュールとする依存関係を有する。
【００３２】
モジュールＥは自己を始点モジュールとし、モジュールＹを終点モジュールとする依存関係を有する。モジュールＦは自己を始点モジュールとし、モジュールＹを終点モジュールとする依存関係を有する。モジュールＧは自己を始点モジュールとし、モジュールＺを終点モジュールとする依存関係を有する。モジュールＨは自己を始点モジュールとし、モジュールＺを終点モジュールとする依存関係を有する。
モジュールＹ、Ｚは自己を始点モジュールとし他のモジュールを終点モジュールとする依存関係は有さない。
【００３３】
図８に示すソフトウエアＳＷ２には、モジュールＡ、Ｂ、Ｃ、Ｅ、Ｆ、Ｇからなる多対多関係モジュール群が存在する。これ以外の他の多対多関係モジュール群は存在しない。
【００３４】
次に、図９に多対多関係モジュール群が存在しない場合のソフトウエアの例を示す。図９に示す例において、ソフトウエアＳＷ３は、モジュールＸ、Ｙ及びＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆを含んでいる。
【００３５】
モジュールＸ、Ｙ及びＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆの依存関係は以下のとおりである。モジュールＸは自己を始点モジュールとし、モジュールＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆを終点モジュールとする依存関係を有する。モジュールＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆはそれぞれ、自己を始点モジュールとし、モジュールＹを終点モジュールとする依存関係を有する。モジュールＹを、自己を始点モジュールとし他のモジュールを終点モジュールとする依存関係は有さない。
図９に示すソフトウエアＳＷ３には、多対多関係モジュール群は一つも存在しない。
【００３６】
図１０に多対多関係モジュール群が存在しない場合のソフトウエアの別の例を示す。図１０に示す例において、ソフトウエアＳＷ４は、モジュールＸ及びＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈを含んでいる。モジュールＸは自己を始点モジュールとし、モジュールＡ、Ｂを終点モジュールとする依存関係を有する。モジュールＡは自己を始点モジュールとし、モジュールＣ、Ｄ、Ｅを終点モジュールとする依存関係を有する。モジュールＢは自己を始点モジュールとし、モジュールＦ、Ｇ、Ｈを終点モジュールとする依存関係を有する。モジュールＣ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈのそれぞれは、自己を始点モジュールとし他のモジュールを終点モジュールとする依存関係は有さない。
図１０に示すソフトウエアＳＷ４には、多対多関係モジュール群は一つも存在しない。
【００３７】
[１．２．多対多関係モジュール群の定義]
多対多関係モジュール群の定義は以下のとおりである。
ｎ個のモジュールを持つ集合Ｘと、ｍ個のモジュールを持つ集合Ｙを考える。ただし、ｎ>=ｋ１、ｍ>=ｋ２とし、集合Ｘと集合Ｙのモジュールに重複はないものとする（以降では、ｋ１=ｋ２=２の場合を考える）。ｘを集合Ｘに属するモジュールとし、ｙを集合Ｙに属するモジュールとすると、ｘ∈Ｘ、ｙ∈Ｙのすべての組み合わせ（x、y）について、x→yの依存関係が存在するとき、集合{Ｘ、Ｙ}はｎ対ｍの多対多関係モジュール群であると定義する。
【００３８】
図１１に、多対多関係モジュール群を有するソフトウエアの例を示す。このソフトウエアＳＷ５は、モジュールＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈ、Ｉ、Ｊを有する。モジュールＡは自己を始点モジュールとし、モジュールＢ、Ｃ、Ｄを終点モジュールとする依存関係を有する。モジュールＢは自己を始点モジュールとし、モジュールＥ、Ｆ、Ｇを終点モジュールとする依存関係を有する。モジュールＣは自己を始点モジュールとし、モジュールＥ、Ｆ、Ｇを終点モジュールとする依存関係を有する。モジュールＤは自己を始点モジュールとし、モジュールＨを終点モジュールとする依存関係を有する。モジュールＥは自己を始点モジュールとし、モジュールＩを終点モジュールとする依存関係を有する。モジュールＦは自己を始点モジュールとし、モジュールＩを終点モジュールとする依存関係を有する。モジュールＧは自己を始点モジュールとし、モジュールＩ、Ｊを終点モジュールとする依存関係を有する。モジュールＨは自己を始点モジュールとし、モジュールＪを終点モジュールとする依存関係を有する。
【００３９】
集合ｎはモジュールＢ、Ｃを有する集合であり、集合ｍはモジュールＥ、Ｆ、Ｇを有する集合である。上述の多対多関係モジュールの定義を図１１に示すソフトウエアＳＷ５に当てはめると、ｎ={Ｂ、Ｃ}、ｍ={Ｅ、Ｆ、Ｇ}について、多対多関係モジュール群{ｎ、ｍ} = {{Ｂ、Ｃ}、 {Ｅ、Ｆ、Ｇ}}は、ｘ∈ｍ、ｙ∈ｎのすべての組み合わせ（x、 y）についてｘ→ｙの依存関係が存在するので、{ｎ、ｍ} = {{Ｂ、Ｃ}、 {Ｅ、Ｆ、Ｇ}}は２対３の多対多関係モジュール群である。
【００４０】
[１．３．複雑さを数値化する指標]
多対多関係モジュール群により生ずる複雑さを数値化する指標として、以下の指標を定めた。
【００４１】
[１．３．１．多対多関係複雑度] 
「多対多関係複雑度」は、多対多関係モジュール群が引き起こす複雑さを数値化する指標である。多対多関係複雑度は本実施の形態の第１の指標に相当する。
【００４２】
「多対多関係複雑度」は、ｎ対ｍの多対多関係モジュール群の多対多関係複雑度をIndex_1とすると、Index_1=ｎ×ｍと定義する。ただし、この多対多関係複雑度計算式は一例にすぎず、多対多関係複雑度は、ｎとｍ（ｎは多対多関係モジュール群に含まれる始点モジュールの個数、ｍはその多対多関係モジュール群に含まれる終点モジュールの個数）を用いて数値化可能な式であれば他の式を用いて計算するようにしてもかまわない。別の例としては Index_1=ｎのｍ乗などが挙げられる。
【００４３】
多対多関係複雑度の値が大きいほど、その多対多関係モジュール群が依存関係の複雑さを引き起こしていると考えられ、多対多関係複雑度を参照することにより、多対多関係モジュール群を改善すべき箇所としてピンポイントに指摘できる。
【００４４】
多対多関係複雑度の計算例を示す。
図１２に示すソフトウエアＳＷ６は、モジュールａ、ｂ、ｃ、ｄ、ｅ、ｆ、ｇ、ｈ、ｉを有している。これらモジュールの依存関係は図中の矢印線で示すとおりである。
【００４５】
モジュールｂ、ｃ及びモジュールｅ、ｆ、ｇはソフトウエアＳＷ６に含まれる一つ目の多対多関係モジュール群である多対多関係モジュール群１を構成する。また、モジュールｃ、ｄ及びモジュールｇ、ｈはソフトウエアＳＷ６に含まれる二つ目の多対多関係モジュール群である多対多関係モジュール群２を構成する。
【００４６】
多対多関係モジュール群１＝{{ｂ、ｃ}、 {ｅ、ｆ、ｇ}}は、２対３の多対多関係モジュール群であり、多対多関係モジュール群２＝{{ｃ、ｄ}、 {ｇ、ｈ}} は２対２の多対多関係モジュール群である。なお、モジュールc、ｇは両方の多対多関係モジュール群に含まれている。
【００４７】
このとき、多対多関係モジュール群１＝{{ｂ、 ｃ}、{ｅ、ｆ、ｇ}} の多対多関係複雑度は、２×３=６であり、多対多関係モジュール群２＝{{ｃ、ｄ}、 {ｇ、ｈ}} の多対多関係複雑度は、２×２=４である。
【００４８】
[１．３．２．全多対多関係複雑度]
「全多対多関係複雑度」は、ソフトウエア全体で、多対多関係モジュール群が引き起こす複雑さを数値化する指標である。全多対多関係複雑度は本実施の形態の第２の指標に相当する。
【００４９】
「全多対多関係複雑度」は、そのソフトウエアに含まれるすべての多対多関係モジュール群の多対多関係複雑度を合計した値である。ただし、ある多対多関係モジュール群に内包される多対多関係モジュール群の多対多関係複雑度は合計しない。図１２の例では、多対多関係モジュール群１＝{{ｂ、ｃ}、 {ｅ、ｆ、ｇ}}に内包される多対多関係モジュール群{{ｂ、ｃ}、 {ｅ、ｆ}}の多対多関係複雑度は合計しない。「全多対多関係複雑度」によれば、ソフトウエア全体の複雑さを絶対的に評価できる。
【００５０】
図１２に示したソフトウエアＳＷ６について、全多対多関係複雑度の計算例を示す。
多対多関係モジュール群１＝{{ｂ、ｃ}、 {ｅ、ｆ、ｇ}} が２対３の多対多関係モジュール群であり、多対多関係モジュール群２＝{{ｃ、ｄ}、 {ｇ、ｈ}} が２対２の多対多関係モジュール群であるので、このソフトウエアＳＷ６の全多対多関係複雑度をIndex_2とすると、
Index_2=２×３+２×２=６＋４=１０
となる。
【００５１】
[１．３．３．多対多関係強度]
「多対多関係強度」は、ソフトウエア全体で、多対多関係モジュール群が密集する度合いを数値化した指標である。「多対多関係強度」は、ソフトウエアに含まれるすべての多対多関係モジュール群のモジュール間の依存関係の総数を、ソフトウエアに含まれるすべての多対多関係モジュール群に含まれるモジュールの総数で割った値である。ただし、異なる多対多関係モジュール群が共通のモジュールやモジュール間依存関係を含む場合、ダブルカウントはしない。多対多関係強度は本実施の形態の第３の指標に相当する。
【００５２】
「多対多関係強度」によれば、ソフトウエア全体で、複雑さを引き起こすモジュール群の密集の度合いを、ソフトウエアの規模によらず相対的に評価できる
【００５３】
図１２に示したソフトウエアＳＷ６を用いて「多対多関係強度」の計算例を示す。
多対多関係モジュール群１＝{{ｂ、ｃ}、 {ｅ、ｆ、ｇ}} が２対３の多対多関係モジュール群であり、多対多関係モジュール群２＝{{ｃ、ｄ}、 {ｇ、ｈ}} が２対２の多対多関係モジュール群であるので、このソフトウエアＳＷ６の多対多関係強度をIndex_3とすると、
Index_3 = （すべての多対多関係モジュール群のモジュール間依存関係の総数：矢印線の数）／（ソフトウエアに含まれるすべての多対多関係モジュール群のモジュールの総数）= 9/7 = 1.286
である。
【００５４】
[１．３．４．多対多関係モジュール率、多対多関係依存率]
多対多関係モジュール率、多対多関係依存率は、ソフトウエア全体で、多対多関係モジュール群が占める割合を数値化した指標である。
【００５５】
「多対多関係モジュール率」は、ソフトウエアに含まれるすべての多対多関係モジュール群のモジュールの総数を、そのソフトウエア全体のモジュールの総数で割った値である。ただし、異なる多対多関係モジュール群が共通のモジュールを含む場合、ダブルカウントはしない。多対多関係モジュール率は本実施の形態の第４の指標に相当する。
【００５６】
「多対多関係依存率」は、そのソフトウエアに含まれるすべての多対多関係モジュール群のモジュール間依存関係の総数を、ソフトウエア全体の依存関係の総数で割った値である。ただし、異なる多対多関係モジュール群が共通のモジュール間依存関係を含む場合、ダブルカウントはしない。多対多関係依存率は本実施の形態の第５の指標に相当する。
【００５７】
「多対多関係モジュール率」、「多対多関係依存率」によれば、ソフトウエア全体で複雑な依存関係が占める範囲を、規模によらず相対的に評価できる。
【００５８】
図１２に示したソフトウエアＳＷ６を用いて「多対多関係モジュール率」、「多対多関係依存率」の計算例を示す。
ソフトウエアＳＷ６において、多対多関係モジュール群１＝{{ b、 c }、 { e、 f、 g }} が２対３の多対多関係モジュール群であり、多対多関係モジュール群２＝{{ c、 d }、 { g、 h }} が２対２の多対多関係モジュール群であるので、このソフトウエアＳＷ６の多対多関係モジュール率をIndex_4、多対多関係依存率をIndex_5とすると、
Index_4 = (多対多関係モジュール群１又は多対多関係モジュール群２に含まれるモジュールの個数=7)/（ソフトウエアＳＷ６に含まれるモジュールの個数=10） = 7/10 = 0.7
Index_5 = (多対多関係モジュール群１又は多対多関係モジュール群２に含まれる矢印線の本数=9)/（ソフトウエアＳＷ６に含まれる矢印線の本数=17） = 9/17 = 0.529
である。
【００５９】
[２．ソフトウエアの複雑度測定装置の例]
次に、本実施の形態にかかるソフトウエアの複雑度測定装置の例について説明する。
複雑度測定装置は、ソフトウエアに含まれる多対多関係モジュール群の検出並びに多対多関係モジュール群を示す情報の生成、及び必要に応じて多対多関係複雑度、全多対多関係複雑度、多対多関係強度、多対多関係モジュール率、多対多関係依存率などの各指標の値の出力を行う装置である。
【００６０】
本装置は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００６１】
[２．１．複雑度測定装置の構成例]
本実施の形態にかかる複雑度測定装置の構成例を、図１３に示す複雑度測定装置の構成例を示すブロック図を参照しながら説明する。また、図１４Ａにソフトウエアの一例であって、当該ソフトウエアに含まれるモジュールとモジュール間の依存関係を矢印で示した図を示す。図１４Ａに示すソフトウエアＳＷ７は、１７個のモジュールａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ，ｉ，ｊ，ｋ，ｌ，ｍ．ｍ．ｏ，ｐ，ｑを含み、図中の矢印線で接続されたモジュール同士は、矢印線の元端側のモジュールを始点モジュールとし、当該矢印線の先端側のモジュールを終点モジュールとする依存関係を有する。以下、複雑度測定装置の構成例の説明を、図１４Ａに示すソフトウエアＳＷ７を用いながら行う。
【００６２】
複雑度測定装置１は、入力部１０と、入力部１０に接続された設計情報記憶部２０と、設計情報記憶部２０に接続された多対多関係モジュール群情報生成部３０と、多対多関係モジュール群情報生成部３０に接続された多対多関係モジュール群情報記憶部４０と、設計情報記憶部２０及び多対多関係モジュール群情報記憶部４０に接続された指標算出部５０と、多対多関係モジュール群情報記憶部４０及び指標算出部５０に接続された出力部６０とを有している。なお、設計情報記憶部２０は本実施の形態の記憶手段に相当し、多対多関係モジュール群情報生成部３０は本実施の形態の生成手段に相当する。
【００６３】
なお、これら構成要素は複雑度測定装置１の機能を、機能ごとにまとめてブロックとして捉えたものであり、複雑度測定装置１が各構成要素に対応する基板、装置、回路、部品などの物理的構成要素を備えていなければならないことを意味するわけではない。また、「接続されている」とは、データ、情報、命令などの送受信、受け取り、受け渡しなどが可能な状態になっていることをいい、互いに配線で連結されているような物理的な接続に限られる意味ではない。
【００６４】
[２．１．１．入力部]
入力部１０は、ユーザによって入力されたデータを受け付け、このデータに基づいて設計情報を生成し、出力する機能を有する。設計情報は、例えば複雑度計測対象ソフトウエアに含まれる全モジュールのリストであるモジュール記憶表と、計測対象ソフトウエアに含まれる依存関係それぞれの始点モジュールと終点モジュールを示す情報である依存関係記憶表、又はそれらを生成可能な情報若しくはデータである。モジュール記憶表は本実施の形態の第１の情報に相当する。依存関係記憶表は本実施の形態の第２の情報に相当する。
【００６５】
設計情報を生成するための情報は、既存の方法を使って入力される。例えば設計書を参照しながらオペレータがキーボード、ポインティングデバイス、ＧＵＩを用いた手動入力であってもよいし、複雑度計測対象となるソフトウエアのソースコードが記述されたファイルをメディア・リーダなどの読取装置で読み取り、このファイルからモジュール記憶表、全依存関係の始点モジュールと終点モジュールの組を示す情報である依存関係記憶表を自動的に生成させるアプリケーション等を用いた入力であってもよい。
【００６６】
[２．１．２．設計情報記憶部]
設計情報記憶部２０は、入力部１０から取得した設計情報を記憶する機能を有する。本実施の形態では、設計情報は、測定対象ソフトウエアに含まれる全モジュールのそれぞれを記憶したリストであるモジュール記憶表と、測定対象ソフトウエアに含まれる全依存関係の始点モジュールと終点モジュールの組を記憶した表である依存関係記憶表とで構成される情報である。
【００６７】
「モジュール記憶表」は、測定対象ソフトウエアに含まれる全モジュールのそれぞれを一意に特定する情報を格納したリストである。モジュールを一意に特定する情報は、例えばモジュール名、モジュール番号、モジュールＩＤなどである。図１４ＢにソフトウエアＳＷ７について生成されたモジュール記憶表の例を示す。モジュール記憶表は、モジュールごとに一つのレコードを有し、各レコードは、モジュールを一意に特定する情報として、モジュール名などを格納するフィールドを有する。図１４Ｂに示す例では、モジュール名がａ、ｂ、ｃ、…、ｏ、ｐ、ｑであるモジュールのそれぞれについて、モジュール名が対応するレコードに格納されている。
【００６８】
「依存関係記憶表」は、依存関係を有するモジュールの組み合わせのそれぞれについて、始点モジュールを特定する情報と、終点モジュールを特定する情報を対応付けして記憶する。図１５に依存関係記憶表の例を示す。なお、この依存関係記憶表はソフトウエアＳＷ７について生成された依存関係記憶表の例である。依存関係記憶表は、依存関係を有するモジュールの組み合わせごとに一つのレコードを有し、各レコードは、始点モジュールを特定する情報を格納する始点モジュールフィールドと、終点モジュールを特定する情報を格納する終点モジュールフィールドとを有する。具体例を述べると、図１５に示す依存関係記憶表の最上行のレコードは、始点モジュールをモジュールａとし、終点モジュールをモジュールｂとする依存関係を有するモジュールの組み合わせに対応した内容を有するレコードである。
【００６９】
[２．１．３．多対多関係モジュール群情報生成部]
多対多関係モジュール群情報生成部３０は、設計情報記憶部２０に記憶された設計情報、より詳しくはモジュール記憶表と依存関係記憶表から、測定対象ソフトウエアに含まれるすべての多対多関係モジュール群を抽出し、各多対多関係モジュール群を示す情報である多対多関係モジュール群情報を生成する機能を有する。多対多関係モジュール群情報は本実施の形態の第３の情報に相当する。
【００７０】
図１６に多対多関係モジュール群情報の一例である多対多関係モジュール群記憶表を示す。多対多関係モジュール群情報は、多対多関係モジュール群記憶表のような表形式のデータに限られることはなく、始点モジュール群と終点モジュール群との組を表現できるデータであればどのようなものであってもかまわない。なお、図１６に示す多対多関係モジュール群記憶表は、ソフトウエアＳＷ７、より詳しくは図１４Ｂに示したモジュール記憶表及び図１５に示した依存関係記憶表から生成された内容を有するものとして示した。
【００７１】
多対多関係モジュール群記憶表は、一つの多対多関係モジュール群について一つのレコードを有するデータである。各レコードは、当該多対多関係モジュール群における始点モジュールのそれぞれを特定する情報を格納するフィールドである「始点モジュール群」フィールドと、当該多対多関係モジュール群における終点モジュールのそれぞれを特定する情報を格納するフィールドである「始点モジュール群」フィールドとを有する。
【００７２】
図１６に示す多対多関係モジュール群記憶表は二つのレコードを有する。これは、測定対象ソフトウエアであるソフトウエアＳＷ７が二つの多対多関係モジュール群を有していることを示している。図１６中１行目のレコードは、始点モジュール群が３つのモジュールであるモジュールｂ、ｃ、ｄであり、終点モジュール群が３つのモジュールであるモジュールｆ、ｇ、ｈである多対多関係モジュール群を示している。図１６中２行目のレコードは、始点モジュール群が二つのモジュールであるモジュールｉ、ｊであり、終点モジュール群が３つのモジュールであるモジュールｌ、ｍ、ｎであるもう一つの多対多関係モジュール群を示している。
【００７３】
[２．１．４．多対多関係モジュール群情報記憶部]
多対多関係モジュール群情報記憶部４０は、多対多関係モジュール群情報生成部３０によって生成された多対多関係モジュール群記憶表を記憶する機能を有する。
【００７４】
[２．１．５．指標算出部]
指標算出部５０は、設計情報、多対多関係モジュール群記憶表に基づいて、各指標の値を計算し、出力する機能を有する。図１７に本実施形態における指標算出部５０の構成例を示す。指標算出部５０は、多対多関係複雑度を算出する多対多関係複雑度算出部５１と、全多対多関係複雑度を算出する全多対多関係複雑度算出部５２と、多対多関係強度を算出する多対多関係強度算出部５３と、多対多関係モジュール率及び多対多関係依存率を算出する多対多関係モジュール率／多対多関係依存率算出部５４とを有している。
【００７５】
[２．１．６．出力部]
出力部６０は、多対多関係モジュール群記憶表や指標の値の全部又は一部を出力する機能を有する。出力部６０は、例えばディスプレイ装置、印刷装置、記憶媒体書込装置などである。出力部６０からの出力内容によって、ユーザは測定対象ソフトウエアについての複雑さの原因となっている多対多関係モジュール群の存否、各多対多関係モジュール群を構成するモジュール、多対多関係モジュール群等により生ずる複雑さの程度などの情報を得ることができる。
【００７６】
[２．２．複雑度測定装置の動作例]
本実施の形態にかかる複雑度測定装置１の動作例を、図１８を参照しながら説明する。図１８は複雑度測定装置１の主たる動作である複雑度測定処理の一例を示すフローチャートである。
【００７７】
複雑度測定処理が開始すると、複雑度測定装置１、より詳しくは入力部１０はユーザからの入力を受け付ける（Ｓ１０）。
【００７８】
次に、複雑度測定装置１、より詳しくは入力部１０は入力されたデータから設計情報を生成する（Ｓ２０）。設計情報はモジュール記憶表（図１４Ｂ参照）と依存関係記憶表（図１５参照）からなる情報である。
【００７９】
次に複雑度測定装置１、より詳しくは設計情報記憶部２０はステップＳ２０にて生成された設計情報を記憶する（Ｓ３０）。
【００８０】
[２．２．１．多対多関係モジュール群情報生成処理]
次に複雑度測定装置１、より詳しくは多対多関係モジュール群情報生成部３０は、設計情報から多対多関係モジュール群記憶表を生成する（Ｓ４０）。設計情報から多対多関係モジュール群記憶表を生成する処理である対多関係モジュール群情報生成処理の例を図１９、図２０を参照しながら説明する。図１９は、多対多関係モジュール群情報生成処理の例を示したフローチャート、図２０は図１９に続く多対多関係モジュール群情報生成処理の例を示したフローチャートである。
【００８１】
多対多関係モジュール群情報生成処理を開始すると、多対多関係モジュール群情報生成部３０は、モジュール記憶表から未処理のモジュールを１個選択する（Ｓ１９０１）。
【００８２】
次に多対多関係モジュール群情報生成部３０は、この選択したモジュール（モジュールＡと呼ぶ）をリストＸに保存する（Ｓ１９０２）。リストＸは、多対多関係モジュール群情報を生成するために使用される中間ファイルである。
【００８３】
次に多対多関係モジュール群情報生成部３０は、依存関係記憶表を参照して、依存関係記憶表内にモジュールＡを始点モジュールとする依存関係が２個以上存在するか否かを判定する（Ｓ１９０３）。依存関係記憶表内にモジュールＡを始点モジュールとする依存関係が２個以上存在しないと判定した場合（Ｓ１９０３、Ｎｏ）、多対多関係モジュール群情報生成部３０は、ステップＳ１９０１に戻り、モジュールＡ以外の未処理のモジュールを１個選択する（Ｓ１９０１）。一方、依存関係記憶表内にモジュールＡを始点モジュールとする依存関係が２個以上存在すると判定した場合（Ｓ１９０３、Ｙｅｓ）、多対多関係モジュール群情報生成部３０は、その依存関係の終点モジュールをすべてリストＹとリストＺに記録する（Ｓ１９０４）。なおリストＹ、リストＺは、多対多関係モジュール群情報を生成するために使用される中間ファイルである。
【００８４】
次に多対多関係モジュール群情報生成部３０は、モジュール記憶表を参照して、現在選択中のモジュールＡ以外のモジュールを一つ選択する（Ｓ１９０５）。  
【００８５】
次に多対多関係モジュール群情報生成部３０は、リストＹ及び依存関係記憶表を参照して、リストＹに記憶されているすべてのモジュールを終点モジュールとし、ステップＳ１９０５で選択したモジュールを始点とする依存関係が存在するか否かを判定する（Ｓ１９０６）。かかる依存関係が存在しないと判定した場合（Ｓ１９０６、Ｎｏ）、多対多関係モジュール群情報生成部３０は、ステップＳ１９０５又はＳ１９０７で選択されていない他の未処理のモジュールを一つ選択し（Ｓ１９０７）、ステップＳ１９０６に戻る。一方、かかる依存関係が存在すると判定した場合（Ｓ１９０６、Ｙｅｓ）、多対多関係モジュール群情報生成部３０は、直近でステップＳ１９０５又はステップＳ１９０７で選択されたモジュールをリストＸに追加する（Ｓ１９０８）。
【００８６】
次に多対多関係モジュール群情報生成部３０は、モジュールＡ以外のすべてのモジュールを処理したか否かを判定する（Ｓ１９０９）。モジュールＡ以外のすべてのモジュールを処理していないと判定した場合（Ｓ１９０９、Ｎｏ）、多対多関係モジュール群情報生成部３０は、前述のステップＳ１９０７に戻り、多対多関係モジュール群情報生成部３０は、ステップＳ１９０５又はＳ１９０７で選択されていない他の未処理のモジュールを一つ選択する。一方、モジュールＡ以外のすべてのモジュールを処理しているを判定した場合（Ｓ１９０９、Ｙｅｓ）、多対多関係モジュール群情報生成部３０は、リストＸとリストＹにそれぞれ２個以上のモジュールがあるか否かを判定する（Ｓ２００１）。リストＸとリストＹにそれぞれ２個以上のモジュールがないと判定した場合（Ｓ２００１、Ｎｏ）、多対多関係モジュール群情報生成部３０は、後述するステップＳ２００３に進む。
【００８７】
一方、ステップＳ２００１においてリストＸとリストＹにそれぞれ２個以上のモジュールがあると判定した場合（Ｓ２００１、Ｙｅｓ）、多対多関係モジュール群情報生成部３０は、多対多関係モジュール群記憶表の始点モジュール群にリストＸの全モジュールを記憶し、終点モジュール群にリストＹの全モジュールを記憶する（Ｓ２００２）。
【００８８】
次に多対多関係モジュール群情報生成部３０は、リストＺの全モジュールのうち２個以上を任意に組み合わせたリストＹを新たに作成する（Ｓ２００３）。例えば、リストＺが（a,b,c）を記憶しているときに、実現したいリストＹを正確に記述すると、最初のループ（Ｓ１９０５〜Ｓ２００２）では(a,b,c)、２回目のループでは(a,b)、３回目のループでは（a,c）、４回目のループでは（b,c）となる（なお、２〜４回目の順序は入れ替わっても良い）。
【００８９】
次に多対多関係モジュール群情報生成部３０は、ステップＳ１９０５からステップＳ２００３において、リストＹのすべての組み合わせを処理したか否かを判定する（Ｓ２００４）。リストＹのすべての組み合わせを処理していないと判定した場合（Ｓ２００４、Ｎｏ）、多対多関係モジュール群情報生成部３０は、ステップＳ１９０５に戻る。一方、リストＹのすべての組み合わせを処理したと判定した場合（Ｓ２００４、Ｙｅｓ）、多対多関係モジュール群情報生成部３０は、モジュール記憶表のすべてのモジュールをステップＳ１９０１において選択したか否かを判定する（Ｓ２００５）。モジュール記憶表のすべてのモジュールをステップＳ１９０１において選択していないと判定した場合（Ｓ２００５、Ｎｏ）、多対多関係モジュール群情報生成部３０はステップＳ１９０１に戻り、未処理のモジュールをモジュール記憶表から一つ選択し、ステップＳ１９０２以降の処理を続行する。
【００９０】
一方、モジュール記憶表のすべてのモジュールをステップＳ１９０１において選択したと判定した場合（Ｓ２００５、Ｙｅｓ）、多対多関係モジュール群情報生成部３０は、ある始点モジュール群と終点モジュール群の組が、別の組の始点モジュール群と終点モジュール群にすべて含まれている（内包されている）場合、内包されている組を多対多関係モジュール群記憶表から削除する（Ｓ２００６）。
【００９１】
次に多対多関係モジュール群情報生成部３０は、多対多関係モジュール群記憶表を出力し、多対多関係モジュール群情報記憶部４０に記憶させる（Ｓ２００７）。
以上で多対多関係モジュール群情報生成部３０は、多対多関係モジュール群情報生成処理を終了する。
【００９２】
図１８に戻り、複雑度測定処理の説明を続ける。多対多関係モジュール群情報を生成した（Ｓ４０）後、複雑度測定装置１、より詳しくは多対多関係モジュール群情報記憶部４０は、多対多関係モジュール群情報である多対多関係モジュール群記憶表を記憶する（Ｓ５０）。
【００９３】
次に複雑度測定装置１、より詳しくは指標算出部５０は指標の算出を行う（Ｓ６０）。指標算出部５０は、多対多関係複雑度を算出する処理である多対多関係複雑度算出処理、全多対多関係複雑度を算出する処理である全多対多関係複雑度算出処理、多対多関係強度を算出する処理である多対多関係強度算出処理、多対多関係モジュール率及び多対多関係依存率を算出する処理である多対多関係モジュール率、多対多関係依存率算出処理をそれぞれ実行する。
【００９４】
[２．２．２．多対多関係複雑度算出処理]
多対多関係複雑度算出処理について図２１を参照しながら説明する。図２１は、多対多関係複雑度算出処理の例を示すフローチャートである。
【００９５】
多対多関係複雑度算出処理を開始すると、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係複雑度算出部５１は、多対多関係モジュール群記憶表から、始点モジュール群とこれに対応付けされた終点モジュール群の組を一組選択する（Ｓ２１０１）。
【００９６】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係複雑度算出部５１は、上記始点モジュール群のモジュールの数（Ａとする）と、上記終点モジュール群のモジュールの数（Ｂとする）を数えて、Ａ×Ｂを計算し、得られた値をこの組、すなわちこの多対多関係モジュール群の多対多関係複雑度として出力する（Ｓ２１０２）。
【００９７】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係複雑度算出部５１は、多対多関係モジュール群記憶表中に存在する、始点モジュール群と終点モジュール群のすべての組の多対多関係複雑度を計算したか否かを判定する（Ｓ２１０３）。すべての組（多対多関係モジュール群）の多対多関係複雑度を計算していないと判定した場合（Ｓ２１０３、Ｎｏ）、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係複雑度算出部５１は、多対多関係モジュール群記憶表中に存在する未処理の始点モジュール群と終点モジュール群の組を新たに一つ選択し（Ｓ２１０４）、その後ステップＳ２１０２に進む。一方、すべての組の多対多関係複雑度を計算したと判定した場合（Ｓ２１０３、Ｙｅｓ）、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係複雑度算出部５１は、各組（多対多関係モジュール群）の多対多関係複雑度の値を記憶する（Ｓ２１０５）。
以上で複雑度測定装置１、より詳しくは指標算出部５０の多対多関係複雑度算出部５１は、多対多関係複雑度算出処理を終了する。
【００９８】
[２．２．３．全多対多関係複雑度算出処理]
全多対多関係複雑度算出処理について図２２を参照しながら説明する。図２２は、全多対多関係複雑度算出処理の例を示すフローチャートである。
【００９９】
全多対多関係複雑度算出処理を開始すると、複雑度測定装置１、より詳しくは指標算出部５０の全多対多関係複雑度算出部５２は、多対多関係モジュール群記憶表から、すべての組の多対多関係複雑度を算出する（Ｓ２２０１）。なお、すべての組の多対多関係複雑度は、多対多関係複雑度算出部５１が算出した値を使用するようにしてもよい。
【０１００】
次に複雑度測定装置１、より詳しくは指標算出部５０の全多対多関係複雑度算出部５２は、算出した多対多関係複雑度のすべてを合計した値を、全多対多関係複雑度として記憶する（Ｓ２２０２）。
【０１０１】
以上で複雑度測定装置１、より詳しくは指標算出部５０の全多対多関係複雑度算出部５２は、全多対多関係複雑度算出処理を終了する。
【０１０２】
[２．２．４．多対多関係強度算出処理]
多対多関係強度算出処理について図２３を参照しながら説明する。図２３は、多対多関係強度算出処理の例を示すフローチャートである。
【０１０３】
多対多関係強度算出処理を開始すると、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、多対多関係モジュール群記憶表から、始点モジュール群と終点モジュール群の組（多対多関係モジュール群）を１組選択する（Ｓ２３０１）。
【０１０４】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、ステップＳ２３０１で選択された始点モジュール群と終点モジュール群に含まれるすべてのモジュールを、リストＸ＿２に追加する（Ｓ２３０２）。なお、リストＸ＿２は多対多関係強度を算出すための中間ファイルである。
【０１０５】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、選択されている組の始点モジュール群に含まれる各モジュールを始点とし、終点モジュール群に含まれる各モジュールを終点とする、すべての依存関係の始点モジュールと終点モジュールの組を、リストＹ＿２に追加する（Ｓ２３０３）。なお、リストＹ＿２も多対多関係強度を算出すための中間ファイルである。
【０１０６】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、多対多関係モジュール群記憶表に含まれる、すべての組についてステップＳ２３０２、Ｓ２３０３の処理を実行したか否かを判定する（Ｓ２３０４）。すべての組についてステップＳ２３０２、Ｓ２３０３の処理を実行していないと判定した場合（Ｓ２４０４、Ｎｏ）、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、多対多関係モジュール群記憶表に含まれる始点モジュールと終点モジュールの組のうち処理の組を一つ選択し（Ｓ２３０５）、その後ステップＳ２３０２に戻る。一方、すべての組についてステップＳ２３０２、Ｓ２３０３の処理を実行したと判定した場合（Ｓ２３０４、Ｙｅｓ）、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、リストＸ＿２に含まれるモジュールのうち、他と重複しているモジュールがあれば、一つを残して他の重複しているモジュールをリストＸ＿２から削除する（Ｓ２３０６）。
【０１０７】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、リストＹ＿２に含まれる始点モジュールと終点モジュールの組のうち、他の組と重複している組があれば一つのみ残して他の重複している組をリストＹ＿２から削除する（Ｓ２３０７）。
【０１０８】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、リストＹ＿２に含まれる依存関係の組の数をリストＸ＿２に含まれるモジュールの数で割った値を、多対多関係強度として記憶する（Ｓ２３０８）。
【０１０９】
以上で複雑度測定装置１、より詳しくは指標算出部５０の多対多関係強度算出部５３は、多対多関係強度算出処理を終了する。
【０１１０】
[２．２．５．多対多関係モジュール率、多対多関係依存率算出処理]
多対多関係モジュール率、多対多関係依存率算出処理について図２４を参照しながら説明する。図２４は、多対多関係モジュール率、多対多関係依存率算出処理の例を示すフローチャートである。
【０１１１】
多対多関係モジュール率、多対多関係依存率算出処理を開始すると、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、多対多関係モジュール群記憶表から、始点モジュール群と終点モジュール群の組（多対多関係モジュール群）を１組選択する（Ｓ２４０１）。
【０１１２】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、直近に行われたステップＳ２４０１にて選択された、始点モジュール群と終点モジュール群に含まれるすべてのモジュールをリストＸ＿３に追加する（Ｓ２４０２）。なお、リストＸ＿３は多対多関係モジュール率、多対多関係依存率を算出するために用いる中間ファイルである。
【０１１３】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、直近に行われたステップＳ２４０１にて選択された始点モジュール群の各モジュールを始点とし、終点モジュール群の各モジュールを終点とするすべての依存関係の始点モジュールと終点モジュールの組を、リストＹ＿３に追加する（Ｓ２４０３）。なお、リストＹ＿３は多対多関係モジュール率、多対多関係依存率を算出するために用いる中間ファイルである。
【０１１４】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、多対多関係モジュール群記憶表のすべての組について選択したか否かを判定する（Ｓ２４０４）。多対多関係モジュール群記憶表のすべての組について選択していないと判定した場合（Ｓ２４０４、Ｎｏ）、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、多対多関係モジュール群記憶表に含まれる始点モジュールと終点モジュールの組であって未処理の組を一つ選択し（Ｓ２４０５）、その後ステップＳ２４０２に進む。一方、多対多関係モジュール群記憶表のすべての組について選択したと判定した場合（Ｓ２４０４、Ｙｅｓ）、複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、リストＸ＿３に含まれるモジュールのうち、他と重複しているモジュールがあればリストＸ＿３から削除する（Ｓ２４０６）。
【０１１５】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、リストＹ＿３に含まれる始点モジュールと終点モジュールの組のうち、他の組と重複している組があればリストＹ＿３から削除する（Ｓ２４０７）。
【０１１６】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、リストＸ＿３に含まれるモジュールの数を、モジュール記憶表に含まれるモジュールの数で割った値を、多対多関係モジュール率として記憶する（Ｓ２４０８）。
【０１１７】
次に複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、リストＹ＿３に含まれる依存関係の組の数を依存関係記憶表に含まれる依存関係の組の数で割った値を、多対多関係依存率として記憶する（Ｓ２４０９）。
【０１１８】
以上で複雑度測定装置１、より詳しくは指標算出部５０の多対多関係モジュール率／多対多関係依存率算出部５４は、多対多関係モジュール率、多対多関係依存率算出処理を終了する。
【０１１９】
図１８に戻り、複雑度測定処理の説明を続ける。上記指標算出（Ｓ６０）の終了後、複雑度測定装置１、より詳しくは出力部６０は、多対多関係モジュール群情報である多対多関係モジュール群記憶表、各指標の値を出力する（Ｓ７０）。以上で複雑度測定処理は終了する。
【０１２０】
[３．その他]
本実施の形態の変形例として、算出された指標の値を、すべての多対多関係モジュール群について示してもよいし、別途定義された閾値と比較して、閾値を超過している多対多関係モジュール群だけを優先して示すことで、複雑な部分の改善を促す使い方をしてもよい。
【０１２１】
[４．まとめ]
本実施の形態によれば、モジュール間の依存関係の複雑さを引き起こしている、多対多関係モジュール群を容易かつ正確に把握でき、それらの多対多関係モジュール群が引き起こす複雑さの度合いも、数値によって把握することが可能となる。
【０１２２】
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
【符号の説明】
【０１２３】
１…複雑度測定装置；    １０…入力部；    ２０…設計情報記憶部；    ３０…多対多関係モジュール群情報生成部；    ４０…多対多関係モジュール群情報記憶部；    ５０…指標算出部；    ６０…出力部；    ５１…多対多関係複雑度算出部；    ５２…全多対多関係複雑度算出部；    ５３…多対多関係強度算出部；    ５４…多対多関係モジュール率／多対多関係依存率算出部；
【図１】
2014109949.tif 000003
【図２】
2014109949.tif 000004
【図３】
2014109949.tif 000005
【図４】
2014109949.tif 000006
【図５】
2014109949.tif 000007
【図６】
2014109949.tif 000008
【図７】
2014109949.tif 000009
【図８】
2014109949.tif 000010
【図９】
2014109949.tif 000011
【図１０】
2014109949.tif 000012
【図１１】
2014109949.tif 000013
【図１２】
2014109949.tif 000014
【図１３】
2014109949.tif 000015
【図１４Ａ】
2014109949.tif 000016
【図１４Ｂ】
2014109949.tif 000017
【図１５】
2014109949.tif 000018
【図１６】
2014109949.tif 000019
【図１７】
2014109949.tif 000020
【図１８】
2014109949.tif 000021
【図１９】
2014109949.tif 000022
【図２０】
2014109949.tif 000023
【図２１】
2014109949.tif 000024
【図２２】
2014109949.tif 000025
【図２３】
2014109949.tif 000026
【図２４】
2014109949.tif 000027