JP6528465B2 - ソフトウェアテストのためのシンボリック実行における状態パラメータ化 - Google Patents

ソフトウェアテストのためのシンボリック実行における状態パラメータ化 Download PDF

Info

Publication number
JP6528465B2
JP6528465B2 JP2015041801A JP2015041801A JP6528465B2 JP 6528465 B2 JP6528465 B2 JP 6528465B2 JP 2015041801 A JP2015041801 A JP 2015041801A JP 2015041801 A JP2015041801 A JP 2015041801A JP 6528465 B2 JP6528465 B2 JP 6528465B2
Authority
JP
Japan
Prior art keywords
state
states
parametric
execution
symbolic
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
JP2015041801A
Other languages
English (en)
Other versions
JP2015204109A (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 JP2015204109A publication Critical patent/JP2015204109A/ja
Application granted granted Critical
Publication of JP6528465B2 publication Critical patent/JP6528465B2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • 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/3676Test management for coverage analysis

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)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

本開示は、ソフトウェアテストのためのシンボリック実行、特に、シンボリック実行における状態パラメータ化に関する。
ソフトウェアプログラムの遍在的存在が日常生活の多くの側面に浸透するにつれて、堅牢かつ信頼性のある実行可能プログラムを提供するためのソフトウェアコードの検査及び検証によるソフトウェアテストは、ソフトウェア開発プロセスの重要な部分となってきている。従来、面倒で難しく、かつ多くの場合、ソフトウェアコードを不十分にしか範囲をカバーできない手作業のソフトウェアテストによって、ソフトウェアの品質を保証していた。最近では、正規のソフトウェアテストのための自動化技術が開発されている。そのような技術の一つがシンボリック実行である。
シンボリック実行は、ソフトウェアプログラムへの入力をシンボリック変数として取り扱う非明示的な状態のモデル検査技術である。シンボリック実行は、シンボリック変数を用いたソフトウェアプログラムにおける有限パスの実行による複雑な方程式の作成と、そして決定手順として一般的に知られているソルバを用いて、その複雑な方程式を解いて、存在するならばエラーシナリオを得ることとを含んでいる。明示的な状態のモデル検査とは対照的に、シンボリック実行は、可能入力値と、分析中のソフトウェアプログラムにおける可能入力値の可能使用ケースとを求めることができる。シンボリック実行を使用して、テスト中のソフトウェアについて構造的に広範囲なテスト入力を自動生成することができる。しかしながら、シンボリック実行中、計算資源の高消費のせいでシンボリック実行の適用性を制限し得る非常に複数の実行パス及び/又は実行状態が生成される可能性がある。
一つの観点において、パラメトリック状態を使用して実行可能コードをシンボリック実行する開示の方法は、実行可能コードに関連する実行状態において共有状態要素と相異状態要素とを特定することを含む。その方法は、状態抽象化を用いて相異状態要素を表すことを含む。その方法は、パラメトリック制約を有し、かつ実行状態の群を無損失に表すパラメトリック状態を状態抽象化に基づいて定義することを含む。実行状態の群における実行状態は、パラメトリック状態のインスタンスであってもよい。その方法は、パラメトリック状態を使用することを含む、記憶媒体へのアクセスを有するプロセッサを使用して実行可能コードをシンボリック実行することを含む。
パラメトリック状態を使用して実行可能コードをシンボリック実行するための付加的開示の観点は、記憶媒体へのアクセスを有するプロセッサを含むシステム、及びプロセッサによって実行可能な命令を含む非一時的なコンピュータ可読媒体を含んでもよい。
シンボリック実行システムの実施形態の選択要素のブロック図である。 パラメータ化処理の実施形態の選択要素のブロック図である。 パラメータ化状態を併合する方法の実施形態の選択要素を示すフローチャートである。 パラメータ化状態の併合例の実施形態の選択要素の制御フローグラフである。 パラメータ化状態の併合例の実施形態の選択要素の制御フローグラフである。 パラメータ化状態の併合例の実施形態の選択要素の制御フローグラフである。 パラメータ化状態の併合例の実施形態の選択要素の制御フローグラフである。 シンボリック実行システムの実施形態の選択要素のブロック図である。 パラメータ化状態を使用してシンボリック実行する方法の実施形態の選択要素を示すフローチャートである。
以下の明細書では、開示の主題の説明を容易にするために、例示的に詳細を記載している。しかしながら、開示の実施形態が例示的なものであり、全ての可能な実施形態を網羅するものではないことは、当該技術分野における当業者にとって自明である。
本開示を通じて、参照番号をハイフンで結んだ形式は、特定の例の要素を指し、参照番号をハイフンで結ばない形式は、要素を一般的又は集合的に指している。したがって、一例として(図示せず)、ウィジェット“12−1”は、ウィジェットクラスの一例を指し、ウィジェットクラスを集合的にウェジェット“12”と呼ぶことができ、またウィジェットクラスのいずれかを一般的にウェジェット“12”と呼ぶことができる。図面及び明細書において、同様の番号は、同様の要素を表すことを意図している。
本明細書において、“シンボリック実行”は、具体的入力ではなくシンボリック入力を用いてテスト中のソフトウェアの実行をシミュレート(又はエミュレート)するソフトウェアテストについての方法及び動作を指す。シンボリック実行は、シンボリック式を用いてテスト中のソフトウェアにおけるシンボリック入力の効果を計算することができる。シンボリック実行を使用して、各種ソフトウェアプログラム及び/又はモジュールを正規にテストし、かつ検査することができる。本明細書において、“エグゼキュータ”は、“テスト中のソフトウェア(SUT)”においてシンボリック実行を行う実行エンジンを指す。テスト中のソフトウェアは、完全なアプリケーションプログラムであってもよいし、一又は複数の選択されたコードモジュールであってもよい。
特定の実施形態において、シンボリック実行は、論理式の結合として定義可能なパス条件を用いて、テスト中のソフトウェアにおける各実行パスを特徴付ける。パス条件における各論理式は、テスト中のソフトウェアの個別パスのシンボリック実行中に生成される一の分岐決定を示すことができる。シンボリック実行が終了すると、複数のパス条件が生成され、各パス条件は、シンボリック入力に関連するプログラムコードの実行可能な実行パスに対応している。テスト中のソフトウェアが特定の定義された実行パスに沿って実行されるように、パス条件に対する解をテスト入力として使用することができる。特定の実施形態では、SMT(充足可能性モジュロ理論)ソルバのような決定手順を使用して、パス条件に対する解を見つけ出して偽パスを削除する。そのような解がテスト中のソフトウェアにおいて実際の実行パスについて得られた場合には、その後、プログラム又はモジュールの全数テストが可能となり得る。加えて、シンボリック実行中には、メモリへの境界を越えたアクセス、ゼロ除算、及び特定種類のユーザ定義のアサーションのような、いわゆる“サニティ特性”をチェックすることができる。
シンボリック実行は、テスト中のソフトウェアを検査することができ、従来のテストアプローチよりも大きなプログラム動作のテスト範囲を実現することができるが、計算集約的であり、また、シンボリック実行の経済的実現可能性に悪影響を与え得る相当量の、プロセッサ時間、メモリ空間、及びプロセッサ数などといった計算資源を消費する可能性がある。例えば、シンボリック実行は、テスト中のソフトウェアがエグゼキュータによる処理について計算困難なシンボリックモデルをもたらし得るパス急増及び/又は状態急増の問題に悩まされる可能性がある。パス急増/状態急増の問題の結果として、エグゼキュータは、複数の実行パス及び関連する状態を処理する可能性があり、合理的な時間内に一連の有用なテストケースを出力できない可能性がある。このため、あまりに多くの実行パス及び関連する状態は、シンボリック実行についての主要な障害となる可能性があり、また、テスト中の特定のソフトウェアにシンボリック実行の拡張性及び/又は適用性の好ましくない制限をもたらす可能性がある。
本明細書に示されるように、テスト中のソフトウェアの実行状態及び対応するパスを、状態を表す複数のノード及びパス条件を表すノード間の複数のエッジを含む状態ツリーを用いて表すことができる。状態ツリーにおける各ノードは、命令カウンタ、パス条件、及び値ストアを包含する実行状態を表すことができる。各エッジは、ノードとノードとを接続する制限を表すことができる。
米国特許公開2012/0311545号公報では、いかなる中間の実行ジャンプ又はジャンプターゲットを欠く基本コードブロックを有するテスト中のソフトウェアの実行パスの数と状態の数とを無損失に低減する方法及びシステムを用いて、シンボリック実行中の過度の実行パスに関連する特定の問題に対処している。本明細書においてさらに詳細に説明するように、本発明の発明者は、パラメータ化方法を用いた状態併合技術を提供可能なシンボリック実行におけるパラメータ化状態を管理する方法及びシステムを発見した。本明細書に記載のシンボリック実行中のパラメータ化状態を管理する方法及びシステムは、シンボリック実行の資源消費を改善するために有効であり、したがって、自動ソフトウェアテストにとって有益なシンボリック実行を用いた有益なテストケースの、より迅速かつ効率的な生成をもたらすことができる。本明細書に記載の方法及びシステムは、シンボリック実行に使用される以前の改善及び解とともに使用可能であることに留意されたい。
本明細書で使用する場合、シンボリック実行におけるパラメトリック状態(“p状態”)は、シンボリックパラメータを用いて表される具体的状態(“c状態”)群を定義することができる。このように、p状態を使用して、個々のc状態の羅列を回避することによってシンボリック実行における複雑さを低減することができる。p状態は、羅列された一連のc状態の正確な符号化を表すことができる。p状態は、繰返及びケースが互いに独立しているシンボリック実行におけるループ及びスイッチ文(又はケース文)に特に適用可能であってもよい。
ここで、図面を参照すると、図1は、本実施形態のシンボリック実行システム100の選択要素のブロック図を示している。図示するように、シンボリック実行システム100は、本明細書に記載されるように、シンボリック実行を行うためのツールの集合を表すことができる。特定の実施形態において、エグゼキュータ120のような、シンボリック実行システム100の少なくとも特定の部分は、シンボリック実行(図5も参照)を行うために、プロセッサによって実行可能な実行可能コード及び/又は命令を表している。図1において、エグゼキュータ120は、テスト中のソフトウェアを表す実行可能コード(SUT)110においてシンボリック実行を行う実行エンジンを表すことができる。シンボリック実行システム100は、異なる言語における実行可能コード及び/又は異なる種類又はバージョンのコンパイラを使用してコンパイルされた実行可能コードを含む各種実行可能コード(SUT)110について使用可能であることに留意されたい。図1に示すように、エグゼキュータ120は、シンボリック実行の出力としてテストケース150と統計量152とを生成することができる。テストケース150は、例えば、バグチェック及び/又は他のランタイムエラーについて、実行可能コード(SUT)110を分析及び評価するために使用可能な実際の実行可能コードの結果を表すことができる。特定の実施形態では、エグゼキュータ120が実行可能コード(SUT)110をシンボリック実行することによって得られるシンボリック式を、例えば、SMTソルバを用いて解くことができる。もしあれば解を使用して、実行可能コード(SUT)110をテスト及び検査するためのテストケース150を生成することができる。統計量152は、実行可能コード(SUT)110内の特定の実行パスの範囲を追跡するための統計値のような、テストケース150を記述する統計値を表すことができる。
図1に示すように、エグゼキュータ120は、ランタイム環境122と、オプティマイザ124と、エグゼキュータマネージャ126と、状態マネージャ128と、シンボリック式ハンドラ130と、具体的インタプリタ130とを含むことができる。ランタイム環境122は、特定種類のプログラミング言語又はコンパイラに合わせられていてもよく、実行可能コード(SUT)110のランタイム実行のシミュレーションを可能とすることができる。オプティマイザ124は、シンボリック実行において使用される状態及び/又はパスを最適化する機能を含むことができる。エグゼキュータマネージャ126は、エグゼキュータ120の実行環境の管理を担当することができる。状態マネージャ128は、c状態及びp状態を含むシンボリック実行における状態のインスタンスを生成及び管理するための機能を含むことができる。シンボリック式ハンドラ130を使用して、シンボリック実行におけるシンボリック式を処理して解くことができる。具体的インタプリタ130を使用して、シンボリック実行における具体的状態の実行特性を分析することができる。
シンボリック実行システム100の動作では、パラメトリック状態を使用して、情報を失うことなく一連の具体的状態を表すことができる。換言すれば、一連の具体的状態を無損失に併合して、シンボリック実行のための一又は複数のパラメトリック状態にすることができる。パラメトリック状態の生成は、c状態間の相異がパラメトリック公式化に適しているか否かの決定を含む、c状態の併合が可能であるか否かの決定を含んでもよい。特定の例では、簡約化及び最適化をc状態に適用して、p状態への併合を可能としてもよい。p状態を定義するための、多くの可能性がある抽象化スキームから、最善の抽象化スキームを決定してもよい。最後に、p状態の使用からの利益がp状態のパラメータ化のコストよりも大きくなるように、シンボリック実行の全体的な計算効率を向上させる方法で、c状態をp状態にパラメータ化してもよい。
図2を参照すると、パラメータ化処理200の実施形態の選択要素のブロック図が示されている。図示するように、パラメータ化処理200は、本明細書に記載されるように、シンボリック実行においてパラメータ化状態を併合するために使用される動作及びデータを表すことができる。特定の実施形態では、シンボリック実行システム100(図1を参照)を用いて、例えば、状態マネージャ128によって、パラメータ化処理200を実行することができる。具体的には、パラメータ化処理200を使用して、一連のc状態を完全に記述する一又は複数のパラメータ化状態を表すp状態204を生成することができる。
従来のシンボリック実行において、具体的実行状態(すなわち、c状態)は、命令ポインタ値(IP)、パス条件(PC)、及び値ストア(図示せず)を含むことができる。IPは、シンボリック実行中の現在の実行ポイントを示すことができる。本明細書では、二つのc状態が同一のIPを有する場合にのみ併合されてp状態になるものと仮定する。PCは、実行状態が満足する一連のシンボリック制約を表すことができる。値ストアは、具体値又はシンボリック値となる得る値にアドレスを割り当てることができる。パラメトリック状態又はp状態は、共有パターンを有するc状態群を表すことができる。併合されてp状態になり得るc状態群における相異は、シンボリック式を用いて記述されてもよい。p状態を形成するために使用されるc状態群における相異は、パス状態における相異及び/又はシンボリック値における相異であってもよい。したがって、パラメトリック状態の併合によって生成されるp状態は、本明細書に記載されるように、c状態群の特徴を示すシンボリック論理式である追加部分、すなわちパラメトリック制約(“p制約”)を含むことができる。換言すれば、p制約は、p状態を形成するために使用されるc状態群における相異をまとめたものである。したがって、c状態を対応するp状態のインスタンスとみなすことができる一方で、p状態は、全ての関連するc状態を完全に記述することができる。エグゼキュータの観点から、パラメータ化状態の併合後、所与のp状態は、c状態群における各c状態と全く同一に動作することができる。
図2において、パラメータ化処理200は、c状態202を併合してp状態204にするパラメータ化状態の特定の実施形態における動作を説明する。c状態202は、c状態202−1及びc状態202−2など、c状態202−Nまで示されるN個一組のc状態202によって表される。c状態202は、簡約化210によって受信可能であり、簡約化210は、c状態202を分析して、式の簡約化及び正規化のための機会を決定することができる。一の実施形態において、簡約化210は、c状態202について状態ツリーの少なくとも特定の部分にマッチさせるように試みて、その相異が一般化及び簡約化された形式に抽象化され得るか否かを確認することができる。簡約化210は、シンボリック推論を採用して、c状態202に関連する式を解いて簡約化することができる。そしてパターン特定212は、パターンデータベース250にアクセスして、簡約化210の後のc状態202に関連する式におけるパターンを検索することができる。いくつかの実施形態において、パターン特定212は、状態併合についての可能性を示すことが可能なc状態202の値ストア及びPC間の不変条件の検出を試みることができる。パターンデータベース250は、パターン特定212によるマッチングのためにアクセス可能な共通の不変パターンの知識ストアを表すことができる。パターン特定212の後、パラメータ化併合214は、パターン特定212によって特定されたパターン及び/又は既知の状態抽象化スキーム(図示せず)を使用して、シンボリック実行に関連させるために、全てのc状態202を表す一又は複数の実行状態を表現可能なp状態204を生成することができる。
ここで、図3を参照すると、パラメータ化状態を併合する方法300の実施形態の選択要素のブロック図がフローチャート形式で示されている。方法300は、エグゼキュータ120によって実行されて、パラメータ化処理200(図1及び2を参照)を実施することができる。方法300において説明される特定の動作は、任意であってもよく、また、異なる実施形態において再配置されてもよいことに留意されたい。
方法300は、命令ポインタ(IP)が実行のために残されているか否かの決定(動作302)から開始されてもよい。動作302においてIPは、シンボリック実行を用いたテスト中のソフトウェアに関連する命令を表してもよい。動作302の結果がNOである場合、方法300は、終了してもよい(動作304)。動作302の結果がYESである場合には、次のIPが実行されて新たなc状態Sを生成することができる(動作306)。c状態Sのパス条件(PC)及び/又はシンボリック式は、簡約化されてもよい(動作308)。動作308は、c状態Sにおける式の正規化を含んでもよい。そして併合点に達したか否かの判定がされてもよい(動作310)。動作310の結果がNOである場合、方法300は、動作302に戻ってもよい。動作310の結果がYESである場合には、c状態Sが既存のp状態P内に吸収可能であるか否かの判定がされてもよい(動作312)。p状態Pは、p状態Pのパラメトリック条件の拡張に従ってc状態Sに適用するように拡張可能である場合、c状態Sを吸収することができる。動作312の結果がYESである場合、p状態Pのパラメトリック条件は、更新されてもよい(動作316)。動作312の結果がNOである場合には、c状態Sと同一のIPを有する状態P'が存在しているか否かの判定がされてもよい(動作314)。状態P'は、c状態又はp状態であってもよい。動作314の結果がNOである場合、方法300は、動作302に戻ってもよい。動作314の結果がYESである場合には、c状態SをP'と併合可能か否かの判定がされてもよい(動作320)。c状態Sと状態P'とのPCを共通PCに抽象化可能である場合、並びにc状態Sと状態P'とにおける変数を、共通変数に抽象化可能である場合又はif-then-else文のような論理評価で記述可能である場合には、動作320における条件を満足することができる。動作320の結果がNOである場合、方法300は、動作314に戻ってもよい。動作320の結果がYESである場合には、c状態Sと状態P'とを併合して、新たなパラメトリック状態Pnを生成することができる(動作322)。特定の実施形態では、新たなパラメトリック状態Pnのために状態P'を再利用してもよい。動作322における併合に際して、新たなパラメトリック状態Pnは、c状態Sの抽象化を含んでもよい。動作322の後及び動作316の後には、存在するならばc状態S及びs状態Pを除去することができる(動作324)。動作324の後、方法300は、動作302に戻ってもよい。
ここで、パラメトリック状態の併合の第一の例について、さらに詳細に説明する。第一の例では、テスト中のソフトウェアにおいてc状態として出現し得る以下の式1及び2を考慮する。
2a+b+c+1 (式1)
3+b+c+6a (式2)
第一の方法では、共通パターン及び/又はサブパターンによって、式1及び2についてのp制約を特定することができる。例えば、式の簡約化及び正規化を用いて、可能な抽象化について、式の相異を特定及び評価することができる。例えば、可変次数に従って式2を正規化して、式3を得ることができる。
6a+b+c+3 (式3)
式1及び3の間の相異を、項2a、6a、及び項1、3とみなすことができる。これらの相異から、シンボリック変数iを(1,3)の値を有するところに導入して、元の式1及び2の両方を含むp状態についてのp制約を表す式4における抽象化を得ることができる。
(2i*a)+b+c+i (式4)
式は、変数値ドメインを拡張することによって、別の式に吸収することができる。例えば、以下の式5は、i=5についての式4のインスタンスであり、式4における抽象化形式が、式5も吸収できることを示している。
10a+b+c+5 (式5)
第一の例における第一の方法の代わりに、式4を得るための第二の方法は、不変ツールの使用と、iの取り得る値を制約するための改善とを含んでもよい。第一の例における第一の方法及び/又は第二の方法の代わりに、第三の方法は、式1及び2を一次多項式のような共通の不変パターンと比較して、式4にマッチさせるためのパターンライブラリの使用を含んでもよい。
ここで、図4A、4B、4C、及び4Dを参照すると、パラメトリック状態の併合の第二の例の実施形態の選択要素は、各状態ツリー400、401、402、及び403として示されている。図4A−Dに図示される第二の例は、シンボリック入力が変数n,a,及びbである、テスト中の以下の実行可能コードのシンボリック実行に基づいている。図4A−Dにおいて、シンボリック実行についての状態ツリーは、1〜1000までのnの値についてのテスト中の実行可能コードの完全繰返後の実行状態を表すために図示されている。
Figure 0006528465
第二の例についてのテスト中の実行可能コード
図4Aにおいて、状態ツリー400は、forループの最初の繰返が完了したときの完了した実行状態を表している。状態S1は、最初のコードの整数変数k=0,v=0を表すことができる一方で、状態S2は、条件“i==n”が、パス条件がn=1であることを指定しているときの、最初のforループの入力を表すことができる。条件“i≠n”に関する場合は、図示されていない。状態S3及びS4は、条件付きif文コードの二つの可能性を表すことができる。したがって、n=1についての完了した実行状態の後、状態S3については、0>f(b),v=a+b,及びk=2となる一方で、状態S4については、0≦f(b),v=0,及びk=2となる。これは、シンボリック実行の最初の繰返であるので、p制約は未だ特定されておらず、また、p状態は未だ存在していない。
図4Bにおいて、状態ツリー401は、n=2についての状態が生成されるforループの二回目の繰返が完了したときの完了した実行状態を表している。状態S1は、最初のコードの整数変数k=0,v=0を表すことができる一方で、状態S2及びS5は、それぞれn=1及びn=2についてのforループの入力コードを表すことができる。状態S3及びS4は、n=1についての条件付きif文コードの二つの可能性を表すことができる。S3及びS4がn=2で二回目のループ繰返を実行する場合、条件“2==n”が“n=1”に抵触するため、状態S3及びS4は、if文の実行をスキップし、整数変数kの値を2から4に増加させる。同様に、状態S6及びS7は、n=2についての条件付きif文コードの二つの可能性を表すことができる。したがって、n=2についての完了した実行状態の後、状態S6については、2>f(b),v=a+2b,及びk=4となる一方で、状態S7については、2≦f(b),v=0,及びk=4となる。このとき、状態S6は、いかなる既存のp状態のインスタンスでもないが、状態S3及びS4と同一のIPを共有している。したがって、v=a+n*bを用いて、状態S3及びS6を2(n-1)>f(b)に抽象化することができる。パラメトリック状態のために状態S3を再利用することができるとともに、状態S6を除去することができる。このとき、状態S7は、いかなる既存のp状態のインスタンスでもないが、状態S3及びS4と同一のIPを共有している。したがって、v=0を用いて、状態S4及びS7を2(n-1)≦f(b)に抽象化することができる。パラメトリック状態のために状態S4を再利用することができるとともに、状態S7を除去することができる。状態S2が状態S5に対応するので、状態S6及びS7が除去されたときに状態S5も除去される。
図4Cにおいて、状態ツリー402は、n=3についての状態が生成されるforループの三回目の繰返が完了したときの完了した実行状態を表している。状態S1は、最初のコードの整数変数k=0,v=0を表すことができる一方で、状態S2及びS8は、それぞれn=1,2及びn=3についてのforループの入力コードを表すことができる。状態S3及びS4は、n∈[1,2]についての二つのp状態を表すことができるとともに、状態S9及びS10は、n=3についての条件付きif文コードの二つの可能性を表すことができる。したがって、n=3についての完了した実行状態の後、状態S9については、4>f(3b),v=a+3,及びk=6となる一方で、状態S10については、4≦f(3b) ,v=0,及びk=6となる。このとき、状態S9は、p状態S3のインスタンスであり、状態S10は、p状態S4のインスタンスである。したがって、p状態S3及びS4は、それぞれ状態S9及びS10を吸収することができるとともに、状態S8、S9、及びS10を除去することができる。
図4Dにおいて、状態ツリー403は、n=1000についての状態が生成されるforループの1000回目の繰返が完了したときの完了した実行状態を表している。状態S1は、最初のコードの整数変数k=0,v=0を表すことができる一方で、状態S2及びS11は、それぞれn=1,2…,999及びn=1000についてのforループの入力コードを表すことができる。状態S3及びS4は、n∈[1,999]についての二つのp状態を表すことができるとともに、状態S12及びS13は、n=1000についての条件付きif文コードの二つの可能性を表すことができる。したがって、n=1000についての完了した実行状態の後、状態S12については、1998>f(1000b),v=a+1000b,及びk=2000となる一方で、状態S13については、1998≦f(1000b),v=0,及びk=2000となる。このとき、状態S12は、p状態S3のインスタンスであり、状態S13はp状態S4のインスタンスである。したがって、p状態S3及びS4は、それぞれ状態S12及びS13を吸収することができるとともに、状態S11、S12、及びS13を除去することができる。
nの特定の値についての繰返は、図4A〜Dにおける第二の例から省略されているが、図4Dにおいてp状態S3及びS4が、いかなる情報も失うことなく、n∈[1,1000]についてのp状態を表していることは明らかである。併合してp状態S3及びS4にした後には、元の2000個のc状態によって繰り返すのではなく、p状態S3及びS4を用いて、SUTにおけるアサーションを正確にチェックすることによって、生成されるテストの数の低減だけでなく、バグ検出のための計算コストの相当の低減をもたらすことができる。したがって、第二の例では、2000個のc状態を二つのp状態に置換することによって、シンボリック実行に関連する、シンボリック実行を行うプロセッサのメモリ消費及び/又は計算負荷を含む計算資源の消費における、対応する低減とともに、シンボリック実行のための状態の相当の低減をもたらすことができる。
上記の第二の例に示すように、パラメトリック状態の併合は、本明細書に記載されるように、シンボリック実行中のループ構造に特に有効である。ループの繰返は、多くの場合、同様の動作を示すことができ、ループインデックスがどのように使用されるかにおいて主に相異し得る。この動作を使用して、例えば、ループヘッダにおいてp制約を定義することができる一方で、ループ本体においてPC及び値ストアを含む共通パターンを特定することができる。
様々な実施形態では、以下のループ構造を含むSUTを静的に調査して、p制約及び共通パターンを推測することができる。二つのループヘッダは、p制約候補が、シンボリック値i及びjについて∈[k1,…]∧j∈[i,…]であることを意味している。ループ本体は、パラメトリックパス条件がc(i,j)であり、かつvのパラメータ値がf(i,j)であることを意味している。
Figure 0006528465
パラメトリックパターンの推測のために実行可能なループ構造
ここで、図5を参照すると、シンボリック実行システム500の実施形態の選択要素を示すブロック図が図示されている。図5に示すように、シンボリック実行システム500は、システムバス502を用いて通信可能なプロセッサ501と記憶媒体510とを含んでいる。また、ネットワークへの接続を提供するネットワークアダプタ520が、システムバス502を介してアクセス可能に示されている。
図5に示すように、記憶媒体510は、揮発性、不揮発性、固定及び/又は取外可能な媒体を代表することができ、磁気及び/又は半導体メモリを用いて実現することができる。記憶媒体510は、命令及び/又はデータを格納することができる。図示するように、記憶媒体510は、オペレーティングシステム(OS)512を含む命令(例えば、コンピュータプロセッサ又はマイクロプロセッサのようなプロセッサ501によって実行可能なコード)、及びエグゼキュータ120(図1を参照)を格納する。オペレーティングシステム512は、UNIX(登録商標)バリアント、LINUX(登録商標)、Microsoft Windows(登録商標)オペレーティングシステム、又は別のオペレーティングシステムのような、様々な任意のオペレーティングシステムとすることができる。前述のように、エグゼキュータ120は、本明細書に記載されるように、c状態及びp状態を含むシンボリック実行における状態のインスタンスを生成及び管理するための機能を提供可能な状態マネージャ128を含むことができる。
ここで、図6を参照すると、パラメータ化状態を用いてシンボリック実行する方法600の実施形態の選択要素のブロック図がフローチャート形式で示されている。エグゼキュータ120によって方法600を実行して、パラメータ化処理200(図1及び2を参照)を実施することができる。方法600において説明される特定の動作は、任意のものであってもよく、また、異なる実施形態において再配置されてもよいことに留意されたい。
実行可能コードに関連する実行状態において共有状態要素と相異状態要素とを特定する(動作602)ことによって、方法600が開始されてもよい。相異状態要素は、状態抽象化を用いて表されてもよい(動作604)。状態抽象化は、パラメトリック状態の複雑さを最小限にするように選択されてもよい。動作604は、少なくともいくつかの相異状態要素を数学的に簡約化すること、及び相異状態要素における共通パターンを特定することを含んでもよい。特定された共通パターンを、格納された共通パターンとマッチングすることができる。状態抽象化に基づいて、方法600は、パラメトリック制約を有し、かつ実行状態の群を無損失に表すパラメトリック状態を定義する(動作606)ことを含んでもよい。動作606は、共通パターンに基づいて、パラメトリック状態を定義することを含んでもよい。実行状態の群における実行状態は、パラメトリック状態のインスタンスとすることができる。シンボリック実行についてパラメトリック状態を使用してもよい(動作608)。動作608は、パラメトリック状態を使用してテストケースを生成すること、及びテストケースを使用して状態群におけるバグチェックを行うことを含んでもよい。
特定の実施形態において、実行状態の群は、ループの繰返を表し、方法600は、ループのループヘッダに基づいてパラメトリック制約を定義すること、並びにループのループ本体(図6に図示せず)からパラメトリック状態のパス条件及び値ストアを定義することを含んでいる。様々な実施形態において、方法600は、実行可能コード(図6に図示せず)に関連する実行状態の数を低減させるために、実行状態の群をパラメトリック状態に置換することを含み、そのことは、シンボリック実行によって消費されるメモリ資源を低減させることを含む。
本明細書に開示するように、テスト中のソフトウェアをシンボリック実行する方法及びシステムは、具体的実行状態の群を無損失に表すために、パラメトリック状態の使用を含んでいる。数学的な抽象化は、実行状態間の相異を表すことができ、また、パラメトリック状態についてのパラメトリック制約を定義することができる。計算資源における量を低減させるために、シンボリック実行についてパラメトリック状態を使用可能にすることができる。パラメトリック状態を使用することで、より大きな状態空間及びより多くのプログラムの動作を、シンボリック実行を用いてテスト可能にすることができる。
上記開示された要旨は、例示であって限定的ではないと考えられるべきであり、かつ添付の特許請求の範囲は、本開示の真の精神及び範囲内に入るような全ての変更、拡張、及び他の実施形態を包含することを意図している。したがって、法律により許される最大範囲まで、本開示の範囲は、特許請求の範囲及びその均等物の最も広い許容可能な解釈によって決定されるべきであり、前述の詳細な説明によって制限又は限定されるべきものではない。

Claims (15)

  1. パラメトリック状態を使用して実行可能コードをシンボリック実行するコンピュータ実行方法であって、
    記憶媒体にアクセス可能なプロセッサが、当該記憶媒体に記憶された前記実行可能コードに関連する、シンボリックパラメータを用いて表される複数の実行状態において共有される共有状態要素と前記複数の実行状態において互いに相異する相異状態要素とを特定し、
    前記プロセッサが、状態抽象化を用いて前記相異状態要素を表し、
    前記プロセッサが、前記状態抽象化に基づいて、パラメトリック制約を有し、かつ前記複数の実行状態の何れかを含む実行状態の群を無損失に表すパラメトリック状態を定義し、前記実行状態の群における実行状態が前記パラメトリック状態のインスタンスであり、
    前記プロセッサが、前記パラメトリック状態を使用して前記実行可能コードをシンボリック実行する、
    ことを含むコンピュータ実行方法。
  2. 状態抽象化を用いて前記相異状態要素を表すことは、
    前記相異状態要素の少なくとも一部を簡約化し、
    少なくとも一部が簡約化された前記相状態要素を前記記憶媒体に格納された共通パターンとマッチングすることにより、前記相異状態要素における共通パターンを特定する、
    ことを含む請求項1に記載のコンピュータ実行方法。
  3. 前記パラメトリック状態を定義することは、
    前記特定された共通パターンに基づいて、前記パラメトリック状態を定義する、
    ことを含む請求項2に記載のコンピュータ実行方法。
  4. 前記実行状態の群は、ループの繰返を表し、
    前記ループのループ本体から前記パラメトリック状態のパス条件と値ストアとを定義することをさらに含み、
    前記パラメトリック状態を定義することは、さらに前記ループのループヘッダに基づいて、前記パラメトリック制約を定義することを含む、
    請求項1に記載のコンピュータ実行方法。
  5. 前記パラメトリック状態を使用して前記実行可能コードをシンボリック実行することは、
    前記パラメトリック状態を用いてテストケースを生成し、
    前記テストケースを用いて、前記実行状態の群においてバグチェックを実行する、
    ことをさらに有する、
    請求項1に記載のコンピュータ実行方法。
  6. 前記プロセッサが、前記実行状態の群を前記パラメトリック状態に置換して、前記実行可能コードに関連する前記実行状態の数を低減させる、
    ことをさらに有する請求項1に記載のコンピュータ実行方法。
  7. 前記プロセッサが、前記実行状態の群を前記パラメトリック状態に置換して、前記シンボリック実行によって消費されるメモリ資源を低減させる、
    請求項6に記載のコンピュータ実行方法。
  8. パラメトリック状態を使用して実行可能コードをシンボリック実行するためのプロセッサ実行可能命令であって、記憶媒体にアクセス可能なプロセッサによって実行されたときに、
    前記記憶媒体に記憶された前記実行可能コードに関連する、シンボリックパラメータを用いて表される複数の実行状態において共有される共有状態要素と前記複数の実行状態において互いに相異する相異状態要素とを特定し、
    前記プロセッサが、状態抽象化を用いて前記相異状態要素を表し、
    前記プロセッサが、前記状態抽象化に基づいて、パラメトリック制約を有し、かつ前記複数の実行状態の何れかを含む実行状態の群を無損失に表すパラメトリック状態を定義し、前記実行状態の群における実行状態が前記パラメトリック状態のインスタンスであり、
    前記プロセッサが、前記パラメトリック状態を使用して前記実行可能コードをシンボリック実行する、
    ことを前記プロセッサに実行させるための前記命令を格納する一又は複数の非一時的なコンピュータ可読媒体。
  9. 状態抽象化を用いて前記相異状態要素を表すための前記命令は、
    前記相異状態要素の少なくとも一部を簡約化し、
    少なくとも一部が簡約化された前記相状態要素を前記記憶媒体に格納された共通パターンとマッチングすることにより、前記相異状態要素における共通パターンを特定する
    ための命令を含む請求項8に記載の一又は複数の非一時的なコンピュータ可読媒体。
  10. 前記パラメトリック状態を定義するための前記命令は、前記特定された共通パターンに基づいて、前記パラメトリック状態を定義するための命令を含む、
    請求項8に記載の一又は複数の非一時的なコンピュータ可読媒体。
  11. 前記実行状態の群は、ループの繰返を表し、
    前記ループのループ本体から前記パラメトリック状態のパス条件と値ストアとを定義するための命令をさらに含み、
    前記パラメトリック状態を定義するための前記命令は、さらに前記ループのループヘッダに基づいて、前記パラメトリック制約を定義するための命令を含む、
    請求項8に記載の一又は複数の非一時的なコンピュータ可読媒体。
  12. 前記パラメトリック状態を使用して前記実行可能コードをシンボリック実行するための前記命令は、
    前記パラメトリック状態を用いてテストケースを生成し、
    前記テストケースを用いて、前記実行状態の群においてバグチェックを実行する
    ための命令をさらに含む、
    請求項8に記載の一又は複数の非一時的なコンピュータ可読媒体。
  13. 前記プロセッサが、前記実行状態の群を前記パラメトリック状態に置換して、前記実行可能コードに関連する前記実行状態の数を低減させるための命令をさらに含む、
    請求項8に記載の一又は複数の非一時的なコンピュータ可読媒体。
  14. 前記実行状態の群を前記パラメトリック状態に置換するための前記命令は、実行されたときに、前記シンボリック実行によって消費されるメモリ資源を低減させる、
    請求項13に記載の一又は複数の非一時的なコンピュータ可読媒体。
  15. 前記実行状態の群を前記パラメトリック状態に置換するための前記命令は、実行されたときに、前記シンボリック実行のための前記プロセッサの計算量を低減させる、
    請求項13に記載の一又は複数の非一時的なコンピュータ可読媒体。
JP2015041801A 2014-04-15 2015-03-03 ソフトウェアテストのためのシンボリック実行における状態パラメータ化 Active JP6528465B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/253,342 US9483380B2 (en) 2014-04-15 2014-04-15 Parameterized states in symbolic execution for software testing
US14/253,342 2014-04-15

Publications (2)

Publication Number Publication Date
JP2015204109A JP2015204109A (ja) 2015-11-16
JP6528465B2 true JP6528465B2 (ja) 2019-06-12

Family

ID=54265170

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015041801A Active JP6528465B2 (ja) 2014-04-15 2015-03-03 ソフトウェアテストのためのシンボリック実行における状態パラメータ化

Country Status (2)

Country Link
US (1) US9483380B2 (ja)
JP (1) JP6528465B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6316120B2 (ja) * 2014-06-30 2018-04-25 日立オートモティブシステムズ株式会社 テストケース生成システム及びテストケースを記録した記録媒体
US9892027B2 (en) * 2014-07-09 2018-02-13 Fujitsu Limited Event-driven software testing
US10503633B2 (en) 2016-03-30 2019-12-10 International Business Machines Corporation Symbolic execution of alternative branches
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
US12086055B2 (en) * 2020-10-07 2024-09-10 Korea University Research And Business Foundation Method for automatically pruning search space of symbolic execution via machine learning
EP4068127A1 (en) * 2021-03-31 2022-10-05 Irdeto B.V. Systems and methods for determining execution state

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5513122A (en) * 1994-06-06 1996-04-30 At&T Corp. Method and apparatus for determining the reachable states in a hybrid model state machine
CA2153032A1 (en) * 1994-09-16 1996-03-17 William Martin Schell Method of and apparatus for efficiently debugging programs given limited system resources
US5784553A (en) * 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
JP2004213053A (ja) * 2002-12-26 2004-07-29 Toshiba Corp オブジェクト状態分類方法とシステム、およびそのためのプログラム
US7584455B2 (en) * 2003-10-23 2009-09-01 Microsoft Corporation Predicate-based test coverage and generation
US7149987B2 (en) * 2004-03-08 2006-12-12 Synopsys, Inc. Method and apparatus for performing generator-based verification
US7747985B2 (en) * 2005-03-18 2010-06-29 Microsoft Corporation Conformance testing of multi-threaded and distributed software systems
US7587636B2 (en) * 2005-08-04 2009-09-08 Microsoft Corporation Unit test generalization
US7797687B2 (en) * 2005-08-04 2010-09-14 Microsoft Corporation Parameterized unit tests with behavioral purity axioms
US8533680B2 (en) * 2005-12-30 2013-09-10 Microsoft Corporation Approximating finite domains in symbolic state exploration
US7949511B2 (en) * 2007-11-12 2011-05-24 Nec Laboratories America, Inc. System and method for tunneling and slicing based BMC decomposition
US8131768B2 (en) * 2008-05-08 2012-03-06 Nec Laboratories America, Inc. Symbolic program analysis using term rewriting and generalization
US20090300423A1 (en) * 2008-05-28 2009-12-03 James Michael Ferris Systems and methods for software test management in cloud-based network
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
US8719796B2 (en) * 2010-01-26 2014-05-06 The Board Of Trustees Of The University Of Illinois Parametric trace slicing
JP5440287B2 (ja) * 2010-03-15 2014-03-12 富士通株式会社 シンボリック実行支援プログラム、方法及び装置
US20120179935A1 (en) * 2011-01-11 2012-07-12 Nec Laboratories America, Inc. Dynamic test generation for concurrent programs
US8869113B2 (en) * 2011-01-20 2014-10-21 Fujitsu Limited Software architecture for validating C++ programs using symbolic execution
US20120192162A1 (en) * 2011-01-20 2012-07-26 Fujitsu Limited Optimizing Handlers for Application-Specific Operations for Validating C++ Programs Using Symbolic Execution
US8645924B2 (en) * 2011-06-06 2014-02-04 Fujitsu Limited Lossless path reduction for efficient symbolic execution and automatic test generation
US8656370B2 (en) * 2011-08-26 2014-02-18 Fujitsu Limited Symbolic execution of javascript software using a control flow graph
US9141354B2 (en) * 2012-04-23 2015-09-22 Ecole polytechnique fédérale de Lausanne (EPFL) Advantageous state merging during symbolic analysis
US8856751B2 (en) * 2012-09-20 2014-10-07 Fujitsu Limited Abstract symbolic execution for scaling symbolic execution generation and automatic test generation
US8856755B2 (en) * 2013-01-27 2014-10-07 International Business Machines Corporation Dominant-state-based coverage metric

Also Published As

Publication number Publication date
JP2015204109A (ja) 2015-11-16
US20150293831A1 (en) 2015-10-15
US9483380B2 (en) 2016-11-01

Similar Documents

Publication Publication Date Title
JP6528465B2 (ja) ソフトウェアテストのためのシンボリック実行における状態パラメータ化
Alglave et al. Software verification for weak memory via program transformation
Guo et al. Exploiting community structure for floating-point precision tuning
Sen et al. Multise: Multi-path symbolic execution using value summaries
Tristan et al. Evaluating value-graph translation validation for LLVM
Pop et al. GRAPHITE: Polyhedral analyses and optimizations for GCC
Mador-Haim et al. An axiomatic memory model for POWER multiprocessors
US8732669B2 (en) Efficient model checking technique for finding software defects
Wachter et al. Verifying multi-threaded software with impact
US9292265B2 (en) Method for convergence analysis based on thread variance analysis
JP2007528059A (ja) ソフトウェアのモデル化、抽象、および分析のためのシステムと方法
JP6342129B2 (ja) 混合モードプログラムのソースコードエラー位置検出装置及び方法
Biere et al. The auspicious couple: Symbolic execution and WCET analysis
Garoche et al. Incremental invariant generation using logic-based automatic abstract transformers
Geldenhuys et al. Bounded lazy initialization
Leung et al. C-to-verilog translation validation
WO2017015955A1 (en) Application testing
Lindner et al. Verification of safety functions implemented in Rust-a symbolic execution based approach
Demange et al. Mechanizing conventional SSA for a verified destruction with coalescing
Li et al. Scaling up symbolic analysis by removing z-equivalent states
Yang et al. Model checking sequential software programs via mixed symbolic analysis
de Vos Translation Validation for the LLVM Compiler
Sri et al. A Holistic Approach to CPU Verification using Formal Techniques
Ivutin et al. Low-level Code Auto-tuning for State-of-the-art Multicore Architectures
Atkinson et al. Automated validation and verification of process models

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181030

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190404

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190429

R150 Certificate of patent or registration of utility model

Ref document number: 6528465

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150