(57)【特許請求の範囲】
【請求項１】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得部と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析部と、
前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成部と
を備え、
前記ログ解析部は、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々に、前記変数属性を表す変数属性タグをタグ付けした関数呼び出しテーブルを生成し、
前記プログラム生成部は、
前記関数呼び出しテーブルを用いて、前記再現プログラムを生成する試験装置。
【請求項２】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得部と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析部と、
前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成部と
を備え、
前記ログ解析部は、
前記トレースログを統計的に解析することにより、前記変数属性として、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の種別を表す変数種別を推定する試験装置。
【請求項３】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得部と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析部と、
前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成部と
を備え、
前記ログ解析部は、
前記トレースログを統計的に解析することにより、前記変数属性として、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々が流用される流用箇所を推定する試験装置。
【請求項４】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得部と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析部と、
前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成部と
を備え、
前記ログ取得部は、
前記トレースログに含まれる複数のトレース結果を、前記複数のトレース結果の各々に含まれる関数呼び出しの順序に基づいて類似トレースログとして分類し、
前記ログ解析部は、
前記類似トレースログごとに、前記変数属性を推定し、
前記プログラム生成部は、
前記類似トレースログごとに、前記再現プログラムを生成する試験装置。
【請求項５】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得部と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析部と、
前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成部と
を備え、
前記ログ取得部は、
前記アプリケーションプログラムを実行する間隔を表す実行規定間隔で、前記アプリケーションプログラムを複数回繰り返し実行する試験装置。
【請求項６】
前記試験装置は、
前記再現プログラムを実行し、前記一連の関数呼び出し処理により呼び出された関数の引数と返り値との各々を再現結果として取得し、前記再現結果の属性が期待値を満たしているかを判定する結果判定部を備えた請求項１から請求項５のいずれか１項に記載の試験装置。
【請求項７】
前記ログ取得部は、
前記アプリケーションプログラムを実行する毎に、前記ソフトウェアプラットフォームを初期化する請求項１から請求項６のいずれか１項に記載の試験装置。
【請求項８】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験方法において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得し、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定し、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成する試験方法であって、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々に、前記変数属性を表す変数属性タグをタグ付けした関数呼び出しテーブルを生成し、
前記関数呼び出しテーブルを用いて、前記再現プログラムを生成する試験方法。
【請求項９】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験プログラムにおいて、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得処理と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析処理と、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成処理と
をコンピュータである試験装置に実行させる試験プログラムであって、
前記ログ解析処理は、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々に、前記変数属性を表す変数属性タグをタグ付けした関数呼び出しテーブルを生成し、
前記プログラム生成処理は、
前記関数呼び出しテーブルを用いて、前記再現プログラムを生成する試験プログラム。
【請求項１０】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験方法において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得し、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定し、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成する試験方法であって、
前記トレースログを統計的に解析することにより、前記変数属性として、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の種別を表す変数種別を推定する試験方法。
【請求項１１】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験プログラムにおいて、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得処理と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析処理と、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成処理と
をコンピュータである試験装置に実行させる試験プログラムであって、
前記ログ解析処理は、
前記トレースログを統計的に解析することにより、前記変数属性として、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の種別を表す変数種別を推定する試験プログラム。
【請求項１２】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験方法において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得し、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定し、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成する試験方法であって、
前記トレースログを統計的に解析することにより、前記変数属性として、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々が流用される流用箇所を推定する試験方法。
【請求項１３】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験プログラムにおいて、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得処理と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析処理と、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成処理と
をコンピュータである試験装置に実行させる試験プログラムであって、
前記ログ解析処理は、
前記トレースログを統計的に解析することにより、前記変数属性として、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々が流用される流用箇所を推定する試験プログラム。
【請求項１４】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験方法において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得し、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定し、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成する試験方法であって、
前記トレースログに含まれる複数のトレース結果を、前記複数のトレース結果の各々に含まれる関数呼び出しの順序に基づいて類似トレースログとして分類し、
前記類似トレースログごとに、前記変数属性を推定し、
前記類似トレースログごとに、前記再現プログラムを生成する試験方法。
【請求項１５】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験プログラムにおいて、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得処理と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析処理と、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成処理と
をコンピュータである試験装置に実行させる試験プログラムであって、
前記ログ取得処理は、
前記トレースログに含まれる複数のトレース結果を、前記複数のトレース結果の各々に含まれる関数呼び出しの順序に基づいて類似トレースログとして分類し、
前記ログ解析処理は、
前記類似トレースログごとに、前記変数属性を推定し、
前記プログラム生成処理は、
前記類似トレースログごとに、前記再現プログラムを生成する試験プログラム。
【請求項１６】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験方法において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得し、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定し、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成する試験方法であって、
前記アプリケーションプログラムを実行する間隔を表す実行規定間隔で、前記アプリケーションプログラムを複数回繰り返し実行する試験方法。
【請求項１７】
ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置の試験プログラムにおいて、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得処理と、
前記トレースログを統計的に解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析処理と、
前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成処理と
をコンピュータである試験装置に実行させる試験プログラムであって、
前記ログ取得処理は、
前記アプリケーションプログラムを実行する間隔を表す実行規定間隔で、前記アプリケーションプログラムを複数回繰り返し実行する試験プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、試験装置、試験方法および試験プログラムに関する。
【背景技術】
【０００２】
従来のソフトウェアプラットフォームは、アプリケーションプログラムに提供するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）の単体テストあるいはシステムテストによって品質が保証されていた。ソフトウェアプラットフォームの具体例は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）あるいはライブラリである。これらのソフトウェアプラットフォームは、アプリケーションプログラムからの呼び出しを想定したテストケースを基にテストされる。【０００３】
特許文献１あるいは特許文献３では、プラットフォームが改修されると、改修前と改修後のアプリケーションプログラムのトレースログを比較することで、アプリケーションプログラムのデグレーション箇所の予測を容易化する技術が提案されている。
特許文献２では、テストケースをユーザから見た処理単位にまで拡大し、処理の履歴を記憶し、テストが再実行できるようにすることで、ユーザ側でのプラットフォームの不具合検証を容易にする技術が提案されている。
特許文献４では、ユーザ操作を取得し、複数回再生することでプラットフォームの回帰試験を高速に実行する技術が提案されている。
特許文献５では、障害発生時にハードウェア情報をトレースし、トレースデータをシミュレータに関連付けられたフォーマットに変換し、シミュレータで再生することで、デバッグ、検証、あるいは最適化を可能とする技術が提案されている。ハードウェア情報とは、命令デコーダ、キャッシュ、およびレジスタといった情報である。
特許文献６では、上位アプリケーションと他依存ライブラリが、デバッグ対象のライブラリの関数呼び出しを解析することで、デバッグを容易にする技術が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−３２０２３４号公報
【特許文献２】特開平１１−１１９９５６号公報
【特許文献３】国際公開第２０１２／１２７７２９号
【特許文献４】特開２０１５−１６９９７５号公報
【特許文献５】特表２０１３−５３１２９２号公報
【特許文献６】特開２００７−０８００３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来技術では、アプリケーションプログラムが、ライブラリのＡＰＩをどの順序で呼び出すかについて全て網羅することは困難である。そのため、従来技術では、複数ライブラリの組み合わせテストを行う場合、アプリケーションプログラムの実際の呼び出し順序を特定できず、試験漏れが発生する。また、マルチスレッドあるいはマルチコア環境では、ＡＰＩの呼び出し順序が実行する度に変わるため、実行順序が複雑となり、静的解析ができないことからより試験が困難となる。また、実際の呼び出し順序を想定できたとしても、アプリケーションが頻繁に更新される場合があり、試験追従のための再現試験プログラムの生成に時間がかかる。そのため、保守コストが高くなるといった課題がある。【０００６】
本発明は、アプリケーションプログラムの使用範囲に即した再現プログラムを効率的かつ高精度に生成することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る試験装置は、ソフトウェアプラットフォームを利用して一連の関数呼び出し処理を行うアプリケーションプログラムを実行し、前記ソフトウェアプラットフォームの試験を行う試験装置において、
前記アプリケーションプログラムを複数回繰り返し実行し、前記一連の関数呼び出し処理をトレースしたトレース結果であって前記一連の関数呼び出し処理により呼び出された関数の引数と返り値とを含むトレース結果を複数含むトレースログを取得するログ取得部と、
前記トレースログを解析することにより、前記一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の属性を変数属性として推定するログ解析部と、
前記変数属性を用いて、前記一連の関数呼び出し処理を再現する再現プログラムを生成するプログラム生成部とを備えた。
【発明の効果】
【０００８】
本発明に係る試験装置では、ログ取得部が、アプリケーションプログラムを複数回繰り返し実行し、一連の関数呼び出し処理をトレースしたトレース結果を複数含むトレースログを取得する。ログ解析部は、トレースログを解析することにより、一連の関数呼び出し処理により呼び出される関数の引数と返り値との各々の変数属性を推定する。プログラム生成部は、変数属性を用いて、一連の関数呼び出し処理を再現する再現プログラムを生成する。よって、本発明に係る試験装置によれば、アプリケーションプログラムの使用範囲に即した再現プログラムを効率的かつ高精度に生成することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係る試験装置のハードウェア構成図。
【図２】実施の形態１に係る試験装置の機能構成図。
【図３】実施の形態１の比較例のソフトウェア試験処理のフロー図。
【図４】実施の形態１に係るログ取得部の動作を示すフロー図。
【図５】実施の形態１に係るトレースログの例。
【図６】実施の形態１に係るログ解析部の動作を示すフロー図。
【図７】実施の形態１に係る変数属性タグの例。
【図８】実施の形態１に係る関数呼び出しテーブルの例。
【図９】実施の形態１に係るプログラム生成部の動作を示すフロー図。
【図１０】実施の形態１に係る結果判定部の動作を示すフロー図。
【図１１】実施の形態１に係る関数呼び出し試験表の例。
【図１２】実施の形態２に係る関数呼び出しテーブルの例。
【図１３】実施の形態２に係るログ解析部の動作を示すフロー図。
【図１４】実施の形態２に係るプログラム生成部の動作を示すフロー図。
【図１５】実施の形態２に係る結果判定部の動作を示すフロー図。
【図１６】実施の形態３に係るログ取得部の動作を示すフロー図。
【図１７】実施の形態３に係るログ解析部の動作を示すフロー図。
【図１８】実施の形態４に係るログ取得部の動作を示すフロー図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
【００１１】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１は、本実施の形態に係る試験装置１００のハードウェア構成を示す図である。
図２は、本実施の形態に係る試験装置１００の機能構成を示す図である。
試験装置１００は、コンピュータである。試験装置１００は、プロセッサ９１０を備えるとともに、メモリ９２１、補助記憶装置９２２、入出力インタフェース９３０、および通信装置９５０といった他のハードウェアを備える。
プロセッサ９１０は、信号線９４０を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００１２】
試験装置１００は、機能要素として、ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６を備える。
【００１３】
ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の機能は、ソフトウェアにより実現される。
【００１４】
プロセッサ９１０は、試験プログラムを実行する装置である。試験プログラムは、ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の機能を実現するプログラムである。
プロセッサ９１０は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ９１０の具体例は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１５】
メモリ９２１は、データを一時的に記憶する記憶装置である。メモリ９２１の具体例は、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、あるいはＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
補助記憶装置９２２は、データを保管する記憶装置である。補助記憶装置９２２の具体例は、ＨＤＤである。また、補助記憶装置９２２は、ＳＤ（登録商標）メモリカード、ＣＦ、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤといった可搬記録媒体であってもよい。なお、ＨＤＤは、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅの略語である。ＳＤ（登録商標）は、Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌの略語である。ＣＦは、ＣｏｍｐａｃｔＦｌａｓｈ（登録商標）の略語である。ＤＶＤは、Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋの略語である。
【００１６】
入出力インタフェース９３０は、マウス、キーボード、あるいはタッチパネルといった入力装置と接続されるポートを入力インタフェースとして備える。入力インタフェースは、具体的には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）端子である。なお、入力インタフェースは、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。
また、入出力インタフェース９３０は、ディスプレイといった出力機器のケーブルが接続されるポートを出力インタフェースとして備える。出力インタフェースは、具体的には、ＵＳＢ端子またはＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
【００１７】
通信装置９５０は、ネットワークを介して他の装置と通信する。通信装置９５０は、レシーバとトランスミッタを有する。通信装置９５０は、無線で、ＬＡＮ、インターネット、あるいは電話回線といった通信網に接続している。通信装置９５０は、具体的には、通信チップまたはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
【００１８】
試験プログラムは、プロセッサ９１０に読み込まれ、プロセッサ９１０によって実行される。メモリ９２１には、試験プログラムだけでなく、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。プロセッサ９１０は、ＯＳを実行しながら、試験プログラムを実行する。試験プログラムおよびＯＳは、補助記憶装置９２２に記憶されていてもよい。補助記憶装置９２２に記憶されている試験プログラムおよびＯＳは、メモリ９２１にロードされ、プロセッサ９１０によって実行される。なお、試験プログラムの一部または全部がＯＳに組み込まれていてもよい。
【００１９】
試験装置１００は、プロセッサ９１０を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、試験プログラムの実行を分担する。それぞれのプロセッサは、プロセッサ９１０と同じように、試験プログラムを実行する装置である。
【００２０】
試験プログラムにより利用、処理または出力されるデータ、情報、信号値および変数値は、メモリ９２１、補助記憶装置９２２、または、プロセッサ９１０内のレジスタあるいはキャッシュメモリに記憶される。
【００２１】
ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の各部の「部」を「処理」、「手順」あるいは「工程」に読み替えてもよい。
試験プログラムは、ログ取得処理、ログ解析処理、プログラム生成処理、コンパイル処理、プログラム実行処理、および結果判定処理をコンピュータに実行させる。また、試験方法は、試験装置１００が試験プログラムを実行することにより行われる方法である。
試験プログラムは、コンピュータ読取可能な記憶媒体に格納されて提供されてもよい。また、試験プログラムは、プログラムプロダクトとして提供されてもよい。
【００２２】
＊＊＊機能概要の説明＊＊＊
試験装置１００は、ソフトウェアプラットフォーム１０６を利用して一連の関数呼び出し処理を行うアプリケーションプログラム１１１を実行し、ソフトウェアプラットフォーム１０６の試験を行う。
図２に示すように、試験装置１００において、オペレーティングシステム１０８が動作しており、その上で動的ライブラリ１０９が動作している。ソフトウェアプラットフォーム１０６は、具体的には、動的ライブラリ１０９である。動的ライブラリは複数であってもよい。また、その上でアプリケーションプログラム１１１が動作している。アプリケーションプログラム１１１は、表示処理、音声処理、データベース処理、ＷＥＢアプリケーション処理、あるいは計算処理といった情報処理である。トレースプログラム１１２はアプリケーションプログラム１１１が動的ライブラリ１０９の関数呼び出しをフックし、トレースログ１１３に出力するプログラムである。トレースログ１１３は、メモリ９２１あるいは補助記憶装置９２２に出力される。
【００２３】
ログ取得部２０１は、アプリケーションプログラム１１１を実行し、また、トレースプログラム１１２を実行する。そして、ログ取得部２０１は、トレースプログラム１１２を用いて、アプリケーションプログラム１１１における動的ライブラリ１０９の関数呼び出しをトレースログ１１３に出力させる。
【００２４】
ログ解析部２０２は、トレースログ１１３を統計的に解析し、再実行できるようにトレースログ１１３の値を補正し、関数呼び出しテーブル３０１に出力する。「トレースログ１１３の値を補正する」とは、後述するように、関数の引数および返り値に変数属性タグをタグ付けする処理のことを指す。
関数呼び出しテーブル３０１において、関数の引数には、例えば、乱数、時刻、システム変数、あるいはアドレスといった変数種別のタグが記憶される。また、返り値には、例えば、他関数において流用されている流用箇所が記憶される。
【００２５】
プログラム生成部２０３は、関数呼び出しテーブル３０１を読み込み、再現プログラムソースコード３０２を生成する。
コンパイル部２０４は、再現プログラムソースコード３０２をコンパイルし、実行可能な再現プログラム３０３を生成する。
【００２６】
プログラム実行部２０５は、再現プログラム３０３を実行する。再現プログラム３０３は、動的ライブラリ１０９を呼び出し、その再現結果２６を出力する。出力先は、メモリ９２１あるいは補助記憶装置９２２である。
【００２７】
結果判定部２０６は、プログラム実行部２０５に対して再現プログラム３０３の実行を要求し、再現プログラム３０３の再現結果２６と関数呼び出しテーブル３０１を比較し、関数呼び出し試験表３０４に出力する。
関数呼び出し試験表３０４には、再現プログラム３０３において期待される出力の期待値と、判定結果とが記憶される。期待値は、関数呼び出しテーブル３０１の変数種別あるいは流用箇所に基づいて予め定められる。開発者１１０は、関数呼び出し試験表３０４を確認し、動的ライブラリ１０９が期待される動作を行ったかを判断する。
【００２８】
＊＊＊動作の説明＊＊＊
まず、図３を用いて、本実施の形態と比較するための比較例のソフトウェア試験処理の流れを説明する。
ステップＳ１０１において、再現試験プログラムが開発される。
ステップＳ１０２において、再現試験プログラムが実行される。
ステップＳ１０３において、実行の成否が判定され、実行が成功すれば、処理は終了する。
実行が失敗すると、ステップＳ１０４において、開発者により、ログ解析あるいは再現性試験が行われ、失敗箇所が特定される。また、開発者により、修正方法が検討される。
ステップＳ１０５において、プラットフォームが改修される。
【００２９】
次に、図４から図１１を用いて、本実施の形態に係る試験処理Ｓ１００の動作について説明する。
【００３０】
＜ログ取得処理＞
図４は、本実施の形態に係るログ取得部２０１の動作を示すフロー図である。
ログ取得処理において、ログ取得部２０１は、アプリケーションプログラム１１１を複数回繰り返し実行し、トレース結果１３を複数含むトレースログ１１３を取得する。トレース結果１３は、一連の関数呼び出し処理３３３をトレースした結果である。トレース結果１３は、一連の関数呼び出し処理３３３により呼び出された関数の引数と返り値とを含む。
【００３１】
ステップＳ２０１において、ログ取得部２０１は、ログ取得回数ｉを初期化する。
ステップＳ２０２において、ログ取得部２０１は、実行環境を初期化する。実行環境の初期化とは、設定ファイルあるいは共有メモリの削除といった前処理である。
【００３２】
ステップＳ２０３において、ログ取得部２０１は、トレースログ１１３を取得する対象となるアプリケーションプログラム１１１を実行する。
ステップＳ２０４において、ログ取得部２０１は、トレースプログラム１１２を実行し、ステップＳ２０３で実行したアプリケーションプログラム１１１を指定して、図５のトレースログ１１３を出力する。
【００３３】
図５は、本実施の形態に係るトレースログ１１３の一例を示す図である。
ログ取得部２０１は、トレースプログラム１１２により、アプリケーションプログラム１１１の動的ライブラリの呼び出しをフックし、実行開始時刻、関数名、引数、および返り値を出力する。ログ取得部２０１は、引数として、引数１から引数ｍａｘまで取得する。取得した数以上の引数は、“−”で表す。引数ｍａｘは、予め決まっている。また、システムコールの呼び出しといった、前述のもの以外のデータがトレースログ１１３に付随しても構わないが、動的ライブラリの呼び出しと区別できるフォーマットである必要がある。実行開始時刻は、互いに比較演算でき、絶対時刻が分かるものであれば、どの形式でも構わない。例えば、実行開始時刻は、ＵＮＩＸ（登録商標）  ｔｉｍｅといった形式でよい。引数および返り値の各々は、型名と値である。型名は、例えば、アドレス、文字列、整数、小数、ＮＵＬＬ、あるいはｖｏｉｄである。また、引数および返り値には、アプリケーション実行に関係するメモリマップを参照できるものを含めてもよい。メモリマップを参照できるものは、例えば、構造体のポインタであれば、構造体のメンバ変数名とその値、配列であれば、全配列データといったデータである。
【００３４】
ステップＳ２０５において、ログ取得部２０１は、ログ取得回数ｉを１増加する。
ステップＳ２０６において、ログ取得部２０１は、ログ取得回数ｉがｍ以上であれば終了し、ｉがｍ未満であればステップＳ２０２に戻る。ｍは予め決めておく。ｍは１以上であれば、どの値でも構わない。
【００３５】
＜ログ解析処理＞
図６は、本実施の形態に係るログ解析部２０２の動作を示すフロー図である。
ログ解析部２０２は、トレースログ１１３を解析することにより、一連の関数呼び出し処理３３３により呼び出される関数の引数と返り値との各々の属性を変数属性２１として推定する。ログ解析部２０２は、一連の関数呼び出し処理３３３により呼び出される関数の引数と返り値との各々に、変数属性２１を表す変数属性タグ２０８をタグ付けした関数呼び出しテーブル３０１を生成する。
【００３６】
ステップＳ３０１において、ログ解析部２０２は、メモリ９２１あるいは補助記憶装置９２２から、トレースログ１１３を取得する。
ステップＳ３０２において、ログ解析部２０２は、トレースログ１１３から関数シーケンスを一連の関数呼び出し処理３３３として作成する。具体的に図５のトレースログ１１３であれば、ログ解析部２０２は、Ｎｏ１からＮｏｘまでの関数シーケンス（ｆｕｎｃＡ，ｆｕｎｃＢ，ｆｕｎｃＡ，・・・，ｆｕｎｃＦ）を作成する。
【００３７】
ステップＳ３０３において、ログ解析部２０２は、トレースログ１１３を統計的に解析することにより、変数属性２１を推定する。ログ解析部２０２は、トレースログ１１３を統計的に解析することにより、変数属性２１として、一連の関数呼び出し処理３３３により呼び出される関数の引数と返り値との各々の種別を表す変数種別２１１を推定する。また、ログ解析部２０２は、トレースログ１１３を統計的に解析することにより、変数属性２１として、一連の関数呼び出し処理３３３により呼び出される関数の引数と返り値との各々が流用される流用箇所を推定する。
【００３８】
具体的には、ログ解析部２０２は、ｍ個のトレース結果１３の関数シーケンスと、それに対応する引数および返り値を、統計的に解析する。ログ解析部２０２は、同一シーケンスの関数内の、変数がｍ個全てで異なる場合は乱数であると推定する。また、ログ解析部２０２は、前後のトレースログの同一関数での実行時刻の差と類似した変数は時刻であると推定する。このように、ログ解析部２０２は、ｍ個のトレース結果１３から同一関数の変数の変化といった情報から変数属性２１を推定し、変数属性２１をそれぞれの引数と返り値にタグ付する。
【００３９】
図７は、本実施の形態に係る変数属性タグ２０８の例である。
変数属性タグ２０８は、変数および返り値のタグである。変数属性タグ２０８は、予めメモリ９２１あるいは補助記憶装置９２２に記憶されている。
ログ解析部２０２は、ｍ個の通信シーケンスを統計的に解析し、それぞれの引数および返り値の変数属性が図７のうちのいずれであるかを推定し、それぞれの引数および返り値にタグ付する。変数属性のＴｙｐｅがシステムとなるものは、システムライブラリの関数名と引数の型を予め保存しておき、関数シーケンスの関数名と一致すれば、その関数の引数と判別する。例えば、関数名がｇｅｔｐｉｄであれば返り値がＰＩＤであると判別する。システムライブラリは、オペレーティングシステムのシステムコールのラッパー関数であればどのライブラリでも構わない。例えば、システムライブラリは、標準ＣライブラリのｇｌｉｂｃあるいはＮｅｗｌｉｂといった関数である。
【００４０】
図８は、本実施の形態に係る関数呼び出しテーブル３０１の例である。
関数呼び出しテーブル３０１は、トレースログ１１３における全ての引数および返り値に、統計的に解析した変数属性２１をタグ付したテーブルである。
アドレスが構造体の場合は、ログ解析部２０２は、図８の変数属性Ｔ３０１のように、メンバ変数とその値をタグ付する。メンバ１とメンバ２は変数属性Ｔ３０２のｓｔｒｕｃｔＡの構造体のメンバを意味している。メンバ１とメンバ２には、ログ取得部２０１で取得されたデータがそのままタグ付されている。
変数種別Ｔ４０１は、Ｔｙｐｅが「固定値」の例である。変数種別Ｔ５０１は、Ｔｙｐｅが「システム」の例である。
【００４１】
ステップＳ３０４において、ログ解析部２０２は、引数および返り値が、以降の関数でも流用されているか否かを判定する。流用されていた場合は、ログ解析部２０２は、タグ付に追記する。例えば、図８に示すように、関数ｆｕｎｃＢの返り値０ｘｂｂｂｂが次の関数ｆｕｎｃＡの引数の値と一致し、それが全てのトレースログでも見られる場合には、関数ｆｕｎｃＢの返り値０ｘｂｂｂｂが流用されていると判定される。
ステップＳ３０５において、ログ解析部２０２は、ステップＳ３０４までの解析結果を関数呼び出しテーブル３０１に出力する。
【００４２】
＜プログラム生成処理＞
図９は、本実施の形態に係るプログラム生成部２０３の動作を示すフロー図である。
プログラム生成処理において、プログラム生成部２０３は、変数属性２１を用いて、一連の関数呼び出し処理３３３を再現する再現プログラム３０３を生成する。プログラム生成部２０３は、関数呼び出しテーブル３０１を用いて、再現プログラム３０３を生成する。
【００４３】
ステップＳ３１１において、プログラム生成部２０３は、関数呼び出しテーブル３０１を取得する。
ステップＳ３１２において、プログラム生成部２０３は、アプリケーションプログラム１１１とリンクされた動的ライブラリ情報を読み込む。例えば、アプリケーションプログラム１１１には動的ライブラリの関数名が含まれており、アプリケーションプログラム１１１から呼び出される関数の情報が動的ライブラリ情報としてメモリに記憶されている。
動的ライブラリ情報は、変数名と型を特定できるものであればいかなる情報でも構わない。動的ライブラリ情報は、例えば、ヘッダファイルといった情報でもよい。ヘッダファイルとは、動的ライブラリをリンクするために必要なヘッダファイルを指す。例えばＣ言語でｌｉｂｃライブラリを使う場合ソースコードの先頭に＃ｉｎｃｌｕｄｅ＜ｓｔｄｉｏ．ｈ＞を付けるが、ｓｔｄｉｏ．ｈがそのヘッダファイルとなる。そのヘッダファイルのみで変数名と型（具体的にはバイト数）が特定できない場合は、ヘッダファイルが参照しているファイルを検索するといった方法で特定する。
【００４４】
ステップＳ３１３において、プログラム生成部２０３は、ステップＳ３１２で読み込んだ動的ライブラリ情報を用いて、引数と返り値を確保するデータ構造および変数を定義する。
ステップＳ３１４において、プログラム生成部２０３は、ステップＳ３１２で定義した変数を用いて、関数呼び出し、また、それぞれの関数呼び出しのログを出力するように再現プログラムソースコード３０２を生成する。ログには、関数呼び出し時刻、関数名、引数の型、および返り値の値を出力する。ログは、関数の呼び出し順序を一意に特定できるものであれば、どのような形式でも構わない。
【００４５】
コンパイル部２０４は、再現プログラムソースコード３０２をコンパイルし、再現プログラム３０３を生成する。また、別環境で実行させる目的で、クロスコンパイルクロスコンパイルし、以降の実行を試験装置１００とは別の装置で行っても構わない。
プログラム実行部２０５は、結果判定部２０６から命令を受けて、再現プログラム３０３を実行させる。
なお、ここでは、プログラム生成部２０３が再現プログラムソースコード３０２を作成し、コンパイル部２０４が再現プログラムソースコード３０２から再現プログラム３０３を作成している。しかし、プログラム生成部２０３が再現プログラムソースコード３０２から再現プログラム３０３を作成する機能を有していてもよい。
【００４６】
＜結果判定処理＞
図１０は、本実施の形態に係る結果判定部２０６の動作を示すフロー図である。結果判定部２０６は、再現プログラム３０３の出力結果を判定する再現プログラム出力結果判定部ともいう。
結果判定部２０６は、再現プログラム３０３を実行し、一連の関数呼び出し処理３３３により呼び出された関数の引数と返り値との各々を再現結果２６として取得し、再現結果２６の属性が期待値を満たしているかを判定する。
【００４７】
ステップＳ４０１において、結果判定部２０６は、関数呼び出しテーブル３０１を取得する。
ステップＳ４０２において、結果判定部２０６は、プログラム実行部２０５に再現プログラム３０３の実行を要求する。プログラム実行部２０５は、再現プログラム３０３を実行する。
ステップＳ４０３において、結果判定部２０６は、再現プログラム３０３の出力を再現結果２６として取得する。
ステップＳ４０４において、結果判定部２０６は、再現プログラム３０３の再現結果２６と関数呼び出しテーブル３０１の同等の関数における出力結果とを比較し、関数呼び出し試験表３０４に出力する。
【００４８】
図１１は、本実施の形態に係る関数呼び出し試験表３０４の例である。
関数呼び出し試験表３０４には、トレースログ１１３の項目に、返り値の期待値と結果の項目が加えられている。返り値の期待値は、関数呼び出しテーブル３０１にタグ付された変数属性２１に基づいて求められる。具体的には、試験装置１００が、ステップＳ３０３で返り値に付与したタグを基に返り値の期待値を自動的に設定する。例えば、変数種別がＰＩＤであれば、返り値の期待値には、１以上、システムのＰＩＤのＭＡＸ値以下の値が設定される。また、変数種別がアドレスであれば、返り値の期待値には、システムの有効なアドレス範囲内といった値が設定される。結果判定部２０６は、返り値と期待値を比較し、返り値が期待値の範囲であれば結果に範囲内と設定する。結果判定部２０６は、返り値が期待値の範囲外であれば結果に範囲外と設定する。結果判定部２０６は、返り値の種別がその他であるといった特定できない場合は、結果に判断不可を設定する。また、結果判定部２０６は、引数についても、タグ付された変数属性を基に結果を判定する。
【００４９】
＊＊＊他の構成＊＊＊
本実施の形態では、ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の機能がハードウェアで実現されてもよい。
【００５０】
試験装置１００は、プロセッサ９１０に替えて、電子回路を備える。
電子回路は、ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の機能を実現する専用の電子回路である。
電子回路は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。
ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の機能は、１つの電子回路で実現されてもよいし、複数の電子回路に分散して実現されてもよい。
別の変形例として、ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の一部の機能が電子回路で実現され、残りの機能がソフトウェアで実現されてもよい。また、ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の一部またはすべての機能がファームウェアで実現されてもよい。
【００５１】
プロセッサと電子回路の各々は、プロセッシングサーキットリとも呼ばれる。つまり、試験装置１００において、ログ取得部２０１、ログ解析部２０２、プログラム生成部２０３、コンパイル部２０４、プログラム実行部２０５、および結果判定部２０６の機能は、プロセッシングサーキットリにより実現される。
【００５２】
＊＊＊本実施の形態の効果の説明＊＊＊
以上のように、本実施の形態に係る試験装置１００によれば、実行可能な再現プログラムを自動生成することにより、アプリケーションプログラムの使用範囲に即したライブラリの試験が可能となる。よって、本実施の形態に係る試験装置１００によれば、ソフトウェアプラットフォームの品質が向上する。
【００５３】
また、本実施の形態に係る試験装置１００によれば、アプリケーションプログラムの使用範囲で複数回実行したトレースログから再現プログラムを作成する。よって、本実施の形態に係る試験装置１００によれば、自動的に最適な再現プログラムが生成でき、開発者が試験の結果を見て再現プログラムをメンテナンスするといった作業が不要となる。よって、再現プログラムの保守コストを削減することができる。
【００５４】
また、本実施の形態に係る試験装置１００によれば、アプリケーションプログラムのライブラリ呼び出しのみ再現することから、アプリケーションプログラムのブラックボックステストが実現できる。よって、本実施の形態に係る試験装置１００によれば、アプリケーションプログラムの実行に必要な設定ファイルといった環境整備が不要となる。これにより、テスト実行の準備の手間が削減されテスト効率が向上する。
【００５５】
また、本実施の形態に係る試験装置１００によれば、アプリケーションプログラムがライブラリのＡＰＩを呼び出す様子を複数回トレースし、トレースした内容を統計的に解析する。よって、本実施の形態に係る試験装置１００によれば、毎実行変わるような処理、変数の種別、あるいは流用されている変数を特定することにより、再実行可能な再現プログラムを自動生成できる。よって、再現プログラムの保守コストを削減でき、アプリケーションプログラムの使用範囲に即した試験を複数回繰り返し実施可能とすることで、プラットフォームの品質を向上させることができる。
【００５６】
実施の形態２．
本実施の形態では、実施の形態１と異なる点について説明する。なお、実施の形態１と同様の構成については同一の符号を付し、その説明を省略する。
【００５７】
実施の形態１の試験装置１００は、アプリケーションプログラムのライブラリ呼び出しを複数回トレースしたログから、実行可能な再現プログラムを自動生成していた。本実施の形態の試験装置１００は、アプリケーションプログラムの処理フローがトレース毎に異なる場合に、トレースログの関数シーケンスの類似度から処理フローを分類する。そして、試験装置１００は、分類された処理フロー毎に再現プログラムを生成する。
【００５８】
＊＊＊構成の説明＊＊＊
本実施の形態では、試験装置１００のハードウェア構成および機能構成は、実施の形態１と同様である。ただし、本実施の形態では、再現プログラムソースコード３０２、再現プログラム３０３、および関数呼び出し試験表１０７が複数になる。
【００５９】
ログ取得部２０１は、トレースログ１１３に含まれる複数のトレース結果１３を、複数のトレース結果の各々に含まれる関数呼び出しの順序、すなわち処理フローに基づいて類似トレースログ１３２として分類する。ログ解析部２０２は、類似トレースログ１３２毎に、変数属性を推定する。プログラム生成部２０３は、類似トレースログ１３２ごとに、再現プログラム３０３を生成する。
【００６０】
＊＊＊動作の説明＊＊＊
図１２は、本実施の形態に係る関数呼び出しテーブル３０１ａの例である。
関数呼び出しテーブル３０１ａには、図８の関数呼び出しテーブル３０１の各トレース結果１３に、処理フローを分類する処理フローの項目が追加されている。また、１つのトレース結果１３は、１，２，・・・，ｎまでの処理フローのいずれかに分類される。ｎは１以上ｍ以下の値を取る。
【００６１】
本実施の形態に係る試験装置１００の動作は、基本的に実施の形態１と同様である。異なる点は、以下の通りである。
（１）ログ解析部２０２が、トレースログ１１３の複数のトレース結果１３を処理フロー毎に分類し、類似トレースログ１３２から成る関数呼び出しテーブル３０１ａを生成する点。
（２）プログラム生成部２０３が、関数呼び出しテーブル３０１ａの類似トレースログ１３２毎に、再現プログラムソースコード３０２を生成する点。
（３）コンパイル部２０４が、複数の再現プログラムソースコード３０２をコンパイルし、複数の再現プログラム３０３を生成する点。
（４）結果判定部２０６が、類似トレースログ１３２毎に生成された再現プログラム３０３を実行し、関数呼び出し試験表３０４を類似トレースログ１３２毎に複数出力する点。
【００６２】
図１３は、本実施の形態に係るログ解析部２０２の動作を示すフロー図である。
図１３のステップＳ３０１、ステップＳ３０２、およびステップＳ３０５は、実施の形態１の図６と同様である。
ステップＳ５０１において、ログ解析部２０２は、トレース結果１３の関数シーケンスの類似度を算出し、トレース結果１３の関数シーケンスをｎ個に分類する。複数のトレース結果１３は、類似トレースログ１３２に分類される。
ステップＳ５０２において、ログ解析部２０２は、分類した類似トレースログ１３２毎に、ステップＳ３０３と同様の処理を行う。
ステップＳ５０３において、ログ解析部２０２は、分類した類似トレースログ１３２毎に、ステップＳ３０４と同様の処理を行う。
【００６３】
図１４は、本実施の形態に係るプログラム生成部２０３の動作を示すフロー図である。
図１４のステップＳ３１１、ステップＳ３１２、およびステップＳ３１３は、実施の形態１の図９と同様である。
ステップＳ６０１において、プログラム生成部２０３は、処理フローｎを設定する。
ステップＳ６０２において、プログラム生成部２０３は、処理フローの番号を付与した再現プログラムソースコードｉを生成する。
ステップＳ６０３において、プログラム生成部２０３は、ｉを次の処理フロー番号に設定する。
ステップＳ６０４において、プログラム生成部２０３は、処理フロー番号ｉが処理フローｎ未満であれば、ステップＳ３１３に分岐し、処理フロー番号ｉが処理フローｎ以上であれば、処理を終了する。
【００６４】
図１５は、本実施の形態に係る結果判定部２０６の動作を示すフロー図である。
図１５のステップＳ４０１は、実施の形態１の図１０と同様である。
ステップＳ７０１において、結果判定部２０６は、処理フローｎを設定する。
ステップＳ７０２において、結果判定部２０６は、処理フロー番号ｉに対応した再現プログラムｉを実行し呼び出し結果を取得する。
ステップＳ７０３において、結果判定部２０６は、処理フロー番号ｉに対応した関数呼び出し試験表ｉを出力する。
ステップＳ７０４において、結果判定部２０６は、ｉを次の処理フロー番号に設定する。
ステップＳ７０５において、結果判定部２０６は、処理フロー番号ｉが処理フローｎ未満であれば、ステップＳ７０２に分岐し、処理フロー番号ｉが処理フローｎ以上であれば、処理を終了する。
【００６５】
＊＊＊本実施の形態の効果の説明＊＊＊
以上のように、本実施の形態に係る試験装置１００によれば、アプリケーションプログラムの異なる処理フロー毎にライブラリのテストを実施できる。よって、複数パターンのライブラリのテストにより、発見しづらいバグおよび脆弱性を効率的に検証でき、ソフトウェアのプラットフォームの品質が向上する。
【００６６】
実施の形態３．
本実施の形態では、実施の形態１および２と異なる点について説明する。なお、実施の形態１および２と同様の構成については同一の符号を付し、その説明を省略する。
【００６７】
実施の形態２の試験装置１００は、アプリケーションプログラムのライブラリ呼び出しを複数回トレースしたログから、実行可能な再現プログラムを自動生成していた。しかし、実施の形態２では、アプリケーションプログラムの前回トレースとの時間間隔を定めていなかった。トレースログを統計的に解析するにあたって、絶対時刻を基になんらかの処理が開始するといった時刻に依存した処理が行われる場合がある。本実施の形態では、アプリケーションプログラムの実行開始時刻の定周期性を用いることで、処理フローの分類を効果的に行う。
【００６８】
＊＊＊構成の説明＊＊＊
本実施の形態では、試験装置１００のハードウェア構成および機能構成は、実施の形態１と同様である。
ログ取得部２０１は、アプリケーションプログラムを実行する間隔を表す実行規定間隔で、アプリケーションプログラム１１１を複数回繰り返し実行する。
【００６９】
＊＊＊動作の説明＊＊＊
図１６は、本実施の形態に係るログ取得部２０１の動作を示すフロー図である。
図１６のステップＳ２０１、ステップＳ２０２、ステップＳ２０４、ステップＳ２０５、およびステップＳ２０６は、実施の形態１の図４と同様である。
【００７０】
ステップＳ８０１において、ログ取得部２０１は、実行規定間隔Ｔを設定する。実行規定間隔Ｔは０以上であれば、いかなる値でも構わない。
ステップＳ８０２において、ログ取得部２０１は、前回実行時刻に現在時刻を設定する。
ステップＳ８０３において、ログ取得部２０１は、前回実行時刻から実行規定間隔Ｔを加算した時刻まで待機する。
ステップＳ８０４において、ログ取得部２０１は、起床した現在時刻を前回実行時刻に保存し、アプリケーションプログラム１１１を実行する。
以上により、ログ取得部２０１は、ステップＳ８０１で設定した実行規定間隔Ｔでの、アプリケーションプログラム１１１の実行が可能となる。
【００７１】
図１７は、本実施の形態に係るログ解析部２０２の動作を示すフロー図である。
図１７のステップＳ３０１、ステップＳ３０２、ステップＳ５０２、ステップＳ５０３、およびステップＳ３０５は、実施の形態２の図１３と同様である。
【００７２】
ステップＳ５１１において、ログ解析部２０２は、実行規定間隔Ｔを考慮し処理フローを分類する。具体的には、ログ解析部２０２は、関数シーケンスでは類似しているが、実行規定間隔Ｔと相違した関数実行時刻であれば、異なる処理フローと判定し、別シーケンスとして解釈するといった処理を行う。
【００７３】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係る試験装置１００によれば、処理フローの分類精度を向上させることができ、再現プログラムの実行可能性を高めることができる。
【００７４】
実施の形態４．
本実施の形態では、実施の形態１から３と異なる点について説明する。なお、実施の形態１から３と同様の構成については同一の符号を付し、その説明を省略する。
【００７５】
実施の形態１の試験装置は、アプリケーションプログラムのライブラリ呼び出しを複数回トレースしたログから、実行可能な再現プログラムを自動生成していた。アプリケーションプログラムの実行により、プラットフォームの状態が変わる可能性があるため、トレースの環境条件が異なる場合がある。そこで、本実施の形態の試験装置１００は、トレース毎にプラットフォームを再起動させることで、環境条件を同一にし、トレースログの解析を容易にする。
【００７６】
＊＊＊構成の説明＊＊＊
本実施の形態では、試験装置１００のハードウェア構成および機能構成は、実施の形態１と同様である。
ログ取得部２０１は、アプリケーションプログラム１１１を実行する毎に、ソフトウェアプラットフォームを初期化する。
【００７７】
図１８は、本実施の形態に係るログ取得部２０１の動作を示すフロー図である。
図１８のステップＳ２０２、ステップＳ２０３、ステップＳ２０４、ステップＳ２０５、およびステップＳ２０６は、実施の形態１の図４と同様である。
【００７８】
ステップＳ９０１において、ログ取得部２０１は、再起動回数を初期化する。
ステップＳ９０２において、ログ取得部２０１は、再起動回数がトレースログ取得回数よりも少なければ、再起動する。ログ取得部２０１は、再起動をオペレーティングシステム１０８に指示する。
再起動回数がトレースログ取得回数以上になったら、ログ取得部２０１は、終了する。これら実行状態の管理は、再起動によって保持される方法であれば、いかなる方法でもよい。
【００７９】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係る試験装置によれば、アプリケーションプログラムの動作環境を同一にすることが可能となり、複数のトレースログの類似性が高まり、解析精度が向上する。
【００８０】
以上の実施の形態１から４では、試験装置の各部を独立した機能ブロックとして説明した。しかし、試験装置の構成は、上述した実施の形態のような構成でなくてもよい。試験装置の機能ブロックは、上述した実施の形態で説明した機能を実現することができれば、どのような構成でもよい。
【００８１】
以上の実施の形態１から４のうち、複数の部分を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、１つの部分を実施しても構わない。その他、これらの実施の形態を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
なお、上述した実施の形態は、本質的に好ましい例示であって、本発明の範囲、本発明の適用物の範囲、および本発明の用途の範囲を制限することを意図するものではない。上述した実施の形態は、必要に応じて種々の変更が可能である。
【符号の説明】
【００８２】
１００  試験装置、１３  トレース結果、２１  変数属性、２６  再現結果、１０６  ソフトウェアプラットフォーム、１０８  オペレーティングシステム、１０９  動的ライブラリ、１１０  開発者、１１１  アプリケーションプログラム、１１２  トレースプログラム、１１３  トレースログ、１３２  類似トレースログ、２０１  ログ取得部、２０２  ログ解析部、２０３  プログラム生成部、２０４  コンパイル部、２０５  プログラム実行部、２０６  結果判定部、２０８  変数属性タグ、３０１，３０１ａ  関数呼び出しテーブル、３０２  再現プログラムソースコード、３０３  再現プログラム、３０４  関数呼び出し試験表、３３３  一連の関数呼び出し処理、９１０  プロセッサ、９２１  メモリ、９２２  補助記憶装置、９３０  入出力インタフェース、９４０  信号線、９５０  通信装置。
【図１】
0006878707.tif 000002
【図２】
0006878707.tif 000003
【図３】
0006878707.tif 000004
【図４】
0006878707.tif 000005
【図５】
0006878707.tif 000006
【図６】
0006878707.tif 000007
【図７】
0006878707.tif 000008
【図８】
0006878707.tif 000009
【図９】
0006878707.tif 000010
【図１０】
0006878707.tif 000011
【図１１】
0006878707.tif 000012
【図１２】
0006878707.tif 000013
【図１３】
0006878707.tif 000014
【図１４】
0006878707.tif 000015
【図１５】
0006878707.tif 000016
【図１６】
0006878707.tif 000017
【図１７】
0006878707.tif 000018
【図１８】
0006878707.tif 000019