(57)【要約】【課題】ＸＳＬＴに適したソースコードの解析を実行することのできるＸＳＬＴコード解析プログラム、ＸＳＬＴコード解析方法、ＸＳＬＴコード解析装置及び記録媒体の提供を目的とする。【解決手段】ＸＳＬＴで記述されたソースコードの解析をコンピュータに実行させるためのＸＳＬＴコード解析プログラムであって、前記ソースコードに記述された条件判断の要素の数と、前記ソースコードに記述されたＸＰａｔｈ内に指定された条件判断の記述の数とに基づいて当該ソースコードのサイクロマティック複雑度を算出することにより上記課題を解決する。【選択図】図４
2007219643.tif 000002
【特許請求の範囲】
【請求項１】
ＸＳＬＴで記述されたソースコードの解析をコンピュータに実行させるためのＸＳＬＴコード解析プログラムであって、
前記ソースコードに記述された条件判断の要素の数と、前記ソースコードに記述されたＸＰａｔｈ内に指定された条件判断の記述の数とに基づいて当該ソースコードのサイクロマティック複雑度を算出することを特徴とするＸＳＬＴコード解析プログラム。
【請求項２】
前記条件判断の要素の開始タグを検出する第一の検出手順と、
前記条件判断の要素の終了タグを検出する第二の検出手順とを有し、
前記開始タグを当該条件判断の分岐点とし、前記終了タグを当該条件判断の合流点としてサイクロマティック複雑度を算出することを特徴とする請求項１記載のＸＳＬＴコード解析プログラム。
【請求項３】
前記ＸＰａｔｈ内より所定の記号を検出する第三の検出手順を有し、
前記所定の記号を前記ＸＰａｔｈ内に指定された条件判断の分岐点及び合流点の組としてサイクロマティック複雑度を算出することを特徴とする請求項１又は２記載のＸＳＬＴコード解析プログラム。
【請求項４】
ＸＳＬＴのテンプレートを呼び出す要素の開始タグの数に基づいて、前記ソースコードの関数コール数を算出する関数コール数算出手順を有することを特徴とする請求項１乃至３いずれか一項記載のＸＳＬＴコード解析プログラム。
【請求項５】
前記終了タグが検出されるまで連続して検出される前記開始タグの数と、前記ＸＰａｔｈ内に指定された条件判断の記述の数とに基づいて、当該ソースコードにおける条件判断の最大ネスト数を算出するネスト数算出手順を有することを特徴とする請求項１乃至４いずれか一項記載のＸＳＬＴコード解析プログラム。
【請求項６】
請求項１乃至５いずれか一項記載のＸＳＬＴコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項７】
ＸＳＬＴで記述されたソースコードの解析を行うＸＳＬＴコード解析装置におけるＸＳＬＴコード解析方法であって、
前記ソースコードに記述された条件判断の要素の数と、前記ソースコードに記述されたＸＰａｔｈ内に指定された条件判断の記述の数とに基づいて当該ソースコードのサイクロマティック複雑度を算出することを特徴とするＸＳＬＴコード解析方法。
【請求項８】
ＸＳＬＴで記述されたソースコードの解析を行うＸＳＬＴコード解析装置であって、
前記ソースコードに記述された条件判断の要素の数と、前記ソースコードに記述されたＸＰａｔｈ内に指定された条件判断の記述の数とに基づいて当該ソースコードのサイクロマティック複雑度を算出することを特徴とするＸＳＬＴコード解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＸＳＬＴコード解析プログラム、ＸＳＬＴコード解析方法、ＸＳＬＴコード解析装置及び記録媒体に関し、特にＸＳＬＴで記述されたソースコードの解析を行うＸＳＬＴコード解析プログラム、ＸＳＬＴコード解析方法、ＸＳＬＴコード解析装置及び記録媒体に関する。
【背景技術】
【０００２】
ソフトウェアメトリクスは、ソフトウェア開発を様々な視点から定量的に評価するものである。ソフトウェアメトリクスの一つの指標として、例えば、サイクロマティック複雑度が存在する。
【０００３】
サイクロマティック複雑度（ＳＴＣＹＣ）とは、プログラムに含まれる条件判断の分岐点及び合流点の数（ｎ）、プログラムに含まれる基本ブロックの数（ｅ）、並びにプログラムの数（ｐ）に基づいて、以下の式で算出される指標である。
【０００４】
ＳＴＣＹＳ＝ｅ−ｎ＋２ｐ
図１は、サイクロマティック複雑度を説明するための図である。図１には、一つのプログラムの構造が模式的に示されている。したがって、ｐの値は「１」となる。更に、図１において、○で示されるｎ１〜ｎ８が、条件判断の分岐点又は合流点を示す。したがって、ｎの値は「８」となる。また、矢印（→）で示されるｅ１〜ｅ１０は、基本ブロックを示す。したがって、ｅの値は１０となる。そうすると、図１に示されるプログラムのサイクロマティック複雑度（ＳＴＣＹＣ）は、以下のとおり「４」となる。
【０００５】
ＳＴＣＹＣ＝１０−８＋２×１＝４
なお、一般的に、サイクロマティック複雑度の値は、１０以下が適正であるとされている。
【０００６】
ところで、近年において、ソフトウェアを記述するプログラム言語としてはＣ言語やＪａｖａ（登録商標）言語が主として用いられているところ、サイクロマティック複雑度は、Ｃ言語やＪａｖａ（登録商標）言語等、一般的なプログラム言語との親和性は高く、かかるプログラム言語によって記述されたソースコードのサイクロマティック複雑度を自動的に算出するためのソフトウェアツールも存在する。例えば、Ｃ言語であれば、ｉｆ文、ｅｌｓｅｉｆ文、又はｃａｓｅ文等が分岐点として扱われる。
【０００７】
他方において、近年のインターネット技術の発展に伴い、アプリケーションがＷｅｂページを介して提供されることが多くなっているが、その書式を定義するための言語としてＸＳＬＴ（XML Stylesheet Language Transformations）が一般的に用いられている。近年では、Ｗｅｂページのデザインが複雑化しており、また、画面数も増加している。かかる事情に伴い、ＸＳＬＴコードも増加し、また、複雑化している。したがって、ＸＳＬＴコードについても、Ｃ言語やＪａｖａ（登録商標）言語等、他の言語で記述されたソースコードと同様に、その内容が適切に検証されることが望ましい。
【特許文献１】特開２００２―２６８９１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＸＳＬＴは、純粋なプログラミング言語ではなく、Ｗｅｂページの書式を規定するスタイルシートを記述するための言語（スタイル言語）であるため、一般的なプログラム言語には存在しない特有の文法がある。したがって、一般的なプログラム言語を対象として考案された指標を単純に当てはめるだけでは、ＸＳＬＴコードの妥当性の検証に対する判断基準として不十分であるという問題がある。
【０００９】
本発明は、上記の点に鑑みてなされたものであって、ＸＳＬＴに適したソースコードの解析を実行することのできるＸＳＬＴコード解析プログラム、ＸＳＬＴコード解析方法、ＸＳＬＴコード解析装置及び記録媒体の提供を目的とする。
【課題を解決するための手段】
【００１０】
そこで上記課題を解決するため、本発明は、ＸＳＬＴで記述されたソースコードの解析をコンピュータに実行させるためのＸＳＬＴコード解析プログラムであって、前記ソースコードに記述された条件判断の要素の数と、前記ソースコードに記述されたＸＰａｔｈ内に指定された条件判断の記述の数とに基づいて当該ソースコードのサイクロマティック複雑度を算出することを特徴とする。
【００１１】
このようなＸＳＬＴコード解析プログラムでは、ＸＳＬＴに適したソースコードの解析を実行することができる。
【発明の効果】
【００１２】
本発明によれば、ＸＳＬＴに適したソースコードの解析を実行することのできるＸＳＬＴコード解析プログラム、ＸＳＬＴコード解析方法、ＸＳＬＴコード解析装置及び記録媒体を提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面に基づいて本発明の実施の形態を説明する。図２は、本発明の実施の形態におけるＸＳＬＴコード解析装置のハードウェア構成例を示す図である。なお、本実施の形態において、ＸＳＬＴコードとは、ＸＳＬＴ（XML Stylesheet Language Transformations）によって記述されたソースコードをいう。
【００１４】
図２のＸＳＬＴコード解析装置１０は、それぞれバスBで相互に接続されているドライブ装置１００と、補助記憶装置１０２と、メモリ装置１０３と、演算処理装置１０４と、表示装置１０５と、入力装置１０６と等を有するように構成される。
【００１５】
ＸＳＬＴコード解析装置１０での処理を実現するプログラムは、CD―ROM等の記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、プログラムの処理に必要な各種のデータを格納する。
【００１６】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。演算処理装置１０４は、メモリ装置１０３に格納されたプログラムに従ってＸＳＬＴコード解析装置１０に係る機能を実行する。表示装置１０５はプログラムによるＧＵＩ（Graphical User Interface）等を表示する。入力装置１０６はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
【００１７】
なお、ＸＳＬＴコード解析装置１０をネットワークを介して操作する場合、表示装置１０５及び入力装置１０６は、必ずしもＸＳＬＴコード解析装置１０に接続されている必要はない。
【００１８】
図３は、本発明の実施の形態におけるＸＳＬＴコード解析装置の機能構成例を示す図である。図３における各部は、ＸＳＬＴコード解析装置１０にインストールされたプログラムが演算処理装置１０４によって処理されることにより機能する。図３において、ＸＳＬＴコード解析装置１０は、ＸＳＬＴメトリクス解析部１１を有している。
【００１９】
ＸＳＬＴメトリクス解析部１１は、ＸＳＬＴコードファイル１２のソフトウェアメトリクスを解析する。本実施の形態では、ＸＳＬＴコードファイル１２のソフトウェアメトリクスの例として、サイクロマティック複雑度、関数コール数、及び最大ネスト数に関する解析が行われる。
【００２０】
サイクロマティック複雑度（ＳＴＣＹＣ）とは、一般的に、プログラムに含まれる条件判断の分岐点及び合流点の数（ｎ）、プログラムに含まれる基本ブロックの数（ｅ）、並びにプログラムの数（ｐ）に基づいて、以下の式（１）で算出される指標であり、一般的に１０以下が適正な値であるとされる。
【００２１】
ＳＴＣＹＳ＝ｅ−ｎ＋２ｐ・・・（１）
関数コール数は、ソースコードにおける関数コールの数を示す指標である。
【００２２】
最大ネスト数とは、ソースコードにおける条件判断の入れ子構造の階層の最大値を示す指標である。Ｃ言語を例とすると、ｉｆ文の中に更にｉｆ文がある場合、そのネスト数は「２」となる。
【００２３】
ＸＳＬＴメトリクス解析部１１は、サイクロマティック複雑度算出部１１１、関数コール数算出部１１２、及び最大ネスト数算出部１１３等を有する。
【００２４】
サイクロマティック複雑度算出部１１１は、ＸＳＬＴコードファイル１２のサイクロマティック複雑度を算出する。
【００２５】
関数コール数算出部１１２は、ＸＳＬＴコードファイル１２のテンプレートの呼び出し回数（以下「テンプレートコール数」という。）を関数コール数として算出する。すなわち、ＸＳＬＴにおけるテンプレートは、Ｃ言語等における関数と類似した性質を有するため、関数コール数をテンプレートコール数によって代替させるというわけである。
【００２６】
最大ネスト数算出部１１３は、ＸＳＬＴコードファイル１２の最大ネスト数を算出する。サイクロマティック複雑度算出部１１１、関数コール数算出部１１２、及び最大ネスト数算出部１１３等による処理は、一つの入力（ユーザからの指示等）に基づいてシーケンシャルに行われてもよいし、並列的に行われてもよい。また、別個独立に行われてもよい。
【００２７】
以下、図３のＸＳＬＴコード解析装置１０の処理手順について説明する。まず、サイクロマティック複雑度算出部１１１によるサイクロマティック複雑度の算出処理について説明する。図４は、サイクロマティック複雑度算出部によるＸＳＬＴコードのサイクロマティック複雑度の算出処理の処理手順を説明するためのフローチャートである。
【００２８】
まず、サイクロマティック複雑度（以下、単に「複雑度」という。）を格納するための変数（ｓｔｃｙｃ）を０に初期化する（Ｓ１０１）。続いて、ＸＳＬＴコードファイル１２のファイルの終端が検出されるまでＳ１０２ａ及びＳ１０２ｂに囲まれたループ処理を実行する。すなわち、ＸＳＬＴコードファイル１２内のコードを１行ずつ読み込み（Ｓ１０３）、読み込んだ行に「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の開始タグが含まれている場合（Ｓ１０４でＹｅｓ）、ステップＳ１０５以降の処理を実行する。「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の開始タグの検出は、例えば、読み込んだ行に“＜ｘｓｌ：ｔｅｍｐｌａｔｅ”という文字列が含まれているか否かにより行えばよい。また、後述における、他の要素の検出についても文字列の比較に基づいて行えばよい。
【００２９】
ステップＳ１０５において、複雑度を算出するための変数ｐ、ｎ、及びｅのそれぞれを「１」に初期化する。なお、これらの変数は、上記式（１）に対応する。続いて、「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の終了タグが検出されるまで、Ｓ１０６ａ及びＳ１０６ｂのループ処理を行う。すなわち、ＸＳＬＴコードファイル１２内のコードを１行ずつ読み込み（Ｓ１０７）、各行についてステップＳ１０８，Ｓ１１０、及びＳ１１２の判定を行う。
【００３０】
ステップＳ１０８では、読み込んだ行（以下、「カレント行」という。）に、「ｘｓｌ：ｉｆ」要素の開始タグ又は「ｘｓｌ：ｗｈｅｎ」要素の開始タグが含まれているか否かを判定する。カレント行に当該開始タグが含まれている場合（Ｓ１０８でＹｅｓ）、ｎの値に１を加算すると共にｅの値に２加算する（Ｓ１０９）。「ｘｓｌ：ｉｆ」要素及び「ｘｓｌ：ｗｈｅｎ」要素は、Ｃ言語のｉｆ文やｃａｓｅ文に相当するような条件判断を行う要素だからである。したがって、「ｘｓｌ：ｉｆ」要素の開始タグは分岐点として扱われ、ｎに１が加算されるのである。また、分岐により二つの基本ブロックが発生するため、ｅに２が加算されるのである。
【００３１】
続いて、ステップＳ１１０では、カレント行に、「ｘｓｌ：ｉｆ」要素の終了タグ又は「ｘｓｌ：ｗｈｅｎ」要素の終了タグが含まれているか否かを判定する。カレント行に当該終了タグが含まれている場合（Ｓ１１０でＹｅｓ）、ｎに１を加算すると共にｅに１を加算する（Ｓ１１１）。これは、当該終了タグが、「ｘｓｌ：ｉｆ」要素又は「ｘｓｌ：ｗｈｅｎ」要素の開始タグによる分岐の合流点となるからである。したがって、ｎに１が加算されるのである。また、合流によって合流点の後に基本ブロックが一つ発生するため、ｅに１が加算されるのである。
【００３２】
続いて、ステップＳ１１２では、カレント行が、「ｓｅｌｅｃｔ」属性を含むか否かを判定する。カレント行が、「ｓｅｌｅｃｔ」属性を含む場合（Ｓ１１２でＹｅｓ）、「ｓｅｌｅｃｔ」属性の値に指定されているＸＰａｔｈ内における［］で囲まれた文字列の数をカウントし（Ｓ１１３）、カウントされた値（以下「カウント数」という。）に基づいて、ｎの値及びｅの値を更新する（Ｓ１１４，Ｓ１１５）。これは、ＸＰａｔｈにおける［］において条件判断が行われるからである。ここで、ＸＰａｔｈにおける［］は、それ自体で条件判断を完結しているため条件判断の分岐点及び合流点の双方を含むもの、すなわち、分岐点及び合流点の組として扱う。したがって、ステップＳ１１４において、ｎの値には、カウント数を２倍した値が加算される（一つの条件判断（分岐及び合流）によってｎの値は２増加するからである）。また、ステップＳ１１５において、ｅの値には、カウント数を３倍した値が加算される（一つの条件判断（分岐及び合流）によってｎの値は３増加するからである）。
【００３３】
処理対象とされていた「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の終了タグが検出されると、ステップＳ１１７に進み、ｎに１を加算する。当該「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の終了を一つの合流として扱うためである。続いて、変数ｐ、ｎ、ｅの値を式（１）に当てはめ、更に、これまでに算出されている複雑度を加算することにより、複雑度の値（ｓｔｃｙｃ）を更新する（Ｓ１１８）。
【００３４】
ＸＳＬＴコードファイル１２のファイルの終端が検出されると、図４の処理は終了する。
【００３５】
図４において説明した処理手順の妥当性を、具体的なＸＳＬＴコードに当てはめて説明する。
【００３６】
図５は、ＸＳＬＴコードの第一の具体例を示す図である。図５におけるＸＳＬＴコード１２ａには、一つの「ｘｓｌ：ｉｆ」要素が含まれている。記述１２ａ―１は、当該「ｘｓｌ：ｉｆ」要素の開始タグであり、記述１２ａ―２は、当該「ｘｓｌ：ｉｆ」要素」要素の終了タグである。「ｘｓｌ：ｉｆ」要素を条件判断として扱うと、ＸＳＬＴコード１２ａの構造は図６のように示される。
【００３７】
図６は、ＸＳＬＴコードの第一の具体例の模式図である。
【００３８】
図６において、○で示されるｎ１１〜ｎ１４は、条件判断の分岐点又は合流点を示す。したがって、ｎの値は「４」となる。また、矢印（→）で示されるｅ１１〜ｅ１４は、基本ブロックを示す。したがって、ｅの値は「４」となる。なお、ＸＳＬＴコード１２ａは、一つのプログラムのコードであるため、ｐの値は「１」である。そうすると、図６に基づけば、ＸＳＬＴコード１２ａの複雑度は、
ＳＴＣＹＣ＝４―４＋２×１＝２
となる。
【００３９】
一方、ＸＳＬＴコード１２ａの複雑度を、図４のフローチャートに基づいて算出すると以下のようになる。
【００４０】
図７は、ＸＳＬＴコードの第一の具体例を複雑度の算出処理を示すフローチャートに当てはめた例を示す図である。図７に示されるフローチャートは、図４より一部を抜粋したものであり、同一ステップには同一符号が付されている。
【００４１】
フローチャートによれば、ステップＳ１０９において、ＸＳＬＴコード１２ａの記述１２ａ−１に基づいて、ｎの値は２となり（ｎ＝１＋１＝２）、ｅの値は３となる（ｅ＝１＋２＝３）。また、ステップＳ１１１において、記述１２ａ―２に基づいて、ｎの値は３となり（ｎ＝２＋１＝３）、ｅの値は４となる（ｅ＝３＋１＝４）。更に、ステップＳ１１７において、ｎの値は１が加算されて４となる。その結果、ステップＳ１１８において、複雑度の値（ｓｔｃｙｃ）は、
４−４＋２×１＋０＝２
となり、模式図に基づいて算出した値と同じ値となる。
【００４２】
また、図８は、ＸＳＬＴコードの第二の具体例を示す図である。図８におけるＸＳＬＴコード１２ｂには、記述１２ｂ−１、記述１２ｂ−２、及び記述１２ｂ−３に示されるように三つの「ｘｓｌ：ｗｈｅｎ」要素が含まれている。各記述には、「ｘｓｌ：ｗｈｅｎ」要素の開始タグ及び終了タグが含まれている。「ｘｓｌ：ｗｈｅｎ」要素を条件判断として扱うと、ＸＳＬＴコード１２ｂの構造は図９のように示される。
【００４３】
図９は、ＸＳＬＴコードの第二の具体例の模式図である。
【００４４】
図９において、○で示されるｎ２１〜ｎ２８は、分岐点又は合流点を示す。したがって、ｎの値は「８」となる。また、矢印（→）で示されるｅ２１〜ｅ３０は、基本ブロックを示す。したがって、ｅの値は「１０」となる。なお、ＸＳＬＴコード１２ｂは、一つのプログラムのコードであるため、ｐの値は「１」である。そうすると、図９に基づけば、ＸＳＬＴコード１２ｂの複雑度は、
ＳＴＣＹＣ＝１０―８＋２×１＝４
となる。
【００４５】
一方、ＸＳＬＴコード１２ｂの複雑度を、図４のフローチャートに基づいて算出すると以下のようになる。
【００４６】
図１０は、ＸＳＬＴコードの第二の具体例を複雑度の算出処理を示すフローチャートに当てはめた例を示す図である。図１０に示されるフローチャートは、図４より一部を抜粋したものであり、同一ステップには同一符号が付されている。
【００４７】
フローチャートによれば、ステップＳ１０９において、ＸＳＬＴコード１２ｂの記述１２ｂ−１における開始タグに基づいて、ｎの値は２となり（ｎ＝１＋１＝２）、ｅの値は３となる（ｅ＝１＋２＝３）。また、ＸＳＬＴコード１２ｂの記述１２ｂ−２における開始タグに基づいて、ｎの値は３となり（ｎ＝２＋１＝３）、ｅの値は５となる（ｅ＝３＋２＝５）。また、ＸＳＬＴコード１２ｂの記述１２ｂ−３における開始タグに基づいて、ｎの値は４となり（ｎ＝３＋１＝４）、ｅの値は７となる（ｅ＝５＋２＝７）。
【００４８】
また、ステップＳ１１１において、ＸＳＬＴコード１２ｂの記述１２ｂ−１における終了タグに基づいて、ｎの値は５となり（ｎ＝４＋１＝５）、ｅの値は８となる（ｅ＝７＋１＝８）。また、ＸＳＬＴコード１２ｂの記述１２ｂ−２における終了タグに基づいて、ｎの値は６となり（ｎ＝５＋１＝６）、ｅの値は９となる（ｅ＝８＋１＝９）。また、ＸＳＬＴコード１２ｂの記述１２ｂ−３における終了タグに基づいて、ｎの値は７となり（ｎ＝６＋１＝７）、ｅの値は１０となる（ｅ＝９＋１＝１０）。
【００４９】
更に、ステップＳ１１７において、ｎの値は１が加算されて８となる。その結果、ステップＳ１１８において、複雑度の値（ｓｔｃｙｃ）は、
１０−８＋２×１＋０＝４
となり、模式図に基づいて算出した値と同じ値となる。
【００５０】
また、図１１は、ＸＳＬＴコードの第三の具体例を示す図である。図１１におけるＸＳＬＴコード１２ｃには、記述１２ｃ−１に、［］に囲まれた文字列が二つ含まれている（記述１２ｃ−１１、記述１２ｃ―１２）。［］を条件判断として扱うと、ＸＳＬＴコード１２ｃの構造は図１２のように示される。
【００５１】
図１２は、ＸＳＬＴコードの第三の具体例の模式図である。
【００５２】
図１２において、○で示されるｎ３１〜ｎ３６は、分岐点又は合流点を示す。したがって、ｎの値は「６」となる。また、矢印（→）で示されるｅ３１〜ｅ３７は、基本ブロックを示す。したがって、ｅの値は「７」となる。なお、ＸＳＬＴコード１２ｃは、一つのプログラムのコードであるため、ｐの値は「１」である。そうすると、図１２に基づけば、ＸＳＬＴコード１２ｃの複雑度は、
ＳＴＣＹＣ＝７―６＋２×１＝３
となる。
【００５３】
一方、ＸＳＬＴコード１２ｃの複雑度を、図４のフローチャートに基づいて算出すると以下のようになる。
【００５４】
図１３は、ＸＳＬＴコードの第三の具体例を複雑度の算出処理を示すフローチャートに当てはめた例を示す図である。図１３に示されるフローチャートは、図４より一部を抜粋したものであり、同一ステップには同一符号が付されている。
【００５５】
フローチャートによれば、ＸＳＬＴコード１２ｃの記述１２ｃ−１に基づいて、ステップＳ１１３において、カウント数は２となる。したがって、ステップＳ１１４においてｎの値は５となり（ｎ＝１＋２×２）、ステップＳ１１５においてｅの値は７となる（ｅ＝１＋３×２＝７）。更に、ステップＳ１１７において、ｎの値は１が加算されて６となる。その結果、ステップＳ１１８において、複雑度の値（ｓｔｃｙｃ）は、
７−６＋２×１＋０＝３
となり、模式図に基づいて算出した値と同じ値となる。
【００５６】
以上のように、本実施の形態におけるＸＳＬＴコード解析装置１０は、図４のフローチャートに基づく処理を実行することにより、ＸＰａｔｈにおける［］のようなＸＳＬＴに特有の文法を考慮してサイクロマティック複雑度をより適切に算出することができる。
【００５７】
次に、関数コール数算出部１１２による関数コール数の算出処理について説明する。図１４は、関数コール数算出部によるＸＳＬＴコードの関数コール数の算出処理の処理手順を説明するためのフローチャートである。
【００５８】
ＸＳＬＴコードファイル１２のファイルの終端が検出されるまでＳ２０１ａ及びＳ２０１ｂに囲まれたループ処理を実行する。すなわち、ＸＳＬＴコードファイル１２内のコードを１行ずつ読み込み（Ｓ２０２）、読み込んだ行に「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の開始タグが含まれている場合（Ｓ２０３でＹｅｓ）、ステップＳ２０４以降の処理を実行する。
【００５９】
ステップＳ２０４において、関数コール数を０に初期化する。続いて、「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の終了タグが検出されるまで、Ｓ２０５ａ及びＳ２０５ｂのループ処理を行う。すなわち、ＸＳＬＴコードファイル１２内のコードを１行ずつ読み込み（Ｓ２０６）、各行について、「ｘｓｌ：ｃａｌｌｔｅｍｐｌａｔｅｓ」要素の開始タグ又は「ｘｓｌ：ａｐｐｌｙｔｅｍｐｌａｔｅｓ」要素の開始タグ等、テンプレートを呼び出すための要素の開始タグが含まれているか否かを判定する（Ｓ２０７）。カレント行に当該開始タグが含まれている場合（Ｓ２０７）、関数コール数に１を加算する。
【００６０】
したがって、「ｘｓｌ：ｃａｌｌｔｅｍｐｌａｔｅｓ」要素又は「ｘｓｌ：ａｐｐｌｙｔｅｍｐｌａｔｅｓ」要素の数、すなわちテンプレートコール数が関数コール数としてカウントされる。
【００６１】
以上のように、本実施の形態におけるＸＳＬＴコード解析装置１０は、図４のフローチャートに基づく処理を実行することにより、テンプレートコール数を関数コール数として算出することができる。
【００６２】
次に、最大ネスト数算出部１１３による最大ネスト数の算出処理について説明する。図１５は、最大ネスト数算出部によるＸＳＬＴコードの最大ネスト数の算出処理の処理手順を説明するためのフローチャートである。
【００６３】
ＸＳＬＴコードファイル１２のファイルの終端が検出されるまでＳ３０１ａ及びＳ３０１ｂに囲まれたループ処理を実行する。すなわち、ＸＳＬＴコードファイル１２内のコードを１行ずつ読み込み（Ｓ３０２）、読み込んだ行に「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の開始タグが含まれている場合（Ｓ３０３でＹｅｓ）、ステップＳ３０４以降の処理を実行する。
【００６４】
ステップＳ３０４において、ネスト数と最大ネスト数の双方を０に初期化する。ネスト数は、最大ネスト数を求めるための一時的な変数として用いられるものである。続いて、「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の終了タグが検出されるまで、Ｓ３０５ａ及びＳ３０５ｂのループ処理を行う。すなわち、ＸＳＬＴコードファイル１２内のコードを１行ずつ読み込み（Ｓ３０６）、各行についてステップＳ３０７，Ｓ３１１、及びＳ３１３の判定を行う。
【００６５】
ステップＳ３０７では、読み込んだ行（カレント行）に、「ｘｓｌ：ｉｆ」要素の開始タグ又は「ｘｓｌ：ｗｈｅｎ」要素の開始タグが含まれているか否かを判定する。カレント行に当該開始タグが含まれている場合（Ｓ３０７でＹｅｓ）、ネスト数に１を加算する（Ｓ３０８）。当該要素の開始によって、条件判断の階層が１段階深くなるからである。続いて、ネスト数と最大ネスト数とを比較し（Ｓ３０９）、ネスト数の方が最大ネスト数より大きい場合（Ｓ３０９でＹｅｓ）、最大ネスト数の値にネスト数の値を代入する（Ｓ３１０）。
【００６６】
続いて、ステップＳ３１１では、カレント行に、「ｘｓｌ：ｉｆ」要素の終了タグ又は「ｘｓｌ：ｗｈｅｎ」要素の終了タグが含まれているか否かを判定する。カレント行に当該終了タグが含まれている場合（Ｓ３１１でＹｅｓ）、ネスト数から１を減算する（Ｓ３１２）。当該要素の終了によって、条件判断の階層が１段階浅くなるからである。
【００６７】
上記ステップＳ３０７からＳ３１２までの処理によって、「ｘｓｌ：ｉｆ」要素又は「ｘｓｌ：ｗｈｅｎ」要素の終了タグが検出されるまで連続して検出される当該要素の開始タグの数に基づいて最大ネスト数が算出される。
【００６８】
続いて、ステップＳ３１３では、カレント行が、「ｓｅｌｅｃｔ」属性を含むか否かを判定する。カレント行が、「ｓｅｌｅｃｔ」属性を含む場合（Ｓ３１３でＹｅｓ）、「ｓｅｌｅｃｔ」属性の値に指定されているＸＰａｔｈ内における［］で囲まれた文字列の数をネスト数に加算する（Ｓ３１４）。上述したように、ＸＰａｔｈにおける［］において条件判断が行われるため、［］の存在も条件判断の入れ子として扱うというわけである。続いて、ネスト数と最大ネスト数とを比較し（Ｓ３１５）、ネスト数の方が最大ネスト数より大きい場合（Ｓ３１５でＹｅｓ）、最大ネスト数の値にネスト数の値を代入する（Ｓ３１６）。
【００６９】
上記ステップＳ３１３からＳ３１６によって、ＸＰａｔｈ内における［］の存在についても最大ネスト数の算出にあたって考慮されることになる。
【００７０】
ＸＳＬＴコードファイル１２のファイルの終端が検出されると、図１５の処理は終了する。
【００７１】
以上のように、本実施の形態におけるＸＳＬＴコード解析装置１０は、図１５のフローチャートに基づく処理を実行することにより、ＸＰａｔｈ内における［］の存在等、ＸＳＬＴコードに特有の文法を考慮して最大ネスト数を算出することができる。
【００７２】
以上、本発明の実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【図面の簡単な説明】
【００７３】
【図１】サイクロマティック複雑度を説明するための図である。
【図２】本発明の実施の形態におけるＸＳＬＴコード解析装置のハードウェア構成例を示す図である。
【図３】本発明の実施の形態におけるＸＳＬＴコード解析装置の機能構成例を示す図である。
【図４】サイクロマティック複雑度算出部によるＸＳＬＴコードのサイクロマティック複雑度の算出処理の処理手順を説明するためのフローチャートである。
【図５】ＸＳＬＴコードの第一の具体例を示す図である。
【図６】ＸＳＬＴコードの第一の具体例の模式図である。
【図７】ＸＳＬＴコードの第一の具体例を複雑度の算出処理を示すフローチャートに当てはめた例を示す図である。
【図８】ＸＳＬＴコードの第二の具体例を示す図である。
【図９】ＸＳＬＴコードの第二の具体例の模式図である。
【図１０】ＸＳＬＴコードの第二の具体例を複雑度の算出処理を示すフローチャートに当てはめた例を示す図である。
【図１１】ＸＳＬＴコードの第三の具体例を示す図である。
【図１２】ＸＳＬＴコードの第三の具体例の模式図である。
【図１３】ＸＳＬＴコードの第三の具体例を複雑度の算出処理を示すフローチャートに当てはめた例を示す図である。
【図１４】関数コール数算出部によるＸＳＬＴコードの関数コール数の算出処理の処理手順を説明するためのフローチャートである。
【図１５】最大ネスト数算出部によるＸＳＬＴコードの最大ネスト数の算出処理の処理手順を説明するためのフローチャートである。
【符号の説明】
【００７４】
１０          ＸＳＬＴコード解析装置
１１          ＸＳＬＴメトリクス解析部
１２          ＸＳＬＴコードファイル
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        演算処理装置
１０５        表示装置
１０６        入力装置
１１１        サイクロマティック複雑度算出部
１１２        関数コール数算出部
１１３        最大ネスト数算出部
Ｂ            バス
【図１】
2007219643.tif 000003
【図２】
2007219643.tif 000004
【図３】
2007219643.tif 000005
【図４】
2007219643.tif 000006
【図５】
2007219643.tif 000007
【図６】
2007219643.tif 000008
【図７】
2007219643.tif 000009
【図８】
2007219643.tif 000010
【図９】
2007219643.tif 000011
【図１０】
2007219643.tif 000012
【図１１】
2007219643.tif 000013
【図１２】
2007219643.tif 000014
【図１３】
2007219643.tif 000015
【図１４】
2007219643.tif 000016
【図１５】
2007219643.tif 000017