JP2012068869A - 繰返しシンボリック実行方法、プログラム及び装置 - Google Patents

繰返しシンボリック実行方法、プログラム及び装置 Download PDF

Info

Publication number
JP2012068869A
JP2012068869A JP2010212679A JP2010212679A JP2012068869A JP 2012068869 A JP2012068869 A JP 2012068869A JP 2010212679 A JP2010212679 A JP 2010212679A JP 2010212679 A JP2010212679 A JP 2010212679A JP 2012068869 A JP2012068869 A JP 2012068869A
Authority
JP
Japan
Prior art keywords
execution
storage unit
unit
symbolic
symbolic execution
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.)
Granted
Application number
JP2010212679A
Other languages
English (en)
Other versions
JP5505227B2 (ja
Inventor
Kazuki Munakata
一樹 宗像
Shoichiro Fujiwara
翔一朗 藤原
Tadahiro Uehara
忠弘 上原
Kenji Oki
憲二 大木
Yoshiharu Maeda
芳晴 前田
Asako Katayama
朝子 片山
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
Priority to JP2010212679A priority Critical patent/JP5505227B2/ja
Publication of JP2012068869A publication Critical patent/JP2012068869A/ja
Application granted granted Critical
Publication of JP5505227B2 publication Critical patent/JP5505227B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】シンボリック実行を用いてより効率的にプログラムのテストを行う。
【解決手段】本繰返しシンボリック実行方法は、シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、分析対象プログラムのコード網羅率(例えばブランチカバレッジやステートメントカバレッジ等)をシンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、実行結果格納部に格納されているコード網羅率が所定の基準を満たすか判断するステップと、コード網羅率が所定の基準を満たすと判断された場合、分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップとを含む。
【選択図】図3

Description

本技術は、シンボリック実行技術に関する。
コードカバレッジ(code coverage)とは、プログラムの内部構造に対してどれだけ網羅的にテストを行ったかを示す指標である。コードカバレッジには、ステートメントカバレッジ(statement coverage)やブランチカバレッジ(branch coverage)、コンディションカバレッジ(condition coverage)、パスカバレッジ(path coverage)等の種類がある。プログラムのテストを行う際には、このような指標が基準値(例えば100%)に達するようにテストデータやシナリオを設計する。
例として、図1に示すような制御構造を有するプログラムのテストを行い、ブランチカバレッジを100%にすることを考える。まず、テストデータ{a=11,b=1}を用いてテスト実行を行う。すると、分岐B1、B3及びB4を実行することができる。さらに、テストデータ{a=10,b=1}を用いてテスト実行を行えば、分岐B1、B3及びB5を実行することができる。そして、残りの分岐B2及びB6を実行するために、テストデータ{a=0,b=0}を用いてテスト実行を行う。このようにすれば、(実行した分岐の数)/(全分岐の数)*100=100となり、ブランチカバレッジは100%である。但し、このようなテストデータのセットは、人間がプログラムの内部構造を把握した上で作成するのが一般的であり、非常に手間がかかる。
一方で、シンボリック実行(symbolic execution)という技術を利用してプログラムのテストを行うことが知られている。シンボリック実行は、プログラム内の変数をシンボル化し、シンボルのまま実行を行う技術である。なお、シンボリック実行についての基礎的な事項は、例えば、玉井哲雄、福永光一、「記号実行システム」、情報処理、pp18-28、1982/01/15などに詳しく述べられているので、そちらを参照されたい。
ここで、図1に示すような制御構造を有するプログラムに対してシンボリック実行を行うことを考える。このプログラムには変数a及び変数bが存在するため、変数a及び変数bをシンボル化してシンボリック実行を行う。このプログラムに対してシンボリック実行を行う場合における制御フローを図2に示す。図2に示すように、シンボリック実行では、シンボル化した変数が関わる分岐では、分岐における全てのケースについて実行を行う。これにより、プログラムにおける6つの経路(パス)全てを実行することができるようになっている。すなわち、パスカバレッジは100%である。
このように、従来のシンボリック実行は、原理的には、全ての経路を実行するようになっている(但し、無限ループを有する等、プログラムの構造によっては全ての経路を実行することができない場合がある)。一方、全ての分岐を実行できればよいのであれば、必ずしも全ての経路を実行しなくてもよい場合が多い。例えば図1の例であれば、「B1→B3→B4」、「B1→B3→B5」及び「B2→B6」という3経路を実行すれば、全ての分岐を網羅することができる。
従って、ブランチカバレッジ等について基準値を達成できればよいという場合において、従来のようにシンボリック実行を行うと、本来は行わなくてもよいテスト実行を行うことになる。これは、図1の例のような単純なプログラムであれば問題は無い。しかし、一般的なサイズのプログラムの場合、プログラム内の分岐構造に起因する組合せ爆発を起こし、膨大な数のテスト実行を行わなければならないため、テスト完了までの時間が非常に長くなる。従って、実質的にはテストが完了しているのに長時間テスト実行を続けることになるため、効率的ではない。
特開2009−87355号公報
従って、本技術の目的は、一側面によれば、シンボリック実行を用いてより効率的にプログラムのテストを行うための技術を提供することである。
本繰返しシンボリック実行方法は、シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、分析対象プログラムのコード網羅率をシンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、実行結果格納部に格納されているコード網羅率が所定の基準を満たすか判断するステップと、コード網羅率が所定の基準を満たすと判断された場合、分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップとを含む。
シンボリック実行を用いてより効率的にプログラムのテストを行うことができるようになる。
図1は、テストプログラムの制御構造の一例を示す図である。 図2は、テストプログラムの制御フローの一例を示す図である。 図3は、本実施の形態に係るシステム概要図である。 図4は、既定値格納部に格納されているデータの一例を示す図である。 図5は、分析対象のプログラムを示す図である。 図6は、本実施の形態におけるメインの処理フローを示す図である。 図7は、実行データ格納部に格納されるデータの一例を示す図である。 図8は、実行データ格納部に格納されるデータの一例を示す図である。 図9は、ドライバ格納部に格納されるデータの一例を示す図である。 図10は、ドライバ格納部に格納されるデータの一例を示す図である。 図11は、ドライバコードの一例を示す図である。 図12は、網羅率算出処理の処理フローを示す図である。 図13は、実行データ格納部に格納されるデータの一例を示す図である。 図14は、解析処理の処理フローを示す図である。 図15は、実行データ格納部に格納されるデータの一例を示す図である。 図16は、具体値設定処理の処理フローを示す図である。 図17は、充足値格納部に格納されるデータの一例を示す図である。 図18は、実行データ格納部に格納されるデータの一例を示す図である。 図19は、ドライバ格納部に格納されるデータの一例を示す図である。 図20は、ドライバ格納部に格納されるデータの一例を示す図である。 図21は、ドライバコードの一例を示す図である。 図22は、コンピュータの機能ブロック図である。
図3に、本実施の形態に係るシステム概要図を示す。図3の例では、例えばLAN(Local Area Network)等のネットワークを介して繰返し実行支援装置1と、シンボリック実行装置3と、判定装置5とを含む。
繰返し実行支援装置1は、プログラム格納部101と、既定値格納部102と、抽出部103と、実行データ格納部104と、実行パターン生成部105と、ドライバ生成部106と、ドライバ格納部107と、実行要求部108と、網羅率格納部109と、解析部110と、判定要求部111と、充足値格納部112と、出力部113と、出力データ格納部114とを含む。
抽出部103は、プログラム格納部101に格納されている分析対象のプログラム及び既定値格納部102に格納されているデータを用いて処理を行い、処理結果を実行データ格納部104に格納する。実行パターン生成部105は、実行データ格納部104に格納されているデータを用いて処理を行い実行パターンを生成してドライバ格納部107に格納したり、ドライバ生成部106にドライバの生成を指示する処理を行う。ドライバ生成部106は、ドライバ格納部107に格納されている実行パターンに対応するドライバコードを生成し、ドライバ格納部107に格納する。実行要求部108は、ドライバ格納部107に格納されているデータを用いてシンボリック実行装置3にシンボリック実行の実行要求を送信する処理等を行い、処理結果を実行データ格納部104及び網羅率格納部109に格納する。解析部110は、網羅率格納部109及び実行データ格納部104に格納されているデータを用いて処理を行い、処理結果を判定要求部111に通知したり、処理結果を出力データ格納部113に格納する処理等を行う。判定要求部111は、判定装置5に充足値の生成指示を送信したり、実行データ格納部104に格納されているデータを更新する処理等を行う。出力部114は、出力データ格納部113に格納されているデータを表示装置等に表示する処理を行う。
シンボリック実行装置3は、実行部31と、網羅率算出部32とを含む。実行部31は、既存のシンボリック実行を行うモジュールであり、例えばJava(登録商標) PathFinderの拡張であるSymbolic PathFinderなどであってもよい。網羅率算出部32は、実行部31によるシンボリック実行の実行結果を用いて、コード網羅率(例えばブランチカバレッジ)を算出する。網羅率算出部32は、例えばEclEmma(http://www.eclemma.org/)を用いればよい。なお、シンボリック実行部31及び網羅率算出部32は、例えばeclipse(http://www.eclipse.org/)上で実現するようにしてもよい。
判定装置5は、充足可能性判定を行う装置(例えばSAT(SATisfiability)ソルバやSMT(Satisfiability Modulo Theory)ソルバ等)であり、繰返し実行支援装置1における判定要求部111からの要求に応じてパスコンディション(論理制約とも呼ばれる)を満たす充足値を生成する。例えば「(10≧x)and(5≦x)」というパスコンディションを充足する充足値の生成を要求された場合、充足値として例えば「7」を生成する。
図4に、既定値格納部102に格納されているデータの一例を示す。図4の例では、変数の型の列と、既定値の列とが含まれる。
なお、本実施の形態の処理の対象となる分析対象プログラムは、図5に示したプログラムであるとする。このプログラムの制御構造及び制御フローは、図1及び図2に示したものである。本実施の形態では、図5に示したプログラムのブランチカバレッジが所定基準(例えば100%)に達するようにシンボリック実行を行う。
次に、図6乃至図21を用いて、図3に示したシステムの処理内容について説明する。まず、抽出部103は、プログラム格納部101に格納されている分析対象のプログラム(図5)から、当該分析対象のプログラムに定義されている変数及び当該変数の型を抽出し、実行データ格納部104に格納する(図6:ステップS1)。
図7に、ステップS1が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図7の例では、変数と、変数の型とが格納されるようになっている。
また、抽出部103は、ステップS1において抽出された変数の型に対応する具体値を既定値格納部102(図4)から特定し、実行データ格納部104に格納する(ステップS3)。
図8に、ステップS3が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図8の例では、変数と、変数の型と、具体値とが格納されるようになっている。
そして、実行パターン生成部105は、実行データ格納部104(図8)に格納されている変数の各々について実行パターンを生成し、ドライバ格納部107に格納する(ステップS5)。
図9に、ステップS5が行われた時点でドライバ格納部107に格納されているデータの一例を示す。図9の例に示したように、本実施の形態では、分析対象のプログラムに定義されている変数のうち1つをシンボル化し、残りの変数にはステップS3において特定した具体値を設定する。1行目の実行パターンは、変数aがシンボル化され、変数bには具体値「0」が設定された実行パターンである。2行目の実行パターンは、変数bがシンボル化され、変数aには具体値「0」が設定された実行パターンである。
そして、ドライバ生成部106は、ドライバ格納部107(図9)に格納されている実行パターンの各々に対応するドライバコードを生成し、ドライバ格納部107に格納する(ステップS7)。
図10に、ステップS7が行われた時点でドライバ格納部107に格納されているデータの一例を示す。図10の例では、実行パターンと、ドライバコードとが格納されるようになっている。ここでは、「int a=$,int b=0」という実行パターンに対してはドライバコード1が生成され、「int a=0,int b=$」という実行パターンに対してはドライバコード2が生成されている。
図11に、ドライバコード1及びドライバコード2の一例を示す。本実施の形態では、図11に示したようなドライバコードと、分析対象のプログラムとを用いて、シンボリック実行装置3においてシンボリック実行を行う。
図6の説明に戻り、実行要求部108は、網羅率算出処理を実施する(ステップS9)。網羅率算出処理については、図12乃至図14を用いて説明する。
まず、実行要求部108は、ドライバ格納部107に格納されているドライバコードのうち未処理のドライバコードと、プログラム格納部101に格納されている分析対象のプログラムとを含む実行要求をシンボリック実行装置3に送信する(図12:ステップS21)。
これに応じ、シンボリック実行装置3における実行部31は、シンボリック実行を実施する。シンボリック実行では、プログラム内に定義されているパスコンディションのうちシンボル化変数が関連するパスコンディションを通過する毎に当該パスコンディションを蓄積するようになっている。例えば図11に示したドライバコード1と分析対象プログラムとを用いてシンボリック実行を行った場合、「a>0」及び「a≦0」というパスコンディションを蓄積する。そして、実行部31は、蓄積されたパスコンディションを含む実行結果を繰返し実行支援装置1に送信する。
また、実行部31によりシンボリック実行が行われると、網羅率算出部32は、ブランチカバレッジを算出する。シンボリック実行装置3では、シンボリック実行時に通過したパスコンディションを実行部31が管理テーブル(図示せず)にて管理しており、当該管理テーブルを用いて分析対象のプログラムの制御フローを把握できるようになっている。網羅率算出部32は、この管理テーブルを用いて分析対象のプログラムの全分岐の数を取得する。図5のプログラムの場合には、全分岐の数は6となる。一方で、図5に示した分析対象プログラムに対してドライバコード1を用いてシンボリック実行を行うと、分岐B1、B2及びB6という3つの分岐を実行することができる。従って、ブランチカバレッジは3/6*100≒50(%)となる。
そして、ドライバコード1を用いてシンボリック実行を行った後、さらにドライバコード2を用いてシンボリック実行を行った場合には、さらに分岐B2、B3、B5及びB6を実行することができる。この場合、ドライバコード1を用いたシンボリック実行の結果と併せると、分岐B1、B2、B3、B5及びB6を実行することができたので、ブランチカバレッジは5/6*100≒83(%)となる。網羅率算出部32は、このようにして算出したブランチカバレッジを繰返し実行支援装置1に送信する。なお、網羅率算出部32は、実行した分岐のデータをメインメモリ等の記憶装置に格納しておき、後に再度ブランチカバレッジを算出する際に用いる。
一方、繰返し実行支援装置1の実行要求部108は、パスコンディションをシンボリック実行装置3から受信し、実行データ格納部104に格納すると共に、ブランチカバレッジをシンボリック実行装置3から受信し、網羅率格納部109に格納する(ステップS23)。なお、網羅率格納部109には、既に受信したブランチカバレッジを更新するように新たに受信したブランチカバレッジを格納する。
図13に、ステップS23が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図13の例では、変数と、型と、具体値と、パスコンディションとが格納されるようになっている。
そして、実行要求部108は、ドライバ格納部107に未処理のドライバコードが有るか判断する(ステップS25)。未処理のドライバコードがあると判断された場合(ステップS25:Yesルート)、未処理のドライバコードについて処理するため、ステップS21に戻る。一方、ドライバ格納部107に未処理のドライバコードが無いと判断された場合(ステップS25:Noルート)、元の処理に戻る。
以上のようにしてブランチカバレッジを取得することにより、分析対象のプログラムのテストを完了するか判断できるようになる。また、シンボル化する変数が1つであるので、例えば乗算等の非線形演算を含むプログラムであってもシンボリック実行によるプログラムテストを行うことができるようになる。
図6の説明に戻り、解析部110は、網羅率格納部109に格納されているブランチカバレッジが100%であるか判断する(ステップS11)。なお、100%ではなく、予め定められた所定の基準値以上であるか判断するようにしてもよい。
そして、ブランチカバレッジが100%である場合(ステップS11:Yesルート)、解析部110は、プログラムテストが完了したことを表すテスト完了メッセージを生成し、出力データ格納部113に格納する(ステップS17)。そして、出力部114は、出力データ格納部113に格納されているテスト完了メッセージを表示装置に表示する。そして処理を終了する。
一方、ブランチカバレッジが100%ではない場合(ステップS11:Noルート)、解析部110は、解析処理を実施する(ステップS13)。解析処理については、図14及び図15を用いて説明する。
まず、解析部110は、実行データ格納部104に格納されている変数のうち未処理の変数(以下、処理対象の変数と呼ぶ)を1つ特定する(図14:ステップS41)。そして、解析部110は、実行データ格納部104に、処理対象の変数に対応するパスコンディションが格納されているか判断する(ステップS43)。処理対象の変数に対応するパスコンディションが格納されていないと判断された場合(ステップS43:Noルート)、解析部110は、処理対象の変数に対応付けて判定フラグ「−1」を実行データ格納部104に格納する(ステップS45)。
一方、処理対象の変数に対応するパスコンディションが格納されていると判断された場合(ステップS43:Yesルート)、解析部110は、処理対象の変数に対応するパスコンディションのうち未処理のパスコンディション(以下、処理対象のパスコンディションと呼ぶ)を1つ特定する(ステップS47)。
そして、解析部110は、処理対象の変数に設定した具体値を実行データ格納部104から特定し、当該具体値が処理対象のパスコンディションを充足するか判断する(ステップS49)。処理対象の変数に設定した具体値が処理対象のパスコンディションを充足すると判断された場合(ステップS49:Yesルート)、解析部110は、処理対象のパスコンディションに対応付けて判定フラグ「true」を実行データ格納部104に格納する(ステップS51)。一方、処理対象の変数に設定した具体値が処理対象のパスコンディションを充足しないと判断された場合(ステップS49:Noルート)、解析部110は、処理対象のパスコンディションに対応付けて判定フラグ「false」を実行データ格納部104に格納する(ステップS53)。
図15に、ステップS53が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図15の例では、変数と、型と、具体値と、パスコンディションと、判定フラグとが格納されるようになっている。
そして、解析部110は、処理対象の変数について未処理のパスコンディションが有るか判断する(ステップS55)。未処理のパスコンディションが有ると判断された場合(ステップS55:Yesルート)、未処理のパスコンディションについて処理するため、ステップS47の処理に戻る。
一方、未処理のパスコンディションが無いと判断された場合(ステップS55:Noルート)、解析部110は、実行データ格納部104に未処理の変数が有るか判断する(ステップS57)。未処理の変数が有ると判断された場合(ステップS57:Yesルート)、未処理の変数について処理するため、ステップS41の処理に戻る。
一方、未処理の変数が無いと判断された場合(ステップS57:Noルート)、解析部110は、判定フラグ「false」が対応付けられているパスコンディションが実行データ格納部104に格納されているか判断する(ステップS59)。判定フラグ「false」が対応付けられているパスコンディションが実行データ格納部104に格納されていないと判断された場合(ステップS59:Noルート)、後で説明する具体値設定処理を行うことはできないため、処理は端子Aを介して終了する。一方、判定フラグ「false」が対応付けられているパスコンディションが実行データ格納部104に格納されていると判断された場合(ステップS59:Yesルート)、元の処理に戻る。
以上のような処理を実施することにより、既に行われたシンボリック実行において設定されていた具体値によっては充足できないパスコンディションを特定することができるようになる。
図6の説明に戻り、判定要求部111は、具体値設定処理を実施する(ステップS15)。具体値設定処理については、図16乃至図18を用いて説明する。
まず、判定要求部111は、実行データ格納部104から未処理の変数(以下、処理対象の変数と呼ぶ)を1つ特定する(図16:ステップS71)。そして、判定要求部111は、処理対象の変数に判定フラグ「−1」が設定されているか判断する(ステップS73)。すなわち、処理対象の変数に関連するパスコンディションが存在するか判断する。処理対象の変数に判定フラグ「−1」が設定されていると判断された場合(ステップS73:Yesルート)、ステップS77の処理に移行する。
一方、処理対象の変数に判定フラグ「−1」が設定されていないと判断された場合(ステップS73:Noルート)、判定要求部111は、処理対象の変数に関連するパスコンディションに判定フラグ「false」が設定されているか判断する(ステップS75)。処理対象の変数に関連するパスコンディションに判定フラグ「false」が設定されていないと判断された場合(ステップS75:Noルート)、判定要求部111は、元の具体値(ステップS3において特定した具体値)を処理対象の変数に対応付けて充足値格納部112に格納する(ステップS77)。
一方、処理対象の変数に関連するパスコンディションに判定フラグ「false」が設定されていると判断された場合(ステップS75:Yesルート)、判定要求部111は、処理対象の変数、当該変数の型及び判定フラグが「false」であるパスコンディションを含む判定要求を判定装置5に送信する(ステップS79)。
なお、ステップS79の処理に応じ、判定装置5は、受信したパスコンディションを充足する具体値を生成する処理を行う。例えば型が「int」(整数)である変数aについてパスコンディション「a>0」を充足する具体値を生成する場合、判定装置5は例えば「1」を生成する。そして、判定装置5は、生成した具体値を含む判定結果を繰返し実行支援装置1に送信する。
一方、繰返し実行支援装置1の判定要求部111は、生成された具体値を含む判定結果を判定装置5から受信し(ステップS81)、充足値格納部112に格納する(ステップS83)。
図17に、ステップS83が行われた時点で充足値格納部112に格納されているデータの一例を示す。図17の例では、変数と、変数の型と、パスコンディションと、具体値とが格納されるようになっている。なお、ステップS77の処理が行われた変数については、パスコンディションの列にはデータは格納されない。
そして、判定要求部111は、実行データ格納部104に未処理の変数が有るか判断する(ステップS85)。未処理の変数が有ると判断された場合(ステップS85:Yesルート)、未処理の変数について処理を実施するため、ステップS71の処理に戻る。一方、未処理の変数が無いと判断された場合(ステップS85:Noルート)、判定要求部111は、充足値格納部112に格納されている変数、型及び具体値で実行データ格納部104を更新する(ステップS87)。そして、元の処理に戻る。
図18に、ステップS87が行われた時点で実行データ格納部104に格納されているデータの一例を示す。図18の例では、変数と、変数の型と、具体値とが格納されるようになっている。
以上のようにして生成された具体値を用いて再度シンボリック実行を行えば、既に行われたシンボリック実行によっては実行できなかったパスを実行できるようになり、コード網羅率を高くすることができるようになる。
具体値設定処理(S15)が行われると、処理はステップS5に戻り、新たに設定した具体値を用いて再び上で述べたような処理が行われる。以下では、処理がステップS5に戻った後、ステップS11において「ブランチカバレッジが100%」であると判断されるまでに行われる処理を簡単に説明する。
まず、実行パターン生成部105は、実行データ格納部104(図18)に格納されている変数の各々について実行パターンを生成し、ドライバ格納部107に格納する(ステップS5)。
図19に、ステップS5の処理が行われた時点でドライバ格納部107に格納されているデータの一例を示す。1行目の実行パターンは、変数aがシンボル化され、変数bには具体値「1」(ステップS15において生成された具体値)が設定された実行パターンである。2行目の実行パターンは、変数bがシンボル化され、変数aには具体値「1」(ステップS15において生成された具体値)が設定された実行パターンである。
そして、ドライバ生成部106は、ドライバ格納部107(図19)に格納されている実行パターンの各々に対応するドライバコードを生成し、ドライバ格納部107に格納する(ステップS7)。
図20に、ステップS7が行われた時点でドライバ格納部107に格納されているデータの一例を示す。図20の例では、実行パターンと、ドライバコードとが格納されるようになっている。ここでは、「int a=$,int b=1」という実行パターンにはドライバコード3が生成され、「int a=1,int b=$」という実行パターンにはドライバコード4が生成されている。なお、図21は、ドライバコード3及びドライバコード4の一例を示す図である。
そして、実行要求部108は、網羅率算出処理を実施する(ステップS9)。網羅率算出処理については、図12乃至図14を用いて説明したとおりである。ここでは、ドライバコード3を用いてシンボリック実行を行うと、分岐B1、B2、B3、B4及びB5を実行することができる。また、ドライバコード4を用いてシンボリック実行を行うと、分岐B1、B3、B4及びB6を実行することができる。そして、再度網羅率を算出する際には、上で述べたように、既に行ったシンボリック実行の実行結果と今回行ったシンボリック実行の実行結果とを用いる。既に行ったシンボリック実行では分岐B1、B2、B3、B5及びB6を実行しており、今回行ったシンボリック実行ではB4を新たに実行している。従って、ブランチカバレッジは6/6*100=100(%)となる。
そして、解析部110は、ブランチカバレッジが100%であるか判断する(ステップS11)。ここでは、ブランチカバレッジが100%であると判断されるので(ステップS11:Yesルート)、処理はステップS17を経て終了する。
以上のような処理を実施することにより、ブランチカバレッジが基準値を満たすようなテストをシンボリック実行を用いて効率的に行うことができるようになる。
以上本技術の一実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、上で説明した繰返し実行支援装置1及びシンボリック実行装置3の機能ブロック図は必ずしも実際のプログラムモジュール構成に対応するものではない。また、1台ではなく複数台のコンピュータで機能を分担するようにしてもよい。
また、上で説明した各テーブルの構成は一例であって、必ずしも上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
また、上で述べた例では、ブランチカバレッジを100%にするための処理について説明したが、ステートメントカバレッジやコンディションカバレッジ等についても同様の処理にて対応することができる。
また、繰返し実行支援装置1、シンボリック実行装置3及び判定装置5は一体であってもよい。
なお、上で述べた繰返し実行支援装置1、シンボリック実行装置3及び判定装置5は、コンピュータ装置であって、図22に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
なお、図3に示した抽出部103及び実行パターン生成部105等の各処理部は、CPU2503及びプログラムの組み合わせ、すなわち、CPU2503がプログラムを実行することにより実現してもよい。より具体的には、CPU2503は、HDD2505又はメモリ2501に記憶されたプログラムに従った動作を行うことで、上で述べたような処理部として機能してもよい。
また、図3に示したプログラム格納部101及び既定値格納部102等の各データ格納部は、図22におけるメモリ2501やHDD2505等として実現してもよい。
以上述べた本技術の実施の形態をまとめると以下のようになる。
本繰返しシンボリック実行方法は、(A)シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、(B)分析対象プログラムのコード網羅率(例えばブランチカバレッジやステートメントカバレッジ等)をシンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、(C)実行結果格納部に格納されているコード網羅率が所定の基準を満たすか判断するステップと、(D)コード網羅率が所定の基準を満たすと判断された場合、分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップとを含む。
上で述べた方法では、従来のように全ての変数をシンボル化して一度にシンボリック実行を実施するのではなく、カバレッジは低いが高速に処理可能な個別のシンボリック実行を繰り返し実行するようになっている。但し、個別のシンボリック実行のカバレッジを累積した結果であるコード網羅率が所定の基準を満たせばテストとして十分であり、全ての変数をシンボル化して一度にシンボリック実行を行う場合のように、当該シンボリック実行内において余分なテストを行ってしまうというような事態が抑制されることが期待される。従って、プログラムのテストが効率化される。
また、上で述べた取得ステップが、第1実行ステップにおけるシンボリック実行により得られるパスコンディションのデータをシンボリック実行部から取得し、実行結果格納部に格納するステップを含むようにしてもよい。そして、上で述べた本方法は、(E)実行結果格納部に格納されているパスコンディションの各々について、分析対象プログラムに定義されている変数毎に当該変数に設定した具体値が格納されているデータ格納部から、当該パスコンディションに関連する変数に設定した具体値を特定し、特定された当該具体値が当該パスコンディションを充足するという条件を満たすか判断する判断ステップと、(F)判断ステップにおいて条件を満たさないと判断されたパスコンディションを充足する具体値を生成する生成ステップと、(G)シンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ条件を満たさないと判断されたパスコンディションに関連する変数に具体値を設定する場合には生成ステップにおいて生成された具体値を設定して繰り返しシンボリック実行を行わせる第2実行ステップと、(H)第1実行ステップの実行結果と第2実行ステップの実行結果とを用いて算出されたコード網羅率である累積コード網羅率をシンボリック実行部から取得し、実行結果格納部に格納するステップと、(I)実行結果格納部に格納されている累積コード網羅率が所定の基準を満たすか判断するステップと、(J)累積コード網羅率が所定の基準を満たすと判断された場合、分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップとをさらに含むようにしてもよい。このようにすれば、既に行ったシンボリック実行によっては実行できていないパスを実行できるようになるので、累積コード網羅率を高くすることができる。
また、上で述べた第1実行ステップ及び第2実行ステップにおいて、シンボル化対象の変数を1つとし、分析対象プログラムに定義されている全ての変数をカバーするように当該シンボル化対象の変数を変化させるようにしてもよい。このように、シンボル化対象の変数を1つとすれば、非線形演算(例えば変数同士の乗算等)を含むプログラムであってもシンボリック実行を行うことができるようになる。
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
を含み、コンピュータにより実行される繰返しシンボリック実行方法。
(付記2)
前記取得ステップが、
前記第1実行ステップにおけるシンボリック実行により得られるパスコンディションのデータを前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップ
を含み、
前記実行結果格納部に格納されているパスコンディションの各々について、前記分析対象プログラムに定義されている変数毎に当該変数に設定した具体値が格納されているデータ格納部から、当該パスコンディションに関連する変数に設定した具体値を特定し、特定された当該具体値が当該パスコンディションを充足するという条件を満たすか判断する判断ステップと、
前記判断ステップにおいて前記条件を満たさないと判断されたパスコンディションを充足する具体値を生成する生成ステップと、
前記シンボリック実行部に対して、前記分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させ、前記条件を満たさないと判断されたパスコンディションに関連する変数に具体値を設定する場合には前記生成ステップにおいて生成された具体値を設定して繰り返しシンボリック実行を行わせる第2実行ステップと、
前記第1実行ステップの実行結果と前記第2実行ステップの実行結果とを用いて算出されたコード網羅率である累積コード網羅率を前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップと、
前記実行結果格納部に格納されている前記累積コード網羅率が前記所定の基準を満たすか判断するステップと、
前記累積コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを前記出力データ格納部に格納するステップと、
をさらに含む付記1記載の繰返しシンボリック実行方法。
(付記3)
前記第1実行ステップ及び前記第2実行ステップにおいて、シンボル化対象の変数を1つとし、前記分析対象プログラムに定義されている全ての変数をカバーするように当該シンボル化対象の変数を変化させる
ことを特徴とする付記2記載の繰返しシンボリック実行方法。
(付記4)
シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる実行部と、
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得部と、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断し、前記コード網羅率が前記所定の基準を満たすと判断された場合に、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納する判断部と、
を有する繰返しシンボリック実行装置。
(付記5)
シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、
前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
を、コンピュータに実行させるための繰返しシンボリック実行プログラム。
1 繰返し実行支援装置 101 プログラム格納部
102 既定値格納部 103 抽出部
104 実行データ格納部 105 実行パターン生成部
106 ドライバ生成部 107 ドライバ格納部
108 実行要求部 109 網羅率格納部
110 解析部 111 判定要求部
112 充足値格納部 113 出力データ格納部
114 出力部 3 シンボリック実行装置
31 実行部 32 網羅率算出部
5 判定装置

Claims (5)

  1. シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、
    前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
    前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
    前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
    を含み、コンピュータにより実行される繰返しシンボリック実行方法。
  2. 前記取得ステップが、
    前記第1実行ステップにおけるシンボリック実行により得られるパスコンディションのデータを前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップ
    を含み、
    前記実行結果格納部に格納されているパスコンディションの各々について、前記分析対象プログラムに定義されている変数毎に当該変数に設定した具体値が格納されているデータ格納部から、当該パスコンディションに関連する変数に設定した具体値を特定し、特定された当該具体値が当該パスコンディションを充足するという条件を満たすか判断する判断ステップと、
    前記判断ステップにおいて前記条件を満たさないと判断されたパスコンディションを充足する具体値を生成する生成ステップと、
    前記シンボリック実行部に対して、前記分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させ、前記条件を満たさないと判断されたパスコンディションに関連する変数に具体値を設定する場合には前記生成ステップにおいて生成された具体値を設定して繰り返しシンボリック実行を行わせる第2実行ステップと、
    前記第1実行ステップの実行結果と前記第2実行ステップの実行結果とを用いて算出されたコード網羅率である累積コード網羅率を前記シンボリック実行部から取得し、前記実行結果格納部に格納するステップと、
    前記実行結果格納部に格納されている前記累積コード網羅率が前記所定の基準を満たすか判断するステップと、
    前記累積コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを前記出力データ格納部に格納するステップと、
    をさらに含む請求項1記載の繰返しシンボリック実行方法。
  3. 前記第1実行ステップ及び前記第2実行ステップにおいて、シンボル化対象の変数を1つとし、前記分析対象プログラムに定義されている全ての変数をカバーするように当該シンボル化対象の変数を変化させる
    ことを特徴とする請求項2記載の繰返しシンボリック実行方法。
  4. シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる実行部と、
    前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得部と、
    前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断し、前記コード網羅率が前記所定の基準を満たすと判断された場合に、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納する判断部と、
    を有する繰返しシンボリック実行装置。
  5. シンボリック実行を実施するシンボリック実行部に対して、分析対象プログラムに定義されている全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行を行わせる第1実行ステップと、
    前記分析対象プログラムのコード網羅率を前記シンボリック実行部から取得し、実行結果格納部に格納する取得ステップと、
    前記実行結果格納部に格納されている前記コード網羅率が所定の基準を満たすか判断するステップと、
    前記コード網羅率が前記所定の基準を満たすと判断された場合、前記分析対象プログラムのテストが完了したことを表すデータを出力データ格納部に格納するステップと、
    を、コンピュータに実行させるための繰返しシンボリック実行プログラム。
JP2010212679A 2010-09-22 2010-09-22 繰返しシンボリック実行方法、プログラム及び装置 Expired - Fee Related JP5505227B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010212679A JP5505227B2 (ja) 2010-09-22 2010-09-22 繰返しシンボリック実行方法、プログラム及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010212679A JP5505227B2 (ja) 2010-09-22 2010-09-22 繰返しシンボリック実行方法、プログラム及び装置

Publications (2)

Publication Number Publication Date
JP2012068869A true JP2012068869A (ja) 2012-04-05
JP5505227B2 JP5505227B2 (ja) 2014-05-28

Family

ID=46166086

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010212679A Expired - Fee Related JP5505227B2 (ja) 2010-09-22 2010-09-22 繰返しシンボリック実行方法、プログラム及び装置

Country Status (1)

Country Link
JP (1) JP5505227B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014127091A (ja) * 2012-12-27 2014-07-07 Fujitsu Ltd テストデータ生成方法、プログラム及び装置
JP2014153908A (ja) * 2013-02-08 2014-08-25 Fujitsu Ltd テストデータ生成プログラム、方法及び装置
JP2015146179A (ja) * 2014-01-31 2015-08-13 富士通株式会社 テストダブルの生成
JP2017041197A (ja) * 2015-08-21 2017-02-23 富士通株式会社 テストデータ生成装置、方法、及びプログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11272503A (ja) * 1998-03-24 1999-10-08 Hitachi Software Eng Co Ltd プログラムのテストデータ自動生成装置
JP2000259401A (ja) * 1999-03-05 2000-09-22 Ntt Communicationware Corp ソースプログラム標準化装置およびソースプログラムを標準化する方法
JP2009087355A (ja) * 2007-10-02 2009-04-23 Fujitsu Ltd ウェブアプリケーションを検証するシンボリック実行エンジンを提供するシステム及び方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11272503A (ja) * 1998-03-24 1999-10-08 Hitachi Software Eng Co Ltd プログラムのテストデータ自動生成装置
JP2000259401A (ja) * 1999-03-05 2000-09-22 Ntt Communicationware Corp ソースプログラム標準化装置およびソースプログラムを標準化する方法
JP2009087355A (ja) * 2007-10-02 2009-04-23 Fujitsu Ltd ウェブアプリケーションを検証するシンボリック実行エンジンを提供するシステム及び方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014127091A (ja) * 2012-12-27 2014-07-07 Fujitsu Ltd テストデータ生成方法、プログラム及び装置
JP2014153908A (ja) * 2013-02-08 2014-08-25 Fujitsu Ltd テストデータ生成プログラム、方法及び装置
US9639454B2 (en) 2013-02-08 2017-05-02 Fujitsu Limited Computer-readable recording medium storing therein test data generating program, test data generating method, test data generating apparatus and information processing system
JP2015146179A (ja) * 2014-01-31 2015-08-13 富士通株式会社 テストダブルの生成
JP2017041197A (ja) * 2015-08-21 2017-02-23 富士通株式会社 テストデータ生成装置、方法、及びプログラム

Also Published As

Publication number Publication date
JP5505227B2 (ja) 2014-05-28

Similar Documents

Publication Publication Date Title
CN107423048B (zh) 数据收集的方法、装置、介质和计算设备
US9015685B2 (en) Code analysis for simulation efficiency improvement
US9104528B2 (en) Controlling the release of private information using static flow analysis
CN112765023B (zh) 测试用例生成方法、装置
US8930447B2 (en) Method, apparatus, and program for usability analysis of web applications
US8671397B2 (en) Selective data flow analysis of bounded regions of computer software applications
CN110781091B (zh) 应用程序的测试方法、装置、电子设备及存储介质
JP5505227B2 (ja) 繰返しシンボリック実行方法、プログラム及び装置
CN111563257A (zh) 数据检测方法及装置、计算机可读介质及终端设备
CN111538659B (zh) 业务场景的接口测试方法、系统、电子设备和存储介质
JP2014153908A (ja) テストデータ生成プログラム、方法及び装置
CN113590454A (zh) 测试方法、装置、计算机设备和存储介质
US9442818B1 (en) System and method for dynamic data collection
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
US9996619B2 (en) Optimizing web crawling through web page pruning
CN113141407B (zh) 一种页面资源加载方法、装置和电子设备
CN111338928A (zh) 基于chrome浏览器测试的方法及装置
CN111400623B (zh) 用于搜索信息的方法和装置
JP2019074966A (ja) Sql文抽出装置、sql文抽出方法及びプログラム
CN109635175B (zh) 页面数据拼接方法、装置、可读存储介质和电子设备
JP2015090616A (ja) テストケース抽出プログラム、方法及び装置
CN117135151B (zh) 一种gpu集群的故障检测方法及gpu集群、电子设备和存储介质
CN114579976B (zh) 基于状态转换的堆内存破坏漏洞自动验证方法和系统
CN113448822B (zh) 测试方法、装置、计算机可读介质及电子设备
JP2007200240A (ja) 情報処理装置及び情報処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130702

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140303

R150 Certificate of patent or registration of utility model

Ref document number: 5505227

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees