JP5652326B2 - ソフトウェアモジュールのテスト方法及びシステム - Google Patents

ソフトウェアモジュールのテスト方法及びシステム Download PDF

Info

Publication number
JP5652326B2
JP5652326B2 JP2011115090A JP2011115090A JP5652326B2 JP 5652326 B2 JP5652326 B2 JP 5652326B2 JP 2011115090 A JP2011115090 A JP 2011115090A JP 2011115090 A JP2011115090 A JP 2011115090A JP 5652326 B2 JP5652326 B2 JP 5652326B2
Authority
JP
Japan
Prior art keywords
variable
software module
conditional branch
variables
input
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
JP2011115090A
Other languages
English (en)
Other versions
JP2011248887A (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 JP2011248887A publication Critical patent/JP2011248887A/ja
Application granted granted Critical
Publication of JP5652326B2 publication Critical patent/JP5652326B2/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)
  • Debugging And Monitoring (AREA)

Description

この開示は概して、ソフトウェアモジュールのテスト及び検証を行うことに関する。
ソフトウェアアプリケーションは幾つもの数のモジュールを含むことができ、各モジュールが個々にテストあるいは検証されている。ソフトウェアモジュールは、手動あるいは自動的にテストあるいは検証され得る。手動の場合、人(例えば、ソフトウェアテストエンジニア)が、ソフトウェアモジュールのテストケースを該モジュールの設計仕様に基づいて手作業で設計し、該テストケースの下で該モジュールを実行し、テストケースに合致しないモジュール挙動又は出力を調べる。自動の場合、コンピュータソフトウェア又はハードウェアとして実装されたソフトウェアテストツールが、テスト対象のソフトウェアモジュールのテストケースを自動生成し、テストケースをシミュレートしながらその被テストモジュールを実行し、テストケースに合致しないモジュール挙動又は出力を調べ得る。
ソフトウェアモジュールのテスト又は検証を支援し得る方法及びシステムが開示される。
特定の一態様によれば、1つ以上の計算装置によって実行される方法は、ソフトウェアモジュールにアクセスすることを含む。前記ソフトウェアモジュールは、1つ以上の入力変数と、1つ以上の中間変数と、1つ以上の条件付き分岐点とを有する。各中間変数の値は、前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する。各条件付き分岐点は、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかは、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する。前記ソフトウェアモジュールの実行中、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進む。当該方法はまた、前記1つ以上の入力変数に対応する1つ以上の変数セットを構築することを含む。各変数セットは、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含む。当該方法はまた、各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算し、前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択することを含む。当該方法は更に、前記第1変数セットの前記入力変数に第1記号値を割り当て、前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行し、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成することを含み、前記第1テストケースセットを用いて前記ソフトウェアモジュールが検証される。
特定の他の一態様によれば、1つ以上の計算装置によって実行される方法は、ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスすることを含む。前記ソフトウェアモジュールは、1つ以上の変数と1つ以上の条件付き分岐点とを有する。各条件付き分岐点は、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかは、前記少なくとも1つの変数の値に依存する。前記ソフトウェアモジュールの実行中、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進む。前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有する。当該方法はまた、前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去することを含む。当該方法はまた、残りのテストケースから1つ以上の第1テストケースを選択することを含み、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースである。当該方法は更に、前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択することを含み、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースである。選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールがテストされる。
一例に係るソフトウェアモジュール上で記号的実行を行うステップを表す実行フロー例を示す図である。 ソフトウェアモジュールの入力変数を記号的に実行する順序を決定する方法例を示す図である。 ソフトウェアモジュールの入力変数を記号的に実行する順序を決定するシステム例を示す図である。 複数レベルのネスト化された条件付き分岐を有する一例に係るソフトウェアモジュールの実行経路を示す図である。 テストケースセットのサイズを縮小する方法例を示す図である。 テストケースセットのサイズを縮小するシステム例を示す図である。 一例に係るソフトウェアモジュールの入力変数の例のテスト値の例を表すグラフ例を示す図である。 一例に係るソフトウェアモジュールの実行経路上でのテスト網羅率を示す二部グラフ例を示す図である。 一例に係るネットワーク環境を示す図である。 一例に係るコンピュータシステムを示す図である。
以下、図面に示す幾つかの実施形態を参照して詳細に説明する。以下の説明においては、この開示の十分な理解を提供するため、数多くの具体的詳細事項を説明する。しかしながら、ここで開示される事項は、それら具体的詳細事項の一部又は全てを用いずして実施されることもある。また、この開示をいたずらに不明瞭にしないよう、周知の処理ステップ及び/又は構造は詳細には説明しない。さらに、ここでは特定の実施形態との関連で説明するが、理解されるように、ここでの説明は、本開示をそのような実施形態に限定することを意図するものではない。逆に、ここでの説明は、添付の請求項により定められる本開示の精神及び範囲に含まれ得る代替例、変形例及び均等例に及ぶものである。
ソフトウェアモジュールをテストあるいは検証するため、典型的に、例えば該モジュールの設計仕様又はその他の種類の要求(例えば、機能上、挙動上若しくは性能上の要求)に基づいて、該モジュールのためのテストケースが生成される。その後、テストケースの下でソフトモジュールが実行され、該モジュールの挙動又は出力がテストケースに対して検証される。特定の実施形態において、各テストケースは、一組の入力値と、該入力値に関連してソフトウェアモジュール上で実行される具体的なテストを記述する情報とを含み得る。特定の実施形態において、入力値は、ソフトモジュールがテストされているときに該モジュールの入力変数に割り当てられ得る。各入力値は、モジュールに特定の応答(例えば、特定の出力値を提供する)をさせるように選択され得る。テスト情報は、ソフトウェアモジュールのどのような特定の機能がテストされるか、どのような状況下でどのように入力値がソフトウェアモジュールの入力変数に適用されるか、ソフトウェアモジュールが入力値に応答して提供すべき正しい挙動又は出力値は何か、等々を記述し得る。
ソフトウェアモジュールに関するテストケースは、手動(例えば、人によって)あるいは自動(例えば、コンピュータハードウェア又はソフトウェアとして実装されたテストケース生成ツールによって)の何れかで生成され得る。しばしば、手動生成されるテストケースは、テスト対象のソフトウェアモジュールのソースコードの様々な部分で比較的乏しい網羅率(カバレッジ)を有し、また、テストケースを手動生成する実処理は、時間を消費し且つコストのかかるものとなる。一方、自動生成されるテストケースは、より良好なテスト網羅率を提供するとともに、より少ない時間及び人的労力のみを必要とする。
特定の実施形態において、テストケースの入力値は、テスト対象ソフトウェアモジュール上で記号的実行(symbolic execution)を行うことによって取得され得る。しかしながら、この手法は幾つかの欠点を有することがある。記号的実行は、CPU時間及びその他の種類のコンピュータリソースの点で非常に高くつき、ソフトウェアモジュール上で、典型的に、一度に該ソフトウェアモジュールの1つの入力変数のみを記号的にすることによって実行される。ソフトウェアモジュールが2つ以上の入力変数を有する場合、記号的実行が該ソフトウェアモジュール上で何度も実行される必要がある。また、複数の入力変数のうち、何れの1つが最初に記号的に実行され、何れの1つが2番目に記号的に実行されるかに依存して、記号的実行から得られる入力値は、異なり得るとともに異なったテスト網羅率をもたらし得る。第2に、ソフトウェアモジュールが比較的多数の入力変数を有する場合、記号的実行から得られる入力変数の数、ひいては、生成されるテストケースの数は、テストケース・イクスプロージョン(爆発)といえるほどに非常に大きいものとなり得る。テストケース爆発は、テストケース群が例えばテスト集合(テストスイート)に統合されるときに多大な回帰テスト時間を生じさせ得る。
これらの欠点を解消するため、複数の入力変数を有するソフトウェアモジュール上で記号的実行を行うとき、特定の実施形態は、それら入力変数を記号的に実行する順序を、入力変数が影響する分岐深さに基づいて知的に決定し得る。また、記号的実行の結果としてテストケースが生成された後、特定の実施形態は、ソフトウェアモジュールをテストするために最終的に使用されるテストケースの数を削減するため、重複あるいは過分なテスト網羅率をもたらすテストケースを排除し得る。
コンピュータサイエンスの分野において、記号的実行は、抽象解釈として実際の値ではなく記号的な値を追跡することによるソフトウェアプログラムの分析を意味する。これは、ソフトウェアモジュールへの入力を記号変数として扱うノンエクスプリシット状態モデル検査技術である。記号的実行は、記号変数を用いてソフトウェアモジュール内の限定された経路を実行することによって複雑な数学的方程式を作成し、ソルバーを用いて該複雑な方程式を解く(典型的に、決定手順として知られる)ことで、もしあれば、誤ったシナリオを得る。エクスプリシット状態モデル検査と異なり、記号的実行は、分析対象のソフトウェアモジュールの全ての入力変数の、全ての取り得る入力値及び全ての取り得るユースケースを分析することができる。
記号的実行の更なる説明のため、以下の“foo”という名のソフトウェアモジュール例を考える。
(外1)
Figure 0005652326
ソフトウェアモジュール“foo”は、2つの入力変数“a”及び“b”と、2つの中間変数“c”及び“d”とを有している。特定の実施形態において、ソフトウェアモジュールの中間変数は、そのソフトウェアモジュールにローカルな変数であり、そのソフトウェアモジュールのコンテキスト内にのみ存在する。中間変数はまた、局所的な範囲を有するのみであり、且つその中間変数が宣言されたソフトウェアモジュール内からのみアクセス可能であるので、ローカル変数とも呼ばれる。中間変数の値は、直接的あるいは間接的に、ソフトウェアモジュールの1つ以上の入力変数の値に依存し得る。例えば、モジュール“foo”では、中間変数“c”の値は、上記コードの第3行にて指し示されるように、入力変数“a”及び“b”の値に直接的に依存し、中間変数“d”の値は、上記コードの第5行にて指し示されるように、中間変数“c”を介して間接的に入力変数“a”及び“b”の値に依存する。また、モジュール“foo”は、上記コードの第4行に、“if−else”命令文によって引き起こされる条件付き分岐点を含んでいる。第4行の条件付き分岐点は、分岐条件“!(c.equals(“qrs”))”に関連付けられている。この分岐条件が満足される、あるいは成立するかに応じて、すなわち、中間変数“c”が“qrs”に等しいかに応じて、モジュール“foo”はそれ以降、異なる実行経路へと進み、モジュール“foo”のコードの異なる部分が実際に実行される。より具体的には、中間変数“c”が“qrs”に等しくない場合には、上記コードの第5及び6行にて指し示されるように、中間変数“d”の値が計算されて返される。一方、中間変数“c”が“qrs”に等しい場合には、上記コードの第8行にて指し示されるように、中間変数“c”の値が返される。
モジュール“foo”上で記号的実行が行われるとき、その入力変数及び中間変数の各々に、実際値に代えて記号値が割り当てられる。図1は、モジュール“foo”上で記号的実行を行うステップを表す一例に係る実行フロー100を示している。この例において、入力変数“a”は記号値“x”を割り当てられ、入力変数“b”は記号値“y”を割り当てられ、中間変数“c”は記号値“z”を割り当てられ、中間変数“d”は記号値“w”を割り当てられている。変数“a”、“b”、“c”及び“d”は“string”型であるので、記号値“x”、“y”、“z”及び“w”は各々、任意の文字列を表す。
また、“Φ”は、実行経路に沿った様々な点での記号的実行の結果を表す記号表現である。より具体的には、上記コードの第2行に対応する102において、変数“a”、“b”、“c”及び“d”にそれぞれの記号値“x”、“y”、“z”及び“w”が割り当てられ、“Φ”は当初、エンプティすなわちヌル表現を有する。この実行が更に進むとき、どのコードが実行されたかに応じて“Φ”に表現が追加される。上記コードの第3行に対応する104において、“Φ”は表現“z=concat(x、y)”を有している。これは、上記コードの第3行が“c=a.concat(b)”であり、“x”、“y”及び“z”がそれぞれ変数“a”、“b”及び“c”に割り当てられた記号値であるからである。次いで、上記コードの第4行は条件付き分岐点であり、それ以降、この実行が進み得る2つの取り得る実行経路が存在する。故に、記号的実行も104から下に、上記コードの第5及び6行に対応する106及び108を含む第1経路“PATH1”と、上記コードの第8行に対応する110を含む第2経路“PATH2”という2つの異なる経路に進み得る。
PATH1を進めるには、変数“c”は“qrs”に等しくなく、これは記号値“z”が“qrs”に等しくないことを意味する。故に、106にて、表現“z!=“qrs””が“Φ”に追加される。逆に、PATH2を進めるには、変数“c”は“qrs”に等しく、これは記号値“z”が“qrs”に等しいことを意味する。故に、110にて、表現“z=“qrs””が“Φ”に追加される。PATH1に沿うとき、変数“d”の値は上記コードの第5行にて決定され、これが108に対応する。故に、108にて、表現“w=concat(z,“t”)”が“Φ”に追加される。なお、“z=concat(x、y)”であるので、“w”の表現は“w=concat(concat(x、y),“t”)”に書き直され得る。108はPATH1の終点であるので、108における“Φ”の表現は、PATH1の終点に到達するために満足される必要がある条件を記号の形態で表している。同様に、110はPATH2の終点であるので、110における“Φ”の表現は、PATH2の終点に到達するために満足される必要がある条件を記号の形態で表している。
特定の実施形態において、108での“Φ”の表現の値を求めることは、モジュール“foo”をPATH1の終点まで到達させた入力変数“a”及び“b”の実際値を提供し、また、110での“Φ”の表現の値を求めることは、モジュール“foo”をPATH2の終点まで到達させた入力変数“a”及び“b”の実際値を提供し得る。特定の実施形態において、これらの実際値は、その後、モジュール“foo”をテストするときに入力変数“a”及び“b”に割り当てられ得るテスト値として使用され得る。これらのテスト値は、PATH1の終点及びPATH2の終点の双方にモジュール“foo”を到達させる入力変数“a”及び“b”の実際値を含むので、これらのテスト値が適用される場合、モジュール“foo”の全ての取り得る実行経路がテストされることが保証され得る。
上述のように、記号的実行は高くつくので、通常、一度に1つの入力変数のみが記号的にされて記号的に実行される。ソフトウェアモジュールが複数の入力変数を有する場合、記号的実行は、一度に1つずつ全ての入力変数にわたって繰り返し実行される必要がある。記号的にされるように複数の入力変数が選択される順序は、最終的な網羅率の点で、自動生成されるテストセットの品質に多大な影響を有し得る。例えば、以下のコードセグメントを考える。
(外2)
Figure 0005652326
“a”及び“b”は入力変数であるとする。入力変数“a”が最初に記号的にされる場合、記号的実行を行うことは、例えば、第1行の条項“(a>5)”に対応する変数“a”の2つの具体値(すなわち、実際値)6及び4を生じさせ得る。6及び4である“a”の具体値を用いて“b”が2番目に記号的にされる場合、記号的実行を行うことによって2つの更なる“b”の具体値1及び3がもたらされ得る。入力値の対(a,b)={(6,1),(6,3),(4,1),(4,3)}は、上記コードセグメント中の全ての取り得る実行経路をカバーすることが保証される。
一方、入力変数“a”が最初に記号的にされることに代えて、入力変数“b”が最初に記号的にされるように選択されるとする。記号的実行において、入力変数“a”について何らかの具体値が仮定される必要があるため、“a”にランダム値が割り当てられ得る。“a”の値が5未満であるように仮定される場合、記号的実行は、第3及び4行にある“if”ブロックを完全に見落とすことになる。結果として、記号的実行は変数“b”について有意義な値を生成することができない。最終的に得られるテストセットは、入力変数“b”について生成された何らかのランダム値を用いてその後に計算された、“a”の2つの値のみを有することになる。得られるテストセットは、(a,b)={(6,7),(4,7)}のようなものに見えることになる。ただし、7は、入力変数“b”に割り当てられたランダム値である。この第2のテストセットは、第1のテストセットから得られるコード網羅率より遙かに劣悪なコード網羅率をもたらすテスト入力値を生じさせることになる。従って、記号的実行の目的で入力変数が記号的にされる順序は、自動生成されるテストセットによって得られる最終的なコード網羅率のレベルに多大なる影響を及ぼし得る。
この可能性ある問題を解決するため、特定の実施形態は、ソフトウェアモジュールの複数の入力変数を記号的に実行する順序を知的に決定し得る。図2は、ソフトウェアモジュールの入力変数を記号的に実行する順序を決定する一例に係る方法を示し、図3は、ソフトウェアモジュールの入力変数を記号的に実行する順序を決定する一例に係るシステム300を示している。図2及び3を互いに関連付けて説明する。
特定の実施形態において、ソフトウェアモジュールは任意の数の入力変数と任意の数の中間変数とを有し得る。特定の実施形態において、各中間変数の値は、直接的あるいは間接的に、少なくとも1つの入力変数の値に依存し得る。すなわち、入力変数の値に対する変化は、その入力変数に直接的あるいは間接的に依存する中間変数の値に対する変化を生じさせる。当然ながら、1つの中間変数が複数の入力変数に依存することがあり、また、複数の中間変数が同一の入力変数に依存することがある。特定の実施形態は、図2のステップ202に示すように、入力変数の関連性分析を実行することによって、何れの中間変数が直接的あるいは間接的にソフトウェアモジュールの何れの入力変数に依存するかを決定し得る。特定の実施形態において、ステップ202は、図3に示すシステム300の構成要素302によって実行され得る。構成要素302は、ソフトウェアモジュール312を入力として用いて、ソフトウェアモジュール312の入力変数について関連性分析を実行するものである。
特定の実施形態において、関連性分析は、一組の記号変数に関連するソフトウェアモジュールの変数の組を計算し得る。特定の実施形態は、一組の記号入力が与えられたときに変数が記号値を格納する場合に、その変数を関連あるものと見なし得る。これは、ソフトウェア解析は抽象解釈のモデル検査と見なされ得るという洞察に基づく。結果として、ソフトウェア解析は、抽象解釈による健全性保証と、モデル検査による自動化の利益とを享受する。特定の実施形態において、ソフトウェアモジュール312上で実行される関連性分析は、重み付けプッシュダウンモデル検査技術に基づき得る。関連性分析は、2009年2月27日に出願された“Efficient Symbolic Execution of Software Using Static Analysis”なるタイトルの米国特許出願第12/395515号、及び2009年3月19日に出願された“Environmental Data Refinement Based on Static Analysis and Symbolic Execution”なるタイトルの米国特許出願第12/407695号に更に詳細に説明されている。
何れの変数がソフトウェアモジュールの何れの入力変数に依存するかが決定されると、特定の実施形態は、図2のステップ204に示すように、各入力変数に対する変数セットを構築し得る。変数セットは、入力変数自体と、関連性分析の結果に従った、該入力変数に直接的あるいは間接的に依存する全ての中間変数とを含む。斯くして構築される変数セットの数は、ソフトウェアモジュールが有する入力変数の数に等しい。なお、中間変数は複数の入力変数に依存し得るので、1つの中間変数が複数の変数セットに属することがあり得る。
各変数セットに対し、特定の実施形態は、図2のステップ206に示すように、該セットからの入力変数及び中間変数によって到達される平均分岐深さを計算し得る。特定の実施形態において、ステップ206は、図3に示すシステム300の構成要素304によって実行され得る。特定の実施形態において、ソフトウェアモジュールは如何なる数の条件付き分岐点(例えば、“if”条項)を有していてもよく、各条件付き分岐点は、少なくとも1つの入力変数又は中間変数によって規定される分岐条件を有する。分岐条件が満たされるかに応じて、ソフトウェアモジュールはそれ以降、異なる実行経路を進み得る。例えば、以下のコードセグメントを考える。
(外3)
Figure 0005652326
第1行に条件付き分岐点が存在し、その分岐条件は“m>n && k<=10”である。なお、1つの分岐条件が複数の副(サブ)条件(例えば、“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行に第3の条件付き分岐点が存在し、その分岐条件は、複数の副条件(例えば、“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行の分岐条件は満たされることができない。
図4は、複数レベルのネスト化された条件付き分岐を有する一例に係るソフトウェアモジュールの実行経路を示している。条件付き分岐点402において、“条件1”が満たされる場合、実行経路は処理ステップ412に進み、“条件1”が満たされない場合、実行経路は処理ステップ414に進む。条件付き分岐点402内にネスト化された条件付き分岐点404において、“条件2”が満たされる場合、実行経路は処理ステップ416に進み、“条件2”が満たされない場合、実行経路は終了する。やはり条件付き分岐点402内にネスト化された条件付き分岐点406において、“条件3”が満たされる場合、実行経路は終了し、“条件3”が満たされない場合、実行経路は条件付き分岐点408に進む。そして、条件付き分岐点406内に更にネスト化された条件付き分岐点408において、“条件4”が満たされる場合、実行経路は処理ステップ418に進み、“条件4”が満たされない場合、実行経路は処理ステップ422に進む。図4においては、全部で3階層のネスト化された条件付き分岐が存在している。
複数の変数セットのうちの1つからの入力変数及び中間変数によって到達される平均分岐深さを計算するため、該セットからの入力変数及び各中間変数に対し、特定の実施形態は、その入力変数又はその中間変数によって到達される分岐深さを計算し得る。その後、特定の実施形態は、全ての個々の入力変数及び中間変数について計算された分岐深さの平均を取って、該変数セットの平均分岐深さを決定し得る。該変数セットからの複数の変数のうちの1つによって到達される分岐深さを計算するため、特定の実施形態は、ソフトウェアモジュール内の条件付き分岐点の各々を、最も外側の条件付き分岐点から始めて、徐々に内部のネスト化された条件付き分岐点へと進みながら調べ得る。その変数が、或る条件付き分岐点に関連付けられた分岐条件に影響を及ぼす場合、特定の実施形態は、その変数の分岐深さを1だけ増大させ得る。上述のコードセグメント例においては、第1行の条件付き分岐点に関する分岐条件は変数“m”、“n”及び“k”に影響される。一緒になって該分岐条件を形成する副条件に、3つ全ての変数が関与しているからである。一方、第3行の条件付き分岐点に関する分岐条件は、変数“k”のみが該分岐条件に関与しているため、変数“k”によって影響されるのみである。
全ての変数セットに関して、平均分岐深さが斯くして計算されると、特定の実施形態は、図2のステップ208に示すように、最小の平均分岐深さを有する変数セットを選択し得る。同一の最小平均分岐深さを有する変数セットが複数存在する場合、特定の実施形態は、最小平均分岐深さを有する複数の変数セットのうちの1つをランダムに選択してもよい。
特定の実施形態は、図2のステップ210に示すように、選択された変数セットからの入力変数について記号的実行を行って、ソフトウェアモジュールのテストケースを生成し得る。特定の実施形態において、ステップ210は、図3に示したシステム300の構成要素306によって実行され得る。構成要素306は、出力として一組のテストケース314を提供するものである。図1に関連して上述したように、特定の実施形態は、選択された変数セットからの入力変数に記号値を割り当て、ソフトウェアモジュール上で記号的実行を行い、異なる実行経路の終点で得られる記号表現(例えば、“Φ”)を解くことで、選択された変数セットからの入力変数に関する実際値を取得し得る。これら実際値は、後にソフトウェアモジュールがテストされるときに入力変数に適用されるべきテスト値として使用され得るものである。入力変数に関するこれらの実際値は、ソフトウェアモジュールのテストケースを生成するために使用され得る。特定の実施形態は、毎回別の変数セットを選択して、この処理を複数回繰り返し得る。例えば、第2の繰り返しにおいて、2番目に小さい平均分岐深さを有する変数セットが選択され、記号値を有するこの第2の変数セットからの入力変数を用いて、ソフトウェアモジュール上で記号的実行が行われ得る。この記号的実行の結果に基づいて、この入力変数に関する実際値が決定され得る。この場合も、複数の変数セットが、同一の、この繰り返しにおける平均分岐深さを有する場合、それらの変数セットのうちの1つがランダムに選択され得る。第3の繰り返しにおいて、3番目に小さい平均分岐深さを有する変数セットが選択され、記号値を有するこの第3の変数セットからの入力変数を用いて、ソフトウェアモジュール上で記号的実行が行われ得る。そして、ソフトウェアモジュールに対して十分なテストケースが得られるまで、同様に繰り返される。換言すれば、各繰り返しにおいて最小の平均分岐深さを有する変数セットが該繰り返しのために選択され、選択された変数セットからの入力変数に関して実際値が決定される。
図2に示した処理又はその他の好適な手段の何れかを介してソフトウェアモジュールに対して一組のテストケース(テストケースセット)が生成されるとき、時にして、該セットからの全てのテストケースがソフトウェアモジュールについて価値あるテストカバレッジを提供するわけでないことがあり、また、ソフトウェアモジュールをテストするためにこれら全てのテストケースを適用すると、多大なリソース(例えば、コンピュータリソースの点で)を必要とすることがある。特定の実施形態は、上記テストケースセットからの個々のテストケースのカバレッジ値を調べ、ソフトウェアモジュールをテストするために、それらテストケースのうちの部分集合(サブセット)のみを選択してもよい。図5は、テストケースセットのサイズを縮小するための一例に係る方法を示し、図6は、テストケースセットのサイズを縮小する一例に係るシステム600を示している。図5及び6を互いに関連付けて説明する。
上述のように、特定の実施形態において、ソフトウェアモジュールは、任意の数の入力変数と、それら入力変数のうちの少なくとも1つに各々が直接的あるいは間接的に依存する任意の数の中間変数と、任意の数の条件付き分岐点とを有し得る。各条件付き分岐点は、入力変数又は中間変数のうちの少なくとも1つに影響される分岐条件に関連付けられる。特定の実施形態において、所与の1つの入力変数に関し、該入力変数自体によって、あるいは該入力変数に直接的あるいは間接的に依存する何れかの中間変数によって、の何れかで影響を受ける分岐条件を有する全ての条件付き分岐点が、該入力変数に影響されるものと見なされる。例えば、中間変数“j”が入力変数“i”に依存すると仮定する。さらに、1つの条件付き分岐点が、入力変数“i”に影響を受ける分岐条件を有し、且つ別の1つの条件付き分岐点が、中間変数“j”に影響を受ける分岐条件を有すると仮定する。この場合、中間変数“j”は入力変数“i”に依存しているので、双方の条件付き分岐点が、入力変数“i”に影響されるものと見なされる。
特定の実施形態において、上述のテストケースセットにおいて、該セットからの各テストケースは、ソフトウェアモジュールのテスト中にテスト入力値としてソフトウェアモジュールの入力変数に適用され得る実際値の組み合わせを含み得る。例えば、ソフトウェアモジュールが、“integer”型の3つの入力変数“a”、“b”及び“c”を有すると仮定する。さらに、入力変数“a”は実際値2及び7を有し、入力変数“b”は実際値5及び11を有し、入力変数“c”は実際値52、9及び27を有することが決定されていると仮定する。3つの入力変数のこれらの実際値から、ソフトウェアモジュールに対して、12個の取り得るテストケースを含むセットが生成され得る。何故なら、これら3組の実際値には12個の固有の組み合わせ:
Figure 0005652326
が存在するからである。
特定の実施形態は、図5のステップ502に示すように、ソフトウェアモジュールに対して生成されたテストケースセットを分析し得る。特定の実施形態において、ステップ502は、図6に示したシステム600の構成要素602によって実行され得る。構成要素602は、分析のためにテストケースセット612を入力として取り、テストケースセット612から冗長なテストケースを除去することによって、テストケースセット612のサイズを縮小することを試みる。
ソフトウェアモジュールの個々の条件付き分岐点は、入力変数に影響される。すなわち、或る入力変数にテスト値として割り当てられる相異なる実際値は、ソフトウェアモジュールを、該入力変数に影響される或る条件付き分岐点から通じる相異なる実行経路に進ませ得る。上述の例において、入力変数“a”は条件付き分岐点“cbp1”に影響を及ぼすと仮定する。条件付き分岐点“cbp1”から、ソフトウェアモジュールは下方に、2つの異なる実行経路に進み得る。より具体的には、入力変数“a”にテスト値2が割り当てられる場合、ソフトウェアモジュールは一方の実行経路に進み、入力変数“a”にテスト値7が割り当てられる場合、ソフトウェアモジュールは他方の実行経路に進み得る。この場合、入力変数“a”の値が2である全てのテストケースは第1の実行経路を対象とし、上述の例では、そのようなテストケースが6個存在する。同様に、入力変数“a”の値が7である全てのテストケースは第2の実行経路を対象とし、上述の例では、そのようなテストケースがやはり6個存在する。
特定の実施形態は、個々の入力変数に割り当てられ得るテストケースセットからのテスト値を表すグラフを構築し得る。図7は、入力変数“a”、“b”及び“c”を有する上述の例で構築される一例に係るグラフ700を示している。グラフ700内の各エッジは1つの入力変数を表し、グラフ700内の各ノードは、例示した12個のテストケースからの或る入力変数に関して取り得る1つのテスト値を表している。グラフ700の異なる実行経路に沿って進むことは、最終的に、異なるテストケースにつながる。特定の実施形態において、このようなグラフは、何れのテストケースがソフトウェアモジュールの何れの実行経路をカバーするかを特定する助けとなり得る。特定の実施形態において、同一の実行経路を対象とする複数のテストケースが存在する場合、図5のステップ504に示すように、冗長なテストケースのうち1つを残して全てがテストケースセットから除去され得る。そのような追加的なテストケースは、実際には、ソフトウェアモジュールに対して如何なる追加のテストカバレッジをも提供しないからである。これにより、テストケースセットのサイズが縮小され得る。例えば、図7の場合、ノード702及び704において、ノード702及び704からのグラフ700のその後の分岐はソフトウェアモジュールの実行経路に、ノード706、708及び712の位置のテストケースによってカバーされていないような新たなテストカバレッジを提供するものでないことが決定され得る。故に、ノード702及び704より下の全てのテストケースが、テストケースセットから除去され得る。
図7に示したグラフ700のようなグラフを用いることでは、テストケースセットから全ての冗長テストケースを除去することができないことがある。特定の実施形態は、図8に一例を示すような二部(bipartite)グラフに基づいて、テストケースセットのサイズを更に縮小し得る(例えば、テストセット圧縮を更に実行する)。特定の実施形態において、例えば図8に示したものなどの二部グラフが、図6に示したシステム600の構成要素604によって、ソフトウェアモジュールのテストケース及び条件付き分岐に対して構築され得る。特定の実施形態において、二部グラフ(例えば、二部グラフ800)は2つの部分を含み得る。1つの部分(例えば810)はテストケースセットからの残存テストケースを表し、各ノードが残存テストケースのうちの1つを表す。もう1つの部分(例えば820)はソフトウェアモジュールの全ての取り得る条件付き分岐を表し、各ノードが条件付き分岐のうちの1つを表す。或るテストケースが或る条件付き分岐をカバーする場合、1つの有向エッジが、そのテストケースを表す部分810内のノードを、その条件付き分岐を表す部分820内のノードに結び付ける。或る1つの条件付き分岐が、如何なる利用可能なテストケースによってもカバーされない(例えば、ノード822)、唯一のテストケースによってカバーされる(例えば、ノード824)、あるいは複数のテストケースによってカバーされる(例えば、ノード826)の何れもが可能である。
斯くして二部グラフ(例えば、二部グラフ800)が構築されると、特定の実施形態は、図5のステップ506及び508に示すように、欲張り(グリーディ)アルゴリズムを用いて反復的にテストケースを選択し得る。特定の実施形態において、ステップ506及び508は、図6に示したシステム600の構成要素606によって実行され得る。構成要素606は、テストケースセット612から選択されたテストケースのサブセット614を出力として提供する。特定の実施形態は、先ず、図5のステップ506に示すように、条件付き分岐のうちの少なくとも1つを単独でカバーする二部グラフ内の不可欠なテストケースの全てを選択し得る。すなわち、選択される不可欠なテストケースの各々は、或る特定の条件付き分岐をカバーする唯一のテストケースである。例えば、図8において、ノード812は、ノード824及び828によって表される条件付き分岐をカバーする唯一のテストケースであるので、不可欠なテストケースを表している。同様に、ノード814も不可欠なテストケースを表している。これらのテストケースは最初に選択される。しかしながら、ノード816は、如何なる条件付き分岐も単独ではカバーしていないので、不可欠なテストケースを表しておらず、故に、このテストケースはこの時点では選択されない。
不可欠なテストケースが全て選択されると、それらは二部グラフから除去され得る。また、不可欠なテストケースがカバーする条件付き分岐も二部グラフから除去され得る。次に、二部グラフ内に残ったテストケースから、特定の実施形態は、図5のステップ508に示すように、利用可能なテストケースによってカバーされる全ての条件付き分岐が、選択されたテストケースによってカバーされるまで、反復的に、一度に最も多数の条件付き分岐をカバーするテストケースを選択し、選択したテストケースを二部グラフから除去し得る。利用可能なテストケースの何れにもカバーされていない条件付き分岐(例えば、図8のノード822によって表される条件付き分岐)が存在する場合、特定の実施形態は、この欲張りアルゴリズムの目的上それを無視し得る。その後、特定の実施形態は、図5のステップ510に示すように、選択されたテストケースのみを用いてソフトウェアモジュールをテストし得る。
特定の実施形態において、図3及び6に示した構成要素は、コンピュータハードウェア又はソフトウェアとして実装され得る。特定の実施形態は、ネットワーク環境内に実装され得る。図9は、サービスとしてソフトウェアの検証を提供するのに好適な、一例に係るネットワーク環境900を示している。ネットワーク環境900は、1つ以上のサーバ920と1つ以上のクライアント930とを相互に結合するネットワーク910を含んでいる。特定の実施形態において、ネットワーク910は、インターネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、無線LAN(WLAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、インターネットの一部、若しくはその他のネットワーク、又は2つ以上のこれらネットワークの組み合わせである。この開示は、如何なる好適なネットワーク910をも意図している。
1つ以上のリンク950が、サーバ920又はクライアント930をネットワーク910に結合する。特定の実施形態において、1つ以上のリンク950は各々、1つ以上の有線リンク、無線リンク、又は光リンクを含む。特定の実施形態において、1つ以上のリンク950は各々、イントラネット、エクストラネット、VPN、LAN、WLAN、WAN、MAN、インターネットの一部、若しくはその他のリンク、又は2つ以上のこれらリンクの組み合わせを含む。この開示は、サーバ920及びクライアント930をネットワーク910に結合する如何なる好適なリンク950をも意図している。
特定の実施形態において、各サーバ920は、単一のサーバであってもよいし、複数のコンピュータ又は複数のデータセンターに跨る分散サーバであってもよい。サーバ920は、例えば、ウェブサーバ、ニュースサーバ、メイルサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、交換サーバ、データベースサーバ、又はプロキシサーバなど、様々な種類のサーバとし得る。特定の実施形態において、各サーバ920は、そのサーバ920によって実現あるいは支援される適切な機能を実行するための、ハードウェア、ソフトウェア、若しくは埋込ロジック要素、又は2つ以上のこれら要素の組み合わせを含み得る。例えば、ウェブサーバは一般的に、ウェブページ、又はウェブページの特定の要素、を含むウェブサイトのホストを務めることが可能である。より具体的には、ウェブサーバは、HTMLファイル又はその他のファイルタイプのホストとなることができ、あるいは要求を受けてファイルを動的に作成あるいは構成して、クライアント930からのHTTP又はその他の要求に応答して該ファイルをクライアント930に通信することができる。メイルサーバは一般的に、様々なクライアント930に電子メイルサービスを提供することができる。データベースサーバは一般的に、1つ以上のデータ庫に格納されたデータを管理するためのインタフェースを提供することができる。
特定の実施形態において、1つ以上のサーバ920に、1つ以上のリンク950を介して、1つ以上のデータストレージ940が通信可能に結合され得る。特定の実施形態において、データストレージ940は、様々な種類の情報を保管するために使用され得る。特定の実施形態において、データストレージ940に格納される情報は、特定のデータ構造に従って編成され得る。特定の実施形態において、各データストレージ940はリレーショナルデータベースとし得る。特定の実施形態は、サーバ920又はクライアント930が、データストレージ940に格納された情報を管理する(例えば、検索、修正、追加あるいは消去する)ことを可能にするインタフェースを提供し得る。
特定の実施形態において、各クライアント930は、ハードウェア、ソフトウェア、若しくは埋込ロジック要素、又は2つ以上のこれら要素の組み合わせを含み、クライアント930によって実現あるいは支援される適切な機能を実行することが可能である。例えば、クライアント930は、以下に限られないが、デスクトップ型コンピュータシステム、ノート型コンピュータシステム、ネットブック型コンピュータシステム、手持ち式電子機器、又は携帯電話とし得る。この開示は、如何なる好適なクライアント930をも意図している。クライアント930は、クライアント930の位置のネットワークユーザがネットワーク910にアクセスすることを可能にし得る。クライアント930は、そのユーザが、その他のクライアント930の他ユーザと通信することを可能にしてもよい。
クライアント930は、例えば、マイクロソフト・インターネットエクスプローラ、グーグル・クローム又はモジラ・ファイアフォックスなどのウェブブラウザ932を有することができ、また、1つ以上のアドオン、プラグイン、又は例えばツールバー若しくはヤフー・ツールバーなどのその他のエクステンションを有していてもよい。クライアント930のユーザは、URL又はウェブブラウザ932をサーバ920に導くその他のアドレスを入力することができ、ウェブブラウザ932は、ハイパーテキスト転送プロトコル(HTTP)要求を生成して、該HTTP要求をサーバ920に通信し得る。サーバ920は、HTTP要求を受理し、該HTTP要求に応じた1つ以上のハイパーテキスト・マークアップ言語(HTML)ファイルをクライアント930に通信し得る。クライアント930は、サーバ920からのHTMLファイルに基づいて、ユーザへの提示にためにウェブページを表示し得る。この開示は、如何なる好適なウェブページファイルをも意図している。非限定的な一例として、ウェブページは、具体的なニーズに従って、HTMLファイル、拡張可能ハイパーテキスト・マークアップ言語(XHTML)ファイル、又は拡張マークアップ言語(XML)ファイルから表示を行い得る。このようなページはまた、例えば、以下に限られないが、JAVAスクリプト、JAVA、マイクロソフト・シルバーライトで記述されたものなどのスクリプト、例えばAJAX(Asynchronous JavaScript and XML)などのマークアップ言語とスクリプトとの組み合わせ、及びこれらに類するものを実行し得る。ここでは、適宜、ウェブページへの言及は、(ブラウザがウェブページを表示するために使用する)1つ以上の対応するウェブページファイルを包含し、その逆も然りである。
特定の実施形態は、1つ以上のコンピュータシステム上で実現され得る。図10は、一例に係るコンピュータシステム1000を示している。特定の実施形態において、1つ以上のコンピュータシステム1000が、ここに記載あるいは図示した1つ以上の方法の1つ以上のステップを実行する。特定の実施形態において、1つ以上のコンピュータシステム1000が、ここに記載あるいは図示した機能を提供する。特定の実施形態において、1つ以上のコンピュータシステム1000上で起動されるソフトウェアが、ここに記載あるいは図示した1つ以上の方法の1つ以上のステップを実行し、あるいは、ここに記載あるいは図示した機能を提供する。特定の実施形態は、1つ以上のコンピュータシステム1000の1つ以上の部分を含む。
この開示は、如何なる好適な数のコンピュータシステム1000をも意図している。この開示は、如何なる物理形態を採るコンピュータシステム1000をも意図している。非限定的な一例として、コンピュータシステム1000は、組込型コンピュータシステム、システム・オン・チップ(SOC)、シングルボード・コンピュータシステム(SBC)(例えば、コンピュータ・オン・モジュール(COM)若しくはシステム・オン・モジュール(SOM)など)、デスクトップ型コンピュータシステム、ラップトップ型又はノート型のコンピュータシステム、対話式キオスク端末、メインフレーム、メッシュ状コンピュータシステム、携帯電話、携帯情報端末(PDA)、サーバ、又はこれらの2つ以上の組み合わせとし得る。必要に応じて、コンピュータシステム1000は、単一あるいは分散型の;複数の位置にまたがる;複数の機械にまたがる;あるいはクラウド(1つ以上のネットワーク内に1つ以上のクラウド要素を含み得る)内の;1つ以上のコンピュータシステム1000を含んでいてもよい。必要に応じて、1つ以上のコンピュータシステム1000は、ここに記載あるいは図示した1つ以上の方法の1つ以上のステップを、空間的あるいは時間的な実質的な制約なく実行し得る。非限定的な一例として、1つ以上のコンピュータシステム1000は、ここに記載あるいは図示した1つ以上の方法の1つ以上のステップを、リアルタイムあるいはバッチモードで実行し得る。必要に応じて、1つ以上のコンピュータシステム1000は、相異なる時点で、あるいは相異なる位置で、ここに記載あるいは図示した1つ以上の方法の1つ以上のステップを実行してもよい。
特定の実施形態において、コンピュータシステム1000は、プロセッサ1002、メモリ1004、ストレージ1006、入力/出力(I/O)インタフェース1008、通信インタフェース1010、及びバス1012を含んでいる。この開示は、特定の構成にされた特定数の特定の構成要素を有する特定のコンピュータシステムを図示して説明しているが、この開示は、如何なる好適配置にされた如何なる好適数の如何なる好適構成要素を有する如何なる好適なコンピュータシステムをも意図している。
特定の実施形態において、プロセッサ1002は、例えばコンピュータプログラムを構築する命令などの命令を実行するハードウェアを含む。非限定的な一例として、命令を実行するために、プロセッサ1002は、内部レジスタ、内部キャッシュ、メモリ1004、又はストレージ1006から命令を取り出し(すなわち、フェッチし);それを復号化して実行し;その後、1つ以上の結果を内部レジスタ、内部キャッシュ、メモリ1004、又はストレージ1006に書き込み得る。特定の実施形態において、プロセッサ1002は、データ、命令又はアドレス用の1つ以上の内部キャッシュを含み得る。この開示は、プロセッサ1002が必要に応じて、如何なる好適数の如何なる好適な内部キャッシュを含むことも意図している。非限定的な一例として、プロセッサ1002は、1つ以上の命令キャッシュと、1つ以上のデータキャッシュと、1つ以上のトランスレーション・ルックアサイド・バッファ(TLB)とを含み得る。命令キャッシュ内の命令は、メモリ1004又はストレージ1006内の命令の複製としてもよく、命令キャッシュは、プロセッサ1002によるこれら命令の取り出しを高速化し得る。データキャッシュ内のデータは、メモリ1004又はストレージ1006内の、プロセッサ1002にて実行されている命令が処理すべきデータの複製;プロセッサ1002にて実行される後続の命令によるアクセスのための、あるいはメモリ1004又はストレージ1006に書き込むための、プロセッサ1002にて実行された以前の命令の結果;又はその他の好適データとし得る。データキャッシュは、プロセッサ1002による読み出し処理又は書き込み処理を高速化し得る。TLBは、プロセッサ1002のために仮想アドレス変換を高速化し得る。特定の実施形態において、プロセッサ1002は、データ、命令又はアドレス用の1つ以上の内部レジスタを含み得る。この開示は、プロセッサ1002が適宜、如何なる好適数の如何なる好適な内部レジスタを含むことをも意図している。必要に応じて、プロセッサ1002は、1つ以上の演算論理ユニット(ALU)を含んでいてもよく;マルチコアプロセッサであってもよく;あるいは1つ以上のプロセッサ1002を含んでいてもよい。この開示は特定のプロセッサを図示して説明しているが、この開示は如何なる好適なプロセッサをも意図している。
特定の実施形態において、メモリ1004は、プロセッサ1002が実行する命令、又はプロセッサ1002が処理するデータを格納するメインメモリを含む。非限定的な一例として、コンピュータシステム1000はストレージ1006又は別のソース(例えば、別のコンピュータシステム1000など)からメモリ1004に命令をロードし得る。その後、プロセッサ1002は、メモリ1004から内部レジスタ又は内部キャッシュに命令をロードし得る。命令を実行するため、プロセッサ1002は、内部レジスタ又は内部キャッシュから命令を取り出し、取り出した命令を復号化する。命令の実行中又は実行後、プロセッサ1002は、1つ以上の結果(中間結果又は最終結果とし得る)を内部レジスタ又は内部キャッシュに書き込み得る。そして、プロセッサ1002は、それらの結果のうちの1つ以上をメモリ1004に書き込み得る。特定の実施形態において、プロセッサ1002は、1つ以上の内部レジスタ若しくは内部キャッシュ又はメモリ1004内の命令のみを実行してもよく(ストレージ1006又はその他の場所の命令を実行するのとは異なる)、また、1つ以上の内部レジスタ若しくは内部キャッシュ又はメモリ1004内のデータのみを処理してもよい(ストレージ1006又はその他の場所のデータを処理するのとは異なる)。1つ以上のメモリバス212(各々がアドレスバス及びデータバスを含み得る)が、プロセッサ1002をメモリ1004に結合してもよい。バス1012は、後述のように、1つ以上のメモリバスを含み得る。特定の実施形態において、1つ以上のメモリ管理装置(MMU)が、プロセッサ1002とメモリ1004との間に存在し、プロセッサ1002により要求されるメモリ1004へのアクセスを容易にし得る。特定の実施形態において、メモリ1004は、ランダムアクセスメモリ(RAM)を含む。このRAMは、適当であれば、揮発性メモリであってもよい。必要に応じて、このRAMはダイナミックRAM(DRAM)又はスタティックRAM(SRAM)にされ得る。また、必要に応じて、このRAMは、シングルポート又はマルチポートのRAMにされ得る。この開示は、如何なる好適なRAMをも意図している。メモリ1004は、必要に応じて、1つ以上のメモリ1004を含んでいてもよい。この開示は特定のメモリを図示して説明しているが、この開示は如何なる好適なメモリをも意図している。
特定の実施形態において、ストレージ1006は、データ又は命令用の大容量記憶装置を含む。非限定的な一例として、ストレージ1006は、HDD、フロッピーディスク(登録商標)ドライブ、フラッシュメモリ、光ディスク、磁気光ディスク、磁気テープ、若しくはユニバーサル・シリアル・バス(USB)ドライブ、又はこれらの2つ以上の組み合わせを含み得る。ストレージ1006は、必要に応じて、リムーバブル(取り外し可能)あるいは非リムーバブル(すなわち、固定)のメディアを含み得る。ストレージ1006は、必要に応じて、コンピュータシステム1000の内部にあってもよいし、外部にあってもよい。特定の実施形態において、ストレージ1006は、不揮発性のソリッドステートメモリである。特定の実施形態において、ストレージ1006は、読み出し専用メモリ(ROM)を含む。必要に応じて、このROMは、マスクプログラムされたROM、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM)、電気的消去再書込可能ROM(EAROM)、若しくはフラッシュメモリ、又はこれらの2つ以上の組み合わせとし得る。この開示は、如何なる好適な物理形態を有する大容量記憶装置1006をも意図している。ストレージ1006は、必要に応じて、プロセッサ1002とストレージ1006との間での通信を容易にする1つ以上のストレージ制御装置を含み得る。この開示は特定のストレージを図示して説明しているが、この開示は如何なる好適なストレージをも意図している。
特定の実施形態において、I/Oインタフェース1008は、コンピュータシステム1000と1つ以上のI/O装置との間での通信のための1つ以上のインタフェースを提供するハードウェア、ソフトウェア、又はこれら双方を含む。コンピュータシステム1000は、必要に応じて、これらI/O装置のうちの1つ以上を含んでいてもよい。これらI/O装置のうちの1つ以上は、個人とコンピュータシステム1000との間での通信を可能にし得る。非限定的な一例として、I/O装置は、キーボード、キーパッド、マイク、モニタ、マウス、プリンタ、スキャナ、スピーカ、スチルカメラ、スタイラスペン、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、その他の好適なI/O装置、又はこれらの2つ以上の組み合わせを含み得る。I/O装置は、1つ以上のセンサを含んでいてもよい。この開示は、如何なる好適なI/O装置、及びそれ用の如何なる好適なI/Oインタフェース1008をも意図している。必要に応じて、I/Oインタフェース1008は、プロセッサ1002がこれらのI/O装置のうちの1つ以上を駆動することを可能にする1つ以上の装置又はソフトウェアドライバを含んでいてもよい。I/Oインタフェース1008は、必要に応じて、1つ以上のインタフェース1008を含んでいてもよい。この開示は特定のI/Oインタフェースを図示して説明しているが、この開示は如何なる好適なI/Oインタフェースをも意図している。
特定の実施形態において、通信インタフェース1010は、コンピュータシステム1000と、1つ以上のその他のコンピュータシステム若しくは1つ以上のネットワークとの間での通信(例えば、パケットベースの通信など)のための1つ以上のインタフェースを提供するハードウェア、ソフトウェア、又はこれら双方を含む。非限定的な一例として、通信インタフェース1010は、イーサネット若しくはその他のワイヤベースのネットワークと通信するためのネットワークインタフェースコントローラ(NIC)若しくはネットワークアダプタ、又は例えばWi−Fiネットワークなどの無線ネットワークと通信するための無線NIC(WNIC)若しくは無線アダプタを含み得る。この開示は、如何なる好適なネットワーク及びそれ用の如何なる好適な通信インタフェース1010をも意図している。非限定的な一例として、コンピュータシステム1000は、アドホックネットワーク、パーソナルエリアネットワーク(PAN)、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、若しくはインターネットの1つ以上の部分、又はこれらの2つ以上の組み合わせと通信し得る。これらのネットワークのうちの1つ以上の1つ以上の部分は、有線であってもよいし、無線であってもよい。一例として、コンピュータシステム1000は、無線PAN(WPAN)(例えば、ブルートゥースWPANなど)、Wi−Fiネットワーク、Wi−MAXネットワーク、携帯電話ネットワーク(例えば、グローバル・システム・フォー・モバイル・コミュニケーションズ(GSM)ネットワークなど)、若しくはその他の好適な無線ネットワーク、又はこれらの2つ以上の組み合わせと通信し得る。コンピュータシステム1000は、必要に応じて、これらのネットワークの何れかのための如何なる好適なインタフェース1010を含んでいてもよい。この開示は特定の通信インタフェースを図示して説明しているが、この開示は如何なる好適な通信インタフェースをも意図している。
特定の実施形態において、バス1012は、コンピュータシステム1000の構成要素を相互に結合するための、ハードウェア、ソフトウェア、又はこれら双方を含む。非限定的な一例として、バス1012は、アクセラレーテッド・グラフィクス・ポート(AGP)若しくはその他のグラフィック専用バス、EISA(Extended Industry Standard Architecture)バス、フロントサイドバス(FSB)、ハイパートランスポート(HT)インターコネクト、業界標準アーキテクチャ(ISA)バス、インフィニバンド・インターコネクト、LPC(low-pin-count)バス、メモリバス、マイクロ・チャネル・アーキテクチャ(MCA)バス、コンピュータ用拡張バスアーキテクチャ(PCI)バス、PCIエクスプレス(PCI−X)バス、シリアルATA(SATA)バス、VLB(Video Electronics Standards Association local)バス、若しくはその他の好適なバス、又はこれらの2つ以上の組み合わせを含み得る。バス1012は、必要に応じて、1つ以上のバス1012を含んでいてもよい。この開示は特定のバスを図示して説明しているが、この開示は如何なる好適なバス又はインターコネクトをも意図している。
ここで、コンピュータ読み取り可能記憶媒体への言及は、1つ以上の一過性でない有形のコンピュータ読み取り可能記憶媒体保有構造をも包含するものである。非限定的な一例として、コンピュータ読み取り可能記憶媒体は、必要に応じて、半導体ベースあるいはその他の集積回路(IC)(例えば、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又は特定用途向けIC(ASIC)など)、ハードディスク、HDD、ハイブリッド式ハードドライブ(HHD)、光ディスク、光ディスクドライブ(ODD)、磁気光ディスク、磁気光ドライブ、フロッピーディスク(登録商標)、フロッピーディスクドライブ(FDD)、磁気テープ、ホログラフィック記憶媒体、ソリッドステートドライブ(SSD)、RAMドライブ、セキュアデジタル(SD)カード、セキュアデジタルドライブ、若しくはその他の好適なコンピュータ読み取り可能記憶媒体、又はこれらの2つ以上の組み合わせを含み得る。
この開示は、何らかの好適なストレージを実現する1つ以上のコンピュータ読み取り可能記憶媒体を意図している。特定の実施形態において、コンピュータ読み取り可能記憶媒体は、必要に応じて、プロセッサ1002の1つ以上の部分(例えば、1つ以上の内部レジスタ若しくはキャッシュなど)、メモリ1004の1つ以上の部分、ストレージ1006の1つ以上の部分、又はこれらの組み合わせを実現してもよい。特定の実施形態において、コンピュータ読み取り可能記憶媒体はRAM又はROMを実現する。特定の実施形態において、コンピュータ読み取り可能記憶媒体は揮発性あるいは永続的なメモリを実現する。特定の実施形態において、1つ以上のコンピュータ読み取り可能記憶媒体がソフトウェアを具現化する。ここで、ソフトウェアへの言及は適宜、1つ以上のアプリケーション、バイトコード、1つ以上のコンピュータプログラム、1つ以上の実行ファイル、1つ以上の命令、ロジック、機械語、1つ以上のスクリプト、又はソースコードを包含するものであり、この逆もまた然りである。特定の実施形態において、ソフトウェアは、1つ以上のアプリケーション・プログラミング・インタフェース(API)を含む。この開示は、如何なる好適なプログラミング言語又は複数のプログラミング言語の組み合わせで書き込まれ、あるいはその他の方法で表現された、如何なる好適なソフトウェアをも意図している。特定の実施形態において、ソフトウェアはソースコード又はオブジェクトコードとして表現され得る。特定の実施形態において、ソフトウェアは、例えばC、Perl又はこれらの好適な拡張版など、より高級(高水準)なプログラミング言語で表現される。特定の実施形態において、ソフトウェアは、例えばアセンブリ言語(又は機械語)など、より低水準のプログラミング言語で表現される。特定の実施形態において、ソフトウェアはJAVAで表現される。特定の実施形態において、ソフトウェアはハイパーテキスト・マークアップ言語(HTML)、拡張マークアップ言語(XML)、又はその他の好適なマークアップ言語で表現される。
この開示は、ここで例示した実施形態への、当業者が理解されるであろう全ての変更、代用、変形、改変及び改良を包含するものである。同様に、添付の請求項は適宜、ここで例示した実施形態への当業者が理解されるであろう全ての変更、代用、変形、改変及び改良を包含するものである。
以上の説明に関し、更に以下の付記を開示する。
(付記1)
1つ以上の計算装置によって実行される方法であって、
ソフトウェアモジュールにアクセスするステップであり、
前記ソフトウェアモジュールは、
1つ以上の入力変数と、
1つ以上の中間変数であり、各中間変数の値が前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、1つ以上の中間変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する、1つ以上の条件付き分岐点と、を有し、且つ
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進む、アクセスするステップと、
前記1つ以上の入力変数に対応する1つ以上の変数セットを構築するステップであり、各変数セットが、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含む、構築するステップと、
各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算するステップと、
前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択するステップと、
前記第1変数セットの前記入力変数に第1記号値を割り当てるステップと、
前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行し、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成するステップと、
前記第1テストケースセットを用いて前記ソフトウェアモジュールを検証するステップと、
を有する方法。
(付記2)
前記入力変数の各々に関して、前記中間変数のうちの何れが該入力変数の値に直接的あるいは間接的に依存する値を有するかを、関連性分析を用いて決定するステップ、を更に有する付記1に記載の方法。
(付記3)
前記ソフトウェアモジュールは1以上の分岐階層を有し、
前記分岐階層の各々は、前記条件付き分岐点のうちの少なくとも1つを有し、
各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される前記平均分岐深さを計算する前記ステップは、
該変数セットの前記入力変数に関して、分岐条件が該入力変数に依存する条件付き分岐点を有する分岐階層の数を計算するステップと、
該変数セットの前記中間変数の各々に関して、分岐条件が該中間変数に依存する条件付き分岐点を有する分岐階層の数を計算するステップと、
これらの分岐階層の数の平均を、該変数セットの前記平均分岐深さとして計算するステップと
を有する、
付記1又は2に記載の方法。
(付記4)
最小の平均分岐深さを有する前記第1変数セットを選択するとき、最小の平均分岐深さを有する変数セットが複数存在する場合、前記第1変数セットとして、最小の平均分岐深さを有する変数セットのうちの1つをランダムに選択する、付記1乃至3の何れか一に記載の方法。
(付記5)
前記1つ以上の変数セットのうち、次に最小の平均分岐深さを有する第2変数セットを選択するステップと、
前記第2変数セットの前記入力変数に第2記号値を割り当てるステップと、
前記第2記号値を有する前記第2変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行し、前記第2変数セットの前記入力変数及び前記中間変数に関する第2テストケースセットを生成するステップと、
前記第2テストケースセットを用いて前記ソフトウェアモジュールを検証するステップと、
を更に有する付記1乃至4の何れか一に記載の方法。
(付記6)
1つ以上の計算装置によって実行される方法であって、
ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスするステップであり、
前記ソフトウェアモジュールは、
1つ以上の変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの変数の値に依存する、1つ以上の条件付き分岐点と、を有し、
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有する、アクセスするステップと、
前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去するステップと、
残りのテストケースから1つ以上の第1テストケースを選択するステップであり、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースである、選択するステップと、
前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択するステップであり、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースである、選択するステップと、
選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストするステップと、
を有する方法。
(付記7)
前記ソフトウェアモジュールの前記変数は、1つ以上の入力変数と1つ以上の中間変数とを有し、各中間変数の値は、前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、付記6に記載の方法。
(付記8)
前記入力変数と前記入力変数に関する前記テストケースからの前記テスト値とを表すグラフを構築するステップを更に有し、
前記グラフは、
各階層が前記入力変数のうちの1つに関連付けられた、前記1つ以上の入力変数に対応する1つ以上の階層と、
前記階層の各々の1つ以上のノードと、
1つ以上のエッジであり、各エッジが、隣接する2つの階層からの2つのノードを結び付け、且つ前記隣接する2つの階層のうちの高い側の階層に関連付けられた入力変数の前記テスト値のうちの1つを表す、1つ以上のエッジと、
を有する、
付記7に記載の方法。
(付記9)
前記テストケースと前記条件付き分岐点とを表す二部グラフを構築するステップを更に有し、
前記二部グラフは、
各第1ノードが前記テストケースのうちの1つを表す、前記複数のテストケースに対応する複数の第1ノードと、
各第2ノードが前記条件付き分岐点のうちの1つを表す、前記1つ以上の条件付き分岐点に対応する1つ以上の第2ノードと、
各エッジが前記第1ノードのうちの1つと前記第2ノードのうちの1つとを結び付ける複数のエッジであり、前記第1ノードのうちの該1つによって表されるテストケースが、前記第2ノードのうちの該1つによって表される条件付き分岐点をカバーする、複数のエッジと
を有する、
付記6乃至8の何れか一に記載の方法。
(付記10)
1つ以上のプロセッサによって実行可能な命令を有するメモリと、
前記メモリに結合され、前記命令を実行するよう動作する1つ以上のプロセッサと
を有するシステムであって、
前記1つ以上のプロセッサは、前記命令を実行するとき、
− ソフトウェアモジュールにアクセスし、
前記ソフトウェアモジュールは、
1つ以上の入力変数と、
1つ以上の中間変数であり、各中間変数の値が前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、1つ以上の中間変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する、1つ以上の条件付き分岐点と、を有し、且つ
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
− 前記1つ以上の入力変数に対応する1つ以上の変数セットを構築し、各変数セットは、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含み、
− 各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算し、
− 前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択し、
− 前記第1変数セットの前記入力変数に第1記号値を割り当て、
− 前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行することで、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成し、
− 前記第1テストケースセットを用いて前記ソフトウェアモジュールを検証する、
よう動作する、システム。
(付記11)
前記1つ以上のプロセッサは更に、前記命令を実行するとき、前記入力変数の各々に関して、前記中間変数のうちの何れが該入力変数の値に直接的あるいは間接的に依存する値を有するかを、関連性分析を用いて決定するよう動作する、付記10に記載のシステム。
(付記12)
前記ソフトウェアモジュールは1以上の分岐階層を有し、
前記分岐階層の各々は、前記条件付き分岐点のうちの少なくとも1つを有し、
各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される前記平均分岐深さを計算することは、
該変数セットの前記入力変数に関して、分岐条件が該入力変数に依存する条件付き分岐点を有する分岐階層の数を計算し、
該変数セットの前記中間変数の各々に関して、分岐条件が該中間変数に依存する条件付き分岐点を有する分岐階層の数を計算し、
これらの分岐階層の数の平均を、該変数セットの前記平均分岐深さとして計算する
ことを有する、
付記10又は11に記載のシステム。
(付記13)
最小の平均分岐深さを有する前記第1変数セットを選択するとき、最小の平均分岐深さを有する変数セットが複数存在する場合、前記第1変数セットとして、最小の平均分岐深さを有する変数セットのうちの1つをランダムに選択する、付記10乃至12の何れか一に記載のシステム。
(付記14)
前記1つ以上のプロセッサは更に、前記命令を実行するとき、
前記1つ以上の変数セットのうち、次に最小の平均分岐深さを有する第2変数セットを選択し、
前記第2変数セットの前記入力変数に第2記号値を割り当て、
前記第2記号値を有する前記第2変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行することで、前記第2変数セットの前記入力変数及び前記中間変数に関する第2テストケースセットを生成し、
前記第2テストケースセットを用いて前記ソフトウェアモジュールを検証する、
よう動作する、付記10乃至13の何れか一に記載のシステム。
(付記15)
1つ以上のプロセッサによって実行可能な命令を有するメモリと、
前記メモリに結合され、前記命令を実行するよう動作する1つ以上のプロセッサと
を有するシステムであって、
前記1つ以上のプロセッサは、前記命令を実行するとき、
− ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスし、
前記ソフトウェアモジュールは、
1つ以上の変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの変数の値に依存する、1つ以上の条件付き分岐点と、を有し、
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有し、
− 前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去し、
− 残りのテストケースから1つ以上の第1テストケースを選択し、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースであり、
− 前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択し、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースであり、
− 選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストする、
よう動作する、システム。
(付記16)
前記ソフトウェアモジュールの前記変数は、1つ以上の入力変数と1つ以上の中間変数とを有し、各中間変数の値は、前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、付記15に記載のシステム。
(付記17)
前記1つ以上のプロセッサは更に、前記命令を実行するとき、前記入力変数と前記入力変数に関する前記テストケースからの前記テスト値とを表すグラフを構築するよう動作し、
前記グラフは、
各階層が前記入力変数のうちの1つに関連付けられた、前記1つ以上の入力変数に対応する1つ以上の階層と、
前記階層の各々の1つ以上のノードと、
1つ以上のエッジであり、各エッジが、隣接する2つの階層からの2つのノードを結び付け、且つ前記隣接する2つの階層のうちの高い側の階層に関連付けられた入力変数の前記テスト値のうちの1つを表す、1つ以上のエッジと、
を有する、
付記16に記載のシステム。
(付記18)
前記1つ以上のプロセッサは更に、前記命令を実行するとき、前記テストケースと前記条件付き分岐点とを表す二部グラフを構築するよう動作し、
前記二部グラフは、
各第1ノードが前記テストケースのうちの1つを表す、前記複数のテストケースに対応する複数の第1ノードと、
各第2ノードが前記条件付き分岐点のうちの1つを表す、前記1つ以上の条件付き分岐点に対応する1つ以上の第2ノードと、
各エッジが前記第1ノードのうちの1つと前記第2ノードのうちの1つとを結び付ける複数のエッジであり、前記第1ノードのうちの該1つによって表されるテストケースが、前記第2ノードのうちの該1つによって表される条件付き分岐点をカバーする、複数のエッジと
を有する、
付記15乃至17の何れか一に記載のシステム。
(付記19)
プログラムを格納したコンピュータ読み取り可能記憶媒体であって、前記プログラムは、1つ以上の計算装置によって実行されるとき、該1つ以上の計算装置に、
− ソフトウェアモジュールにアクセスさせ、
前記ソフトウェアモジュールは、
1つ以上の入力変数と、
1つ以上の中間変数であり、各中間変数の値が前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、1つ以上の中間変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する、1つ以上の条件付き分岐点と、を有し、且つ
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
− 前記1つ以上の入力変数に対応する1つ以上の変数セットを構築させ、各変数セットは、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含み、
− 各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算させ、
− 前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択させ、
− 前記第1変数セットの前記入力変数に第1記号値を割り当てさせ、
− 前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行させて、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成させ、
− 前記第1テストケースセットを用いて前記ソフトウェアモジュールを検証させる、
コンピュータ読み取り可能記憶媒体。
(付記20)
前記プログラムは更に、前記1つ以上の計算装置によって実行されるとき、前記1つ以上の計算装置に、前記入力変数の各々に関して、前記中間変数のうちの何れが該入力変数の値に直接的あるいは間接的に依存する値を有するかを、関連性分析を用いて決定させる、付記19に記載のコンピュータ読み取り可能記憶媒体。
(付記21)
前記ソフトウェアモジュールは1以上の分岐階層を有し、
前記分岐階層の各々は、前記条件付き分岐点のうちの少なくとも1つを有し、
各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される前記平均分岐深さを計算させることは、
該変数セットの前記入力変数に関して、分岐条件が該入力変数に依存する条件付き分岐点を有する分岐階層の数を計算させ、
該変数セットの前記中間変数の各々に関して、分岐条件が該中間変数に依存する条件付き分岐点を有する分岐階層の数を計算させ、
これらの分岐階層の数の平均を、該変数セットの前記平均分岐深さとして計算させる
ことを有する、
付記19又は20に記載のコンピュータ読み取り可能記憶媒体。
(付記22)
最小の平均分岐深さを有する前記第1変数セットを選択させるとき、最小の平均分岐深さを有する変数セットが複数存在する場合、前記第1変数セットとして、最小の平均分岐深さを有する変数セットのうちの1つをランダムに選択させる、付記19乃至21の何れか一に記載のコンピュータ読み取り可能記憶媒体。
(付記23)
前記プログラムは更に、前記1つ以上の計算装置によって実行されるとき、前記1つ以上の計算装置に、
前記1つ以上の変数セットのうち、次に最小の平均分岐深さを有する第2変数セットを選択させ、
前記第2変数セットの前記入力変数に第2記号値を割り当てさせ、
前記第2記号値を有する前記第2変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行させて、前記第2変数セットの前記入力変数及び前記中間変数に関する第2テストケースセットを生成させ、
前記第2テストケースセットを用いて前記ソフトウェアモジュールを検証させる、
付記19乃至22の何れか一に記載のコンピュータ読み取り可能記憶媒体。
(付記24)
プログラムを格納したコンピュータ読み取り可能記憶媒体であって、前記プログラムは、1つ以上の計算装置によって実行されるとき、該1つ以上の計算装置に、
− ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスさせ、
前記ソフトウェアモジュールは、
1つ以上の変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの変数の値に依存する、1つ以上の条件付き分岐点と、を有し、
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有し、
− 前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去させ、
− 残りのテストケースから1つ以上の第1テストケースを選択させ、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースであり、
− 前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択させ、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースであり、
− 選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストさせる、
コンピュータ読み取り可能記憶媒体。
(付記25)
前記ソフトウェアモジュールの前記変数は、1つ以上の入力変数と1つ以上の中間変数とを有し、各中間変数の値は、前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、付記24に記載のコンピュータ読み取り可能記憶媒体。
(付記26)
前記プログラムは更に、前記1つ以上の計算装置によって実行されるとき、前記1つ以上の計算装置に、前記入力変数と前記入力変数に関する前記テストケースからの前記テスト値とを表すグラフを構築させ、
前記グラフは、
各階層が前記入力変数のうちの1つに関連付けられた、前記1つ以上の入力変数に対応する1つ以上の階層と、
前記階層の各々の1つ以上のノードと、
1つ以上のエッジであり、各エッジが、隣接する2つの階層からの2つのノードを結び付け、且つ前記隣接する2つの階層のうちの高い側の階層に関連付けられた入力変数の前記テスト値のうちの1つを表す、1つ以上のエッジと、
を有する、
付記25に記載のコンピュータ読み取り可能記憶媒体。
(付記27)
前記プログラムは更に、前記1つ以上の計算装置によって実行されるとき、前記1つ以上の計算装置に、前記テストケースと前記条件付き分岐点とを表す二部グラフを構築させ、
前記二部グラフは、
各第1ノードが前記テストケースのうちの1つを表す、前記複数のテストケースに対応する複数の第1ノードと、
各第2ノードが前記条件付き分岐点のうちの1つを表す、前記1つ以上の条件付き分岐点に対応する1つ以上の第2ノードと、
各エッジが前記第1ノードのうちの1つと前記第2ノードのうちの1つとを結び付ける複数のエッジであり、前記第1ノードのうちの該1つによって表されるテストケースが、前記第2ノードのうちの該1つによって表される条件付き分岐点をカバーする、複数のエッジと
を有する、
付記24乃至26の何れか一に記載のシステム。
(付記28)
ソフトウェアモジュールにアクセスする手段であり、
前記ソフトウェアモジュールは、
1つ以上の入力変数と、
1つ以上の中間変数であり、各中間変数の値が前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、1つ以上の中間変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する、1つ以上の条件付き分岐点と、を有し、且つ
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進む、アクセスする手段と、
前記1つ以上の入力変数に対応する1つ以上の変数セットを構築する手段であり、各変数セットが、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含む、構築する手段と、
各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算する手段と、
前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択する手段と、
前記第1変数セットの前記入力変数に第1記号値を割り当てる手段と、
前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行し、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成する手段と、
前記第1テストケースセットを用いて前記ソフトウェアモジュールを検証する手段と、
を有するシステム。
(付記29)
ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスする手段であり、
前記ソフトウェアモジュールは、
1つ以上の変数と、
1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの変数の値に依存する、1つ以上の条件付き分岐点と、を有し、
前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有する、アクセスする手段と、
前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去する手段と、
残りのテストケースから1つ以上の第1テストケースを選択する手段であり、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースである、選択する手段と、
前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択する手段であり、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースである、選択する手段と、
選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストする手段と、
を有するシステム。
300 システム
302 関連性分析部
304 分岐深さ計算部
306 記号的実行部
312 ソフトウェアモジュール
314 テストケースセット
600 システム
602 動的テストケース生成部
604 二部グラフ構築部
606 テストケース選択部
612 テストケースセット
614 選択されたテストケース
700 グラフ
702、704、706、708、710 ノード
800 二部グラフ
812、814、816 ノード(テストケース)
822、824、826、828 ノード(条件付き分岐点)
900 ネットワーク環境
910 ネットワーク
920 サーバ
930 クライアント
932 ブラウザ
940 データストレージ
950 リンク
1000 コンピュータシステム
1002 プロセッサ
1004 メモリ
1006 ストレージ
1008 I/Oインタフェース
1010 通信インタフェース
1012 バス

Claims (15)

  1. 1つ以上の計算装置によって実行される方法であって、
    ソフトウェアモジュールにアクセスするステップであり、
    前記ソフトウェアモジュールは、
    1つ以上の入力変数と、
    1つ以上の中間変数であり、各中間変数の値が前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、1つ以上の中間変数と、
    1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する、1つ以上の条件付き分岐点と、を有し、且つ
    前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進む、アクセスするステップと、
    前記1つ以上の入力変数に対応する1つ以上の変数セットを構築するステップであり、各変数セットが、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含む、構築するステップと、
    各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算するステップと、
    前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択するステップと、
    前記第1変数セットの前記入力変数に第1記号値を割り当てるステップと、
    前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行し、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成するステップと、
    前記第1テストケースセットを用いて前記ソフトウェアモジュールを検証するステップと、
    を有する方法。
  2. 前記入力変数の各々に関して、前記中間変数のうちの何れが該入力変数の値に直接的あるいは間接的に依存する値を有するかを、関連性分析を用いて決定するステップ、を更に有する請求項1に記載の方法。
  3. 前記ソフトウェアモジュールは1以上の分岐階層を有し、
    前記分岐階層の各々は、前記条件付き分岐点のうちの少なくとも1つを有し、
    各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される前記平均分岐深さを計算する前記ステップは、
    該変数セットの前記入力変数に関して、分岐条件が該入力変数に依存する条件付き分岐点を有する分岐階層の数を計算するステップと、
    該変数セットの前記中間変数の各々に関して、分岐条件が該中間変数に依存する条件付き分岐点を有する分岐階層の数を計算するステップと、
    これらの分岐階層の数の平均を、該変数セットの前記平均分岐深さとして計算するステップと
    を有する、
    請求項1又は2に記載の方法。
  4. 最小の平均分岐深さを有する前記第1変数セットを選択するとき、最小の平均分岐深さを有する変数セットが複数存在する場合、前記第1変数セットとして、最小の平均分岐深さを有する変数セットのうちの1つをランダムに選択する、請求項1乃至3の何れか一項に記載の方法。
  5. 前記1つ以上の変数セットのうち、次に最小の平均分岐深さを有する第2変数セットを選択するステップと、
    前記第2変数セットの前記入力変数に第2記号値を割り当てるステップと、
    前記第2記号値を有する前記第2変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行し、前記第2変数セットの前記入力変数及び前記中間変数に関する第2テストケースセットを生成するステップと、
    前記第2テストケースセットを用いて前記ソフトウェアモジュールを検証するステップと、
    を更に有する請求項1乃至4の何れか一項に記載の方法。
  6. 1つ以上の計算装置によって実行される方法であって、
    ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスするステップであり、
    前記ソフトウェアモジュールは、
    1つ以上の変数と、
    1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの変数の値に依存する、1つ以上の条件付き分岐点と、を有し、
    前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
    前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有する、アクセスするステップと、
    前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去するステップと、
    残りのテストケースから1つ以上の第1テストケースを選択するステップであり、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースである、選択するステップと、
    前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択するステップであり、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースである、選択するステップと、
    選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストするステップと、
    を有する方法。
  7. 前記ソフトウェアモジュールの前記変数は、1つ以上の入力変数と1つ以上の中間変数とを有し、各中間変数の値は、前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、請求項6に記載の方法。
  8. 前記入力変数と前記入力変数に関する前記テストケースからの前記テスト値とを表すグラフを構築するステップを更に有し、
    前記グラフは、
    各階層が前記入力変数のうちの1つに関連付けられた、前記1つ以上の入力変数に対応する1つ以上の階層と、
    前記階層の各々の1つ以上のノードと、
    1つ以上のエッジであり、各エッジが、隣接する2つの階層からの2つのノードを結び付け、且つ前記隣接する2つの階層のうちの高い側の階層に関連付けられた入力変数の前記テスト値のうちの1つを表す、1つ以上のエッジと、
    を有する、
    請求項7に記載の方法。
  9. 前記テストケースと前記条件付き分岐点とを表す二部グラフを構築するステップを更に有し、
    前記二部グラフは、
    各第1ノードが前記テストケースのうちの1つを表す、前記複数のテストケースに対応する複数の第1ノードと、
    各第2ノードが前記条件付き分岐点のうちの1つを表す、前記1つ以上の条件付き分岐点に対応する1つ以上の第2ノードと、
    各エッジが前記第1ノードのうちの1つと前記第2ノードのうちの1つとを結び付ける複数のエッジであり、前記第1ノードのうちの該1つによって表されるテストケースが、前記第2ノードのうちの該1つによって表される条件付き分岐点をカバーする、複数のエッジと
    を有する、
    請求項6乃至8の何れか一項に記載の方法。
  10. 1つ以上のプロセッサによって実行可能な命令を有するメモリと、
    前記メモリに結合され、前記命令を実行するよう動作する1つ以上のプロセッサと
    を有するシステムであって、
    前記1つ以上のプロセッサは、前記命令を実行するとき、
    − ソフトウェアモジュールにアクセスし、
    前記ソフトウェアモジュールは、
    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つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有し、
    − 前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去し、
    − 残りのテストケースから1つ以上の第1テストケースを選択し、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースであり、
    − 前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択し、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースであり、
    − 選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストする、
    よう動作する、システム。
  12. プログラムを格納したコンピュータ読み取り可能記憶媒体であって、前記プログラムは、1つ以上の計算装置によって実行されるとき、該1つ以上の計算装置に、
    − ソフトウェアモジュールにアクセスさせ、
    前記ソフトウェアモジュールは、
    1つ以上の入力変数と、
    1つ以上の中間変数であり、各中間変数の値が前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、1つ以上の中間変数と、
    1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する、1つ以上の条件付き分岐点と、を有し、且つ
    前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
    − 前記1つ以上の入力変数に対応する1つ以上の変数セットを構築させ、各変数セットは、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含み、
    − 各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算させ、
    − 前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択させ、
    − 前記第1変数セットの前記入力変数に第1記号値を割り当てさせ、
    − 前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行させて、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成させ、
    − 前記第1テストケースセットを用いて前記ソフトウェアモジュールを検証させる、
    コンピュータ読み取り可能記憶媒体。
  13. プログラムを格納したコンピュータ読み取り可能記憶媒体であって、前記プログラムは、1つ以上の計算装置によって実行されるとき、該1つ以上の計算装置に、
    − ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスさせ、
    前記ソフトウェアモジュールは、
    1つ以上の変数と、
    1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの変数の値に依存する、1つ以上の条件付き分岐点と、を有し、
    前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
    前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有し、
    − 前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去させ、
    − 残りのテストケースから1つ以上の第1テストケースを選択させ、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースであり、
    − 前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択させ、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースであり、
    − 選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストさせる、
    コンピュータ読み取り可能記憶媒体。
  14. ソフトウェアモジュールにアクセスする手段であり、
    前記ソフトウェアモジュールは、
    1つ以上の入力変数と、
    1つ以上の中間変数であり、各中間変数の値が前記入力変数のうちの少なくとも1つの入力変数の値に直接的あるいは間接的に依存する、1つ以上の中間変数と、
    1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記入力変数及び前記中間変数のうちの少なくとも1つの入力変数及び/又は中間変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの入力変数及び/又は中間変数の値に依存する、1つ以上の条件付き分岐点と、を有し、且つ
    前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進む、アクセスする手段と、
    前記1つ以上の入力変数に対応する1つ以上の変数セットを構築する手段であり、各変数セットが、前記入力変数のうちの1つと、前記入力変数のうちの該1つの値に直接的あるいは間接的に依存する値を有する中間変数とを含む、構築する手段と、
    各変数セットに関して、該変数セットの前記入力変数及び前記中間変数によって影響される平均分岐深さを計算する手段と、
    前記1つ以上の変数セットのうち最小の平均分岐深さを有する第1変数セットを選択する手段と、
    前記第1変数セットの前記入力変数に第1記号値を割り当てる手段と、
    前記第1記号値を有する前記第1変数セットの前記入力変数を用いて、前記ソフトウェアモジュールを記号的に実行し、前記第1変数セットの前記入力変数及び前記中間変数に関する第1テストケースセットを生成する手段と、
    前記第1テストケースセットを用いて前記ソフトウェアモジュールを検証する手段と、
    を有するシステム。
  15. ソフトウェアモジュール及び該ソフトウェアモジュール用の複数のテストケースにアクセスする手段であり、
    前記ソフトウェアモジュールは、
    1つ以上の変数と、
    1つ以上の条件付き分岐点であり、各条件付き分岐点が、前記変数のうちの少なくとも1つの変数によって規定される分岐条件を有し、該分岐条件が満たされるかが、前記少なくとも1つの変数の値に依存する、1つ以上の条件付き分岐点と、を有し、
    前記ソフトウェアモジュールの実行中に、前記条件付き分岐点の各々において、前記ソフトウェアモジュールは、該条件付き分岐点の分岐条件が満たされるかに応じて異なる経路に進み、
    前記テストケースの各々は、前記条件付き分岐点のうちの少なくとも1つをカバーし、且つ前記条件付き分岐点のうちの前記少なくとも1つの分岐条件を規定する前記少なくとも1つの変数に関する少なくとも1つのテスト値を有する、アクセスする手段と、
    前記条件付き分岐点の各々に関して、前記複数のテストケースのうちに、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースが複数存在する場合に、該条件付き分岐点をカバーし且つ前記ソフトウェアモジュールを実行中に同一の経路に進ませるテストケースのうち1つを除く全てを、前記複数のテストケースから除去する手段と、
    残りのテストケースから1つ以上の第1テストケースを選択する手段であり、各第1テストケースは、前記条件付き分岐点のうちの少なくとも1つが該第1テストケースによってのみカバーされるテストケースである、選択する手段と、
    前記条件付き分岐点の全てが前記第1テストケース及び第2テストケースのうちの少なくとも1つのテストケースによってカバーされるまで、残りのテストケースから1つ以上の第2テストケースを繰り返し選択する手段であり、各繰り返しにおいて選択される第2テストケースは、該繰り返しにおいて最も多数の条件付き分岐点をカバーするテストケースである、選択する手段と、
    選択された前記第1テストケース及び前記第2テストケースのみを用いて、前記ソフトウェアモジュールをテストする手段と、
    を有するシステム。
JP2011115090A 2010-05-24 2011-05-23 ソフトウェアモジュールのテスト方法及びシステム Active JP5652326B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/785,756 US8479171B2 (en) 2010-05-24 2010-05-24 Generating test sets using intelligent variable selection and test set compaction
US12/785,756 2010-05-24

Publications (2)

Publication Number Publication Date
JP2011248887A JP2011248887A (ja) 2011-12-08
JP5652326B2 true JP5652326B2 (ja) 2015-01-14

Family

ID=44973536

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011115090A Active JP5652326B2 (ja) 2010-05-24 2011-05-23 ソフトウェアモジュールのテスト方法及びシステム

Country Status (2)

Country Link
US (1) US8479171B2 (ja)
JP (1) JP5652326B2 (ja)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100223599A1 (en) * 2009-02-27 2010-09-02 Fujitsu Limited Efficient symbolic execution of software using static analysis
US8504997B2 (en) * 2009-03-19 2013-08-06 Fujitsu Limited Environment data refinement based on static analysis and symbolic execution
US8719771B2 (en) * 2009-09-28 2014-05-06 Cadence Design Systems, Inc. Method and system for test reduction and analysis
US8453125B2 (en) * 2010-12-13 2013-05-28 International Business Machines Corporation Generating inputs for client-server programs for fault-detection and localization
JP5767471B2 (ja) * 2010-12-24 2015-08-19 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation テストの網羅性を評価する装置及び方法
US8869113B2 (en) * 2011-01-20 2014-10-21 Fujitsu Limited Software architecture for validating C++ programs using symbolic execution
US9262307B2 (en) * 2011-10-05 2016-02-16 International Business Machines Corporation Modeling test space for system behavior with optional variable combinations
JP5900197B2 (ja) * 2012-01-31 2016-04-06 富士通株式会社 経路条件選択装置、該プログラム、及び該方法
US9058427B2 (en) * 2012-07-16 2015-06-16 Fujitsu Limited Iterative generation of symbolic test drivers for object-oriented languages
JP5900212B2 (ja) * 2012-07-18 2016-04-06 富士通株式会社 テストデータ生成装置、該プログラム、及び該方法
US8850270B2 (en) 2012-07-19 2014-09-30 International Business Machines Corporation Test selection
US8949795B2 (en) * 2012-08-23 2015-02-03 International Business Machines Corporation Generating test cases for covering enterprise rules and predicates
US8856751B2 (en) * 2012-09-20 2014-10-07 Fujitsu Limited Abstract symbolic execution for scaling symbolic execution generation and automatic test generation
US9274933B2 (en) 2012-11-14 2016-03-01 International Business Machines Corporation Pretest setup planning
US8887112B2 (en) 2012-11-14 2014-11-11 International Business Machines Corporation Test validation planning
JP6003699B2 (ja) * 2013-02-08 2016-10-05 富士通株式会社 テストデータ生成プログラム、方法及び装置
US9292419B1 (en) * 2013-06-04 2016-03-22 The Mathworks, Inc. Code coverage and confidence determination
CN104252408B (zh) * 2013-06-26 2017-04-12 国际商业机器公司 提供测试用例的方法和装置
US9830253B2 (en) 2013-09-27 2017-11-28 International Business Machines Corporation Eliminating redundant interactions when testing computer software applications
US9367434B2 (en) * 2013-10-02 2016-06-14 Accenture Global Services Limited Testing framework for policy-based workflows
US9983977B2 (en) * 2014-02-26 2018-05-29 Western Michigan University Research Foundation Apparatus and method for testing computer program implementation against a design model
US20160019135A1 (en) * 2014-07-21 2016-01-21 Simula Innovation As Optimal test suite reduction as a network maximum flow
US10387585B2 (en) * 2014-10-30 2019-08-20 The Mathworks, Inc. System and method for performing model verification
EP3238381A1 (en) * 2014-12-23 2017-11-01 Entit Software LLC Load testing
IN2015DE01188A (ja) * 2015-04-29 2015-06-05 Hcl Technologies Ltd
US10330728B2 (en) * 2015-05-26 2019-06-25 Samsung Electronics Co., Ltd. Method and apparatus for obtaining a maximally compressed verification test set
US9830255B2 (en) 2015-12-03 2017-11-28 Wipro Limited System and method for optimizing test suite comprising plurality of test cases
CN106294163A (zh) * 2016-08-12 2017-01-04 北京航空航天大学 一种轻量级的代码分支覆盖率检测方法
US10474563B1 (en) * 2016-12-28 2019-11-12 Wells Fargo Bank, N.A. System testing from production transactions
US20180217921A1 (en) * 2017-02-02 2018-08-02 Cognizant Technology Solutions India Pvt. Ltd. System and method for generating and executing automated test cases
US10394697B2 (en) * 2017-05-15 2019-08-27 International Business Machines Corporation Focus area integration test heuristics
US10592405B2 (en) 2017-10-03 2020-03-17 International Business Machines Corporation Visualization of vulnerabilities detected by static application testing
US11061811B2 (en) 2017-12-15 2021-07-13 International Business Machines Corporation Optimizing software testing via group testing
US10705810B2 (en) * 2018-11-30 2020-07-07 Sap Se Automatic code generation
US11099975B2 (en) 2019-01-24 2021-08-24 International Business Machines Corporation Test space analysis across multiple combinatoric models
US11010282B2 (en) 2019-01-24 2021-05-18 International Business Machines Corporation Fault detection and localization using combinatorial test design techniques while adhering to architectural restrictions
US11010285B2 (en) 2019-01-24 2021-05-18 International Business Machines Corporation Fault detection and localization to generate failing test cases using combinatorial test design techniques
US11106567B2 (en) 2019-01-24 2021-08-31 International Business Machines Corporation Combinatoric set completion through unique test case generation
US11263116B2 (en) 2019-01-24 2022-03-01 International Business Machines Corporation Champion test case generation
US11422926B2 (en) * 2019-04-16 2022-08-23 Red Hat, Inc. Managing test coverage for a software application
US11036624B2 (en) 2019-06-13 2021-06-15 International Business Machines Corporation Self healing software utilizing regression test fingerprints
US10970195B2 (en) 2019-06-13 2021-04-06 International Business Machines Corporation Reduction of test infrastructure
US10963366B2 (en) 2019-06-13 2021-03-30 International Business Machines Corporation Regression test fingerprints based on breakpoint values
US10970197B2 (en) 2019-06-13 2021-04-06 International Business Machines Corporation Breakpoint value-based version control
US11232020B2 (en) 2019-06-13 2022-01-25 International Business Machines Corporation Fault detection using breakpoint value-based fingerprints of failing regression test cases
US11422924B2 (en) 2019-06-13 2022-08-23 International Business Machines Corporation Customizable test set selection using code flow trees
US10990510B2 (en) 2019-06-13 2021-04-27 International Business Machines Corporation Associating attribute seeds of regression test cases with breakpoint value-based fingerprints
US11074164B1 (en) * 2020-03-06 2021-07-27 Bank Of America Corporation Real-time regression test generator
US11288153B2 (en) 2020-06-18 2022-03-29 Bank Of America Corporation Self-healing computing device

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
JPH07219819A (ja) * 1993-12-10 1995-08-18 Nec Corp プログラム評価データ作成方法
JPH09128266A (ja) * 1995-10-31 1997-05-16 Fujitsu Ltd 原始プログラム経路検索装置及びその検索方法
US5761408A (en) * 1996-01-16 1998-06-02 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution
JP3418544B2 (ja) * 1998-03-24 2003-06-23 日立ソフトウエアエンジニアリング株式会社 プログラムのテストデータ自動生成装置
US6675382B1 (en) 1999-06-14 2004-01-06 Sun Microsystems, Inc. Software packaging and distribution system
US6938186B2 (en) 2002-05-28 2005-08-30 Microsoft Corporation System and method for performing a path-sensitive verification on a program
US7168009B2 (en) 2003-09-24 2007-01-23 International Business Machines Corporation Method and system for identifying errors in computer software
US7584455B2 (en) 2003-10-23 2009-09-01 Microsoft Corporation Predicate-based test coverage and generation
US7743350B2 (en) * 2004-05-21 2010-06-22 Fujitsu Limited Verifying one or more properties of a design using SAT-based BMC
US7661097B2 (en) 2005-04-05 2010-02-09 Cisco Technology, Inc. Method and system for analyzing source code
US20060247907A1 (en) 2005-04-29 2006-11-02 Microsoft Corporation Deciding assertions in programs with references
US20060253739A1 (en) 2005-05-03 2006-11-09 Godefroid Patrice I Method and apparatus for performing unit testing of software modules with use of directed automated random testing
US8046746B2 (en) * 2005-08-04 2011-10-25 Microsoft Corporation Symbolic execution of object oriented programs with axiomatic summaries
US7844951B2 (en) 2005-12-30 2010-11-30 Microsoft Corporation Specification generation from implementations
US8209667B2 (en) 2006-01-11 2012-06-26 International Business Machines Corporation Software verification using hybrid explicit and symbolic model checking
US7861226B1 (en) * 2006-03-16 2010-12-28 Avaya Inc. Constraint solver to code based test data generation for improving software reliability and security
US7926039B2 (en) * 2006-03-28 2011-04-12 Nec Laboratories America, Inc. Reachability analysis for program verification
US8924938B2 (en) * 2006-09-28 2014-12-30 Nec Laboratories America, Inc. Software testing using machine learning
US7681180B2 (en) 2007-06-06 2010-03-16 Microsoft Corporation Parameterized test driven development
US8185881B2 (en) 2007-06-19 2012-05-22 International Business Machines Corporation Procedure summaries for pointer analysis
US7873945B2 (en) 2007-06-29 2011-01-18 Microsoft Corporation Automatically generating test cases for binary code
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
US20090228871A1 (en) 2008-03-10 2009-09-10 Microsoft Corporation Managing generation of security tests
US8271953B2 (en) * 2008-03-12 2012-09-18 Fujitsu Limited System and method for providing middleware for capture of global requirements and validation for web applications
US8549486B2 (en) 2008-04-21 2013-10-01 Microsoft Corporation Active property checking
US8402440B2 (en) * 2008-07-07 2013-03-19 Nec Laboratories America, Inc. Program verification through symbolic enumeration of control path programs
US8387021B2 (en) * 2008-09-26 2013-02-26 Microsoft Corporation Symbolic runtime checking of quantified contracts
US8286140B2 (en) * 2008-10-10 2012-10-09 American Express Travel Related Services Company, Inc. System, computer program, and method for a static code coverage analyzer for computer programs
US8359576B2 (en) 2008-11-14 2013-01-22 Fujitsu Limited Using symbolic execution to check global temporal requirements in an application
US20100223599A1 (en) * 2009-02-27 2010-09-02 Fujitsu Limited Efficient symbolic execution of software using static analysis
US8468499B2 (en) * 2009-03-16 2013-06-18 Ntt Docomo, Inc. Directed testing for property violations
US8504997B2 (en) * 2009-03-19 2013-08-06 Fujitsu Limited Environment data refinement based on static analysis and symbolic execution
US8387016B2 (en) * 2009-05-01 2013-02-26 Microsoft Corporation Whitebox trace fuzzing
US20100287534A1 (en) * 2009-05-07 2010-11-11 Microsoft Corporation Test case analysis and clustering
US20100313187A1 (en) 2009-06-05 2010-12-09 Hee Beng Kuan Tan Method and system for detecting infeasible paths
US20110016456A1 (en) * 2009-07-14 2011-01-20 International Business Machines Corporation Generating additional user inputs for fault detection and localization in dynamic software applications
US8479170B2 (en) * 2010-05-12 2013-07-02 Fujitsu Limited Generating software application user-input data through analysis of client-tier source code
US20120017119A1 (en) * 2010-07-16 2012-01-19 Fujitsu Limited Solving Hybrid Constraints to Generate Test Cases for Validating a Software Module
US20120017200A1 (en) * 2010-07-16 2012-01-19 Fujitsu Limited Solving Hybrid Constraints to Validate a Security Software Module for Detecting Injection Attacks
US8402319B2 (en) * 2010-09-30 2013-03-19 Fujitsu Limited Method and system to extract a navigation model for analysis of a web application
US8914775B2 (en) * 2010-10-29 2014-12-16 Fujitsu Limited Dynamic and intelligent partial computation management for efficient parallelization of software analysis in a distributed computing environment
US8539500B2 (en) * 2010-10-29 2013-09-17 Fujitsu Limited Efficient partial execution for the parallelization of software analysis in a distributed computing environment
US8763001B2 (en) * 2010-10-29 2014-06-24 Fujitsu Limited Technique for efficient parallelization of software analysis in a distributed computing environment through intelligent dynamic load balancing
US8789054B2 (en) * 2010-10-29 2014-07-22 Fujitsu Limited Scheduling policy for efficient parallelization of software analysis in a distributed computing environment
US20120192162A1 (en) * 2011-01-20 2012-07-26 Fujitsu Limited Optimizing Handlers for Application-Specific Operations for Validating C++ Programs Using Symbolic Execution
US8869113B2 (en) * 2011-01-20 2014-10-21 Fujitsu Limited Software architecture for validating C++ programs using symbolic execution
US8943487B2 (en) * 2011-01-20 2015-01-27 Fujitsu Limited Optimizing libraries for validating C++ programs using symbolic execution
US8595701B2 (en) * 2011-02-04 2013-11-26 Fujitsu Limited Symbolic execution and test generation for GPU programs
US8645924B2 (en) * 2011-06-06 2014-02-04 Fujitsu Limited Lossless path reduction for efficient symbolic execution and automatic test generation

Also Published As

Publication number Publication date
JP2011248887A (ja) 2011-12-08
US8479171B2 (en) 2013-07-02
US20110289488A1 (en) 2011-11-24

Similar Documents

Publication Publication Date Title
JP5652326B2 (ja) ソフトウェアモジュールのテスト方法及びシステム
JP5786513B2 (ja) ソフトウェアモジュールを検査するためのシステム、方法及び記憶媒体
JP5786512B2 (ja) インジェクション攻撃を検出するためのセキュリティ・ソフトウェア・モジュールを検証するためのハイブリッド制約条件の求解
JP5786511B2 (ja) ソフトウェア・モジュールの仕様要件を検証するためのハイブリッド制約条件の求解
JP5803690B2 (ja) 記号的実行を用いてc++プログラムを検証するソフトウェアアーキテクチャ
JP5821651B2 (ja) 記号的実行を用いてc++プログラムを検証するための方法及びシステム
US8543983B2 (en) Creating hierarchical message sequence charts for visualizing user-interactive applications
JP5742521B2 (ja) ウェブアプリケーションのフォームの自動テストのための方法及びプログラム
EP2485149A1 (en) Symbolic execution and test generation for programs to be run on a graphic processor
JP5682489B2 (ja) ソフトウェア・フレームワークを比較するためのシステム及び方法
EP2503464A1 (en) Optimizing handlers for application-specific operations for validating C++ programs using symbolic execution
JP5691840B2 (ja) コンピュータ装置により使用される方法、システム、記憶媒体及びコンピュータプログラム
US20160335171A1 (en) Test automation modeling
JP2012018675A (ja) アプリケーション分析用のデータベースモデルを生成するシステム及び方法
US11334349B2 (en) Removing feature flag-related codebase from applications
JP2010267265A (ja) イベント駆動型アプリケーションの分析のためのドライバの生成
JP5918102B2 (ja) 解析システム、解析装置、解析方法及び解析プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140929

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: 20141021

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141103

R150 Certificate of patent or registration of utility model

Ref document number: 5652326

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150