(57)【要約】      （修正有）【課題】通信ログによる再現テストプログラム生成で、通信動作の特徴に応じたタイミングでソケットを生成解放することにより、再現性が低下することを防止する。【解決手段】サーバー機器とクライアント機器間の通信ログを取得し、ログに含まれる複数のＴＣＰパケットを、宛先ポート番号と送信元ポート番号が同一であって、シーケンス番号とＡＣＫ番号が対応するグループに分け、各ＴＣＰパケットが示す通信動作と、時系列順を取得し、サーバー機器とクライアント機器で実行するためのテストプログラムであって、時系列順に通信動作の実行を指示するとともに、ＴＣＰコネクトに対応する第二の通信動作と時系列順に一つ前の第一の通信動作との間に、第一のソケットの生成を行い、ＴＣＰクローズに対応する第三の通信動作と、時系列順に一つ後の第四の通信動作との間に、第一のソケットの解放を行うことを指示するテストプログラムを生成する。【選択図】図１
2010226617.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに接続されたサーバー機器とクライアント機器との間の通信ログを取得する通信ログ取得工程と、
前記通信ログに含まれる複数のＴＣＰパケットを、前記ＴＣＰパケットに含まれる宛先ポート番号と送信元ポート番号との組み合わせが同一であって、前記ＴＣＰパケットに含まれるシーケンス番号とＡＣＫ番号とが対応するグループにグループ分けするグルーピング工程と、
前記通信ログに含まれる各前記ＴＣＰパケットが示す通信動作と、前記通信動作の時系列順と、を取得する通信フロー取得工程と、
前記サーバー機器と通信するクライアント機器で実行するためのテストプログラムであって、前記時系列順に前記通信動作を実行することを指示するとともに、ＴＣＰコネクトに対応する第二の通信動作より前記時系列順に一つ前の第一の通信動作と、前記第二の通信動作との間に、当該第二の通信動作を含むグループに対応する第一のソケットの生成を行い、前記第二の通信動作を含むグループに含まれるＴＣＰクローズに対応する第三の通信動作と、当該第三の通信動作の時系列順に一つ後の第四の通信動作との間に、前記第二の通信動作および前記第三の通信動作を含むグループに対応する前記第一のソケットの解放を行うことを指示するテストプログラムを生成するテストプログラム生成工程と、
を含むテストプログラム生成方法。
【請求項２】
ネットワークに接続されたサーバー機器とクライアント機器との間の通信ログを取得する通信ログ取得工程と、
前記通信ログに含まれる複数のＵＤＰパケットを、前記ＵＤＰパケットに含まれる宛先ポート番号と送信元ポート番号との組み合わせが同一であるグループにグループ分けするグルーピング工程と、
前記通信ログに含まれる各前記ＵＤＰパケットが示す通信動作と、前記通信動作の時系列順と、を取得する通信フロー取得工程と、
前記サーバー機器と通信するクライアント機器で実行するためのテストプログラムであって、前記通信ログに含まれる前記グループの個数分のソケット生成処理と、生成された前記ソケットの解放処理との間に、前記時系列順に前記通信動作を実行することを指示したテストプログラムを生成するテストプログラム生成工程と、
を含むテストプログラム生成方法。
【請求項３】
ネットワークに接続されたサーバー機器とクライアント機器との間の通信ログを取得する通信ログ取得機能と、
前記通信ログに含まれる複数のＴＣＰパケットを、前記ＴＣＰパケットに含まれる宛先ポート番号と送信元ポート番号との組み合わせが同一であって、前記ＴＣＰパケットに含まれるシーケンス番号とＡＣＫ番号とが対応するグループにグループ分けするグルーピング機能と、
前記通信ログに含まれる各前記ＴＣＰパケットが示す通信動作と、前記通信動作の時系列順と、を取得する通信フロー取得機能と、
前記サーバー機器と通信するクライアント機器で実行するためのテストプログラムであって、前記時系列順に前記通信動作を実行することを指示するとともに、ＴＣＰコネクトに対応する第二の通信動作より前記時系列順に一つ前の第一の通信動作と、前記第二の通信動作との間に、当該第二の通信動作を含むグループに対応する第一のソケットの生成を行い、前記第二の通信動作を含むグループに含まれるＴＣＰクローズに対応する第三の通信動作と、当該第三の通信動作の時系列順に一つ後の第四の通信動作との間に、前記第二の通信動作および前記第三の通信動作を含むグループに対応する前記第一のソケットの解放を行うことを指示するテストプログラムを生成するテストプログラム生成機能と、
をコンピューターに実現させるテストプログラム生成プログラム。
【請求項４】
ネットワークに接続されたサーバー機器とクライアント機器との間の通信ログを取得する通信ログ取得機能と、
前記通信ログに含まれる複数のＵＤＰパケットを、前記ＵＤＰパケットに含まれる宛先ポート番号と送信元ポート番号との組み合わせが同一であるグループにグループ分けするグルーピング機能と、
前記通信ログに含まれる各前記ＵＤＰパケットが示す通信動作と、前記通信動作の時系列順と、を取得する通信フロー取得機能と、
前記サーバー機器と通信するクライアント機器で実行するためのテストプログラムであって、前記通信ログに含まれる前記グループの個数分のソケット生成処理と、生成された前記ソケットの解放処理との間に、前記時系列順に前記通信動作を実行することを指示したテストプログラムを生成するテストプログラム生成機能と、
をコンピューターに実現させるテストプログラム生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信ログに残された通信を自動的に再現するためのテストプログラムを生成する方法、およびそのテストプログラムを生成するプログラムに関する。
【背景技術】
【０００２】
従来、通信機能を備えたテスト対象機器に組み込まれたテスト対象プログラムを、ネットワークを介して外部から与えたテスト動作指示によって、テストする構成が知られている。特許文献１には、ＰＬＣ機器に組み込まれたシーケンスプログラムをテストするためのテスト装置において、所望のテストに必要な動作指示を当該ＰＬＣ機器に与えるために使用した一連の通信メッセージを予め記録しておき、記録しておいた一連の通信メッセージをテスト装置で再生することにより、ＰＬＣ機器に対する前述の動作指示を自動再現することが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２０９４１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ネットワーク上を行き来するパケットデータをキャプチャーし、通信ログとして出力する機能を備えたパケットキャプチャー装置が知られている。ネットワークに接続された通信機器の間でなされた通信を再現するために、パケットキャプチャー装置から取得した通信ログを元にテストプログラムを自動生成する仕組みを構築することを考える。テストプログラムを自動生成することができれば、手動で作成する場合よりも作成所要時間を短縮できる。
【０００５】
例えば、ＴＣＰ／ＩＰやＵＤＰ／ＩＰの通信動作を実行するプログラムを作成する場合、当該プログラムでは、ソケットと呼ばれるインターフェースを用いて、ＯＳの一機能としてのプロトコルスタックを扱うことが一般的である。当該プロトコルスタックが、各プロトコルに従った通信の制御を受け持つ。通信ログから自動生成しようとするテストプログラムも、ソケットを使用してプロトコルスタックを扱い通信を実行するようにする。通信を開始しようとする前にソケットを生成し、必要な通信が終わった後ソケットを解放することが、ソケットを使用して通信を行うときの基本的な手順である。ソケットの実体は、対応する通信に関連する制御情報を保持しておくためのメモリ領域である。ソケットの最大数はＯＳ等に依存するが、実質的に上限がある。
【０００６】
コネクションを確立してデータの送受信を行うことを特徴とする通信（例えばＴＣＰ／ＩＰ）では、送受信するデータサイズが大きいと、やりとりするパケット数が増えコネクションの存続期間が長くなる。そのため、あるコネクションが存続中に別のコネクションが新たに確立され、同時に複数のコネクションが存続しうる。そのため、ソケットの生成や解放のタイミング次第では、テストプログラム実行中に使用可能なソケットが枯渇していく可能性がある。そうすると、例えば新たにソケットが生成できないためにテストプログラムを最後まで実行できず、通信ログに示された通信を最後まで再現できなくなるなどの問題が発生する。また、ソケット生成や終了には多少時間を要するため、ソケットの生成と解放を頻繁に繰り返すことを指示したテストプログラムを作成すると、当該テストプログラム実行中にソケットの生成と解放に要する時間が増え、その待ち時間のために実際の通信動作がなかなか実行されないという事態が発生しうる。コネクションを確立しないため信頼性は低いが高速にデータ送受信ができることを特徴とする通信（例えばＵＤＰ／ＩＰ）を再現しようとするテストプログラムにおいて、このような事態が発生すると高速な通信動作を再現できないという問題がある。
【０００７】
本発明は、上記問題に鑑みてなされたもので、通信ログに残された通信動作を再現するテストプログラムを生成するにあたって、通信動作の特徴に応じたタイミングでソケットを生成および解放することにより、ソケットの生成および解放が原因で再現したい通信動作の再現性が低下することを防止することを目的の一つとする。
【課題を解決するための手段】
【０００８】
（１）上記目的を達成するためのテストプログラム生成方法は、ネットワークに接続されたサーバー機器とクライアント機器との間の通信ログを取得する通信ログ取得工程と、前記通信ログに含まれる複数のＴＣＰパケットを、前記ＴＣＰパケットに含まれる宛先ポート番号と送信元ポート番号との組み合わせが同一であって、前記ＴＣＰパケットに含まれるシーケンス番号とＡＣＫ番号とが対応するグループにグループ分けするグルーピング工程と、前記通信ログに含まれる各前記ＴＣＰパケットが示す通信動作と、前記通信動作の時系列順と、を取得する通信フロー取得工程と、前記サーバー機器と通信するクライアント機器で実行するためのテストプログラムであって、前記時系列順に前記通信動作を実行することを指示するとともに、ＴＣＰコネクトに対応する第二の通信動作より前記時系列順に一つ前の第一の通信動作と、前記第二の通信動作との間に、当該第二の通信動作を含むグループに対応する第一のソケットの生成を行い、前記第二の通信動作を含むグループに含まれるＴＣＰクローズに対応する第三の通信動作と、当該第三の通信動作の時系列順に一つ後の第四の通信動作との間に、前記第二の通信動作および前記第三の通信動作を含むグループに対応する前記第一のソケットの解放を行うことを指示するテストプログラムを生成するテストプログラム生成工程と、を含む。
【０００９】
本発明によると、データ送信またはデータ受信に対応する全ての通信動作の前にまとめてソケット生成とＴＣＰコネクトを実行し、データ送信またはデータ受信に対応する全ての通信動作の後にまとめてＴＣＰクローズとソケット解放を実行する場合と比較して、同時に存在するソケットの数を必要以上に増加させないテストプログラムを生成することができる。
【００１０】
ソケットは、本テストプログラムがＴＣＰ／ＩＰ（ＵＤＰ／ＩＰも含む）プログラム（プロトコルスタック）を扱う際のＡＰＩを意味している。ソケットを生成する処理の実体は、ＴＣＰ／ＩＰプログラムが管理するメモリ領域（通信動作に関連する各種の制御情報を保持するためのメモリ領域）を確保することであり、ソケットの解放は当該メモリ領域を破棄することを意味する。テストプログラムを実行するクライアント機器において同時に存在しえるソケットの最大数には実質的に上限がある。テストプログラム実行期間中に、任意のＴＣＰコネクション存続期間の前後にも当該ＴＣＰコネクションに対応しない役割を終えたソケットが存続し続けると、テストプログラム実行中に他の通信動作のために使用可能なソケットが枯渇していく。ＴＣＰコネクション存続期間とそれに対応するソケットの存続期間とを本発明のように同期させることにより、同時に存在するソケットを必要以上に増加させないことによってソケットの枯渇をまねきにくいテストプログラムを生成することができる。
【００１１】
また、通信ログに含まれるＴＣＰパケットの時系列順に、各ＴＣＰパケットが示す通信動作を実行することが指示されているので、このテストプログラムを実行するクライアント機器は、前述の通信ログが取得されたときのサーバー機器とクライアント機器との間の通信と同じ順序で同じ種類の通信動作を再現することができる。なお、ＴＣＰを使用して通信されるパケットをＴＣＰパケットと表現するものとする。
【００１２】
（２）上記目的を達成するためのテストプログラム生成方法は、ネットワークに接続されたサーバー機器とクライアント機器との間の通信ログを取得する通信ログ取得工程と、前記通信ログに含まれる複数のＵＤＰパケットを、前記ＵＤＰパケットに含まれる宛先ポート番号と送信元ポート番号との組み合わせが同一であるグループにグループ分けするグルーピング工程と、前記通信ログに含まれる各前記ＵＤＰパケットが示す通信動作と、前記通信動作の時系列順と、を取得する通信フロー取得工程と、前記サーバー機器と通信するクライアント機器で実行するためのテストプログラムであって、前記通信ログに含まれる前記グループの個数分のソケットの生成処理と、生成された前記ソケットの解放処理との間に、前記時系列順に前記通信動作を実行することを指示したテストプログラムを生成するテストプログラム生成工程と、を含む。
【００１３】
本発明によると、宛先ポート番号と送信元ポート番号との組み合わせが同一であるＵＤＰパケットを一つのグループとし、そのグループの個数分のソケットの生成および解放を実施するテストプログラムを生成することができる。したがって、同一グループの通信動作には同一のソケットを使い回すことになるので、例えばデータ送信とそれに対応するデータ受信の対ごとにソケットの生成と解放を行う場合と比較すると、ソケットの生成および解放の回数を低減したテストプログラムを生成することができる。その結果、当該テストプログラムを実行するクライアント機器において、ソケットの生成および解放が頻繁に実施されることを防ぐことができる。そのため高速にデータ送受信ができることを特徴とするＵＤＰ／ＩＰの通信動作を再現しやすくなる。
【００１４】
また、通信ログに含まれるＵＤＰパケットの時系列順に、各ＵＤＰパケットが示す通信動作を実行することが指示されているので、このテストプログラムを実行するクライアント機器は、前述の通信ログが取得されたときのサーバー機器とクライアント機器との間の通信と同じ順序で同じ通信動作を実行することができる。なお、ＵＤＰを使用して通信されるパケットをＵＤＰパケットと表現するものとする。
【００１５】
なお、以上のようなテストプログラム生成方法は、この方法をコンピューターに実現させるプログラムの発明や、この方法を実施する装置の発明としても適用可能である。また、以上のような方法を実施する装置は、単独の装置によって実現される場合もあれば、複数の装置を組み合わせることによって実現される場合もあり、各種の態様を含むものである。一部がソフトウェアであり一部がハードウェアであったりするなど、適宜、変更可能である。さらに、前述のプログラムを記録する記録媒体としても発明は成立する。むろん、その記録媒体は、磁気記録媒体であってもよいし光磁気記録媒体であってもよいし、今後開発されるいかなる記録媒体においても全く同様に考えることができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の構成を示すブロック図。
【図２】通信ログに含まれるパケット群のシーケンスの一例を示すシーケンス図。
【図３】通信ログに含まれるパケット群のシーケンスの一例を示すシーケンス図。
【図４】テストプログラム生成処理を示すフローチャート。
【図５】テストプログラム生成処理を示すフローチャート。
【図６】（６Ａ）および（６Ｂ）は、通信ログの解析結果を説明するための図。
【図７】（７Ａ）は（７Ｂ）の比較例のテストプログラムのソースコード、（７Ｂ）は、本実施形態にかかるテストプログラムのソースコードを示す図。
【図８】（８Ａ）は（８Ｂ）の比較例のテストプログラムのソースコード、（８Ｂ）は、本実施形態にかかるテストプログラムのソースコードを示す図。
【発明を実施するための形態】
【００１７】
ここでは、下記の順序に従って本発明の実施の形態について説明する。
（１）テストプログラム生成方法の概要と構成：
（２）テストプログラム生成処理：
（３）他の実施形態：
【００１８】
（１）テストプログラム生成方法の概要と構成：
図１は、本発明にかかるテストプログラム生成方法を実施する構成と、生成されたテストプログラムを実施する構成を説明するためのブロック図である。コンピューター５０，５３、プリンター５２、パケットキャプチャー装置５１は、ＬＡＮに接続されている。パケットキャプチャー装置５１は、コンピューター５０とプリンター５２との間で交わされるパケットデータを時系列順に取得し、パケットデータ群を示すバイナリデータを含む通信ログファイルを出力する。コンピューター１０は、ＲＡＭ，ＲＯＭ，ＣＰＵ等を備える制御部２０とＨＤＤ３０とを備えており、ＲＯＭまたはＨＤＤ３０に記録された様々なプログラムを制御部２０で実行することができる。本実施形態においては、テストプログラム生成プログラム２１を実行することができる。
【００１９】
テストプログラム生成プログラム２１は、パケットキャプチャー装置５１から取得した通信ログをもとに、コンピューター５０とプリンター５２との間で行われた通信を再現するためのプログラムを生成する機能を有している。従来より、キャプチャーした通信をそのまま再現することができる機器は知られているが、キャプチャー環境と再現環境とが同じでなければ機能しなかった。キャプチャー環境と異なる環境で再現するためには、環境固有のパラメーターを再現環境に適したものに変更する必要があると考えられる。
【００２０】
テストプログラム生成プログラム２１によって生成されたテストプログラム３０ａは、コンピューター５０を含めた様々なコンピューターで実行させることによって、通信ログを取得した際のコンピューター５０とプリンター５２間の通信を、様々なコンピューター（例えばコンピューター５３）とプリンター５２の間で再現させることを目的としたプログラムである。
【００２１】
テストプログラム生成プログラム２１は、上述のテストプログラムを生成する機能を実現するために、通信ログ取得部２１ａと、グルーピング部２１ｂと、通信フロー取得部２１ｃと、テストプログラム生成部２１ｄと、を備えている。通信ログ取得部２１ａは、二つの通信機器間の通信ログを取得する機能を制御部２０に実現させるモジュールである。例えば、パケットキャプチャー装置５１が生成したバイナリファイルとしての通信ログを取得する。グルーピング部２１ｂは、通信ログに含まれるパケットデータを、使用するプロトコル別（ＴＣＰまたはＵＤＰ）や、あるいは後述する分類基準別にグルーピングする機能を制御部２０に実現させるモジュールである。通信フロー取得部２１ｃは、通信ログに含まれるパケットの時系列順や、各パケットが示す通信動作を通信ログから取得する機能を制御部２０に実現させるモジュールである。テストプログラム生成部２１ｄは、通信ログを再現するためのテストプログラム３０ａを生成する機能を制御部２０に実現させるモジュールである。
【００２２】
テストプログラム３０ａを実行するコンピューター（例えばコンピューター５３）ＲＯＭ，ＲＡＭ，ＣＰＵ等を含む制御部２００を備えている。コンピューター５３の制御部２００は、テストプログラム３０ａの他に、ＴＣＰ／ＩＰプログラム２２０やＬＡＮアダプタードライバープログラム２３０を実行可能である。ＴＣＰ／ＩＰプログラム２２０は、ＴＣＰやＵＤＰやＩＰなどのプロトコルスタックを含んでおり、各プロトコルに準拠した通信の実行を担当する。ＬＡＮアダプタードライバープログラム２３０は、コンピューター５３に備えられているＬＡＮアダプター４００を制御するためのドライバープログラムである。
【００２３】
テストプログラム３０ａは、ＴＣＰ／ＩＰプログラム２２０を使用して、コンピューター５３（クライアント機器）とプリンター５２（サーバー機器）との通信を実行するための指示（処理命令）を含んでいる。コンピューター５３でテストプログラム３０ａを実行している間、プリンター５２とコンピューター５３の間で、テストプログラム３０ａの指示に対応する通信が行われる。
【００２４】
（２）テストプログラム生成処理：
まず、図２は、コンピューター５３とプリンター５２との間で交わされたＴＣＰ／ＩＰ通信の一例を説明するためのシーケンス図である。図３は、コンピューター５３とプリンター５２との間で交わされたＵＤＰ／ＩＰ通信の一例を説明するためのシーケンス図である。シーケンス図の上から下に向かう方向は、過去からの時間経過を表している。一つの矢印が一つのパケットを表しており、矢印の根本側がそのパケットの送信元で矢印の先側がそのパケットの宛先を意味している。図３のシーケンス図は、データ送信パケット（リクエスト）とそれに対するデータ受信パケット（レスポンス）の対を一組として合計５組の対を表している。
【００２５】
ＴＣＰ／ＩＰ通信では、ＳＹＮに相当するパケットを送信してからＦＩＮに相当するパケットを送信するまでＴＣＰコネクションが確立した状態となる。図２のシーケンス図には、コネクション１〜３の３つのＴＣＰコネクションが含まれている。コネクション３はコネクション２が存続している途中に開始しており、コネクション２はコネクション３の存続期間中に終了している。ＵＤＰ／ＩＰ通信は、コネクションレスの通信である。図３の例では、パケットＰ１６、Ｐ１７、Ｐ２４、Ｐ２５はパケットに含まれるポート番号の組み合わせが同一であり、パケットＰ１８〜Ｐ２３もポート番号の組み合わせが同一であることを表している。
【００２６】
なお、ＴＣＰコネクションの確立時のフローは、実際は、３ウェイ・ハンドシェイクとなるが、図２では説明簡略化のためＳＹＮに相当するパケット以外の残りの２つのパケット（ＡＣＫ／ＳＹＮ、ＡＣＫ）の記載を省略している。また、ＴＣＰコネクションの終了時のフローは、実際は、双方でＦＩＮとＡＣＫを交換し合うフローとなるが、図２では簡略化のため、プリンター５２およびコンピューター５３が送信するＦＩＮに相当するパケット以外の残りの２つのパケット（ＡＣＫ、ＡＣＫ）の記載を省略している。
【００２７】
シーケンス図として可視化すると図２のように表されるバイナリデータとしての通信ログファイルや、シーケンス図として可視化すると図３のように表されるバイナリデータとしての通信ログファイルを、コンピューター１０は、パケットキャプチャー装置５１から取得することができる。図４および図５はテストプログラム生成処理を示すフローチャートである。制御部２０は、通信ログファイルを取得し（ステップＳ１００）、通信ログに含まれるパケットのグループ分けと、通信動作フロー（パケットの時系列順とパケットが示す通信動作）の取得のために、通信ログファイルを解析する（ステップＳ１０１〜Ｓ１８０）。
【００２８】
まず、制御部２０は、時系列順に１パケット分のデータを取り出し（ステップＳ１０１）、そのパケットがＴＣＰを使用して通信されたパケットであるか否かを判定する（ステップＳ１０５）。具体的には、パケットに含まれるＩＰヘッダーのプロトコル番号フィールドを参照して判定する。ＴＣＰを使用して通信されたパケットである場合、制御部２０はそのパケットがＳＹＮであるか否かを判定する（ステップＳ１１０）。具体的にはＴＣＰヘッダーのコントロールビットフィールドのＳＹＮビットが１ならＳＹＮと判定する。すなわちこれは、３ウェイ・ハンドシェイクの最初の通信動作を示すパケットであるかどうかを判定していることを意味する。
【００２９】
ステップＳ１１０でこのパケットがＳＹＮであると判定された場合、制御部２０は、グループ識別子を新規作成し、当該グループ識別子と、このパケットに含まれるシーケンス番号・ＡＣＫ番号・送信元および宛先ポート番号とを関連づけて記憶する（ステップＳ１２０）。グループ識別子は、通信ログに含まれるパケット群をコネクション別にグループ分けするための識別子である。送信元ポート番号・宛先ポート番号・シーケンス番号・ＡＣＫ番号はＴＣＰヘッダーを参照して取得する。続いて制御部２０は、このパケットは、ＴＣＰコネクション確立のための通信動作であることを記憶する（ステップＳ１２５）。また、この通信動作の時系列順も合わせて記憶する。
【００３０】
ステップＳ１１０にてこのパケットがＳＹＮでないと判定された場合、制御部２０は、このパケットに、アプリケーションから受け取ったデータあるいはアプリケーションに届けるデータが含まれているか否かを判定する（ステップＳ１３０）。すなわちこのパケットが、ＴＣＰコネクションが確立した後のデータ送受信に対応する通信動作であるか否かを判定する。具体的には例えば、ＩＰメッセージ部の全長からヘッダー部のサイズを引いた残りのサイズからデータの有無を判定する。次に制御部２０は、このパケットのシーケンス番号・ＡＣＫ番号・送信元および宛先ポート番号に基づいて、このパケットが属するグループを決定し、そのグループに対応付けて記憶する（ステップＳ１３５）とともに、このパケットがデータ送信またはデータ受信を示す通信動作であることとこの通信動作の時系列順を記憶する（ステップＳ１４０）。
【００３１】
宛先ポート番号と送信元ポート番号とは、そのパケットを送り出す側に応じて入れ替わるが、同一コネクションの通信であればその組み合わせは同じであるため、宛先ポート番号と送信元ポート番号の組み合わせを同一グループであるかどうかの判断基準の一つとする。シーケンス番号とＡＣＫ番号は二者間で送受信するデータについて、確実に送受信できたことを確認するためにパケット内に含まれている値である。送信したいデータ全体の何バイト目からのデータがそのパケットに含まれているかを示すのがシーケンス番号で、ＡＣＫ番号はシーケンス番号に受信できたデータのバイト数を加算したものである。シーケンス番号と、パケットに含まれる送受信データのサイズと、ＡＣＫ番号とから、このパケットがどのコネクションのパケットの続きのパケットであるかを判断することができるため、グループ分けの判断基準の一つとする。
【００３２】
ステップＳ１３０にてこのパケットに前述のデータが含まれないと判定された場合、制御部２０は、このパケットがＦＩＮであるか否かを判定する（ステップＳ１４５）。具体的には、ＴＣＰヘッダーのコントロールビットフィールドのＦＩＮビットが１ならＦＩＮと判定する。このパケットがＦＩＮである場合、制御部２０は、このパケットのシーケンス番号・ＡＣＫ番号・送信元および宛先ポート番号に基づいて、このパケットが属するグループを決定し、そのグループに対応付けて記憶する（ステップＳ１５０）とともに、このパケットがコネクション終了を示す通信動作であることとこの通信動作の時系列順を記憶する（ステップＳ１５５）。
【００３３】
ステップＳ１０５にてこのパケットはＴＣＰを使用して通信されたパケットでないと判定された場合、制御部２０は、このパケットはＵＤＰを使用して通信されたパケットであるか否かを判定する（図５、ステップＳ１６０）。具体的には、パケットに含まれるＩＰヘッダーのプロトコル番号フィールドがＵＤＰを示す番号であればＵＤＰを使用したパケットであると判定する。このパケットがＵＤＰを使用したパケットである場合、制御部２０は、宛先ポート番号と送信元ポート番号の組み合わせが、通信ログファイルのパケットを時系列順に解析していく中で初めて出てきた組み合わせであるかどうかを判定する（ステップＳ１６５）。宛先ポート番号と送信元ポート番号はパケットに含まれるＵＤＰヘッダーから取得できる。ポート番号の組み合わせが初めて出て来た組み合わせである場合、制御部２０は、グループ識別子を新規作成し、宛先ポート番号と送信元ポート番号の組み合わせと対応付けて記憶する（ステップＳ１７０）。また、このパケットが示す通信動作を特定し（データ送信または受信）、このパケットの時系列順も記憶しておく。
【００３４】
ステップＳ１６５でポート番号の組み合わせが初めて出てきた組み合わせでないと判定された場合は、制御部２０は、このパケットのポート番号の組み合わせと同じ組み合わせの通信動作が含まれるグループに、このパケットが示す通信動作（データ送信または受信）を関連づけて記憶する（ステップＳ１７５）。制御部２０は、通信ログファイルに含まれる最後のパケットまで解析が完了したか否かを判定し（図４、ステップＳ１８０）、完了していない場合は、ステップＳ１０１に戻って時系列順に次のパケットの解析を始める。通信ログファイルに含まれる全てのパケットの解析が完了したとき、テストプログラム生成処理は内部的に、通信ログに含まれる各パケットが属するグループと、そのパケットが示す通信動作と、そのパケットの時系列順序との対応付けが完了した状態となる。
【００３５】
図６Ａは、図２にシーケンス図で示されているパケットＰ１〜Ｐ１５の通信ログファイルを解析したときの対応付けの結果を示している。時系列順と通信動作とグループとが対応付けられている。通信動作は、そのパケットがどのような意味を持つものであるかを示す「ふるまい」と「その他」の情報を含んでいる。「その他」の情報とは、その通信動作を再現するのに必要なパラメーターなどを意味しており、例えば、宛先ポート番号や、パケットサイズや、送受信するデータそのものなどを含んでいる。テストプログラムを実行するコンピューターに依存するパラメーター（例えば送信元ＩＰアドレスや送信元ポート番号、シーケンス番号、ＡＣＫ番号など）やその他の環境に依存するパラメーター（例えば宛先ＩＰアドレス）は、必ずしも含まれていなくてよい。図２のパケットＰ１〜Ｐ１５は、図６Ａの時系列順の１〜１５と対応している。図６Ｂは図３にシーケンス図として示されているパケットＰ１６〜Ｐ２５の通信ログファイルを解析したときの対応付け結果を表している。図３のパケットＰ１６〜Ｐ２５は、図６Ｂの時系列順１〜１０と対応している。
【００３６】
フローチャートの説明に戻る。続いて制御部２０は、時系列順と通信動作とグループとが対応付けが示された中間ファイルを生成する（図４、ステップＳ１８５）。具体的には、例えば図６Ａや図６Ｂで示したような、パケットが属するグループとパケットが示す通信動作とパケットの時系列順の対応付けを表す情報を含む中間ファイルを生成する。次に制御部２０は、中間ファイルの内容に基づいて、テストプログラムのソースコードを記述したファイルを生成する（ステップＳ１９０）。
【００３７】
例えば、図６Ａの対応付けを表す情報を元にして生成されるテストプログラムのソースコードを説明する。テストプログラム３０ａは、図１を用いて説明したように、ＴＣＰ／ＩＰプログラム２２０をソケットと呼ばれるインターフェースを用いて扱うことによって、プリンター５２と通信するように設計されたプログラムである。であるので、通信を行う前にソケットを生成しておく必要がある。ソケットは、ＴＣＰコネクションと一対一に対応するものであり、ＴＣＰコネクションを確立する前にソケットを生成し、ＴＣＰコネクションが終了した後にソケットを解放する。ソケットを生成することによって、生成されたソケットを識別するためのディスクリプタを取得できるので、そのディスクリプタを用いて、各コネクションに対応する通信動作の処理を時系列順に記述していくことが基本的な方針である。
【００３８】
ここで注意すべき点が、ソケットを生成・解放するタイミングである。図７Ａのように、先にソケット生成とＴＣＰコネクト（ＴＣＰコネクションの確立）をまとめて行い、データ送受信をした後、最後にまとめてＴＣＰクローズ（ＴＣＰコネクションの終了）とソケット解放を行う方法が考えられる。なお、図７Ａ・７Ｂの「ＴＣＰソケット生成」処理の中では、ソケット生成を終えた後にＴＣＰコネクト処理を実行することが記述されており、「クローズ」処理の中では、ＴＣＰコネクトを終了する処理の後にソケットを解放することが記述されている。
【００３９】
しかし、ソケットの数には上限があり、図７Ａのような手順が指示されたテストプログラムを実行すると、テストプログラム実行中にソケットが枯渇していく可能性がある。ソケットに対応するコネクションにおける通信が始まる前や、終わった後にもソケットが存在するからである。ゆえに、ソケットを使用したデータ送受信の直前までそのコネクションに対応するソケットは生成しない方が望ましいし、データ送受信で使用し終わったソケットはその都度解放して行くことが望ましい。であるので、本実施形態では、ＴＣＰコネクトに対応する第二の通信動作より時系列順に一つ前の第一の通信動作と、第二の通信動作との間に、当該第二の通信動作を含むグループに対応する第一のソケットの生成を行い、第二の通信動作を含むグループに含まれるＴＣＰクローズに対応する第三の通信動作と、当該第三の通信動作の時系列順に一つ後の第四の通信動作との間に、第二の通信動作および第三の通信動作を含むグループに対応する第一のソケットの解放を行うようにする。
【００４０】
図６Ａを用いて具体的に説明すると、時系列順に５番目の通信動作であるＴＣＰコネクトより時系列順に一つ前の４番目の通信動作であるＴＣＰクローズの処理の後であって、５番目のＴＣＰコネクトの処理の前に、５番目の通信動作が属するグループＴＣＰ２に対応するソケットの生成処理を行うように記述する。また、グループＴＣＰ２に属するＴＣＰクローズ（時系列順で１２番目のＴＣＰクローズ）の処理の後であって、時系列順に次の１３番目の通信動作に対応するＴＣＰデータ受信処理の前に、グループＴＣＰ２に対応するソケットの解放処理を行うように記述する。なお、データ受信処理とは、受信したデータを取り出す処理である。
【００４１】
以上をふまえて生成したソースコードは図７Ｂのようになる。図７Ｂのテストプログラムは、図７Ａで説明した、データ送信またはデータ受信に対応する全ての通信動作の前にまとめてソケット生成を行い、データ送信またはデータ受信に対応する全ての通信動作の後にまとめてソケット解放を行う場合と比較して、同時に存在するソケットの数を必要以上に増加させずに済む。そのため、テストプログラム実行中にソケット枯渇をまねきにくくすることができる。また、通信ログに含まれるパケットの時系列順に、各パケットが示す通信動作を実行することが記述されているので、このテストプログラムを実行するコンピューターは、通信ログが取得されたときのプリンター５２とコンピューター５０との間の通信と同じ順序で同じ通信動作を再現することができる。
【００４２】
次に、図６Ｂの対応付けを表す情報を元にして生成されるテストプログラムのソースコードについて説明する。ＵＤＰ通信の場合も実際の通信動作を実行することを指示する前にソケットを生成し、所望の通信動作が終了した後のソケットを生成する必要がある。ソケットを生成することによって、生成されたソケットを識別するためのディスクリプタを用いて、各通信動作を実行する処理を時系列順に記述していくことが基本的な方針である。
【００４３】
ＵＤＰ通信には、コネクションを確立するという手続が必要ないので、データ送信およびそれに対応するデータ受信の組み合わせは、他の組み合わせとは連続性などの関連がない独立した通信である。であるので、図８Ａのように、その組み合わせごとにソケット生成および解放を実行するように記述するという方法がまず考えられる。なお、図８Ａ・８Ｂの「ソケット生成」は文字通りソケットの生成処理を表し、「クローズ」は、ソケットの解放処理を意味している。
【００４４】
しかし、図８Ａのような手順でテストプログラムを実行すると、テストプログラム実行中に頻繁にソケットの生成と解放が実行されることになる。ソケットの生成と解放には多少時間を要するため、ソケットの生成と解放の回数が多いとその部分、その待ち時間のために実際の通信動作がなかなか実行されないという事態が発生しうる。そこで、本実施形態では、パケット内部に含まれる、送信元ポート番号と宛先ポート番号の組み合わせに注目し、その組み合わせが同一である通信動作は、同じソケットを使い回して通信するようにソースコードを記述する。
【００４５】
本実施形態では、図６Ｂを用いて説明したように対応付けられた情報から、必要なソケット数をカウントし（必要なソケット数はグループの個数に等しい）、必要な分のソケット生成処理と、生成されたソケットの解放処理との間に、時系列順に通信動作を実行することを指示したテストプログラムを生成する。
【００４６】
以上をふまえて生成したソースコードは図８Ｂのようになる。図８Ｂのテストプログラムは、図８Ａで説明したようなデータ送受信の組み合わせごとにソケットの生成と解放を実行する場合と比較して、ソケット生成および解放の回数を減らすことができる。その結果、テストプログラムを実行するコンピューターにおいて、ソケットの生成および解放が頻繁に実施されることを防ぐことができる。また、通信ログに含まれるパケットの時系列順に、各パケットが示す通信動作に対応する処理を実行することが記述されているので、このテストプログラムを実行するコンピューターは、通信ログが取得されたときのプリンター５２とコンピューター５０との間の通信と同じ順序で同じ通信動作を実行することができる。
【００４７】
（３）他の実施形態：
尚、本発明の技術的範囲は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。例えば、プリンター５２は、ＴＣＰ／ＩＰ、ＵＤＰ／ＩＰの通信機能を備えたＦＡＸやスキャナーあるいは複合機であってもよい。
【符号の説明】
【００４８】
１０：コンピューター、２０：制御部、２１：テストプログラム生成プログラム、２１ａ：通信ログ取得部、２１ｂ：グルーピング部、２１ｃ：通信フロー取得部、２１ｄ：テストプログラム生成部、３０ａ：テストプログラム、５０：コンピューター、５１：パケットキャプチャー装置、５２：プリンター、５３：コンピューター、２００：制御部、２２０：ＴＣＰ／ＩＰプログラム、２３０：ＬＡＮアダプタードライバープログラム、４００：ＬＡＮアダプター。
【図１】
2010226617.tif 000003
【図２】
2010226617.tif 000004
【図３】
2010226617.tif 000005
【図４】
2010226617.tif 000006
【図５】
2010226617.tif 000007
【図６】
2010226617.tif 000008
【図７】
2010226617.tif 000009
【図８】
2010226617.tif 000010