(57)【要約】【課題】実世界のコードに基づくランダムコード生成を提供すること。【解決手段】ランダムコード生成は、実世界のコードの統計分類を利用して、字句的および構造的に妥当であるコードをランダムに生成することを含む。【選択図】図２
2006228205.tif 000002
【特許請求の範囲】
【請求項１】
サンプリングされたメソッドにより統計テーブルを構成するステップと、
前記統計テーブルの構成により新しいメソッドを生成するステップと
備えたことを特徴とする方法。
【請求項２】
前記構成するステップは、マネージ実行環境において実行されることを特徴とする請求項１に記載の方法。
【請求項３】
前記サンプリングされたメソッドは、アンマネージの実行環境に由来することを特徴とする請求項１に記載の方法。
【請求項４】
前記統計テーブルは、前記既知のメソッドからの１つまたは複数の指定されたパラメータの総計を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記統計テーブルは、メソッド構造、メソッドフロー制御構造、メソッドデータフロー、命令頻度、オブジェクト型の使用、ｕｎｓａｆｅコードの使用、ジェネリック型の使用、ループの使用、例外処理、またはフレームの使用のうち少なくとも１つに関係するデータを含んでいる、前記既知のメソッドからのデータの総計を含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記生成するステップは、前記統計テーブルの構成による中間言語コードを機械語に変換するステップを含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記新しいメソッドをコンパイラに転送するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項８】
読み込まれると、１つまたは複数のプロセッサに、
既知のメソッドを中間言語にサンプリングするステップと、
前記サンプリングされたメソッドの統計分類を作成するステップと、
前記サンプリングされたメソッドの統計分類により前記中間言語における新しいメソッドを生成するステップと
を行わせる１つまたは複数の実行可能命令を有するコンピュータ読取可能な媒体。
【請求項９】
前記１つまたは複数のプロセッサに、
前記新しいメソッドをコンパイルするステップ
をさらに行わせる１つまたは複数の実行可能命令を有することを特徴とする請求項８に記載のコンピュータ読取可能な媒体。
【請求項１０】
前記サンプリングされたメソッドの統計分類を作成するステップを行わせる１つまたは複数の実行可能命令は、前記統計分類と、別のサンプリングされたメソッドに対して作成された統計分類とを組合せることを前記１つまたは複数のプロセッサに行わせ、および前記新しいメソッドを生成するステップを行わせる１つまたは複数の実行可能命令は、前記組合せられた統計情報により新しいメソッドを生成するステップを前記１つまたは複数のプロセッサに行わせることを特徴とする請求項８に記載のコンピュータ読取可能な媒体。
【請求項１１】
前記サンプリングされたメソッドの統計分類は、メソッド構造、メソッドフロー制御構造、メソッドデータフロー、命令頻度、オブジェクト型の使用、ｕｎｓａｆｅコードの使用、ジェネリック型の使用、ループの使用、例外処理、またはフレームの使用のうち少なくとも１つに関係するデータを含むことを特徴とする請求項８に記載のコンピュータ読取可能な媒体。
【請求項１２】
前記１つまたは複数のプロセッサは、前記１つまたは複数の命令をマネージ実行環境において処理することを特徴とする請求項８に記載のコンピュータ読取可能な媒体。
【請求項１３】
前記１つまたは複数のプロセッサは、前記１つまたは複数の命令をアンマネージの実行環境において処理することを特徴とする請求項８に記載のコンピュータ読取可能な媒体。
【請求項１４】
サンプリングされたメソッドに対する統計モデルを生成するサンプラと、
前記統計モデルにより新しいメソッドを生成するジェネレータと
を備えたことを特徴とするテスタ。
【請求項１５】
前記新しいメソッドを機械語に変換するコンパイラをさらに備えたことを特徴とする請求項１４に記載のテスタ。
【請求項１６】
前記サンプラは、メソッド構造、メソッドフロー制御構造、メソッドデータフロー、命令頻度、オブジェクト型の使用、ｕｎｓａｆｅコードの使用、ジェネリック型の使用、ループの使用、例外処理、またはフレームの使用のうち少なくとも１つにより前記メソッドに対する統計モデルを生成することを特徴とする請求項１４に記載のテスタ。
【請求項１７】
前記サンプラは、アンマネージの実行環境におけるソースから前記メソッドを受信することを特徴とする請求項１４に記載のテスタ。
【請求項１８】
前記サンプラは、マネージ実行環境における実行エンジンから前記メソッドを受信することを特徴とする請求項１４に記載のテスタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ランダムコード生成に関し、より詳細には、オブジェクト指向技術におけるランダムコード生成に関する。
【背景技術】
【０００２】
従来、オブジェクト指向技術におけるアプリケーションプログラムにルーチンを提供するマネージ実行環境は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、およびモバイル処理装置のホストを含めた処理装置において、ソフトウェア実行の信頼性を高めるために開発されていることが知られている。マネージ実行環境は、処理装置において実行されているアプリケーションに、抽象化の層およびサービスを提供することができる。さらにマネージ実行環境は、このようなアプリケーションに、エラー処理機能および自動メモリ管理機能を含む機能を提供することもできる。
【０００３】
オブジェクト指向技術において、処理装置は、ソフトウェアを実行する際に、オブジェクトを生成し、メモリ上の領域を確保し、および自動メモリ管理機能などにより、データ領域を確保かつ解放することが多い。よって、オブジェクト指向コードに対する自由度が高くなる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、実世界すなわち既知のコードに基づいてランダムにコードを生成する方法がないという問題があった。
【０００５】
本発明は、このような問題に鑑みてなされたもので、その目的とするところは、実世界のコードに基づくランダムコード生成を提供することにある。
【課題を解決するための手段】
【０００６】
本発明は、このような目的を達成するために、請求項１に記載の発明は、方法において、サンプリングされたメソッドにより統計テーブルを構成するステップと、統計テーブルの構成により新しいメソッドを生成するステップとを備えることを特徴とする。
【０００７】
請求項２に記載の発明は、請求項１に記載の構成するステップが、マネージ実行環境において実行されることを特徴とする。
【０００８】
請求項３に記載の発明は、請求項１に記載のサンプリングされたメソッドが、アンマネージの実行環境に由来することを特徴とする。
【０００９】
請求項４に記載の発明は、請求項１に記載の統計テーブルが、既知のメソッドからの１つまたは複数の指定されたパラメータの総計を含むことを特徴とする。
【００１０】
請求項５に記載の発明は、請求項１に記載の統計テーブルが、メソッド構造、メソッドフロー制御構造、メソッドデータフロー、命令頻度、オブジェクト型の使用、ｕｎｓａｆｅコードの使用、ジェネリック型の使用、ループの使用、例外処理、またはフレームの使用のうち少なくとも１つに関係するデータを含んでいる、既知のメソッドからのデータの総計を含むことを特徴とする。
【００１１】
請求項６に記載の発明は、請求項１に記載の生成するステップが、統計テーブルの構成による中間言語コードを機械語に変換するステップを含むことを特徴とする。
【００１２】
請求項７に記載の発明は、請求項１に記載の方法であって、新しいメソッドをコンパイラに転送するステップをさらに備えることを特徴とする。
【００１３】
請求項８に記載の発明は、コンピュータ読取可能な媒体において、読み込まれると、１つまたは複数のプロセッサに、既知のメソッドを中間言語にサンプリングするステップと、サンプリングされたメソッドの統計分類を作成するステップと、サンプリングされたメソッドの統計分類により中間言語における新しいメソッドを生成するステップとを行わせる１つまたは複数の実行可能命令を有することを特徴とする。
【００１４】
請求項９に記載の発明は、請求項８に記載のコンピュータ読取可能な媒体であって、１つまたは複数のプロセッサに、新しいメソッドをコンパイルするステップをさらに行わせる１つまたは複数の実行可能命令を有することを特徴とする。
【００１５】
請求項１０に記載の発明は、請求項８に記載のサンプリングされたメソッドの統計分類を作成するステップを行わせる１つまたは複数の実行可能命令が、統計分類と、別のサンプリングされたメソッドに対して作成された統計分類とを組合せることを１つまたは複数のプロセッサに行わせ、および請求項８に記載の新しいメソッドを生成するステップを行わせる１つまたは複数の実行可能命令が、組合せられた統計情報により新しいメソッドを生成するステップを１つまたは複数のプロセッサに行わせることを特徴とする。
【００１６】
請求項１１に記載の発明は、請求項８に記載のサンプリングされたメソッドの統計分類が、メソッド構造、メソッドフロー制御構造、メソッドデータフロー、命令頻度、オブジェクト型の使用、ｕｎｓａｆｅコードの使用、ジェネリック型の使用、ループの使用、例外処理、またはフレームの使用のうち少なくとも１つに関係するデータを含むことを特徴とする。
【００１７】
請求項１２に記載の発明は、請求項８に記載の１つまたは複数のプロセッサが、１つまたは複数の命令をマネージ実行環境において処理することを特徴とする。
【００１８】
請求項１３に記載の発明は、請求項８に記載の１つまたは複数のプロセッサが、１つまたは複数の命令をアンマネージの実行環境において処理することを特徴とする。
【００１９】
請求項１４に記載の発明は、テスタにおいて、サンプリングされたメソッドに対する統計モデルを生成するサンプラと、統計モデルにより新しいメソッドを生成するジェネレータとを備えることを特徴とする。
【００２０】
請求項１５に記載の発明は、請求項１４に記載のテスタであって、新しいメソッドを機械語に変換するコンパイラをさらに備えることを特徴とする。
【００２１】
請求項１６に記載の発明は、請求項１４に記載のサンプラが、メソッド構造、メソッドフロー制御構造、メソッドデータフロー、命令頻度、オブジェクト型の使用、ｕｎｓａｆｅコードの使用、ジェネリック型の使用、ループの使用、例外処理、またはフレームの使用のうち少なくとも１つによりメソッドに対する統計モデルを生成することを特徴とする。
【００２２】
請求項１７に記載の発明は、請求項１４に記載のサンプラが、アンマネージの実行環境におけるソースからメソッドを受信することを特徴とする。
【００２３】
請求項１８に記載の発明は、請求項１４に記載のサンプラが、マネージ実行環境における実行エンジンからメソッドを受信することを特徴とする。
【００２４】
このような構成によれば、実世界のコードに基づくランダムコード生成を提供することが可能となる。
【発明を実施するための最良の形態】
【００２５】
詳細な記述では、図面を参照する。
【００２６】
実世界のコードに基づくランダムコード生成について本明細書に述べる。
【００２７】
図１は、ランダムコード生成を実施することのできる例示的なネットワーク環境を示す。より具体的には、クライアント装置１０５、サーバ装置１１０、「他」の装置１１５、データソース１３０のいずれか１つは、本明細書に述べるようにランダムコード生成１２０を可能とすることができる。さらに、装置１０５、１１０、１１５、１３０は、ネットワーク１２５を介して相互に通信可能に結合することができる。したがって、ランダムコード生成１２０は、ローカルに生成された、または装置１０５、１１０、１１５、１３０のうち他のいずれかで生成されたメソッドに基づく、装置１０５、１１０、１１５、１３０のいずれかによって実施することができる。
【００２８】
クライアント装置１０５は、デスクトップパーソナルコンピュータ（ＰＣ）、ワークステーション、メインフレームコンピュータ、インターネットアプライアンス、セットトップボックス、およびメディアデバイスを含むがこれらに限定されない、様々な従来型コンピューティング装置の少なくとも１つであってよい。さらに、クライアント装置１０５は、パーソナルデジタルアシスタント（ＰＤＡ）、ラップトップコンピュータ、セルラー電話機などを含むがこれらに限定されない、有線および／または無線リンクでネットワーク１２５に関連付けることのできるあらゆる装置の少なくとも１つであってもよい。さらに、クライアント装置１０５は、前述の各クライアント装置を様々な数量および／または組合せで表すことができる。「他」の装置１１５もまた、上述したクライアント装置１０５の例のいずれかによって具体化することができる。
【００２９】
サーバ装置１１０は、様々なデータおよび／または機能のいずれかを、クライアント装置１０５または「他」の装置１１５に提供することができる。データは、公衆に入手可能であってもよく、あるいは制限されてもよい。例えば、特定のユーザだけに制限するか、適切な加入料金またはライセンス料金が支払われた場合だけに制限することができる。サーバ装置１１０は、ネットワークサーバ、アプリケーションサーバ、ウェブブレードサーバ、またはこれらのあらゆる組合せの、少なくとも１つであってよい。典型的には、サーバ装置１１０は、コンテンツのソースであるあらゆる装置あり、およびクライアント装置１０５は、ネットワーク１２５またはオフライン媒体を介してそのようなコンテンツを受け取るあらゆる装置である。しかし、本明細書で述べる例示的な実装形態によれば、サーバ装置１１０およびクライアント装置１０５は、交換可能に送信側ホストまたは受信側ホストであってよい。「他」の装置１１５もまた、上述したサーバ装置１１０の例のいずれかによって具体化することができる。
【００３０】
「他」の装置１１５はさらに、本明細書で述べる実施例の１つまたは複数に従ってランダムコード生成１２０を可能なあらゆる装置とすることができる。すなわち、「他」の装置１１５は、マネージ実行環境とテスト環境とのいずれかにおいて、他の既知のアプリケーション、プログラム、関数、またはプログラム可能で実行可能なコードの他の集合の少なくとも１つをサンプリングすることに基づいて、メソッド、またはメソッドの一部をランダムに生成することのできる、あらゆるソフトウェア対応コンピューティング装置または処理装置とすることができる。したがって、「他」の装置１１５は、オペレーティングシステム、インタープリタ、コンバータ、コンパイラ、マネージ実行環境のうちの少なくとも１つを実装された、コンピューティング装置または処理装置とすることができる。これらの例は決して限定するものではなく、したがってそのようにして解釈されるべきではない。
【００３１】
ネットワーク１２５は、様々な従来型ネットワークトポロジのいずれかを表すことができ、これらはあらゆる有線および／または無線ネットワークを含むことができる。ネットワーク１２５はさらに、公開および／または独自仕様のプロトコルを含めた様々な従来型ネットワークプロトコルのいずれかを利用することができる。例えばネットワーク１２５は、インターネットまたはイントラネットを、あるいは１つまたは複数のローカルエリアネットワーク（ＬＡＮ）の少なくとも一部を含むことができる。
【００３２】
データソース１３０は、デスクトップパーソナルコンピュータ（ＰＣ）を含めた様々な従来型コンピューティング装置のいずれか１つを表すことができ、この装置は、オブジェクト指向コードで書かれている場合もありそうでない場合もあるアプリケーション、プログラム、関数、またはプログラム可能で実行可能なコードの他の集合に関して、ランダムコード生成１２０を可能であるとすることができる。あるいは、データソース１３０はまた、アプリケーション、プログラム、または関数の少なくとも一部を別のワークステーションに送信することのできる、ワークステーション、メインフレームコンピュータ、インターネットアプライアンス、セットトップボックス、メディアデバイス、パーソナルデジタルアシスタント（ＰＤＡ）、ラップトップコンピュータ、セルラー電話機などのいずれか１つであってもよい。さらに、データソース１３０は、ランダムコード生成１２０を予測できる対象であるアプリケーション、プログラム、または関数に関するコードのソースとすることができるが、データソース１３０は、少なくとも、ランダムコード生成１２０を実施することによって得られるメソッド、またはメソッドの一部のソースと見なすこともできる。実装形態にかかわらず、ランダムコード生成１２０のための基礎としての働きをすることのできる既知のメソッド、アプリケーション、プログラム、または関数を、ネットワーク１２５を介したオンライン通知の一部として、またはオフライン通知の一部として、データソース１３０から装置１０５、１１０、１１５のいずれかに送信することができる。
【００３３】
ランダムコード生成１２０は、実世界（すなわち、既知）のコードの統計分類をレバレッジして、字句的に妥当であり、さらに実世界の構造的な特質（ｃｈａｒａｃｔｅｒｉｓｔｉｃ）を有するコード（以下、本明細書において「コード」という）をランダムに生成することを含むことができる。したがって、例えばテスト環境において、実際の顧客アプリケーション（すなわち、実世界のコード）の特質を有するランダムに生成されたコードを受信および／または実行することによって、処理コンポーネントをテストすることができ、それにより、現実的なテストシナリオをコンポーネントに提供することができる。さらに、コンポーネントは、現実的なテスト結果を生み出すことができる。さらに、テスト環境に加えて、ランダムコード生成１２０は、アンマネージの実行環境またはマネージ実行環境において実施されたときにも、さらに妥当性を有することができる。
【００３４】
図２は、実世界のコードの特質および特性（ｐｒｏｐｅｒｔｙ）に一致するランダムコード生成１２０（図１参照）の例示的な一実装形態としての処理フロー２００を示す。
【００３５】
コード２０５は、少なくとも、メソッド、アプリケーション、プログラム、関数、または他のプログラム可能で実行可能なコードの集合を指すことができる。少なくとも１つの例によれば、コード２０５は、中間言語（以下「ＩＬ」）またはアセンブリ言語を含む「実世界のコード」（すなわち、既知のコード）であってよい。ＩＬもアセンブリ言語も両方とも、高水準ソースコードとターゲット（すなわち、機械読取可能な）コードとの間の仲介として使用することができる。
【００３６】
しかし、コード２０５は、ＩＬおよびアセンブリ言語の例に限定されない。そうではなく、ランダムコード生成１２０の実施では、コード２０５は、複数の特質の少なくとも１つを統計的にサンプリングすることができる様々な既知の言語のいずれか１つで書かれていてよい。そのような特質は、コード２０５に対する言語に特有である字句（ｌｅｘｉｃｏｎ）および構成（ｃｏｎｓｔｒｕｃｔ）の特性を含む。そのような字句的な特質および構成の特性についての制限でない例は、例えば、メソッド構造、メソッドフロー制御構造、メソッドデータフロー、命令頻度、オブジェクト型の使用、ｕｎｓａｆｅコードの使用、ジェネリック型の使用、ループの使用、例外処理、またはフレームの使用を含むことができる。
【００３７】
コンストラクタ２１０は、ランダムコード生成１２０の少なくとも一部をその内部で実施できるコンポーネントまたはモジュールと見なすことができる。コンストラクタ２１０に関連する様々な動作は、サンプラ２１５およびモデルジェネレータ２２０によって、単独でまたは同時に実施することができる。別法として、コンストラクタ２１０に関連する動作は、コンポーネントまたはモジュール自体によって実施されてもよく、あるいは、モジュールが含まれているか関連付けられているネットワークノードと協働して（すなわちコンストラクタ２１０が含まれているか関連付けられている１つまたは複数のプロセッサによって）、コンポーネントまたはモジュールによって実施されてもよい。他の実装形態では、サンプラ２１５およびモデルジェネレータ２２０の動作を含めたコンストラクタ２１０の動作は、ハードウェア、ファームウェア、またはハードウェアとファームウェアとソフトウェアの何らかの組合せとして、単独でまたは組合せで実施することができる。
【００３８】
さらに、コンストラクタ２１０のコンポーネントまたはモジュールは、図２に示すように、共通の環境で別々のコンポーネントとして提供することができる。しかし、コンストラクタ２１０の少なくとも１つの代替実施形態では、対応するコンポーネントまたはモジュールを別々の処理環境に配置することもできる。さらに、コンストラクタ２１０のコンポーネントまたはモジュールは、単一のコンポーネントまたはモジュールとして提供することもできる。
【００３９】
サンプラ２１５は、例えばサーバ装置１１０またはデータソース１３０（図１参照）から、コード２０５を受け取ることができる。前述のように、コード２０５は、例えばＩＬやアセンブリ言語コードで提供することができる。典型的には、次いでサンプラ２１５は、少なくとも、コード２０５が書かれている言語の前述の字句的な特質および構成の特性に関して、コード２０５の統計分類を生成できるものとすることができる。より具体的には、あらゆるアプリケーション、プログラム、関数、またはコード２０５として受信されるプログラム可能で実行可能なコードの他の集合に対して、サンプラ２１５は、例えば、変数、命令、構造、使用、ルールなど（制限ではなく、出現数、割合などを含む）を示す統計テーブルを、コード２０５に関して、生成することができる。さらに、サンプラ２１５により生成される、コード２０５に対する統計テーブルは、個々のアプリケーション、プログラム、関数、またはコード２０５として受信されるプログラム可能で実行可能なコードの他の集合に対する統計モデルとする、または複数のメソッド、アプリケーション、プログラム、関数、またはコード２０５として受信されるプログラム可能で実行可能なコードの他の集合に対する総計の統計モデルとすることができる。
【００４０】
モデルジェネレータ２２０は、少なくとも１つの新たなアプリケーション、プログラム、関数、またはプログラム可能で実行可能なコードの他の集合を生成するために、サンプラ２１５から受信される前述の統計テーブルを使用することができる。モデルジェネレータ２２０は、コード２０５に関する言語に特有である字句的な特質および構造的な特性の情報を有することができる。したがって、モデルジェネレータ２２０は、サンプラ２１５により生成された統計テーブルを使用して、ランダムにコードを生成する方法を導くことが可能であることがある。より具体的には、複数のコードの並べ替えは、サンプラ２１５から受信される統計テーブルの１つまたは複数のモデルにすべて根拠を置き、構造的な特性に一致するコード２０５に関する言語に特有である字句を配置することにより、ランダムに生成することができる。
【００４１】
ターゲットコンポーネント２２５は、コンストラクタ２１０、特にモデルジェネレータ２２０によりランダムに生成されているコードを受信することになるコンポーネントまたはモジュールとすることができる。ターゲットコンポーネント２２５は、テスト環境において、モデルジェネレータ２２０によりランダムに生成されたコードを受信することによって利益を得ることができる。すなわち、モデルジェネレータ２２０は、メソッド、アプリケーション、プログラム、関数、またはコンストラクタ２１０にコード２０５として受信されるプログラム可能で実行可能なコードの他の集合のボリュームに応じて、およそ何百万さらには何十億のオーダにおいてランダムにコードを生成することができる。したがって、ターゲットコンポーネント２２５を、少なくとも字句および構造に関して実世界のコードに似ているかなり多量のテストコードにかけることができる。
【００４２】
図３は、実世界コードの特質および特性に従ったランダムコード生成１２０（図１参照）の例示的な一実装形態による、例示的な統計テーブル３００を示す。より具体的には、統計テーブル３００は、コンストラクタ２１０で受け取られたコード２０５の１つまたは複数の字句的な特質および構造的な特性の統計分類を表すことができる。
【００４３】
統計テーブル３００の列３０５は、例示的な字句的な特質および構造的な特性の非限定的なセットを示し、このセットは、メソッド構造３０５ａ、メソッドフロー制御構造３０５ｂ、メソッドデータフロー３０５ｃ、命令頻度３０５ｄ、オブジェクト型の使用３０５ｅ、ｕｎｓａｆｅコードの使用３０５ｆ、ジェネリック型の使用３０５ｇ、ループの使用３０５ｈ、例外処理３０５ｉ、およびフレームの使用３０５ｊを含む。
【００４４】
列３１０、３１５、３２０、３２５は、列３０５に示された前述の字句的な特質および構造的な特質の例示的なサンプリングを表すことができる。例えば、列３１０は、パラメータＡの統計分類を表すことができ、これは、コード２０５として受け取られた単一のエンティティについての指定された字句的な特質または構造的な特性とすることができる。また、列３１５は、コード２０５として受け取られた複数のメソッド、アプリケーション、プログラム、関数、またはその他のプログラム可能で実行可能なコードの集合についての、パラメータＡの総計とすることができる。同様に、列３２０は、パラメータＢの統計分類を表すことができ、これは、コード２０５として受け取られた単一のエンティティについての別の字句的な特質または構造的な特性とすることができる。また、列３２５は、コード２０５として受け取られた複数のメソッド、アプリケーション、プログラム、関数、またはその他のプログラム可能で実行可能なコードの集合についての、パラメータＢの総計とすることができる。当然、テーブル３００は、構造および内容の点で多くの変形を有することができる。したがって、図３のテーブル３００は、単にコード２０５の統計分類の例として提示するものである。
【００４５】
以下は、テーブル３００中で少なくともカウントおよび頻度の点でサンプリングすることのできる例示的な字句的な特質および構成の特性の、非限定的な列挙および記述である。
【００４６】
メソッド構造３０５ａ：コード２０５に関して、メソッド構造３０５ａの統計分類は、メソッドのサイズ、スタック深度、返却型、引数（例えば単純型、オブジェクト型、ガベージコレクション型（マネージ実行環境で）、配列、値型）、インスタンス型、静的型、外部メソッドの使用、外部フィールドの使用、特別なコールタイプ（例えば可変の引数長のコール）の使用またはプラットフォーム呼出しタイプのコールの使用を含むことができる。
【００４７】
内部メソッド制御フロー構造３０５ｂ：コード２０５に関して、内部メソッド制御フロー構造３０５ｂの統計分類は、分岐の使用、順方向／逆方向分岐の比率、条件分岐の使用、ループの作成、および、例外処理フロー制御の使用（マネージ実行環境で）を含むことができる。
【００４８】
コード２０５中の型フローの特徴に関係する、内部メソッドデータフロー３０５ｃ：コード２０５に関して、内部メソッドデータフローの統計分類は、単一使用および複数使用の変数、単一割当ておよび複数割当ての変数、ローカル変数への入力パラメータのフロー、ローカル変数へのサブメソッド返却データのフロー、サブメソッドへのコールに関するパラメータ中へのローカル変数への値のフロー、ローカル変数からフロー制御決定への値のフロー、ローカル変数から返却型への値のフロー、取られた変数のアドレス、静的およびインスタンス変数へのフロー、静的およびインスタンス変数からのフロー、ならびに、スタック空ポイントの数および位置、に関する統計など、従来のコンパイラデータフロー分析を含むことができる。
【００４９】
命令頻度３０５ｄ：コード２０５に関して、命令頻度３０５ｄの統計分類は、特定命令の使用の数値的サンプリング、他の命令と協調した特定命令の使用のサンプリング、検証可能な命令と検証不可能な命令のバランスのサンプリング、および、アドレス構成の型のサンプリングを含むことができる。
【００５０】
オブジェクト型の使用３０５ｅ：コード２０５に関して、オブジェクト型の使用３０５ｅの統計分類は、使用されたオブジェクトのソース、および、使用されたオブジェクトの型を含むことができ、型は、割当て、ボックス／アンボックス、コールオン、仮想コールオンの実施、およびジェネリック型を含むが、これらに限定されない。
【００５１】
ｕｎｓａｆｅコードの使用３０５ｆ：コード２０５に関して、ｕｎｓａｆｅコードの使用３０５ｆの統計分類は、コード２０５中のｕｎｓａｆｅコードに関する詳細、および、そのアドレス解決に関する詳細を含むことができる。
【００５２】
コード２０５中でのジェネリック型の使用３０５ｇ。
【００５３】
ループの詳細：コード２０５に関して、ループの詳細の統計分類は、ループ制御変数、デッドループ（ｄｅａｄ  ｌｏｏｐ）、ループ中での例外処理（マネージ実行環境で）、ループ中でのｔｈｒｏｗｅｒ、ループ中でのコール、およびループ内からの配列アクセスを含むことができる。
【００５４】
例外処理（マネージ実行環境で）３０５ｈ：コード２０５に関して、例外処理３０５ｈの統計分類は、フィルタ、ｔｒｙのサイズ、ｃａｔｃｈのサイズ、ｆｉｎａｌｌｙのサイズ、メソッドサイズの割合、各照会中でのコール、および、ローカル変数／スタックから例外処理へのデータのフロー、に関する記述を含むことができる。
【００５５】
フレームの使用３０５ｉ：コード２０５に関して、フレームの使用の統計分類は、ボックス化の記述、ループの記述、配列チェックの記述、単純インスタンスメンバアクセサの記述、キャスティングの記述、コピーオブジェクトの記述、ローカルロケータの記述、スイッチの記述、配列およびコールの分解の記述を含むことができる。
【００５６】
上に列挙および記述した字句的な特質および構造的な特性は、単に例として提供するものである。テーブル３００の代替実施例は、上記の特質、ならびにランダムコード生成１２０を実施する者にとって関心があると思われる他の特質の、様々な組合せを含むことができる。
【００５７】
図４は、ランダムコード生成１２０（図１参照）を実施することのできる例示的なシステム４００を示す。より具体的には、システム４００は、マネージ実行環境４１５でどのようにランダムコード生成１２０を実施することができるかを示す。以下、図２と３の両方の要素を参照することによってシステム４００を述べる。しかし、システム４００のこのような構成および機器構成は、例として提供するだけであり、決して限定として推論すべきではない。
【００５８】
アプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合は、実行されるために別のソフトウェアシステムを必要とする場合があるので、マネージ実行環境４１５は、アプリケーションプログラムがオペレーティングシステム中で適切に動作するための１つまたは複数のルーチンを提供することができる。したがって、このようなコードは、アプリケーションプログラムとオペレーティングシステムとの間に存在することのできる１つまたは複数のマネージ実行環境ルーチンを呼び出すことができ、マネージ実行環境ルーチンは、適切なオペレーティングシステムルーチンを呼び出すことができる。
【００５９】
マネージ実行環境は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、および、モバイル処理装置のホストを含めた、ますます広範にわたる処理装置上でのソフトウェア実行の信頼性を高めるために開発された。マネージ実行環境は、処理装置（例えば図１に関して上述した装置１０５、１１０、１１５、１３０）上で実行されるアプリケーションに、抽象化の層およびサービスを提供することができる。マネージ実行環境はさらに、このようなアプリケーションに、エラー処理および自動メモリ管理を含む機能を提供することもできる。マネージ実行環境の例は、Ｖｉｓｕａｌ  Ｂａｓｉｃランタイム実行環境と、例えばＪａｖａ（登録商標）ルーチンを実行するのに使用されるＪａｖａ（登録商標）Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅランタイム実行環境と、例えば呼出しルーチンの実行前に本願発明の特許出願人の．ＮＥＴ（商標）アプリケーションを機械語にコンパイルするためのＣｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ（ＣＬＲ）とを含むことができる。
【００６０】
コード２０５は、図２に関して上述したように、例えばＩＬやアセンブリ言語で書かれた少なくともメソッド、アプリケーション、プログラム、関数、または他のプログラム可能で実行可能なコードの集合の、１つまたは複数を参照することができる。
【００６１】
コンストラクタ２１０は、図２に関して上述したように、ランダムコード生成１２０の少なくとも一部を実施するために１つまたは複数のコンポーネントを参照することができる。アンマネージの実行環境における少なくとも１つの例示的実装形態かかるコンストラクタ２１０は、アンマネージの実行環境では、データソースを呼び出してコード２０５を受け取ることができる。あるいは、マネージ実行環境での少なくとも１つの実施例は、コンストラクタ２１０が実行エンジン４２０を呼び出してコード２０５を受け取ることを含むことができる。
【００６２】
実行エンジン４２０は、少なくともマネージ実行環境では、どのようにコード２０５が管理および操作されることになるかを示すコード２０５の部分を参照することができる。
【００６３】
どのようにコンストラクタ２１０がコード２０５を受け取るかにかかわらず、コンストラクタ２１０は、統計テーブル３００（図３参照）を作成する例示的なプロセス２００（図２参照）を実施することができる。すなわち、コンストラクタ２１０は、１つまたは複数のメソッド、アプリケーション、プログラム、関数、またはコード２０５として受信されるプログラム可能で実行可能なコードの他の集合に対して、統計モデルを生成することができる。統計モデルは、少なくともコード２０５の字句的な特質および構成の特性の分類を含むことができる。
【００６４】
さらにコンストラクタ２１０は、コード２０５の字句的な特質および構成の特性に基づく統計テーブル３００を利用して、統計テーブル３００の１つまたは複数のモデルに根拠を置き、コード２０５に特有である構成の特性に一致する字句を配置することにより、複数のコードの並べ替えをランダムに生成することができる。
【００６５】
テスト環境の少なくとも１つの実施例によれば、次いでコンストラクタ２１０は、マネージ実行環境４１５において、コンストラクタ２１０によりランダムに生成されたコードをコンパイラ４２５に送ることができる。したがって、コンストラクタ２１０によりランダムに生成された、多くの可能なコードの組合せにかけられることにより、コードの異なる組合せを処理する、同様にプログラミングバグを明るみにするコンパイラ４２５の能力をテストすることができる。
【００６６】
コンパイラ４２５は、コンストラクタ２１０によって生成することのできるコード２０５の並べ替えのスコアに対するターゲットオブジェクトのほんの一例と見なすことができる。しかし、目的のあるランダムコード生成は、テスト目的に向けられる可能性が高い（ただしこれに限定されない）。したがって、図４の少なくとも１つの代替実施例によれば、ランダムに生成されたコードのターゲットは、実世界のコードと同じ方法において読取りかつ構成されるランダムに生成されたコードのスコア（およそ少なくとも数百万もの）を受け取ることによって目的のあるテストを達成することのできる、マネージ実行環境４１５内のあらゆるコンポーネントまたはモジュールとすることができる。
【００６７】
テスタ４３０は、アンマネージの実行環境において、またはマネージ実行環境４１５内で、コンパイラ４２５のテスト用データ、またはランダムに生成されたコードの代替ターゲットオブジェクトのテスト用データを収集するコンポーネントまたはモジュールを参照することができる。
【００６８】
したがって、アンマネージとマネージの両方の実行環境でのテストは、字句または文法および構成の特質に関して、実世界のメソッド、アプリケーション、プログラム、関数、またはプログラム可能で実行可能なコードの他の集合のように構成されるコードのランダム生成によって、より目的があり効果的であるものにすることができる。
【００６９】
図１〜４に関する前述の実施例は、１つまたは複数のプロセッサと、システムメモリと、様々なシステムコンポーネントを結合するシステムバスとを含むがこれらに限定されないコンポーネントを有するコンピューティング環境で実施することができる。さらに、このコンピューティング環境は、様々なコンポーネントのいずれかによってアクセス可能な様々なコンピュータ読取可能な媒体を含むことができ、揮発性と不揮発性の媒体、取外し可能と固定の媒体の両方を含む。
【００７０】
本明細書では、プログラムモジュールなど、１つまたは複数のコンピュータまたは他の装置によって実行されるコンピュータ実行可能命令の一般的なコンテキストで、様々なモジュールおよび技法を述べることができる。一般に、プログラムモジュールは、特定のタスクを実施するか特定の抽象データ型を実装するためのルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、様々な実施形態で望まれるように結合または分散させることができる。
【００７１】
これらのモジュールおよび技法の実装形態は、何らかの形のコンピュータ読取可能な媒体に記憶することができ、あるいは何らかの形のコンピュータ読取可能な媒体を介して伝送することができる。コンピュータ読取可能な媒体は、コンピュータによってアクセスできるあらゆる利用可能な媒体とすることができる。限定ではなく例として、コンピュータ読取可能な媒体は、「コンピュータ記憶媒体」および「通信媒体」を含むことができる。
【００７２】
「コンピュータ記憶媒体」は、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するためのあらゆる方法または技術で実現された、揮発性と不揮発性、取外し可能と固定の媒体を含む。コンピュータ記憶媒体は、限定しないがＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置を含み、あるいは、所望の情報を記憶するのに使用できコンピュータによってアクセスできる他のあらゆる媒体を含む。
【００７３】
「通信媒体」は通常、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他の転送機構などの被変調データ信号に組み入れる。通信媒体はまた、あらゆる情報送達媒体も含む。用語「被変調データ信号」は、信号中の情報が符号化されるようにして１つまたは複数の特質が設定または変更される信号を意味する。非限定的な例にすぎないが、通信媒体は、有線ネットワークや直接有線接続などの有線媒体と、音響、無線周波数、赤外線などの無線媒体、および他の無線媒体とを含む。以上のいずれかの組合せも、コンピュータ読取可能な媒体の範囲に含まれる。
【００７４】
本明細書全体にわたり、「一実施形態」「実施形態」または「例示的な実施形態」を参照したが、これは、述べた特定の特徴、構造、または特質が本発明の少なくとも１つの実施形態に含まれることを意味する。したがって、このような語句の使用は、単なる１つの実施形態以上を指す場合がある。さらに、述べた特徴、構造、または特質は、１つまたは複数の実施形態で、あらゆる適した方法で組み合わせることができる。
【００７５】
しかし、本発明はこれらの具体的な詳細の１つまたは複数がなくても実施できること、あるいは他の方法、リソース、材料などでも実施できることは、当業者なら認識するであろう。他の場合では、単に本発明の態様を曖昧にするのを避けるため、周知の構造、リソース、または動作については、詳細に図示も記述もしていない。
【００７６】
本発明の例示的な実施形態および適用例を例示および記述したが、本発明は、上述した正確な構成およびリソースに限定されないことを理解されたい。特許請求する本発明の範囲を逸脱することなく、当業者に明らかな様々な修正、変更、および変形を、本明細書に開示した本発明の方法およびシステムの構成、動作、および詳細に加えることができる。
【図面の簡単な説明】
【００７７】
【図１】ランダムコード生成の実施例を実施することのできるネットワーク環境を示す図である。
【図２】ランダムコード生成の１つの例示的な実装形態に関する処理フローを示す図である。
【図３】ランダムコード生成の１つの例示的な実装形態による例示的な統計テーブルを示す図である。
【図４】ランダムコード生成を実施することのできるシステムの例を示す図である。
【符号の説明】
【００７８】
２００  処理フロー
２０５  コード
２１０  コンストラクタ
２１５  サンプラ
２２０  モデルジェネレータ
２２５  ターゲットコンポーネント
【図１】
2006228205.tif 000003
【図２】
2006228205.tif 000004
【図３】
2006228205.tif 000005
【図４】
2006228205.tif 000006