(57)【要約】      （修正有）【課題】コンピュータ可読プログラム検査のための入力を生成する方法を提供する。【解決手段】方法は、プログラムを取得するステップと、プログラムを分析してコードの中の定数を識別するステップとを含む。また、方法は、定数の発生を含むコードの一部から定数に関連付けられたコンテキストデータを取得するステップと、定数のコンピュータ可読プログラムの中の位置を決定するステップと、コンテキストデータを分析して、位置におけるプログラムへの可能な入力の特性を識別するステップとを含む。更に、方法は、定数及び識別された特性に基づきプログラムのための入力を生成するステップと、プログラムの実行が位置に到達するとき、プログラムの実行中に生成された入力を提供するステップと、を含む。【選択図】図３Ａ
2020144842.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
コンピュータ可読プログラムを取得するステップと、
前記コンピュータ可読プログラムを分析して、前記コンピュータ可読プログラムのコードの中の定数を識別するステップであって、前記定数は前記コンピュータ可読プログラムの前記コードの中の定数値を有する、ステップと、
前記定数の発生を含む前記コードの部分から、前記定数に関連付けられたコンテキストデータを取得するステップと、
前記定数の前記発生の前記コンピュータ可読プログラムの中の位置を決定するステップと、
前記定数値に関連する前記コンテキストデータを分析して、前記位置における前記コンピュータ可読プログラムへの可能な入力の特性を識別するステップと、
前記定数値及び前記識別した特性に基づき、前記コンピュータ可読プログラムのための入力を生成するステップと、
前記コンピュータ可読プログラムの実行が前記位置に到達するとき、前記コンピュータ可読プログラムの実行中に前記コンピュータ可読プログラムに前記生成した入力を提供するステップと、
を含む方法。
【請求項２】
前記コンピュータ可読プログラムを分析するステップは、前記コンピュータ可読プログラムの逆アセンブルコードの読み出し専用データセクションを分析し、前記読み出し専用データセクションの中の前記定数を識別するステップを含む、請求項１に記載の方法。
【請求項３】
前記位置を決定するステップは、
前記コンピュータ可読プログラムの制御フローグラフを取得するステップと、
前記定数の前記発生を含む、前記制御フローグラフの基本ブロックを取得するステップと、
を含み、前記位置に到達する前記コンピュータ可読プログラムの前記実行は、前記基本ブロックを実行する前記コンピュータ可読プログラムの前記実行を含む、請求項１に記載の方法。
【請求項４】
前記制御フローグラフを分析して、前記コンピュータ可読プログラムへの入力に依存する制御フローグラフの基本ブロックのサブセットを決定するステップ、を更に含み、
前記基本ブロックを取得する前記ステップは、前記基本ブロックのサブセットの中から前記基本ブロックを取得するステップを含む、請求項３に記載の方法。
【請求項５】
前記コンテキストデータを分析するステップは、機械学習技術を用いて前記特性を識別するステップを含み、前記識別された特性は、入力長、数値範囲、及び入力フォーマットのうちの１つ以上を含み、前記生成された入力は、前記入力長に基づく長さ、前記数値範囲に基づく数値、及び入力フォーマットに基づきフォーマットされた生成された入力の一部、のうちの１つ以上を含む、請求項１に記載の方法。
【請求項６】
他の入力を用いて前記コンピュータ可読プログラムを実行するステップ、を更に含み、
前記入力を生成するステップは、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行が前記位置に到達することに応答して生じる、請求項１に記載の方法。
【請求項７】
前記生成された入力を前記コンピュータ可読プログラムの進行中の実行に提供することにより、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行を継続するステップ、を更に含む請求項６に記載の方法。
【請求項８】
前記入力を生成するステップは、前記他の入力に更に基づき、
前記方法は、前記生成された入力を用いて前記コンピュータ可読プログラムの実行を開始するステップ、を更に含む請求項６に記載の方法。
【請求項９】
前記生成された入力は、前記他の入力と、前記定数値及び前記識別された特性に基づく新しい入力部分と、を含む、請求項８に記載の方法。
【請求項１０】
１つ以上の非一時的コンピュータ可読媒体であって、１つ以上のプロセッサにより実行されると、動作を実行する命令を含み、前記動作は、
コンピュータ可読プログラムを取得するステップと、
前記コンピュータ可読プログラムを分析して、前記コンピュータ可読プログラムのコードの中の定数を識別するステップであって、前記定数は前記コンピュータ可読プログラムの前記コードの中の定数値を有する、ステップと、
前記定数の発生を含む前記コードの部分から、前記定数に関連付けられたコンテキストデータを取得するステップと、
前記定数の前記発生の前記コンピュータ可読プログラムの中の位置を決定するステップと、
前記定数値に関連する前記コンテキストデータを分析して、前記位置における前記コンピュータ可読プログラムへの可能な入力の特性を識別するステップと、
前記定数値及び前記識別した特性に基づき、前記コンピュータ可読プログラムのための入力を生成するステップと、
前記コンピュータ可読プログラムの実行が前記位置に到達するとき、前記コンピュータ可読プログラムの実行中に前記コンピュータ可読プログラムに前記生成した入力を提供するステップと、
を含む、非一時的コンピュータ可読媒体。
【請求項１１】
１つ以上のプロセッサと１つ以上のコンピュータ可読媒体を含むシステムであって、前記システムは動作を実行し、前記動作は、
コンピュータ可読プログラムを取得するステップと、
前記コンピュータ可読プログラムを分析して、前記コンピュータ可読プログラムのコードの中の定数を識別するステップであって、前記定数は前記コンピュータ可読プログラムの前記コードの中の定数値を有する、ステップと、
前記定数の発生を含む前記コードの部分から、前記定数に関連付けられたコンテキストデータを取得するステップと、
前記定数の前記発生の前記コンピュータ可読プログラムの中の位置を決定するステップと、
前記定数値に関連する前記コンテキストデータを分析して、前記位置における前記コンピュータ可読プログラムへの可能な入力の特性を識別するステップと、
前記定数値及び前記識別した特性に基づき、前記コンピュータ可読プログラムのための入力を生成するステップと、
前記コンピュータ可読プログラムの実行が前記位置に到達するとき、前記コンピュータ可読プログラムの実行中に前記コンピュータ可読プログラムに前記生成した入力を提供するステップと、
を含む、システム。
【請求項１２】
前記コンピュータ可読プログラムを分析するステップは、前記コンピュータ可読プログラムの逆アセンブルコードの読み出し専用データセクションを分析し、前記読み出し専用データセクションの中の前記定数を識別するステップを含む、請求項１１に記載のシステム。
【請求項１３】
前記位置を決定するステップは、
前記コンピュータ可読プログラムの制御フローグラフを取得するステップと、
前記定数の前記発生を含む、前記制御フローグラフの基本ブロックを取得するステップと、
を含み、前記位置に到達する前記コンピュータ可読プログラムの前記実行は、前記基本ブロックを実行する前記コンピュータ可読プログラムの前記実行を含む、請求項１１に記載のシステム。
【請求項１４】
前記動作は、前記制御フローグラフを分析して、前記コンピュータ可読プログラムへの入力に依存する制御フローグラフの基本ブロックのサブセットを決定するステップ、を更に含み、
前記基本ブロックを取得する前記ステップは、前記基本ブロックのサブセットの中から前記基本ブロックを取得するステップを含む、請求項１３に記載のシステム。
【請求項１５】
前記コンテキストデータを分析するステップは、機械学習技術を用いて前記特性を識別するステップを含み、前記識別された特性は、入力長、数値範囲、及び入力フォーマットのうちの１つ以上を含み、前記生成された入力は、前記入力長に基づく長さ、前記数値範囲に基づく数値、及び入力フォーマットに基づきフォーマットされた生成された入力の一部、のうちの１つ以上を含む、請求項１１に記載のシステム。
【請求項１６】
前記動作は、他の入力を用いて前記コンピュータ可読プログラムを実行するステップ、を更に含み、
前記入力を生成するステップは、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行が前記位置に到達することに応答して生じる、請求項１１に記載のシステム。
【請求項１７】
前記動作は、前記生成された入力を前記コンピュータ可読プログラムの進行中の実行に提供することにより、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行を継続するステップ、を更に含む請求項１６に記載のシステム。
【請求項１８】
前記入力を生成するステップは、前記他の入力に更に基づき、
前記動作は、前記生成された入力を用いて前記コンピュータ可読プログラムの実行を開始するステップ、を更に含む、請求項１６に記載のシステム。
【請求項１９】
前記生成された入力は、前記他の入力と、前記定数値及び前記識別された特性に基づく新しい入力部分と、を含む、請求項１８に記載のシステム。
【請求項２０】
前記位置に到達する前記コンピュータ可読プログラムの前記実行は、前記実行が前記位置に到達し且つ閾時間期間の間に前記位置を終了しないことを含む、請求項１１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示で議論される実施形態は、コンピュータプログラム検査のための入力の生成に関する。
【背景技術】
【０００２】
コンピュータプログラムは、多くの産業において使用され得る。コンピュータプログラムを展開するシステムにおける問題を生じ得るコンピュータプログラム内のエラーを削減することを助けるために、コンピュータプログラムは検査され、及び／又はデバッグされてよい。
【０００３】
本開示に記載される主題は、上述のような欠点を解決する実施形態や上述のような環境でのみ機能する実施形態に限定されない。むしろ、この背景技術は、単に、本開示に記載される複数の実施形態が実施される技術分野の一例を説明するために提供される。
【発明の概要】
【０００４】
本開示の一実施形態は、コンピュータ可読プログラムを取得するステップと、前記コンピュータ可読プログラムを分析して、前記コンピュータ可読プログラムのコードの中の定数を識別するステップと、を含む方法を含んでよい。定数は、コンピュータ可読プログラムのコードの中の定数値を有してよい。前記方法は、前記定数の発生を含む前記コードの一部から、前記定数に関連付けられたコンテキストデータを取得するステップを更に含んでよい。前記方法は、前記定数の発生の前記コンピュータ可読プログラム内の位置を決定するステップを更に含んでよい。前記方法は、前記定数値に関連するコンテキストデータを分析して、前記位置における前記コンピュータ可読プログラムへの可能な入力の特性を識別するステップ、を更に含んでよい。前記方法は、前記定数値及び前記識別された特性に基づき、前記コンピュータ可読プログラムのための入力を生成するステップを更に含んでよい。前記方法は、前記コンピュータ可読プログラムの実行が前記位置に到達するとき、前記コンピュータ可読プログラムの実行中に前記コンピュータ可読プログラムに生成された入力を提供するステップを更に含んでよい。
【０００５】
実施形態の目的及び利点のうちの１つ以上が、少なくとも特に特許請求の範囲で指摘された要素、特徴及び組合せにより実現され又は達成されるだろう。
【０００６】
上述の全体的説明及び以下の詳細な説明の両方は、例示及び説明のために与えられ、本開示の範囲を限定しないことが理解される。
【図面の簡単な説明】
【０００７】
例示的な実施形態は、添付の図面を用いて、更なる特異性及び詳細事項と共に記載され説明される。
【０００８】
【図１】自動コンピュータプログラム検査動作のための入力を生成する例示的な環境のブロック図である。
【０００９】
【図２】コンピュータ可読プログラムを分析するための例示的な環境のブロック図である。
【００１０】
【図３Ａ】自動コンピュータプログラム検査動作のための入力を識別する例示的な処理のフローチャートである。
【図３Ｂ】自動コンピュータプログラム検査動作のための入力を識別する例示的な処理のフローチャートである。
【００１１】
【図４】例示的なコンピューティングシステムのブロック図である。
【００１２】
全ての図は本開示に記載の少なくとも１つの実施形態に従う。
【発明を実施するための形態】
【００１３】
コンピュータ可読プログラムは、自動検査動作を用いて検査されてよい。自動検査動作は、毎回異なる入力を用いて、コンピュータ可読プログラムを何回も実行することを含んでよい。コンピュータ可読プログラムの実行は、出力、演算、クラッシュ、ハング、ストール（stall）、又は他の動作について観察されてよい。観察は、観察がコンピュータ可読プログラムの開発者の意図に従い得るとき、予想通りであってよい。代替又は追加で、観察は、観察が開発者の意図に従わないことがあるとき、予想外であってよい。幾つかの場合には、自動検査動作の目的は、予想外の動作、又は予想外の動作を引き起こす入力を識別することであってよい。これらは、コンピュータ可読プログラムの中のエラー、バグ、又は脆弱性に関連し得る。幾つかの例では、コンピュータ可読プログラムのブランチの一部又は全部を検査することは、自動検査動作の目的であってよい。
【００１４】
幾つかの自動検査動作は、コンピュータ可読プログラムのための複数の入力をランダムに生成することを含んでよい。入力の完全にランダムな生成は、他の方法より、コンピュータ可読プログラムの低速な検査をもたらし得る。例えば、入力が完全にランダムに生成された場合、予想外の動作が生じる前の異なる入力によるコンピュータ可読プログラムの実行回数は、入力が完全にランダムに生成されない実行回数よりも大きくなり得る。
【００１５】
入力のランダム生成は、有効入力又は有効入力の部分を変更して又はランダムに変更して、異なる入力を生成することを含み得る。例えば、１つ以上のランダム値が、異なる入力を生成するために有効入力に挿入され又はそれに付加されてよい。入力の変更は、完全にランダムな入力の生成に優る改良である。なぜなら、コンピュータ可読プログラムの実行は、入力のうちの、コンピュータ可読プログラムの実行を、入力のランダム部分が入力として使用され得るコンピュータ可読プログラムの基本ブロックへ進行させる有効入力を受け付け得るからである。これに対して、完全にランダムな入力の生成は、より完全にランダムな入力を取り入れ、コンピュータ可読プログラムを同じ基本ブロックに到達させ得る入力を発見してよい。
【００１６】
本開示のシステム及び方法は、自動コンピュータ可読プログラム検査動作のためのコンテキストに基づく入力の生成に関連し得る。コンテキストに基づく入力はコンピュータ可読プログラムの実行により有効入力として受け付けられる高い可能性を有し得るので、コンテキストに基づく入力の生成は、完全にランダムな入力及び変更された入力の生成に優る改良であり得る。代替又は追加で、コンテキストに基づく入力は、コンピュータ可読プログラムの異なる基本部分に進行することにより、コンピュータ可読プログラムを実行させるより高い可能性を有し得る。
【００１７】
例えば、コンピュータ可読プログラムの特定基本ブロックにおいて、コンピュータ可読プログラムの実行は特定入力だけを受け付けてよい。完全にランダムな入力生成を用いる自動コンピュータ可読プログラム検査動作は、特定入力を生成する前に、数百、数千、又は数百万個もの入力を生成し得る。既知の有効入力を変更する自動コンピュータ可読プログラム検査動作は、特定入力が既知の有効入力に関連するとき、完全にランダムな入力生成よりも、特定入力をより早く生成し得る。コンテキストに基づく入力を用いる自動コンピュータ可読プログラム検査動作は、コンピュータ可読プログラムを分析して、コンピュータ可読プログラムの特定基本ブロックのための入力に関連する特性を識別することにより、完全にランダムな入力生成又は既知の有効入力を変更するよりも、特定入力をより早く生成し得る。代替又は追加で、コンテキストに基づく入力を用いる自動コンピュータ可読プログラム検査動作は、特定入力が既知の有効入力に関連しない場合に変更を用いる自動コンピュータ可読プログラム検査動作よりも、特定入力をより早く生成し得る。
【００１８】
別の例として、コンピュータ可読プログラムの特定基本ブロックにおいて、特定入力を用いるコンピュータ可読プログラムの実行は、コンピュータ可読プログラムの特定部分の意図されない実行を生じ得る。コンピュータ可読プログラムの特定部分の意図されない実行は、コンピュータ可読プログラム内の脆弱性を表し得る。脆弱性を暴露することは、検査動作の目的であってよい。コンテキストに基づく入力を用いる自動コンピュータ可読プログラム検査動作は、コンピュータ可読プログラムを分析して、コンピュータ可読プログラムの特定基本ブロックのための入力に関連する特性を識別することにより、完全にランダムな入力生成又は既知の有効入力を変更するよりも、特定入力をより早く生成し得る。
【００１９】
したがって、本開示のシステム及び方法は、ソフトウェアテスト及び／又は自動ソフトウェアテストの技術分野における改良を含み得る。改良は、自動ソフトウェアテストの効率の増大を少なくとも含んでよい。
【００２０】
追加又は代替として、本開示のシステム及び方法は、コンピュータ可読プログラムの実行をより速く進める又は計算時間及び／又はエネルギを削減する、受け付け可能な入力を識別することにより、自動コンピュータ可読プログラム検査動作の実装に改良をもたらし得る。
【００２１】
追加又は代替として、本開示のシステム及び方法は、コンピュータ可読プログラムによる実行により受け付けられるより高い可能性を有し得る入力を生成することを含む、コンピュータにより前に実行可能ではなかった機能のコンピュータによる実行を可能にし得る。追加又は代替として、本開示のシステム及び方法は、コンピュータ可読プログラム内の脆弱性の暴露のより高い可能性を有し得る入力を生成することを含む、コンピュータにより前に実行可能ではなかった機能のコンピュータによる実行を可能にし得る。追加又は代替として、本開示のシステム及び方法は、コンピュータが、コンピュータ可読プログラムの分析からコンピュータ可読プログラムへの入力の特性を識別することを可能にし得る。
【００２２】
図１は、自動コンピュータプログラム検査動作のための入力１３２を生成する例示的な環境１００のブロック図である。環境１００は、コンピュータ可読プログラム分析部１２０、入力生成部１３０、及びコンピュータ可読プログラム実行部１４０を含んでよい。
【００２３】
幾つかの実施形態では、通常、コンピュータ可読プログラム分析部１２０は、コンピュータ可読プログラム１０２を分析して、拡張辞書１２２を生成してよい。入力生成部１３０は、拡張辞書１２２を用いて、入力１３２を生成してよい。上述及び他の実施形態では、コンピュータ可読プログラム実行部１４０は、入力１３２又は他の入力を用いてコンピュータ可読プログラム１０２を実行してよい。コンピュータ可読プログラム実行部１４０は、入力１３２又は他の入力を用いるコンピュータ可読プログラム１０２の実行に基づき実行トレース１４２を生成してよい。入力生成部１３０は、実行トレース１４２を用いて、入力１３２を生成すべきときを決定してよい。代替又は追加で、入力生成部１３０は、実行トレース１４２をもたらす入力１３２に基づき、追加入力１３２を決定してよい。
【００２４】
幾つかの実施形態では、コンピュータ可読プログラム１０２は、任意の適切なフォーマットの任意のコンピュータ可読プログラムであってよい。コンピュータ可読プログラム１０２は、開発者コード、逆アセンブルコード、アセンブリコード、機械コード、実行可能バイナリ及び／又はコンピュータにより実行されるべき任意の他の表現の命令を含んでよい。コンピュータ可読プログラム１０２は、検査中コード、分析中バイナリプログラム、及び／又は未知のバイナリプログラムを含んでよい。
【００２５】
図示のように、幾つかの実施形態では、コンピュータ可読プログラム分析部１２０は、コンピュータ可読プログラム１０２を分析して、拡張辞書１２２を生成するよう構成されてよい。コンピュータ可読プログラム１０２の分析は、定数（constant）を識別すること、定数のコンテキストデータを取得すること、コンピュータ可読プログラム１０２内の定数の位置を決定すること、及び／又は、該位置におけるコンピュータ可読プログラム１０２への可能な入力の特性を識別すること、を含んでよい。コンピュータ可読プログラム１０２の分析に関する更なる詳細は、図２の処理２００に関して議論される。
【００２６】
幾つかの実施形態では、拡張辞書１２２は、１つ以上の定数及び定数の各々に関連するデータを含んでよい。例えば、拡張辞書１２２は、コンピュータ可読プログラム１０２の中で、コンピュータ可読プログラム分析部１２０により識別された定数を含んでよい。定数は、（例えば、定義又は宣言を通じて）コンピュータ可読プログラム１０２のコードの中で初期化されてよい定数値（constant  value）を含んでよい。拡張辞書１２２は、定数に関連付けられたコンテキストデータを更に含んでよい。コンテキストデータは、定数の１つ以上の発生を含むコンピュータ可読プログラム１０２のコードの１つ以上の部分からであってよい。拡張辞書１２２は、コンピュータ可読プログラム１０２の中の定数の発生の、コンピュータ可読プログラム１０２の中の１つ以上の位置を更に含んでよい。位置は、コンピュータ可読プログラム１０２のコードの中の位置を含んでよい。追加又は代替として、位置は、コンピュータ可読プログラム１０２の実行可能バージョンの中の位置を含んでよい。位置は、コンピュータ可読プログラム１０２の実行トレースの中で又は実行中に認識可能であってよい。拡張辞書１２２は、コンピュータ可読プログラム１０２の可能な入力の１つ以上の特性を更に含んでよい。定数値、コンテキストデータ、及び可能な入力の特性を含む、定数の各々は、拡張辞書１２２に含まれるとき、コンピュータ可読プログラム１０２の位置に関連付けられてよい。拡張辞書１２２の内容に関する更なる詳細は、図２の定数２１２、コンテキストデータ２２２、特性２３２、及び位置２５２に関して以下に提供される。
【００２７】
図示のように、幾つかの実施形態では、入力生成部１３０は、拡張辞書１２２を使用して入力１３２を生成するよう構成されてよい。例えば、入力生成部１３０は、拡張辞書１２２に含まれる定数値及び特性に基づき入力１３２を生成するよう構成されてよい。幾つかの実施形態では、入力１３２の各々は、それぞれコンピュータ可読プログラム１０２の中の位置に対応してよい。幾つかの実施形態では、入力１３２の各々は、異なる位置に対応してよい。代替又は追加で、入力１３２のうちの幾つかは同じ位置に対応してよく、入力のうちの他のものは異なる位置に対応してよい。コンピュータ可読プログラム１０２の中の位置に対応する入力１３２は、コンピュータ可読プログラム１０２の実行がコンピュータ可読プログラム１０２内の該位置に到達するとき、該入力がコンピュータ可読プログラム１０２に提供され得ることを示してよい。
【００２８】
幾つかの実施形態では、入力１３２は、数値、値、文字、文字列、又はコンピュータ可読プログラム１０２に入力されるよう構成される他の情報を含んでよい。
【００２９】
図示のように、幾つかの実施形態では、コンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２を実行するよう構成されてよい。コンピュータ可読プログラム実行部１４０は、入力１３２、他の入力を用いて、又は入力無しで、コンピュータ可読プログラム１０２を実行するよう構成されてよい。コンピュータ可読プログラム１０２の実行が入力１３２を用いることに基づき、コンピュータ可読プログラム実行部１４０は、実行トレース１４２を生成するよう構成されてよい。幾つかの実施形態では、コンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２を検査するために、入力１３２を用いてコンピュータ可読プログラム１０２を実行するよう構成されてよい。入力１３２を用いるコンピュータ可読プログラム１０２の実行は、コンピュータ可読プログラム１０２の実行中にコンピュータ可読プログラム１０２の動作を観察することにより、コンピュータ可読プログラム１０２を検査してよい。上述及び他の実施形態では、コンピュータ可読プログラム実行部１４０は、出力、演算、クラッシュ、ハング、ストール、又はコンピュータ可読プログラム１０２の他の動作を観察し及び／又は記録するよう構成されてよい。コンピュータ可読プログラム１０２の動作は、コンピュータ可読プログラム１０２が検査中にどのように実行するかを示してよい。
【００３０】
幾つかの実施形態では、実行トレース１４２は、コンピュータ可読プログラム１０２の１つ以上の実行により実行される、コンピュータ可読プログラム１０２内の位置を含んでよい。例えば、実行トレース１４２は、入力１３２のうちの特定の１つ以上を用いる、コンピュータ可読プログラム１０２の特定の実行中に実行される位置又は基本ブロックの全部のトレースを含んでよい。実行トレース１４２の各々は、したがって、対応する実行トレース１４２をもたらす、入力１３２のうちの特定の１つ以上と関連付けられてよい。
【００３１】
幾つかの実施形態では、コンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２の実行中に到達される位置に基づき、コンピュータ可読プログラム１０２の実行中にコンピュータ可読プログラム１０２に提供するために、入力１３２のうちの１つを選択してよい。例えば、コンピュータ可読プログラム実行部１４０は、どの基本ブロックが現在実行中であるか、及びコンピュータ可読プログラム１０２内の基本ブロックの特定位置、を維持してよい。コンピュータ可読プログラム実行部１４０は、特定位置を、入力１３２に対応する位置と比較してよい。コンピュータ可読プログラム１０２の実行の特定位置が、入力１３２のうちの特定入力の位置に対応する場合、コンピュータ可読プログラム実行部１４０は、該特定入力を選択してよく、該特定入力を、その位置でコンピュータ可読プログラム１０２の実行中に使用するために、コンピュータ可読プログラム１０２の実行に提供してよい。
【００３２】
幾つかの実施形態では、入力生成部１３０は、実行トレース１４２を用いて、追加入力１３２を生成してよい。例えば、入力生成部１３０は、実行トレース１４２及び実行トレース１４２に関連付けられた入力を分析して、コンピュータ可読プログラム１０２の実行を拡張辞書１２２に含まれる特定位置に到達させる入力の特定部分を識別させてよい。入力生成部１３０は、拡張辞書１２２内の特定位置に対応する特性及び／又は定数値に基づき、入力の特定部分を変更してよい。
【００３３】
幾つかの実施形態では、入力生成部１３０及びコンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２の進行中の実行のための追加入力１３２を生成するために、一緒に動作してよい。例えば、コンピュータ可読プログラム実行部１４０は、入力１３２を用いてコンピュータ可読プログラム１０２を実行し始めてよい。コンピュータ可読プログラム実行部１４０は、進行中の実行の実行トレース１４２を生成してよい。入力生成部１３０は、進行中の実行の実行トレース１４２を取り入れ、実行トレース１４２内の位置を拡張辞書１２２内の位置と比較してよい。進行中の実行により到達された位置と拡張辞書１２２内の位置との間の対応に基づき、入力生成部１３０は、進行中の実行の中でコンピュータ可読プログラム実行部１４０により使用され得る、入力１３２のうちの第２入力を生成してよい。
【００３４】
幾つかの実施形態では、入力生成部１３０は、コンピュータ可読プログラム実行部１４０によるコンピュータ可読プログラム１０２の実行により条件が満たされることに基づき、入力１３２を生成してよい。例えば、入力生成部１３０は、実行トレース１４２内の位置が条件を満たすことに基づき、入力を生成してよい。例えば、コンピュータ可読プログラム１０２の実行は、コンピュータ可読プログラム１０２の特定位置におけるコードの特定基本ブロックを実行し、次に別の基本ブロックに進んでよい。実行が閾時間期間の間、別の基本ブロックに進まない場合、条件が満たされてよい。条件が満たされることに応答して、コンピュータ可読プログラム実行部１４０は、特定位置を含む実行トレース１４２を、入力生成部１３０へ送信してよい。入力生成部１３０は、条件が満たされることに応答して、及び特定位置に対応する拡張辞書１２２からの情報に基づき、特定入力１３２を生成してよい。幾つかの実施形態では、特定入力１３２は、コンピュータ可読プログラム１０２の進行中の実行に提供されてよい。上述又は他の実施形態では、実行は終了されてよく、特定入力はコンピュータ可読プログラム１０２の新たな実行に提供されてよい。
【００３５】
上述又は他の実施形態では、入力生成部１３０及びコンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２の後の実行のための追加入力１３２を生成するために、一緒に動作してよい。例えば、コンピュータ可読プログラム実行部１４０は、入力１３２のうちの第１入力を用いてコンピュータ可読プログラムコード１０２を実行してよい。入力生成部１３０は、入力１３２のうちの第１入力を用いるコンピュータ可読プログラム１０２の実行により到達される位置を、拡張辞書１２２内の位置と比較してよい。コンピュータ可読プログラム１０２の実行により到達される位置のうちの１つが拡張辞書１２２内の特定位置に対応することに応答して、入力生成部１３０は、特定位置に対応する拡張辞書１２２からの情報に基づき、入力１３２のうちの第２入力を生成してよい。例えば、入力１３２のうちの第２入力は、特定位置に関連付けられた定数の定数値に基づいてよい。追加又は代替として、入力１３２のうちの第２入力は、定数に関連付けられた特性に基づいてよい。追加又は代替として、入力１３２のうちの第２入力は、入力１３２のうちの第１入力に基づき及び／又はそれを含んでよい。例えば、入力１３２のうちの第２入力は、特定位置に対応する拡張辞書１２２内の情報に基づき調整される、入力１３２のうちの第１入力を含んでよい。入力１３２のうちの第２入力は、コンピュータ可読プログラム実行部１４０によるコンピュータ可読プログラム１０２の後の実行の中で使用されてよい。
【００３６】
幾つかの実施形態では、コンピュータ可読プログラム分析部１２０及びコンピュータ可読プログラム実行部１４０のうちの１つ以上は、図４のコンピューティングシステム４００のようなコンピューティングシステムに、コンピュータ可読プログラムの分析、コンピュータ可読プログラムの入力、及び／又はコンピュータ可読プログラムの実行に関連する１つ以上の動作を実行させるよう構成されるコード及びルーチンを含んでよい。追加又は代替として、コンピュータ可読プログラム分析部１２０、入力生成部１３０、及びコンピュータ可読プログラム実行部１４０のうちの１つ以上は、図４のプロセッサ４０２のような、プロセッサ、（例えば、１つ以上の工程を実行する又はその実行を制御する）マイクロプロセッサ、FPGA（field−programmable  gate  array）又はASIC（application−specific  integrated  circuit）を含むハードウェアを用いて実装されてよい。幾つかの他の例では、コンピュータ可読プログラム分析部１２０、入力生成部１３０、及びコンピュータ可読プログラム実行部１４０のうちの１つ以上は、ハードウェア及びソフトウェアの組み合わせを用いて実装されてよい。本開示において、コンピュータ可読プログラム分析部１２０、入力生成部１３０、及びコンピュータ可読プログラム実行部１４０のうちの１つ以上により実行されるとして記載された動作は、コンピュータ可読プログラム分析部１２０、入力生成部１３０、及びコンピュータ可読プログラム実行部１４０のうちの１つ以上がシステムに実行するよう指示し得る動作を含んでよい。
【００３７】
本開示の範囲から逸脱することなく環境１００に対し変更、追加又は省略が行われてよい。例えば、幾つかの実施形態では、特性の識別は、コンピュータ可読プログラム分析部１２０により実行されることの代わりに、又はそれに追加して、入力生成部１３０により実行され又はそれに関連してよい。さらに、動作の順序は、異なる実装に従い変化してよい。
【００３８】
図２は、コンピュータ可読プログラム１０２を分析するための例示的な環境２００のブロック図である。環境２００は、定数識別部２１０、コンテキストデータ抽出部２２０、特性識別部２３０、制御フローグラフ生成部２４０、及び位置識別部２５０を含んでよい。
【００３９】
幾つかの実施形態では、通常、定数識別部２１０は、コンピュータ可読プログラム１０２の定数２１２を識別してよい。コンテキストデータ抽出部２２０は、コンテキストデータ２２２をコンピュータ可読プログラム１０２から、定数２１２及びコンピュータ可読プログラム１０２に基づき抽出してよい。特性識別部２３０は、コンテキストデータ２２２及び定数２１２に基づき特性２３２を生成してよい。追加又は代替として、制御フローグラフ生成部２４０は、コンピュータ可読プログラム１０２に基づき、制御フローグラフ２４２を生成してよい。位置識別部２５０は、制御フローグラフ生成部２４２及び／又はコンピュータ可読プログラム１０２に関連する定数２１２の位置２５２を識別してよい。
【００４０】
幾つかの実施形態では、環境２００は、図１のコンピュータ可読プログラム分析部１２０に関連し得る１つ以上の動作を実行してよい。追加又は代替として、定数２１２、コンテキストデータ２２２、特性２３２、フローグラフ２４２、及び／又は位置２５２の各々は、図１の拡張辞書１２２に含まれてよい。
【００４１】
図示のように、幾つかの実施形態では、定数識別部２１０は、コンピュータ可読プログラム１０２の中の定数２１２を識別するよう構成されてよい。幾つかの実施形態では、定数２１２は、定数変数がコンピュータ可読プログラム１０２のコードの中に現れるときの該定数変数の名称、及び定数変数がコード内で初期化される値、を含んでよい。例えば、定数識別部２１０は、コンピュータ可読プログラム１０２の１つ以上の実施形態をパースしてよい。例えば、定数識別部２１０は、逆アセンブルコード（disassembly  code）及び／又は開発者コード（developer  code）を通じてパースして、定数２１２及び定数２１２が初期化された定数値を識別してよい。幾つかの実施形態では、定数識別部２１０は、逆アセンブルコードの読み出し専用データセクションを通じて検索して、定数２１２を識別してよい。定数識別部２１０は、コードの構文に基づき定数２１２を識別してよい。例えば、定数２１２は、キーワード、例えば「const」又は「#DEFINE」を用いて、定数値により初期化されてよい。
【００４２】
図示のように、幾つかの実施形態では、コンテキストデータ抽出部２２０は、コンピュータ可読プログラム１０２からコンテキストデータ２２２を抽出するよう構成されてよい。コンテキストデータ抽出部２２０は、コンピュータ可読プログラム１０２のコード内の、定数２１２の位置を取得してよい。例えば、コンテキストデータ抽出部２２０は、定数２１２の発生について、コンピュータ可読プログラム１０２をパースするよう構成されてよい。追加又代替として、定数識別部２１０は、別のソースからコンピュータ可読プログラム１０２のコード内の定数２１２の位置を、例えば、位置識別部２５０から位置２５２を、取得してよい。
【００４３】
コンテキストデータ抽出部２２０は、コード部分、例えば定数の発生を含むコード行、及び定数２１２の発生に隣接するコード行、をコンテキストデータ２２２として識別するよう構成されてよい。例えば、定数の発生の後のコード行は、エラーメッセージ又はエラープロトコルに関連してよい又は関連しなくてよい。後のコード行がエラーメッセージ又はエラープロトコルを含む又は含まないという事実は、コンテキストデータ２２２の部分として識別されてよい。
【００４４】
幾つかの実施形態では、コンテキストデータ２２２は、定数２１２に関連する及び／又はそれを含むコンピュータ可読プログラム１０２の１つ以上のコード行を含んでよい。幾つかの実施形態では、コンテキストデータ２２２は、コンピュータ可読プログラム１０２全体に渡り、定数２１２の複数の発生に関連するコード行を含んでよい。上述又は他の実施形態では、コンテキストデータ２２２は、複数の発生に関連付けられた集約コード行を含んでよい。例えば、複数の発生のうちの１つより多くの発生に共通するコード行がコンテキストデータ２２２に含まれ得る。
【００４５】
コンテキストデータ抽出部２２０は、コード行を、他の知られているコンテキストデータ、又は共通コードパターンと比較して、コンテキストデータ２２２及び／又は特に関連のあるコンテキストデータ２２２を決定するよう構成されてよい。例えば、コンテキストデータ抽出部２２０は、コンピュータ可読プログラム１０２のコードの中の定数の発生を含むコード行を取得してよい。コンテキストデータ抽出部２２０は、コンテキストデータ又は別の定数及び別のコンピュータ可読プログラムに関連する特に関連のあるコンテキストデータに知られている例示的コード行を取得してよい。コンテキストデータ抽出部２２０は、コンピュータ可読プログラム１０２から取得されたコード行を例示的なコード行と比較してよい。コード行と例示的なコード行との間の類似性に基づき、コンテキストデータ抽出部２２０は、コンテキストデータ２２２及び／又は特定の関連するコンテキストデータ２２２として、コード行を識別してよい。
【００４６】
図示のように、幾つかの実施形態では、特性識別部２３０は、定数２１２に関連する特性２３２を識別してよい。幾つかの実施形態では、特性２３２は、定数２１２に基づくコンピュータ可読プログラム１０２への可能な入力の特性を含んでよい。例えば、特性２３２は、図１の入力１３２を生成するために図１の入力生成部１３０により使用され得る情報を含んでよい。特性２３２の例は、入力長、数値範囲、及び入力フォーマットのような項目を含む。入力１３２は特性２３２に従い生成されてよい。例えば、特性２３２が入力長を含む場合、入力１３２のうちの１つ以上は、入力長以下の長さを有してよい。追加又は代替として、入力１３２のうちの１つ以上は、入力長を超える長さを有してよい。入力長を超える長さを有する入力は、コンピュータ可読プログラム１０２が該入力を正しく拒否するか否かを検査することを意図してよい。
【００４７】
特性２３２は、定数２１２の定数値に基づいてよい。例えば、定数値は、正しい入力の中の文字数又は入力長を示し得る数値であってよい。追加又は代替として、コンテキストデータ２２２は、定数値が入力長であり、数値範囲又はフォーマットではないことを識別するために使用されてよい。
【００４８】
特性２３２は、コンピュータ可読プログラム１０２内の定数２１２の１つ以上の発生の位置に関連付けられてよい。追加又は代替として、特性２３２は、コンピュータ可読プログラム１０２の実行可能バージョンの中の定数２１２の位置に関連付けられてよい。例えば、特性２３２の各々は、コンピュータ可読プログラム１０２の実行中に認識可能な位置に関連付けられてよい。位置及び特性２３２の間の関連は、実行が特性２３２に関連付けられた位置に到達するとき、特性２３２に基づく入力が、コンピュータ可読プログラム１０２の実行に提供されることを可能にし得る。
【００４９】
幾つかの実施形態では、特性識別部２３０は、コンテキストデータ２２２に基づき特性２３２を識別してよい。例えば、特性識別部２３０は、コンテキストデータ２２２を他のコンテキストデータ及び／又は文字列と比較して、特性２３２を決定してよい。幾つかの実施形態では、特性識別部２３０は、機械学習技術を用いて特性２３２を決定してよい。例えば、特性識別部２３０は、コンテキストデータ２２２を、既知の特性に関連付けられた他のコンテキストデータと比較してよい。それにより、特性識別部２３０は、コンテキストデータ２２２と既知の特性との間の類似性に基づき、特性２３２を決定してよい。
【００５０】
図示のように、幾つかの実施形態では、制御フローグラフ生成部２４０は、コンピュータ可読プログラム１０２に基づき、制御フローグラフ２４２を生成するよう構成されてよい。幾つかの実施形態では、制御フローグラフ２４２は、コンピュータ可読プログラム１０２の基本ブロック及び／又はブランチの表現を含んでよい。制御フローグラフ２４２は、コンピュータ可読プログラム１０２の一実施形態の位置の、コンピュータ可読プログラム１０２の別の実施形態へのマッピングを含んでよい。例えば、制御フローグラフ２４２は、開発者コード行の、実行中に及び／又は実行トレース内で観察可能な位置へのマッピングを含んでよい。
【００５１】
図示のように、幾つかの実施形態では、位置識別部２５０は、定数２１２の位置２５２を識別するよう構成されてよい。幾つかの実施形態では、位置２５２は、実行中に及び／又は実行トレース内で認識可能な、定数２１２発生の位置、又は定数２１２の発生を含む基本ブロック、を含んでよい。幾つかの実施形態では、位置識別部２５０は、制御フローグラフ２４２内のマッピングに基づき、定数２１２の発生を含む実行可能バイナリ内の基本ブロックを識別してよい。追加又は代替として、位置識別部２５０は、定数２１２の発生を含む、コンピュータ可読プログラム１０２のコード内の位置を識別してよい。したがって、位置２５２は、定数２１２の発生のコード内の位置を含んでよい。位置識別部２５０は、制御フローグラフ２４２、及び制御フローグラフ２４２とコードとの間の対応、に基づきコード内の位置を識別してよい。
【００５２】
幾つかの実施形態では、位置識別部２５０は、コンピュータ可読プログラム１０２内の定数２１２の位置２５２を識別するときに自身が考慮する、制御フローグラフ２４２内の基本ブロックの数を制限してよい。例えば、位置識別部２５０は、制御フローグラフ２４２及び／又はコンピュータ可読プログラム１０２を分析して、入力に依存しない基本ブロックの数を決定してよい。例えば、位置識別部２５０は、痕跡（taint）分析又は同様の分析を実行して、入力に基づき変更されない基本ブロックを決定してよい。上述及び他の実施形態では、位置識別部２５０は、位置２５２を識別するとき、入力依存ではない基本ブロックを考慮しなくてよい。
【００５３】
幾つかの実施形態では、コンテキストデータ抽出部２２０は、位置識別部２５０から位置２５２を受信してよい。コンテキストデータ抽出部２２０は、位置２５２を用いて、定数２１２の発生を含むコード行を識別して、コンテキストデータ２２２を生成してよい。追加又は代替として、コンテキストデータ抽出部２２０は、位置識別部２５０により生成された位置２５２を使用せずに、コンテキストデータ２２２を識別してよい。
【００５４】
追加又は代替として、特性識別部２３０は、位置識別部２５０から位置２５２を受信してよい。特性識別部２３０は、位置２５２を用いて、特性２３２を位置２５２に関連付けてよい。特性２３２と位置２５２との間の関連は、実行中に又は実行トレース内で、実行された位置が特性２３２に関連付けられるようにすることであってよい。
【００５５】
幾つかの実施形態では、定数識別部２１０、コンテキストデータ抽出部２２０、特性識別部２３０、制御フローグラフ生成部２４０、及び位置識別部２５０、のうちの１つ以上は、図４のコンピューティングシステム４００のようなコンピューティングシステムに、コンピュータ可読プログラムの定数を識別させ、コンピュータ可読プログラムから定数のコンテキストデータを抽出させ、定数及び定数のコンテキストデータに基づきコンピュータ可読プログラムの入力の特性を識別させ、制御フローグラフを生成させ、及び制御フローグラフに関連する定数の位置を識別させる、よう構成されるコード及びルーチンを含んでよい。追加又は代替として、定数識別部２１０、コンテキストデータ抽出部２２０、特性識別部２３０、制御フローグラフ生成部２４０、及び位置識別部２５０、のうちの１つ以上は、図４のプロセッサ４０２のような、プロセッサ、（例えば、１つ以上の工程を実行する又はその実行を制御する）マイクロプロセッサ、FPGA（field−programmable  gate  array）又はASIC（application−specific  integrated  circuit）を含むハードウェアを用いて実装されてよい。幾つかの他の例では、定数識別部２１０、コンテキストデータ抽出部２２０、特性識別部２３０、制御フローグラフ生成部２４０、及び位置識別部２５０のうちの１つ以上は、ハードウェア及びソフトウェアの組み合わせを用いて実装されてよい。本開示では、定数識別部２１０、コンテキストデータ抽出部２２０、特性識別部２３０、制御フローグラフ生成部２４０、及び位置識別部２５０のうちの１つ以上により実行されるとして記載された動作は、定数識別部２１０、コンテキストデータ抽出部２２０、特性識別部２３０、制御フローグラフ生成部２４０、及び位置識別部２５０のうちの１つ以上がシステムに実行するよう指示し得る動作を含んでよい。
【００５６】
本開示の範囲から逸脱することなくシステム２００に対し変更、追加又は省略が行われてよい。例えば、幾つかの実施形態では、位置識別部２５０は、制御フローグラフ２４２無しに、コンピュータ可読プログラム１０２内の定数２１２の位置を識別してよい。上述又は他の実施形態では、制御フローグラフ生成部２４０は省力されてよい。別の例では、幾つかの実施形態において、コンテキストデータ抽出部２２０は、位置２５２に基づき、定数２１２の発生の位置を識別してよい。例えば、コンテキストデータ抽出部２２０は、位置識別部２５０により識別された位置２５２に対応する開発者コード内の１つ以上の位置から、コンテキストデータ２２２のコード行を取得してよい。別の例では、特性識別部２３０は、位置情報を含み得るコンテキストデータ２２２に基づき、実行中に又は実行トレース内で認識可能な位置に、特性２３２を関連付けてよい。さらに、動作の順序は、異なる実装に従い変化してよい。
【００５７】
図１の環境１００及び図２の環境２００の動作の一例、及び環境１００と環境２００との間の関係が、以下に提供される。本例では、コンピュータ可読プログラム１０２が取得されてよい。コンピュータ可読プログラム１０２は、分析中のバイナリプログラムであってよい。コンピュータ可読プログラム１０２は、バグ、欠陥、又は脆弱性について検査されてよい。検査は、コンピュータ可読プログラム１０２内の全部又は複数のブランチを実行することを含んでよい。追加又は代替として、検査は、コンピュータ可読プログラム１０２の実行を予想外に動作させ得る入力を見付けようとするために、多くの異なる入力により異なるブランチを実行することを含んでよい。コンピュータ可読プログラム１０２は、コンピュータ可読プログラム分析部１２０により分析されてよい。コンピュータ可読プログラム１０２の分析の結果は、定数２１２、コンテキストデータ２２２、特性２３２、及び位置２５２を含んでよく、これらのうちのいずれか又は全部は、拡張辞書１２２に含まれてよい。入力生成部１３０は、拡張辞書１２２を用いて、入力１３２を生成してよい。コンピュータ可読プログラム実行部１４０は、入力１３２を用いてコンピュータ可読プログラム１０２を実行してよい。コンピュータ可読プログラム１０２を実行している間、コンピュータ可読プログラム実行部１４０は実行トレース１４２を生成してよい。入力生成部１３０は、実行トレース１４２を用いて、追加入力１３２を生成してよい。
【００５８】
図１の環境１００の及び図２の環境２００の動作の別の例として、コンピュータ可読プログラム１０２が取得されてよい。コンピュータ可読プログラム１０２は、分析中のバイナリプログラムを含んでよい。コンピュータ可読プログラム１０２は逆アセンブルされてよい。さらに、逆アセンブルされたコンピュータ可読プログラム１０２に基づき、図２の制御フローグラフ生成部２４０は、制御フローグラフを構築してよい。
【００５９】
上述及び他の実施形態では、コンピュータ可読プログラム１０２は、コンピュータ可読プログラム１０２の逆アセンブルコードの読み出し専用データセクションをパースすることにより、定数値を識別するために分析されてよい。例えば、コンピュータ可読プログラム１０２は、コード行「#DEFINE  MAX_INT  ２５５;」を含んでよい。定数識別部２１０は、コンピュータ可読プログラム１０２の逆アセンブルコードを分析して、該コード行を、定数を含むコード行として識別してよい。定数識別部２１０は、「MAX_INT」が定数２１２であり、「MAX_INT」が定数値「２５５」を有するよう初期化されることを決定してよい。
【００６０】
制御フローグラフ２４２のどの基本ブロックが入力に依存するか、及びどの基本ブロックが入力に依存しないかを決定するために、制御フローグラフ２４２が分析されてよい。定数２１２のメモリ位置は、制御フローグラフ２４２の中の基本ブロックにマッピングされてよい。マッピングは、コンピュータ可読プログラム１０２の実行中に又は実行トレース内で、コードの中の定数２１２の位置が認識可能になるようにしてよい。例えば、コンピュータ可読プログラム１０２のコードは、条件「if(input<MAX_INT)」を含むコード行を含んでよい。該コード行に対応する制御フローグラフ２４２内の基本ブロックが識別されてよい。その結果、実行中又は実行トレース内で、該コード行が認識可能であってよい。制御フローグラフ２４２内の基本ブロック及び定数値は、辞書ファイルに格納されてよい。
【００６１】
コンピュータ可読プログラム１０２は、コンピュータ可読プログラム１０２のコードの中の定数２１２の発生を識別するために分析されてよい。コンテキストデータを識別するために、定数２１２の発生に隣接するコード行が分析されてよい。例えば、「if(input<MAX_INT)」のようなコード行が分析されて、該行が定数「MAX_INT」の発生、及び定数「MAX_INT」に関連するコンテキストデータ２２２「if(input<MAX_INT)」を含むと決定してよい。特性識別部２３０は、コンテキストデータ２２２及び／又は定数２１２を分析して、コンピュータ可読プログラム１０２への可能な入力の特性を識別してよい。例えば、特性識別部２３０は、定数「MAX_INT」及びコンテキストデータ「if(input<MAX_INT)」を分析して、入力が２５５未満でなければならないと決定してよい。特性２３２は辞書に格納されてよい。
【００６２】
入力生成部１３０は、特性２３２に基づき、コンピュータ可読プログラム１０２の位置２５２のための特定入力１３２を生成してよい。例えば、特定入力１３２は、２５５未満の数値を含んでよく、制御フローグラフ２４２内で識別された位置２５２に関連してよい。幾つかの実施形態では、コンピュータ可読プログラム１０２の実行中に、該実行がこのような特定入力１３２に関連する基本ブロックに到達する場合、実行は、実行に特定入力１３２を提供してよい。
【００６３】
例えば、コンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２を実行してよい。コンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２の実行中に到達される位置を観察してよい。コンピュータ可読プログラム実行部１４０は、実行が特定入力１３２に関連する位置２５２に到達するとき、コンピュータ可読プログラム１０２の実行に特定入力１３２を提供してよい。
【００６４】
追加又は代替として、コンピュータ可読プログラム実行部１４０は、コンピュータ可読プログラム１０２を実行し、実行トレース１４２を生成してよい。入力生成部１３０は、実行トレース１４２を取得し、実行トレース１４２及び対応する位置２５２を有する特性２３２に基づき、入力を生成してよい。例えば、入力生成部１３０は、実行を特定位置に到達させ得る特定入力を識別してよい。入力生成部１３０は、特定入力を変更して、特定位置に対応する特性２３２に基づき入力部分を含めてよい。コンピュータ可読プログラム実行部１４０は、変更された特定入力を用いてコンピュータ可読プログラム１０２を実行してよい。
【００６５】
図３Ａ〜Ｂは、本開示に記載の少なくとも一実施形態による、自動コンピュータプログラム検査動作のための入力を生成する例示的な方法３００のフローチャートを含む。幾つかの実施形態では、方法３００に関連する動作のうちの１つ以上は、図１の環境１００により、又は図２の環境２００の部分として実行されてよい。方法３００は、任意の適切なシステム、機器、又は装置により実行されてよい。例えば、図４のコンピューティングシステム４００は、方法３００に関連する動作のうちの１つ以上を実行してよい。別個のブロックとして示したが、所望の実装に依存して、方法３００のブロックのうちの１つ以上に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されてよい。
【００６６】
図３Ａを参照すると、ブロック３１０で、コンピュータ可読プログラムが取得されてよい。図１及び２のコンピュータ可読プログラム１０２は、ブロック３１０で取得されるコンピュータ可読プログラムの一例であってよい。
【００６７】
ブロック３２０で、コンピュータ可読プログラムは、コンピュータ可読プログラムのコードの中の定数を識別するために分析されてよい。定数は、コンピュータ可読プログラムのコードの中の定数値を有してよい。例えば、定数は定数値に初期化されてよい。幾つかの実施形態では、定数は、コンピュータ可読プログラムの逆アセンブルコードの読み出し専用データセクションを分析して、読み出し専用データセクションの中の定数を識別することにより識別されてよい。図２の定数２１２は、ブロック３２０で識別された定数の一例であってよい。
【００６８】
ブロック３３０で、定数に関連付けられたコンテキストデータは、定数の発生を含むコード部分から取得されてよい。定数の発生が識別されてよく、定数の発生に隣接するコード行が識別されてよい。識別されたコード行は、コンテキストデータを決定するために分析されてよい。追加又は代替として、コード行はコンテキストデータに含まれてよい。図２のコンテキストデータ２２２は、ブロック３３０で取得されたコンテキストデータの一例であってよい。
【００６９】
ブロック３４０で、定数の発生のコンピュータ可読プログラム内の位置が決定されてよい。図２の定数２５２は、ブロック３４０で取得された位置の一例であってよい。
【００７０】
ブロック３４２、３４４、及び３４６は、定数の発生のコンピュータ可読プログラム内の位置を決定するために実行され得る動作の一例を含んでよい。
【００７１】
ブロック３４２で、コンピュータ可読プログラムの制御フローグラフが取得されてよい。制御フローグラフは、任意の適切な手段を用いて生成されてよい。図２の制御フローグラフ２４２は、ブロック３４２で取得された制御フローグラフの一例であってよい。
【００７２】
ブロック３４４で、制御フローグラフが分析されて、コンピュータ可読プログラムへの入力に依存する制御フローグラフの基本ブロックのサブセットを決定してよい。例えば、痕跡分析が、コンピュータ可読プログラム及び／又は制御フローグラフに実行されて、基本ブロックのサブセットを決定してよい。
【００７３】
ブロック３４６で、定数の発生を含む制御フローグラフの基本ブロックが取得されてよい。基本ブロックは、ブロック３４４で決定された基本ブロックのサブセットから取得されてよい。
【００７４】
図３Ｂを参照して、ブロック３５０で、コンテキストデータが定数に関連して分析されて、位置におけるコンピュータ可読プログラムへの可能な入力の特性を識別してよい。図２の定数２３２は、ブロック３５０で識別された特性の一例であってよい。
【００７５】
ブロック３６０で、コンピュータ可読プログラムの入力が、ブロック３５０で識別した定数値及び特性に基づき生成されてよい。特性は、入力が定数値に基づく方法に関連してよい。例えば、特性は、定数値が入力内の文字数を定めることを示してよい。生成された入力は、文字数を含んでよい。
【００７６】
ブロック３７０で、コンピュータ可読プログラムは、別の入力を用いて実行されてよい。他の入力は、任意の適切なソースから取得されてよい。例えば、他の入力は、ランダムに生成され、又は例えばコンピュータ可読プログラムの文書からの既知の有効な入力に基づいてよい。
【００７７】
ブロック３８０で、ブロック３６０で生成された入力は、コンピュータ可読プログラムの実行がブロック３４０で識別された位置に到達するとき、コンピュータ可読プログラムの実行中にコンピュータ可読プログラムに提供されてよい。例えば、ブロック３６０で生成された入力は、ブロック３４０で識別された位置に関連してよい。ブロック３７０で開始した実行がブロック３６０で生成された入力に関連する位置に到達すると、入力が進行中の実行に提供されてよい。
【００７８】
幾つかの実施形態では、ブロック３７０はブロック３６０の前に生じてよい。上述及び他の実施形態では、ブロック３６０で生成された入力は、ブロック３７０の実行により到達される位置に基づき生成されてよい。例えば、実行がブロック３４０で識別された位置に到達することに応答して、入力がブロック３６０で生成されてよい。ブロック３６０で生成された入力は、コンピュータ可読プログラムの進行中の実行、例えばブロック３７０の実行に、提供されてよい。追加又は代替として、ブロック３６０で生成された入力は、コンピュータ可読プログラムの新たな実行中に使用されてよい。
【００７９】
幾つかの実施形態では、ブロック３６０で生成された入力は、ブロック３７０で開始した実行と独立に開始するコンピュータ可読プログラムの実行に、提供されてよい。例えば、ブロック３７０で開始したコンピュータ可読プログラムの実行の実行トレースが、取得されてよい。ブロック３７０で開始した実行は、終了してよく又は終了しなくてよい。ブロック３６０で生成された入力は、実行トレースに基づいてよい。上述又は他の実施形態では、ブロック３６０で生成された入力は、ブロック３５０で識別された定数値及び特性に基づく新しい入力部分を含んでよい。入力は、別の入力、例えば実行トレースに含まれるようなブロック３７０の他の入力に基づく部分も含んでよい。
【００８０】
幾つかの実施形態では、位置に到達することは、位置に到達し、閾時間期間の間、該位置を出ないことを含んでよい。例えば、コンピュータ可読プログラムの実行は、位置において有効な入力を期待してよい。ブロック３７０で開始したコンピュータ可読プログラムの実行は、位置に到達してよく、入力を提供しようとしてよい。入力が受け付けられない場合、コンピュータ可読プログラムの実行は基本ブロックを出なくてよい。コンピュータ可読プログラムの実行が、閾時間期間の間、基本ブロックを出ない場合、実行は、別の入力、例えばブロック３６０で生成された入力を提供されてよい。
【００８１】
本開示の範囲から逸脱することなく方法３００に対し変更、追加又は省略が行われてよい。例えば、幾つかの実施形態では、ブロック３４２、３４４、及び３４６は省略されてよい。さらに、動作の順序は、異なる実装に従い変化してよい。
【００８２】
図４は、本開示の特定の少なくとも一実施形態にしたがってよい例示的なコンピューティングシステム４００のブロック図である。図４に示すように、コンピューティングシステム４００は、プロセッサ４０２と、メモリ４０４と、データ記憶装置４０６と、通信ユニット４０８と、を有してよい。
【００８３】
概して、プロセッサ４０２は、任意の適切な特定用途向け又は汎用コンピュータ、コンピューティングエンティティ、又は種々のコンピュータハードウェア若しくはソフトウェアモジュールを有してよく、任意の適切なコンピュータ可読媒体に格納された命令を実行するよう構成され得る処理装置を用いて実施されてよい。例えば、プロセッサ４０２は、マイクロプロセッサ、マイクロコントローラ、デジタシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（FPGA）又はプログラム命令を解釈し及び／若しくは実行し並びに／又はデータを処理するよう構成された任意の他のデジタル若しくはアナログ回路を有してよい。図４には単一のプロセッサを示したが、プロセッサ４０２は、本願明細書に記載の任意の数の演算を個々に又は共同で実行するよう構成される任意の数のネットワーク又は物理的位置に渡り分散される任意の数のプロセッサを有してよいことが理解される。幾つかの実施形態では、プロセッサ４０２は、プログラム命令を解釈し及び／又は実行し、及び／又はメモリ４０４、データ記憶装置４０６又はメモリ４０４及びデータ記憶装置４０６に格納されたデータを処理してよい。幾つかの実施形態では、プロセッサ４０２は、データ記憶４０６からプログラム命令をフェッチし、該プログラム命令をメモリ４０４にロードしてよい。プログラム命令がメモリ４０４にロードされた後、プロセッサ４０２は、それぞれ図１の環境１００、図２の環境２００及び／又は図３の方法３００に関して記載した１つ以上の動作を実行するための命令のようなプログラム命令を実行してよい。
【００８４】
メモリ４０４及びデータ記憶装置４０６は、コンピュータ実行可能命令又はデータ構造を伝える又は格納しているコンピュータ可読記憶媒体又は１又は複数のコンピュータ可読記憶媒体を含み得る。このようなコンピュータ可読媒体は、プロセッサ４０２のような汎用又は特定目的コンピュータによりアクセスできる任意の利用可能な媒体であり得る。例として且つ限定ではなく、このようなコンピュータ可読媒体は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read−Only  Memory）、ＥＥＰＲＯＭ（Electrically  Erasable  Programmable  Read−Only  Memory）、ＣＤ−ＲＯＭ（Compact  Disc  Read−Only  Memory）又は他の光ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶装置、フラッシュメモリ装置（例えば、固体メモリ素子）を含む非一時的コンピュータ可読記憶媒体、又はコンピュータにより実行可能な命令若しくはデータ構造の形式でプログラムコード手段を伝える若しくは格納するために用いられ汎用若しくは特定目的コンピュータによりアクセス可能な他の記憶媒体を有し得る。上述の組合せも、コンピュータ可読記憶媒体の範囲に包含され得る。コンピュータ実行可能命令は、例えば、プロセッサ４０２に特定の工程又は工程のグループを実行させるよう構成される命令及びデータを含み得る。上述及び他の実施形態では、本願明細書で説明されるような用語「非一時的」は、Federal  Circuit  decision  of  In  re  Nuijten,  ５００  F.３d  １３４６  (Fed.  Cir.  ２００７)における特許可能な対象の範囲から外れると考えられる種類の一時的媒体のみを除隊するものと考えられるべきである。上述の組合せも、コンピュータ可読媒体の範囲に包含され得る。
【００８５】
通信ユニット４０８は、図１のコンピュータ可読プログラム１０２及び入力１３２のようなコンピュータ可読プログラム及び／又は１つ以上の入力を受信し、コンピュータ可読プログラム又は入力をデータ記憶装置４０６に提供するよう構成されてよい。通信ユニット４０８は、レコード、データセット、及び／又は仮定に基づくデータセットを受信して、該レコード、データセット、及び／又は仮定に基づくデータセットをデータ記憶装置４０６に提供するよう構成されてよい。通信ユニット４０８は、コンピューティングシステム４００とネットワークとの間の通信を可能にし又は助けるよう構成される任意の装置、システム、コンポーネント、又はコンポーネントの集合を有してよい。例えば、通信ユニット４０８は、限定ではなく、モデム、ネットワークカード（無線又は有線）、赤外線通信装置、光通信装置、（アンテナのような）無線通信装置、及び／又は（Ｂｌｕｅｔｏｏｔｈ（登録商標）装置、８０２．６装置（例えば、ＭＡＮ（Metropolitan  Area  Network））、ＷｉＦｉ装置、ＷｉＭａｘ装置、セルラ通信設備、等のような）チップセット、及び／又は同様のものを含み得る。通信ユニット４０８は、少数の例を挙げると、セルラネットワーク、ＷｉＦｉネットワーク、ＭＡＮ、光ネットワーク、等のようなもの、及び／又はリモート装置を含む本開示に記載される任意の他の装置と、データを交換させることができる。
【００８６】
本開示の範囲から逸脱することなくコンピューティングシステム４００に対し変更、追加又は省略が行われてよい。例えば、データ記憶装置４０６は、複数の場所に置かれ、ネットワークを通じてプロセッサ４０２によりアクセスされてよい。
【００８７】
本願明細書で用いられるように、用語「モジュール」又は「コンポーネント」は、モジュール若しくはコンポーネントの動作を実行するよう構成される特定ハードウェア実装、及び／又はコンピューティングシステムの汎用ハードウェア（例えばコンピュータ可読媒体、処理装置、等）に格納され及び／又はそれらにより実行され得るソフトウェアオブジェクト若しくはソフトウェアルーチンを表してよい。幾つかの実施形態では、本願明細書に記載されたのと異なるコンポーネント、モジュール、エンジン及びサービスは、（例えば、別個のスレッドとして）コンピューティングシステムで実行されるオブジェクト又は処理として実施されてよい。
【００８８】
本願明細書に記載のシステム及び方法の幾つかは概して（汎用ハードウェアに格納される及び／又はそれにより実行される）ソフトウェアで実装されるように記載されたが、専用ハードウェアの実装又はソフトウェアと専用ハードウェアの組み合わせの実装も可能であり考えられる。
【００８９】
本開示で及び特に添付の特許請求の範囲（例えば、添付の特許請求の範囲の本体）で使用される用語は、概して、広義の（open）用語と考えられる（例えば、用語「含む（including）」は「含むが、限定されない」と解釈されるべきであり、用語「有する（having）」は「少なくとも有する」と解釈されるべきであり、用語「含む（includes）」は「含むが、限定されない」と解釈されるべきである）。
【００９０】
さらに、特定数の導入された請求項の引用が意図される場合、このような意図は、請求項の中に明示的に示され、このような引用が存在しない場合はこのような意図が存在しない。例えば、理解の助けとして、以下の添付の特許請求の範囲は、請求項の引用を導入するために、「少なくとも１つの」及び「１又は複数の」をいう前置語句の使用を含み得る。しかしながら、このような語句の使用は、同じ請求項が前置語句「１又は複数」又は「少なくとも１つの」及び「ａ又はａｎ」のような不定冠詞を含むときでも、不定冠詞「ａ、ａｎ」による請求項引用の導入がこのような導入された請求項引用を含む任意の特定の請求項をこのような引用を１つだけ含む実施形態に限定することを示すと考えられてはならない（例えば、「ａ」及び／又は「ａｎ」は「少なくとも１つの」又は「１又は複数の」を意味すると解釈されるべきである）。同様のことは、請求項引用を導入するために使用される定冠詞の使用についても該当する。
【００９１】
さらに、特定数の導入された請求項引用が明示的に引用される場合、当業者は、このような引用が少なくとも引用された番号を意味することと解釈されるべきであることを認識するだろう（例えば、「２つの引用」はそのままで、他の変更が無ければ、少なくとも２つの引用、又は２以上の引用を意味する）。さらに、「Ａ、Ｂ、Ｃ、等のうちの少なくとも１つ」又は「Ａ、Ｂ、Ｃ、等のうちの１又は複数」に類似する慣例が用いられる例では、通常、このような構成は、Ａのみ、Ｂのみ、Ｃのみ、Ａ及びＢを一緒に、Ａ及びＣを一緒に、Ｂ及びＣを一緒に、又はＡ、Ｂ、Ｃを一緒に、等を含むと意図される。
【００９２】
さらに、２以上の代替用語を表す任意の離接語又は語句は、説明、請求項、又は図面の中であるかに係わらず、用語のうちの１つ、用語のうちのいずれか、又は両方の用語を含む可能性を包含すると理解されるべきである。例えば、語句「Ａ又はＢ」は、「Ａ」又は「Ｂ」又は「Ａ及びＢ」の可能性を含むと理解されるべきである。さらに、幾つかの場所における用語「及び／又は」の使用は、用語「又は」が用語のうちのいずれかのみを含むと理解されるべきであることを意味せず、反対に両方の用語の可能性を含む。
【００９３】
さらに、用語「第１」、「第２」、「第３」等の使用は、本願明細書において必ずしも要素の特定の順序又は数を暗示するために使用されない。通常、用語「第１」、「第２」、「第３」等は、一般的識別子として、異なる要素の間を区別するために使用される。用語「第１」、「第２」、「第３」等が特定の順序を暗示することを示さない場合も、これらの用語が特定の順序を暗示すると解釈されるべきではない。さらに、用語「第１」、「第２」、「第３」等が要素の特定の数を暗示することを示さない場合も、これらの用語が要素の特定の数を暗示すると解釈されるべきではない。例えば、第１ウィジェットは第１側面を有するとして記載されてよく、第２ウィジェットは第２側面を有するとして記載されてよい。第２ウィジェットに関する用語「第２側面」の使用は、第２ウィジェットのこのような側面を、第１ウィジェットの「第１側面」から区別するためであってよく、第２ウィジェットが２つの側面を有することを暗示しない。
【００９４】
本願明細書に記載された全ての例及び条件文は、教育上の目的で、読者が本発明の原理及び発明者により考案された概念を理解するのを助け、技術を促進させるためであり、これらの特に記載された例及び条件に限定されないものと考えられるべきである。本開示の実施形態が詳細に記載されたが、種々の変更、置換及び修正が本開示の精神及び範囲から逸脱することなく行われうることが理解されるべきである。
【００９５】
以上の実施形態に加えて、更に以下の付記を開示する。
（付記１）  方法であって、
コンピュータ可読プログラムを取得するステップと、
前記コンピュータ可読プログラムを分析して、前記コンピュータ可読プログラムのコードの中の定数を識別するステップであって、前記定数は前記コンピュータ可読プログラムの前記コードの中の定数値を有する、ステップと、
前記定数の発生を含む前記コードの部分から、前記定数に関連付けられたコンテキストデータを取得するステップと、
前記定数の前記発生の前記コンピュータ可読プログラムの中の位置を決定するステップと、
前記定数値に関連する前記コンテキストデータを分析して、前記位置における前記コンピュータ可読プログラムへの可能な入力の特性を識別するステップと、
前記定数値及び前記識別した特性に基づき、前記コンピュータ可読プログラムのための入力を生成するステップと、
前記コンピュータ可読プログラムの実行が前記位置に到達するとき、前記コンピュータ可読プログラムの実行中に前記コンピュータ可読プログラムに前記生成した入力を提供するステップと、
を含む方法。
（付記２）  前記コンピュータ可読プログラムを分析するステップは、前記コンピュータ可読プログラムの逆アセンブルコードの読み出し専用データセクションを分析し、前記読み出し専用データセクションの中の前記定数を識別するステップを含む、付記１に記載の方法。
（付記３）  前記位置を決定するステップは、
前記コンピュータ可読プログラムの制御フローグラフを取得するステップと、
前記定数の前記発生を含む、前記制御フローグラフの基本ブロックを取得するステップと、
を含み、前記位置に到達する前記コンピュータ可読プログラムの前記実行は、前記基本ブロックを実行する前記コンピュータ可読プログラムの前記実行を含む、付記１に記載の方法。
（付記４）  前記制御フローグラフを分析して、前記コンピュータ可読プログラムへの入力に依存する制御フローグラフの基本ブロックのサブセットを決定するステップ、を更に含み、
前記基本ブロックを取得する前記ステップは、前記基本ブロックのサブセットの中から前記基本ブロックを取得するステップを含む、付記３に記載の方法。
（付記５）  前記コンテキストデータを分析するステップは、機械学習技術を用いて前記特性を識別するステップを含み、前記識別された特性は、入力長、数値範囲、及び入力フォーマットのうちの１つ以上を含み、前記生成された入力は、前記入力長に基づく長さ、前記数値範囲に基づく数値、及び入力フォーマットに基づきフォーマットされた生成された入力の一部、のうちの１つ以上を含む、付記１に記載の方法。
（付記６）  他の入力を用いて前記コンピュータ可読プログラムを実行するステップ、を更に含み、
前記入力を生成するステップは、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行が前記位置に到達することに応答して生じる、付記１に記載の方法。
（付記７）  前記生成された入力を前記コンピュータ可読プログラムの進行中の実行に提供することにより、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行を継続するステップ、を更に含む付記６に記載の方法。
（付記８）  前記入力を生成するステップは、前記他の入力に更に基づき、
前記方法は、前記生成された入力を用いて前記コンピュータ可読プログラムの実行を開始するステップ、を更に含む付記６に記載の方法。
（付記９）  前記生成された入力は、前記他の入力と、前記定数値及び前記識別された特性に基づく新しい入力部分と、を含む、付記８に記載の方法。
（付記１０）  １つ以上の非一時的コンピュータ可読媒体であって、１つ以上のプロセッサにより実行されると、動作を実行する命令を含み、前記動作は、
コンピュータ可読プログラムを取得するステップと、
前記コンピュータ可読プログラムを分析して、前記コンピュータ可読プログラムのコードの中の定数を識別するステップであって、前記定数は前記コンピュータ可読プログラムの前記コードの中の定数値を有する、ステップと、
前記定数の発生を含む前記コードの部分から、前記定数に関連付けられたコンテキストデータを取得するステップと、
前記定数の前記発生の前記コンピュータ可読プログラムの中の位置を決定するステップと、
前記定数値に関連する前記コンテキストデータを分析して、前記位置における前記コンピュータ可読プログラムへの可能な入力の特性を識別するステップと、
前記定数値及び前記識別した特性に基づき、前記コンピュータ可読プログラムのための入力を生成するステップと、
前記コンピュータ可読プログラムの実行が前記位置に到達するとき、前記コンピュータ可読プログラムの実行中に前記コンピュータ可読プログラムに前記生成した入力を提供するステップと、
を含む、非一時的コンピュータ可読媒体。
（付記１１）  １つ以上のプロセッサと１つ以上のコンピュータ可読媒体を含むシステムであって、前記システムは動作を実行し、前記動作は、
コンピュータ可読プログラムを取得するステップと、
前記コンピュータ可読プログラムを分析して、前記コンピュータ可読プログラムのコードの中の定数を識別するステップであって、前記定数は前記コンピュータ可読プログラムの前記コードの中の定数値を有する、ステップと、
前記定数の発生を含む前記コードの部分から、前記定数に関連付けられたコンテキストデータを取得するステップと、
前記定数の前記発生の前記コンピュータ可読プログラムの中の位置を決定するステップと、
前記定数値に関連する前記コンテキストデータを分析して、前記位置における前記コンピュータ可読プログラムへの可能な入力の特性を識別するステップと、
前記定数値及び前記識別した特性に基づき、前記コンピュータ可読プログラムのための入力を生成するステップと、
前記コンピュータ可読プログラムの実行が前記位置に到達するとき、前記コンピュータ可読プログラムの実行中に前記コンピュータ可読プログラムに前記生成した入力を提供するステップと、
を含む、システム。
（付記１２）  前記コンピュータ可読プログラムを分析するステップは、前記コンピュータ可読プログラムの逆アセンブルコードの読み出し専用データセクションを分析し、前記読み出し専用データセクションの中の前記定数を識別するステップを含む、付記１１に記載のシステム。
（付記１３）  前記位置を決定するステップは、
前記コンピュータ可読プログラムの制御フローグラフを取得するステップと、
前記定数の前記発生を含む、前記制御フローグラフの基本ブロックを取得するステップと、
を含み、前記位置に到達する前記コンピュータ可読プログラムの前記実行は、前記基本ブロックを実行する前記コンピュータ可読プログラムの前記実行を含む、付記１１に記載のシステム。
（付記１４）  前記動作は、前記制御フローグラフを分析して、前記コンピュータ可読プログラムへの入力に依存する制御フローグラフの基本ブロックのサブセットを決定するステップ、を更に含み、
前記基本ブロックを取得する前記ステップは、前記基本ブロックのサブセットの中から前記基本ブロックを取得するステップを含む、付記１３に記載のシステム。
（付記１５）  前記コンテキストデータを分析するステップは、機械学習技術を用いて前記特性を識別するステップを含み、前記識別された特性は、入力長、数値範囲、及び入力フォーマットのうちの１つ以上を含み、前記生成された入力は、前記入力長に基づく長さ、前記数値範囲に基づく数値、及び入力フォーマットに基づきフォーマットされた生成された入力の一部、のうちの１つ以上を含む、付記１１に記載のシステム。
（付記１６）  前記動作は、他の入力を用いて前記コンピュータ可読プログラムを実行するステップ、を更に含み、
前記入力を生成するステップは、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行が前記位置に到達することに応答して生じる、付記１１に記載のシステム。
（付記１７）  前記動作は、前記生成された入力を前記コンピュータ可読プログラムの進行中の実行に提供することにより、前記他の入力を用いる前記コンピュータ可読プログラムの前記実行を継続するステップ、を更に含む付記１６に記載のシステム。
（付記１８）  前記入力を生成するステップは、前記他の入力に更に基づき、
前記動作は、前記生成された入力を用いて前記コンピュータ可読プログラムの実行を開始するステップ、を更に含む、付記１６に記載のシステム。
（付記１９）  前記生成された入力は、前記他の入力と、前記定数値及び前記識別された特性に基づく新しい入力部分と、を含む、付記１８に記載のシステム。
（付記２０）  前記位置に到達する前記コンピュータ可読プログラムの前記実行は、前記実行が前記位置に到達し且つ閾時間期間の間に前記位置を終了しないことを含む、付記１１に記載のシステム。
【符号の説明】
【００９６】
１００  環境
１０２  コンピュータ可読プログラム
１２０  コンピュータ可読プログラム分析部
１２２  拡張辞書
１３０  入力生成部
１３２  入力
１４０  コンピュータ可読プログラム実行部
１４２  実行トレース
【図１】
2020144842.tif 000003
【図２】
2020144842.tif 000004
【図３Ａ】
2020144842.tif 000005
【図３Ｂ】
2020144842.tif 000006
【図４】
2020144842.tif 000007