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