(57)【要約】      （修正有）【課題】JavaScript（登録商標）スクリプトファイルに関する各種メトリクス値を測定する方法及びシステムを提供する。【解決手段】ユーザーの入力した設定情報を取得しS201、設定情報に基づいてJavaScriptスクリプトファイルを導入しS202、JavaScriptスクリプトファイルの文法規則に基づいてJavaScriptスクリプトファイルを文法解析ツリーに逐一対応するように変換しS203、文法解析ツリーの各ノードの各メトリクス項目のメトリクス値を計算しS204、レポートを生成するS205。【効果】複数のJavaScriptスクリプトファイルのバッチ指定とバッチ実行が可能になり、また測定されるJavaScriptスクリプトファイルのメトリクス項目を自由に選択することができる。【選択図】図２
2015158909.tif 000002
【特許請求の範囲】
【請求項１】
ユーザーの入力した、測定される少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得する取得ステップであって、前記設定情報が前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報及び測定される少なくとも一つのメトリクス項目を含む、取得ステップと、
前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを導入する導入ステップと、
JavaScriptスクリプトファイルの文法規則に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを、ファイルノード、前記ファイルノードの次の階級のノードとなるN個のクラスノード、並びに前記ファイルノード及び/または前記クラスノードの次の階級のノードとなるM個の関数ノードを含む（N≧0、M≧1）少なくとも一つの文法解析ツリーに逐一対応するように変換する文法解析ステップであって、前記ファイルノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイルの全内容と定義され、前記クラスノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントと定義され、前記ファイルノードの次の階級のノードとなる関数ノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントを除く関数ステートメントと定義され、前記クラスノードの次の階級のノードとなる関数ノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメント内の関数ステートメントと定義される、文法解析ステップと、
前記測定される少なくとも一つのメトリクス項目内の各ファイルノードの各メトリクス項目のメトリクス値を計算し、前記測定される少なくとも一つのメトリクス項目内の各クラスノードの各メトリクス項目のメトリクス値を計算し、前記測定される少なくとも一つのメトリクス項目内の各関数ノードの各メトリクス項目のメトリクス値を計算する計算ステップと、
前記少なくとも一つのJavaScriptスクリプトファイルの各ノードの各メトリクス項目のメトリクス値を列記したレポートを生成するレポートステップと、を含むことを特徴とするJavaScriptスクリプトファイルの測定方法。
【請求項２】
前記レポートステップは、
各ノードの各メトリクス項目のメトリクス値とそれに対応するしきい値とを比較するしきい値比較ステップと、
ノードのメトリクス項目のメトリクス値がそれに対応するしきい値を越えた場合は、前記ノードのメトリクス項目のメトリクス値を強調して表示する形式で前記レポートを生成するレポート生成ステップと、をさらに含むことを特徴とする請求項1に記載の測定方法。
【請求項３】
前記設定情報は、所定しきい値、及び前記所定しきい値の有効/無効を示すしきい値使用情報を含み、前記所定しきい値は、前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目の所定しきい値と、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目の所定しきい値と、前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目の所定しきい値とを含み、
前記しきい値使用情報が前記所定しきい値が有効であることを示した場合は、前記しきい値比較ステップにおいて前記所定しきい値を使用して比較を行い、
前記しきい値使用情報が前記所定しきい値が無効であることを示した場合は、前記しきい値比較ステップにおいてデフォルトしきい値を使用して比較を行い、前記デフォルトしきい値は、前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目のデフォルトしきい値と、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目のデフォルトしきい値と、前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目のデフォルトしきい値とを含むことを特徴とする請求項2に記載の測定方法。
【請求項４】
前記メトリクス項目は、コード行数、循環的複雑度、静的経路数、関数内最大ネスト数、パラメータ数、継承の深さ、サブクラス数を含み、前記コード行数は、ファイルノード、クラスノード及び関数ノードを単位として測定を行うメトリクス項目であり、前記静的経路数、前記関数内最大ネスト数及び前記パラメータ数は、関数ノードを単位として測定を行うメトリクス項目であり、前記継承の深さ及び前記サブクラス数は、クラスノードを単位として測定を行うメトリクス項目であることを特徴とする請求項3に記載の測定方法。
【請求項５】
前記レポートがHTML形式で出力されることを特徴とする請求項1乃至4のいずれか一つに記載の測定方法。
【請求項６】
前記Aクラス関数ステートメントが(function(){//内容})()タイプの関数ステートメントと定義されることを特徴とする請求項1乃至4のいずれか一つに記載の測定方法。
【請求項７】
ユーザーの入力した測定される少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得する取得モジュールであって、前記設定情報が前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報及び測定される少なくとも一つのメトリクス項目を含む、取得モジュールと、
前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを導入する導入モジュールと、
JavaScriptスクリプトファイルの文法規則に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを、ファイルノード、前記ファイルノードの次の階級のノードとなるN個のクラスノード、並びに前記ファイルノード及び/または前記クラスノードの次の階級のノードとなるM個の関数ノードを含む（N≧0、M≧1）少なくとも一つの文法解析ツリーに逐一対応するように変換する文法解析モジュールであって、前記ファイルノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイルの全内容と定義され、前記クラスノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントと定義され、前記ファイルノードの次の階級のノードとなる関数ノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントを除く関数ステートメントと定義され、前記クラスノードの次の階級のノードとなる関数ノードは、自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメント内の関数ステートメントと定義される、文法解析モジュールと、
前記測定される少なくとも一つのメトリクス項目内の各ファイルノードの各メトリクス項目のメトリクス値、前記測定される少なくとも一つのメトリクス項目内の各クラスノードの各メトリクス項目のメトリクス値、及び前記測定される少なくとも一つのメトリクス項目内の各関数ノードの各メトリクス項目のメトリクス値をそれぞれ計算する計算モジュールと、
前記少なくとも一つのJavaScriptスクリプトファイルの各ノードの各メトリクス項目のメトリクス値を列記したレポートを生成するレポートモジュールと、を含むことを特徴とするJavaScriptスクリプトファイルの測定システム。
【請求項８】
前記レポートモジュールは、
各ノードの各メトリクス項目のメトリクス値とそれに対応するしきい値を比較するしきい値比較モジュールと、
ノードのメトリクス項目のメトリクス値がそれに対応するしきい値を越えた場合は、前記ノードのメトリクス項目のメトリクス値を強調して表示する形式で前記レポートを生成するレポート生成モジュールと、をさらに含むことを特徴とする請求項7に記載の測定システム。
【請求項９】
前記設定情報は、所定しきい値、及び前記所定しきい値の有効/無効を示すしきい値使用情報を含み、前記所定しきい値が、前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目の所定しきい値と、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目の所定しきい値と、前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目の所定しきい値とを含み、
前記しきい値使用情報が、前記所定しきい値が有効であることを示した場合は、前記しきい値比較モジュールが前記所定しきい値を使用して比較を行い、
前記しきい値使用情報が前記所定しきい値が無効であることを示した場合は、前記しきい値比較モジュールがデフォルトしきい値を使用して比較を行い、前記デフォルトしきい値が、前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目のデフォルトしきい値と、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目のデフォルトしきい値と、前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目のデフォルトしきい値とを含むことを特徴とする請求項8に記載の測定システム。
【請求項１０】
前記メトリクス項目は、コード行数、循環的複雑度、静的経路数、関数内最大ネスト数、パラメータ数、継承の深さ、サブクラス数を含み、前記コード行数は、ファイルノード、クラスノード及び関数ノードを単位として測定を行うメトリクス項目であり、前記静的経路数、前記関数内最大ネスト数及び前記パラメータ数は、関数ノードを単位として測定を行うメトリクス項目であり、前記継承の深さ及び前記サブクラス数は、クラスノードを単位として測定を行うメトリクス項目であることを特徴とする請求項9に記載の測定システム。
【請求項１１】
前記レポートがHTML形式で出力されることを特徴とする請求項7乃至10のいずれか一つに記載の測定システム。
【請求項１２】
前記Aクラス関数ステートメントが(function(){//内容})()タイプの関数ステートメントと定義されることを特徴とする請求項7乃至10のいずれか一つに記載の測定システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はJavaScript（登録商標）スクリプトファイルに関し、特にJavaScriptスクリプトファイルの測定方法と測定システムに関する。
【背景技術】
【０００２】
ソフトの質においては、コードの質が大きな比重を占めている。コードの質の測定にはメトリクス（Metrics）と呼ばれる指標がある。メトリクスはコードの規模、複雑性、凝集度（コード内の相互に関係する要素の分散度）、結合度（クラスまたはモジュール間パラメータ、属性などの依存度）などの数値化または定量的評価を行う指標である。該指標はコードの修正、理解、及びテストの容易さを保障する重要な手段の一つと認識されている。
【０００３】
BS（ブラウザとサーバ）構造のWebアプリケーションの普及に伴い、対象とイベントによって駆動され、且つ安全性を有するクライアント側スクリプト言語として、JavaScriptが再度注目を集めている。しかし、JavaScriptスクリプトファイル（JavaScriptコード）の測定に用いることのできるメトリクスのシステムは極めて少なく、また機能も多くなかった。Webアプリケーションの規模が次第に大きく、複雑になってきているため、JavaScriptスクリプトファイルの特定の測定もますます重要になってきている。
【０００４】
現在、従来のJavaScriptスクリプトファイルを測定可能なメトリクスのツールは以下のとおりである。
【０００５】
1）Oxy  Project  Metricsツール：該ツールはコード行数を統計することしかできない。
【０００６】
2）jsmeterツール：該ツールは一定程度のメトリクスを測定できるが、該ツールが測定可能なメトリクス項目が少なく、また該ツールはもともとJavaScriptにより開発されたWebアプリケーションであるため、ブラウザのサポートが必要であり、拡大することができず、使い勝手が悪い。該ツールを使用して測定を行うときは、コードをアップロードする必要があり、サーバ側で測定し、結果をユーザーに戻しているため、その安全性が比較的低い。
【０００７】
3）EZ-Metricsツール：該ツールはコード行数を統計できるが、オブジェクト指向に特化したJavaScriptスクリプトファイルを測定することができない。また複数のJavaScriptスクリプトファイルのバッチ指定とバッチ実行が不可能であり、拡張もできない。
【０００８】
以上から分かるように、前記の従来の測定ツールには以下の問題がある。基本的にJavaScriptスクリプトファイルのコード行数しか測定できない。ネットワークを介してコードをアップロードしてサーバ側で測定する必要があるため、安全性が低い。オブジェクト指向に特化したJavaScriptスクリプトファイルを測定することができず、例えば継承の深さ（DIT）やサブクラス数（NOC）を測定できない。複数のJavaScriptスクリプトファイルのバッチ指定とバッチ実行が不可能である。そして、拡張が不可能で、性能不良である。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来技術に存在する前記問題に鑑み、本発明はJavaScriptスクリプトファイルの測定方法と測定システムを提供することを目的とする。本発明の測定方法と測定システムは、複数のJavaScriptスクリプトファイルのバッチ指定とバッチ実行が可能になるとともに、測定すべきJavaScriptスクリプトファイルのメトリクス項目を自由に選択することができる。
【課題を解決するための手段】
【００１０】
本発明の一つの面においては、ユーザーの入力した測定される少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得する取得ステップであって、前記設定情報が前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報及び測定される少なくとも一つのメトリクス項目を含む、取得ステップと、前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを導入する導入ステップと、JavaScriptスクリプトファイルの文法規則に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを少なくとも一つの文法解析ツリーに逐一対応するように変換する文法解析ステップであって、前記文法解析ツリーはファイルノード、前記ファイルノードの次の階級のノードとなるN個のクラスノード、並びに前記ファイルノード及び/または前記クラスノードの次の階級のノードとなるM個の関数ノードを含み（N≧0、M≧1）、ファイルノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイルの全内容と定義され、クラスノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントと定義され、前記ファイルノードの次の階級のノードとなる関数ノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントを除く関数ステートメントと定義され、前記クラスノードの次の階級のノードとなる関数ノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメント内の関数ステートメントと定義される、文法解析ステップと、前記測定される少なくとも一つのメトリクス項目内の各ファイルノードの各メトリクス項目のメトリクス値、前記測定される少なくとも一つのメトリクス項目内の各クラスノードの各メトリクス項目のメトリクス値、及び前記測定される少なくとも一つのメトリクス項目内の各関数ノードの各メトリクス項目のメトリクス値を計算する計算ステップと、前記少なくとも一つのJavaScriptスクリプトファイルの各ノードの各メトリクス項目のメトリクス値を列記するレポートを生成するレポートステップと、を含むJavaScriptスクリプトファイルの測定方法を提供する。
【００１１】
前記レポートステップは、各ノードの各メトリクス項目のメトリクス値とそれに対応するしきい値を比較するしきい値比較ステップと、ノードのメトリクス項目のメトリクス値がそれに対応するしきい値を越えた場合、前記ノードのメトリクス項目のメトリクス値を強調して表示する方法でレポートを生成するレポート生成ステップと、をさらに含む。
【００１２】
前記設定情報は、所定しきい値、及び前記所定しきい値の有効/無効を示すしきい値使用情報を含み、前記所定しきい値は前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目の所定しきい値、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目の所定しきい値、及び前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目の所定しきい値を含み、前記しきい値使用情報が前記所定しきい値が有効であることを示した場合は、前記しきい値比較ステップにおいて前記所定しきい値を使用して比較を行い、前記しきい値使用情報が前記所定しきい値が無効であることを示した場合は、前記しきい値比較ステップにおいてデフォルトしきい値を使用して比較を行い、前記デフォルトしきい値が前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目のデフォルトしきい値、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目のデフォルトしきい値、及び前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目のデフォルトしきい値を含む。
【００１３】
本発明の二つ目の面においては、ユーザーの入力した測定される少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得する取得モジュールであって、前記設定情報が前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報及び測定される少なくとも一つのメトリクス項目を含む、取得モジュールと、前記少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを導入する導入モジュールと、JavaScriptスクリプトファイルの文法規則に基づいて前記少なくとも一つのJavaScriptスクリプトファイルを少なくとも一つの文法解析ツリーに逐一対応するように変換する文法解析モジュールであって、前記文法解析ツリーはファイルノード、前記ファイルノードの次の階級のノードとなるN個のクラスノード、並びに前記ファイルノード及び/または前記クラスノードの次の階級のノードとなるM個の関数ノードを含み（N≧0、M≧1）、該ファイルノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイルの全内容と定義され、クラスノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントと定義され、前記ファイルノードの次の階級のノードとなる関数ノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントを除く関数ステートメントと定義され、前記クラスノードの次の階級のノードとなる関数ノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメント内の関数ステートメントと定義される文法解析モジュールと、前記測定される少なくとも一つのメトリクス項目内の各ファイルノードの各メトリクス項目のメトリクス値、前記測定される少なくとも一つのメトリクス項目内の各クラスノードの各メトリクス項目のメトリクス値、及び前記測定される少なくとも一つのメトリクス項目内の各関数ノードの各メトリクス項目のメトリクス値を計算する計算モジュールと、前記少なくとも一つのJavaScriptスクリプトファイルの各ノードの各メトリクス項目のメトリクス値を列記するレポートを生成するレポートモジュールと、を含むJavaScriptスクリプトファイルの測定システムを提供する。
【００１４】
前記レポートモジュールは、各ノードの各メトリクス項目のメトリクス値とそれに対応するしきい値を比較するしきい値比較モジュールと、ノードのメトリクス項目のメトリクス値がそれに対応するしきい値を越えた場合、前記ノードのメトリクス項目のメトリクス値を強調して表示する方法でレポートを生成するレポート生成モジュールと、をさらに含む。
【００１５】
前記設定情報は、所定しきい値、及び前記所定しきい値の有効/無効を示すしきい値使用情報を含み、前記所定しきい値が、前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目の所定しきい値、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目の所定しきい値、そして前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目の所定しきい値を含み、前記しきい値使用情報が前記所定しきい値が有効であることを示した場合は、前記しきい値比較モジュールが前記所定しきい値を使用して比較を行い、前記しきい値使用情報が前記所定しきい値が無効であることを示した場合は、前記しきい値比較モジュールがデフォルトしきい値を使用して比較を行い、前記デフォルトしきい値は前記測定される少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目のデフォルトしきい値、前記測定される少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目のデフォルトしきい値、及び前記測定される少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目のデフォルトしきい値を含む。
【００１６】
本発明の一つと二つの面において、前記メトリクス項目はコード行数（LOC）、循環的複雑度（CYC）、静的経路数（PTH）、関数内最大ネスト数（NBD）、パラメータ数（PAR）、継承の深さ（DIT）、サブクラス数（NOC）を含み、前記コード行数はファイルノード、クラスノード及び関数ノードを単位として測定を行うメトリクス項目であり、前記静的経路数、前記関数内最大ネスト数及び前記パラメータ数は関数ノードを単位として測定を行うメトリクス項目であり、前記継承の深さ及び前記サブクラス数はクラスノードを単位として測定を行うメトリクス項目である。
【００１７】
前記レポートはHTML形式で出力される。
【００１８】
前記Aクラス関数ステートメントは、(function(){//内容})()タイプの関数ステートメントとして定義される。
【発明の効果】
【００１９】
本発明の測定方法と測定システムを採用することで、オブジェクト指向に特化したJavaScriptスクリプトファイルに対してメトリクス測定を行い、複数のJavaScriptスクリプトファイルのバッチ指定とバッチ実行を実現し、測定すべきJavaScriptスクリプトファイルのメトリクス項目を自由に選択し、測定すべきJavaScriptスクリプトファイルの各メトリクスのしきい値を自由に修正し、HTML形式でレポートを出力することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の第一実施例に係わるJavaScriptスクリプトファイルの測定システムの構造ブロック図である。
【図２】本発明の第一実施例に係わるJavaScriptスクリプトファイルの測定方法のフローチャートである。
【図３】本発明の第一実施例に係わる文法解析ツリーの実例概念図である。
【図４】本発明の第一実施例に係わるLOC計算機内で使用するLOCアルゴリズムの実例フローチャートである。
【図５】本発明の第一実施例に係わるCYC計算機内で使用するCYCアルゴリズムの実例フローチャートである。
【図６】本発明の第一実施例に係わるPTH計算機内で使用するPTHアルゴリズムの実例フローチャートである。
【図７】本発明の第一実施例に係わるNBD計算機内で使用するNBDアルゴリズムの実例フローチャートである。
【図８】本発明の第一実施例に係わるPAR計算機内で使用するPARアルゴリズムの実例フローチャートである。
【図９】本発明の第一実施例に係わるDIT計算機内で使用するDITアルゴリズムの実例フローチャートである。
【図１０】本発明の第一実施例に係わるNOC計算機内で使用するNOCアルゴリズムの実例フローチャートである。
【図１１】本発明の第二実施例に係わるJavaScriptスクリプトファイルの測定システムの構造ブロック図である。
【図１２】本発明の第二実施例に係わるJavaScriptスクリプトファイルの測定方法のフローチャートである。
【図１３】本発明の第二実施例に係わる測定システムの生成するレポートの実例概念図である。
【発明を実施するための形態】
【００２１】
以下、図面を参考に本発明を実施するための形態を説明する。
【００２２】
＜第一実施例＞
以下、図1から図10を参照しながら本発明の第一実施例を詳細に説明する。
【００２３】
図1は、本発明の第一実施例に係わるJavaScriptスクリプトファイルの測定システムの構造ブロック図である。図1に示すように、本発明の第一実施例に係わる測定システム100は、取得モジュール110、導入モジュール120、文法解析モジュール130、計算モジュール140、レポートモジュール150、記憶モジュール160を含む。計算モジュール140はさらにLOC計算機141、CYC計算機142、PTH計算機143、NBD計算機144、PAR計算機145、DIT計算機146及びNOC計算機147を含む。
【００２４】
図2は、本発明の第一実施例に係わるJavaScriptスクリプトファイルの測定方法のフローチャートである。図1と図2に示すように、まず、測定システム100の取得モジュール110が取得ステップS201を実行する。取得ステップS201では、取得モジュール110が、ユーザーの入力した測定すべき少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得する。該設定情報は測定すべき少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報と、測定すべき少なくとも一つのメトリクス項目を含む。ユーザーの入力した測定すべき少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得すると、取得モジュール110は取得した設定情報内の測定すべき少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報を導入モジュール120に送信し、取得した設定情報内の測定すべき少なくとも一つのメトリクス項目を記憶モジュール160に記憶する。
【００２５】
本実施例では、ユーザーは測定すべき少なくとも一つのJavaScriptスクリプトファイル内の各JavaScriptスクリプトファイルの例えば、E:/jsmetric/oojs/noc.jsといった具体的な記憶位置情報を指定できるか、または、測定すべき少なくとも一つのJavaScriptスクリプトファイルの共有する例えばE:/jsmetricといった記憶位置情報を指定することができる。ユーザーが測定すべき少なくとも一つのJavaScriptスクリプトファイルの共有する記憶位置情報を指定した場合、例えば、ユーザーがローカルパーソナルコンピュータ上のあるフォルダを指定した場合、測定システム100は、該フォルダの中のサブフォルダ内の全てのJavaScriptスクリプトファイルを含む、該フォルダ内の全てのJavaScriptスクリプトファイルを測定する。測定システム100は、ユーザーの入力した測定すべき少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報に基づいて、一回の実行においてローカルパーソナルコンピュータ及びローカルエリアネットワーク内のパーソナルコンピュータ上の全てのJavaScriptスクリプトファイルを測定することが可能である。
【００２６】
本実施例において、ユーザーの指定できるメトリクス項目は、コード行数（LOC）、循環的複雑度（CYC）、静的経路数（PTH）、関数内最大ネスト数（NBD）、パラメータ数（PAR）、継承の深さ（DIT）、サブクラス数（NOC）を含む。必要に応じて、ユーザーは上記メトリクス項目から全てまたは一部のメトリクス項目を指定できる。本実施例では、上記7つのメトリクス項目しか挙げていないが、指定できるメトリクス項目は上に挙げた7つのメトリクス項目に限るものではない。必要に応じて、測定すべきメトリクス項目を拡張することができる。
【００２７】
次に、測定システム100の導入モジュール120は、導入ステップS202を実行する。導入ステップS202において、導入モジュール120は少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報に基づいて少なくとも一つのJavaScriptスクリプトファイルを導入し、導入した少なくとも一つのJavaScriptスクリプトファイルを文法解析モジュール130に送信する。
【００２８】
次に、測定システム100の文法解析モジュール130は文法解析ステップS203を実行する。文法解析ステップS203において、文法解析モジュール130はJavaScriptスクリプトファイルの文法規則に基づいて導入した少なくとも一つのJavaScriptスクリプトファイルを少なくとも一つの文法解析ツリーに逐一対応するように変換し、各文法解析ツリーは１個のファイルノード、ファイルノードの次の階級のノードとなるN個のクラスノード、及びファイルノード及び/またはクラスノードの次の階級のノードとなるM個の関数ノードを含み、N≧0、M≧1である。
【００２９】
本実施例では、ファイルノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイルの全内容と定義され、クラスノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントと定義され、ファイルノードの次の階級のノードとなる関数ノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメントを除く関数ステートメントと定義され、そしてクラスノードの次の階級のノードとなる関数ノードは自身の所在する文法解析ツリーに対応するJavaScriptスクリプトファイル内のAクラス関数ステートメント内の関数ステートメントと定義される。
【００３０】
本実施例では、JavaScriptスクリプトファイル内の(function(){//内容})()タイプの関数ステートメントをAクラス関数ステートメントと定義する。また、必要に応じて、その他タイプの関数ステートメントもAクラス関数ステートメントと定義できる。
【００３１】
図3は本発明の第一実施例に係わる文法解析ツリー300の実例概念図である。図3に示すように、あるJavaScriptスクリプトファイルは文法解析モジュール130によって対応するように文法解析ツリー300に変換され、該文法解析ツリー300は一つのファイルノード311、二つのクラスノード321‐322、及び三つの関数ノード331‐333を含み、クラスノード321‐322と関数ノード331はファイルノード311の次の階級のノードであり、関数ノード332はクラスノード321の次の階級のノードであり、そして関数ノード333はクラスノード322の次の階級のノードである。図3に示すクラスノードと関数ノードの数は例示的なものにすぎず、本発明のクラスノードと関数ノードの数は図3に示す数に限るものではない。また、JavaScriptスクリプトファイルの違いによって、文法解析モジュール130を経て変換した文法解析ツリー300内のクラスノードと関数ノードの数も異なる。
【００３２】
また、本実施例では、各ファイルノード、各クラスノード及び各関数ノードはそれぞれ対応する名称を有している。例えば、ファイルノード311は該ファイルノードに対応するJavaScriptスクリプトファイルのソースファイル名をその名称として使用し、例えば「E:/jsmetric/oojs/noc.js」である。クラスノード321‐322はそれぞれ対応する  Aクラス関数ステートメントをその名称に使用し、（function(）{//内容})（）タイプの関数ステートメントをAクラス関数ステートメントの例とすると、クラスノード321‐322はそれぞれ対応する（function(）{//内容})（）タイプの関数ステートメント内の最後に実行する位置に置いた内容を使用する、即ちそれぞれ対応する（function(）{//内容})（）タイプの関数ステートメント内の最後の「｝」の前に近接する内容をその名称とし、関数ノード331‐333はそれぞれ対応する関数ステートメントの関数名をその名称とする。
【００３３】
文法解析モジュール130は、JavaScriptスクリプトファイルの文法規則に基づいて少なくとも一つのJavaScriptスクリプトファイルを少なくとも一つの文法解析ツリーに逐一対応するように変換した後で、文法解析モジュール130が変換した少なくとも一つの文法解析ツリーを記憶モジュール160に記憶する、または同時に変換した少なくとも一つの文法解析ツリーを計算モジュール140に送信できる。
【００３４】
次に、測定システム100の計算モジュール140は計算ステップS204を実行する。計算ステップS204では、計算モジュール140は記憶モジュール160に記憶した全ての文法解析ツリーまたは文法解析モジュール130の送信した全ての文法解析ツリーを取得し、記憶モジュール160に記憶した測定すべき少なくとも一つのメトリクス項目に基づいて、測定すべき少なくとも一つのメトリクス項目内の各ファイルノードの各メトリクス項目のメトリクス値を計算し、測定すべき少なくとも一つのメトリクス項目内の各クラスノードの各メトリクス項目のメトリクス値を計算し、そして測定すべき少なくとも一つのメトリクス項目内の各関数ノードの各メトリクス項目のメトリクス値を計算する。続いて、計算モジュール140は計算結果をレポートモジュール150に送信する。
【００３５】
以上に述べたように、本実施例では、測定可能なメトリクス項目は、コード行数（LOC）、循環的複雑度（CYC）、静的経路数（PTH）、関数内最大ネスト数（NBD）、パラメータ数（PAR）、継承の深さ（DIT）、サブクラス数（NOC）を含む。上記7つのメトリクス項目のうち、メトリクス項目LOCはファイルノード、クラスノード及び関数ノードを単位として測定を行うメトリクス項目であり、メトリクス項目PTH、NBD、PARは関数ノードを単位として測定を行うメトリクス項目であり、そしてメトリクス項目DITとNOCはクラスノードを単位として測定を行うメトリクス項目である。本発明の測定システム100は継承の深さ（DIT）、サブクラス数（NOC）を測定することができるため、オブジェクト指向に特化したJavaScriptスクリプトファイルを測定することができる。
【００３６】
続いて以下の文章ではメトリクス項目LOC、CYC、PTH、NBD、PAR、DIT及びNOCの計算モジュール140内のLOC計算機141、CYC計算機142、PTH計算機143、NBD計算機144、PAR計算機145、DIT計算機146及びNOC計算機147における計算方法を詳細に説明する。
【００３７】
次に、測定システム100のレポートモジュール150はレポートステップS205を実行する。レポートステップS204では、レポートモジュール150が計算モジュール140の計算結果に基づいてレポートを生成し、該レポートは測定した全てのJavaScriptスクリプトファイルの各ノードの各メトリクス項目のメトリクス値を列記している。
【００３８】
以下、図4〜10を参照しながらメトリクス項目LOC、CYC、PTH、NBD、PAR、DIT及びNOCの計算モジュール140内のLOC計算機141、CYC計算機142、PTH計算機143、NBD計算機144、PAR計算機145、DIT計算機146及びNOC計算機147における計算方法を詳細に説明する。
【００３９】
（1）LOC（Line  of  code）：コード行数
本実施例では、コード行数（LOC）は提供されるJavaScriptコードセグメントの最初から終わりまでの維持可能（有効）なコード行数を指し、注釈行と空行は含まない。LOCの計算は計算モジュール140内のLOC計算機141によって実現する。LOCの計算対象はファイルノード、クラスノードと関数ノードである。
【００４０】
LOC計算機141は対応するLOCアルゴリズムを使用して少なくとも一つの文法解析ツリー内の各ファイルノード、各クラスノードと各関数ノードのLOCのメトリクス値を計算する。言い換えると、各ファイルノードに対して、LOC計算機141は該ファイルノードに対応するJavaScriptコードセグメントの最初から終わりまでの維持可能なコード行数をカウントし、最終的に取得したカウント値をファイルノードのLOCのメトリクス値とし、各クラスノードに対して、LOC計算機141は該クラスノードに対応するJavaScriptコードセグメントの最初から終わりまでの維持可能なコード行数をカウントし、最終的に取得したカウント値をクラスノードのLOCのメトリクス値とし、各関数ノードに対して、LOC計算機141は該関数ノードに対応するJavaScriptコードセグメントの最初から終わりまでの維持可能なコード行数をカウントし、最終的に取得したカウント値を関数ノードのLOCのメトリクス値とする。
【００４１】
図4は本発明の第一実施例に係わるLOC計算機141内で使用するLOCアルゴリズムの実例フローチャートである。図4に示すように、本実施例のLOCアルゴリズム400のプロセスは、文法解析モジュール130を経由して変換した少なくとも一つの文法解析ツリーを取得し、該少なくとも一つの文法解析ツリーを走査して全てのノードを取り出し、各ノードの対応するJavaScriptコードセグメントのNodeToken位置の行番号に基づいて、この行番号の占める有効行数をカウントし、それによって各ノードのLOCのカウント値（メトリクス値）を取得する。
【００４２】
図4はLOCアルゴリズムの一例を示したに過ぎず、本発明は図4に示すLOCアルゴリズム400に限るものではない。図4に示すLOCアルゴリズム400のほか、その他のLOCアルゴリズムを採用することもでき、それぞれ各ファイルノード、各クラスノード、各関数ノードに対応するJavaScriptコードセグメントの最初から終わりまでの維持可能（有効）なコード行数のカウント値を取得出来さえすればよい。
【００４３】
（2）CYC（Cyclomatic  Complexity）：循環的複雑度
本実施例では、循環的複雑度（CYC）は提供されたJavaScriptコードセグメント内のControlFlow（制御フロー）ノードの数を指す。CYCの計算は計算モジュール140内のCYC計算機142によって実現する。CYCの計算対象は関数ノードのみである。
【００４４】
CYC計算機142は対応するCYCアルゴリズムを使用して少なくとも一つの文法解析ツリー内の各関数ノードのCYCのメトリクス値を計算する。言い換えると、各関数ノードに対して、CYC計算機142は該関数ノードに対応するJavaScriptコードセグメント内のControlFlowノードの数をカウントし、最終的に取得したカウント値を該関数ノードのCYCのメトリクス値とする。
【００４５】
本実施例では、文法解析モジュール130は「If文」、「Else文」、「Catch」、「Case節」、「デフォルトCase」、「条件式」、「Iteration文」、「ロジックAND式」、「ロジックOR式」を、それぞれ一つの有効なControlFlowノードとして識別する。
【００４６】
図5は本発明の第一実施例に係わるCYC計算機内で使用するCYCアルゴリズムの実例フローチャートである。図5に示すように、本実施例のCYCアルゴリズム500のプロセスは次のとおりである。文法解析モジュール130を経由して変換した少なくとも一つの文法解析ツリーを取得し、該少なくとも一つの文法解析ツリーを走査して全ての関数ノードを取り出し、各関数ノードの対応するJavaScriptコードセグメントのControlFlowノードの数をカウントし、それによって各関数ノードのCYCのカウント値（メトリクス値）を取得する。
【００４７】
図5はCYCアルゴリズムの一例を示したに過ぎず、本発明は図5に示すCYCアルゴリズム500に限るものではない。図5に示すCYCアルゴリズム500のほか、その他のCYCアルゴリズムを採用することもでき、各関数ノードに対応するJavaScriptコードセグメント内のControlFlowノードの数のカウント値を取得出来さえすればよい。
【００４８】
（3）PTH（Paths）：静的経路数
本実施例では、静的経路数（PTH）は提供されたJavaScriptコードセグメント内のControlFlowノードでの実行可能なパス数の上限を指す。PTHの計算は計算モジュール140内のPTH計算機143によって実現する。PTHの計算対象は関数ノードのみである。
【００４９】
PTH計算機143は対応するPTHアルゴリズムを使用して少なくとも一つの文法解析ツリー内の各関数ノードのPTHのメトリクス値を計算する。言い換えると、各関数ノードに対して、PTH計算機143は該関数ノードに対応するJavaScriptコードセグメント内のControlFlowノードでの実行可能なパス数の上限値を計算し、該上限値を該関数ノードのPTHのメトリクス値とする。
【００５０】
図6は本発明の第一実施例に係わるPTH計算機内で使用するPTHアルゴリズムの実例フローチャートである。図6に示すように、本実施例のPTHアルゴリズム600のプロセスは次の通りである。文法解析モジュール130を経由して変換した少なくとも一つの文法解析ツリーを取得し、該少なくとも一つの文法解析ツリーを走査して全ての関数ノードを取り出し、各関数ノードに対して、該関数ノードの対応するJavaScriptコードセグメント内でControlFlowノードがあるとき、まず、pth変数に1を足し、次に、再び戻って該ControlFlowノードのpth引数の値を求め、最後に外側のpth引数を掛けてから1を足し、取得した最後のpth引数値を上限値とし、それによって各関数ノードのPTHのメトリクス値を取得する。
【００５１】
図6はPTHアルゴリズムの一例を示したに過ぎず、本発明は図6に示すPTHアルゴリズム600に限るものではない。図6に示すPTHアルゴリズム600のほか、その他のPTHアルゴリズムを採用することもでき、各関数ノードに対応するJavaScriptコードセグメント内のControlFlowノードでの実行可能なパス数の上限値を取得出来さえすればよい。
【００５２】
（4）NBD（Nested  Block  Depth）：関数内最大ネスト数
本実施例では、関数内最大ネスト数（NBD）は提供されたJavaScriptコードセグメント内の関数内の最大ネスト数を指す。NBDの計算は計算モジュール140内のNBD計算機144によって実現する。NBDの計算対象は関数ノードのみである。
【００５３】
NBD計算機144は対応するNBDアルゴリズムを使用して少なくとも一つの文法解析ツリー内の各関数ノードのNBDのメトリクス値を計算する。言い換えると、各関数ノードに対して、NBD計算機144は該関数ノードに対応するJavaScriptコードセグメント内の関数内の最大ネスト数の数値を計算し、計算した最大ネスト数の数値を該関数ノードのNBDのメトリクス値とする。
【００５４】
図7は本発明の第一実施例に係わるNBD計算機内で使用するNBDアルゴリズムの実例フローチャートである。図7に示すように、本実施例のNBDアルゴリズム700のプロセスは次のとおりである。文法解析モジュール130を経由して変換した少なくとも一つの文法解析ツリーを取得し、該少なくとも一つの文法解析ツリーを走査して全ての関数ノードを取り出し、各関数ノードに対して、該関数ノードの対応するJavaScriptコードセグメント内でControlFlowノードがあるとき、まず、nbd引数に1を足し、次に、再び戻って該ControlFlowノードのnbd引数の値を求め、最後に取得した外側のnbd引数の最大値を最大ネスト数とし、それによって各関数ノードのNBDのメトリクス値を取得する。
【００５５】
図7はNBDアルゴリズムの一例を示したに過ぎず、本発明は図7に示すNBDアルゴリズム700に限るものではない。図7に示すNBDアルゴリズム700のほか、その他のNBDアルゴリズムを採用することもでき、各関数ノードに対応するJavaScriptコードセグメント内の関数内の最大ネスト数の数値を取得出来さえすればよい。
【００５６】
（5）PAR（Number  of  Parameters）：パラメータ数
本実施例では、パラメータ数（PAR）は提供されたJavaScriptコードセグメント内の関数のパラメータ数を指す。PARの計算は計算モジュール140内のPAR計算機145によって実現する。PARの計算対象は関数ノードのみである。
【００５７】
PAR計算機145は対応するPARアルゴリズムを使用して少なくとも一つの文法解析ツリー内の各関数ノードのPARのメトリクス値を計算する。言い換えると、各関数ノードに対して、PAR計算機145は該関数ノードに対応するJavaScriptコードセグメント内の関数のパラメータ数をカウントし、最終的に取得しカウント数値を該関数ノードのPARのメトリクス値とする。
【００５８】
図8は本発明の第一実施例に係わるPAR計算機内で使用するPARアルゴリズムの実例フローチャートである。図8に示すように、本実施例のPARアルゴリズム800のプロセスは次のとおりである。文法解析モジュール130を経由して変換した少なくとも一つの文法解析ツリーを取得し、該少なくとも一つの文法解析ツリーを走査して全ての関数ノードを取り出し、各関数ノードに対して、まず該関数ノードの対応するJavaScriptコードセグメント内の関数式ノードまたは関数説明ノードを取得し、次に、その形式パラメータ一覧を取得し、該形式パラメータ一覧内のパラメータの数をカウントし、それによって各関数ノードのPARのカウント値（メトリクス値）を取得する。
【００５９】
図8はPARアルゴリズムの一例を示したに過ぎず、本発明は図8に示すPARアルゴリズム800に限るものではない。図8に示すPARアルゴリズム800のほか、その他のPARアルゴリズムを採用することもでき、各関数ノードに対応するJavaScriptコードセグメント内のパラメータ数のカウント値を取得出来さえすればよい。
【００６０】
（6）DIT（Depth  of  inheritance  tree）：継承の深さ
本実施例では、継承の深さ（DIT）は継承階層の深さを指す。DITの計算は計算モジュール140内のDIT計算機146によって実現する。DITの計算対象はクラスノードのみである。
【００６１】
DIT計算機146は対応するDITアルゴリズムを使用して少なくとも一つの文法解析ツリー内の各クラスノードのDITのメトリクス値を計算する。
【００６２】
クラスノードのDITのメトリクス値は継承階層数の最上面となるルートクラスから計算できる。そのため、測定対象としてのクラスノードがルートクラスから直接継承している場合、そのDITのメトリクス値は1をカウントされる。例えば、JavaScriptスクリプトファイル内に15個の内部クラスがあるとすると、その中の最上層クラスは最上位の基礎クラスであり、そのため最上層クラスDITのメトリクス値は0となり、直接Objectクラスを継承したクラスのDITのメトリクス値は1となり、直接最上層クラスを継承したクラスの直系サブクラスのDITのメトリクス値は2となる。測定対象のクラスが継承JavaScriptスクリプトファイルの内部クラスである場合、内部クラスの全ての継承階層が計算される。
【００６３】
本実施例では、DIT計算機146は「A.inherit(B)」を継承するキーワードとして利用してクラスノードのDITを計算し、ここで、Aはサブクラス、Bは親クラスを表す。
【００６４】
本実施例では、測定システム100が１つのJavaScriptスクリプトファイルを測定した場合、DIT計算機146は、該JavaScriptスクリプトファイルに対応する文法解析ツリー内の全てのクラスノード間の継承関係を確定することで各クラスノードのDITのメトリクス値を計算する。測定システム100が複数のJavaScriptスクリプトファイルを測定した場合、DIT計算機146は、該複数のJavaScriptスクリプトファイルと逐一対応する複数の文法解析ツリー内の全てのクラスノード間の継承関係を確定することで各クラスノードのDITのメトリクス値を計算する。
【００６５】
図9は本発明の第一実施例に係わるDIT計算機内で使用するDITアルゴリズムの実例フローチャートである。図9に示すように、本実施例のDITアルゴリズム900のプロセスは次のとおりである。少なくとも一つの文法解析ツリー上の１クラスノードの現在クラス名を取得してそれをクラス名とする。クラス名＝「最上層」であれば、dit+0となり、反対であれば、dit+=1となる。
【００６６】
図9はDITアルゴリズムの一例を示したに過ぎず、本発明は図9に示すDITアルゴリズム900に限るものではない。図9に示すDITアルゴリズム900のほか、その他のDITアルゴリズムを採用することもでき、各クラスノードのDITのメトリクス値を取得出来さえすればよい。
【００６７】
（7）NOC（Number  of  Children）：サブクラス数
本実施例では、サブクラス数（NOC）は該クラスを直接的親クラスとして継承を行うサブクラスの数を指す。NOCの計算はNOC計算機147によって実現する。NOCの計算対象はクラスノードのみである。
【００６８】
NOC計算機147は対応するNOCアルゴリズムを使用して少なくとも一つの文法解析ツリー内の各クラスノードのNOCのメトリクス値を計算する。
【００６９】
本実施例では、NOC計算機147は「A.inherit(B)」を継承するキーワードとして利用してクラスノードのNOCを計算し、ここでAはサブクラス、Bは親クラスを表す。
【００７０】
本実施例では、測定システム100があるJavaScriptスクリプトファイルを測定したとき、NOC計算機147は、該JavaScriptスクリプトファイルに対応する文法解析ツリー内の全てのクラスノード間の継承関係を確定することで各クラスノードのNOCのメトリクス値を計算する。測定システム100が複数のJavaScriptスクリプトファイルを測定したとき、NOC計算機147は、該複数のJavaScriptスクリプトファイルと逐一対応する複数の文法解析ツリー内の全てのクラスノード間の継承関係を確定することで各クラスノードのNOCのメトリクス値を計算する。
【００７１】
図10は本発明の第一実施例に係わるNOC計算機内で使用するNOCアルゴリズムの実例フローチャートである。図10に示すように、本実施例のNOCアルゴリズム1000のプロセスは次のとおりである。あるクラスノードのクラス名を識別後、すべての文法解析ツリー内の全てのクラスノードを走査し、各クラスノードの親クラス名を取得する。親クラス名が該クラスノードのクラス名と同じ場合、noc+1となる。
【００７２】
図10はNOCアルゴリズムの一例を示したに過ぎず、本発明は図10に示すNOCアルゴリズム1000に限るものではない。図10に示すNOCアルゴリズム1000のほか、その他のNOCアルゴリズムを採用することもでき、各クラスノードのNOCのメトリクス値を取得出来さえすればよい。
【００７３】
本実施例では、上記7つのメトリクス項目しか挙げていないが、指定できるメトリクス項目は上に挙げた7つのメトリクス項目に限るものではない。必要に応じて、測定すべきメトリクス項目を拡大できる。本実施例では、文法解析モジュール130と計算モジュール140間の結合度が低いため、メトリクス項目を拡大したい場合、計算モジュール140内で相応のメトリクスアルゴリズムを備えた計算機を増やすだけでよい。
【００７４】
＜第二実施例＞
以下、図11と図12を参照しながら、本発明の第二実施例を詳細に説明する。
【００７５】
図11は本発明の第二実施例に係わるJavaScriptスクリプトファイルの測定システムの構造ブロック図である。図12は本発明の第二実施例に係わるJavaScriptスクリプトファイルの測定方法のフローチャートである。
【００７６】
図11に示すように、本発明の第二実施例に係わる測定システム1100は取得モジュール1110、導入モジュール1120、文法解析モジュール1130、計算モジュール1140、レポートモジュール1150、記憶モジュール1160を含む。第二実施例の導入モジュール1120、文法解析モジュール1130、計算モジュール1140、記憶モジュール1160は第一実施例の導入モジュール120、文法解析モジュール130、計算モジュール140、記憶モジュール160と同じである。本発明第二実施例の測定システム1110と第一実施例の測定システム110の違いは、取得モジュール1110の取得した設置情報が所定しきい値と該所定しきい値の有効/無効を示すしきい値使用情報をさらに含み、レポートモジュール1150がしきい値比較モジュール1151、平均値計算モジュール1152、総和計算モジュール1153とレポート生成モジュール1154をさらに含むことにある。
【００７７】
以下、図12に示す本発明第二実施例のJavaScriptスクリプトファイルの測定方法のフローチャートを参照しながら第二実施例と第一実施例の違いを詳細に説明する。第二実施例の測定方法のステップS1202からS1204は第一実施例の測定方法のステップS202からS204と同じであるため、ここではそれに関する説明を省略する。
【００７８】
図11と図12に示すように、取得ステップS1201では、測定システム1110の取得モジュール1110がユーザーの入力した測定すべき少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得し、該設定情報は測定すべき少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報と測定すべき少なくとも一つのメトリクス項目を含むほか、さらに所定しきい値と所定しきい値の有効/無効を示すしきい値使用情報を含む。ユーザーの入力した測定すべき少なくとも一つのJavaScriptスクリプトファイルに関連する設定情報を取得すると、取得モジュール1110が取得した設定情報内の測定すべき少なくとも一つのJavaScriptスクリプトファイルの記憶位置情報を導入モジュール1120に送信し、取得した設定情報内の測定すべき少なくとも一つのメトリクス項目、所定しきい値、所定しきい値の有効/無効を示すしきい値使用情報を記憶モジュール1160に記憶する。
【００７９】
所定しきい値は測定すべき少なくとも一つのメトリクス項目内の各ファイルノードの各メトリクス項目の所定しきい値、測定すべき少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目の所定しきい値、及び測定すべき少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目の所定しきい値を含む。
【００８０】
しきい値比較ステップS1205では、測定システム1110のレポートモジュール1150内のしきい値比較モジュール1151が記憶モジュール1160内に記憶した所定しきい値及び所定しきい値の有効/無効を示すしきい値使用情報を読み取る。しきい値使用情報が所定しきい値が有効であることを示した場合は、しきい値比較モジュール1151は所定しきい値を使用して計算モジュール1140の計算した結果と比較する。しきい値使用情報が所定しきい値が無効であることを示した場合は、しきい値比較モジュール1151は予め記憶モジュール1160に記憶したデフォルトしきい値を使用して計算モジュール1140の計算した結果と比較する。それから、しきい値比較モジュール1151は最終的な比較結果をレポート生成モジュール1154に送信する。
【００８１】
デフォルトしきい値は測定すべき少なくとも一つのメトリクス項目内のファイルノードの各メトリクス項目のデフォルトしきい値、測定すべき少なくとも一つのメトリクス項目内のクラスノードの各メトリクス項目のデフォルトしきい値、及び測定すべき少なくとも一つのメトリクス項目内の関数ノードの各メトリクス項目のデフォルトしきい値を含む。
【００８２】
所定しきい値と所定しきい値の有効/無効を示すしきい値使用情報はユーザーが必ず設定しなければならない情報ではない。ユーザーは必要に応じて対応する所定しきい値としきい値使用情報を設定できる。ユーザーが対応する所定しきい値を設定し、しきい値使用情報を該所定しきい値が有効であることを指示するように設定した場合、しきい値比較モジュール1151はユーザーの設定した所定しきい値を使用する。ユーザーが対応する所定しきい値を設定しない場合、しきい値比較モジュール1151は予め記憶モジュール1160に記憶しておいたデフォルトしきい値をデフォルトで使用する。
【００８３】
平均値計算ステップS1206では、測定システム1100のレポートモジュール1150内の平均値計算モジュール1152がメトリクス項目に基づいて計算モジュール1140の出力した計算結果の平均値を計算し、計算した平均値の結果をレポート生成モジュール1154に送信する。
【００８４】
総和計算ステップS1207では、測定システム1100のレポートモジュール1150内の総和計算モジュール1153がメトリクス項目に基づいて計算モジュール1140の出力した計算結果の和を計算し、計算した和の結果をレポート生成モジュール1154に送信する。
【００８５】
レポート生成ステップS1208では、測定システム1100のレポートモジュール1150内のレポート生成モジュール1154が計算モジュール1140の計算結果、しきい値比較モジュール1151の比較結果、平均値計算モジュール1152の平均値計算結果、総和計算モジュール1153の総和計算結果に基づいてレポートを生成し、該レポートには、測定したすべてのJavaScriptスクリプトファイルの各ノードの各メトリクス項目のメトリクス値を列記し、それに対応する所定しきい値またはデフォルトしきい値を越えるメトリクス値を強調して表示し、同時にさらに各メトリクス項目のメトリクス値の平均値と総和値を列記する。それから、レポート生成モジュール1154はHTML形式で生成したレポートを出力する。
【００８６】
図13は本発明の第二実施例に係わる測定システムの生成するレポートの実例概念図である。図13に示す実施例では、レポート1300は以下の仮定に基づいて生成したものである。
【００８７】
（1）ユーザーの入力した測定すべき二つのJavaScriptスクリプトファイルの記憶位置情報はローカルパーソナルコンピュータ上のE:/jsmetric/oojs/noc.jsとE:/jsmetric/oojs/loc.jsである。
（2）ユーザーの入力した測定すべきメトリクス項目は、LOC、CYC、PTH、NBD、PAR、DIT
及びNOCである。
（3）ユーザーの入力した所定しきい値は下記表に示すとおりである。
【表１】
2015158909.tif 000003
（4）ユーザーの入力したしきい値使用情報は所定しきい値が有効であることを指示している。
【００８８】
図13に示すように、レポート1300では、JavaScriptスクリプトファイル（E:/jsmetric/oojs/noc.js）はソースファイル名「E:/jsmetric/oojs/noc.js」と名づけたファイルノード、それぞれ「Cat」と「Dog」と名づけた二つのクラスノード、それぞれ「Cat」と「Getname」と名づけたクラスノード「Cat」の次の階級のノードとなる二つの関数ノード、それぞれ「Dog」と「Getname」と名づけたクラスノード「Dog」の次の階級のノードとなる二つの関数ノード、そして「Animal」と名づけたファイルノードの次の階級のノードとなる関数ノードを備える。JavaScriptスクリプトファイル（E:/jsmetric/oojs/loc.js）は、ソースファイル名「E:/jsmetric/oojs/loc.js」と名づけたファイルノード、そしてそれぞれ「Parent」、「Child」、「iswanted」及び「isAdult」と名づけたファイルノードの次の階級のノードとなる四つの関数ノードを備え、クラスノードはない。
【００８９】
図13に示すように、レポート1300では、しきい値を越えたメトリクス項目のメトリクス値を強調して表示している。また、レポート1300上の「しきい値越えを表示」ボタンによって、レポート1300はしきい値を越えたメトリクス項目のメトリクス値のみを表示することもできる。
【００９０】
レポート1300はさらにユーザーが対応するJavaScriptスクリプトファイルにて対応する関数ノードを探しやすいように、各関数ノードの開始行の行番号を表示する。
【００９１】
また、レポート1300の「概説」部分は、さらに「LOC（総和）」、「クラスLOC（平均）」、「関数LOC（平均）」、「CYC（平均）」、「NBD（平均）」、「PTH（平均）」、「PAR（平均）」、「DIT（平均）」及び「NOC（平均）」を表示する。そのうち、「LOC（総和）」は全てのファイルノードのLOCメトリクス値の総和を指す。「クラスLOC（平均）」は全てのクラスノードのLOCメトリクス値の平均値を指す。「関数LOC（平均）」は全ての関数ノードのLOCメトリクス値の平均値を指す。「CYC（平均）」は全ての関数ノードCYCメトリクス値の平均値を指す。「NBD（平均）」は全ての関数ノードのNBDメトリクス値の平均値を指す。「PTH（平均）」は全ての関数ノードのPTHメトリクス値の平均値を指す。「PAR（平均）」は全ての関数ノードのPARメトリクス値の平均値を指す。「DIT（平均）」は全てのクラスノードのDITメトリクス値の平均値を指す。「NOC（平均）」は全てのクラスノードのNOCメトリクス値の平均値を指す。
【００９２】
ユーザーはレポート1300に示す内容を参考に、JavaScriptスクリプトファイルをさらに完全なものにするために、対応するJavaScriptスクリプトファイルに対して適切な修正を行い、特にJavaScriptスクリプトファイル内のしきい値を越えたクラスノードと関数ノードの内容に対して適切な修正を行うことができる。
【００９３】
本発明について発明を実施するための形態を参照しながら説明してきたが、当業者にとって、上記説明に基づいて行った多くの代替、修正、変化は自明である。そのため、このような代替、修正と変化は、特許請求の範囲の主旨と範囲を逸脱しない限り、本発明に含まれるものとすべきである。
【図１】
2015158909.tif 000004
【図２】
2015158909.tif 000005
【図３】
2015158909.tif 000006
【図４】
2015158909.tif 000007
【図５】
2015158909.tif 000008
【図６】
2015158909.tif 000009
【図７】
2015158909.tif 000010
【図８】
2015158909.tif 000011
【図９】
2015158909.tif 000012
【図１０】
2015158909.tif 000013
【図１１】
2015158909.tif 000014
【図１２】
2015158909.tif 000015
【図１３】
2015158909.tif 000016