JP2009157456A - プログラム検証装置、プログラム検証方法、検証プログラム - Google Patents
プログラム検証装置、プログラム検証方法、検証プログラム Download PDFInfo
- Publication number
- JP2009157456A JP2009157456A JP2007332152A JP2007332152A JP2009157456A JP 2009157456 A JP2009157456 A JP 2009157456A JP 2007332152 A JP2007332152 A JP 2007332152A JP 2007332152 A JP2007332152 A JP 2007332152A JP 2009157456 A JP2009157456 A JP 2009157456A
- Authority
- JP
- Japan
- Prior art keywords
- state
- variables
- variable
- target
- constraint
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test 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)
- Debugging And Monitoring (AREA)
Abstract
【課題】プログラムの動的検証においてテストカバレッジを効率的に拡大する。
【解決手段】本発明の一態様としてのプログラム検証装置は、検証対象となるプログラムを実行し、複数の変数を監視する変数監視手段と、各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持手段と、前記状態監視手段により監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得手段と、前記制約条件を満たすように前記状態取得手段によりまだ取得されていない対象変数状態を生成する状態生成手段と、生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定手段と、を備える。
【選択図】図1
【解決手段】本発明の一態様としてのプログラム検証装置は、検証対象となるプログラムを実行し、複数の変数を監視する変数監視手段と、各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持手段と、前記状態監視手段により監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得手段と、前記制約条件を満たすように前記状態取得手段によりまだ取得されていない対象変数状態を生成する状態生成手段と、生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定手段と、を備える。
【選択図】図1
Description
本発明は、プログラムの動的検証を行うプログラム検証装置、プログラム検証方法、および検証プログラムに関する。
ソフトウエア(プログラム)の動的検証を、ソフトウエアの上位モジュールであるドライバと、ソフトウェエアの下位モジュールであるスタブ(プログラム)とを用いて行う場合がある。この場合、ドライバからテストケースとしてコマンド群を発行し、発行したコマンド群をソフトウエアへの入力として用いてソフトウエアを動作させる。
ソフトウエアを検証した範囲をテストカバレッジといい、テストカバレッジが広範囲にわたるほどソフトウエアの信頼性を保障することができる。
テストカバレッジには、ソフトウエア内のステイトメントをどれだけ網羅したかを示すコードカバレッジ、ソフトウエア内の判定条件における真・偽の組合せをどれだけ網羅したかを示す条件カバレッジ、ソフトウエア内の実行経路をどれだけ網羅したかを示すパスカバレッジが知られている。また、ソフトウエアの変数値の組み合わせをソフトウエア状態とし、ソフトウエア状態をどれだけ網羅したかを示す状態カバレッジなるものもある。状態カバレッジは、他のテストカバレッジより細かい分類をする。例えば、パスカバレッジの場合、取りうる経路の数が分類数であるのに対し、状態カバレッジは各経路に複数の変数の組み合わせが存在する。そのため、分類数が多く、状態カバレッジの拡大は他のテストカバレッジの拡大に繋がりやすい。以降、テストカバレッジと表記する際は、状態カバレッジを意味するものとする。テストカバレッジを拡大させるには、検証対象のソフトウエアを隅々まで動作確認をする必要があり、様々な種類のテストケースを数多く、実行する必要がある。
特開2000-20349号公報
しかし、従来方法では、冗長なテストが起こりやすい問題がある。テストの回数を重ねるほど、ソフトウエアが検証済み領域内での動作に留まりやすくなり、テストカバレッジを拡大することが困難となる。テストカバレッジを拡大するためには、ソフトウエアの未検証領域に到達するテストケースを効率よく作成することが必要となる。しかし、一般的に、意図した領域に到達するテストケースを生成することは難しく、冗長なテストはどうしても繰り返されてしまう。
特許文献1(特開2000-20349号公報)では、対象ソフトウエアの実行中にソフトウエアの内部状態、およびスタブの状態を記憶し、これら状態情報を用いて、記憶した時点の動作を再現することで、冗長なテストを削減することを可能としている。しかし、テストカバレッジを拡大するためには、未検証のソフトウエア領域に到達するテストケースを用いる必要がある。しかし、そのようなテストケースを生成する方法に関し特許文献1では何ら言及されていない。
本発明は、プログラムの動的検証においてテストカバレッジを効率的に拡大できるようにしたプログラム検証装置、プログラム検証方法、および検証プログラムを提供する。
本発明の一態様としてのプログラム検証装置は、
検証対象となるプログラムを実行し、複数の変数を監視する変数監視手段と、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持手段と、
前記状態監視手段により監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得手段と、
前記制約条件を満たすように前記状態取得手段によりまだ取得されていない対象変数状態を生成する状態生成手段と、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定手段と、
を備える。
検証対象となるプログラムを実行し、複数の変数を監視する変数監視手段と、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持手段と、
前記状態監視手段により監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得手段と、
前記制約条件を満たすように前記状態取得手段によりまだ取得されていない対象変数状態を生成する状態生成手段と、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定手段と、
を備える。
本発明の一態様としてのプログラム検証方法は、
検証対象となるプログラムを実行し、複数の変数を監視する変数監視ステップと、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持ステップと、
前記状態監視ステップにより監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得ステップと、
前記制約条件を満たすように前記状態取得ステップによりまだ取得されていない対象変数状態を生成する状態生成ステップと、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定ステップと、
を備える。
検証対象となるプログラムを実行し、複数の変数を監視する変数監視ステップと、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持ステップと、
前記状態監視ステップにより監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得ステップと、
前記制約条件を満たすように前記状態取得ステップによりまだ取得されていない対象変数状態を生成する状態生成ステップと、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定ステップと、
を備える。
本発明の一態様としての検証プログラムは、
検証対象となるプログラムを実行し、複数の変数を監視する変数監視ステップと、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持ステップと、
前記状態監視ステップにより監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得ステップと、
前記制約条件を満たすように前記状態取得ステップによりまだ取得されていない対象変数状態を生成する状態生成ステップと、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定ステップと、
をコンピュータに実行させる。
検証対象となるプログラムを実行し、複数の変数を監視する変数監視ステップと、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持ステップと、
前記状態監視ステップにより監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得ステップと、
前記制約条件を満たすように前記状態取得ステップによりまだ取得されていない対象変数状態を生成する状態生成ステップと、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定ステップと、
をコンピュータに実行させる。
本発明により、プログラムの動的検証においてテストカバレッジを効率的に拡大できる。
図1は、本発明の一実施形態としてのソフトウエア検証システム(プログラム検証装置)の構成を概略的に示すブロック図である。
対象ソフトウエア1は、動的検証の対象となるソフトウエア(プログラム)である。対象ソフトウエア1は、あるソフトウエアに含まれる複数のモジュールのうちの部分モジュールであってもよいし、またあるシステムに搭載された複数のモジュールのうちの一モジュールであってもよい。動的検証とは、実際に対象ソフトウエア1を動作させ、正しく振る舞うかどうかを調べる検証のことである。一般的に、対象ソフトウエア1を動作させるために、ドライバおよびスタブと呼ばれるモジュールが必要となり、本実施形態でもドライバ2およびスタブ4を用いる。ただし、本発明はドライバおよびスタブを用いないソフトウエアの検証に用いることも有効である。
ドライバ2は、対象ソフトウエア1を動作させるための上位モジュールである。ドライバ2は、ドライバ指令3を発行することにより対象ソフトウエア1を動作させる。ドライバ指令3は、対象ソフトウエア1により実行可能なコマンド列、または対象ソフトウエア1内のサブルーチンを直接呼び出すコマンドである。
スタブ4は、対象ソフトウエア1により動作させられる下位モジュール(プログラム)である。スタブ4は、対象ソフトウエア1により呼び出され、呼び出しに応じて処理を行う。対象ソフトウエア1がシステム内部のソフトウエアである場合、スタブ4はハードウエアまたはメカを模倣するシミュレータでもよい。
ロガー10は、ドライバ2が対象ソフトウエア1へドライバ指令3を出す前後に、対象ソフトウエア1およびスタブ4のすべての変数のログ情報を採取する。ロガー10は、複数の変数を監視する変数監視手段を含んでいる。ログ情報には、カバレッジ情報11とトレース情報12とがあり、いずれも、対象ソフトウエア1の動作中に到達したSW(ソフトウエア)状態およびスタブ状態に関する情報を含む。SW状態およびスタブ状態はプログラム状態と称されることもある。
ここでSW状態は、対象ソフトウエア1におけるすべての変数の値の組(対象ソフトウエア1が参照する変数の値の組)である。スタブ状態は、スタブにおける全ての変数の値の組(スタブ4が参照する変数の値の組)である。なお、対象ソフトウエア1の変数およびスタブ4の変数は、ローカル変数およびグローバル変数のいずれであってもよい。またここでは対象ソフトウエア1における全ての変数の値の組をSW状態、スタブ4における全ての変数の値の組をスタブ状態と定義したが、対象ソフトウエア1においてあらかじめ指定した変数の値の組をSW状態、スタブ4においてあらかじめ指定した変数の値の組をスタブ状態と定義してもよい。この場合、ロガー10は対象ソフトウエア1およびスタブ4において各々あらかじめ指定した変数のログ情報のみを採取してもよい。
カバレッジ情報11は後述する未到達条件生成器13で用いられ、トレース情報12は後述する不変条件検出部(条件生成手段)15で用いられる。カバレッジ情報11およびトレース情報12はそれぞれ使用目的に応じた内容を含み、互いに同一の情報であっても、互いに異なる情報であっても良い。
ここで、ロガー10がログ情報(カバレッジ情報11、トレース情報12)を取得するためには、ロガー10が、対象ソフトウエア1およびスタブ4の変数にアクセスできるようにする必要がある。このためには、例えば、ロガー10をドライバ2内のルーチンとして記述し、対象ソフトウエア1およびスタブ4の変数を、ローカル変数からグローバル変数に定義し直すことにより実現できる。もしくは、対象ソフトウエア1およびスタブ4を動作させるコンピュータシステム内のメモリにロガー10が直接にアクセスすることにより各変数値を取得することもできる。後者の場合は、ロガー10は、各変数が割り当てられたメモリアドレスを保持したマッピング情報を参照することで、各変数に直接アクセスできる。
設計仕様14は、対象ソフトウエア1およびスタブ4の仕様ならびに詳細設計に関する情報である。設計仕様14には、少なくとも変数毎の制約情報、変数間の制約情報等に関する情報が含まれている。変数の制約情報としては、たとえば変数値の下限・上限に関する情報があり得る。この場合、下限・上限の値が設計仕様14に直接記述されていてもよいし、あるいは、各変数の型が記述されていればその型から下限・上限を決定可能である。変数間の制約情報としては、たとえば複数の変数を含む関数式の下限・上限値の情報があり得る。
制約条件取得部17は、変数毎または変数間の制約条件をユーザ入力する制約条件入力部を備えており、ユーザは制約条件入力部から制約条件を入力し、制約条件取得部17は、ユーザから入力された制約条件を記憶する。制約条件取得部17はユーザから入力された制約条件を保持する制約条件保持手段を備える。制約条件取得部17は、記憶した制約条件をその使用先(未到達条件生成器13、未到達状態生成器8)に送出する。各生成器8、13で使用する制約条件の内容はそれぞれ異なり、その詳細は、後述する。
ユーザは、たとえば設計仕様14に記述された制約情報を参照して制約条件を決定し、決定した制約条件を入力できる。たとえば設計仕様14において、対象ソフトウエア1が最大エントリー数20のテーブルを保持しかつ参照するエントリーIDをentry_idに格納するようになっている場合、0≦entry_id<20という関係式を決定し、この関係式を制約条件として入力できる。対象ソフトウエア1の変数とスタブ4の変数との間で、制約が存在するケースもあり、この場合も、関係式を決定し、入力することもできる。
ここでは、制約条件取得部17はユーザ入力に基づいて制約条件を取得すると説明したが、コンピュータ読み取り可能な設計仕様を用意しておき、制約条件取得部17が、この設計仕様を読み取ることにより、各変数の制約条件または変数間の制約条件を取得するようにしてもよい。
未到達条件生成器13は、制約条件取得部17から対象変数(カバレッジ情報11に含まれるすべての変数のうち、現時点において検証したい変数)に関する制約条件9を受け取る。対象変数の数は単数または複数である。未到達条件生成器13は、各対象変数の制約条件9と、対象変数間の制約条件9とを受け取る。未到達条件生成器13は、受け取った制約条件9と、カバレッジ情報11とに基づき、対象ソフトウエア1が到達していない、対象変数の条件(未到達のSW変数条件)、およびスタブ4が達していない、対象変数の条件(未到達のスタブ変数条件)を、未到達条件7として生成する。未到達条件生成部8は、生成した未到達条件7を未到達状態生成器8に出力する。
ここで未到達のSW変数条件は、対象ソフトウエア1における対象変数の値の組からなる対象変数状態の全領域のうちいまだ到達していない領域に相当し、未到達のスタブ変数条件は、スタブ4における対象変数の値の組からなる対象変数状態の全領域のうちいまだ到達していない領域に相当する。
未到達条件生成器13はロガー10から受け取るカバレッジ情報11に基づき、対象ソフトウエア1およびスタブ4における対象変数状態を逐次取得する状態取得手段を含む。
なお、未到達条件生成器13は、対象変数について未到達の領域が無くなったら(検証が終了したら)、別の対象変数を選択し、再度、制約条件9の取得要求および未到達条件7の生成を行ってもよい。
以下、未到達条件7の生成例をいくつか説明する。
第1の例として、下限・上限値が設定された変数(対象変数)の最小値、最大値を含む制約条件9を利用して、未到達条件7を生成する例が挙げられる。動的検証中、カバレッジ情報11に示される対象変数の値の移り変わりをチェックし、最小値・最大値のみを記憶し、下限・上限値に達していない対象変数を探す。そして、下限・上限値の少なくともいずれかに達していない対象変数について、未到達条件7を生成する。具体的には、下限・上限値間の範囲から、最小値・最大値間の範囲を除いた部分を、未到達条件7として生成する。たとえば対象変数xの最小値・最大値がそれぞれ3と5であり(3≦x≦15)、また、下限値・上限値がそれぞれ0と20であった場合、未到達条件7は0≦x≦2∨16≦x≦20となる。ただしxは整数であるとする。「∨」は「OR」を表す。
第2の例として、制約条件9として、下限・上限値が設定された、1つ以上の対象変数を含む関数式を用いて未到達条件7を生成する例が挙げられる。カバレッジ情報11に基づき、上記関数式の値を計算し、関数値の最小値・最大値のみを記憶する。そして、関数の下限・上限値の少なくとも一方に達していない関数式について、未到達条件7を生成する。具体的には、関数の下限・上限値間の範囲において、最小値・最大値間の範囲を除いた部分を、未到達条件7として生成する。たとえば関数式2x+yについて、最小値および最大値がそれぞれ6、15であり(6≦2x+y≦15)、関数の下限値および上限値がそれぞれ0、100であった場合、未到達条件7は0≦2x+y≦5∨16≦2x+y≦100となる。
第3の例として、制約条件9として対象変数を含む条件式を用いて、未到達条件7を生成する方法が挙げられる。カバレッジ情報11に基づき、条件式が成立したか否かを判定する。条件式としては、設計仕様14から、真・偽の両方を取りうる条件式を選択することが望ましい。対象ソフトウエア1内に記述された判定文の条件を条件式として用いてもよく、その場合は、静的解析技術を用いて制約条件取得部17等のコンピュータにより自動で条件式を抽出することも可能である。未到達条件生成器13は、真・偽の片方しか満たさない条件式を探し、満たされていない方に対応する条件を未到達条件7として取得する。たとえば、条件式x+y<20が成立済みの場合、20≦x+yを未到達条件7として取得する。x,yは対象変数である。
ここで、上記第3の例における条件式の選定は、設計仕様14から得られる対象変数間の制約情報を基に行ってもよい。たとえば対象変数x,y,zに関して、x+y+z≦10の制約情報が、設計仕様14に記述されているとする。対象変数x,y,zは非負であるとする。この場合に、3つの対象変数x,y,zの取りうる値の範囲を3次元で表したものを図2に示す。(0,0,0)、(10,0,0)、(0,10,0)、(0,0,10)が当該範囲の形状の頂点となり、 x+y≦10 ∧ z=0、 x+z≦10 ∧ y=0、 y+z≦10 ∧ x=0、 x+y+z=10がこの形状の境界面となる。そして、各頂点、および各境界面に到達したか否かを判定する条件式を、制約条件9として用いる。たとえば頂点(0,0,10)に到達したか否かを判定する条件式はx=0∧y=0∧z=10であり、境界面x+y+z=10へ到達したか否かを判定する条件式はx+y+z=10である。そして、条件式を満たしていなければ、この条件式を未到達条件7として取得する。このように、n個の対象変数間の制約情報から、これらの対象変数の取りうる範囲をn次元空間内で定め、境界となるポイント(頂点または境界面)への到達の有無を判定する条件式を制約条件として選択し、いまだ成立していない条件式を未到達条件7として取得することができる。
不変条件検出部(条件生成手段)15は、ロガー10により生成されたトレース情報12を参照し、ソフトウエア1の変数間、スタブ4の変数間および両者の変数間に成立する条件を不変条件(第1の条件)16として検出する。不変条件16は、トレース情報12において常に成立する変数間の条件式であり、後述する未到達状態生成器8において尤もらしいSW状態5およびスタブ状態6を生成するために用いられる。尤もらしいとは、トレース情報12で常に成立している条件を満たしていることを意味する。不変条件検出部15は、検出した条件式のうち、対象変数のみを含む条件式を除いて(対象変数と、対象変数と異なる他の変数との両方を含む条件式は除かない)、未到達状態生成器8に送る。不変条件16の検出にはマサチューセッツ工科大学のM. Ernstの研究グループが開発したDaikon(http://groups.csail.mit.edu/pag/daikon/)を用いることができる。
Daikonは、ソフトウエア動作中の変数値の推移を調べ、機械学習により変数間で成立する条件・制約を発掘するツールである。得られる制約・条件は、変数間に成立する不変情報であり、たとえばx=y+3、または配列aは昇順に並ぶ、といった情報である。Daikonが必要とする実行時間は、トレース情報12のサイズに依存し、特にログを取る変数の個数に強く依存する。対象ソフトウエア1とスタブ4に関する全ての変数のログを採取するのは現実的でないケースが殆どであるため、トレース情報12としてログを採取する変数の個数を制限することが好ましい。たとえばログを採取する変数の総数をあらかじめ決めておくことができる。このように個数を制限する場合、ログを採取する変数を適切に決めることで、効率的に不変条件16を抽出することができる。
トレース情報12としてログを採取する変数の決定方法の一例を紹介する。まず全変数のログを取得する短時間の動的検証を行うことによりログ情報を取得し、得られたログ情報からDaikonより、不変条件(第2の条件)を取得する。短時間であるため、全ての変数のログを採取してもログ情報(トレース情報12)のサイズは小さく、Daikonを短時間で実行可能である。ただし、取得した不変条件(第2の条件)は、短時間の動的検証により得られたものであるため、偶然成立した条件・制約である可能性も高く、信頼性は低い。こうして得られた不変条件を解析することにより、高い頻度で出現する変数を検出し、検出した変数のみをログ採取すべき変数として決定し、決定した変数のみを用いて不変条件(第1の条件)を生成する。このようにログを採取する変数を決定することにより、単に任意に変数を選択するよりも、効率的に不変条件16を抽出することが可能となる。
ログを採取する変数の他の決定方法として、不変条件を解析し、高頻度で出現する不変条件(関係式)を探し、見つけた関係式に含まれる多項式をログの採取対象とすることもできる。たとえば多項式x+y+zが多発する場合、変数x,y,zのログを取る代わりに、多項式x+y+zのログを採取することで、ログを採取する変数を2つ削減することができる。
未到達状態生成器(状態生成手段、状態設定手段)8は、制約条件9と未到達条件7と不変条件16とを満たすように、全変数の値を含む、SW状態5およびスタブ状態6を計算し、計算したSW状態5およびスタブ状態6を対象ソフトウエア1およびスタブ4に対して設定する。ただし、対象変数以外の他の変数については未到達条件7に含まれないため、制約条件9と不変条件16とを満たすように任意の値を設定すればよい。ここで、未到達状態生成器8が用いる制約条件9には、対象変数と異なる他の変数を有する各式(条件)を含む。これは、未到達状態生成器8は、対象変数以外の変数にも値を割り当てる必要があるためである。各式(条件)には、対象変数が含まれて良いが、この場合、対象変数以外の他の変数も同時に含まれるものとし、対象変数のみからなる式は含まれないものとする。対象変数のみからなる式(条件)は未到達条件7の生成のみに用いるためである。
このように、全変数に対応する離散値の有限集合から値を選択し、全ての制約を満たすように全変数に対して値を割り当てる問題を制約充足問題という。制約充足問題の解法としてバックトラック法が有名である。バックトラック法では、まず変数を選び、値を割り当てる。割り当てた際に、割り当てが済んでいる変数のみに関連する制約を全て充足するか調べる。充足している場合は、割り当てがされていない変数を選び、全ての変数に値が割り当てられるまで、割り当てを続ける。制約を充足しない場合は、割り当てる値を変更する。制約を満たす割り当て値が存在しない場合、充足できない制約に関係する既に割り当てた変数の割り当てを取り消し、再割り当てを行う。
ここで、先に、対象ソフトウエア1の変数とスタブ4の変数間の制約情報を設計仕様14に含めてもよいと説明したが、この具体例と、この具体例に対応する制約条件の例について以下詳細に説明する。
例えば、図3の左側のように、対象ソフトウエア1がスタブ4の状態を変数stab_stateに保持する場合を考える。図3の右側はスタブ4の状態遷移図である。組み込みシステムにおいて、対象ソフトウエア1を制御ソフトウエアとして用いる場合、スタブ4は制御対象となるメカ・ハードウエアのシミュレータとなる。このように制御ソフトウエアが、メカの状態(スタブ4の状態)を変数で保持することは頻繁に行われることである。
ここで、設計仕様14において、制御ソフトウエアの指令により状態遷移が行われ、状態遷移の終了が確認された際に、stab_stateを更新することが決められていたとする。この場合、変数stab_stateの値がAであるとすると、スタブの状態は、Aである場合と、Bに遷移済みの場合が考えられる。状態C又はDに遷移するためには、変数stab_stateが状態Bであることを制御ソフトウエアが認識する必要があるため、変数stab_sateがAのまま、状態C又はDに遷移すことは起こり得ない。図4に変数stab_sateと、取り得るスタブ状態との対応表を示す。
図4の表に反した組み合わせ(例えば、変数stab_sate=A、スタブ状態=C)で、制御ソフトウエアを動作させることはできても、仕様外の状態での動作となり、正しく動作検証を行うことはできない。このような状況を避けるために、制約条件9として適切な条件を用いることで、仕様外の状態へ陥ることを防ぐ。スタブ状態は変数sb1の値により、以下のように定義されていたとする。
状態A: 0≦sb1<5
状態B: 5≦sb1<10
状態C: 10≦sb1<20
状態D: 20≦sb1
状態A: 0≦sb1<5
状態B: 5≦sb1<10
状態C: 10≦sb1<20
状態D: 20≦sb1
この場合、図4の表に基づき、以下の制約条件を抽出することが出来る。
制約条件: stab_state==A ならば、0≦sb1<10
制約条件: stab_state==B ならば、5≦sb1
制約条件: stab_state==C ならば、10≦sb1
制約条件: stab_state==D ならば、0≦sb1<5 または、20≦sb1
制約条件: stab_state==A ならば、0≦sb1<10
制約条件: stab_state==B ならば、5≦sb1
制約条件: stab_state==C ならば、10≦sb1
制約条件: stab_state==D ならば、0≦sb1<5 または、20≦sb1
ところで、SW状態5およびスタブ状態6を求める際、各状態の取り得る領域は膨大になることも多い。
たとえば変数vt1,vt2,vt3が整数であり、各変数の取り得る範囲が、0≦vt1≦2, 1≦vt2≦3, 0≦vt3≦1である場合を想定する。この場合、対象ソフトウエア1の取り得るSW状態は、(vt1,vt2,vt3)の組み合わせであることから、(0,1,0) (0,1,1) (0,2,0) (0,2,1) (0,3,0) (0,3,1) ・・・(1,3,0) (1,3,1)の計18通りとなる。また、変数vfが4バイト長の浮動小数点型の場合、vfは232通りの値を取り得るため、対象ソフトウエア1の取り得るSW状態も232通りとなる。
このような状況において、同値分割に基づいた境界分析を活用し、ロガー10および未到達条件生成器13の処理を拡張することで、効率的な状態生成を行う方法の例を以下に示す。
たとえば対象ソフトウエア1の変数vdを対象変数とする場合を想定する。まず変数vdが関係する条件式を取得する。条件式は、ユーザが設計仕様14またはソースコードから探してロガー10および未到達条件生成器13に与えてもよいし、ロガー10がソースコードをスキャンすることにより取得してもよい。取得した条件式が、vd<5,23<vd,vd<100の場合、以下のように同値集合を導き出すことが出来る。
同値集合A:vd<5を満たす変数vd
同値集合B:5≦vd≦23を満たす変数vd
同値集合C:23<vd<100を満たす変数vd
同値集合D:100≦vdを満たす変数vd
同値集合A:vd<5を満たす変数vd
同値集合B:5≦vd≦23を満たす変数vd
同値集合C:23<vd<100を満たす変数vd
同値集合D:100≦vdを満たす変数vd
このように、変数vdの値を4通りに同値分割した場合、vdの取り得る値を同値集合A,B,C,Dの4種類と見なすことができる。
ロガー10はカバレッジ情報11として同値集合に達したかどうかを表す情報を生成する。たとえば、生成されたカバレッジ情報11に、たとえば“変数vdは同値集合A、C、Dに到達済み”といった情報を含める。
未到達条件生成器13は、ロガー10から受けたカバレッジ情報11を検査し、到達していない同値集合を検出する。本例の場合、カバレッジ情報11から、変数vdが同値集合Bに達していないことを検出する。未到達条件生成器13は、検出した同値集合Bに基づき未到達条件7を生成する。具体的には、未到達条件生成器13は、未到達条件7として、変数vdの境界値を採用する。これは、境界分析手法を適用するためであり、同値集合の境界に不具合が潜みやすい性質を考慮したものである。このようにして対象変数の値を決定することで効率的な状態生成が可能となる。同値集合Bの境界値は5、23であるため、未到達条件7はたとえばvd=5となる。ただし、制約条件取得部17から未到達条件生成器13へ送られる制約条件9は満たすものとする。この未到達条件7(vd=5)を満たすように未到達状態生成器8がSW状態5またはスタブ状態6を生成できれば、変数vdについての検証は終了である。一方、できなかった場合は、同値集合Bに他の境界値があれば、その値を未到達条件7として採用する。同値集合Bには他の境界値23があるため、この値を未到達条件7として採用し、再度、SW状態5またはスタブ状態6の生成を試みる。すべての境界値を試して、SW状態5またはスタブ状態6が生成できなければ、同値集合Bの条件を未到達条件7として生成する。すなわち5≦vd≦23を未到達条件7として用いる。
上記の説明では、変数vdのみを含む条件式の例を示したが、変数vdと異なる他の対象変数が混ざっても構わない。たとえば、求めた条件式が、vd≦5,vd1<vdのように、他の対象変数vdが含まれる場合、以下のような同値集合を導き出すことができる。
同値集合A’:vd≦5∧vd1<vdを満たす変数vd
同値集合B’:5<vd∧vd1<vdを満たす変数vd
同値集合C’: vd≦5∧vd1≧vdを満たす変数vd
同値集合D’: 5<vd∧vd1≧vdを満たす変数vd
同値集合A’:vd≦5∧vd1<vdを満たす変数vd
同値集合B’:5<vd∧vd1<vdを満たす変数vd
同値集合C’: vd≦5∧vd1≧vdを満たす変数vd
同値集合D’: 5<vd∧vd1≧vdを満たす変数vd
図5は、本発明の一実施の形態にしたがったソフトウエア検証方法(プログラム検証方法)の処理の手順を示すフローチャートである。
まず、ステップS11では、制約条件取得部17により制約条件9を取得する。制約条件9を取得する処理の詳細フローの一例を図7のフローチャートに示す。全ての変数の上限・下限値を求め(S31)、また、変数間に成立する条件を列挙する(S32)。S31、S32で得られた内容が制約条件9となる。制約条件9はユーザ入力に基づき取得してもよいし、設計仕様14から読み出すことにより取得してもよい。
図5のステップS12では、未到達条件生成器13により未到達条件7を取得する。未到達条件生成器13を取得する処理の詳細フローを図6のフローチャートに示す。まず、対象ソフトウエア1,ドライバ2およびスタブ4を実行させ、ドライバ2からのドライバ指令3を用いて、従来テスト手法による動的検証を行う(S21)。なお、この処理は、後述するS16や図8のS41と同一の動的検証であって構わない。動的検証の間、ロガー10からカバレッジ情報11を取得および蓄積し(S22)、また、制約条件取得部17から、対象変数に関する制約条件9を取得する(S23)。そしてステップS23で取得した制約条件9と、カバレッジ情報11(いままで蓄積したカバレッジ情報)とに基づき、未到達条件7を取得する(S24)。
図5のステップS13では、不変条件検出部15において、不変条件16を求める。不変条件16を用いることで、設計仕様14から抽出できなかった条件や、設計仕様14から見いだすことのできない暗黙条件を加味することが可能となり、検証の信頼性を高めることができる。ここで、不変条件16は、図8のフローチャートの手順で取得できる。まず、従来通りの動的検証を行う(S41)。この処理は、上述した通り、S16、S21と同一の動的検証であって構わない。この動的検証の間に、ロガー10から、トレース情報12を取得する(S42)。そして、取得したトレース情報12に基づき、不変条件16を抽出する(S43)。
図5のステップS14では、未到達状態生成器8により、未到達条件7と制約条件9と不変条件16を満たすように、SW状態5とスタブ状態6を生成する。
図5のステップS15では、生成したSW状態5とスタブ状態6を対象ソフトウエア1およびスタブ4に反映させる。SW状態5とスタブ状態6とは各々変数値の集合であるため、SW状態5とスタブ状態6を反映させるためには、全ての変数に値を代入すればよい。各変数に値を代入するルーチンを用いて変数への値の代入を行ってもよいし、各変数が割り当てられたメモリアドレスのマップを利用し、直接メモリに値を書き込んでもよい。
図5のステップS16では、再度、従来の動的検証を行う。ステップS15の処理により、未到達なSW状態5、未到達なスタブ状態6から、対象ソフトウエア1の動作が開始されるため、テストカバレッジを確実かつ効率的に拡大することができる。
図5〜図8のフローチャートに示した各フローの処理を実行する命令コードを記述した検証プログラムを通常のプログラミング技術により作成し、作成した検証プログラムをCPU等のコンピュータに実行させることにより各フローの処理が実現されてもよい。またこの検証プログラムは、当該コンピュータによって読み取り可能な記録媒体に記憶され、コンピュータによって読み出され、実行されてもよい。
以上のように本発明の実施の形態によれば、対象ソフトウエア1およびスタブ4の動的検証中に、未到達のSW状態および未到達のスタブ状態を取得し、取得したSW状態およびスタブ状態から動的検証を行うようにしたことにより、テストカバレッジを効率的に拡大することができ、ソフトウエアの開発コスト・時間を削減することができる。
1:対象ソフトウエア(プログラム)
2:ドライバ
3:ドライバ指令
4:スタブ(プログラム)
5:SW状態(プログラム状態)
6:スタブ状態(プログラム状態)
7:未到達条件
8:未到達状態生成器(状態生成手段、状態設定手段)
9:制約条件
10:ロガー(変数監視手段、状態取得手段)
11:カバレッジ情報
12:トレース情報
13:未到達状態生成器(状態取得手段)
14:設計仕様
15:不変条件検出部(条件生成手段)
16:不変条件
17:制約条件取得部(制約条件保持手段)
2:ドライバ
3:ドライバ指令
4:スタブ(プログラム)
5:SW状態(プログラム状態)
6:スタブ状態(プログラム状態)
7:未到達条件
8:未到達状態生成器(状態生成手段、状態設定手段)
9:制約条件
10:ロガー(変数監視手段、状態取得手段)
11:カバレッジ情報
12:トレース情報
13:未到達状態生成器(状態取得手段)
14:設計仕様
15:不変条件検出部(条件生成手段)
16:不変条件
17:制約条件取得部(制約条件保持手段)
Claims (9)
- 検証対象となるプログラムを実行し、複数の変数を監視する変数監視手段と、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持手段と、
前記状態監視手段により監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得手段と、
前記制約条件を満たすように前記状態取得手段によりまだ取得されていない対象変数状態を生成する状態生成手段と、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定手段と、
を備えたプログラム検証装置。 - 前記制約条件は、前記変数の制約として、前記対象変数の範囲を含み、
前記状態取得手段は、前記対象変数の最小値および最大値を検出し、
前記状態生成手段は、前記対象変数の範囲から、検出された最小値および検出された最大値間の範囲を除いた残りの範囲において、前記対象変数の値からなる前記対象変数状態を生成することを特徴とする請求項1に記載のプログラム検証装置。 - 前記制約条件は、前記変数間の制約として、2つ以上の対象変数を含む演算式の範囲を含み、
前記状態取得手段は、前記演算式を計算し、前記演算式の最小値および最大値を検出し、
前記状態生成手段は、前記演算式の範囲から、検出された最小値および検出された最大値間の範囲を除いた残りの範囲において前記2つ以上の対象変数の値の組からなる対象変数状態を生成する、
ことを特徴とする請求項1に記載のプログラム検証装置。 - 前記制約条件は、前記変数の制約または前記変数間の制約として、1つ以上の対象変数を含む条件式を含み、
前記状態取得手段は、前記条件式の真偽を判定し、
前記状態生成手段は、前記条件式の真がまだ成立しておらずかつ前記条件式が偽のとき前記真に対応する前記条件式の範囲、前記条件式の偽がまだ成立しておらずかつ前記条件式が真のとき前記偽に対応する前記条件式の範囲において、前記1つ以上の対象変数の値からなる対象変数状態を生成する
ことを特徴とする請求項1に記載のプログラム検証装置。 - 前記制約条件は、前記変数の制約または前記変数間の制約として、1つ以上の対象変数を含む条件式を含み、
前記状態取得手段は、前記条件式の成否を計算し、
前記状態生成手段は、前記条件式が成立していないとき前記条件式を満足する前記1つ以上の対象変数の値からなる前記対象変数状態を生成する
ことを特徴とする請求項1に記載のプログラム検証装置。 - 前記状態監視手段により監視される前記複数の変数の値の関係に基づき、前記変数間に成立する第1の条件を生成する条件生成手段をさらに備え、
前記状態生成手段は、前記制約条件に加えて、前記第1の条件を満たすように、前記対象変数状態を生成する
ことを特徴とする請求項1に記載のプログラム検証装置。 - 前記制約条件検生成手段は、前記状態監視手段により監視される前記複数の変数の値の関係に基づき前記変数間に成立する複数の第2の条件を生成し、前記複数の第2の条件において高い頻度で現れる複数の変数を検出し、検出した変数の値の関係に基づき前記第1の条件を生成することを特徴とする請求項6に記載のプログラム検証装置。
- 検証対象となるプログラムを実行し、複数の変数を監視する変数監視ステップと、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持ステップと、
前記状態監視ステップにより監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得ステップと、
前記状態取得ステップによりまだ取得されていない対象変数状態を前記制約条件を満たすように生成する状態生成ステップと、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定ステップと、
を備えたプログラム検証方法。 - 検証対象となるプログラムを実行し、複数の変数を監視する変数監視ステップと、
各前記変数の制約および前記変数間の制約を定めた制約条件を保持する制約条件保持ステップと、
前記状態監視ステップにより監視される前記複数の変数のうち1つ以上の対象変数の値の組からなる対象変数状態を取得する状態取得ステップと、
前記制約条件を満たすように前記状態取得ステップによりまだ取得されていない対象変数状態を生成する状態生成ステップと、
生成された対象変数状態を前記検証対象となるプログラムに対して設定する状態設定ステップと、
をコンピュータに実行させるための検証プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007332152A JP2009157456A (ja) | 2007-12-25 | 2007-12-25 | プログラム検証装置、プログラム検証方法、検証プログラム |
US12/343,051 US20090172643A1 (en) | 2007-12-25 | 2008-12-23 | Program verification apparatus, program verification method, and program storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007332152A JP2009157456A (ja) | 2007-12-25 | 2007-12-25 | プログラム検証装置、プログラム検証方法、検証プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009157456A true JP2009157456A (ja) | 2009-07-16 |
Family
ID=40800276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007332152A Pending JP2009157456A (ja) | 2007-12-25 | 2007-12-25 | プログラム検証装置、プログラム検証方法、検証プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20090172643A1 (ja) |
JP (1) | JP2009157456A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011242955A (ja) * | 2010-05-18 | 2011-12-01 | Hitachi Ltd | ソフトウェア仕様の証明支援装置、及び証明支援方法 |
JP2020119513A (ja) * | 2019-01-28 | 2020-08-06 | 富士通株式会社 | 自動コンピュータプログラム検査動作のための入力の識別 |
US11106478B2 (en) | 2017-11-10 | 2021-08-31 | Mitsubishi Electric Corporation | Simulation device, simulation method, and computer readable medium |
WO2022239101A1 (ja) * | 2021-05-11 | 2022-11-17 | 三菱電機株式会社 | ソフトウェア検証装置、ソフトウェア検証方法、および検証プログラム |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5767471B2 (ja) * | 2010-12-24 | 2015-08-19 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | テストの網羅性を評価する装置及び方法 |
CN104252408B (zh) * | 2013-06-26 | 2017-04-12 | 国际商业机器公司 | 提供测试用例的方法和装置 |
CN105917315B (zh) | 2013-12-18 | 2020-05-01 | 起元技术有限责任公司 | 一种用于生成数据记录的内容的方法和计算系统 |
CN109426601B (zh) * | 2017-07-17 | 2022-05-10 | 华为技术有限公司 | 一种对程序进行无状态检测的方法和装置 |
CN115168240B (zh) * | 2022-09-08 | 2022-11-22 | 济南新语软件科技有限公司 | 一种基于变量组合时间序列功能覆盖率的测试方法和系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6944848B2 (en) * | 2001-05-03 | 2005-09-13 | International Business Machines Corporation | Technique using persistent foci for finite state machine based software test generation |
US7013460B2 (en) * | 2001-05-15 | 2006-03-14 | Hewlett-Packard Development Company, L.P. | Specifying an invariant property (range of addresses) in the annotation in source code of the computer program |
AU2002365045A1 (en) * | 2001-12-19 | 2003-07-09 | Rance Cleaveland | System and method for automated test-case generation for software |
TWI262383B (en) * | 2003-01-10 | 2006-09-21 | Univ Nat Cheng Kung | A generic software testing system and method |
US7584455B2 (en) * | 2003-10-23 | 2009-09-01 | Microsoft Corporation | Predicate-based test coverage and generation |
US20070006153A1 (en) * | 2005-05-25 | 2007-01-04 | Microsoft Corporation | Extensible testing framework |
US7853906B2 (en) * | 2006-03-22 | 2010-12-14 | Nec Laboratories America, Inc. | Accelerating high-level bounded model checking |
-
2007
- 2007-12-25 JP JP2007332152A patent/JP2009157456A/ja active Pending
-
2008
- 2008-12-23 US US12/343,051 patent/US20090172643A1/en not_active Abandoned
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011242955A (ja) * | 2010-05-18 | 2011-12-01 | Hitachi Ltd | ソフトウェア仕様の証明支援装置、及び証明支援方法 |
US11106478B2 (en) | 2017-11-10 | 2021-08-31 | Mitsubishi Electric Corporation | Simulation device, simulation method, and computer readable medium |
JP2020119513A (ja) * | 2019-01-28 | 2020-08-06 | 富士通株式会社 | 自動コンピュータプログラム検査動作のための入力の識別 |
WO2022239101A1 (ja) * | 2021-05-11 | 2022-11-17 | 三菱電機株式会社 | ソフトウェア検証装置、ソフトウェア検証方法、および検証プログラム |
Also Published As
Publication number | Publication date |
---|---|
US20090172643A1 (en) | 2009-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009157456A (ja) | プログラム検証装置、プログラム検証方法、検証プログラム | |
Shahbazi et al. | Centroidal voronoi tessellations-a new approach to random testing | |
JP6217212B2 (ja) | テストプログラム、テスト方法及びテスト装置 | |
JP5403362B2 (ja) | パターン検査システム、パターン検査装置、方法およびパターン検査用プログラム | |
US7890808B2 (en) | Testing software applications based on multiple data sources | |
JP4414373B2 (ja) | プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法 | |
US20070192754A1 (en) | Method for treating design errors of a layout of an integrated circuit | |
US9558055B2 (en) | System level memory leak detection | |
US20090319829A1 (en) | Pattern extraction method and apparatus | |
JP6337973B2 (ja) | 追学習装置、追学習方法、および、追学習プログラム | |
CN108694320B (zh) | 一种多安全环境下敏感应用动态度量的方法及系统 | |
Jiang et al. | Cost curve evaluation of fault prediction models | |
KR102013582B1 (ko) | 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법 | |
JP2017032488A (ja) | 情報処理装置、診断方法、およびプログラム | |
CN105468508A (zh) | 代码检测方法及装置 | |
JP4523659B2 (ja) | 故障解析装置 | |
CN108874656A (zh) | 代码测试方法、装置、可读存储介质及计算机设备 | |
JP2007207120A (ja) | システム検証装置及びその検証方法 | |
CN111625330A (zh) | 跨线程的任务处理方法、装置、服务器及存储介质 | |
KR100363335B1 (ko) | 정성물리를 이용하는 머신 고장 분리방법 | |
JP5205888B2 (ja) | 負荷試験プログラム、負荷試験方法および当該負荷試験プログラムを実行する情報処理装置 | |
JP2018014000A (ja) | テスト支援プログラム、テスト支援装置、及びテスト支援方法 | |
JP2013077124A (ja) | ソフトウェアテストケース生成装置 | |
CN104424060B (zh) | 一种用于确定故障的方法和装置 | |
Pavlitskaya et al. | Is neuron coverage needed to make person detection more robust? |