(57)【特許請求の範囲】
【請求項１】
方法であって、
第１のフレームワークに対してアプリケーション・コードをシンボリック実行する工程と、
前記第１のフレームワークの前記シンボリック実行に基づいて第１のモデルを作成する工程と、
第２のフレームワークに対して前記アプリケーション・コードをシンボリック実行する工程と、
前記第２のフレームワークの前記シンボリック実行に基づいて第２のモデルを作成する工程と、
前記第１のモデルに基づいて、前記第１のフレームワークに関連付けられた１つ又は複数のパラメータを判定する工程と、
前記第２のモデルに基づいて、前記第２のフレームワークに関連付けられた１つ又は複数のパラメータを判定する工程と、
前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータの比較に基づいて、前記アプリケーション・コードの実行のための所望のフレームワークとして前記第１のフレームワーク及び前記第２のフレームワークのうちの一方を選択する工程と
を含み、
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行に必要な入力の数である方法。
【請求項２】
請求項１記載の方法であって、前記アプリケーション・コードはジャバスクリプトで記述された方法。
【請求項３】
請求項１記載の方法であって、前記第１のフレームワーク及び前記第２のフレームワークの少なくとも一方はジャバスクリプト・フレームワークである方法。
【請求項４】
請求項１記載の方法であって、前記第１のモデル及び前記第２のモデルの少なくとも一方は制御フロー・グラフである方法。
【請求項５】
請求項１記載の方法であって、前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行時間である方法。
【請求項６】
請求項１記載の方法であって、前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行において存在している制約の数である方法。
【請求項７】
実行されると、
第１のフレームワークに対してアプリケーション・コードをシンボリック実行する機能と、
前記第１のフレームワークの前記シンボリック実行に基づいて第１のモデルを作成する機能と、
第２のフレームワークに対して前記アプリケーション・コードをシンボリック実行する機能と、
前記第２のフレームワークの前記シンボリック実行に基づいて第２のモデルを作成する機能と、
前記第１のモデルに基づいて、前記第１のフレームワークに関連付けられた１つ又は複数のパラメータを判定する機能と、
前記第２のモデルに基づいて、前記第２のフレームワークに関連付けられた１つ又は複数のパラメータを判定する機能と、
前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータの比較に基づいて前記アプリケーション・コードの実行のための所望のフレームワークとして前記第１のフレームワーク及び前記第２のフレームワークのうちの一方を選択する機能と
を行うよう動作可能なソフトウェアをコード化し、
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行に必要な入力の数である１つ又は複数のコンピュータ読み取り可能な有形の記憶媒体。
【請求項８】
請求項７記載の媒体であって、前記アプリケーション・コードはジャバスクリプトで記述された媒体。
【請求項９】
請求項７記載の媒体であって、前記第１のフレームワーク及び前記第２のフレームワークの少なくとも一方はジャバスクリプト・フレームワークである媒体。
【請求項１０】
請求項７記載の媒体であって、前記第１のモデル及び前記第２のモデルの少なくとも一方は制御フロー・グラフである媒体。
【請求項１１】
請求項７記載の媒体であって、前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行時間である媒体。
【請求項１２】
請求項７記載の媒体であって、前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータの少なくとも一方は、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行において存在している制約の数である媒体。
【請求項１３】
システムであって、
第１のフレームワークに対してアプリケーション・コードをシンボリック実行するロジックと、
前記第１のフレームワークの前記シンボリック実行に基づいて第１のモデルを作成するロジックと、
第２のフレームワークに対して前記アプリケーション・コードをシンボリック実行するロジックと、
前記第２のフレームワークの前記シンボリック実行に基づいて第２のモデルを作成するロジックと、
前記第１のモデルに基づいて、前記第１のフレームワークに関連付けられた１つ又は複数のパラメータを判定するロジックと、
前記第２のモデルに基づいて、前記第２のフレームワークに関連付けられた１つ又は複数のパラメータを判定するロジックと、
前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータの比較に基づいて前記アプリケーション・コードの実行のための所望のフレームワークとして前記第１のフレームワーク及び前記第２のフレームワークのうちの一方を選択するロジックと
を含み、
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行に必要な入力の数であるシステム。
【請求項１４】
請求項１３記載のシステムであって、前記アプリケーション・コードはジャバスクリプトで記述されたシステム。
【請求項１５】
請求項１３記載のシステムであって、前記第１のフレームワーク及び前記第２のフレームワークの少なくとも一方はジャバスクリプト・フレームワークであるシステム。
【請求項１６】
請求項１３記載のシステムであって、前記第１のモデル及び前記第２のモデルの少なくとも一方は制御フロー・グラフであるシステム。
【請求項１７】
請求項１３記載のシステムであって、前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータの少なくとも一方は、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行時間であるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般に、ソフトウェアの検査に関する。
【背景技術】
【０００２】
ウェブ・アプリケーションを開発するうえで、開発者は多くの場合、ジャバスクリプトを使用する。ジャバスクリプトは、通常、ホスト環境内の計算オブジェクトに対するプログラム・アクセスを可能にするために使用される言語標準である。動的であり、弱い型付きであり、第１級の関数を有するプロトタイプベースのオブジェクト指向スクリプト言語として特徴付け得る。ジャバスクリプトは主に、拡張されたユーザ・インタフェース及び動的なウェブサイトを提供するためにウェブ・ブラウザの一部として実現されるクライアントサイド・ジャバスクリプトの形式で使用される。
【０００３】
ジャバスクリプト・アプリケーションを開発するうえで、開発者は複数のジャバスクリプト・フレームワークから選び得る。ジャバスクリプト・フレームワークの例には、ドジョ（Ｄｏｊｏ）、ヤフー！ユーザ・インタフェース（ＹＵＩ）等がある。一般に、フレームワークは、汎用機能を提供する共通コードが、特定の機能を提供するユーザ・コードにより、選択的にオーバライド又は特化され得る抽象化である。フレームワークは、明確に定義されたアプリケーション・プログラミング・インタフェース（ＡＰＩ）にラップされたコードの再使用可能な抽象化であるという点でソフトウェア・ライブラリの特殊ケースであるが、通常のライブラリと区別する特定の主要な特徴を含む。前述の特徴の中には、制御の反転（例えば、フレームワーク内では、ライブラリ内又は通常のユーザ・アプリケーション内と違って、全体プログラムの制御フローは、呼び出し側によって支配されない一方、フレームワークによって支配される）、デフォルト挙動（例えば、フレームワークはデフォルト挙動を有する）、拡張性（例えば、フレームワークはユーザにより、通常、選択的オーバライドによって拡張するか、又は、修正可能でないフレームワーク・コード（例えば、フレームワーク・コードは一般に、修正することが可能でない。ユーザは、フレームワークを拡張することが可能であるが、そのコードを修正することは可能でない。）、及び特定の機能を提供するユーザ・コードによって特化することが可能である）がある。
【０００４】
フレームワークの多くの選択肢にかかわらず、開発者は多くの場合、どのフレームワークが、使用するためにより望ましいことがあり得るか（例えば、どのフレームワークが速く実行されるか、必要な入力の数、制約の数等）を判定することができない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、従来の方法及びシステムに関連した欠点及び課題の少なくとも一部をかなりなくすか、又は軽減する、ソフトウェア・フレームワークを比較するための方法及びシステムを提供する。
【課題を解決するための手段】
【０００６】
本発明の特定の実施例によれば、方法は、第１のフレームワーク上のアプリケーション・コードをシンボリック実行する工程を含み得る。方法は、第１のフレームワークのシンボリック実行に基づいて第１のモデルを作成する工程も含み得る。方法は更に、第２のフレームワーク上のアプリケーション・コードをシンボリック実行する工程を含み得る。方法は、第１のフレームワークのシンボリック実行に基づいて第２のモデルを生成する工程を含み得る。方法は、第１のモデルに基づいて第１のフレームワークに関連付けられた１つ又は複数のパラメータを判定する工程も含み得る。方法は更に、第２のモデルに基づいて第２のフレームワークに関連付けられた１つ又は複数のパラメータを判定する工程を含み得る。方法は更に、第２のフレームワークに関連付けられた１つ又は複数のパラメータ、及び第１のフレームワークに関連付けられた１つ又は複数のパラメータの比較に基づいてアプリケーション・コードの実行のための所望のフレームワークとして第１のフレームワーク及び第２のフレームワークのうちの一方を選択する工程も含み得る。
【図面の簡単な説明】
【０００７】
【図１】本開示による、比較ツールキットの例示的な環境を示す図である。
【図２】本開示による、例示的なシンボリック実行モデル検査を示す図である。
【図３】本開示による、ソフトウェア・フレームワークを比較する例示的な方法を示すフローチャートである。
【図４】本開示による例示的なコンピュータ・システムを示す図である。
【発明を実施するための形態】
【０００８】
本発明の特定の実施例の技術上の利点は、ソフトウェア・フレームワークを比較することができる方法論を含む。
【０００９】
他の技術上の利点は、図面、明細書、及び特許請求の範囲から、当業者に容易に明らかになるであろう。更に、特定の利点は上述しているが、種々の実施例は、上述された利点の全部若しくは一部を含み得るか、又は、上述の利点の何れも含まないことがあり得る。
【実施例】
【００１０】
図１は、比較ツールキット２２の例示的な環境１０を示す。特定の実施例では、比較ツールキット２２は、どのフレームワークが開発者による使用のためにより望ましいことがあり得るかに関する情報を含み得るか、又は、どのフレームワークがより望ましいことがあり得るかを判定するために開発者がレビューし得る情報を含み得る比較データ２４を生成するよう複数のフレームワークを検査して、アプリケーション・コード２０に関して使用するためにフレームワークの比較を容易にする。例示的な環境１０の構成部分は、図４を参照して以下に更に詳細に説明したものなどの１つ又は複数のコンピュータ・システム内で実行若しくは動作し得る。
【００１１】
アプリケーション２０は、プロセッサによって実行されると、１つ又は複数のタスクを実行する（例えば、ウェブ・アプリケーションの少なくとも一部分をレンダリングする）よう動作可能な何れかの命令プログラムを含み得る。一部の実施例では、アプリケーション２０は、ジャバスクリプト・コードで記述し得る。
【００１２】
上述の通り、比較ツールキット２２は、少なくとも２つ以上のフレームワークに対するアプリケーション・コード２０の実行を比較し得る。特定の実施例では、フレームワークはジャバスクリプト・フレームワーク（例えば、ドジョ、ＹＵＩ等）を含み得る。前述及び他の実施例では、比較ツールキット２２は、シンボリック実行を使用して各フレームワークにアプリケーション・コード２０を適用することにより、フレームワークを比較し得る。図２は、例示的なシンボリック実行を示す。図２に示すように、ツリー内の各経路は、実行経路の（場合によっては無限の）集合を表す。図２に示すようにシンボリック実行を使用して特性ｉｆ（（ａ＞１）＆（ｂ＞０））→（ｃ＞２）を検査するために、特性は、否定することができ（否定は、ｉｆ（（ａ＞１）＆（ｂ＞０））→（ｃ≦２））であり）、否定は、シンボリック実行の各経路の終了時に検査し得る。φ＝｛（ｚ＝ｘ＋ｙ）＆（ｚ≦０）｝で終了する実行経路の場合、整数線形プログラミング（ＩＬＰ）ソルバ、又は適切な別の決定手続きを使用したソルバは、第１の式の組：ｘ＞１、ｙ＞０、ｚ＝ｘ＋ｙ、ｚ≦０、及びｚ≦２に対する解を求めることを試行し得る。φ＝｛（ｚ＝ｘ＋ｙ＋１）＆（ｚ≦０）｝で終了する実行経路の場合、ＩＬＰソルバ、又は適切な別の決定手続きを使用したソルバは、第２の式の組：ｘ＞１、ｙ＞０、ｚ＝ｘ＋ｙ＋１、ｚ≦０、及びｚ≦２に対する解を求めることを試行し得る。何れの式の組においても、最初の２つの式（ｘ＞１及びｙ＞０）は前提条件であり得、最後の式（ｚ≦２）は後置条件であり得る。第１の式の組又は第２の式の組に対して解が求められなかった場合、特性ｉｆ（（ａ＞１）＆（ｂ＞０））→（ｃ＞２）は真である。第１の式の組又は第２の式の組に対して解が求められた場合、特性は偽であり、解は特性に違反する反例である。
【００１３】
複数のフレームワークに対するアプリケーション・コード２０のシンボリック実行に基づいて、比較ツールキット２２は、フレームワーク実行毎のモデル（例えば、制御フロー・グラフ、ツリー、又は別の表現）を作成し得る。比較ツールキット２２は、各モデルに基づいて、フレームワーク実行毎の１つ又は複数のパラメータを判定し得る。一部の実施例では、前述のパラメータは、比較データ２４として比較ツールキット２２によって出力し得る。１つ又は複数のパラメータは、フレームワークを使用したアプリケーション・コード２０の推定実行時間、フレームワークを使用したアプリケーション・コード２０の実行に必要な入力の数、フレームワークを使用したアプリケーション・コード２０の実行の制約の数、又は何れかの他の適切なパラメータを含み得る。
【００１４】
一部の実施例では、比較ツールキット２２は、１つ又は複数のパラメータに基づいて、アプリケーション・コード２０に使用される対象の所望のフレームワークを判定し得る。前述の実施例のうちの特定の実施例では、所望のフレームワークの判定は、比較デ―タ２４の一部分として比較ツールキット２２によって出力し得る。他の実施例では、アプリケーション・コード２０の開発者、又は別の個人は、１つ又は複数のパラメータの解析に基づいて所望のフレームワークを判定し得る。
【００１５】
図３は、本開示の特定の実施例による、ソフトウェア・フレームワークを比較する例示的な方法３００のフローチャートを示す。一実施例によれば、方法３００は工程３０２で始まり得る。上述の通り、本開示の教示は、環境１０の各種構成において実現し得る。そういうものとして、工程３０２乃至３０８を含む方法３００の順序、方法３００の好ましい初期化点は、選ばれた実現形態に応じ得る。
【００１６】
工程３０２では、比較ツールキット２２は、複数のフレームワークそれぞれに対してアプリケーション・コード２０をシンボリック実行し得る。
【００１７】
工程３０４では、複数のフレームワークに対するアプリケーション・コード２０のシンボリック実行に基づいて、比較ツールキット２２は、フレームワーク実行毎のモデル（例えば、制御フロー・グラフ、ツリー、又は別の表現）を作成し得る。
【００１８】
工程３０６では、比較ツールキット２２は、各モデルに基づいて、フレームワーク実行毎の１つ又は複数のパラメータを判定し得る。
【００１９】
工程３０８では、比較ツールキット２２、及び／又は、アプリケーション・コード２０の開発者は、１つ又は複数のパラメータに基づいて、アプリケーション・コード２０に使用される対象の所望のフレームワークを判定し得る（例えば、比較ツールキット２２は、アプリケーション・コード２０の最も速い実行をもたらすフレームワークを選択し得る）。
【００２０】
図３は方法３００に関して行う対象の特定数の工程を開示しているが、方法３００は、図３に表すよりも多い数又は少ない数の工程で実行し得る。更に、図３は、方法３００に関して行う対象の特定の順序の工程を開示しているが、上記工程を含む方法３００は何れの適切な順序でも完了し得る。
【００２１】
方法３００は、方法３００を実現するよう動作可能な環境１０又は何れかの他のシステムを使用して実現し得る。特定の実施例では、方法３００は、コンピュータ読み出し可能な媒体に実施されたソフトウェアで部分的に、又は全部を実現し得る。
【００２２】
図４は、例示的なコンピュータ・システム６００を示す。特定の実施例では、１つ又は複数のコンピュータ・システム６００は、本明細書及び特許請求の範囲に記載又は例証された１つ又は複数の方法のうちの１つ又は複数の工程を行う。特定の実施例では、１つ又は複数のコンピュータ・システム６００は、本明細書及び特許請求の範囲に記載又は例証された機能を提供する。特定の実施例では、１つ又は複数のコンピュータ・システム６００上で実行されるソフトウェアは、本明細書及び特許請求の範囲に記載又は例証された１つ又は複数の方法のうちの１つ又は複数の工程を行うか、又は、本明細書及び特許請求の範囲記載の機能を提供する。特定の実施例は、１つ又は複数のコンピュータ・システム６００の１つ又は複数の部分を含む。
【００２３】
本開示は、何れかの適切な数のコンピュータ・システム６００を想定している。本開示は、何れかの適切な物理的形式を呈するコンピュータ・システム６００を想定している。限定でなく、例として、コンピュータ・システム６００は、組み込み型コンピュータ・システム、システムオンチップ（ＳＯＣ）、シングルボード・コンピュータ・システム（ＳＢＣ）（例えば、コンピュータオンモジュール（ＣＯＭ）又はシステムオンモジュール（ＳＯＭ））、デスクトップ型コンピュータ・システム、ラップトップ型又はノートブック型コンピュータ・システム、インタアクティブ・キオスク、汎用コンピュータ、コンピュータ・システムのメッシュ、携帯電話機、携帯情報端末（ＰＤＡ）、サ―バ、又は、前述の２つ以上の組合せであり得る。コンピュータ・システム６００は、適宜、１つ又は複数のコンピュータ・システム６００を含み、ユニタリー型であっても分散型であってもよく、複数の場所にまたがってもよく、複数のマシンにまたがってもよく、クラウド（１つ又は複数のネットワーク内の１つ又は複数のクラウド構成部分を含み得る）に常駐していてもよい。１つ又は複数のコンピュータ・システム６００は、適宜、本明細書及び特許請求の範囲に記載されたか又は例証された１つ又は複数の方法のうちの１つ又は複数の工程を、実質的な空間制約又は時間制約なしで行い得る。限定でなく、例として、１つ又は複数のコンピュータ・システム６００は、本明細書及び特許請求の範囲記載の１つ又は複数の方法のうちの１つ又は複数の工程をリアルタイムで又はバッチ・モードで行い得る。１つ又は複数のコンピュータ・システム６００は、適宜、本明細書及び特許請求の範囲に記載又は例証された１つ又は複数の方法のうちの１つ又は複数の工程を別々の時点で、又は別々の場所で行い得る。
【００２４】
特定の実施例では、コンピュータ・システム６００は、プロセッサ６０２、メモリ６０４、記憶装置６０６、入出力（Ｉ／Ｏ）インタフェース６０８、通信インタフェース６１０、及びバス６１２を含む。本開示は、特定の構成において特定数の特定の構成部分を有する特定のコンピュータ・システムを記載し、例証しているが、本開示は、何れかの適切な構成における何れかの適切な数の何れかの適切な構成部分を有する何れかの適切なコンピュ―タ・システムを想定している。
【００２５】
特定の実施例では、プロセッサ６０２は、コンピュータ・プログラムを構成するものなどの、命令を実行するためのハードウェアを含む。限定でなく例として、プロセッサ６０２は、命令を実行するために、内部レジスタ、内部キャッシュ、メモリ６０４、又は記憶装置６０６から命令を取り出し（又はフェッチし）、デコードし、実行し、次いで、１つ又は複数の結果を内部レジスタ、内部キャッシュ、メモリ６０４，又は記憶装置６０６に書き込み得る。特定の実施例では、プロセッサ６０２は、データ、命令、又はアドレスのために１つ又は複数の内部キャッシュを含み得る。本開示は、適宜、何れかの適切な数の何れかの適切な内部キャッシュを含むプロセッサ６０２を想定している。限定でなく、例として、プロセッサ６０２は、１つ又は複数の命令キャッシュ、１つ又は複数のデータ・キャッシュ、及び１つ又は複数のトランスレーション・ルックアサイド・バッファ（ＴＬＢ）を含み得る。命令キャッシュ内の命令は、メモリ６０４内又は記憶装置６０６内の命令の複製であり得、命令キャッシュはプロセッサ６０２による前述の命令の取り出しを高速化し得る。データ・キャッシュ内のデータは、プロセッサ６０２で命令が処理する対象の、メモリ６０４内又は記憶装置６０６内のデータの複製、プロセッサ６０２で実行するその後の命令によるアクセスのための、又は、メモリ６０４若しくは記憶装置６０６への書き込みのための、プロセッサ６０２で実行される先行する命令の結果、又は、他の適切なデータであり得る。データ・キャッシュは、プロセッサ６０２による読み出し又は書き込みの動作を高速化し得る。ＴＬＢは、プロセッサ６０２のための仮想アドレス変換を高速化し得る。特定の実施例では、プロセッサ６０２は、データ、命令、又はアドレスの１つ若しくは複数の内部レジスタを含み得る。本開示は、何れかの適切な数の何れかの適切な内部レジスタを適宜含むプロセッサ６０２を想定している。プロセッサ６０２は、適宜、１つ又は複数の論理演算装置（ＡＬＵ）を含むか、マルチコア・プロセッサであるか、又は１つ又は複数のプロセッサ６０２を含み得る。本開示は特定のプロセッサを記載し、例証するが、本開示は何れかの適切なプロセッサを想定している。
【００２６】
特定の実施例では、メモリ６０４は、プロセッサ６０２が実行するための命令、又はプロセッサ６０２が処理するためのデータを記憶する主メモリを含む。限定でなく例として、コンピュータ・システム６００は、記憶装置６０６、又は（例えば、別のコンピュータ・システム６００などの）別のソースからメモリ６０４に命令をロードし得る。プロセッサ６０２は次いで、メモリ６０４から内部レジスタ又は内部キャッシュに命令をロードし得る。命令を実行するために、プロセッサ６０２は、内部レジスタ又は内部キャッシュから命令を取り出し、デコードし得る。命令の実行中又は実行後、プロセッサ６０２は、（中間結果又は最終結果であり得る）１つ若しくは複数の結果を内部レジスタ又は内部キャッシュに書き込み得る。プロセッサ６０２は、前述の結果のうちの１つ又は複数をメモリ６０４に書き込み得る。特定の実施例では、プロセッサ６０２は、１つ又は複数の内部レジスタ内若しくは内部キャッシュ内、又はメモリ６０４内の命令のみを実行し、（記憶装置６０６内又はそれ以外の場所内の命令は実行せず、）１つ又は複数の内部レジスタ内若しくは内部キャッシュ内、又はメモリ６０４内のデータのみを処理する（記憶装置６０６内又はそれ以外の場所内の命令は実行しない）。（アドレス・バス及びデータ・バスをそれぞれが含み得る）１つ又は複数のメモリ・バスは、プロセッサ６０２をメモリ６０４に結合し得る。バス６１２は、以下に説明するように、１つ又は複数のメモリ・バスを含み得る。特定の実施例では、１つ又は複数のメモリ管理装置（ＭＭＵ）はプロセッサ６０２とメモリ６０４との間に常駐し、プロセッサ６０２によって要求されるメモリ６０４に対するアクセスを容易にする。特定の実施例では、メモリ６０４はランダム・アクセス・メモリ（ＲＡＭ）を含む。このＲＡＭは、揮発性メモリであり得る。このＲＡＭは、適宜、ダイナミックＲＡＭ（ＤＲＡＭ）又はスタティックＲＡＭ（ＳＲＡＭ）であり得る。更に、このＲＡＭは、適宜、単一ポートのＲＡＭ又はマルチポートのＲＡＭであり得る。本明細書及び特許請求の範囲は、何れかの適切なＲＡＭを想定している。メモリ６０４は、適宜、１つ又は複数のメモリ６０４を含み得る。本開示は特定のメモリを記載し、例証しているが、本開示は何れかの適切なメモリを想定している。
【００２７】
特定の実施例では、記憶装置６０６は、データ又は命令用の大容量記憶装置を含む。限定でなく、例として、記憶装置６０６は、ＨＤＤ、フロッピー（登録商標）・ディスク・ドライブ、フラッシュ・メモリ、光ディスク、光磁気ディスク、磁気テープ、若しくは、ユニバーサル・シリアル・バス（ＵＳＢ）ドライブ、又は前述の２つ以上の組合せを含み得る。記憶装置６０６は、適宜、取り外し可能な媒体、又は取り外し可能でない（若しくは固定の）媒体を含み得る。記憶装置６０６は、適宜、コンピュータ・システム６００の内部にあっても外部にあってもよい。特定の実施例では、記憶装置６０６は、不揮発性のソリッドステート・メモリである。特定の実施例では、記憶装置６０６はリードオンリ・メモリ（ＲＯＭ）を含む。このＲＯＭは、適宜、マスクプログラムされたＲＯＭ、プログラム可能なＲＯＭ（ＰＲＯＭ）、消去可能なＰＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なＰＲＯＭ（ＥＥＰＲＯＭ）、電気的に改変可能なＲＯＭ（ＥＡＲＯＭ）、若しくは、フラッシュ・メモリ、又は、前述の２つ以上の組合せであり得る。本開示は、何れかの適切な物理的形式を呈する大容量記憶装置６０６を想定している。記憶装置６０６は、適宜、プロセッサ６０２と記憶装置６０６との間の通信を容易にする１つ又は複数の記憶制御装置を含み得る。記憶装置６０６は、適宜、１つ又は複数の記憶装置６０６を含み得る。本開示は特定の記憶装置を記載し、例証しているが、本開示は何れかの適切な記憶装置を想定している。
【００２８】
特定の実施例では、Ｉ／Ｏインタフェース６０８は、コンピュータ・システム６００と、１つ又は複数のＩ／Ｏ装置との間の通信のための１つ又は複数のインタフェースを提供するハードウェア、ソフトウェア、又は両方を含む。コンピュータ・システム６００は、適宜、前述のＩ／Ｏ装置のうちの１つ又は複数を含み得る。前述のＩ／Ｏ装置の１つ又は複数は、個人とコンピュータ・システム６００との間の通信を可能にし得る。限定でなく、例として、Ｉ／Ｏ装置は、キーボード、キーパッド、マイクロフォン、モニタ、プリンタ、スキャナ、スピーカ、スチル・カメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオ・カメラ、別の適切なＩ／Ｏ装置、又は前述の２つ以上の組合せを含み得る。Ｉ／Ｏ装置は１つ又は複数のセンサを含み得る。本開示は、何れかの適切なＩ／Ｏ装置、及び上記何れかの適切なＩ／Ｏ装置との何れかの適切なＩ／Ｏインタフェース６０８を想定している。Ｉ／Ｏインタフェース６０８は、適宜、プロセッサ６０２が前述のＩ／Ｏ装置のうちの１つ又は複数を駆動させることを可能にする１つ又は複数の装置若しくはソフトウェア・ドライバを含み得る。Ｉ／Ｏインタフェース６０８は、適宜、１つ又は複数のＩ／Ｏインタフェース６０８を含み得る。本開示は特定のＩ／Ｏインタフェースを記載し、例証しているが、本開示は何れかの適切なＩ／Ｏインタフェースを想定している。
【００２９】
特定の実施例では、通信インタフェース６１０は、コンピュータ・システム６００と、１つ若しくは複数の他のコンピュータ・システム６００、又は１つ若しくは複数のネットワークとの間の（例えば、パケットベースの通信などの）通信のための１つ又は複数のインタフェースを提供するハードウェア、ソフトウェア、又は両方を含む。限定でなく例として、通信インタフェース６１０は、イーサネット（登録商標）若しくは他の有線ベースのネットワークと通信するためのネットワーク・インタフェース・コントローラ（ＮＩＣ）若しくはネットワーク・アダプタ、又は、ワイファイ・ネットワークなどの無線ネットワークと通信するための無線アダプタ若しくは無線ＮＩＣ（ＷＮＩＣ）を含み得る。この開示は、何れかの適切なネットワーク、及び上記何れかの適切なネットワークとの何れかの適切な通信インタフェース６１０を想定している。限定でなく例として、コンピュータ・システム６００は、アドホック・ネットワーク、パーソナル・エリア・ネットワーク（ＰＡＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、若しくは、インターネットの１つ若しくは複数の部分、又は、前述の２つ以上の組合せと通信し得る。前述の１つ又は複数のネットワークの１つ又は複数の部分は有線であっても無線であってもよい。例として、コンピュータ・システム６００は、（例えば、ブルートゥースＷＰＡＮなどの）無線ＰＡＮ（ＷＰＡＮ）、ワイファイ・ネットワーク、ワイマックス・ネットワーク、（例えば、ジーエスエム（ＧＳＭ）ネットワークなどの）携帯電話ネットワーク、若しくは他の適切な無線ネットワーク、又は前述のうちの２つ以上の組合せと通信し得る。コンピュータ・システム６００は、適宜、前述のネットワークの何れかのための、何れかの適切な通信インタフェース６１０を含み得る。通信インタフェース６１０は、適宜、１つ又は複数の通信インタフェース６１０を含み得る。本開示は特定の通信インタフェースを記載し、例証しているが、本開示は何れかの適切な通信インタフェースを想定している。
【００３０】
特定の実施例では、バス６１２は、コンピュータ・システム６００の構成部分を互いに結合するハードウェア、ソフトウェア、又は両方を含む。限定でなく、例として、バス６１２は、アクセラレーテッド・グラフィクス・ポート（ＡＧＰ）若しくは他のグラフィクス・バス、拡張業界標準アーキテクチャ（ＥＩＳＡ）バス、フロント・サイド・バス（ＦＳＢ）、ハイパートランスポート（ＨＴ）相互接続、業界標準アーキテクチャ（ＩＳＡ）バス、インフィニバンド相互接続、低ピン・カウント（ＬＰＣ）バス、メモリ・バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）バス、周辺装置相互接続（ＰＣＩ）バス、ＰＣＩエクスプレス（ＰＣＩ−Ｘ）バス、シリアル高度技術アタッチメント（ＳＡＴＡ）バス、ビデオ電子標準協会局所（ＶＬＢ）バス、若しくは、別の適切なバス、又は、前述の２つ以上の組合せを含み得る。バス６１２は、適宜、１つ又は複数のメモリ６１２を含み得る。本開示は特定のバスを記載し、例証しているが、本開示は何れかの適切なバス又は相互接続を想定している。
【００３１】
本明細書及び特許請求の範囲では、コンピュータ読み取り可能な記憶媒体への参照は、１つ又は複数の有形のコンピュータ読み取り可能な記憶媒体を有する構造を含む。限定でなく、例として、コンピュータ読み取り可能な記憶媒体は、適宜、（例えば、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）又は特定用途向ＩＣ（ＡＳＩＣ）などの）半導体ベース又は他の集積回路（ＩＣ）、ハード・ディスク、ＨＤＤ、ハイブリッド・ハード・ドライブ（ＨＨＤ）、光ディスク、光ディスク・ドライブ（ＯＤＤ）、光磁気ディスク、光磁気ドライブ、フロッピー（登録商標）・ディスク、フロッピー（登録商標）・ディスク・ドライブ（ＦＤＤ）、磁気テープ、ホログラフィック記憶媒体、ソリッドステート・ドライブ（ＳＳＤ）、ＲＡＭドライブ、セキュアなディジタル・カード、セキュアなディジタル・ドライブ、若しくは、別の適切なコンピュータ読み取り可能な媒体、又は、前述のうちの２つ以上の組合せを含み得る。本明細書及び特許請求の範囲では、コンピュータ読み取り可能な記憶媒体への言及は、米国特許法第１０１条の特許の保護の対象でない何れかの媒体である。本明細書及び特許請求の範囲では、コンピュータ読み取り可能な記憶媒体への言及は、米国特許法第１０１条の下で特許の保護の対象でない範囲で（本来的には、伝搬する電気信号又は電磁気信号などの）信号伝送の一時的な形態を除く。
【００３２】
本開示は、何れかの適切な記憶装置を実現する１つ又は複数のコンピュータ読み取り可能な記憶媒体を想定している。特定の実施例では、コンピュータ読み取り可能な記憶媒体は、適宜、（例えば、１つ若しくは複数の内部レジスタ又はキャッシュなどの、）プロセッサ６０２の１つ若しくは複数の部分、メモリ６０４の１つ若しくは複数の部分、記憶装置６０６の１つ若しくは複数の部分、又は、前述の組合せを実現する。特定の実施例では、コンピュータ読み取り可能な記憶媒体はＲＡＭ又はＲOＭを実現する。特定の実施例では、コンピュータ読み取り可能な記憶媒体は揮発性メモリ又はパーシスタント・メモリを実現する。特定の実施例では、１つ又は複数のコンピュータ読み取り可能な記憶媒体はソフトウェアを実施する。本明細書及び特許請求の範囲では、ソフトウェアへの言及は、適宜、１つ若しくは複数のアプリケーション、バイトコード、１つ若しくは複数のコンピュータ・プログラム、１つ若しくは複数の実行可能形式、１つ若しくは複数の命令、ロジック、マシン・コード、１つ若しくは複数のスクリプト、又はソース・コード等を包含し得る。特定の実施例では、ソフトウェアは、１つ又は複数のアプリケーション・プログラミング・インタフェース（ＡＰＩ）を含む。本明細書及び特許請求の範囲は、何れかの適切なプログラミング言語、又はプログラミング言語の組合せで記述されたか、又はその他のやり方で表現された何れかの適切なソフトウェアを想定している。特定の実施例では、ソフトウェアは、ソース・コード又はオブジェクト・コードとして表現される。特定の実施例では、ソフトウェアは、例えば、Ｃ、パール、又はその適切な拡張などの高水準プログラミング言語で表現される。特定の実施例では、ソフトウェアは、アセンブラ言語（又はマシン・コード）などの低水準プログラミング言語で表現される。特定の実施例では、ソフトウェアはＪＡＶＡ(登録商標)で表現される。特定の実施例では、ソフトウェアは、ハイパテキスト・マークアップ言語（ＨＴＭＬ）、拡張マークアップ言語（ＸＭＬ）、又は他の適切なマークアップ言語で表現される。
【００３３】
例示的な環境１０の構成部分はロジック及び／又はその他の適切な構成要素を含み得る。ロジックは、構成部分の動作を行い、例えば、入力から出力を生成する旨の命令を実行する。ロジックは、ハードウェア、ソフトウェア、及び／又は他のロジックを含み得る。ロジックは、１つ又は複数の有形なコンピュータ読み取り可能な記憶媒体にコード化され得、コンピュータによって実行されると動作を行い得る。プロセッサなどの特定のロジックは構成部分の動作を管理し得る。プロセッサの例には、１つ若しくは複数のコンピュータ、１つ若しくは複数のマイクロプロセッサ、１つ若しくは複数のアプリケーション、及び／又は他のロジックが含まれる。
【００３４】
本発明は、特定の構成部分を識別して、詳細に説明してきたが、種々の変更及び修正を当業者に連想させ得、更に、本発明が、特許請求の範囲記載の範囲内に明らかに収まる前述の何れの変更及び修正も包含することが意図されている。
【００３５】
更に、開示された特定の処理フローに関し、フロー内に記載された工程は何れも、本発明の範囲から逸脱しない限り、修正し、強化し、又は割愛し得る。更に、工程は、本発明の範囲から逸脱しない限り、何れかの適切な順序で、又は同時に行い得る。
【００３６】
他の数多くの変更、置換、変形、改変、及び修正は当業者に確かめられ得、本発明が、特許請求の範囲に記載の範囲内に収まる前述の変更、置換、変形、改変、及び修正全てを包含することが意図されている。
（付記１）
第１のフレームワークに対してアプリケーション・コードをシンボリック実行する工程と、
前記第１のフレームワークの前記シンボリック実行に基づいて第１のモデルを作成する工程と、
第２のフレームワークに対して前記アプリケーション・コードをシンボリック実行する工程と、
前記第１のフレームワークの前記シンボリック実行に基づいて第２のモデルを作成する工程と、
前記第１のモデルに基づいて、前記第１のフレームワークに関連付けられた１つ又は複数のパラメータを判定する工程と、
前記第２のモデルに基づいて、前記第２のフレームワークに関連付けられた１つ又は複数のパラメータを判定する工程と、
前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータの比較に基づいて、前記アプリケーション・コードの実行のための所望のフレームワークとして前記第１のフレームワーク及び前記第２のフレームワークのうちの一方を選択する工程と
を含むことを特徴とする方法。
（付記２）
前記アプリケーション・コードはジャバスクリプトで記述されたことを特徴とする付記１記載の方法。
（付記３）
前記第１のフレームワーク及び前記第２のフレームワークの少なくとも一方はジャバスクリプト・フレームワークであることを特徴とする付記１記載の方法。
（付記４）
前記第１のモデル及び前記第２のモデルの少なくとも一方は制御フロー・グラフであることを特徴とする付記１記載の方法。
（付記５）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行時間であることを特徴とする付記１記載の方法。
（付記６）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行に必要な入力の数であることを特徴とする付記１記載の方法。
（付記７）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行において存在している制約の数であることを特徴とする付記１記載の方法。
（付記８）
実行されると、
第１のフレームワークに対してアプリケーション・コードをシンボリック実行する機能と、
前記第１のフレームワークの前記シンボリック実行に基づいて第１のモデルを作成する機能と、
第２のフレームワークに対して前記アプリケーション・コードをシンボリック実行する機能と、
前記第１のフレームワークの前記シンボリック実行に基づいて第２のモデルを作成する機能と、
前記第１のモデルに基づいて、前記第１のフレームワークに関連付けられた１つ又は複数のパラメータを判定する機能と、
前記第２のモデルに基づいて、前記第２のフレームワークに関連付けられた１つ又は複数のパラメータを判定する機能と、
前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータの比較に基づいて前記アプリケーション・コードの実行のための所望のフレームワークとして前記第１のフレームワーク及び前記第２のフレームワークのうちの一方を選択する機能と
を行うよう動作可能なソフトウェアをコード化したことを特徴とする、１つ又は複数のコンピュータ読み取り可能な有形の記憶媒体。
（付記９）
前記アプリケーション・コードはジャバスクリプトで記述されたことを特徴とする付記８記載の媒体。
（付記１０）
前記第１のフレームワーク及び前記第２のフレームワークの少なくとも一方はジャバスクリプト・フレームワークであることを特徴とする付記８記載の媒体。
（付記１１）
前記第１のモデル及び前記第２のモデルの少なくとも一方は制御フロー・グラフであることを特徴とする付記８記載の媒体。
（付記１２）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行時間であることを特徴とする付記８記載の媒体。
（付記１３）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行に必要な入力の数であることを特徴とする付記８記載の媒体。
（付記１４）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータの少なくとも一方は、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行において存在している制約の数であることを特徴とする付記８記載の媒体。
（付記１５）
第１のフレームワークに対してアプリケーション・コードをシンボリック実行するロジックと、
前記第１のフレームワークの前記シンボリック実行に基づいて第１のモデルを作成するロジックと、
第２のフレームワークに対して前記アプリケーション・コードをシンボリック実行するロジックと、
前記第１のフレームワークの前記シンボリック実行に基づいて第２のモデルを作成するロジックと、
前記第１のモデルに基づいて、前記第１のフレームワークに関連付けられた１つ又は複数のパラメータを判定するロジックと、
前記第２のモデルに基づいて、前記第２のフレームワークに関連付けられた１つ又は複数のパラメータを判定するロジックと、
前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータの比較に基づいて前記アプリケーション・コードの実行のための所望のフレームワークとして前記第１のフレームワーク及び前記第２のフレームワークのうちの一方を選択するロジックと
を含むことを特徴とするシステム。
（付記１６）
前記アプリケーション・コードはジャバスクリプトで記述されたことを特徴とする付記１５記載のシステム。
（付記１７）
前記第１のフレームワーク及び前記第２のフレームワークの少なくとも一方はジャバスクリプト・フレームワークであることを特徴とする付記１５記載のシステム。
（付記１８）
前記第１のモデル及び前記第２のモデルの少なくとも一方は制御フロー・グラフであることを特徴とする付記１５記載のシステム。
（付記１９）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータの少なくとも一方は、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行時間であることを特徴とする付記１５記載のシステム。
（付記２０）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行に必要な入力の数であることを特徴とする付記１５記載のシステム。
（付記２１）
前記第１のフレームワークに関連付けられた前記１つ又は複数のパラメータ、及び前記第２のフレームワークに関連付けられた前記１つ又は複数のパラメータは、前記アプリケーション・コードが個別のフレームワークに適用される場合の前記アプリケーション・コードの実行において存在している制約の数であることを特徴とする付記１５記載のシステム。
【図１】
0005682489.tif 000002
【図２】
0005682489.tif 000003
【図３】
0005682489.tif 000004
【図４】
0005682489.tif 000005