JP5786513B2 - ソフトウェアモジュールを検査するためのシステム、方法及び記憶媒体 - Google Patents

ソフトウェアモジュールを検査するためのシステム、方法及び記憶媒体 Download PDF

Info

Publication number
JP5786513B2
JP5786513B2 JP2011156021A JP2011156021A JP5786513B2 JP 5786513 B2 JP5786513 B2 JP 5786513B2 JP 2011156021 A JP2011156021 A JP 2011156021A JP 2011156021 A JP2011156021 A JP 2011156021A JP 5786513 B2 JP5786513 B2 JP 5786513B2
Authority
JP
Japan
Prior art keywords
string
variables
software module
constraints
constraint
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011156021A
Other languages
English (en)
Other versions
JP2012022688A (ja
Inventor
ゴーシュ・インドラディープ
アール シャノン・ダリル
アール シャノン・ダリル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2012022688A publication Critical patent/JP2012022688A/ja
Application granted granted Critical
Publication of JP5786513B2 publication Critical patent/JP5786513B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、ソフトウェアモジュールの検査及び認証に関する。
ソフトウェアアプリケーションは、(たとえばクラス、機能、手順、サブルーチン又はコードブロックといった)多数のモジュールを含む場合があり、それぞれのモジュールは、個別に検査又は認証される場合がある。ソフトウェアモジュールは、手動的に又は自動的に検査又は認証される場合がある。前者の場合、(たとえばソフトウェアの検査エンジニアといった)人物は、そのモジュールの設計仕様に基づいてソフトウェアモジュールについてテストケースを手動で設計し、テストケース下でそのモジュールを実行し、テストケースに一致しないモジュールの挙動又は出力をチェックする場合がある。後者の場合、コンピュータソフトウェア又はハードウェアとして実現されるソフトウェア検査ツールは、検査されるソフトウェアモジュールについてテストケースを自動的に生成し、テストケースをシミュレートする一方で検査されるモジュールを実行し、テストケースに一致しないモジュールの挙動又は出力をチェックする。
本発明の開示は、添付図面に例示される幾つかの実施の形態を参照して詳細に記載される。以下の記載では、本発明の開示の全体的な理解を提供するため、多数の特定の詳細が述べられる。しかし、本発明の開示は、これらの特定の詳細の一部又は全部なしに実施される場合があることは、当業者にとって明らかである。他の例では、公知のプロセスのステップ及び/又は構造は、本発明を不必要に不明瞭にしないように詳細に説明されていない。さらに、本発明の開示は特定の実施の形態と合わせて記載されるが、本発明の記載は、記載される実施の形態の本発明を制限することが意図されないことを理解されたい。それとは反対に、本発明の記載は、特許請求の範囲により定義される本発明の開示の精神及び範囲に含まれる場合があるような代替、変更及び等価な概念をカバーすることが意図される。
ソフトウェアアプリケーションは、多数のソフトウェアモジュールに編成されることがあり、それぞれのソフトウェアモジュールは、特定の機能を実行するコードを含む場合がある。典型的なシナリオでは、ソフトウェアモジュールは、任意の数の入力変数又は出力変数を有する場合がある。ソフトウェアモジュールが起動されたとき、実際の入力値は、ソフトウェアモジュールの入力変数に割り当てられた値として、(たとえばソフトウェアモジュールを起動するコードにより)ソフトウェアモジュールに通過される場合がある。ソフトウェアモジュールのコードは、実際の入力値に関連して実行される場合がある。最終的に、ソフトウェアモジュールの出力変数の実際の出力値は、ソフトウェアモジュールにより決定されリターンされる場合があり、その時点で、ソフトウェアモジュールは、その実行を完了する。さらに、ソフトウェアモジュールのコードにより決定される実際の出力値は、通常、その起動に応じてソフトウェアモジュールに通過された実際の入力値に依存する。さらに、ソフトウェアモジュールは、中間変数とも呼ばれる任意の数のローカル変数を有し、その値は、直接的又は間接的に、入力変数の値に依存する場合がある。ローカル変数は、ローカルスコープを有する。ローカル変数は、ローカル変数が宣言されたソフトウェアモジュールのコンテキストにおいて存在し、ローカル変数が宣言されたソフトウェアモジュールのコンテキストのみからアクセス可能である。対照的に、ソフトウェアモジュールが属するソフトウェアアプリケーションは、任意の数のグローバル変数を有する場合がある。グローバル変数は、ソフトウェアアプリケーション自身においてグローバルスコープを有し、ソフトウェアアプリケーションに属する全てのソフトウェアモジュールにアクセス可能である。ソフトウェアアプリケーションが起動されたとき、ソフトウェアアプリケーションは、グローバル変数の値をアクセス又は変更する場合があり、値の変更は、ソフトウェアモジュールがその実行を完了した後でさえ持続する。
特定の実施の形態では、第一の変数の値が第二の変数の値に基づいて決定されたとき(すなわち第一の変数の値は第二の変数の値に依存する)、第一の変数は、第二の変数に依存すると考えられる。ある変数は、入力であろうと出力であろうと、ローカルであろうとグローバルであろうと、たとえば限定されることなしに、文字、文字列、整数、浮動小数、倍精度浮動小数点数、ブール、ポインタ、アレイ及びエミュレーションのような特定のデータタイプを有する。ある変数のデータタイプは、どのようなタイプのデータ(たとえば実際の値)が変数に割り当てられる場合があるかを示す。たとえば、整数値のみがそのタイプが整数である変数に割り当てられるべきであり、真偽値のみが、そのタイプがブールである変数に割り当てられるべきである。異なるプログラム言語は、特定のデータタイプに適用される場合がある異なる動作と同様に、特定の言語で書かれたソフトウェアモジュール又はアプリケーションが有する場合がある異なるデータタイプを定義する場合がある。特定の実施の形態では、プログラミング言語は、データタイプは、文字列と数値といった2つのカテゴリに分割される場合がある。数値データのタイプは、たとえば限定されるものではないが、整数、浮動小数点数、整数、倍精度浮動小数点数、及びブールのような文字列でないデータタイプを含む場合がある。
文字列は、異なるプログラミング言語がタイプ「文字列“string”」を異なって定義する場合があるが、多くのプログラミング言語において利用可能なデータタイプである。たとえば、Javaプログラミング言語は、文字の不変のアレイとして文字列を表すJavaクラス“java.lang.String”としてタイプ「文字列“string”」を定義するものである。この場合、ひとたび文字列変数が宣言されて形成されると、その値は、その後に変化することができない。ある文字列の変数の値への変更は、宣言及び構築されている新たな文字列の変数となる。また、“java.lang.String”は、ある文字列の変数に適用される場合があるメソッド“method”と呼ばれる多くの演算を提供する。他方で、Cプログラミング言語により、ある文字列は、ヌル文字で終端される1次元の文字配列として定義される。あるC文字列は、その値がインプレースで変更される場合があるように、変更可能である。実際に、配列におけるそれぞれの文字は、個々に変更される場合がある。
それぞれのプログラム言語は、利用可能な特定の数値データのタイプが言語から言語に変化する場合があるが、幾つかの数値データのタイプを一般的に定義する。整数、浮動小数点数、倍精度浮動小数点数及びブールは、大部分のプログラミング言語により一般的に定義される数値データのタイプである。さらに、異なるプログラミング言語は、特定の数値データのタイプを異なって定義する場合がある。たとえば、Javaプログラミング言語は、プリミティブなデータのタイプ“int”として又はJavaクラス“java.lang.Integer”として特定の数値データのタイプを異なって定義する場合がある。クラス“java.lang.Integer”は、整数の変数に適用される動作(すなわちメソッド)を提供する。他方で、Cは、異なるデータのサイズを有する整数の変数を宣言するために使用される場合がある“short”、“int”及び“long”といった3つのプリミティブなデータのタイプを提供する。
あるソフトウェアモジュールの入力、出力又はローカル変数に課される任意の数の制約が存在する。特定の実施の形態では、変数に課される制約は、たとえば限定されるものではないが、どのような値がその変数に割り当てられるか、変数に割り当てられるデータ値のサイズ、又は変数に課される他の適用可能な条件又は制限を指定する場合がある。係る変数の制約は、ソフトウェアモジュールの設計仕様又は形式的な要件、ソフトウェアモジュールを実現するために使用されるプログラミング言語の仕様、ソフトウェアモジュールのプログラムロジックに含まれるコード、ソフトウェアモジュールが実行されるランタイム環境、又は他の適用可能な要素から特定される場合がある。たとえば、制約は、整数の変数“a”のみが“0xFFFFFFFF”以下である整数値に割り当てられることを指定する整数値“a”に課される。これは、ソフトウェアモジュールは、4バイトを使用したそれぞれの整数を表すランタイム環境で実行されるからである。整数の変数“a”に課される制約は、式“a<0xFFFFFFFF”として表される場合がある。別の例として、制約は、文字列の変数“s”の長さ(すなわち文字数)が8でなければならないことを指定する文字列変数“s”に課される場合がある。この場合、文字列の変数“s”に課される制約は、例としてJavaプログラミング言語のシンタックスを使用して、別の式“s.length() = 8”として表される場合がある。あるソフトウェアモジュールの1つの変数に課される制約は、直接的に又は間接的に、ソフトウェアモジュールの別の変数の値に課される制約に依存する場合がある。たとえば、(1)整数の変数“b”が-10以上である整数の値にのみ割り当てられる、及び(2)整数の変数“b”が変数“a”の値未満である整数の値にのみ割り当てられる、ことを指定する2つの制約が、整数の変数“b”に一緒に課される場合がある。この場合、一緒に整数の変数“b”に課される2つの制約は、“(b>= -10) && (b<a)”として表される場合があり、それぞれの制約は、この別の式として表される。
特定の実施の形態では、あるソフトウェアモジュールは、任意の数の数値又は文字列の変数を有する場合があり、これらの変数は、ソフトウェアモジュールの入力変数又はローカル変数(すなわち中間変数)である場合がある。特定の実施の形態では、ある制約のセットは、ソフトウェアモジュールの特定の数値又は文字列の変数に課される場合がある。なお、ある制約のセットが、あるソフトウェアモジュールのありとあらゆる変数に課される必要はない。特定の実施の形態では、数値の変数が与えられた場合、任意の数の数値の制約又は文字列の制約を有する場合がある。たとえば、整数の変数“b”は、その値が-10以上でなければならないことを指定する数値の制約(たとえば制約“b”>= -10)を有する場合がある。整数の変数“b”は、その値のテキスト(すなわち文字列)の表現は文字列“182”に等しくなければならないことを指定する文字列の制約(たとえば制約“b.toString() = “182””)を有する場合もある。この場合、整数の変数“b”に課される制約のセットは、数値の制約と文字列の制約の両者、従って制約が混成されたセットである(たとえば“(b >= -10) && (b.toString() = “182”)”)を含む。同様に、特定の実施の形態では、文字列の変数が与えられると、任意の数の文字列の制約又は数値の制約を有する場合がある。たとえば、文字列の変数“s”がその値がサブの文字列“ca”で開始しなければならないことを指定する文字列の制約(たとえば制約“s.substring(0,1) = “ca””又は“s.startsWith(“ca”)”)を有する場合がある。文字列の変数“s”は、その値が8の文字の長さを有しなければならないことを指定する数値の制約(たとえば制約“s.length() = 8”)を有する場合もある。この場合、文字列の変数“s”に課される制約のセットは、数値の制約と文字列の制約の両者、従って制約が混成されたセットである(たとえば“(s.substring(0,1) = “ca”) && (s.length() = 8)”)を含む。
特定の実施の形態では、あるソフトウェアモジュールに課される制約は、入力、出力及びローカル変数を含めて、その変数に課される全ての制約を組み合わせて含む場合がある。たとえば、整数の変数“b”と文字列の変数“s”の両者があるソフトウェアモジュール“m”に属するとする。この場合、ソフトウェアモジュール“m”自身に課される制約のセットは、変数“b”及び“s”のそれぞれに課される2つの制約のセットの論理結合を含み、これは、“(b >= -10) && (b.toString() = “182”) && (s.substring(0,1) = “ca”) && (s.length() = 8)”に等しい。これも、数値の制約と文字列の制約の両者を含むために、制約が混成されたセットである。
ソフトウェアモジュール又はその変数に配置される制約を決定及び解決する例示的な方法を示すフローチャートである。 ソフトウェアモジュール又はその変数に配置される制約を決定及び解決する例示的なシステムを示すブロック図である。 異なる文字列を表すために使用される幾つかの例示的な有限の状態を示す図である。 文字列及びそのサブ文字列を表すために使用される例示的な有限の状態マシンを示す図である。 文字列の領域に配置される文字列の制約と数値の領域に配置される数値の制約とをもつ例示的な制約のセットを示す図である。 複数レベルの入れ子構造にされた条件付き分岐を有する例示的なソフトウェアモジュールの実行経路を示すフローチャートである。 ソフトウェアモジュールを検査する例示的な方法を示すフローチャートである。 例示的なソフトウェアモジュールでの記号的実行を実行するステップを表す例示的な実行を示すフローチャートである。 異なるアプリケーションの結果を生成するために実行及び配置される記号的実行の間に、例示的なソフトウェアモジュールについて取得される例示的な制約のセットを示す図である。 異なるアプリケーションの結果を生成するために実行及び配置される記号的実行の間に、例示的なソフトウェアモジュールについて取得される例示的な制約のセットを示す図である。 異なるアプリケーションの結果を生成するために実行及び配置される記号的実行の間に、例示的なソフトウェアモジュールについて取得される例示的な制約のセットを示す図である。 その入力及び出力に配置される要件に関連してソフトウェアモジュールを認証する例示的な方法を示すフローチャートである。 インジェクション攻撃を検出するために設計されたセキュリティソフトウェアモジュールを認証する例示的な方法を示すフローチャートである。 例示的なネットワーク環境を示すブロック図である。 例示的なコンピュータシステムを例示する図である。
特定の実施の形態では、任意の数の数値の変数又は文字列の変数を有するソフトウェアモジュールに課される制約が混成されたセットを決定及び解決するために有益である。また、あるソフトウェアモジュールの特定の変数に課される制約が混成されたセットを決定及び解決するために有益である。特定の実施の形態では、制約のセットを解決することは、そのセットに含まれる全ての制約を満足する1以上の解を発見するのを試みることを意味する。図1は、あるソフトウェアモジュール又はあるソフトウェアモジュールのある変数に課される制約を決定及び解決する例示的な方法を示す。図2は、あるソフトウェアモジュール又はあるソフトウェアモジュールの変数に課される制約を決定及び解決する例示的なシステム200を示す。特定の実施の形態では、図2に示されるシステム200の構成要素は、コンピュータハードウェア又はソフトウェア或いはその組み合わせとして実現される。図1及び図2は、互いに関連して記載される。
特定の実施の形態では、あるソフトウェアモジュールは、任意の数の数値の変数又は文字列の変数を有する場合がある。たとえばソフトウェアモジュール“m”は、整数の変数“vi”、ブール変数“vb”及び文字列の変数“vs”を有する場合がある。この場合、変数“vi”及び“vb”は、数値の変数である。特定の実施の形態では、これらの変数は、ソフトウェアモジュールの入力、出力又はローカル変数である場合がある。
特定の実施の形態では、はじめに、ソフトウェアモジュールの特定の数値の変数に課される任意の数の数値の制約、及びソフトウェアモジュールの特定の文字列の制約に課される任意の数の文字列の制約が存在する場合がある。より詳細には、数値の制約のセットが、特定の数値の変数について指定されて、特定の数値の変数に課されるか、又は、文字列の制約のセットが、特定の文字列の変数について指定されて、特定の文字列の変数に課される場合がある。それぞれの制約のセットは、1以上の特定の制約を含む場合がある。たとえば、数値の制約のセット“nc1-vi”が、整数の変数“vi”について指定され、整数の変数“vi”に課され、数値の制約のセット“nc1-vb”が、ブール変数“vb”について指定され、ブール変数“vb”に課され、文字列の制約のセット“sc1-vs”が、文字列の変数“vs”について指定され、文字列の変数“vs”に課される。特定の実施の形態では、これらの制約の最初のセット(たとえば“nc1-vi”、“nc1-vb”及び“sc1-vs”)が、ソフトウェアモジュールの設計仕様又は形式的な要件に基づいて指定される。
特定の実施の形態では、ソフトウェアモジュールにおいて、ソフトウェアモジュールの特定の数値の変数に適用される任意の数の演算が存在し、この演算は、数値の入力を必要とするか、又は数値の出力を生成する。たとえば、整数の変数“vi”に適用される演算は、“ri = vi + 10”であり、この演算は、入力として“vi”及び“10”の値である2つの数値を要し、出力として“ri”の値である数値を生成する。
特定の実施の形態では、ソフトウェアモジュールにおいて、ソフトウェアモジュールの特定の数値の変数に適用される任意の数の動作が存在し、この演算は、文字列の入力を要するか又は文字列の出力を生成する。たとえば、ブール変数“vb”に適用される演算は、“vb.toString()”であり、この演算は、その出力として、ブールの変数“vb”の値の文字列の表現(たとえば文字列“true”)である、文字列の値を生成する。
特定の実施の形態では、ソフトウェアモジュールにおいて、ソフトウェアモジュールの特定の文字列の変数に適用される任意の数の演算が存在し、この演算は、文字列の入力を要するか又は文字列の出力を生成する。たとえば、文字列の変数“vs”に適用される演算は、“rs = vs.contact(“abc”)”であり、この演算は、入力として“vs”及び“abc”の値である2つの文字列の値を要し、出力として“rs”の値である文字列の値を生成する。
特定の実施の形態では、ソフトウェアモジュールにおいて、ソフトウェアモジュールの特定の文字列の変数に適用される任意の数の演算が存在し、この演算は、数値の入力を要するか又は数値の出力を生成する。たとえば、文字列の変数“vs”に適用される演算は、“vs.length()”であり、この演算は、文字列の変数“vs”の値に含まれる文字数を示す数値をその出力として生成する。文字列の変数“vs”に適用される別の演算は、“vs.substring(5,7)”であり、この演算は、入力として2つの数値を要する。
特定の実施の形態は、図1のステップ102に示されるように、(たとえばソフトウェアモジュール“m”といった)ソフトウェアモジュール、ソフトウェアモジュールの(たとえば整数の変数“vi”に課される数値の制約“nc1-vi”及びブール変数“vb”に課される数値の制約“nc1-vb”といった)特定の数値の変数について最初に指定され、課される数値の制約のセット、及び、ソフトウェアモジュールの(たとえば文字列の変数“vs”に課される文字列の制約“sc1-vs”といった)特定の文字列の変数について最初に指定され、課される文字列の制約のセットを分析する。特定の実施の形態では、数値及び文字列の制約は、ソフトウェアモジュールの入力又は中間の変数(すなわちローカル変数)の何れかに課される。勿論、特定の実施の形態では、数値の制約のセットがソフトウェアモジュールのありとあらゆる数値の変数に最初に課される必要はなく、また、文字列の制約のセットがソフトウェアモジュールのありとあらゆる文字列の変数に最初に課される必要はない。特定の数値の変数のみが関連される数値の制約を最初に有し、また、特定の文字列の変数のみが関連される文字列の制約を最初に有することもできる。
特定の実施の形態では、ソフトウェアモジュールの入力変数に最初に課される数値又は文字列の制約について、ソフトウェアモジュールの設計仕様又は形式的な要件に従って制約が決定される場合がある。ソフトウェアモジュールの中間の変数に最初に課される数値又は文字列の制約について、ソフトウェアモジュールで記号的実行を行うことで制約が決定される場合がある。記号的実行は、図8と共に以下に詳細に記載される。要するに、特定の実施の形態は、ソフトウェアモジュールの入力変数のそれぞれに記号の値を割り当てる一方で、ソフトウェアモジュールでの記号的実行を行う。ソフトウェアモジュールの中間の変数は、直接的又は間接的に、ソフトウェアモジュールの1以上の入力変数に依存するので、ソフトウェアモジュールで記号的実行を行うことで、中間変数について、それが特定の入力変数に有する依存度を示す記号の表現のセットが得られる。特定の実施の形態は、中間の変数について得られる記号的表現のセットに基づいて中間の変数に課される制約と、中間の変数が依存する特定の入力の変数に課される制約のセットを決定する。たとえば、ソフトウェアモジュール“m”により、“vi”は入力変数、“ri”は中間変数、及び“ri = vi + 10”とする。この場合、ソフトウェアモジュール“m”に記号的実行を行うことで、中間の変数“ri”が入力の変数“vi”に依存することを判定する。さらに、“vi > 0”であるように、数値の制約が入力の変数“vi”に課されているとする。記号的実行の結果と入力の変数“vi”に課された数値の制約とに基づいて、数値の制約は、“ri > 10”となるように中間変数“ri”について決定される。
図1のステップ102に示される分析から、特定の実施の形態は、図1のステップ104に示されるように、ソフトウェアモジュールの特定の数値の変数に課された文字列の制約のセット、及びソフトウェアモジュールの特定の文字列の制約に課された数値の制約のセットを推定する。特定の実施の形態では、図1のステップ102及び104は、図2に示されるシステム200の構成要素202により実行される場合がある。特定の実施の形態では、構成要素202は、ソフトウェアモジュール212及びソフトウェアモジュール212の変数に最初に課された制約214を入力として受け、この制約は、ソフトウェアモジュールの数値の変数について最初に指定され、課された数値の制約と、ソフトウェアモジュールの文字列の変数について最初に指定され、課された文字列の制約を含む。構成要素202は、適用可能な分析を行い、ソフトウェアモジュール212の数値の変数に課された文字列の制約と、ソフトウェアモジュール212の文字列の変数に課された数値の制約とを推定する。構成要素202は、出力として、ソフトウェアモジュール212の変数に課された指定された制約であって、推定された制約の両者含む数値の制約と文字列の制約とが混成されたセットを提供する。
特定の実施の形態では、ソフトウェアモジュールの変数の制約は、様々な要素に基づいて推定される場合があり、本発明の開示は、適用可能な要素を含んでいる。たとえば限定することなしに、特定の変数に適用される演算、ソフトウェアモジュールを実現するために使用されるプログラミング言語の仕様、ソフトウェアモジュールが実行されるランタイム環境及びこれらの複数の要素の組み合わせに基づいて、数値の制約は、数値の変数と文字列の変数との両者について推定され、文字列の制約は、数値の変数と文字列の変数の両者について推定される。
特定の実施の形態では、数値の変数が与えられると、数値の変数に適用される演算に基づいて文字列の制約が推定され、これにより、文字列の結果が生成される。たとえば、(vi.toString()),split(“0”)”という2つの演算がソフトウェアモジュール“m”における整数の変数“vi”に適用されるとする。この演算の最初の手順は、整数の変数“vi”の値の文字列の表現(たとえば数182は、文字列“182”として表現される)を生成し、次の手順で、この文字列を文字“0”の位置で新たな文字列に分割する。第二の演算(すなわち文字列の分割演算)を成功させるため(たとえばヌル文字列とならないため)、整数の変数“vi”の値の文字列の表現が少なくとも1つの文字“0”を含まなければならないという、文字列の制約が演算から推定される。
特定の実施の形態では、数値の変数が与えられると、数値の制約は、数値の変数に適用される演算に基づいて推定され、これにより数値の結果が生成される。たとえば、“Math.sqrt(vi)”という演算がソフトウェアモジュール“m”における整数の変数“vi”に適用されるとする。この演算は、整数の変数“vi”の値の平方根を与える。この演算をエラーに遭遇することなしに実行するため、整数の変数“vi”の値が0以上でなければならないことを指定する数値の制約が演算から推定される。
特定の実施の形態では、文字列の変数が与えられると、文字列の変数に適用される演算に基づいて文字列の制約が推定され、これにより文字列の結果が生成される。たとえば、“s.repalceAll(“abc”, “xyz”)”という演算がソフトウェアモジュール“m”における文字列の変数“s”に適用されるとする。この演算は、文字列の変数“s”で発見される全てのサブ文字列“abc”を“xyz”で置き換える。この演算が文字列の変数“s”の値に実際の影響を及ぼすため、文字列の変数“s”の値が少なくとも1つのサブ文字列“abc”の発生を含まなければならないという、文字列の制約が演算から推定される。
特定の実施の形態では、文字列の変数が与えられると、数値の制約は、数値の結果を生成することになる文字列の変数に適用される演算に基づいて推定されるか、1以上の数値の入力を受けることになる文字列の変数に適用される演算に基づいて推定される。たとえば、“s.startsWith(“abc”)”という演算がソフトウェアモジュール“m”における文字列の変数“s”に適用され、この演算は、文字列の変数“s”の値がサブ文字列“abc”で開始するかを示す真又は偽としてブールの結果を生成する。この演算を上手く実行するため、文字列の変数“s”の値は、少なくとも3つの文字を有さなければならない。従って、文字列の変数“s”の長さが3以上でなければならないことを指定する数値の制約がこの演算から推定される。別の例として、“s.substring(6)”という演算がソフトウェアモジュール“m”における文字列の変数“m”に適用されるとする。この演算は、入力として数値を受ける。この演算を上手く実行するため(たとえばヌル文字列とならないため)、文字列の変数“s”の値は、少なくとも6つの文字を有さなければならない。従って、文字列の変数“s”の長さが6以上でなければならないことを指定する数値の制約がこの演算から推定される。
先の例では、ソフトウェアモジュールにおいて、文字列の結果を生成する演算が数値の変数に適用されるか、又は、数値の入力を受けるか又は数値の結果を生成する演算が文字列の変数に適用される。特定の実施の形態では、これらの演算から、数値の制約が推定されて、特定の文字列の変数に課され、文字列の制約が推定されて、特定の数値の変数に課される。特定の実施の形態では、数値又は文字列である変数が与えられると、変数に課される完全な制約のセットは、もしあれば変数について最初に指定された制約と、もしあれば変数について推定される制約との両者を含む。この制約のセットは、数値の制約又は文字列の制約、或いはその両者を含む。変数に課される制約のセットは、変数に適用される個々の演算に基づいて変数について推定されるため、特定の実施の形態は、このように取得された制約のセットを相互作用するハイブリッドな制約のセットと呼ぶ。特定の実施の形態では、任意の数の数値又は文字列の変数を有するソフトウェアモジュールが与えられると、ソフトウェアモジュール自身に課される制約のセットは、ソフトウェアモジュールの個々の変数に課される全ての制約を含む。
あるソフトウェアモジュールの変数に課されるハイブリッドな制約のセットが与えられると、特定の実施の形態は、図1のステップ106に示されるように、数式(たとえば“vi >= 0”,“vb = true”又は“s.length() >= 6”)でセットにおけるそれぞれの数値の制約を表し、セットにおけるそれぞれの文字列の制約を有限状態マシン(FSM)で表す。
一般に、FSMは、有限の状態、これら状態間の遷移及びアクションの数から構成される挙動のモデルである。特定の実施の形態では、FSMは、文字列を表現するために使用される。図3は、文字列を表現するために使用される幾つかのFSMを示す。図3において、それぞれのFSMにより、中間の状態は、1つの円により表現され、許可状態は、二重の円により表現され、ある状態への入力は、円につながる矢印により表現される。
たとえば、FSM310は、ある文字列“s”を表し、この文字列は、任意の文字を有し、任意の長さからなる。FSM320は、ある文字列を表し、この文字列は、少なくとも1つの文字を有しており、文字列の最後の文字は、“Z”であり、制約“S.endsWidth(“z”) = true”を表現するために使用される。FSM330は、ある文字列を表し、この文字列は、3以上の文字を有しており、“S.length() >= 3”を表現するために使用される。
FSM340は、ある文字列“S”を表し、この文字列は、少なくとも1つの文字を有し、少なくとも1つの“Z”を含み、“Z”の遷移は、文字列における最後の“Z”を意味する。FSM350は、文字列“S”を表し、この文字列は、“Z”である任意の文字を有さない。制約“(a = S.lastIndexOf(“z”))”を考える。この制約から、“a >= 0”である場合に、“(S.substring(a, a+1) = “Z”)”であることを推定することができる。FSM340は、先の制約が満足された場合、すなわち文字列“S”が少なくとも1つの“Z”の文字を含み、“S”に生じる最後の“Z”は、“a”の値に等しいインデックスである場合を表す。他方で、FSM350は、制約のセットが満たされない場合、すなわち文字列“S”が任意の文字“Z”を含まない、従って“a = -1”である場合を表す。従って、制約“a = S.lastIndexOf(“Z”)”により、記号的実行ツリーにおける分岐となり、一方のブランチで、更なる数値の制約“a >= 0”をもつFSM340の場合が想定され、他方のブランチで、更なる制約“a = -1”をもつFSM350の場合が想定される。
図4は、文字列“S”とそのサブ文字列の1つ“S.substring(2,4)”を表すために使用される別の例示的なFSM400を示す。この例では、状態402は、文字列“S”の開始ポイントであり、状態404は、文字列“S”の許可状態(すなわち終了ポイント)である。サブ文字列“S.substring(2,4)”は、第3の文字で開始し、第五の文字で終了する“S”のサブ文字列である。なお、Javaプログラミング言語によれば、インデックスは、0で開始し、すなわち最初のエレメントのインデックス番号は、0である。従って、インデックス番号2は、第三のエレメントを示し、インデックス番号4は、第五のエレメントを示す。サブ文字列“S.substring(2,4)”について、開始ポイントは、文字列“S”の第三の文字に対応する文字列“S”の開始状態402から第三の状態であり、文字列“S”の第三の文字に対応する。図4では、3つの状態412A,412B及び412Cが存在し、それぞれの状態は、開始状態402からの第三の状態であり、それらの1つは、サブ文字列“S.substring(2,4)”について可能性のある開始状態412である。サブ文字列“S.substring(2,4)”について、終了ポイント(すなわち許可状態)は、文字列“S”の開始状態402から第五の状態であり、文字列“S”の第五の文字に対応する。図4では、3つの状態414A,414B及び414Cが存在し、これらの状態は、開始状態402から第五の状態である、それらのうちの1つは、サブ文字列“S.substring(2,4)”について可能性のある許可状態414である。なお、図4において、“ε”は、ゼロ入力の状態を示す。
特定の実施の形態では、制約のセットが与えられると、セットからのそれぞれの数値の制約は、適用可能な数式を使用して表現され、セットからのそれぞれの文字列の制約は、適用可能なFSMを使用して表される。さらに、このように表現された制約のセットが与えられると、特定の実施の形態は、図1のステップ108に示されるように、同時にセットにおける全ての制約を満たす1以上の解を発見するために制約を解くことを試みる。特定の実施の形態では、図1のステップ108は、図2に示されるシステム200の構成要素204により実行される。特定の実施の形態では、構成要素204は、SMT(Satisfactory Modulo Theories)に部分的に基づいて実現される制約の解決手段である。特定の実施の形態では、構成要素204は、数式を使用して表現される数値の制約と、FSMを使用して表現される文字列の制約の一方又は両方を含む制約のセットを入力として受け、セットから全ての制約を満たす1以上の解を発見することを試みる。何れかの解が発見された場合、構成要素204は、その出力として解を与える。勿論、制約のセットがセットからの全ての制約を満たす何れかの解を有さない可能性がある。たとえば、制約のセット“(s.equals(q)) && (s.startsWith(“uvw”)) && (q.endsWith(“xyz”)) && (s.length() < a) && ((a + b) < 6) && (b > 0)”を考える。この場合、“s”及び“q”は文字列であり、“a”及び“b”は整数である。同時にこのセットからの全ての制約を満たす“s”、“q”、“a”及び“b”の値の組み合わせは存在しない。従って、この特定の制約のセットは満足されない。
特定の実施の形態は、反復アルゴリズムを使用して制約が混成されたセットを解く。特定の実施の形態は、FSMを使用して表現された、セットからの全ての文字列の制約を文字列の領域でグループ化し、数式を使用して表現された、セットからの全ての数値の制約を数値の領域でグループ化する。特定の実施の形態は、次いで、(1)セットにおける全ての制約を満たす1以上の解が発見されるまで、(2)セットにおける全ての制約を満たす解がないと判定されるまで、又は(3)実行される繰返しの回数が予め決定された閾値に到達するまで((1)〜(3)の何れか早いほう)、数値領域又は文字列領域の何れかで1以上の解(すなわちセットにおける全ての数値の制約又はセットにおける全ての文字列の制約の何れかを満足させる解)を発見する試みを繰返し、一方の領域で発見された解を他方の領域に供給する。特定の実施の形態は、SMT(Satisfactory Modulo Theory)解法を使用して数値の領域において数値の制約を解き、正規表現ユニオンアルゴリズム、交差アルゴリズム、補完アルゴリズム、Kleene starアルゴリズム及び他の適用可能なアルゴリズムを使用して、文字列領域において文字列の制約を解く。さらに、特定の実施の形態は、制約が混成されたセットについて1以上の解を発見するのを試みるとき、以下を考慮する。はじめに、数値領域のみにおける数値の制約が満足のいくものではない場合(すなわち、セットにおける数値の制約を満たす解が存在しない場合)、全体の制約のセットが満足のいくものではない。文字列領域のみにおける文字列の制約の解がヌル文字列(すなわち空の文字列)である場合、セットにおいて数値の制約が全くない場合、そのセットは満足のいくものではなく、さもなければ、そのセットにおける数値のセットは、ヌル文字列により更に制約される。
繰返しの手順を更に説明するため、例示的な制約のセット“s.startsWith(“uvw”) && s.endsWith(“xyz”) && (a = s.lastIndexOf(“t”) && (s.length() <= b) && (b + c <= 8) && ((a + d) >= 4 && (c > 0) && (d < 0))”を考える。この場合、“s”は文字列であり、“a”,“b”,“c”及び“d”は整数である。この制約のセットを満たす解は、セットにおける全ての個々の制約が同時に満たす、文字列“s”及び整数“a”,“b”,“c”及び“d”のそれぞれについて5つの値の組み合わせが存在することを意味する。より詳細には、制約“s.startWith(“uvw”)”を満足させるため、“s”の最初の3つの文字は“uvw”となる必要がある。制約“s.endsWith(“xyz”)を満たすため、“s”の最後の3つの文字は、“xyz”となる必要がある。制約“a = s.lastIndexOf(“t”)”を満たすため、“s”における文字“t”の最後の発生は、“a”の値に等しいインデックス番号である。制約“s.length() <= b”を満たすため、“s”における文字の数は、“b”の値以下でなければならない。制約“b + c <= 8”を満たすため、“b”及び“c”の値の合計は、8以下でなければならない。制約“(a + d) >= 4”を満たすため、“a”及び“d”の値の合計は、4以上でなければならない。制約“c > 0”を満たすため、“c”の値は、0よりも大きくなければならない。制約“d < 0”を満たすため、“d”の値は、0未満でなければならない。
図5は、文字列領域510における先の例示的な制約のセットにおける文字列の制約512、及び数値領域520における先の例示的な制約のセットにおける数値の制約522を課すことを示す。最初の繰返し531の間、特定の実施の形態は、文字列領域510のみにおいて解を発見するのを試みる。3つの文字列の制約512は、以下の点を必要とする。(1)文字列“s”の最初の3つの文字が“uvw”でなければならないこと。(2)文字列“s”の最後の3つの文字は、“xyz”でなければならないこと。(3)文字列“s”における少なくとも1つの“t”の発生がなければならないこと。(4)“t”は“uvw”の後であって、“xyz”の前にある必要がある。従って、全ての4つの要件を満たす最短の文字列は、“uvwtxyz”である。全ての4つの要件を満たす他の可能な長い文字列(たとえば“uvwabtthxyz”又は“uvwt3fkxyz”)が存在する。しかし、特定の実施の形態は、最も簡単な可能な解(すなわち、文字列又は数値の制約により指示される全ての要件を満たす最短の文字列又は最小の値)を常に最初に選択する。この場合、全ての4つの要件を満たす最短の文字列は、“uvwtxyz”である。文字列領域510で発見された、この文字列の解“uvwtxyz”は、“a”、“b”、“c”及び“d”について解を発見するために数値領域520に供給される。
第二の繰返し532の間、特定の実施の形態は、前の繰返しの間に“s”について発見された解(すなわち“uvwtxyz”)から整数“a”、“b”、“c”及び“d”に課される更なる制約524を導出する。たとえば、制約“s.length() <= b”は、“s”における文字の数が“b”の値以下でなければならないことを必要とする。文字列領域510で発見された“s”の最短の文字列の解は7つの文字のうちの最小を有さなければならないので、これは、“b >= 7”であることを意味する。制約“a = s.lastIndexOf(“t”)”は、“s”における文字“t”の最後の発生は、“a”の値に等しいインデックス番号を有さなければならない。“t”は“s”における最後の文字ではないので、これは、“a < b”であることを意味する。さらに、“t”は、“s”における最初の3つの文字の何れかではないので、これは、“a >= 3”であることを意味する。特定の実施の形態は、“s”の解から導出される、“a”、“b”及び“c”に課される3つの更なる数値の制約524を、セットからの4つの数値の制約522に追加し、文字列“s”の解から導出されたものと同様に、セットからのものを含めて、全ての数値の制約522,524を満たす“a”、“b”、“c”及び“d”の値を発見するのを試みる。さらに、全ての数値の制約を満たす整数“a”、“b”、“c”及び“d”の多数の値が存在する場合、特定の実施の形態は、最小の値を最初に選択する。セットからの4つのオリジナルの数値の制約522と、3つの更なる導出された数値の制約524とから、特定の実施の形態は、“a”、“b”、“c”及び“d”について可能な解を“a = 5”、“b = 7”、“c = 1”及び“d = -1”として決定する。実際に、“a”について、5,6である2つの可能な値が存在する。値5は、最小であり、従って“a”について最初に選択される。これらの4つの値は、文字列の制約に対して検証されるため、文字列領域510にフィードバックされる。
第三の繰返し533の間、第二の繰返し532の間に数値領域520で発見される“a”、“b”、“c”及び“d”の解は、文字列領域510において文字列の制約に対して確認される。“s”が“uvwtxyz”である場合、“t”のインデックスは3であり且つ“a”の値に等しいはずであるので、“a”は5に等しくすることはできない。この“a”に関する新たな制約526(すなわち“a ! = 5”)は、数値領域520にフィードバックされる。
第四の繰返し534の間、制約526である“a ! = 5”は、他の既存の数値の制約522,524に追加される。全ての現在存在する数値の制約522,524及び526を満たす“a”、“b”、“c”及び“d”の次の可能性のある解は、“a = 6”、“b = 7”、“c = 1”及び“d = -1”である。この解は、文字列領域510にフィードバックされる。
第五の繰返し535の間、前の繰返しの間に数値領域520において“a”、“b”、“c”及び“d”について発見された解(すなわち、“a = 6”、“b = 7”、“c = 1”及び“d = -1”)は、文字列領域510において文字列の制約に対して同様に確認される。さらに、“s”が“uvwtxyz”である場合、“a”を6に等しくすることはできない。これにより、“a”に関して新たな制約528である“a ! = 6”が得られ、数値領域520にフィードバックされる。
第六の繰返し536の間、制約528である“a ! = 6”は、他の既存の数値の制約522,524,526に追加される。全ての数値の制約522,524,526,528をい満たす解を発見する試みが行われる。しかし、全ての現在の既存の数値の制約522,524,526及び528を満たす“a”、“b”、“c”及び“d”の値が存在しない。従って、“s”が“uvwtxyz”に等しい場合、全ての数値の制約を満たす“a”、“b”、“c”及び“d”の発見することができる解が存在しない。なお、この場合、“s”は7を超える文字を有することはできない。これは、3つの制約“s.length() <= b”,“b + c <= 8”及び“c > 0”のためである。より詳細には、“c > 0”であるので、“c”が有する最小の値は1である。“b + c <= 8”であるので、“c”が有する最小の値が1である場合、“b”が有する最長の値は7である。これは、“s.length() <= b”であるので、“s”が有する最長の長さは7文字であることを意味する。現段階で、この制約のセットは満足のいくものではないことが判定される。従って、プロセスは終了する。
図1に示される例示的なプロセスは、ソフトウェアモジュールに課される制約が混成されたセット(すなわち数値の制約及び文字列の制約の両者を含む制約のセット)又はソフトウェアモジュールの特定の変数を決定し、このセットから全ての制約を満たす解を発見するのを試みるために使用される。係るプロセスについて様々な実用的な応用が存在する。
特定の実施の形態では、図1に示されるようなプロセスは、ソフトウェアモジュールのテストデータを自動的に生成するために使用される。次いで、テストデータは、ソフトウェアモジュールにおけるエラーを検出するために使用される。しばしば、ソフトウェアモジュールは、(たとえば“if-else”命令文のような)任意の数の条件分岐点を含み、それぞれの条件分岐点は、ソフトウェアモジュールの1以上の変数(たとえば入力変数又はローカル変数)により指定される分岐条件を有する。分岐条件が満たされるか否かに依存して、ソフトウェアモジュールは、条件分岐点で異なる実行経路に進む。条件分岐点を更に説明するため、例示的なソフトウェアモジュールの以下の例示的なコードセグメントを考える。
Figure 0005786513
先の例において、“m”,“n”及び“k”は、例示的なソフトウェアモジュールの変数である。ライン1で、条件分岐点が存在し、分岐条件は、“m > n && k <= 10”である。なお、分岐条件は、多数のサブ条件(たとえば“m > n”及び“k <= 10”)を含む場合がある。ライン1での分岐条件が満足されるため(すなわち当てはまるため)、変数“m”の値は、変数“n”の値よりも大きい必要があり、変数“k”の値が10以下である必要がある。ライン1での分岐条件が満たされた場合、ライン2〜11の間のコードが実行される。さもなければ(すなわちライン1での分岐条件が満たされない場合)、ライン13でのコードが実行される。ライン3で、別の条件分岐点が存在し、分岐条件は、“k > 2”である。ライン3での分岐条件が満たされるため、変数“k”の値は、2を超える必要がある。同様に、ライン3での分岐条件が満たされる場合、ライン4でのコードが実行される。さもなければ、ライン6〜11の間のコードが実行される。ライン6には、第三の条件分岐点が存在し、分岐条件は、“n == k || n == m”であり、複数のサブ条件(たとえば“n == k”及び“n == m”)を含む。ライン6での分岐条件が満たされるため、変数“n”の値は、変数“k”の値又は変数“m”の値の何れかに等しい必要がある。ライン6での分岐条件が満たされる場合、ライン7でのコードが実行される。さもなければ、ライン9でのコードが実行される。
さらに、ライン3での条件分岐点は、ライン1での条件分岐点で入れ子構造にされ、ライン6での条件分岐点は、ライン3での条件分岐点で更に入れ子構造にされる。ライン1での条件分岐点に関連される分岐条件が満たされない場合、ライン3での条件分岐点は、コードの実行の間に到達されない。しかし、ライン3での条件分岐点に関連する分岐条件が満たされない場合、ライン6での条件分岐点は、コードの実行の間に到達される。実際に、ライン6での条件分岐点に到達するため、ライン1での分岐条件は、満たされる必要があるが、ライン3での分岐条件は、満たされない。
従って、ソフトウェアモジュールにおけるそれぞれの条件分岐点で、条件分岐点に関連する分岐条件が満たされたかに依存して、ソフトウェアモジュールは、異なる実行経路に沿って進む。図6は、複数レベルの入れ子構造にされた条件分岐を有する例示的なソフトウェアモジュールの実行経路を示す。条件分岐点602で、“CONDITION 1”が満たされた場合、実行経路は処理ステップ612に進み、“CONDITION 1”が満たされない場合、実行経路は、処理ステップ614に進む。条件分岐点602において入れ子構造にされた条件分岐点604で、“CONDITION 2”が満たされた場合、実行経路は、処理ステップ616に進み、“CONDITION 2”が満たされない場合、実行経路は終了する。条件分岐点602において入れ子構造にされる条件分岐点606で、“CONDITION 3”が満たされた場合、実行経路は終了し、“CONDITION 3”が満たされない場合、実行経路は、条件分岐点608に進む。条件分岐点606において更に入れ子構造にされた条件分岐点608で、“CONDITION 6”が満たされた場合、実行経路は処理ステップ608に進み、“CONDITION 6”が満たされない場合、実行経路は、処理ステップ622に進む。図6において、5つの可能性のある実行経路が存在し、ソフトウェアモジュールは、個々の条件分岐点602,604,606及び608で分岐条件が満たされたかに依存して、5つの可能性のある実行経路の何れか1つに沿って進む。
特定の実施の形態は、分岐条件を表す変数に課される数値又は文字列の制約として分岐条件を考える。たとえば、SAMPLE CODE 1のライン1で、分岐条件は“m > n && k <= 10”である。分岐条件が満たされた場合、“m”の値は、“n”の値よりも大きく、“k”の値は、10以下でなければならない。これは、“m”、“n”及び“k”に課される制約のセット“(m > n) && (k <= 10)”として表される。この制約のセットを満たす“m”、“n”及び“k”の解により、分岐条件は満たされ(すなわち、当てはまり)、ソフトウェアモジュールに1つの実行経路(すなわち、コードの“if”部分)に沿って進行させる。分岐条件が満たされない場合、“m”の値は、“n”の値以下であるか、又は“k”の値は、10よりも大きい。これは、“m”、“n”及び“k”に課される別の制約のセット“(m <= n) || (k > 10)”として表現される。この第二の制約のセットを満たす“m”、“n”及び“k”の解により、分岐条件が満たされず(すなわち、当てはまらず)、ソフトウェアモジュールに別の実行経路(すなわち、コードの“else”部分)に沿って進行させる。
結果的に、特定の実施の形態は、ソフトウェアモジュールにおけるそれぞれの可能性のある実行経路に対応する制約のセットを決定し、検査の入力として解を使用してソフトウェアモジュールを検査する。図7は、1以上の条件分岐点から得られる複数の可能性のある実行経路を含むソフトウェアモジュールを検査する例示的な方法を示す。特定の実施の形態では、ソフトウェアモジュールは、任意の数の変数(たとえば入力又はローカルの変数)及び任意の数の条件分岐点(たとえば、“if-else”命令文)を有する。それぞれの条件分岐点は、1以上の変数により指定された分岐条件に関連される。特定の実施の形態では、分岐条件は、任意の数のサブ条件を含む。条件分岐点に関連する分岐条件が満たされるかに依存して、ソフトウェアモジュールは、異なる実行経路に沿って進む。
特定の実施の形態は、ソフトウェアモジュールのそれぞれの可能性のある実行経路について、図7のステップ702で示されるように、ソフトウェアモジュールにそれに沿って進行させ、その実行経路の終わりに到達させる記号的表現のセットを決定するため、ソフトウェアモジュールで記号的実行を行う。それぞれの記号的表現のセットを決定するとき、もしあれば、(たとえば、図1のステップ104に関連して記載されるように)ソフトウェアモジュールの特定の変数について推定される数値及び文字列の制約と同様に、もしあれば、(たとえば図1のステップ102に関連して記載されるように)ソフトウェアモジュールの特定の変数に最初に課された数値及び文字列の制約を組み入れる。特定の実施の形態では、図7のステップ702は、図2に示されるシステム200の構成要素206により実行され、このシステムは、ソフトウェアモジュール212を入力として受け、ソフトウェアモジュール212で記号的実行を行い、ソフトウェアモジュール212の実行経路に対応する記号的表現の出力のセットを与える。
コンピュータ科学の分野では、記号的実行は、抽象解釈の場合として、実際の値ではなく記号を追跡することによる、ソフトウェアプログラムの分析を示す。この分析は、記号の変数としてソフトウェアモジュールへの入力を扱う明示的でない状態モデルのチェック技術である。この技術は、記号変数をもつソフトウェアモジュールにおいて全ての有限の経路を実行することで複雑な数学的な式又は表現を作り出し、次いで、複雑な式を(決定手順として典型的に知られる)解法により解いて、もしあればエラーのシナリオを得る。明示的な状態モデルのチェックとは対照的に、記号的実行は、全ての可能性のある入力値と、分析下にあるソフトウェアモジュールにおける全ての入力変数の全ての可能性のある使用のケースを解明することができる。記号的実行を更に説明するため、“foo”と名付けられた例示的なソフトウェアモジュールを考える。
Figure 0005786513
ソフトウェアモジュール“foo”は、2つの入力変数“a”及び“b”を有し、2つのローカル変数“c”及び“d”を有する。特定の実施の形態では、ローカル変数の値は、直接的又は間接的に、ソフトウェアモジュールの1以上の入力変数の値に依存する。たとえば、モジュール“foo”により、ローカル変数“c”の値は、コードのライン3により示されるように、入力変数“a”及び“b”の値に直接的に依存し、ローカル変数“d”の値は、コードのライン5により示されるように、ローカル変数“c”を通して、入力変数“a”及び“b”の値に間接的に依存する。さらに、モジュール“foo”は、“if-else”命令文により生じる、コードのライン4での条件分岐点を含む。ライン4での条件分岐点は、分岐条件“! (c.equals(“qrs”))”に関連される。この分岐条件が満たされるか又は当てはまるかに依存して、すなわち、ローカル変数“c”が“qrs”に等しいかに依存して、モジュール“foo”は、異なる実行経路に進み、モジュール“foo”のコードの異なる部分が実際に実行される。より詳細には、ローカル変数“c”が“qrs”に等しい場合、コードのライン5及び6に示されるように、ローカル変数“d”の値が計算されてリターンされる。他方で、ローカル変数“c”が“qrs”に等しい場合、コードのライン8により示されるように、ローカル変数“c”の値がリターンされる。
記号的実行がモジュール“foo”で実行されたとき、その入力及びローカル変数には、それぞれ、実際の値の代わりに記号の値が割り当てられる。図8は、モジュール“foo”での記号的実行を実行するステップを表す例示的な実行フロー800を示す。この例では、入力変数“a”には、記号値“x”が割り当てられ、入力変数“b”には、記号値“y”が割り当てられ、ローカル変数“c”には、記号値“z”が割り当てられ、ローカル変数“d”には、記号値“w”が割り当てられる。変数“a”、“b”、“c”及び“d”は、“string”のタイプからなるので、記号値“x”、“y”、“z”及び“w”は、任意の文字列をそれぞれ表す。
さらに、“Φ”は、実行経路に沿った様々なポイントでの記号的実行の結果を表す記号的表現である。より詳細には、モジュール“foo”のコードのライン2に対応する802で、変数“a”、“b”、“c”及び“d”には、それぞれの記号の値“x”、“y”、“z”及び“w”が割り当てられ、“Φ”は、空又はゼロの表現を最初に有する。実行が更に進行するとき、コードが実行されているかに依存して式が“Φ”に追加される。モジュール“foo”のコードのライン3に対応する804で、“Φ”は、式“z = concat(x, y)”を有する。これは、コードのライン3が“c = a.concat(b)”であり、“x”、“y”及び“z”が変数“a”、“b”及び“c”にそれぞれ割り当てられた記号値であるからである。つぎに、モジュール“foo”のコードのライン4は、条件分岐点であり、実行が進行する2つの可能性のある実行経路が存在する。従って、記号的実行は、2つの異なる経路に進行し、第一の経路PATH1は、コードのライン5,6に対応する806及び808を含み、第二の経路PATH2は、コードのライン8に対応する810を含む。
PATH1に進むため、変数“c”は、“qrs”に等しくなく、このことは、記号値“z”が“qrs”等しくないことを意味する。従って、式“z ! = “qrs””は、806で“Φ”に追加される。逆に、PATH2に進むため、変数“c”は、“qrs”に等しく、このことは、記号値“z”が“qrs”に等しいことを意味する。従って、式“z = “qrs””は、810で“Φ”に追加される。PATH1に沿って、変数“d”の値は、808に対応するコードのライン5で決定される。従って、式“w = concat(z, “t”)”は、808で“Φ”に追加される。“z = concat(x, y)”であるので、“w”の式は、“z = concat(concat(x, y), “t”)”として書き換えられる。808は、PATH1の終わりであり、従って808での“Φ”の式は、PATH1の実行の終わりに到達するために満たされる必要がある、記号の形式での条件を表す。同様に、810は、PATH2の実行の終わりであり、従って801での“Φ”の式は、PATH2の終わりに到達するために満たされる必要がある、記号の形式での条件を表す。
モジュール“foo”は2つの可能性のある実行経路を有するので、モジュール“foo”を記号的に実行することで、2つの式のセットが得られ、2つの式のセットのそれぞれは、それぞれの実行経路に対応する。特定の実施の形態では、808で“Φ”の式を解くことで、モジュール“foo”にPATH1の終わりに到達させる入力変数“a”及び“b”の実際の値が与えられ、810で“Φ”の式を解くことで、モジュール“foo”にPATH2の終わりに到達させる入力変数“a”及び“b”の実際の値が与えられる。
ソフトウェアモジュールで記号的実行を行うことから得られる式のセットを解くため、特定の実施の形態は、図7のステップ704に示されるように、ソフトウェアモジュールの変数に課される制約のセットとして、しれぞれの式のセットを表現する。たとえば、モジュール“foo”により、808での式のセットは、“a”、“b”、“c”及び“d”に課される制約のセット“(d = concat(cancat(a, b), “t”)) && (c = concat(a, b)) && (c ! = “qrs”)”として表現される。810での式のセットは、“a”、“b”、“c”及び“d”に課される制約のセット“(c = concat(a, b)) && (c = “qrs”)”として表現される。
ソフトウェアモジュールでの記号的実行を行うことから得られるそれぞれの制約のセットについて、特定の実施の形態は、適用可能な数式としてセットからのそれぞれの数値の制約と、アプリケーションFSMとしてセットからのそれぞれの文字列の制約とを表現する。図9Aは、ソフトウェアモジュールの3つの対応する実行経路912,914,916と共に、例示的なソフトウェアモジュールについて決定された3つの例示的な制約のセット902,904及び906を示し、この場合、数値の制約は、数式として表現され、文字列の制約は、FSMとして表現される。この例示的なソフトウェアモジュールを検査するため、それぞれの経路912,914及び916の終わりで、それぞれの対応する制約のセット902,904及び906は、テストケースについて解かれる。
特定の実施の形態は、図1に示されるプロセスを使用して、図7のステップ706に示されるように、それぞれの制約のセットについて1以上の解を発見するのを試み、次いで、図7のステップ708に示されるように、テストの入力として発見された解を使用して、ソフトウェアモジュールを検査する。特定の実施の形態では、制約のセットの解は、セットにおける全ての制約を満たす制約が課される変数について実際の値を含む。ソフトウェアモジュールを検査するとき、これらの実際の解の値は、テストの入力としてソフトウェアモジュールの変数に割り当てられる。制約のセットについて発見された解が与えられると、解の値は対応する制約のセットからの全ての制約を共に満たし、且つ、ソフトウェアモジュールへのテスト入力として実際の値(すなわち、制約のセットについて発見された解からの値)の特定の組み合わせを適用することで、特定の実行経路に沿って進行して、特定の実行経路の終わりに到達するときに、制約のセットはソフトウェアモジュールの状態を表す(たとえば、記号的実行から取得された)式のセットに対応するので、ソフトウェアモジュールが特定の実行経路に沿って進行して、特定の実行経路の終わりに到達することが保証される。結果として、これら特定の解の値がテスト入力としてソフトウェアモジュールの対応する変数に割り当てられた場合に、特定の実行経路は、完全に検査される。さらに、ある解がソフトウェアモジュールのありとあらゆる実行経路について得られたありとあらゆる式のセットに対応するありとあらゆる制約のセットについて発見され、且つ解の値が(たとえば、同時に1つの解の実際の値を適用することで)テスト入力としてソフトウェアモジュールに適用された場合、ソフトウェアモジュールの全ての可能性のある実行経路は、十分にテストされる。ソフトウェアモジュールの実行経路の何れかにおいてエラーが存在する場合、係るシステマチックな検査は、エラーを最終的に見つけることができる。
特定の実施の形態では、図1に示されるようなプロセスは、ソフトウェアモジュールの設計又は仕様の要件が満たされるかを検証するために使用される。典型的に、所与のソフトウェアモジュールに関連する正式な設計又は仕様の要件が存在する。これらの形式的な要件の幾つかは、ソフトウェアモジュールの入力又は出力に課される。特定の実施の形態では、ソフトウェアモジュールの入力に課される仕様の要件は、ソフトウェアモジュールに関連する前提条件と呼ばれ、ソフトウェアモジュールの出力に課される仕様の要件は、ソフトウェアモジュールに関連する事後条件と呼ばれる。この事後条件は、ソフトウェアモジュールに関連する前提条件に依存する。
先に説明されたように、ソフトウェアモジュールは、(たとえば“if-else命令文”といった)任意の数の条件分岐点を含み、それぞれの条件分岐点は、ソフトウェアモジュールの(たとえば入力変数又はローカル変数といった)1以上の変数により指定される分岐条件を有する。分岐条件が満たされたかに依存して、ソフトウェアモジュールは、異なる実行経路に進む。従って、ソフトウェアモジュールが実行されたとき、ソフトウェアモジュールに含まれる条件分岐点から得られる可能性のある実行経路のうちの何れか1つに進む。結果的に、特定の実施の形態では、ソフトウェアモジュールがその入力と出力に課された形式的な仕様の要件(すなわち、ソフトウェアモジュールに関連する前提条件及び事後条件)を満たすかを検証するとき、ソフトウェアモジュールの全ての可能性のある実行経路について、ソフトウェアモジュールに関連する前提条件及び事後条件が当てはまる場合且つその場合に限り、ソフトウェアモジュールは、検証テストを通過した(すなわち、仕様の要件を満たした)と見なされる。
図10は、(たとえば形式的な設計又は仕様の要件といった)ソフトウェアモジュールの入力と出力に課される要件(すなわち、ソフトウェアモジュールに関連する前提条件及び事後条件)に関連して、ソフトウェアモジュールを検証する例示的な方法を示す。特定の実施の形態は、図10のステップ102で示されるように、ソフトウェアモジュールの(たとえば、入力変数に課される要件といった)それぞれの前提条件、及び(たとえば出力変数に課される要件といった)それぞれの事後条件を、ソフトウェアモジュールの入力又は出力変数に課される制約として表現する。たとえば、文字列のタイプからなる2つの入力変数“a”及び“b”を有する例示的なソフトウェアモジュール“foo”を考える。先に例示されたように、“foo”のコードに基づいて、“foo”は、文字列のタイプからなる1つの出力値をリターンすることが判定される。すなわち、“foo”は、文字列のタイプからなる1つの出力変数を有する。“p”を“foo”の出力変数を表すものとする。ソフトウェア“foo”の使用により指定され、且つ“a”、“b”及び“p”に課される制約として表現されたとき、“a”、“b”及び“p”に課される前提条件及び事後条件は、以下の通りであるとする。
Figure 0005786513
次いで、特定の実施の形態は、図10のステップ1004に示されるように、ソフトウェアモジュールの事後条件を否定する。先の例におけるように、ソフトウェアモジュールは、1つの事後条件“p.endsWith(“t”)”を有する。この事後条件を論理的に否定することで、“! (p.endsWith(“t”))”が得られる。
特定の実施の形態は、図10のステップ1006に示されるように、ソフトウェアモジュールのそれぞれの可能性のある実行経路に対応する制約のセットを取得し、次いで、それぞれの制約のセットに前提条件及び否定された事後条件を組み入れるため、ソフトウェアモジュールでの記号的実行を行う。記号的実行は、図7のステップ702と共に上述されており、ここでは同様に実行される。それぞれの制約のセットを決定するとき、特定の実施の形態は、もしあれば(たとえば図1のステップ104と共に記載される)ソフトウェアモジュールの特定の変数について推定された数値及び文字列の制約と同様に、もしあれば(図1のステップ102と共に記載される)ソフトウェアモジュールの特定の変数に最初に課された数値及び文字列の制約を組み入れる。たとえば、ソフトウェアモジュール“foo”は、図8に示されたような、2つの可能性のある実行経路を有する。従って、ソフトウェアモジュール“foo”で記号的実行を行うことで、2つの式のセットが得られる。
第一の経路PATH1について、“foo”に記号的実行を行うことから得られた式のセットは、図8の808により示されるように、“(p = concat(concat(a, b), “t”)) && (concat(a, b) ! = "qrs")”として書き換えられる。なお、“d”はPATH1の終わりで“foo”によりリターンされる値(すなわち“foo”の出力)であり、“w”は“d”に割り当てられた記号値であるので、“p”はPATH1について“d”の値を有する。さらに、“x”は“a”に割り当てられた記号値であり、“b”は“y”に等価であり、且つ“z”は“c”に等価であるので、“a”は“x”に等価であり、これは、“foo”のソースコードに従って“concat(a, b)”に等しい。次いで、前提条件及び否定された事後条件は、この制約のセットに追加される。従ってPATH1の最終的な制約のセットは、“(p = concat(concat(a, b), “t”))) && (concat(a, b) ! = "qrs") && (b.endsWith(“s”) && ! (p.endsWith(“t”))”となる。
第二の経路PATH2について、“foo”で記号的実行を行うことから得られた式のセットは、図8の810により示されるように、“(p = concat(a, b)) && (concat(a, b) = "qrs")”として書き換えられる。なお、“c”はPATH2の終わりで“foo”によりリターンされた値(すなわち、“foo”の出力)であり、“z”は“c”に割り当てられた記号値であるため、“p”はPATH2について“c”の値を有し、これは、“foo”のソースコードに従って“concat(a, b)”に等しい。次いで、前提条件及び否定された事後条件は、この制約のセットに同様に追加される。PATH2について最終的な制約のセットは、“(p = concat(a, b) && (concat(a, b) = "qrs") && (b.endsWith(“s”) && ! (p.endsWith(“t”))”となる。
次いで、特定の実施の形態は、図1に示されたプロセスを使用して、図10のステップ1008に示されるように、ソフトウェアモジュールのそれぞれの可能性のある実行経路に対応するそれぞれの制約のセットについて1以上の解を発見するのを試みる。それぞれの制約のセットは、ソフトウェアモジュールに関連する前提条件と否定された事後条件と同様に、ソフトウェアモジュールで記号的実行を行うことから得られた制約を含む。特定の実施の形態では、ソフトウェアモジュールの特定の実行経路に対応するそれぞれの制約のセットについて、そのセットからの全ての制約を満たす解が発見されない場合、この実行経路について、ソフトウェアモジュールは、前提条件及び事後条件により表されるように、その入力と出力に課される要件を満たす。図10のステップ1004及び1006で説明されたように、ソフトウェアモジュールの出力で課された否定された事後条件をそれぞれの制約のセットが含むことを思い出されたい。従って、この制約のセットについて解が発見されない場合(すなわち、制約のセットが満足されない場合)、より詳細には、否定された事後条件を満たす解が発見されない場合、前提条件及び事後条件は、対応する実行経路について当てはまることを意味する。逆に、そのセットからの全ての制約を満たす解が発見された場合、対応する実行経路について、前提条件及び事後条件がその実行経路について当てはまらないため、ソフトウェアモジュールは、その入力と出力で課される要件を満たさない。逆に、図10のステップ1006で得られた制約のセットについて解が発見された場合、ソフトウェアモジュールは、入力と出力に課される要件に関連して検証テストを通過しない。図10のステップ1006で得られたありとあらゆる制約のセットが満たされないときにのみ、ソフトウェアモジュールは、その入力と出力で課された要件に関して検証テストを通過する。
図9Bは、ソフトウェアモジュールの3つの対応する実行経路912,914及び916と共に、図9Aに示されるように、例示的なソフトウェアモジュールについて決定される3つの例示的な制約のセット902,904及び906を示す。ソフトウェアモジュールの入力と出力に課される要件に関連して、この例示的なソフトウェアモジュールを検証するため、それぞれの経路912,914及び916の終わりで、それぞれの対応する制約のセット902,904及び906は、要件及びアサーションについて解かれる。
特定の実施の形態では、図1に示されたようなプロセスは、インジェクション攻撃を検出して捕捉するために設計されるソフトウェアモジュールを検証するために使用される。インサーション攻撃としても知られるインジェクション攻撃は、SQLデータベース及び他の脆弱なウェブサイトをしばしば標的にする悪意のあるソフトウェア攻撃の形態である。一般に、SQLインジェクションは、ソフトウェアアプリケーションのデータベースレイヤで生じるセキュリティの脆弱性を利用する符号注入技術である。脆弱性は、あるプログラミング言語又はスクリプト言語が別のプログラミング言語又はスクリプト言語内に埋め込まれるときは何時でも生じる。より詳細には、SQLステートメントに埋め込まれた文字列の文字列リテラルのエスケープ文字についてユーザ入力が誤ってフィルタリングされたとき、又はユーザ入力が強くタイプされず、これにより突然に実行されたときに、脆弱性が存在する。たとえば、インジェクション攻撃は、“qk%$d1shutdownsq&^d”として(たとえばランダムな文字のセットといった)別の文字列に文字列“shutdown”を埋め込み、この文字列を入力コマンド(たとえばSQL命令文)としてデータベースに送出する。データベースソフトウェアが、一見したところランダムな入力文字列に埋め込まれた“shutdown”文字列を捕捉して、それを実行しない場合、“shutdown”文字列は、データベースに不注意にシャットダウンさせる場合がある。結果として、大部分のデータベースは、係るインジェクション攻撃を検出して捕捉するために設計されたソフトウェアモジュールを有する。特定の実施の形態では、図1に示されたプロセスは、係るセキュリティソフトウェアモジュールがインジェクション攻撃として入力に埋め込まれた多くの異なる形式の悪意のある文字列を検出することができるかを検証するために使用される。たとえば、セキュリティソフトウェアモジュールを検査する1つの方法は、悪意のある文字列を考えるか、(たとえば、悪意のある文字列が無害であると信じるようにセキュリティソフトウェアモジュールをだますといった)セキュリティソフトウェアモジュールがそれを検出できないように、悪意のある文字列を埋め込むことである。
図11は、インジェクション攻撃を検出するために設計されたセキュリティソフトウェアモジュールを検証する例示的な方法を示す。特定の実施の形態では、セキュリティソフトウェアモジュールは、任意の悪意のある文字列を入力文字列が含むかを検証するため、セキュリティソフトウェアモジュールに通過される(たとえば、入力文字列といった)入力値に様々なセキュリティチェックを実行する。それぞれのセキュリティチェックポイントで、入力値がセキュリティチェックを通過した場合、セキュリティソフトウェアモジュールは、次のセキュリティチェックポイントに進む。さもなければ、セキュリティソフトウェアモジュールは、(たとえばFALSEをリターンするといった)入力値が特定のセキュリティチェック失敗したことの指示をリターンする。入力文字列がセキュリティソフトウェアモジュールに含まれる全てのセキュリティチェックを通過したときにのみ、セキュリティソフトウェアモジュールは、入力値が無害であることの指示をリターンする(たとえばTRUEをリターンする)。
特定の実施の形態は、図11のステップ1102に示されるように、インジェクション攻撃に関連して使用される可能性がある“shutdown”のような悪意のある文字列のセットを選択する。“m”を特定の悪意のある文字列を表すとする。特定の実施の形態は、図11のステップ1104に示されるように、“s”により表される別の文字列に、セットからのそれぞれの悪意のある文字列を埋め込む。“s”において、悪意のある文字列の前に幾つかの文字(すなわちサブ文字列)があり、悪意のある文字列の後の幾つかの文字(すなわち、別のサブ文字列)がある場合がある。従って、“s”は、“s = concat(concat(x, m), y)”として表現され、この場合、“x”は、“s”における、悪意のある文字列“m”の前にあるサブ文字列を表し、“y”は、悪意のある文字列“m”の後にあるサブ文字列を表す。なお、“x”又は“y”の何れかは、空の文字列であり、“m”は、“s”の別のサブ文字列となる。文字列“s”は、入力値としてセキュリティソフトウェアモジュールに適用される。
特定の実施の形態は、図11のステップ1106に示されるように、制約が満足される場合、セキュリティソフトウェアモジュールにその終わりにまで実行させ、入力値がモジュールに含まれる全てのセキュリティチェックを上手く通過したことの指示をリターンさせる制約のセットを取得するため、セキュリティソフトウェアモジュールで記号的実行を行う。記号的実行は、図7のステップ702と関連して上述され、本実施の形態で同様に実行される。制約のセットを決定するとき、特定の実施の形態は、もしあれば、(図1のステップ104に関連して記載されるように)ソフトウェアモジュールの特定の変数について推定された数値及び文字列の制約と同様に、もしあれば、(たとえば図1のステップ102に関連して記載されるように)ソフトウェアモジュールの特定の変数に最初に課される数値及び文字列の制約を組み入れる。特定の実施の形態では、このように得られた制約のセットは、入力値が無害であることを示す出力値をソフトウェアモジュールがリターンするように、セキュリティソフトウェアモジュールに含まれる全てのセキュリティチェックを上手く通過するため、セキュリティソフトウェアモジュールの入力変数に割り当てられた入力値について満たされる必要がある全ての制約を表す。
特定の実施の形態は、図1に示されるプロセスを使用して、図11のステップ1108に示されるように、“s”が全ての制約を満たすように、それぞれの悪意のある文字列が埋め込まれているとき、“s”について1以上の解を発見しようと試みる。任意の解が制約のセットを満たす“s”について発見された場合、セキュリティソフトウェアモジュールに含まれる全てのセキュリティチェックを通過するのを間違えた“s”に埋め込まれた少なくとも1つの悪意のある文字列が存在することを意味する。結果的に、セキュリティソフトウェアモジュールは、インジェクション攻撃に対して脆弱性がある。
例として悪意のある文字列“shutdown”を使用する。この文字列を“s”に埋め込むことで、“s = concat(concat(x, “shutdown”), y)”が得られる。図1に示されるプロセスを使用して、特定の実施の形態は、埋め込まれた“shutdown”をもつ“s”がセキュリティソフトウェアモジュールで記号的実行を行うことから得られる制約のセットからの全ての制約を満たすように、サブ文字列“x”及び“y”の値を与える“s”の解が存在するかを発見するのを試みる。“x”及び“y”の解が存在する場合、セキュリティソフトウェアモジュールに含まれる全てのセキュリティチェックを文字列“s”が上手く通過するように(すなわち、セキュリティソフトウェアモジュールが悪意のある文字列“shutdown”が埋め込まれたこの特定のインジェクション攻撃を検出することができないように)、値“concat(concat(x, “shutdown”), y)”を有する文字列“s”に悪意のある文字列“shutdown”を埋め込む少なくとも1つの方法が存在することを意味する。
特定の実施の形態では、それぞれの悪意のある文字列は、文字列“s”に埋め込まれたとき、異なるデータタイプを使用して表現される。たとえば、16進数として表現される文字列“shutdown”は、“0x73687574646f776e”として表現される。従って、“s”について1つの可能性のある値は、文字列のデータタイプにおける悪意のある文字列を表現する“exec shutdown”であり、“s”について別の可能性のある値は、整数のデータ対応で悪意のある文字列を表現する“declare @a char(20) select @a=0x73687574646f776e exec(@a)”である。特定の実施の形態は、“s”について解を発見することを試み、この場合、埋め込まれた悪意のある文字列は、異なるデータタイプを使用して表現される。結果として、セキュリティソフトウェアモジュールは、従来の文字列データで表される悪意のある文字列で検査されるだけでなく、(たとえば整数又は浮動小数点数として表される)予期しないデータタイプで表される悪意のある文字列でも検査される。
特定の実施の形態は、“s”が文字列全体として(すなわち“x”、“m”及び“y”を含めて)図11のステップ1106から得られる制約のセットを満たすように“s”において悪意のある文字列のセットからそれぞれの悪意のある文字列“m”を埋め込み、次いで“x”及び“y”の特定の値を提供する“s”の解を発見するのを試みる。“s”に埋め込まれた悪意のある文字列“m”をもつ“s”について解が発見された場合、セキュリティソフトウェアモジュールは、対応するインジェクション攻撃を検出することができず、従って脆弱であることを意味する。さらに、“s”に埋め込まれた悪意のある文字列“m”をもつ“s”について解が発見されない場合、特定の実施の形態は、図11のステップ1106から得られた制約のセットを満たす解を発見しようと試みる。解が発見された場合、特定の実施の形態は、解それ自身が実際に悪意のある文字列であるかを検証する。このセキュリティソフトウェアモジュールに関する検証は、悪意のある文字列が、それ自身において別の文字列に埋め込まれることなしに、セキュリティソフトウェアモジュールに含まれる全てのセキュリティチェックを上手く通過することができるか(すなわち、セキュリティソフトウェアモジュールが悪意のある文字列を検出することができないこと)を判定することを試みる。
図9Cは、ソフトウェアモジュールの3つの対応する実行経路912,914及び916と共に、図9Aに示されるように、例示的なソフトウェアモジュールについて決定された3つの例示的な制約のセット902,904及び906を示す。例示的なソフトウェアモジュールが例示的なセキュリティソフトウェアモジュールである場合、この例示的なセキュリティソフトウェアモジュールを検証するため、それぞれの経路912,914及び916の終わりで、それぞれ対応する制約のセット902,904及び906は、ソフトウェアの内部チェックを通過した全ての可能性のある文字列を表すホットスポットFSMと、悪意のあるFSMとの交点について解かれる。交点がゼロである場合、可能性のあるインジェクション攻撃が発見されない。ゼロでない交点は、可能性のあるインジェクション攻撃の文字列を即座に示す。
特定の実施の形態は、ネットワーク環境で実現される。図12は、サービスとしてソフトウェア検証を提供するのに適した例示的なネットワーク環境を示す。ネットワーク環境1200は、1以上のサーバ1220と1以上のクライアント1230を互いに結合するネットワーク1210を含む。特定の実施の形態では、ネットワーク1210は、イントラネット、エクストラネット、VPN(Virtual Private Network)、LAN(Local Area Network)、無線LAN、WAN(Wide Area Network)、MAN(Metropolitan Area Network)、インターネットの一部、又は別のネットワーク1210、又は2以上の係るネットワーク1210の組み合わせである。本発明は、適切なネットワーク1210を含んでいる。
1以上のリンク1250は、サーバ1220又はクライアント1230をネットワーク1210に結合する。特定の実施の形態では、1以上のリンク1250は、1以上の有線、無線又は光リンク1250をそれぞれ含む。特定の実施の形態では、1以上のリンク1250は、イントラネット、エクストラネット、VPN、LAN、WLAN、WAN、MAN、インターネットの一部、又は別のリンク1250、或いは2以上の係るリンク1250の組み合わせを含む。本発明は、サーバ1220及びクライアント1230をネットワーク1210に結合する適切なリンク1250を含む。
特定の実施の形態では、それぞれのサーバ1220は、単一のサーバであるか、或いは、複数のコンピュータ又は複数のデータセンタに及ぶ分散サーバである。サーバ1220は、たとえば限定されるものではないが、ウェブサーバ、ニュースサーバ、メールサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、エクスチェンジサーバ、データベースサーバ又はプロキシサーバのような様々なタイプからなる場合がある。特定の実施の形態では、それぞれのサーバ1220は、ハードウェア、ソフトウェア、又は埋め込みロジックコンポーネント、或いは、サーバ1220により実現又はサポートされる適切な機能を実行する2以上の係るコンポーネントの組み合わせを含む場合がある。たとえば、ウェブサーバは、ウェブページ又はウェブページの特定のエレメントを含むウェブサイトを主催することができる。より詳細には、ウェブサーバは、HTMLファイル又は他のファイルタイプを主催するか、要求に応じてファイルを動的に作成又は構成し、それらをHTTP又はクライアント1230からの他の要求に応答してクライアント1230に伝達する。メールサーバは、電子メールサービスを様々なクライアント1230に提供可能である。データベースサーバは、1以上のデータストアに記憶されるデータを管理するインタフェースを供給可能である。特定の実施の形態では、1以上のデータストレージ1240は、1以上のリンク1250を介して1以上のサーバ1220にリンクされる。特定の実施の形態では、データストレージ1240は、様々な情報のタイプを記憶するために使用される。特定の実施の形態では、データストレージ1240に記憶される情報は、特定のデータ構造に従って編成される。特定の実施の形態では、それぞれのデータストレージ1240は、リレーショナルデータベースである。特定の実施の形態は、サーバ1220又はクライアント1230が、たとえばデータストレージ1240に記憶される情報を検索、修正、追加又は削除といった、情報を管理するのを可能にするインタフェースを提供する。
特定の実施の形態では、それぞれのクライアント1230は、ハードウェア、ソフトウェア、又は埋め込みロジックコンポーネント、或いはクライアント1230により実現又はサポートされる適切な機能を実行可能な2以上の係るコンポーネントの組み合わせを含む電子装置である。たとえば限定されることなしに、クライアント1230は、デスクトップコンピュータシステム、ノートブックコンピュータシステム、ネットブックコンピュータシステム、ハンドヘルド電子装置、又は移動電話である場合がある。本発明は、適切なクライアント1230を含む。クライアント1230は、クライアント1230でのネットワークユーザがネットワーク1230にアクセスするのを可能にする。クライアント1230は、そのユーザが他のクライアント1230で他のユーザと通信するのを可能にする。
クライアント1230は、MICROSOFT INTERNET EXPLORER、GOOGLE CHROME又はMOZILLA FIREFOXのようなウェブブラウザ1232を有し、1以上のアッドオン、プラグイン又はTOOLBAR又はYAHOO TOOLBARのような他の拡張を有する。クライアント1230でのユーザは、URL(Uniform Resource Locator)、又はウェブブラウザ1232をサーバ1220に向ける他のアドレスを入力し、ウェブブラウザ1232は、HTTP(Hyper Text Transfer Protocol)要求を生成し、HTTP要求をサーバ1220に伝達する。サーバ1220は、HTTP要求を受けて、HTTP要求に応じて、1以上のHTML(Hyper Text Markup Language)ファイルをクライアント1230に伝達する。クライアント1230は、ユーザへの提示のため、サーバ1220からのHTMLファイルに基づいてウェブページをレンダリングする。本発明は、適切なウェブページのファイルを含む。例として、限定されるものではないが、ウェブページは、特定の必要に応じて、HTMLファイル、XHTML(Extensible Hyper Text Markup Language)ファイル、又はXML(Extensible Markup Language)ファイルからレンダリングされる。また、係るページは、たとえば限定されるものではないが、JAVASCRIPT、JAVA、MICROSOFT SILVERLIGHT、AJAX(Asynchronous JAVASCRIPT及びXML)のようなマークアップ言語とスクリプト言語の組み合わせ等で書かれたもののようなスクリプトを実行する。ここで、あるウェブページの参照は、(ブラウザがウェブページをレンダリングするために使用する)1以上の対応するウェブページファイルを包含し、逆に、1以上の対応するウェブページファイルは、ウェブページを包含する。
特定の実施の形態は、1以上のコンピュータシステムで実現される。図13は、例示的なコンピュータシステム1300を示す。特定の実施の形態では、1以上のコンピュータシステム1300は、本実施の形態で記載される1以上の方法の1以上のステップを実行する。特定の実施の形態では、1以上のコンピュータシステム1300は、本実施の形態で記載又は図示される機能を提供する。特定の実施の形態では、1以上のコンピュータシステム1300で実行されているソフトウェアは、本実施の形態で記載又は図示される1以上の方法の1以上のステップを実行するか、又は本実施の形態で記載又は図示される機能を提供する。特定の実施の形態は、1以上のコンピュータシステム1300の1以上の部分を含む。
本発明の開示は、適切な数のコンピュータシステム1300を含む。本発明の開示は、適切な物理的な形態を取るコンピュータシステム1300を含む。例として限定されるものではないが、コンピュータシステム1300は、埋め込みコンピュータシステム、システムオンチップ(SOC)、(たとえばコンピュータオンモジュール(COM)、システムオンモジュール(SOM)のような)シングルボードコンピュータシステム(SBC)、デスクトップコンピュータシステム、ラップトップ又はノートブックコンピュータシステム、インタラクティブキオスク、メインフレーム、コンピュータシステムのメッシュ、モバイルフォン、パーソナルデジタルアシスタント(PDA)、サーバ、又はこれらの2以上の組み合わせである場合がある。必要に応じて、コンピュータシステム1300は、単一であるか又は分散であるか、複数の位置に及ぶか、複数のコンピュータに及ぶか、或いは、1以上のネットワークにおいて1以上のクラウドコンポーネントを含むクラウドにある1以上のコンピュータシステム1300を含む。必要に応じて、1以上のコンピュータシステム1300は、実質的な空間又は時間的な制限なしに、本実施の形態で記載又は図示された1以上の方法の1以上のステップを実行する。例として限定されるものではないが、1以上のコンピュータシステム1300は、本実施の形態で記載又は図示された1以上の方法の1以上のステップをリアルタイムで実行するか、バッチモードで実行する。1以上のコンピュータシステム1300は、必要に応じて、本実施の形態で記載又は図示される1以上の方法の1以上のステップを異なる時間又は異なる位置で行う。
特定の実施の形態では、コンピュータシステム1300は、プロセッサ1302、メモリ1304、ストレージ1306、入力/出力(I/O)インタフェース1308、通信インタフェース1310及びバス1312を含む。本発明の開示は、特定の配置において特定の数の特定の構成要素を有する特定のコンピュータシステムを記載及び図示しているが、本発明の開示は、適切な配置における適切な数の構成要素を有する適切なコンピュータシステムを含む。
特定の実施の形態では、プロセッサ1302は、コンピュータプログラムを作成する命令のような命令を実行するハードウェアを含む。例として限定されるものではないが、命令を実行するため、プロセッサ1302は、内部レジスタ、内部キャッシュ、メモリ1304又はストレージ1306からの命令を検索(又はフェッチ)し、それらをデコード及び実行し、次いで、1以上の結果を内部レジスタ、内部キャッシュ、メモリ1304又はストレージ1306に書き込む。特定の実施の形態では、プロセッサ1302は、データ、命令又はアドレスのための1以上の内部キャッシュを含む。本発明の開示は、必要に応じて、適切な数の適切な内部キャッシュを含むプロセッサ1302を含む。例として限定されるものではないが、プロセッサ1302は、1以上の命令キャッシュ、1以上のデータキャッシュ、及び1以上のTLB(Translation Lookaside Buffers)を含む。命令キャッシュにおける命令は、メモリ1304又はストレージ1306における命令のコピーである、命令キャッシュは、プロセッサ1302により命令の検索を高速にする。データキャッシュにおけるデータは、プロセッサ1302で動作を実行させる命令のためのメモリ1304又はストレージ1306におけるデータのコピー、プロセッサ1302で実行するその後の命令によりアクセスするか又はメモリ1304又はストレージ1306への書き込みのためにプロセッサ1302で実行された前の命令の結果、その他の適切なデータである。データキャッシュは、プロセッサ1302による読み取り又は書き込み動作を高速にする。TLBは、プロセッサ1302について仮想的なアドレス変換を高速にする。特定の実施の形態では、プロセッサ1302は、データ、命令又はアドレスのために1以上の内部レジスタを含む。本発明の開示は、必要に応じて、任意の数の適切な内部レジスタを含むプロセッサ1302を含む。必要に応じて、プロセッサ1302は、マルチコアプロセッサである1以上のALU(Arithmetic Logic Unit)を含むか、又は1以上のプロセッサ1302を含む。本発明の開示は特定のプロセッサを記載及び図示しているが、本発明の開示は、適切なプロセッサを含んでいる。
特定の実施の形態では、メモリ1304は、プロセッサ1302が実行するための命令又はプロセッサ1302が動作するデータを記憶するメインメモリを含む。例示として限定されるものではないが、コンピュータシステム1300は、ストレージ1306又は(たとえば別のコンピュータシステム1300のような)別のソースからメモリ1304に命令をロードする。プロセッサ1302は、メモリ1304から内部レジスタ又は内部キャッシュに命令をロードする。命令を実行するため、プロセッサ1302は、内部レジスタ又は内部キャッシュからの命令を検索し、それらをデコードする。命令の実行の間又は実行の後、プロセッサ1302は、(中間又は最終的な結果である)1以上の結果を内部レジスタ又は内部キャッシュに書き込む。プロセッサ1302は、1以上の結果をメモリ1304に書き込む。特定の実施の形態では、プロセッサ1302は、(ストレージ1306又はその他とは対照的に)1以上の内部レジスタ又は内部キャッシュ或いはメモリ1304における命令のみを実行し、(ストレージ1306又はその他とは対照的に)1以上の内部レジスタ又は内部キャッシュ或いはメモリ1304におけるデータに関してのみ動作する。(アドレスバス及びデータバスをそれぞれ含む)1以上のメモリバスは、プロセッサ1302をメモリ1304に結合する。バス1312は、以下に記載されるように1以上のメモリバスを含む。特定の実施の形態では、1以上のメモリ管理ユニット(MMU)は、プロセッサ1302とメモリ1304との間にあり、プロセッサ1302により要求されたメモリ1304へのアクセスを容易にする。特定の実施の形態では、メモリ1304は、ランダムアクセスメモリ(RAM)を含む。このRAMは、必要に応じて、揮発性メモリである。必要に応じて、このRAMは、DRAM(Dynamic RAM)又はSRAM(Static RAM)である。さらに、必要に応じて、このRAMは、シングルポート又はマルチポートRAMである。本発明の開示は、適切なRAMを含んでいる。メモリ1304は、必要に応じて、1以上のメモリ1304を含む。本発明の開示は特定のメモリを記載及び図示しているが、本発明の開示は、適切なメモリを含んでいる。
特定の実施の形態では、ストレージ1306は、データ又は命令のための大容量ストレージを含む。例として限定されるものではないが、ストレージ1306は、HDD、フロッピー(登録商標)ディスクドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープ又はUSB(Universal Serial Bus)ドライブ又はこれらの2以上の組み合わせを含む。ストレージ1306は、必要に応じて、取り外し可能又は取り外し不可能(すなわち固定された)媒体を含む。ストレージ1306は、必要に応じて、コンピュータシステム1300の内部又は外部にある。特定の実施の形態では、ストレージ1306は、不揮発性の固体メモリである。特定の実施の形態では、ストレージ1306は、リードオンリメモリ(ROM)を含む。必要に応じて、このROMは、マスクプログラムROM、プログラマブルROM、(PROM)、消去可能なROM(EPROM)、電子的に消去可能なPROM(EEPROM)、電子的に変更可能なROM(EAROM)、又はフラッシュメモリ或いはこれらの2以上の組み合わせである。本発明の開示は、適切な物理的な形式を取る大容量ストレージ1306を含む。ストレージ1306は、必要に応じて、プロセッサ1302とストレージ1306間の通信を容易にする1以上の記憶制御装置を含む。必要に応じて、ストレージ1306は、1以上のストレージ1306を含む。本発明の開示は、特定のストレージを記載及び図示しているが、本発明の開示は、適切なストレージを含む。特定の実施の形態では、I/Oインタフェース1308は、コンピュータシステム1300と1以上のI/O装置との間の通信のための1以上のインタフェースを提供するハードウェア、ソフトウェア、又はその両者を含む。コンピュータシステム1300は、必要に応じて、1以上のこれらI/O装置を含む。1以上のこれらI/O装置は、ある人物とコンピュータシステム1300との間の通信を可能にする。例示として限定されるものではないが、I/O装置は、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカ、スチルカメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、別の適切なI/O装置、或いはこれらの2以上の組み合わせを含む場合がある。I/O装置は、1以上のセンサを含む。本発明の開示は、適切なI/O装置及びこれらI/O装置のために適切なI/Oインタフェースを含んでいる。必要に応じて、I/Oインタフェース1308は、プロセッサ1302が1以上のこれらのI/O装置を駆動するのを可能にする1以上のデバイス又はソフトウェアドライバを含む。I/Oインタフェース1308は、必要に応じて、1以上のI/Oインタフェース1308を含む。本発明の開示は特定のI/Oインタフェース1308を記載及び図示しているが、本発明の開示は、適切なI/Oインタフェースを含んでいる。
特定の実施の形態では、通信インタフェース1310は、コンピュータシステム1300と1以上の他のコンピュータシステム1300又は1以上のネットワークとの間で(たとえばパケットに基づく通信のような)通信のための1以上のインタフェースを提供するハードウェア、ソフトウェア又はこれらの両者を含む。例示として限定されるものではないが、通信インタフェース1310は、Eithernet又は他の有線に基づくネットワークと通信するネットワークインタフェースコントローラ(NIC)又はネットワークアダプタ、又は、WI-FIネットワークのような無線ネットワークと通信する無線NIC(WNIC)又は無線アダプタを含む。本発明の開示は、適切なネットワーク及び該ネットワークのための適切な通信インタフェース1310を含んでいる。例示として限定されるものではないが、コンピュータシステム1300は、アドホックネットワーク、PAN(Personal Area Network)、LAN(Local Area Network)、WAN(Wide Area Network)、MAN(Metropolitan Area Network)又は1以上のインターネットの部分、或いはこれらの2以上の組み合わせと通信する。1以上のこれらのネットワークの1以上の部分は、有線又は無線である。例として、コンピュータシステム1300は、(たとえばBLUETOOTH WPANのような)無線PAN(WPAN)、WI-FIネットワーク、WI-MAXネットワーク、(たとえばGSM(Global System for Mobile Communication)ネットワークのような)携帯電話網、又は他の適切な無線ネットワーク、或いはこれらの2以上の組み合わせと通信する場合がある。コンピュータシステム1300は、必要に応じて、これらのネットワークの何れかのために適切な通信インタフェース1310を含む。通信インタフェース1310は、必要に応じて、1以上の通死人タフェース1310を含む。本発明の開示は特定の通死人タフェースを記載及び図示しているが、本発明の開示は、適切な通信インタフェースを含んでいる。
特定の実施の形態では、バス1312は、コンピュータシステム1300の構成要素を互いに結合するハードウェア、ソフトウェア又はこれらの両者を含む。例示として限定されるものではないが、バス1312は、AGP(Accelerated Graphics Port)又は他のグラフィックスバス、EISA(Enhanced Industry Standard Architecture)バス、フロントサイドバス(FSB)、HYPERTRANSPORT(HT)インターコネクト、LPC(Low-Pin-Count)バス、メモリバス、MCA(Micro Channel Architecture)バス、PCI(Peripheral Component Interconnect)バス、PCI-EX(PCI-Express)バス、SATA(Serial Advanced Technology Attachment)バス、VLB(Video Electronics Standards Association local)バス、又は別の適切なバス、或いはこれらの2以上の組み合わせを含む場合がある。バス1312は、必要に応じて、1以上のバス1312を含む。本発明の開示は特定のバスを記載及び図示するものであるが、本発明の開示は、適切なバス又はインターコネクトを含んでいる。
ここで、コンピュータ読み取り可能な記録媒体は、1以上の一時的でない、有形のコンピュータ読み取り可能な記録媒体の担持構造を包含する。例示として限定されるものではないが、コンピュータ読み取り可能な記憶媒体は、必要に応じて、(たとえばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific IC)のような半導体に基づいた又は他の集積回路(IC)、ハードディスク、HDD、HHD(Hybrid Hard Drive)、光ディスク、ODD(Optical Disc Drive)、光磁気ディスク、光磁気ドライブ、フロプティカルディスク、フロプティカルディスクドライブ(FDD)、磁気テープ、ホログラフィック記憶媒体、SSD(Solid State Drive)、RAMドライブ、SECURE DIGITALカード、SECURE DIGITALドライブ、または別の適切なコンピュータ読み取り可能な記憶媒体、或いはこれらの2以上の組み合わせを含む場合がある。ここで、コンピュータ読み取り可能な記憶媒体に対する言及は、35U.S.C.§101の下での特許の保護のために適格でない媒体を排除する。ここで、コンピュータ読み取り可能な記憶媒体に対する言及は、35U.S.C.§101の下での特許の保護のために適格でないという点で、(いわば伝搬する電気又は電磁信号のような)信号伝達の一時的な形態を排除する。
本発明の開示は、適切な記憶を実現する1以上のコンピュータ読み取り可能な記憶媒体を含んでいる。特定の実施の形態では、コンピュータ読み取り可能な記憶媒体は、必要に応じて、(たとえば1以上の内部レジスタ又はキャッシュのような)1以上のプロセッサ1302の部分、1以上のメモリ1304の部分、1以上のストレージ1306の部分、又はこれらの組み合わせを実現する。特定の実施の形態では、コンピュータ読み取り可能な記憶媒体は、RAM又はROMを実現する。特定の実施の形態では、コンピュータ読み取り可能な記憶媒体は、揮発性又は持続性のメモリを実現する。特定の実施の形態では、1以上のコンピュータ読み取り可能な記憶媒体は、ソフトウェアを統合する。ここで、ソフトウェアに対する言及は、1以上のアプリケーション、バイトコード、1以上のコンピュータプログラム、1以上の実行ファイル、1以上の命令、ロジック、マシンコード、1以上のスクリプト、又はソースコードを包含する場合があり、逆に、これら1以上のアプリケーション、バイトコード、1以上のコンピュータプログラム、1以上の実行ファイル、1以上の命令、ロジック、マシンコード、1以上のスクリプト、又はソースコードがソフトウェアを示す場合がある。特定の実施の形態では、ソフトウェアは、1以上のアプリケーションプログラミングインタフェース(API)を含む。この開示は、適切なプログラミング言語又はプログラミング言語の組み合わせで書かれるか又は表現される適切なソフトウェアを含む。特定の実施の形態では、ソフトウェアは、ソースコード又はオブジェクトコードとして表現される。特定の実施の形態では、ソフトウェアは、たとえばC,Perlのような高水準プログラミング言語、又はその適切な拡張で表現される。特定の実施の形態では、ソフトウェアは、アセンブリ言語(又はマシンコード)のような低水準プログラミング言語で表現される。特定の実施の形態では、ソフトウェアは、JAVA(登録商標)で表現される。特定の実施の形態では、ソフトウェアは、HTML(Hyper Text Markup Language)、XML(Extensible Markup Language)又は他の適切なマークアップ言語で表現される。
本発明の開示は、当業者が理解することができる例示的な実施の形態に対する全ての変形、置換、変更を包含するものである。同様に、必要に応じて、特許請求の範囲は、当業者が理解する例示的な実施の形態に対する全ての変形、置換及び変更を包含する。
以下、本願発明の特徴を付記として示す。
(付記1)
1以上のコンピュータ装置により、
ソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析するステップと、前記ソフトウェアモジュールは、1以上の数値の変数、1以上の文字列の変数、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列に関する結果を生成1以上の第一の演算、及び前記1以上の文字列の変数のうつの特定の変数に適用され、数値又は文字列の変数を生成する1以上の第二の演算を備え、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、
前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定するステップと、
前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定するステップと、
前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現するステップと、
前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現するステップと、
全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数の1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップと、
を含むことを特徴とする方法。
(付記2)
前記1以上の数値の変数は、1以上の入力の数値の変数と1以上の中間の数値の変数とを含み、
前記1以上の文字列の変数は、1以上の入力の文字列の変数と1以上の中間の文字列の変数とを含み、
前記1以上の入力の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の入力の文字列の変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの仕様に基づいて決定され、
前記1以上の中間の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の中間の文字列に変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの記号的実行を行うことで決定される、
付記1記載の方法。
(付記3)
前記第二の数値に関する制約は、前記第一の文字列に関する制約と前記第二の演算とに基づいて推定され、
前記第二の文字列に関する制約は、前記第一の数値に関する制約と前記第一の演算とに基づいて推定される、
付記1記載の方法。
(付記4)
前記第二の数値に関する制約と前記第二の文字列に関する制約は、ソフトウェアモジュールを実現するプログラミング言語と、前記ソフトウェアモジュールが実行されるランタイム環境との仕様に基づいて更に推定される、
付記3記載の方法。
(付記5)
全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満たす解を発見することを試みるステップは、
前記1以上の数値の変数と前記1以上の文字列の変数とについて異なる可能性のある値を繰返し試み、ある解が発見されるか、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とが満たされないと判定されるか、又はある繰り返し回数が閾値に到達するまで、前記異なる可能性のある値が前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約の全てを満たす解を生成するかを検査するステップと、
前記解が発見された場合、前記1以上の数値の変数と前記1以上の文字列の変数の値を出力するステップと、
を含む付記1記載の方法。
(付記6)
前記ソフトウェアモジュールは、1以上の条件分岐点と前記1以上の条件分岐点から得られる前記1以上の実行経路とを含み、
前記1以上の条件分岐点のそれぞれは、前記1以上の数値の変数と前記1以上の文字列の変数とにより特定される分岐条件に関連され、
前記ソフトウェアモジュールの実行の間、前記1以上の条件分岐点のそれぞれで、前記ソフトウェアモジュールは、前記1以上の条件分岐点に関連する分岐条件が満たされるかに依存して、前記1以上の実行経路のうちの実行経路に進む、
付記1記載の方法。
(付記7)
前記可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップと、
前記ソフトウェアモジュールの前記1以上の数値の変数と前記1以上の文字列の変数のうちの特定の変数に適用される1以上の制約のセットを決定するステップと、それぞれの制約のセットは、前記ソフトウェアモジュールの前記1以上の実行経路のうちの特定の実行経路に対応し、前記制約が満たされた場合、前記ソフトウェアモジュールに対応する実行経路の終わりに到達させ、
前記それぞれの制約のセットを満たす1以上の解を発見するステップと、
前記解に基づいて前記ソフトウェアモジュールについて1以上のテスト入力値のセットを生成するステップと、
それぞれのテスト入力値のセットを前記ソフトウェアモジュールに適用することで、増加されるテスト範囲で前記ソフトウェアモジュールを検査するステップと、
を含む付記6記載の方法。
(付記8)
前記それぞれの制約のセットは、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とに基づいて決定される、
付記7記載の方法。
(付記9)
前記可能性のある値について前記ソフトウェアモジュールを検査するステップは、前記ソフトウェアモジュールに記号的実行を行い、制約のセットを取得するステップを更に含む、
付記7記載の方法。
(付記10)
1以上のプロセッサにより実行可能な命令を含むメモリと、
前記メモリに結合され、前記命令を実行する1以上のプロセッサとを備えるシステムであって、
前記1以上のプロセッサは、前記命令を実行したときに、
1以上の数値の変数、1以上の文字列の変数、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列に関する結果を生成1以上の第一の演算、及び前記1以上の文字列の変数のうちの特定の変数に適用され、数値又は文字列の変数を生成する1以上の第二の演算を有するソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析するステップと、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、
前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定するステップと、
前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定するステップと、
前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現するステップと、
前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現するステップと、
全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数の1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップと、
実行することを特徴とするシステム。
(付記11)
前記1以上の数値の変数は、1以上の入力の数値の変数と1以上の中間の数値の変数とを含み、
前記1以上の文字列の変数は、1以上の入力の文字列の変数と1以上の中間の文字列の変数とを含み、
前記1以上の入力の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の入力の文字列の変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの仕様に基づいて決定され、
前記1以上の中間の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の中間の文字列に変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの記号的実行を行うことで決定される、
付記10記載のシステム。
(付記12)
前記第二の数値に関する制約は、前記第一の文字列に関する制約と前記第二の演算とに基づいて推定され、
前記第二の文字列に関する制約は、前記第一の数値に関する制約と前記第一の演算とに基づいて推定される、
付記10記載のシステム。
(付記13)
前記第二の数値に関する制約と前記第二の文字列に関する制約は、ソフトウェアモジュールを実現するプログラミング言語と、前記ソフトウェアモジュールが実行されるランタイム環境との仕様に基づいて更に推定される、
付記12記載のシステム。
(付記14)
全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満たす解を発見することを試みるステップは、
前記1以上の数値の変数と前記1以上の文字列の変数とについて異なる可能性のある値を繰返し試み、ある解が発見されるか、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とが満たされないと判定されるか、又はある繰り返し回数が閾値に到達するまで、前記異なる可能性のある値が前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約の全てを満たす解を生成するかを検査するステップと、
前記解が発見された場合、前記1以上の数値の変数と前記1以上の文字列の変数の値を出力するステップと、
を含む付記10記載のシステム。
(付記15)
前記ソフトウェアモジュールは、1以上の条件分岐点と前記1以上の条件分岐点から得られる前記1以上の実行経路とを含み、
前記1以上の条件分岐点のそれぞれは、前記1以上の数値の変数と前記1以上の文字列の変数とにより特定される分岐条件に関連され、
前記ソフトウェアモジュールの実行の間、前記1以上の条件分岐点のそれぞれで、前記ソフトウェアモジュールは、前記1以上の条件分岐点に関連する分岐条件が満たされるかに依存して、前記1以上の実行経路のうちの実行経路に進む、
付記10記載のシステム。
(付記16)
前記可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップは、
前記ソフトウェアモジュールの前記1以上の数値の変数と前記1以上の文字列の変数のうちの特定の変数に適用される1以上の制約のセットを決定するステップと、それぞれの制約のセットは、前記ソフトウェアモジュールの前記1以上の実行経路のうちの特定の実行経路に対応し、前記制約が満たされた場合、前記ソフトウェアモジュールに、対応する実行経路の終わりに到達させ、
前記それぞれの制約のセットを満たす1以上の解を発見するステップと、
前記解に基づいて前記ソフトウェアモジュールについて1以上のテスト入力値のセットを生成するステップと、
それぞれのテスト入力値のセットを前記ソフトウェアモジュールに適用することで、増加されるテスト範囲で前記ソフトウェアモジュールを検査するステップと、
を含む付記15記載のシステム。
(付記17)
前記それぞれの制約のセットは、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とに基づいて決定される、
付記16記載のシステム。
(付記18)
前記可能性のある値について前記ソフトウェアモジュールを検査するステップは、前記ソフトウェアモジュールに記号的実行を行い、制約のセットを取得するステップを更に含む、
付記16記載のシステム。
(付記19)
1以上のコンピュータ装置に、
ソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析するステップと、前記ソフトウェアモジュールは、1以上の数値の変数、1以上の文字列の変数、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列に関する結果を生成1以上の第一の演算、及び前記1以上の文字列の変数のうつの特定の変数に適用され、数値又は文字列の変数を生成する1以上の第二の演算を備え、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、
前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定するステップと、
前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定するステップと、
前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現するステップと、
前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現するステップと、
全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数の1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップと、
を実行させる命令を含むプログラムを記録したコンピュータ読み取り可能な記録媒体。
(付記20)
前記1以上の数値の変数は、1以上の入力の数値の変数と1以上の中間の数値の変数とを含み、
前記1以上の文字列の変数は、1以上の入力の文字列の変数と1以上の中間の文字列の変数とを含み、
前記1以上の入力の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の入力の文字列の変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの仕様に基づいて決定され、
前記1以上の中間の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の中間の文字列に変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの記号的実行を行うことで決定される、
付記19記載のコンピュータ読み取り可能な記録媒体。
(付記21)
前記第二の数値に関する制約は、前記第一の文字列に関する制約と前記第二の演算とに基づいて推定され、
前記第二の文字列に関する制約は、前記第一の数値に関する制約と前記第一の演算とに基づいて推定される、
付記19記載のコンピュータ読み取り可能な記録媒体。
(付記22)
前記第二の数値に関する制約と前記第二の文字列に関する制約は、ソフトウェアモジュールを実現するプログラミング言語と、前記ソフトウェアモジュールが実行されるランタイム環境との仕様に基づいて更に推定される、
付記21記載のコンピュータ読み取り可能な記録媒体。
(付記23)
全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満たす解を発見することを試みるステップは、
前記1以上の数値の変数と前記1以上の文字列の変数とについて異なる可能性のある値を繰返し試み、ある解が発見されるか、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とが満たされないと判定されるか、又はある繰り返し回数が閾値に到達するまで、前記異なる可能性のある値が前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約の全てを満たす解を生成するかを検査するステップと、
前記解が発見された場合、前記1以上の数値の変数と前記1以上の文字列の変数の値を出力するステップと、
を含む付記19記載のコンピュータ読み取り可能な記録媒体。
(付記24)
前記ソフトウェアモジュールは、1以上の条件分岐点と前記1以上の条件分岐点から得られる前記1以上の実行経路とを含み、
前記1以上の条件分岐点のそれぞれは、前記1以上の数値の変数と前記1以上の文字列の変数とにより特定される分岐条件に関連され、
前記ソフトウェアモジュールの実行の間、前記1以上の条件分岐点のそれぞれで、前記ソフトウェアモジュールは、前記1以上の条件分岐点に関連する分岐条件が満たされるかに依存して、前記1以上の実行経路のうちの実行経路に進む、
付記19記載のコンピュータ読み取り可能な記録媒体。
(付記25)
前記可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップと、
前記ソフトウェアモジュールの前記1以上の数値の変数と前記1以上の文字列の変数のうちの特定の変数に適用される1以上の制約のセットを決定するステップと、それぞれの制約のセットは、前記ソフトウェアモジュールの前記1以上の実行経路のうちの特定の実行経路に対応し、前記制約が満たされた場合、前記ソフトウェアモジュールに対応する実行経路の終わりに到達させ、
前記それぞれの制約のセットを満たす1以上の解を発見するステップと、
前記解に基づいて前記ソフトウェアモジュールについて1以上のテスト入力値のセットを生成するステップと、
それぞれのテスト入力値のセットを前記ソフトウェアモジュールに適用することで、増加されるテスト範囲で前記ソフトウェアモジュールを検査するステップと、
を含む付記24記載のコンピュータ読み取り可能な記録媒体。
(付記26)
前記それぞれの制約のセットは、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とに基づいて決定される、
付記25記載のコンピュータ読み取り可能な記録媒体。
(付記27)
前記可能性のある値について前記ソフトウェアモジュールを検査するステップは、前記ソフトウェアモジュールに記号的実行を行い、制約のセットを取得するステップを更に含む、
付記25記載のコンピュータ読み取り可能な記録媒体。
(付記28)
ソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析する手段と、前記ソフトウェアモジュールは、1以上の数値の変数、1以上の文字列の変数、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列に関する結果を生成1以上の第一の演算、及び前記1以上の文字列の変数のうつの特定の変数に適用され、数値又は文字列の変数を生成する1以上の第二の演算を備え、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、
前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定する手段と、
前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定する手段と、
前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現する手段と、
前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現する手段と、
全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数の1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査する手段と、
を備えることを特徴とするシステム。
200:システム
202:交差制約発生器
204:制約解法手段
206:記号的実行
212:ソフトウェアモジュール
214:指定された制約

Claims (20)

  1. 1以上のコンピュータ装置が実行する方法であって、
    ソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析するステップであって、前記ソフトウェアモジュールは、1以上の数値の変数と、1以上の文字列の変数と、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列結果を生成する1以上の第一の演算と、前記1以上の文字列の変数のうの特定の変数に適用され、数値又は文字列の変数の結果を生成する1以上の第二の演算とを利用し、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の文字列の変数のうちの特定の変数に適用される、ステップと
    前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定するステップと、
    前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定するステップと、
    前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現するステップと、
    前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現するステップと、
    全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数についての1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップ
    を含むことを特徴とする方法。
  2. 前記1以上の数値の変数は、1以上の入力の数値の変数と1以上の中間の数値の変数とを含み、
    前記1以上の文字列の変数は、1以上の入力の文字列の変数と1以上の中間の文字列の変数とを含み、
    前記1以上の入力の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の入力の文字列の変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの仕様に基づいて決定され、
    前記1以上の中間の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の中間の文字列に変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの記号的実行を行うことで決定される、請求項1記載の方法。
  3. 前記第二の数値に関する制約は、前記第一の文字列に関する制約と前記第二の演算とに基づいて推定され、
    前記第二の文字列に関する制約は、前記第一の数値に関する制約と前記第一の演算とに基づいて推定される、請求項1記載の方法。
  4. 前記第二の数値に関する制約と前記第二の文字列に関する制約は、ソフトウェアモジュールを実現するプログラミング言語と、前記ソフトウェアモジュールが実行されるランタイム環境との仕様に基づいて更に推定される、請求項3記載の方法。
  5. 前記ソフトウェアモジュールを検査するステップは、
    前記1以上の数値の変数と前記1以上の文字列の変数とについて異なる可能性のある値を繰返し試み、ある解が発見されるか、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とが満たされないと判定されるか、又は前記の繰返し試みた回数が閾値に到達するまで、前記異なる可能性のある値が前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約の全てを満たす解をもたらしたか否かを検査するステップと、
    前記解が発見された場合、前記1以上の数値の変数と前記1以上の文字列の変数の値を出力するステップ
    を含む請求項1記載の方法。
  6. 前記ソフトウェアモジュールは、1以上の条件分岐点と前記1以上の条件分岐点から得られる前記1以上の実行経路とを含み、
    前記1以上の条件分岐点のそれぞれは、前記1以上の数値の変数と前記1以上の文字列の変数とにより特定される分岐条件に関連付けられ、
    前記ソフトウェアモジュールの実行中に、前記1以上の条件分岐点のそれぞれにおいて、前記ソフトウェアモジュールは、前記1以上の条件分岐点に関連する分岐条件が満たされるか否かに依存して、前記1以上の実行経路のうちの別の実行経路に進む、請求項1記載の方法。
  7. 前記1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップが、
    前記ソフトウェアモジュールの前記1以上の数値の変数と前記1以上の文字列の変数のうちの特定の変数に適用される1以上の制約のセットを決定するステップであって、前記制約のセットのそれぞれは、前記ソフトウェアモジュールの前記1以上の実行経路のうちの特定の実行経路に対応し、前記制約が満たされた場合、前記ソフトウェアモジュールを、対応する実行経路の終わりに到達させる、ステップと
    記制約のセットそれぞれを満たす1以上の解を発見するステップと、
    前記解に基づいて前記ソフトウェアモジュールについて1以上のテスト入力値のセットを生成するステップと、
    それぞれのテスト入力値のセットを前記ソフトウェアモジュールに適用することで、増加したテスト範囲で前記ソフトウェアモジュールを検査するステップ
    を含む請求項6記載の方法。
  8. 前記それぞれの制約のセットは、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とに基づいて決定される、請求項7記載の方法。
  9. 前記1つ以上の可能性のある値について前記ソフトウェアモジュールを検査するステップが、前記ソフトウェアモジュールに記号的実行を行い、制約のセットを取得するステップを更に含む、請求項7記載の方法。
  10. 1以上のプロセッサにより実行可能な命令を含むメモリと、
    前記メモリに結合され、前記命令を実行する1以上のプロセッサと
    を備えるシステムであって、前記1以上のプロセッサは、前記命令を実行する場合に方法を実行し、前記方法は、
    ソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析するステップであって、前記ソフトウェアモジュールは、1以上の数値の変数と、1以上の文字列の変数と、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列結果を生成する1以上の第一の演算と、前記1以上の文字列の変数のうちの特定の変数に適用され、数値又は文字列の変数の結果を生成する1以上の第二の演算とを利用し、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の文字列の変数のうちの特定の変数に適用される、ステップと
    前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定するステップと、
    前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定するステップと、
    前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現するステップと、
    前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現するステップと、
    全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数についての1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップと
    を有する、ことを特徴とするシステム。
  11. 前記1以上の数値の変数は、1以上の入力の数値の変数と1以上の中間の数値の変数とを含み、
    前記1以上の文字列の変数は、1以上の入力の文字列の変数と1以上の中間の文字列の変数とを含み、
    前記1以上の入力の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の入力の文字列の変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの仕様に基づいて決定され、
    前記1以上の中間の数値の変数のうちの特定の変数に適用される前記第一の数値に関する制約と、前記1以上の中間の文字列に変数のうちの特定の変数に適用される前記第一の文字列に関する制約とは、前記ソフトウェアモジュールの記号的実行を行うことで決定される、
    請求項10記載のシステム。
  12. 前記第二の数値に関する制約は、前記第一の文字列に関する制約と前記第二の演算とに基づいて推定され、
    前記第二の文字列に関する制約は、前記第一の数値に関する制約と前記第一の演算とに基づいて推定される、
    請求項10記載のシステム。
  13. 前記第二の数値に関する制約と前記第二の文字列に関する制約は、ソフトウェアモジュールを実現するプログラミング言語と、前記ソフトウェアモジュールが実行されるランタイム環境との仕様に基づいて更に推定される、
    請求項12記載のシステム。
  14. 前記ソフトウェアモジュールを検査するステップは、
    前記1以上の数値の変数と前記1以上の文字列の変数とについて異なる可能性のある値を繰返し試み、ある解が発見されるか、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とが満たされないと判定されるか、又は前記の繰返し試みた回数が閾値に到達するまで、前記異なる可能性のある値が前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約の全てを満たす解をもたらしたか否かを検査するステップと、
    前記解が発見された場合、前記1以上の数値の変数と前記1以上の文字列の変数の値を出力するステップ
    を含む請求項10記載のシステム。
  15. 前記ソフトウェアモジュールは、1以上の条件分岐点と前記1以上の条件分岐点から得られる前記1以上の実行経路とを含み、
    前記1以上の条件分岐点のそれぞれは、前記1以上の数値の変数と前記1以上の文字列の変数とにより特定される分岐条件に関連付けられ、
    前記ソフトウェアモジュールの実行中に、前記1以上の条件分岐点のそれぞれにおいて、前記ソフトウェアモジュールは、前記1以上の条件分岐点に関連する分岐条件が満たされるか否かに依存して、前記1以上の実行経路のうちの別の実行経路に進む、請求項10記載のシステム。
  16. 前記1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップが、
    前記ソフトウェアモジュールの前記1以上の数値の変数と前記1以上の文字列の変数のうちの特定の変数に適用される1以上の制約のセットを決定するステップであって、前記制約のセットのそれぞれは、前記ソフトウェアモジュールの前記1以上の実行経路のうちの特定の実行経路に対応し、前記制約が満たされた場合、前記ソフトウェアモジュールに、対応する実行経路の終わりに到達させる、ステップと
    記制約のセットそれぞれを満たす1以上の解を発見するステップと、
    前記解に基づいて前記ソフトウェアモジュールについて1以上のテスト入力値のセットを生成するステップと、
    それぞれのテスト入力値のセットを前記ソフトウェアモジュールに適用することで、増加したテスト範囲で前記ソフトウェアモジュールを検査するステップ
    を含む請求項15記載のシステム。
  17. 前記それぞれの制約のセットは、前記第一及び第二の数値に関する制約と前記第一及び第二の文字列に関する制約とに基づいて決定される、
    請求項16記載のシステム。
  18. 前記1つ以上の可能性のある値について前記ソフトウェアモジュールを検査するステップが、前記ソフトウェアモジュールに記号的実行を行い、制約のセットを取得するステップを更に含む、請求項16記載のシステム。
  19. 1以上のコンピュータ装置に方法を実行させるプログラムを記録した記録媒体であって、前記方法は
    ソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析するステップであって、前記ソフトウェアモジュールは、1以上の数値の変数、1以上の文字列の変数、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列結果を生成する1以上の第一の演算と、前記1以上の文字列の変数のうの特定の変数に適用され、数値又は文字列の変数の結果を生成する1以上の第二の演算とを利用し、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の文字列の変数のうちの特定の変数に適用される、ステップと
    前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定するステップと、
    前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定するステップと、
    前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現するステップと、
    前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現するステップと、
    全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数についての1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査するステップと、
    含む、コンピュータ読み取り可能な記録媒体。
  20. ソフトウェアモジュールに関連する1以上の第一の数値に関する制約と1以上の第一の文字列に関する制約とを分析する手段であって、前記ソフトウェアモジュールは、1以上の数値の変数と、1以上の文字列の変数と、前記1以上の数値の変数のうちの特定の変数に適用され、数値又は文字列結果を生成する1以上の第一の演算と、前記1以上の文字列の変数のうの特定の変数に適用され、数値又は文字列の変数の結果を生成する1以上の第二の演算とを利用し、前記第一の数値に関する制約は、前記1以上の数値の変数のうちの特定の変数に適用され、前記第一の文字列に関する制約は、前記1以上の文字列の変数のうちの特定の変数に適用される、手段と
    前記1以上の文字列の変数のうちの特定の変数に適用される1以上の第二の数値に関する制約を推定する手段と、
    前記1以上の数値の変数のうちの特定の変数に適用される1以上の第二の文字列に関する制約を推定する手段と、
    前記第一の数値に関する制約と前記第二の数値に関する制約のそれぞれを式で表現する手段と、
    前記第一の文字列に関する制約と前記第二の文字列に関する制約のそれぞれを有限状態マシンで表現する手段と、
    全ての前記第一及び第二の数値に関する制約と全ての前記第一及び第二の文字列に関する制約とを満足する前記1以上の数値の変数と前記1以上の文字列の変数とのうちの特定の変数についての1以上の値を含む解を発見することを試みることで、1以上の可能性のあるエラーについて前記ソフトウェアモジュールを検査する手段
    を備えることを特徴とするシステム。
JP2011156021A 2010-07-16 2011-07-14 ソフトウェアモジュールを検査するためのシステム、方法及び記憶媒体 Active JP5786513B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/837,974 US20120017119A1 (en) 2010-07-16 2010-07-16 Solving Hybrid Constraints to Generate Test Cases for Validating a Software Module
US12/837,974 2010-07-16

Publications (2)

Publication Number Publication Date
JP2012022688A JP2012022688A (ja) 2012-02-02
JP5786513B2 true JP5786513B2 (ja) 2015-09-30

Family

ID=44508742

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011156021A Active JP5786513B2 (ja) 2010-07-16 2011-07-14 ソフトウェアモジュールを検査するためのシステム、方法及び記憶媒体

Country Status (3)

Country Link
US (1) US20120017119A1 (ja)
EP (1) EP2420931B1 (ja)
JP (1) JP5786513B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210045122A (ko) * 2019-10-16 2021-04-26 연세대학교 산학협력단 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8504997B2 (en) * 2009-03-19 2013-08-06 Fujitsu Limited Environment data refinement based on static analysis and symbolic execution
US8479171B2 (en) * 2010-05-24 2013-07-02 Fujitsu Limited Generating test sets using intelligent variable selection and test set compaction
US8572574B2 (en) 2010-07-16 2013-10-29 Fujitsu Limited Solving hybrid constraints to validate specification requirements of a software module
US8863292B2 (en) * 2011-12-07 2014-10-14 International Business Machines Corporation Interactive analysis of a security specification
GB2501265A (en) 2012-04-17 2013-10-23 Ibm Constructing instructions for a mainframe by embedding programming in job control language, and executing those instructions at the mainframe
US9529699B2 (en) * 2013-06-11 2016-12-27 Wipro Limited System and method for test data generation and optimization for data driven testing
US10872187B2 (en) 2013-10-11 2020-12-22 Carnegie Mellon University Verified runtime validation of verified cyber-physical system models
CN104731696B (zh) * 2013-12-19 2017-10-10 腾讯科技(深圳)有限公司 定位程序代码中bug的方法及相关装置
US9436587B2 (en) * 2014-01-31 2016-09-06 Fujitsu Limited Test context generation
EP3130123B1 (en) * 2014-04-11 2021-07-07 HDIV Security, S.L. Detection of manipulation of applications
US10423793B2 (en) * 2014-06-19 2019-09-24 Entit Software Llc Install runtime agent for security test
US9152543B1 (en) * 2014-06-28 2015-10-06 Fujitsu Limited Symbolic execution with automatic abstractions
US9892027B2 (en) * 2014-07-09 2018-02-13 Fujitsu Limited Event-driven software testing
US10275236B2 (en) * 2014-09-04 2019-04-30 Home Box Office, Inc. Generating related templated files
EP3249530A4 (en) * 2015-01-22 2018-01-24 Fujitsu Limited Application function expansion method, application function expansion program, and application function expansion device
US10169217B2 (en) * 2016-04-06 2019-01-01 General Electric Company System and method for test generation from software specification models that contain nonlinear arithmetic constraints over real number ranges
JP6954806B2 (ja) * 2017-11-06 2021-10-27 株式会社日立社会情報サービス 不具合検出装置、及び不具合検出方法
CN109739767A (zh) * 2018-12-29 2019-05-10 北京润科通用技术有限公司 一种人机交互界面逻辑功能测试方法及装置
US11200151B1 (en) 2021-03-12 2021-12-14 Sas Institute Inc. Graphical user interface and debugger system for selecting and testing alterations to source code for software applications

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7519952B2 (en) * 2003-07-28 2009-04-14 International Business Machines Corporation Detecting an integrity constraint violation in a database by analyzing database schema, application and mapping and inserting a check into the database and application
US7945898B1 (en) * 2006-03-16 2011-05-17 Avaya Inc. Handling loops in programs and examining feasible software behavior for detecting malicious code
US7512634B2 (en) * 2006-06-05 2009-03-31 Tarari, Inc. Systems and methods for processing regular expressions
US7831606B2 (en) * 2006-12-08 2010-11-09 Pandya Ashish A Signature search architecture for programmable intelligent search memory
US20090089759A1 (en) * 2007-10-02 2009-04-02 Fujitsu Limited System and Method for Providing Symbolic Execution Engine for Validating Web Applications
US8302080B2 (en) * 2007-11-08 2012-10-30 Ntt Docomo, Inc. Automated test input generation for web applications
US8359576B2 (en) * 2008-11-14 2013-01-22 Fujitsu Limited Using symbolic execution to check global temporal requirements in an application
US8515891B2 (en) * 2010-11-19 2013-08-20 Microsoft Corporation Symbolic finite automata

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210045122A (ko) * 2019-10-16 2021-04-26 연세대학교 산학협력단 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법

Also Published As

Publication number Publication date
EP2420931A1 (en) 2012-02-22
EP2420931B1 (en) 2017-11-22
JP2012022688A (ja) 2012-02-02
US20120017119A1 (en) 2012-01-19

Similar Documents

Publication Publication Date Title
JP5786513B2 (ja) ソフトウェアモジュールを検査するためのシステム、方法及び記憶媒体
JP5786512B2 (ja) インジェクション攻撃を検出するためのセキュリティ・ソフトウェア・モジュールを検証するためのハイブリッド制約条件の求解
JP5786511B2 (ja) ソフトウェア・モジュールの仕様要件を検証するためのハイブリッド制約条件の求解
JP5652326B2 (ja) ソフトウェアモジュールのテスト方法及びシステム
JP5742521B2 (ja) ウェブアプリケーションのフォームの自動テストのための方法及びプログラム
US8918678B2 (en) Functional testing of a processor design
JP5803690B2 (ja) 記号的実行を用いてc++プログラムを検証するソフトウェアアーキテクチャ
JP5821651B2 (ja) 記号的実行を用いてc++プログラムを検証するための方法及びシステム
US9507943B1 (en) Analysis tool for data security
US20090089759A1 (en) System and Method for Providing Symbolic Execution Engine for Validating Web Applications
US20110307867A1 (en) Creating Hierarchical Message Sequence Charts for Visualizing User-Interactive Applications
US20120192162A1 (en) Optimizing Handlers for Application-Specific Operations for Validating C++ Programs Using Symbolic Execution
WO2012079832A1 (en) Formal analysis of the quality and conformance of information flow downgraders
CN108228312B (zh) 通过解释器执行代码的系统和方法
Kim et al. {FuzzOrigin}: Detecting {UXSS} vulnerabilities in browsers through origin fuzzing
Zhang et al. A distributed framework for demand-driven software vulnerability detection
Baradaran et al. A unit-based symbolic execution method for detecting memory corruption vulnerabilities in executable codes
JP2012018675A (ja) アプリケーション分析用のデータベースモデルを生成するシステム及び方法
Windsor et al. High‐coverage metamorphic testing of concurrency support in C compilers
Duraibi et al. A Survey of Symbolic Execution Tools.
US20240289131A1 (en) System and method for code execution on browser extension
Bernhard et al. DarthShader: Fuzzing WebGPU Shader Translators & Compilers

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140304

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141209

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150109

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150630

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150713

R150 Certificate of patent or registration of utility model

Ref document number: 5786513

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150