(57)【要約】      （修正有）【課題】ソフトウェアコードのメトリックを決定する方法を提供する。【解決手段】開始点ノード、終了点ノード、及びメトリックノードを含む、複数のフローグラフノードを含むソフトウェアコードのためのフローグラフを生成し、複数の縮小化フローグラフノードを含むフローグラフに基づいて縮小化フローグラフを生成し、開始点ノードを含む第１の縮小化フローグラフノードと終了点ノードを含む第２の縮小化フローグラフノードとの間の縮小化フローグラフノードに基づいて、縮小化フローグラフノード内で通過パス数を決定し、第１の縮小化フローグラフノードとメトリックノードを含む第３の縮小化フローグラフノードとの間の縮小化フローグラフノードに基づいて、縮小化フローグラフ内でメトリック開始パス数を決定する。【選択図】図１Ｂ
2014206977.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアコードのメトリックを決定する方法であって、
ソフトウェアコードのためのフローグラフを生成するステップであり、前記フローグラフは複数のフローグラフノードを含み、前記複数のフローグラフノードは開始点ノード、終了点ノード、及びメトリックノードを含み、前記メトリックノードは前記ソフトウェアコードのメトリックオブジェクトを含む、ステップと、
複数の縮小化フローグラフノードを含む前記フローグラフに基づいて縮小化フローグラフを生成するステップであり、前記縮小化フローグラフノードの少なくとも１つが前記フローグラフノードのクラスタ化されたサブセットを表す、ステップと、
前記開始点ノードを含む第１の縮小化フローグラフノードと前記終了点ノードを含む第２の縮小化フローグラフノードとの間の前記縮小化フローグラフノードに基づいて、前記縮小化フローグラフ内で通過パス数を決定するステップと、
前記第１の縮小化フローグラフノードと前記メトリックノードを含む第３の縮小化フローグラフノードとの間の前記縮小化フローグラフノードに基づいて、前記縮小化フローグラフ内でメトリック開始パス数を決定するステップと、
を含む方法。
【請求項２】
前記通過パス数と前記メトリック開始パス数との比率に基づいてメトリックを決定するステップ、をさらに含む請求項１に記載の方法。
【請求項３】
前記ソフトウェアコードの前記メトリックオブジェクトは、決定された前記メトリックに基づいて識別される、請求項２に記載の方法。
【請求項４】
前記第３の縮小化フローグラフノードと前記第２の縮小化フローグラフノードとの間の前記縮小化フローグラフノードに基づいて、前記縮小化フローグラフ内でメトリック終了パス数を決定するステップ、をさらに含む請求項２に記載の方法。
【請求項５】
前記メトリックは、前記通過パス数と前記メトリック終了パス数との第２の比率にさらに基づく、請求項４に記載の方法。
【請求項６】
前記メトリックは、前記ソフトウェアコードのセキュリティ、前記ソフトウェアコードのネットワーク性能、前記ソフトウェアコードのディスクアクセス性能、又は前記ソフトウェアコードを用いたユーザとのやりとりに関する、請求項２に記載の方法。
【請求項７】
前記縮小化フローグラフは、有向非巡回グラフである、請求項１に記載の方法。
【請求項８】
前記フローグラフは、前記ソフトウェアコードの静的解析に基づいて生成される、請求項１に記載の方法。
【請求項９】
前記第１の縮小化フローグラフノードと前記第３の縮小化フローグラフノードとの間の前記縮小化フローグラフノードのうち１つが、前記フローグラフノードの前記クラスタ化されたサブセットを表す前記縮小化フローグラフノードの前記少なくとも１つであり、前記メトリック開始パス数は、前記縮小化フローグラフノードのうち前記少なくとも１つに関連付けられた重み付けされたパス値により増加される、請求項１に記載の方法。
【請求項１０】
前記重み付けされたパス値は、前記フローグラフノードの前記クラスタ化されたサブセット内のフローグラフノードの数に基づく、請求項９に記載の方法。
【請求項１１】
ソフトウェアコードのメトリックを決定するオペレーションをシステムに行わせるコンピュータ命令を実行するように構成されたプロセッサであって、前記オペレーションは、
ソフトウェアコードのためのフローグラフを生成するステップであり、前記フローグラフは複数のフローグラフノードを含み、前記複数のフローグラフノードは開始点ノード、終了点ノード、及びメトリックノードを含み、前記メトリックノードは前記ソフトウェアコードのメトリックオブジェクトを含む、ステップと、
複数の縮小化フローグラフノードを含む前記フローグラフに基づいて縮小化フローグラフを生成するステップであり、前記縮小化フローグラフノードの少なくとも１つが前記フローグラフノードのクラスタ化されたサブセットを表す、ステップと、
前記開始点ノードを含む第１の縮小化フローグラフノードと前記終了点ノードを含む第２の縮小化フローグラフノードとの間の前記縮小化フローグラフノードに基づいて、前記縮小化フローグラフ内で通過パス数を決定するステップと、
前記第１の縮小化フローグラフノードと前記メトリックノードを含む第３の縮小化フローグラフノードとの間の前記縮小化フローグラフノードに基づいて、前記縮小化フローグラフ内でメトリック開始パス数を決定するステップと、
を含むプロセッサ。
【請求項１２】
前記オペレーションは、前記通過パス数と前記メトリック開始パス数との比率に基づいてメトリックを決定するステップをさらに含む、請求項１１に記載のプロセッサ。
【請求項１３】
前記ソフトウェアコードの前記メトリックオブジェクトは、決定された前記メトリックに基づいて識別される、請求項１２に記載のプロセッサ。
【請求項１４】
前記オペレーションは、前記第３の縮小化フローグラフノードと前記第２の縮小化フローグラフノードとの間の前記縮小化フローグラフノードに基づいて、前記縮小化フローグラフ内でメトリック終了パス数を決定するステップをさらに含む、請求項１２に記載のプロセッサ。
【請求項１５】
前記メトリックは、前記通過パス数と前記メトリック終了パス数との第２の比率にさらに基づく、請求項１４に記載のプロセッサ。
【請求項１６】
前記メトリックは、前記ソフトウェアコードのセキュリティ、前記ソフトウェアコードのネットワーク性能、前記ソフトウェアコードのディスクアクセス性能、又は前記ソフトウェアコードを用いたユーザとのやりとりに関する、請求項１２に記載のプロセッサ。
【請求項１７】
前記縮小化フローグラフは、有向非巡回グラフである、請求項１１に記載のプロセッサ。
【請求項１８】
前記フローグラフは、前記ソフトウェアコードの静的解析に基づいて生成される、請求項１１に記載のプロセッサ。
【請求項１９】
前記第１の縮小化フローグラフノードと前記第３の縮小化フローグラフノードとの間の前記縮小化フローグラフノードのうち１つが、前記フローグラフノードの前記クラスタ化されたサブセットを表す前記縮小化フローグラフノードの前記少なくとも１つであり、前記メトリック開始パス数は、前記縮小化フローグラフノードのうち前記少なくとも１つに関連付けられた重み付けされたパス値により増加される、請求項１１に記載のプロセッサ。
【請求項２０】
前記重み付けされたパス値は、前記フローグラフノードの前記クラスタ化されたサブセット内のフローグラフノードの数に基づく、請求項１９に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本願において論じられる実施形態は、パス解析に基づいてソフトウェアメトリクスを決定することに関する。
【背景技術】
【０００２】
コンピュータ産業において、コンピュータソフトウェアとネットワークとが例えばハッカーにより攻撃されるおそれがあることは、周知である。具体的には、ハッカーは、コンピュータ製品のセキュリティ機能を破り、それにより上記コンピュータ製品の中に記憶された企業秘密及び個人情報へのアクセスを得る可能性がある。コンピュータ製品のセキュリティ機能を破ると、ハッカーは、プログラミングを改ざんし、上記コンピュータ製品に関連付けられた重要なコンピューティングリソースを破壊する可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
前述の問題のいくつかを回避するために、コンピュータ産業は、既知の脆弱性を安全にすることと、先行製品よりも攻撃される可能性が少ない、新しく堅牢で安全なコンピュータ製品を開発することとを継続的に試み続けている。しかしながら、既知のセキュリティの欠陥を克服し、より安全な製品を開発するための努力にもかかわらず、コンピュータ産業は、攻撃されうるコンピュータ製品の関連する脆弱性を決定する方法をいまだ開発しなければならない。
【０００４】
本願において請求される対象事項は、いくらかの欠点を解決する実施形態、又は上述したものなどの環境においてのみ動作する実施形態に限定されない。むしろ、この背景は、本願に記載のいくつかの実施形態を実施することができる一例としての技術範囲を説明するためにのみ提供される。
【課題を解決するための手段】
【０００５】
一実施形態の態様に従う、ソフトウェアコードのメトリックを決定する方法が、ソフトウェアコードのためのフローグラフを生成することを含むことができる。フローグラフは、複数のフローグラフノードを含むことができる。複数のフローグラフノードは、開始点ノード、終了点ノード、及びメトリックノードを含むことができる。メトリックノードは、ソフトウェアコードのメトリックオブジェクトを含むことができる。上記方法は、さらに、複数の縮小化フローグラフノードを含むフローグラフに基づいて縮小化フローグラフを生成することを含むことができる。縮小化フローグラフノードの少なくとも１つが、フローグラフノードのクラスタ化されたサブセットを表すことができる。上記方法は、さらに、開始点ノードを含む第１の縮小化フローグラフノードと終了点ノードを含む第２の縮小化フローグラフノードとの間の縮小化フローグラフノードに基づいて、縮小化フローグラフ内で通過パス数を決定することを含むことができる。上記方法は、さらに、第１の縮小化フローグラフノードとメトリックノードを含む第３の縮小化フローグラフノードとの間の縮小化フローグラフノードに基づいて、縮小化フローグラフ内でメトリック開始パス数を決定することを含むことができる。
【０００６】
本願実施形態の目的及び利点は、請求項において個別に示される少なくとも要素、特徴、及び組み合わせにより認識及び達成されるであろう。
【０００７】
請求されるとおり、前述の概要説明及び以降の詳細説明の双方は例示及び説明であって発明の限定ではないことが、理解されるべきである。
【図面の簡単な説明】
【０００８】
以下の添付図面を使用して、さらなる特定性及び詳細とともに、例示的な実施形態を記載及び説明していく。
【図１Ａ】ソフトウェアコードのための例示的なフローグラフを図示する。
【図１Ｂ】図１Ａのフローグラフについての例示的な縮小化フローグラフを図示する。
【図２】ソフトウェアコードのメトリックを決定する例示的なシステムのブロック図である。
【図３】パス数を決定する例示的な方法を図示する。
【図４】ソフトウェアコードのメトリックを決定する例示的な方法を図示する。
【発明を実施するための形態】
【０００９】
本明細書に記載のいくつかの実施形態は、ソフトウェアプログラムのソフトウェアコードのメトリクスを決定することに関する。ソフトウェアコードのメトリクスを決定することには、ソフトウェアコードの特性を測定することを含むことができる。測定又は決定することができるソフトウェアコードの特性又はメトリクスは、とりわけ、ソフトウェアコードのセキュリティ、ソフトウェアコードのネットワーク性能、ソフトウェアコードのディスクアクセス性能、ソフトウェアコードを用いたユーザとのやりとりに関連する場合がある。
【００１０】
ソフトウェアコードのメトリクスを、ソフトウェアコードのフローグラフ表現を解析することによって、決定することができる。ユーザインタフェース若しくはＡＰＩなどのソフトウェアコードへの開始（entry）点、ソフトウェアコード内の終了（termination）点、及び／又はソフトウェアコードのメトリックオブジェクトに関連付けられた、ソフトウェアコードのフローグラフ内のノードを識別することができる。ソフトウェアコードのメトリックオブジェクトは、決定されるソフトウェアのメトリックに基づいて変化させることができる。例えば、ソフトウェアコードのメトリックがソフトウェアコードのセキュリティに関連する場合、ソフトウェアコードのメトリックオブジェクトは、とりわけ、ユーザ許可を設定し、データベースにアクセスし、ディスクに書き込み、保護された情報を処理する関数又はメソッドなどの、ソフトウェアコード内の感知可能な関数、メソッド、又はオブジェクトとすることができる。
【００１１】
ソフトウェアコードのフローグラフを解析することによって、フローグラフ内の任意の２つのノード間のパスの数を決定することができる。例えば、開始点に関連付けられたノードとメトリックオブジェクトに関連付けられたノードとの間のフローグラフ内のメトリック開始パスの数を決定することができる。代替的又は追加的に、終了点に関連付けられたノードとメトリックオブジェクトに関連付けられたノードとの間のフローグラフ内のメトリック終了パスの数、及び開始点に関連付けられたノードと終了点に関連付けられたノードとの間のフローグラフ内の通過パスの数を決定することもできる。ソフトウェアコードのためのメトリックは、メトリック開始パスの数、メトリック終了パスの数、及び通過パスの数における比率又は他の比較に基づくことができる。
【００１２】
いくつかの実施形態において、ソフトウェアコードのフローグラフは、ノードの構成とエッジとも呼ばれるノード間の接続とに起因して、フローグラフ内のノード間に大量又は無数のパスを有する場合がある。いくつかの環境において、フローグラフ内のノード間のパスは、その数の多さのため、解析することが困難又は不可能である場合がある。これら及び他の実施形態において、上記フローグラフに基づいて、縮小化（contracted）フローグラフを生成することができる。縮小化フローグラフを生成するために、強連結されたフローグラフ内のノードのサブセットをクラスタ化して、縮小化フローグラフ内にクラスタ縮小化フローグラフノード（cluster  contracted  flow  graph  node）を形成することができる。いくつかの実施形態において、縮小化フローグラフは、フローグラフに基づく有向非巡回グラフであってよい。メトリック開始パス、メトリック終了パス、及び通過パスの数を、縮小化フローグラフに基づいて決定することができる。いくつかの実施形態において、縮小化フローグラフ内の２つのノード間のパスの数を、フローグラフの強連結されたノードのサブセットを含む２つのノード間の縮小化フローグラフノードに基づいて重み付けすることができる。
【００１３】
本発明の実施形態を、添付図面を参照しながら説明していく。
【００１４】
図１Ａは、本明細書に記載の少なくともいくつかの実施形態に従って配置された、ソフトウェアコードについての例示的なフローグラフ１００Ａを図示する。フローグラフ１００Ａを、ソフトウェアコードによる種々の実行パスを表すように構成することができる。概して、いくつかの実施形態において、フローグラフは、フローグラフ１００Ａのように、本明細書に記載するようなソフトウェアコードのメトリックを決定する処理の一部であってよい。フローグラフ１００Ａは、単純化され、説明及び例示目的で提供される例示的なフローグラフである。本開示の範囲から逸脱することなく、フローグラフ１００Ａに対して変更、追加又は削除をなすことができる。
【００１５】
いくつかの実施形態において、ソフトウェアコードを、とりわけ、以下のプログラミング言語のＰｅｒｌ、Ｃ、Ｃ＋＋、Ｃ♯、Ｊａｖａ(登録商標)、ＪａｖａＳｃｒｉｐｔ、Ｐｙｔｈｏｎ、Ｒｕｂｙ、アセンブリ言語、Ｆｏｒｔｒａｎ、共通事務処理用言語（ＣＯＢＯＬ）、構造化問い合わせ言語（ＳＱＬ）、ハイパーテキストプリプロセッサ（ＰＨＰ）、拡張可能マークアップ言語（ＸＭＬ）、ハイパーテキストマークアップ言語（ＨＴＭＬ）のうち１つを用いて生成することができる。
【００１６】
フローグラフ１００Ａは、図１Ａにおいて矢印を有するラインとして表されるエッジにより共に接続されるノード１０２Ａ、１０２Ｂ、１０２Ｃ、１０２Ｄ、１０２Ｅ、１０２Ｆ、１０２Ｇ、１０２Ｈ、１０２Ｉ及び１０２Ｊ（本明細書において集合的に「ノード１０２」と呼ぶ）を含むことができる。フローグラフ１００Ａ内のノード１０２は、関数又はメソッドなどのソフトウェアコード内の異なるオペレーション；コードステートメントの種類の中でもｗｈｉｌｅステートメント、ｉｆステートメント、ｌｅｔステートメント、ｃａｓｅステートメントなどの他のオペレーション；他のオペレーションの中でも＝、＋、＊、−、＆、％などの演算子にそれぞれ対応することができる。いくつかの実施形態において、ノード１０２は、ソフトウェアコードの異なる部分へソフトウェアコードが移動するという結果、又はソフトウェアコードがソフトウェアコードの異なる部分を実行することになる条件ステートメントをソフトウェアコードが実行するという結果をもたらさない、複数のオペレーションを表すことができる。これら及び他の実施形態において、フローグラフ１００Ａ内のエッジは、ソフトウェアコード内で種々の部分に移動するソフトウェアコード、又はソフトウェアコード内の条件ステートメントの実行に対応することができる。概して、フローグラフ１００Ａ内のノード１０２間の移動を、ソフトウェアコードのフローと呼ぶ場合がある。
【００１７】
例えば、ソフトウェアコードは、ノード１０２Ａに対応するオペレーションから、ノード１０２Ｃに対応するオペレーションへとフローし、ノード１０２Ｂに対応するオペレーションへとフローし、ノード１０２Ｃに対応するオペレーションへとフローして戻ることができる。別の例として、ソフトウェアコードは、ノード１０２Ａに対応する第１の関数を実行することができる。ソフトウェアコードは、次いで、第２の関数をコールし、ノード１０２Ｃに対応する第２の関数を実行し始めることができる。その後、ソフトウェアコードは、第３の関数をコールし、ノード１０２Ｂに対応する第３の関数を実行し始めることができ、次いで、ノード１０２Ｃに対応する第２の関数に戻ることができる。これらの例は、フローグラフ１００Ａ内のエッジ及びノード１０２がどのようにソフトウェアコード内の実行パスを表すことができるかを図示する。
【００１８】
いくつかの実施形態において、フローグラフ１００Ａ内のノード１０２のうち任意の２つにおける異なる実行パス（以降「パス」と呼ぶ）の数を決定することができる。パスが、異なるノード及び／又は異なるシーケンスのノードを含む場合、フローグラフ内のパスを、異なると見なすことができる。例えば、ノード１０２Ａと１０２Ｄとの間の種々のパスには、ノード１０２Ａで始まり、ノード１０２Ｃへとフローし、次いでノード１０２Ｄへとフローすることができる第１のパス；ノード１０２Ａで始まり、ノード１０２Ｃへとフローし、ノード１０２Ｂへとフローし、ノード１０２Ｃへとフローして戻り、次いでノード１０２Ｄへとフローすることができる第２のパス；ノード１０２Ａで始まり、ノード１０２Ｂへとフローし、ノード１０２Ｃへとフローし、次いでノード１０２Ｄへとフローすることができる第３のパス；ノード１０２Ａで始まり、ノード１０２Ｂへとフローし、ノード１０２Ｃへとフローし、ノード１０２Ａへとフローし、ノード１０２Ｃへとフローし、ノード１０２Ａへとフローし、ノード１０２Ｂへとフローし、ノード１０２Ｃへとフローし、次いでノード１０２Ｄへとフローすることができる第４のパス；を含むことができる。フローグラフ１００Ａにおいて、ノード１０２Ａ、１０２Ｂ、１０２Ｃ及び１０２Ｄ間のエッジの構成のため、ノード１０２Ａと１０２Ｄとの間には無数のパスが存在する。結果として、フローグラフ１００Ａ内のノード１０２Ａ及びノード１０２Ｄ並びに他の類似的に構成されたノード間のパスを数えることは困難となる場合がある。
【００１９】
フローグラフ１００Ａ内のノード１０２のうちのいくつかにおけるパスの数を数えることは困難である場合があるため、ノード１０２の種々のサブセットをクラスタ化して、クラスタ１１０、１２０及び１３０などのノードのクラスタを形成することができる。いくつかの実施形態において、クラスタ１１０、１２０及び１３０を、強連結されたフローグラフ１００Ａ内のノード１０２に基づいて形成することができる。クラスタ内のそれぞれのノードからクラスタ内のあらゆる他のノードへのパスが存在する場合、クラスタ内のノードを、強連結していると見なすことができる。例えば、クラスタ１１０には、ノード１０２Ａ、１０２Ｂ及び１０２Ｃを含むことができ、クラスタ１２０には、ノード１０２Ｄ、１０２Ｅ、１０２Ｆ及び１０２Ｇを含むことができ、クラスタ１３０には、ノード１０２Ｉ及び１０２Ｊを含むことができる。
【００２０】
いくつかの実施形態において、クラスタ１１０、１２０、１３０のそれぞれを、単一の縮小化フローグラフノードとして、縮小化フローグラフ内に表現することができる。図１Ａのクラスタ１１０、１２０及び１３０などのフローグラフからのノードのクラスタを表現する縮小化フローグラフ内の縮小化フローグラフノードを、本明細書においてクラスタ縮小化フローグラフノードと呼ぶことができる。
【００２１】
図１Ｂは、本明細書に記載の少なくともいくつかの実施形態に従って配置された、図１Ａのフローグラフ１００Ａの例示的な縮小化フローグラフ１００Ｂを図示する。縮小化フローグラフ１００Ｂには、複数の縮小化フローグラフノードを含む。縮小化フローグラフ１００Ｂ内の縮小化フローグラフノードには、図１Ａのノード１０２Ｈに類似する縮小化フローグラフノード１４２と、ノード１０２のサブセットをそれぞれ表すクラスタ縮小化フローグラフノード１４０Ａ、１４０Ｂ及び１４０Ｃ（本明細書においてクラスタ縮小化フローグラフノード１４０と呼ぶ）とを含む。具体的に、クラスタ縮小化フローグラフノード１４０Ａは、図１Ａのクラスタ１１０（ノード１０２Ａ、１０２Ｂ及び１０２Ｃ）を表すことができる。クラスタ縮小化フローグラフノード１４０Ｂは、図１Ａのクラスタ１２０（ノード１０２Ｄ、１０２Ｅ、１０２Ｆ及び１０２Ｇ）を表すことができ、クラスタ縮小化フローグラフノード１４０Ｃは、図１Ａのクラスタ１３０（ノード１０２Ｉ及び１０２Ｊ）を表すことができる。概して、縮小化フローグラフには、縮小化フローグラフノードを含む。縮小化フローグラフノードは、単一のフローグラフノード、又はフローグラフノードのクラスタ化されたサブセットを表す、縮小化フローグラフノードであってよい。フローグラフノードのクラスタ化されたサブセットを含む縮小化フローグラフノードを、本明細書において、クラスタ縮小化フローグラフノードと呼ぶことができる。しかしながら、クラスタ縮小化フローグラフノードは縮小化フローグラフノードの一種類に過ぎないことが、理解されなければならない。そのようなものとして、縮小化フローグラフノードという用語の使用は、概して、縮小化フローグラフノードが単一のフローグラフノードを表そうと、あるいはフローグラフノードのクラスタ化されたサブセットを表そうと、縮小化フローグラフ内のいかなる縮小化フローグラフノードも示すことができる。
【００２２】
いくつかの実施形態において、縮小化フローグラフ１００Ｂ内のクラスタ縮小化フローグラフノード１４０及び／又は縮小化フローグラフノード１４２のうち任意の２つの間の異なるパスの数を決定することができる。例えば、クラスタ縮小化フローグラフノード１４０Ａと１４０Ｃとの間に２つの異なるパスが存在する。クラスタ縮小化フローグラフノード１４０Ａと１４０Ｃとの間の第１のパスは、クラスタ縮小化フローグラフノード１４０Ａで始まり、クラスタ縮小化フローグラフノード１４０Ｂへとフローし、次いでクラスタ縮小化フローグラフノード１４０Ｃへとフローすることができる。クラスタ縮小化フローグラフノード１４０Ａと１４０Ｃとの間の第２のパスは、クラスタ縮小化フローグラフノード１４０Ａで始まり、クラスタ縮小化フローグラフノード１４０Ｂへとフローし、縮小化フローグラフノード１４２へとフローし、次いでクラスタ縮小化フローグラフノード１４０Ｃへとフローすることができる。いくつかの実施形態において、縮小化フローグラフ１００Ｂは、有向非巡回グラフ又はいくつかの他の種類のグラフであってよい。縮小化フローグラフ１００Ｂが有向非巡回グラフである場合、縮小化フローグラフ１００Ｂ内の２つのノード間のパスの数は有限である。
【００２３】
縮小化フローグラフ１００Ｂ内のパスの数が有限であるため、縮小化フローグラフ１００Ｂにより、縮小化フローグラフ１００Ｂ内の２つのノード間のパスの数を、フローグラフ１００Ａ内のノード間のパスの数より容易に決定することが可能となる。いくつかの実施形態において、縮小化フローグラフ１００Ｂ内の縮小化フローグラフノードのいくつかがクラスタ縮小化フローグラフノードであるため、縮小化フローグラフ１００Ｂが提供する２つのノード間のパス数が、縮小化フローグラフ１００Ｂにより表されるソフトウェアコードが上記２つのノード間でたどるであろう実際のパスの適切な表現を提供しない可能性がある。例えば、クラスタ縮小化フローグラフノード１４０Ａと縮小化フローグラフノード１４２との間のパスの数を、縮小化フローグラフ１００Ｂに基づくものであるように決定することができる。しかしながら、ソフトウェアコードがクラスタ縮小化フローグラフノード１４０Ａと縮小化フローグラフノード１４２との間をたどることができるパスの数は、クラスタ縮小化フローグラフノード１４０Ａ内のフローグラフ１０２Ａのノード１０２（例えば、ノード１０２Ｄ、１０２Ｅ、１０２Ｆ及び１０２Ｇ）間のソフトウェアコードがたどるパスに基づいてかなり大きくなる可能性がある。
【００２４】
ソフトウェアプログラムにおいてたどることができるパスのより適切な表現を提供するために、クラスタ縮小化フローグラフノード１４０に、それぞれ、重み付けされたパス値を与えることができる。クラスタ縮小化フローグラフノードのための重み付けされたパス値を、クラスタ縮小化フローグラフノードを含む２つのノード間で決定されるパスの数に適用することができる。例えば、クラスタ縮小化フローグラフノード１４０Ｂに、１０という重み付けされたパス値を割り当てることができ、クラスタ縮小化フローグラフノード１４０Ｂを含む２つのノード間の単一のパスが上記２つのノード間の１０個の異なるパスを表しうることを示すことができる。上記で説明したように、クラスタにパス値を適用しないと、クラスタ縮小化フローグラフノード１４０Ａと１４０Ｃとの間のパスの数は２つであるとすることができる。重み付けされたパス値をクラスタ縮小化フローグラフノード１４０Ｂに割り当てる場合、クラスタ縮小化フローグラフノード１４０Ｂを通過するパスの数に１０を乗算してパスの合計数を決定することができる。したがって、クラスタ縮小化フローグラフノード１４０Ａと１４０Ｃとの間のパスの合計数は、クラスタ縮小化フローグラフノード１４０Ｂを通る２つのパスに１０という重み付けされたパス値を乗算することに基づいて、２０個のパスであるとすることができる。
【００２５】
クラスタ縮小化フローグラフノードのための重み付けされたパス値を、複数の種々の方法又は方法の組み合わせを用いて決定することができる。例えば、いくつかの実施形態において、クラスタ縮小化フローグラフノードのための重み付けされたパス値は、クラスタ縮小化フローグラフノードの直径に基づくことができる。いくつかの実施形態において、クラスタ縮小化フローグラフノードの直径は、クラスタ縮小化フローグラフノードにおける２つのノード間のエッジの最大数にほぼ等しくすることができる。いくつかの実施形態において、クラスタ縮小化フローグラフノードのための重み付けされたパス値は、クラスタ縮小化フローグラフノード内のノードを繰り返さないパスの数に基づくことができる。例えば、ノードを繰り返さない図１Ａのクラスタ１３０内のパスの数は、図１Ｂのクラスタ縮小化フローグラフノード１４０Ｃにより表され、２である。
【００２６】
いくつかの実施形態において、クラスタ縮小化フローグラフノードのための重み付けされたパス値は、クラスタ縮小化フローグラフノード内の開始ノード及び終点（exit）ノードの決定に基づくことができる。開始又は終点ノードは、クラスタ縮小化フローグラフノードの外側にノードと共にエッジを有するノードとすることができる。具体的には、縮小化フローグラフ１００Ｂにおける２つのノード間のパスについて、開始ノードはパスがクラスタ縮小化フローグラフノードに入るときに通るノードであってよく、終点ノードはパスがクラスタ縮小化フローグラフノードを出るときに通るノードであってよい。クラスタ縮小化フローグラフノード内の開始及び終点ノードの各ペアについて、クラスタ縮小化フローグラフノード内のノードの合計数より小さいか又は等しい通過する開始及び終点ノードのペアの間のパスの数を決定することができる。開始及び終点ノードのペアのそれぞれについてのパスの合計数を共に加算して、クラスタ縮小化フローグラフノードの重み付けされたパス値を決定することができる。例えば、図１Ｂ内のクラスタ縮小化フローグラフノード１４０Ｂにより表される、図１Ａ内のクラスタ１２０について、ノード１０２Ｄは開始ノードであってよく、ノード１０２Ｇは終点ノードであってよい。クラスタ内の４つのノードを用いて、４つの又はより少ないノードを含むパスを考えることができる。これらのパスには、ノード１０２Ｄから始まり、ノード１０２Ｆへとフローし、ノード１０２Ｇへとフローする第１のパスと、ノード１０２Ｄから始まり、ノード１０２Ｅへとフローし、ノード１０２Ｆへとフローし、ノード１０２Ｇへとフローする第２のパスとを含むことができる。したがって、クラスタ縮小化フローグラフノード１４０Ｂのための重み付けされたパス値は２とすることができる。
【００２７】
いくつかの実施形態において、クラスタ縮小化フローグラフノードについての重み付けされたパス値を、本明細書において記載される方法以外の方法を用いて決定することができる。代替的又は追加的に、クラスタ縮小化フローグラフノードのための重み付けされたパス値を、１つ又は複数の種々の方法の組み合わせを用いて決定することができる。例えば、種々の方法のサブセットのそれぞれのための重み付けされたパス値を、何らかの方法で、例えば、平均値、中央値、重み付けされた平均値、又は種々の方法向けに重み付けされたパス値のいくつかの他の組み合わせを用いることなどによって組み合わせることができる。代替的又は追加的に、クラスタ縮小化フローグラフノードのための重み付けされたパス値を１とすることができる。いくつかの実施形態において、クラスタ縮小化フローグラフノード１４０のそれぞれが、類似若しくは同様の方法又は方法の組み合わせに基づいて、あるいは種々の方法又は方法の種々の組み合わせを用いて、上記クラスタ縮小化フローグラフノード１４０のそれぞれのために決定される重み付けされたパス値を有することができる。
【００２８】
いくつかの実施形態において、縮小化フローグラフ１００Ｂ内のパスの開始ノード及び／又はパスの終了ノードを、クラスタ縮小化フローグラフノード１４０のうち１つの中の特定のノードとすることができる。例えば、開始ノードは、クラスタ縮小化フローグラフノード１４０Ａ内の図１Ａのノード１０２Ａであってよい。これら及び他の実施形態において、開始ノード及び終了ノードをそれぞれ含むクラスタ縮小化フローグラフノード１４０を通るパスを考えることができ、あるいは開始ノードと終了ノードとの間のパスの数を決定する場合、上記パスを考えることができる。例えば、クラスタ縮小化フローグラフノード１４０Ａ内の開始ノードとクラスタ縮小化フローグラフノード１４０Ｃ内の終了ノードとを仮定する。クラスタ縮小化フローグラフノード１４０Ａのための重み付けされたパス値を２とすることができ、クラスタ縮小化フローグラフノード１４０Ｃのための重み付けされたパス値を２とすることができ、クラスタ縮小化フローグラフノード１４０Ｂのための重み付けされたパス値を３とすることができる。前述したように、重み付けされたパス値をまったく仮定しない場合、クラスタ縮小化フローグラフノード１４０Ａとクラスタ縮小化フローグラフノード１４０Ｃとの間に２つのパスが存在する。前述したようにクラスタ縮小化フローグラフノード１４０のための重み付けされたパス値を用いて、開始及び終了ノードの間のパスの数は、２（重み付けなしのパスの数）＊２（クラスタ縮小化フローグラフノード１４０Ａの重み付けされたパス値）＊３（クラスタ縮小化フローグラフノード１４０Ｂの重み付けされたパス値）＊２（クラスタ縮小化フローグラフノード１４０Ｃの重み付けされたパス値）＝２４個のパスとすることができる。
【００２９】
図１Ａを再度参照すると、いくつかの実施形態において、ソフトウェアコードには、ノード１０２Ｂにより表すことができる開始オペレーションを含むことができる。開始オペレーションは、人間又は外部システムがソフトウェアコードとやりとりすることが可能となるソフトウェアコード内のいかなるオペレーションでもよい。ソフトウェアコードとのやりとりには、ユーザインタフェース、ＡＰＩインタフェース、又はいくつかの他のインタフェースを用いて、データを受信すること、データを送信すること、及び／又はデータを表示することを含むことができる。いくつかの実施形態において、開始オペレーションは、ソフトウェアコードのために決定されるメトリックに固有であってよい。例えば、上記メトリックがネットワークアクセスに関連する場合、開始オペレーションはネットワークアクセスを始めるソフトウェアコード内のオペレーションであってよい。
【００３０】
いくつかの実施形態において、ソフトウェアコードは、さらに、ノード１０２Ｊにより表すことができる終了オペレーションを含むことができる。終了オペレーションは、ソフトウェアコードがリセットされ、又は再び実行されるまで、ソフトウェアコードの実行を終了させ、終わらせ、一時停止させ、又は他の停止をさせるソフトウェアコード内のいかなるオペレーションでもよい。例えば、終了オペレーションには、他の終了点又は終点の中でも、スローされた例外、コードの終わりを含むことができる。いくつかの実施形態において、終了オペレーションは、ソフトウェアコードのために決定されるメトリックに固有であってよい。例えば、上記メトリックがディスクアクセスに関連する場合、終了オペレーションはディスクアクセスを終了させるソフトウェアコード内のオペレーションであってよい。
【００３１】
いくつかの実施形態において、ソフトウェアコードは、さらに、ノード１０２Ｈにより表すことができるメトリックオブジェクトを含むことができる。メトリックオブジェクトは、変数、関数、メソッド、又はオペレーションなどの、ソフトウェアコード内のいかなるオブジェクトでもよい。メトリックオブジェクトを、ソフトウェアコードのために決定されたメトリックに基づいて選択することができる。例えば、メトリックがソフトウェアコードのセキュリティである場合、メトリックオブジェクトは、中でも、ユーザ許可、データベースへのアクセス、ディスクへの書き込み、保護された情報などの、ソフトウェアコードのセキュリティに関連付けられたオペレーションであってよい。別の例として、メトリックが時間を計算することに関連する場合、メトリックオブジェクトは、素数を決定するため、又は多数の大きなオブジェクトにおいて計算するための関数などの、複数の計算を使用する、又は計算に集中したオペレーションであってよい。
【００３２】
いくつかの実施形態において、ソフトウェアコードのメトリックを決定する場合、メトリックのための開始オペレーション及び終了オペレーションの各ペアの間の通過パスの数を決定することができる。メトリックのための開始オペレーションとメトリックオブジェクトとの各ペア間のメトリック開始パスの数を、さらに決定することができる。代替的又は追加的に、メトリックのための終了オペレーションとメトリックオブジェクトとの各ペアの間のメトリック終了パスの数を決定することができる。
【００３３】
ソフトウェアコードのメトリックを、通過パス、メトリック開始パス、及び／又はメトリック終了パスの数における比率及び／又は他の比較に基づいて決定することができる。例えば、いくつかの実施形態において、ソフトウェアコードのメトリックは、メトリック開始パスの数と通過パスの数との比率であってよい。代替的又は追加的に、ソフトウェアコードのメトリックは、メトリック開始パス、通過パス、及び／又はメトリック終了パスの数における比率の組み合わせ又は他の比較であってよい。代替的又は追加的に、ソフトウェアコードのメトリックは、メトリック開始パス、通過パス、及び／又はメトリック終了パスの数であってよい。
【００３４】
メトリックを決定した後、ソフトウェアコードに対して変更を行うことができる。メトリックと、したがってメトリックに関連付けられた比率とを、第１のメトリックと呼ぶことができる。ソフトウェアコード内で第１のメトリックと同一のメトリックを使用する第２のメトリックを、ソフトウェアコードへの変更がソフトウェアコードと特にソフトウェアコードのメトリックノードとにどのように影響を与えるのかをより良く理解するために、決定することができる。例えば、いくつかの実施形態において、ソフトウェアコードのために決定される第１のメトリックは、セキュリティに関連してよく、メトリックノードのための通過パスとメトリック開始パスとの間の比率が２０対１であってよい。ソフトウェアコードは、ＡＰＩの追加などの特定の変更を受けることができる。セキュリティにさらに関連する第２のメトリックを、ソフトウェアコードのメトリックノードのために決定することができ、３５対１であるように決定することができる。メトリック開始パスよりも多くの通過パスが存在するため、第１及び第２のセキュリティメトリクスにおける変更は、ソフトウェアコードといくつかの実施形態においてソフトウェアコードのメトリックノードとにもたらされるソフトウェアコードに対する変更がハッカーからの攻撃、及び／又はマルウェアなどのセキュリティの脅威に対する脆弱さを少なくするということを、示すであろう。
【００３５】
別の例として、ソフトウェアコードのために決定されるメトリックは、ネットワークアクセスに関連することができる。類似するソフトウェアコードのためのネットワークアクセスメトリックを、さらに決定することができる。ソフトウェアコードのためのメトリックと類似するソフトウェアコードのためのメトリックとを用いて、ソフトウェアコードのネットワークアクセス能力と類似するソフトウェアコードのネットワークアクセス能力とを比較することができる。要するに、本明細書に記載するソフトウェアコードのために決定されるメトリックは、ソフトウェアコードに対する変更を定量的に追跡し、あるいはソフトウェアコードと他のソフトウェアコード又は他のバージョンのソフトウェアコードとを定量的に比較する方法を提供することができる。
【００３６】
図２は、本明細書に記載の少なくともいくつかの実施形態に従って配置された、ソフトウェアコードのメトリックを決定する例示的なシステム２００のブロック図である。具体的には、システム２００は、ソフトウェアコード２０２のための通過パス、メトリック開始パス、及びメトリック終了パスを数えるように構成することができる。システム２００は、コード・パーサー２２０、フローグラフ生成部２３０、フローグラフ解析部２４０、縮小化フローグラフ生成部２５０、及びパスカウンタ２６０を含むことができる。パスカウンタ２６０は、通過パスカウンタ２６２、メトリック開始パスカウンタ２６４、及びメトリック終了パスカウンタ２６６を含むことができる。
【００３７】
コード・パーサー２２０は、ソフトウェアコード２０２を受け取るように構成することができる。ソフトウェアコード２０２は、中でも、以下のプログラミング言語のＰｅｒｌ、Ｃ、Ｃ＋＋、Ｃ♯、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、Ｐｙｔｈｏｎ、Ｒｕｂｙ、アセンブリ言語、Ｆｏｒｔｒａｎ、ＣＯＢＯＬ、ＳＱＬ、ＰＨＰ、ＸＭＬ、ＨＴＭＬのうち１つを用いて生成することができる。ソフトウェアコード２０２を、コンピュータ実行可能命令又はデータ構造の形式で所望のコンピュータプログラムコードを担体又は記憶することに使用することができ、汎用目的又は特別目的のコンピュータにより、あるいはいくつかの他のロケーションからアクセスすることができるデータベースから、ネットワークから、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気ディスク記憶デバイス、又はいかなる他の記憶媒体も含む有形のコンピュータ読取可能記憶媒体から受け取ることができる。
【００３８】
コード・パーサー２２０は、ソフトウェアコード２０２を解析することによりソフトウェアコード２０２をパースするように構成することができる。具体的には、コード・パーサー２２０は、ソフトウェアコード２０２の構文を解析し、パースされたソフトウェアコード２２２を生成するように構成することができ、上記パースされたソフトウェアコード２２２をフローグラフ生成部２３０へ送ることができる。パースされたソフトウェアコード２２２は、ソフトウェアコード２０２よりも基本的又は下位の、構文ツリー又は他のソフトウェアコード表現の形式であってよい。
【００３９】
フローグラフ生成部２３０は、パースされたソフトウェアコード２２２に基づいてフローグラフ２３２を生成するように構成することができる。フローグラフ２３２は、いくつかの実施形態において、図１Ａのフローグラフ１００Ａに類似する場合がある。いくつかの実施形態において、フローグラフ２３２は、種々のノード及びエッジを含む制御フローグラフであってよい。フローグラフ２３２のノードは、ソフトウェアコード２０２内の種々のオペレーション又はオペレーションのブロックに対応することができる。フローグラフ２３２内のエッジは、ソフトウェアコード２０２内のノード間のフローを表すことができる。結果として、フローグラフ２３２は、ソフトウェアコード２０２の実行中に発生する可能性がある種々の実行パスのうち一部又はすべてを表すように構成することができる。ソフトウェアコード２０２の種々の実行パスを決定して、パースされたソフトウェアコード２２２の静的解析を用いてフローグラフ２３２を生成することができる。
【００４０】
いくつかの実施形態において、フローグラフ２３２を生成することには、パースされたソフトウェアコード２２２の下位レベルのコードを生成することを含むことができる。例えば、パースされたソフトウェアコード２２２を解析することができ、パースされたソフトウェアコード２２２内の上位レベルの命令を、同一の関数を実行する複数の下位レベルの命令へと分解することができる。下位レベルのコードを最適化して、とりわけ、冗長性を除去することができる。最適化された下位レベルのコードを使用して、フローグラフ２３２を生成することができる。例えば、パースされたソフトウェアコード２２２がＪａｖａＳｃｒｉｐｔである場合、パースされたソフトウェアコード２２２を構文糖除去して（desugared）、ラムダＪＳモデル（lambda-JS  model）を生成することができる。次いで、ラムダＪＳモデルを継続渡しスタイルモデル（ＣＰＳ）へと変換することができる。ＣＰＳモデルを最適化し、フローグラフ２３２を生成するために用いることができる。
【００４１】
多数の他の方法、プロシージャ、ステップ、及びオペレーションをフローグラフ生成部２３０が行ってフローグラフ２３２を生成することができ、それらのすべてを本開示の範囲から逸脱することなく行うことができる。生成された後、フローグラフ２３２を、フローグラフ解析部２４０と縮小化フローグラフ生成部２５０とに送ることができる。
【００４２】
フローグラフ解析部２４０は、システム２００が受け取るメトリック情報２０４、並びに／又はフローグラフ２３２内の終了ノード２４２、メトリックノード２４４、及び開始ノード２４６を識別するための他のパラメータに基づいて、フローグラフ２３２を解析するように構成することができる。メトリック情報２０４は、システム２００のために決定されるメトリックに関連する情報であってよい。例えば、ソフトウェアコード２０２のために決定されることができるメトリックがセキュリティに関連する場合、メトリック情報２０４には、ソフトウェアコード２０２のセキュリティに関連する感知可能な関数、メソッド、又はオブジェクトに関する情報を含むことができる。
【００４３】
終了ノード２４２は、ソフトウェアコード２０２内の対応する終了オペレーションをそれぞれ含むことができる。終了オペレーションは、ソフトウェアコード２０２がリセットされ、又は再度実行されるまでソフトウェアコード２０２の実行を終了し、終わらせ、一時停止し、又は他の停止をさせるソフトウェアコード２０２内のいかなるオペレーションでもよい。例えば、終了オペレーションには、他の終了点又は終点の中でも、スローされた例外、コードの終わりを含むことができる。いくつかの実施形態において、終了オペレーションは、ソフトウェアコード２０２のために決定されるメトリックに、したがってシステム２００が受け取るメトリック情報２０４に固有であってよい。例えば、メトリック情報２０４がディスクアクセスに関連する場合、終了オペレーションは、ディスクアクセスを終了するソフトウェアコード２０２内のオペレーションであってよい。
【００４４】
メトリックノード２４４は、システム２００が受け取るメトリック情報２０４により示されるように、対応するメトリックオブジェクトをそれぞれ含むことができる。メトリックオブジェクトは、変数、関数、メソッド、又はオペレーションなどの、ソフトウェアコード２０２内のいかなるオブジェクトでもよい。メトリックオブジェクトを、システム２００が受け取るメトリック情報２０４に基づいて選択することができる。例えば、メトリック情報２０４がソフトウェアコード２０２のセキュリティに関連する場合、メトリックオブジェクトは、中でも、ユーザ許可、データベースへのアクセス、ディスクへの書き込み、保護された情報に関連付けられたオペレーションとすることができる。別の例として、メトリック情報が時間を計算することに関連する場合、メトリックオブジェクトは、素数を決定するため、又は多数の大きなオブジェクトにおいて計算するための関数などの、複数の計算を使用する、又は計算に集中したオペレーションとすることができる。
【００４５】
開始ノード２４６は、ソフトウェアコード２０２内に対応する開始オペレーションをそれぞれ含むことができる。開始オペレーションは、人間又は外部システムがソフトウェアコード２０２とやりとりすることが可能となるソフトウェアコード２０２内のいかなるオペレーションでもよい。ソフトウェアコード２０２とのやり取りには、ユーザインタフェース、ＡＰＩインタフェース、又はいくつかの他のインタフェースを用いて、データを受信すること、データを送信すること、及び／又はデータを表示することを含むことができる。いくつかの実施形態において、開始オペレーションは、ソフトウェアコード２０２のために決定されるメトリックに固有であってよい。例えば、メトリックがネットワークアクセスに関連する場合、開始オペレーションは、ネットワークアクセスを始めるソフトウェアコード２０２内のオペレーションであってよい。
【００４６】
いくつかの実施形態において、ソフトウェアコード２０２がコード・パーサー２２０によりパースされる前に、開始オペレーション、終了オペレーション、及び／又はメトリックオブジェクトを、メトリック情報２０４に基づいてソフトウェアコード２０２において識別することができる。これら及び他の実施形態において、開始オペレーション、終了オペレーション、及び／又はメトリックオブジェクトを含むソフトウェアコード２０２内の位置を、マーク付けすることができる。いくつかの実施形態において、ソフトウェアコード２０２をユーザがマーク付けすることができる。ソフトウェアコード２０２に基づいて構築されるフローグラフ２３２には、それぞれ、開始ノード２４６、終了ノード２４２、及び／又はメトリックノード２４４などの、開始オペレーション、終了オペレーション、及び／又はメトリックオブジェクトを含むノード内のマークを含むことができる。フローグラフ解析部２４０は、フローグラフ２３２を解析してフローグラフ２３２内のマークを識別することができ、それにより開始ノード２４６、終了ノード２４２、及び／又はメトリックノード２４４を識別することができる。識別された開始ノード２４６、終了ノード２４２、及びメトリックノード２４４をパスカウンタ２６０に送ることができる。
【００４７】
縮小化フローグラフ生成部２５０は、フローグラフ２３２に基づいて複数の縮小化フローグラフノードを含む縮小化フローグラフ２５２を生成するように構成することができる。縮小化フローグラフ２５２を生成するために、縮小化フローグラフ生成部２５０はフローグラフ２３２を解析して、強連結しているフローグラフ２３２内のノードのサブセットを決定することができる。サブセット内の各ノードからサブセット内のあらゆる他のノードへのパスが存在する場合、ノードのサブセットは強連結であるとすることができる。縮小化フローグラフ生成部２５０は、強連結しているノードの各サブセットをクラスタ縮小化フローグラフノードへとクラスタ化するように構成することができる。強連結しているノードの各サブセットの、クラスタ縮小化フローグラフノードへのクラスタ化の後、フローグラフ２３２内の他のノードに対して強連結していないフローグラフ２３２のノードが縮小化フローグラフ２５２内の縮小化フローグラフノードになり、縮小化フローグラフノードとクラスタ縮小化フローグラフノードとを連結して縮小化フローグラフ２５２を形成する。
【００４８】
いくつかの実施形態において、縮小化フローグラフ生成部２５０は、強連結しているノードの１つ又は複数のサブセットをクラスタ縮小化フローグラフノードへとクラスタ化することができる。代替的又は追加的に、縮小化フローグラフ生成部２５０は、強連結しているノードのサブセットのそれぞれをクラスタ縮小化フローグラフノードへとクラスタ化することができる。これら及び他の実施形態において、縮小化フローグラフ２５２は、有向非巡回グラフ又は他の適切なグラフであってよい。いくつかの実施形態において、縮小化フローグラフ生成部２５０は、ノードのサブセットが強連結していること以外の基準に基づいて、フローグラフ２３２からのノードのサブセットをクラスタ縮小化フローグラフノードへとクラスタ化することができる。縮小化フローグラフ２５２を、パスカウンタ２６０へ送ることができる。
【００４９】
パスカウンタ２６０は、通過パスカウンタ２６２、メトリック開始パスカウンタ２６４、及びメトリック終了パスカウンタ２６６を含むことができる。通過パスカウンタ２６２は、縮小化フローグラフ２５２に基づいて終了ノード２４２と開始ノード２４６とのペアのうちそれぞれ又は一部の間の通過パスの数を決定するように構成することができる。例えば、第１及び第２の終了ノード２４２と第１及び第２の開始ノード２４６とが存在する場合、通過パスカウンタ２６２は、第１の終了ノードと第１の開始ノードとの間、第１の終了ノードと第２の開始ノードとの間、第２の終了ノードと第１の開始ノードとの間、及び第２の終了ノードと第２の開始ノードとの間の、通過パスの数を決定することができる。
【００５０】
終了ノード２４２と開始ノード２４６とのペアの間の通過パスを決定するために、通過パスカウンタ２６２は、終了ノード２４２及び開始ノード２４６に対応する、又は終了ノード２４２及び開始ノード２４６を含む縮小化フローグラフノード（群）を決定することができる。例えば、いくつかの実施形態において、開始ノード２４６又は終了ノード２４２のうちいくつかを、クラスタ縮小化フローグラフノードに含むことができる。終了ノード２４２及び開始ノード２４６に対応する、又は終了ノード２４２及び開始ノード２４６を含む縮小化フローグラフノードに基づいて、通過パスカウンタ２６２は、終了ノード２４２と開始ノード２４６とのペアのうちそれぞれ又は一部の間のパスの数を決定することができる。パスが種々の縮小化フローグラフノード、及び／又は縮小化フローグラフノードの異なるシーケンスを含む場合、上記パスは異なると見なすことができる。
【００５１】
いくつかの実施形態において、フローグラフノードのサブセットを含むそれぞれのクラスタ縮小化フローグラフノードは、図１Ｂに関連して説明した重み付けされたパス値を有することができる。結果として、２つの縮小化フローグラフノード間の縮小化フローグラフ２５２を通る単一パスが重み付けされたパス値を有するクラスタ縮小化フローグラフノードを通過する場合、上記単一パスを通過パスカウンタ２６２により複数のパスとして数えることができる。例えば、クラスタ縮小化フローグラフノードが１０という重み付けされたパス値を有することを仮定する。１０という重み付けされたパス値を有するクラスタ縮小化フローグラフノードを含むパスを、通過パスカウンタ２６２により１０個のパスとして数えることができる。通過パスカウンタ２６２は、開始ノード２４６と終了ノード２４２とのペアのうちそれぞれ又は一部の間で決定される通過パスの数を組み合わせ、組み合わされた数を通過パス数２７０として出力するように構成することができる。
【００５２】
メトリック開始パスカウンタ２６４は、縮小化フローグラフ２５２に基づいて、メトリックノード２４４と開始ノード２４６とのペアのうちそれぞれ又は一部の間のメトリック開始パスの数を決定するように構成することができる。メトリック開始パスカウンタ２６４は、開始ノード２４６とメトリックノード２４４とのペアのうちそれぞれ又は一部の間で決定されるメトリック開始パスの数を組み合わせ、組み合わされた数をメトリック開始パス数２７２として出力するように構成することができる。メトリック開始パスカウンタ２６４は、通過パスカウンタ２６２と類似の方法で機能することができる。
【００５３】
メトリック終了パスカウンタ２６６は、縮小化フローグラフ２５２に基づいて、メトリックノード２４４と終了ノード２４２とのペアのうちそれぞれ又は一部の間の終了パスの数を決定するように構成することができる。メトリック終了パスカウンタ２６６は、終了ノード２４２とメトリックノード２４４とのペアのうちそれぞれ又は一部の間で決定されたメトリック終了パスの数を組み合わせ、組み合わされた数をメトリック終了パス数２７４として出力するように構成することができる。メトリック終了パスカウンタ２６６は、通過パスカウンタ２６２と類似の方法で機能することができる。
【００５４】
通過パス数２７０、メトリック開始パス数２７２、及びメトリック終了パス数２７４における比較を用いて、ソフトウェアコード２０２のためのメトリックを決定することができる。例えば、ソフトウェアコード２０２のメトリックノード（群）のためのメトリック開始パス数２７２と通過パス数２７０とを決定及び比較して、ソフトウェアコード２０２の第１のメトリックとすることができる第１の比率を決定することができる。ソフトウェアコード２０２はコード編集などの変更を受けて、機能性を増加すること、及び／又はソフトウェアコード２０２が有する問題を解決することができる。ソフトウェアコード２０２に対する変更がもたらされてソフトウェアコード２０２の第２のメトリックとすることができる第２の比率が決定された後、メトリックノード（群）のためのメトリック開始パス数２７２と通過パス数２７０とを決定及び比較することができる。メトリックノードに関連するような第１のメトリックと第２のメトリックとにおける差は、上記変更に起因してソフトウェアコード２０２と特にメトリックノード（群）とへの希望しない、望まれない、及び／又は考慮されていない影響を示す場合があり、あるいは代替的に、上記変更に起因してソフトウェアコード２０２と特にメトリックノード（群）とへの改善を示す場合がある。ソフトウェアコード２０２のための通過パス数２７０、メトリック開始パス数２７２、及び／又はメトリック終了パス数２７４を決定することにより、メトリック情報２０４に関するソフトウェアコード２０２への変更を定量的に追跡することができる。追加的に、ソフトウェアコード２０２のメトリックを用いて、ソフトウェアコード２０２を、種々のバージョンのソフトウェアコード２０２と、及び／又は他のソフトウェアコードと定量的に比較することができる。
【００５５】
いくつかの実施形態において、ソフトウェアコード２０２のメトリックは、通過パス数２７０、メトリック開始パス数２７２、及び／又はメトリック終了パス数２７４における比率の組み合わせ又は他の比較に基づくことができる。代替的又は追加的に、ソフトウェアコード２０２のメトリックは、通過パス数２７０、メトリック開始パス数２７２、及び／又はメトリック終了パス数２７４を含むか、あるいはそうでなければ通過パス数２７０、メトリック開始パス数２７２、及び／又はメトリック終了パス数２７４に基づくかする、いくつかの数式に基づくことができる。
【００５６】
本開示の範囲から逸脱することなく、システム２００に対して、変更、追加、又は削除を行うことができる。例えば、システム２００は、メトリック決定ユニットを含むように構成することができる。メトリック決定ユニットは、通過パス数２７０、メトリック開始パス数２７２、及び／又はメトリック終了パス数２７４に基づいてメトリックを決定するように構成することができる。いくつかの実施形態において、システム２００の特定の態様は、ソフトウェアコード２０２のためのプログラミング言語に依存して異なることができる。例えば、Ｊａｖａをパースするために使用されるパーサーは、Ｃをパースするために使用されるパーサーとは異なることができる。しかしながら、システム２００に関して記載される基本的な原理は、ソフトウェアコード２０２に使用されるプログラミング言語にかかわらず同様になる。いくつかの実施形態において、システム２００を、コンピュータ読取可能媒体を用いて実施することができ、上記コンピュータ読取可能媒体は、上記媒体上に記憶された、システム２００を実施するコンピュータ実行可能命令又はデータ構造を担体し、又は有する。
【００５７】
図３は、本明細書に記載の少なくともいくつかの実施形態に従って配置された、パス数を決定する例示的な方法３００のフローチャートである。方法３００を、いくつかの実施形態において、図２のシステム２００などのシステムによって実施することができる。具体的に、方法３００は、図２のパスカウンタ２６０により実施することができる。例えば、方法３００は、図２のパスカウンタ２６２、メトリック開始パスカウンタ２６４、及び／又はメトリック終了パスカウンタ２６６により実施することができる。別個のブロックとして図示されているが、種々のブロックを、所望の実装に依存して、さらなるブロックに分割することができ、より少ないブロックに組み合わせることができ、あるいは消去することができる。
【００５８】
図示のとおり、方法３００は、縮小化フローグラフ内のノード間のパス数を決定する再帰的な種類の方法を実施する。結果として、方法３００は、方法３００がブロック３２４において終わる前に、図３内に図示される種々のブロックを複数回通って進むことができる。代替的又は追加的に、縮小化フローグラフ内の複数の種々のノードを、方法３００の間に本明細書に記載されるように始点（start）ノードとして識別することができる。
【００５９】
方法３００は、ブロック３０２で始まることができ、ここで始点ノードを選択することができる。始点ノードは、縮小化フローグラフ内の多数の縮小化フローグラフノードのうちいずれか１つであってよい。縮小化フローグラフは、フローグラフに基づくことができ、クラスタ縮小化フローグラフノードである縮小化フローグラフノードを有することができる。例えば、縮小化フローグラフは、図１Ｂの縮小化フローグラフ１００Ｂに類似する場合がある。いくつかの実施形態において、始点ノードは、開始ノード、又は開始ノードを含むクラスタ縮小化フローグラフノードであってよい。代替的又は追加的に、始点ノードは、メトリックノード、又はメトリックノードを含むクラスタ縮小化フローグラフノードであってよい。
【００６０】
ブロック３０４において、始点ノードのそれぞれのノードの下流が方法３００により処理されているかどうかを決定することができる。あるノードが、縮小化フローグラフにより表されるソフトウェアコードの実行パス内の別ノードの後ろにある場合、上記ノードは、上記別ノードの下流であるとすることができる。例えば、図１Ｂにおいて、クラスタ縮小化フローグラフノード１４０Ｂについて、クラスタ縮小化フローグラフノード１４０Ｃとクラスタ縮小化フローグラフノード１４２とがクラスタ縮小化フローグラフノード１４０Ｂの下流であり、一方、クラスタ縮小化フローグラフノード１４０Ａはクラスタ縮小化フローグラフノード１４０Ｂの上流である。あるノードがブロック３０６において選択されている場合、上記ノードは処理すべきであると見なすことができる。始点ノードの下流ノードが処理されていない場合、方法３００はブロック３０６へと進むことができる。始点ノードの下流ノードのすべてが処理されている場合、方法３００はブロック３１４へと進むことができる。
【００６１】
ブロック３０６において、未処理の下流ノードを選択することができる。ブロック３０８において、選択された未処理の下流ノードがメトリック終了ノードを含む、又はメトリック終了ノードであるかどうかを決定することができる。選択された未処理の下流ノードがメトリック終了ノードを含む、又はメトリック終了ノードである場合、方法３００は、ブロック３１２へと進むことができる。選択された未処理の下流ノードがメトリック終了ノードを含まない、又はメトリック終了ノードではない場合、方法３００は、ブロック３１０へと進むことができる。ブロック３１０において、選択された未処理の下流ノードを始点ノードとして設定することができ、方法３００はブロック３０４へと進むことができる。
【００６２】
ブロック３１２において、始点ノードのためのパス数を１増加させることができ、方法３００はブロック３０４へと進むことができる。前に示したように、ブロック３０４において、始点ノードの下流ノードのすべてが処理されている場合、方法３００は、ブロック３１４へと進むことができる。
【００６３】
ブロック３１４において、始点ノードが縮小化フローグラフ内のクラスタ縮小化フローグラフノードであるのかどうかを決定することができる。始点ノードが縮小化フローグラフ内のクラスタ縮小化フローグラフノードである場合、方法３００は、ブロック３１６へと進むことができる。始点ノードが縮小化フローグラフ内のクラスタ縮小化フローグラフノードではない場合、方法３００はブロック３１８へと進むことができる。
【００６４】
ブロック３１６において、始点ノードに関連付けられた重み付けされたパス値を決定することができる。重み付けされたパス値を、いくつかの実施形態において、始点ノード内のクラスタ化されたフローグラフノードの数、及び／又は始点ノード内のクラスタ化されたフローグラフノードの構成に基づいて決定することができる。重み付けされたパス値を、さらに、本明細書で論じられる任意の他の方法に基づいて決定することができる。
【００６５】
ブロック３１８において、始点ノードのためのパス数を決定することができる。パス数を、ブロック３１２の間に追加されるパス数に基づいて、又は始点ノードの下流である、以前に始点ノードについて決定されたパス数から、決定することができる。いくつかの実施形態において、始点ノードがクラスタ縮小化フローグラフノードである場合、決定されたパス数を、始点ノードの重み付けされたパス値により乗算することができる。
【００６６】
ブロック３２０において、始点ノードが以前の始点ノードの下流ノードであるかどうかを決定することができる。始点ノードが以前の始点ノードの下流ノードではない場合、すなわち、始点ノードがブロック３０２において選択された最初の始点ノードであった場合、方法３００は、ブロック３２４へと進むことができる。始点ノードが以前の始点ノードの下流である場合、方法３００は、ブロック３２２へと進むことができる。
【００６７】
ブロック３２２において、以前の始点ノードを、始点ノードとして設定することができ、本方法は、ブロック３０４へと進むことができる。始点ノードとして設定される以前の始点ノードは、パス数がブロック３１８において決定される現在の始点ノードの前に、始点ノードとして最も直近に選択されていたノードであってよい。ブロック３２４において、方法３００は終わることができる。
【００６８】
本明細書に開示される上記及び他の処理及び方法について、上記処理及び方法において行われる機能を異なる順序で実施することができることを、当業者は十分理解するであろう。さらに、概説されたステップ及びオペレーションは単に例を提供するものであり、開示された実施形態の本質からそれることなく、ステップ及びオペレーションのうちいくつかが、随意的であってよく、より少ないステップ及びオペレーションへと組み合わせることができ、あるいはさらなるステップ及びオペレーションへと拡張することができる。さらに、方法３００は、縮小化フローチャート内でパス数を決定するために使用することができる方法のほんの一例である。パス数を決定する他の方法を、本開示の範囲から逸脱することなく用いることができる。
【００６９】
図４は、本明細書に記載の少なくともいくつかの実施形態に従って配置された、ソフトウェアコードのメトリックを決定する例示的な方法４００のフローチャートである。方法４００を、いくつかの実施形態において、図２のシステム２００などのシステムにより実施することができる。別個のブロックとして図示されているが、所望の実装に依存して、種々のブロックを、さらなるブロックへと分割することができ、より少ないブロックへと組み合わせることができ、あるいは消去することができる。
【００７０】
方法４００は、ブロック４０２で始まることができ、ここで、フローグラフをソフトウェアコードについて生成することができる。フローグラフには、複数のフローグラフノードを含むことができる。複数のフローグラフノードには、開始点ノード、終了点ノード、及びメトリックノードを含むことができる。メトリックノードには、ソフトウェアコードのメトリックオブジェクトを含むことができる。いくつかの実施形態において、フローグラフを、ソフトウェアコードの静的解析に基づいて生成することができる。
【００７１】
ブロック４０４において、縮小化フローグラフを、複数の縮小化フローグラフノードを含むフローグラフに基づいて生成することができる。縮小化フローグラフノードのうち少なくとも１つが、フローグラフノードのクラスタ化されたサブセットを表すことができる。
【００７２】
ブロック４０６において、縮小化フローグラフ内で、開始点ノードを含む第１の縮小化フローグラフノードと終了点ノードを含む第２の縮小化フローグラフノードとの間の縮小化フローグラフノードに基づいて、通過パス数を決定することができる。
【００７３】
ブロック４０８において、縮小化フローグラフ内のメトリック開始パス数を、第１の縮小化フローグラフノードとメトリックノードを含む第３の縮小化フローグラフノードとの間の縮小化フローグラフノードに基づいて決定することができる。いくつかの実施形態において、第１の縮小化フローグラフノードと第３の縮小化フローグラフノードとの間の縮小化フローグラフノードのうち１つが、フローグラフノードのクラスタ化されたサブセットを表す縮小化フローグラフノードの少なくとも１つであってよい。これら及び他の実施形態において、メトリック開始パス数を、縮小化フローグラフノードの少なくとも１つに関連付けられた重み付けされたパス値により増加させることができる。いくつかの実施形態において、重み付けされたパス値は、フローグラフノードのクラスタ化されたサブセット内のフローグラフノードの数に基づくことができる。
【００７４】
方法４００は、さらに、通過パス数とメトリック開始パス数との比率に基づいてソフトウェアコードのメトリックを決定することを含むことができる。これら及び他の実施形態において、ソフトウェアコードのメトリックオブジェクトを、ソフトウェアコードのメトリックが決定されることに基づいて、識別することができる。
【００７５】
方法４００は、さらに、第３の縮小化フローグラフノードと第２の縮小化フローグラフノードとの間の縮小化フローグラフノードに基づいて、縮小化フローグラフ内でメトリック終了パス数を決定することを含むことができる。これら及び他の実施形態において、ソフトウェアコードのメトリックは、さらに、通過パス数とメトリック終了パス数との第２の比率に基づくことができる。いくつかの実施形態において、ソフトウェアコードのメトリックは、ソフトウェアコードの他の側面の中でも、ソフトウェアコードのセキュリティ、ソフトウェアコードのネットワーク性能、ソフトウェアコードのディスクアクセス性能、ソフトウェアコードを用いたユーザとのやりとりに関連することができる。
【００７６】
前述の詳細説明は、図２のシステム２００を図示するブロック図、及び図４の方法４００を図示するフローチャートなどの、ブロック図、フローチャート、及び／又は例を使用して、種々の実施形態を説明している。上記のブロック図、フローチャート、及び／又は例が１つ又は複数の関数及び／又はオペレーションを含む限り、上記のブロック図、フローチャート、又は例の中のそれぞれの関数及び／又はオペレーションを、さまざまなハードウェア、ソフトウェア、ファームウェア、又は仮想的にそれらのいずれかを組み合わせたものによって、個々的及び／又は集合的に実施することができることを、当業者は理解するであろう。いくつかの実施形態において、本明細書に記載される対象事項のいくつかの部分を、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、デジタル・シグナル・プロセッサ（ＤＳＰ）、又は他の集積されたフォーマットを介して実施することができる。しかしながら、当業者は、本明細書に開示される実施形態のいくつかの態様が、全体的又は部分的に、１つ若しくは複数のコンピュータ上で実行される１つ若しくは複数のコンピュータプログラムとして（例えば、１つ若しくは複数のコンピュータシステム上で実行される１つ若しくは複数のプログラムとして）、１つ若しくは複数のプロセッサ上で実行される１つ若しくは複数のプログラムとして（例えば、１つ若しくは複数のマイクロプロセッサ上で実行される１つ若しくは複数のプログラムとして）、ファームウェアとして、又は仮想的にそれらのいずれかを組み合わせたものとして、集積回路において同等に実施することができることと、電気回路を設計すること、並びに／又はソフトウェア及び／若しくはファームウェアのコードを書くことは本開示を考慮すると十分当業者の技能の範囲内であろうということとを、認識するであろう。加えて、当業者は、本明細書に記載される対象事項のメカニズムを、種々の形式におけるプログラム製品として配布することが可能であることと、本明細書に記載される対象事項の例示的な実施形態が、配布を行うために使用される信号伝送媒体の特定の種類にかかわらず適用されることとを、十分理解するであろう。
【００７７】
さらに、本明細書に記載される実施形態は、以下でより詳細に論じられるように、種々のコンピュータハードウェア又はソフトウェアモジュールを含む特別目的又は汎用目的のコンピュータの使用を含むことができる。
【００７８】
本明細書に記載の実施形態は、コンピュータ読取可能媒体を用いて実施することができ、上記コンピュータ読取可能媒体は、上記媒体上に記憶されたコンピュータ実行可能命令又はデータ構造を担体し、又は有する。上記のコンピュータ読取可能媒体は、汎用目的又は特別目的のコンピュータによりアクセスすることができるいかなる利用可能な媒体でもよい。限定ではなく例として、上記のコンピュータ読取可能媒体には、所望のプログラムコードをコンピュータ実行可能命令又はデータ構造の形式で担体又は記憶するために使用することができ、汎用目的又は特別目的のコンピュータによりアクセスすることができる、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気ディスク記憶デバイス、又はいかなる他の記憶媒体も含む有形のコンピュータ読取可能記憶媒体を含むことができる。さらに、上記の組み合わせを、コンピュータ読取可能媒体の範囲の中に含めることができる。
【００７９】
コンピュータ実行可能命令には、例えば、汎用目的コンピュータ、特別目的コンピュータ、又は特別目的処理デバイス（例えば、プロセッサ）に特定の機能又は機能のグループを行わせる命令及びデータを含む。本願対象事項を、構造的な特徴及び／又は方法論的動作に固有の言語において説明してきたが、別記の請求項に定義される対象事項は必ずしも上述の固有の特徴又は動作に限定されないことが、理解されるべきである。むしろ、上述の固有の特徴及び動作は、請求項を実施する１つの例示的な形式として開示されている。
【００８０】
本明細書において、用語「モジュール」又は「コンポーネント」は、コンピューティングシステム上で実行されるソフトウェアオブジェクト又はルーチンを指すことができる。本明細書に記載の種々のコンポーネント、モジュール、エンジン、及びサービスを、コンピューティングシステム上で実行されるオブジェクト又プロセスとして（例えば、別個のスレッドとして）実施することができる。本明細書に記載のシステム及び方法が好ましくはソフトウェアにおいて実施される一方、ハードウェアにおける、又はソフトウェアとハードウェアとの組み合わせにおける実装も可能であり、考えられる。本説明において、「コンピューティング・エンティティ」は、本明細書において以前に定義されたようないかなるコンピューティングシステムでもよく、あるいはコンピューティングシステム上で実行されるいかなるモジュール又はモジュールの組み合わせでもよい。
【００８１】
本明細書に挙げられたすべての例及び条件付きの言語は、当分野を推進する発明者により提供される発明及び概念を理解することにおいて読み手を助けるための教育上の目的を意図するものであり、上記の具体的に挙げられた例及び条件への限定の範囲外にあると見なされるべきである。本発明の実施形態を詳細に説明してきたが、種々の変更、代替、及び調整を、発明の主旨及び範囲から逸脱することなく本明細書に対して行えるであろうことが、理解されるべきである。
【符号の説明】
【００８２】
１００  フローグラフ
１０２  ノード
１１０、１２０、１３０  クラスタ
１４０  クラスタ縮小化フローグラフノード
１４２  縮小化フローグラフノード
２０２  ソフトウェアコード
２０４  メトリック情報
２２０  コード・パーサー
２２２  パースされたソフトウェアコード
２３０  フローグラフ生成部
２３２  フローグラフ
２４０  フローグラフ解析部
２４２  終了ノード
２４４  メトリックノード
２４６  開始ノード
２５０  縮小化フローグラフ生成部
２５２  縮小化フローグラフ
２６０  パスカウンタ
２６２  通過パスカウンタ
２６４  メトリック開始パスカウンタ
２６６  メトリック終了パスカウンタ
２７０  通過パス数
２７２  メトリック開始パス数
２７４  メトリック終了パス数
【図１Ａ】
2014206977.tif 000003
【図１Ｂ】
2014206977.tif 000004
【図２】
2014206977.tif 000005
【図３】
2014206977.tif 000006
【図４】
2014206977.tif 000007