以下、本発明の実施形態について添付の図面を参照しながら説明する。
(第一の実施形態)
<全体構成>
まず、本実施形態に係るファジングテストシステム1の全体構成について、図1を参照しながら説明する。図1は、本実施形態に係るファジングテストシステム1の全体構成の一例を示す図である。
図1に示すように、本実施形態に係るファジングテストシステム1は、ファジングテスト装置10と、テスト対象装置20とを有する。また、ファジングテスト装置10と、テスト対象装置20とは、例えばインターネットやLAN(Local Area Network)等のネットワークNを介して通信可能に接続されている。
ファジングテスト装置10は、MQTTにおけるBrokerとして機能するサーバである。ファジングテスト装置10には、ファジングテストプログラム100がインストールされている。ファジングテストプログラム100は、MQTTを用いたファジングによりテスト対象をテストするための1以上のプログラムである。
ファジングテスト装置10は、ファジングテストプログラム100により、テストメッセージの作成やテストメッセージの送信等を行うことで、テスト対象の挙動確認(すなわち、テスト対象でエラーが発生したか否かの確認)を行うことができる。このとき、本実施形態に係るファジングテスト装置10は、ファジングテストプログラム100により、テスト対象におけるエラー発生率に応じて、QoSに「0」が設定されたテストメッセージと、QoSに「1」が設定されたテストメッセージとの送信比率を動的に変更する。
これにより、本実施形態に係るファジングテスト装置10では、無駄なテストメッセージの送信を減少させると共に、単位時間あたりに送信できるテストメッセージ数を増加させることができ、効率的なファジングテストを行うことができるようになる。
無駄なテストメッセージとは、後述するテスト対象プログラム200に入力されないテストメッセージのことであり、テスト対象プログラム200のエラー発生後に送信されるテストメッセージが該当する。一方で、テスト対象プログラム200に入力されて、エラーの発生有無が検証されたテストメッセージのことは「有効なテストメッセージ」とも表す。
なお、以降では、QoSに「0」が設定されたテストメッセージを「テストメッセージ(QoS=0)」とも表す。同様に、QoSに「1」が設定されたテストメッセージを「テストメッセージ(QoS=1)」とも表す。
テスト対象装置20は、MQTTにおけるSubscriberとして機能するクライアントである。テスト対象装置20には、テスト対象プログラム200がインストールされている。テスト対象プログラム200は、MQTTを用いたファジングにおけるテスト対象となる1以上のプログラムである。ファジングテスト装置10から送信されたテストメッセージに含まれるファズデータがテスト対象プログラム200に入力されることで、テスト対象プログラム200の挙動確認を行うことができる。
なお、図1に示すファジングテストシステム1の構成は、一例であって、他の構成であっても良い。例えば、図1に示すファジングテストシステム1には、複数台のファジングテスト装置10が含まれていても良い。また、例えば、図1に示すファジングテストシステム1には、複数台のテスト対象装置20が含まれていても良い。
また、本実施形態では、ファジングテスト装置10がBrokerとして機能し、テスト対象装置20がSubscriberとして機能する場合について説明するが、これに限られない。本実施形態は、例えば、ファジングテスト装置10がPublisherとして機能し、テスト対象装置20がBrokerとして機能する場合についても同様に適用することができる。
<ファジングテストの概略>
次に、本実施形態に係るファジングテストシステム1におけるファジングの概略について、図2を参照しながら説明する。図2は、本実施形態に係るファジングテストシステム1におけるファジングの概略を説明する図である。
図2(a)に示すように、本実施形態に係るファジングテスト装置10は、k=1,2,・・・,Mとした場合に、各kに対して、Nk個のテストメッセージ(以降、「k回目のメッセージ群」とも表す。)をテスト対象装置20に送信する。なお、Nkは、1以上の整数である。
このとき、本実施形態に係るファジングテスト装置10は、k回目のメッセージ群の送信において、Nk−1個のテストメッセージ(QoS=0)を送信した後、1個のテストメッセージ(QoS=1)を送信する。すなわち、Nk≠0である場合、テストメッセージ(QoS=0)に対するテストメッセージ(QoS=1)の送信比率は、1/Nkである。なお、Mは、ユーザにより予め指定された1以上の整数である。
そして、図2(b)及び(c)に示すように、本実施形態に係るファジングテスト装置10は、これまでのテストメッセージに対するエラー発生率に応じて、Nk+1を算出する。
このとき、図2(b)に示すように、k回目のメッセージ群の送信において、テスト対象装置20でエラーが発生せず、エラー発生率が下がった場合(すなわち、ファジングテスト装置10がACKを受信した場合)、Nk+1>NkとなるようにNk+1が算出される。
したがって、この場合、k+1回目のメッセージ群の送信では、テストメッセージ(QoS=0)の送信比率が高くなると共に、テストメッセージ(QoS=1)の送信比率が低くなる。
一方で、図2(c)に示すように、k回目のメッセージ群の送信において、テスト対象装置20でエラーが発生し、エラー発生率が上がった場合(すなわち、ファジングテスト装置10がACKを受信しなかった場合)、Nk+1<NkとなるようにNk+1が算出される。
したがって、この場合、k+1回目のメッセージ群の送信では、テストメッセージ(QoS=0)の送信比率が低くなると共に、テストメッセージ(QoS=1)の送信比率が高くなる。
以上のように、本実施形態に係るファジングテスト装置10は、テスト対象装置20に対して、Nk−1個のテストメッセージ(QoS=0)を送信した後、1個のテストメッセージ(QoS=1)を送信する。そして、本実施形態に係るファジングテスト装置10は、テスト対象装置20におけるk回目までのエラー発生率に応じて、k+1回目のメッセージ群のメッセージ数Nk+1を算出する。すなわち、本実施形態に係るファジングテスト装置10は、テスト対象装置20におけるk回目までのエラー発生率に応じて、k+1回目のメッセージ群に含まれるテストメッセージ(QoS=1)の送信比率を動的に変更する。
このように、本実施形態に係るファジングテスト装置10は、エラー発生率に応じて、テスト対象装置20の死活を確認するための死活確認メッセージ(すなわち、QoSに「1」が設定されたメッセージ)の送信比率を動的に変更する。
これにより、無駄なテストメッセージの送信を減少させる(すなわち、有効なテストメッセージ数を増加させる)と共に、単位時間あたりに送信できるテストメッセージ数を増加させることができ、効率的なファジングテストを行うことができるようになる。
<ハードウェア構成>
次に、本実施形態に係るファジングテスト装置10及びテスト対象装置20のハードウェア構成について、図3を参照しながら説明する。図3は、本実施形態に係るファジングテスト装置10及びテスト対象装置20のハードウェア構成の一例を示す図である。なお、ファジングテスト装置10及びテスト対象装置20は、同様のハードウェア構成を有しているため、以降では、主に、ファジングテスト装置10のハードウェア構成について説明する。
図3に示すように、本実施形態に係るファジングテスト装置10は、入力装置11と、表示装置12と、外部I/F13と、通信I/F14とを有する。また、本実施形態に係るファジングテスト装置10は、ROM(Read Only Memory)15と、RAM(Random Access Memory)16と、CPU(Central Processing Unit)17と、補助記憶装置18とを有する。これら各ハードウェアは、それぞれがバス19で相互に接続されている。
入力装置11は、例えばキーボードやマウス、タッチパネル等であり、ファジングテスト装置10に各種の操作信号を入力するのに用いられる。表示装置12は、例えばディスプレイ等であり、ファジングテスト装置10による各種の処理結果を表示する。
外部I/F13は、外部装置とのインタフェースである。外部装置には、記録媒体13a等がある。ファジングテスト装置10は、外部I/F13を介して、記録媒体13aの読み取りや書き込みを行うことができる。
記録媒体13aには、例えば、SDメモリカード(SD memory card)やUSB(Universal Serial Bus)メモリ、CD(Compact Disk)、DVD(Digital Versatile Disk)等がある。
通信I/F14は、ファジングテスト装置10がネットワークNに接続するためのインタフェースである。ファジングテスト装置10は、通信I/F14を介して、テスト対象装置20と通信を行うことができる。
ROM15は、電源を切ってもデータを保持することができる不揮発性の半導体メモリである。RAM16は、プログラムやデータを一時保持する揮発性の半導体メモリである。CPU17は、例えば補助記憶装置18やROM15等からプログラムやデータをRAM16上に読み出して、各種処理を実行する演算装置である。
補助記憶装置18は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等であり、プログラムやデータを格納している不揮発性のメモリである。補助記憶装置18に格納されるプログラムやデータには、例えば、基本ソフトウェアであるOS(Operating System)や各種アプリケーションプログラム、ファジングテストプログラム100等がある。なお、テスト対象装置20の補助記憶装置18には、テスト対象プログラム200等が格納されている。
本実施形態に係るファジングテスト装置10及びテスト対象装置20は、図3に示すハードウェア構成を有することにより、後述する各種処理が実現される。
<機能構成>
次に、本実施形態に係るファジングテスト装置10の機能構成について、図4を参照しながら説明する。図4は、本実施形態に係るファジングテスト装置10の機能構成の一例を示す図である。
図4に示すように、本実施形態に係るファジングテスト装置10は、ファジングテスト処理部110と、記憶部120とを有する。ファジングテスト処理部110は、ファジングテストプログラム100がCPU17に実行させる処理により実現される。また、記憶部120は、例えば補助記憶装置18を用いて実現可能である。なお、記憶部120は、例えば、ファジングテスト装置10とネットワークNを介して接続される記憶装置等を用いて実現されても良い。
ファジングテスト処理部110は、テストメッセージの作成及び送信に関する処理を実行する。ファジングテスト処理部110は、UI制御部111と、メッセージ時間算出部112と、エラー発生率算出部113と、メッセージ数算出部114と、メッセージ作成部115とを有する。また、ファジングテスト処理部110は、メッセージ送信部116と、メッセージ受信部117と、再起動指示部118と、エラー有無設定部119とを有する。
UI制御部111は、ユーザによる各種操作の入力を受け付けると共に、各種画面を表示する。例えば、UI制御部111は、ファジングテストを開始するための操作(テスト開始操作)の入力を受け付ける。また、例えば、UI制御部111は、ユーザがテスト開始操作を行うための画面(テスト開始画面)を表示する。
メッセージ時間算出部112は、UI制御部111がテスト開始操作を受け付けると、メッセージ時間t0と、メッセージ時間t1とを算出する。メッセージ時間t0とは、テストメッセージ(QoS=0)の送信後、当該テストメッセージ(QoS=0)がテスト対象装置20に受信されるまでの時間である。また、メッセージ時間t1とは、テストメッセージ(QoS=1)の送信後、当該テストメッセージ(QoS=1)に対するACKを受信するまでの時間である。なお、メッセージ時間算出部112は、第2の算出部の一例である。
エラー発生率算出部113は、k回目までのメッセージ群を送信した後のテスト対象装置20のエラー発生率pk+1を算出する。なお、エラー発生率算出部113は、第1の算出部の一例である。
メッセージ数算出部114は、エラー発生率算出部113が算出したエラー発生率pk+1から、k+1回目のメッセージ群に含まれるテストメッセージの数Nk+1を算出する。なお、以降では、メッセージ群に含まれるテストメッセージの数を「メッセージ群のメッセージ数」とも表す。なお、メッセージ数算出部114は、決定部の一例である。
メッセージ群のメッセージ数Nkが算出されることで、k回目のメッセージ群の送信におけるテストメッセージ(QoS=1)の送信比率1/Nkが決定される。ただし、この場合、Nk≠0であるもとする。なお、Nkが1である場合、k回目のメッセージ群には、1個のテストメッセージ(QoS=1)のみが含まれることになる。
メッセージ作成部115は、ファズデータが含まれるテストメッセージを作成する。k回目のメッセージ群を送信する場合、メッセージ作成部115は、Nk−1個のテストメッセージ(QoS=0)と、1個のテストメッセージ(QoS=1)とを作成する。ファズデータとは、例えば、長い文字列や乱数等のデータである。なお、テストメッセージは、ファズメッセージの一例である。また、メッセージ作成部115は、メッセージ作成部の一例である。
メッセージ送信部116は、メッセージ作成部115により作成されたテストメッセージをテスト対象装置20に送信する。k回目のメッセージ群を送信する場合、メッセージ送信部116は、Nk−1個のテストメッセージ(QoS=0)をテスト対象装置20に送信した後、1個のテストメッセージ(QoS=1)をテスト対象装置20に送信する。なお、メッセージ送信部116は、送信部の一例である。
メッセージ受信部117は、メッセージ送信部116が送信したテストメッセージ(QoS=1)に対するACKを受信する。
再起動指示部118は、メッセージ送信部116がテストメッセージ(QoS=1)を送信した後、メッセージ時間t1が経過する前に、メッセージ受信部117がACKを受信しなかった場合、再起動指示をテスト対象装置20に送信する。すなわち、再起動指示部118は、テスト対象装置20でエラーが発生した場合、再起動指示を当該テスト対象装置20に送信する。なお、再起動指示部118は、再起動指示部の一例である。
エラー有無設定部119は、k回目のメッセージ群に含まれるテストメッセージを受信したテスト対象装置20でエラーが発生した場合、エラーが発生したことを示す「1」をエラー有無ekに設定する。一方で、エラー有無設定部119は、k回目のメッセージ群に含まれるテストメッセージを受信したテスト対象装置20でエラーが発生しなかった場合、エラーが発生しなかったことを示す「0」をエラー有無ekに設定する。
記憶部120は、テストメッセージの作成及び送信に関する処理に用いられる各種情報を記憶する。記憶部120に記憶される情報には、例えば、k回目のメッセージ群のメッセージ数Nk、k回目のメッセージ群におけるエラー有無ek、メッセージ時間t0、及びメッセージ時間t1等がある。これらの各種情報は、ファジングテスト処理部110により、記憶部120に保存される。
<テストメッセージの作成及び送信処理>
次に、本実施形態に係るファジングテスト処理部110がテストメッセージを作成して、テスト対象装置20に送信する処理について、図5を参照しながら説明する。図5は、本実施形態に係るテストメッセージの作成及び送信処理の一例を示すフローチャートである。
まず、ファジングテスト処理部110のUI制御部111は、例えば図6に示すテスト開始画面G100を表示する(ステップS501)。図6は、本実施形態に係るテスト開始画面G100の一例を示す図である。なお、テスト開始画面G100は、例えば、ファジングテストプログラム100が起動されることにより表示される。
図6に示すテスト開始画面G100には、メッセージ群の総送信回数の入力欄G110と、想定初期エラー発生率の入力欄G120と、テスト実行ボタンG130とが含まれる。ユーザは、所望の総送信回数を入力欄G110に指定すると共に、想定初期エラー発生率を入力欄G120に指定した上で、テスト実行ボタンG130を押下することで、テスト開始操作を行うことができる。以降では、メッセージ群の総送信回数Mと、想定初期エラー発生率p1とが指定された上で、テスト開始操作が行われたものとする。
なお、図6に示すテスト開始画面G100では、テスト対象装置20のIP(Internet Protocol)アドレス等を指定することができても良い。
次に、ファジングテスト処理部110のUI制御部111は、メッセージ群の総送信回数Mと、想定初期エラー発生率p1とが指定されたテスト開始操作の入力を受け付ける(ステップS502)。
次に、ファジングテスト処理部110は、メッセージ時間の算出処理を行って、メッセージ時間t0と、メッセージ時間t1とを算出する(ステップS503)。メッセージ時間t0と、メッセージ時間t1とは関係0<t0≦t1を満たす。算出されたメッセージ時間t0と、メッセージ時間t1とは、記憶部120に保存される。なお、メッセージ時間の算出処理の詳細については後述する。
次に、ファジングテスト処理部110のメッセージ数算出部114は、1回目のメッセージ群のメッセージ数N1を算出する(ステップS504)。ここで、メッセージ数算出部114は、以下の(式1)により1回目のメッセージ群のメッセージ数N1を算出する。算出されたメッセージ数N1は、記憶部120に保存される。
次に、ファジングテスト処理部110は、メッセージ群の送信回数kを「1」に初期化する(ステップS505)。kは、メッセージ群の送信回数を示す変数である。
次に、ファジングテスト処理部110は、送信メッセージ数nを「1」に初期化する(ステップS506)。nは、メッセージ群に含まれるテストメッセージの送信回数を示す変数である。
次に、ファジングテスト処理部110のメッセージ作成部115は、テストメッセージ(QoS=0)を作成する(ステップS507)。すなわち、メッセージ作成部115は、ファズデータを作成した上で、作成したファズデータが含まれ、かつ、QoSに「0」が設定されたテストメッセージを作成する。
次に、ファジングテスト処理部110のメッセージ送信部116は、上記のステップS507で作成されたテストメッセージ(QoS=0)をテスト対象装置20に送信する(ステップS508)。
次に、ファジングテスト処理部110は、送信メッセージ数nが、Nk−1以上であるか否かを判定する(ステップS509)。すなわち、ファジングテスト処理部110は、Nk−1個のテストメッセージ(QoS=0)がテスト対象装置20に送信されたか否かを判定する。
ステップS509において、送信メッセージ数nがNk−1以上でないと判定された場合、ファジングテスト処理部110は、送信メッセージ数nに「1」を加算する(ステップS510)。そして、ファジングテスト処理部110は、ステップS507に戻る。これにより、Nk−1個のテストメッセージ(QoS=0)がテスト対象装置20に送信される。
一方、ステップS509において、送信メッセージ数nがNk−1以上であると判定された場合、ファジングテスト処理部110のメッセージ作成部115は、テストメッセージ(QoS=1)を作成する(ステップS511)。すなわち、メッセージ作成部115は、ファズデータを作成した上で、作成したファズデータが含まれ、かつ、QoSに「1」が設定されたテストメッセージを作成する。
次に、ファジングテスト処理部110のメッセージ送信部116は、上記のステップS511で作成されたテストメッセージ(QoS=1)をテスト対象装置20に送信する(ステップS512)。
次に、ファジングテスト処理部110のメッセージ受信部117は、メッセージ時間t1以内に、テスト対象装置20からACKを受信したか否かを判定する(ステップS513)。すなわち、ファジングテスト処理部110は、上記のステップS508及びステップS512で送信されたテストメッセージを受信したテスト対象装置20でエラーが発生したか否かを判定する。
ステップS513において、メッセージ時間t1以内にACKを受信した場合、ファジングテスト処理部110のエラー有無設定部119は、k回目のエラー有無ekに「0」を設定する(ステップS514)。「0」が設定されたエラー有無ekは、記憶部120に保存される。
このように、k回目のメッセージ群に含まれる全てのテストメッセージでエラーが発生しなかった場合、エラー有無ekには、テスト対象装置20でエラーが発生しなかったことを示す「0」が設定される。
一方、ステップS513において、メッセージ時間t1以内にACKを受信しなかった場合、ファジングテスト処理部110の再起動指示部118は、再起動指示をテスト対象装置20に送信する(ステップS515)。これにより、エラーが発生したテスト対象装置20が再起動される。なお、再起動指示には、例えば、SSH(Secure Shell)を用いた再起動コマンド等が挙げられる。
次に、ファジングテスト処理部110のエラー有無設定部119は、k回目のエラー有無ekに「1」を設定する(ステップS516)。「1」が設定されたエラー有無ekは、記憶部120に保存される。
このように、k回目のメッセージ群に含まれるテストメッセージでエラーが発生した場合、エラー有無ekには、テスト対象装置20でエラーが発生したことを示す「1」が設定される。
ステップS514又はステップS516に続いて、ファジングテスト処理部110のエラー発生率算出部113は、以下の(式2)により、k回目までのメッセージ群を送信した後のテスト対象装置20のエラー発生率pk+1を算出する(ステップS517)。
次に、ファジングテスト処理部110のメッセージ数算出部114は、k+1回目のメッセージ群のメッセージ数Nk+1を算出する(ステップS518)。ここで、メッセージ数算出部114は、以下の(式3)によりk+1回目のメッセージ群のメッセージ数Nk+1を算出する。算出されたメッセージ数Nk+1は、記憶部120に保存される。
上記の(式3)によりメッセージ数Nk+1を算出することで、k回目のメッセージ群の送信においてテスト対象装置20でエラーが発生した場合(すなわち、エラー発生率pk+1>pkとなった場合)、Nk+1<NkとなるようにNk+1が算出される。これにより、ファジングにおけるテストメッセージ(QoS=1)の送信比率が高くなるように決定される。したがって、テスト対象装置20で発生したエラーを素早く検出することができ、無駄なテストメッセージの送信数を減少させることができる。
一方で、k回目のメッセージ群の送信においてテスト対象装置20でエラーが発生しなかった場合、(すなわち、エラー発生率pk+1<pkとなった場合)、Nk+1>NkとなるようにNk+1が算出される。これにより、ファジングにおけるテストメッセージ(QoS=0)の送信比率が高まるように決定される。言い換えれば、ファジングにおけるテストメッセージ(QoS=1)の送信比率が低くなるように決定される。したがって、単位時間あたりのテストメッセージの送信数を増加させることができる。
また、上記の(式3)によりメッセージ数Nk+1を算出することで、メッセージ時間t0と、メッセージ時間t1とが近い程、Nk+1が「1」に近くなる。すなわち、メッセージ(QoS=0)がテスト対象装置20に届くまでの時間と、メッセージ(QoS=1)に対するACKをファジングテスト装置10が受け取るまでの時間とが近い場合には、テストメッセージ(QoS=1)の送信比率が高くなるように決定される。これにより、単位時間あたりのテストメッセージの送信数を増加させると共に、無駄なテストメッセージ数を減少させることができる。
なお、上述したように、Nk+1の逆数が、k+1回目のメッセージ群におけるテストメッセージ(QoS=1)の送信比率となる。メッセージ数算出部114は、上記のステップS518で、k+1回目のメッセージ群におけるテストメッセージ(QoS=1)の送信比率1/Nk+1を算出しても良い。
次に、ファジングテスト処理部110は、メッセージ群の送信回数kが、メッセージ群の総送信回数M以上であるか否かを判定する(ステップS519)。すなわち、ファジングテスト処理部110は、k=1,・・・,Mに対して、Nk−1個のテストメッセージ(QoS=0)と、1個のテストメッセージ(QoS=1)とがテスト対象装置20に送信されたか否かを判定する。
ステップS519において、メッセージ群の送信回数kがM以上でないと判定された場合、ファジングテスト処理部110は、メッセージ群の送信回数kに「1」を加算する(ステップS520)。そして、ファジングテスト処理部110は、ステップS506に戻る。これにより、k=1,・・・,Mに対して、Nk−1個のテストメッセージ(QoS=0)と、1個のテストメッセージ(QoS=1)とがテスト対象装置20に送信される。言い換えれば、M個のメッセージ群がテスト対象装置20に送信される。
一方、ステップS519において、メッセージ群の送信回数kがM以上であると判定された場合、ファジングテスト処理部110は、処理を終了する。すなわち、ファジングテスト処理部110は、ファジングを終了する。
以上のように、本実施形態に係るファジングテスト装置10は、テスト対象装置20に対して、Nk−1個のテストメッセージ(QoS=0)を送信した後、1個のテストメッセージ(QoS=1)を送信する。そして、本実施形態に係るファジングテスト装置10は、テスト対象装置20におけるk回目までのエラー発生率に応じて、k+1回目のメッセージ群に含まれるテストメッセージ(QoS=1)の送信比率を動的に変更する。
このように、本実施形態に係るファジングテスト装置10は、テスト対象装置20におけるエラー発生率に応じて、死活確認メッセージ(すなわち、QoSに「1」が設定されたメッセージ)の送信比率を動的に変更する。これにより、無駄なテストメッセージの送信を減少させる(すなわち、有効なテストメッセージ数を増加させる)と共に、単位時間あたりに送信できるテストメッセージ数を増加させることができ、効率的なファジングテストを行うことができるようになる。
<メッセージ時間の算出処理>
ここで、上記のステップS503のメッセージ時間の算出処理について、図7を参照しながら説明する。図7は、本実施形態に係るメッセージ時間の算出処理の一例を示すフローチャートである。
まず、ファジングテスト処理部110は、テストメッセージ(QoS=0)の送信数rを「1」に初期化する(ステップS701)。rは、メッセージ時間t0を算出するためのテストメッセージ(QoS=0)の送信回数を示す変数である。
次に、ファジングテスト処理部110のメッセージ作成部115は、テストメッセージ(QoS=0)を作成する(ステップS702)。すなわち、メッセージ作成部115は、ファズデータを作成した上で、作成したファズデータが含まれ、かつ、QoSに「0」が設定されたテストメッセージを作成する。なお、このとき、メッセージ作成部115は、テスト対象装置20でエラーが発生しないファズデータを作成する。
次に、ファジングテスト処理部110のメッセージ送信部116は、上記のステップS702で作成されたテストメッセージ(QoS=0)をテスト対象装置20に送信する(ステップS703)。
次に、ファジングテスト処理部110は、テストメッセージ(QoS=0)の送信数rが「1」であるか否かを判定する(ステップS704)。
ステップS704において、送信数rが「1」であると判定された場合、ファジングテスト処理部110のメッセージ送信部116は、上記のステップS703で送信したテストメッセージ(QoS=0)の送信時刻taを記憶部120に保存する(ステップS705)。すなわち、メッセージ送信部116は、最初に送信したテストメッセージ(QoS=0)の送信時刻taを記憶部120に保存する。
一方、ステップS704において、送信数rが「1」でないと判定された場合、又はステップS705に続いて、ファジングテスト処理部110は、テストメッセージ(QoS=0)の送信数rがR以上であるか否かを判定する(ステップS706)。Rは、例えば、ユーザ等により予め設定された1以上の整数である。
ステップS706において、送信数rがR以上でないと判定された場合、ファジングテスト処理部110は、テストメッセージ(QoS=0)の送信数rに「1」を加算する(ステップS707)。そして、ファジングテスト処理部110は、ステップS702に戻る。これにより、R個のテストメッセージ(QoS=0)がテスト対象装置20に送信される。
一方、ステップS706において、送信数rがR以上であると判定された場合、ファジングテスト処理部110のメッセージ作成部115は、テストメッセージ(QoS=1)を作成する(ステップS708)。すなわち、メッセージ作成部115は、ファズデータを作成した上で、作成したファズデータが含まれ、かつ、QoSに「1」が設定されたテストメッセージを作成する。なお、このとき、メッセージ作成部115は、テスト対象装置20でエラーが発生しないファズデータを作成する。
次に、ファジングテスト処理部110のメッセージ送信部116は、上記のステップS708で作成されたテストメッセージ(QoS=1)をテスト対象装置20に送信する(ステップS709)。
次に、ファジングテスト処理部110のメッセージ送信部116は、上記のステップS708で送信したテストメッセージ(QoS=1)の送信時刻tbを記憶部120に保存する(ステップS710)。
次に、ファジングテスト処理部110のメッセージ受信部117は、上記のステップS708で送信したテストメッセージ(QoS=1)に対するACKを受信したか否かを判定する(ステップS711)。
ステップS711において、ACKを受信したと判定されなかった場合、ファジングテスト処理部110は、ステップS711に戻る。すなわち、この場合、ファジングテスト処理部110は、上記のステップS708で送信したテストメッセージ(QoS=1)に対するACKを受信するまで待ち状態となる。
一方、ステップS711において、ACKを受信したと判定された場合、ファジングテスト処理部110のメッセージ受信部117は、当該ACKの受信時刻tcを記憶部120に保存する(ステップS712)。
次に、ファジングテスト処理部110のメッセージ時間算出部112は、テストメッセージ(QoS=0)のメッセージ時間t0と、テストメッセージ(QoS=1)のメッセージ時間t1とを算出する(ステップS713)。メッセージ時間算出部112は、以下の(式4)及び(式5)により、メッセージ時間t0と、メッセージ時間t1とを算出する。
以上により、テストメッセージ(QoS=0)がテスト対象装置20に到達するまでの時間を示すメッセージ時間t0と、テストメッセージ(QoS=1)に対するACKを受け取るまでの時間を示すメッセージ時間t1とが算出される。なお、ユーザは、上記のRの値を大きな値に設定することで、メッセージ時間t0の精度を向上させることができる。
<テストメッセージの作成及び送信処理の他の例>
ここで、本実施形態に係るテストメッセージの作成及び送信処理の他の例について、図8を参照しながら説明する。図8は、本実施形態に係るテストメッセージの作成及び送信処理の他の例を示すフローチャートである。なお、図8のステップS503〜ステップS518及びステップS520は、図5と同様であるため、その説明を省略する。
まず、ファジングテスト処理部110のUI制御部111は、例えば図9に示すテスト開始画面G200を表示する(ステップS801)。図9は、本実施形態に係るテスト開始画面G200の他の例を示す図である。なお、テスト開始画面G200は、例えば、ファジングテストプログラム100が起動されることにより表示される。
図9に示すテスト開始画面G200には、総テスト時間の入力欄G210が含まれる。ユーザは、ファジングの総テスト時間を入力欄G210に指定すると共に、想定初期エラー発生率を入力欄G120に指定した上で、テスト実行ボタンG130を押下することで、テスト開始操作を行うことができる。以降では、総テスト時間Tと、想定初期エラー発生率p1とが指定された上で、テスト開始操作が行われたものとする。
次に、ファジングテスト処理部110のUI制御部111は、総テスト時間Tと、想定初期エラー発生率p1とが指定されたテスト開始操作の入力を受け付ける(ステップS802)。
ステップS504に続いて、ファジングテスト処理部110は、ファジングの経過時間tを「0」に初期化する(ステップS803)。tは、ファジングの経過時間を示す変数である。
また、ステップS518に続いて、ファジングテスト処理部110は、ファジングの経過時間tが、ファジングの総テスト時間T以上であるか否かを判定する(ステップS804)。
ステップS804において、ファジングの経過時間tが総テスト時間T以上でないと判定された場合、ファジングテスト処理部110は、ステップS520に進む。これにより、総テスト時間Tが経過するまで、ステップS505〜ステップS518が繰り返し実行される。
一方、ステップS519において、ファジングの経過時間tが総テスト時間T以上であると判定された場合、ファジングテスト処理部110は、処理を終了する。すなわち、ファジングテスト処理部110は、ファジングを終了する。
以上のように、本実施形態に係るファジングテスト装置10は、ユーザにより設定された総テスト時間Tが経過するまで、Nkを動的に更新しながら、Nk−1個のテストメッセージ(QoS=0)と、1個のテストメッセージ(QoS=1)とを送信する。これにより、ユーザは、例えば、自身が所望する時間が経過するまでの間、効率的なファジングテストを行うことができるようになる。
(第二の実施形態)
次に、第二の実施形態について説明する。第一の実施形態では、メッセージ時間の算出処理で予め算出されたメッセージ時間t0及びt1を用いて、全てのテストメッセージでエラー発生の有無を判定した。しかしながら、ファジングテスト装置10から送信されるテストメッセージの長さ(例えば、ペイロードの長さ)によって、当該テストメッセージがテスト対象装置20に到達するまでの時間が変化し得る。また、当該テストメッセージにQoS=1が設定されている場合、当該テストメッセージに対するACKをファジングテスト装置10が受信するまでの時間も変化し得る。
このため、テストメッセージ(QoS=0)の長さによっては、当該テストメッセージ(QoS=0)の送信後、テスト対象装置20に受信されるまでの時間と、メッセージ時間t0との誤差が大きくなる場合がある。同様に、テストメッセージ(QoS=1)の長さによっては、当該テストメッセージ(QoS=1)の送信後、ファジングテスト装置10がACKを受信するまでの時間と、メッセージ時間t1との誤差が大きくなる場合がある。
したがって、テストメッセージ(QoS=0)に対するテストメッセージ(QoS=1)の送信比率1/Nkが不正確となり、ファジングテストの効率が低下する場合がある。また、当該テストメッセージ(QoS=1)の送信後、ファジングテスト装置10がACKを受信するまでの時間がメッセージ時間t1よりも長くなることで、誤判定が発生し、ファジングテストの効率が低下する場合がある。
そこで、本実施形態では、テストメッセージの長さに応じてテストメッセージの集合を複数の部分集合(これを「サブセット」とも表す。)に分割した上で、サブセット毎に、メッセージ時間t0及びt1を算出する場合について説明する。テストメッセージの長さに応じてテストメッセージの集合を複数のサブセットに分割することで、例えば、各サブセットには同程度の長さのテストメッセージが含まれることになる。これにより、同一のサブセットに含まれるテストメッセージでは、当該サブセットについて算出されたメッセージ時間t0及びt1との誤差を低減することができる。
したがって、テストメッセージの長さが異なるためにメッセージ時間t0及びt1に誤差が生じることによるファジングテストの効率低下を防止することができる。以降では、テストメッセージの長さを「メッセージ長」とも表す。
なお、第二の実施形態では、主に、第一の実施形態との相違点について説明し、第一の実施形態と実質的に同様の構成要素については、適宜、その説明を省略又は簡略化する。
<機能構成>
まず、本実施形態に係るファジングテスト装置10の機能構成について、図10を参照しながら説明する。図10は、本実施形態に係るファジングテスト装置10の機能構成の一例を示す図である。
図10に示すように、本実施形態に係るファジングテスト装置10のファジングテスト処理部110は、更に、ソート部121と、分割部122と、計測メッセージ作成部123とを有する。
また、本実施形態に係るメッセージ作成部115は、メッセージ時間の算出処理よりも前に、ファジングテストに用いられるテストメッセージの集合(以降、「メッセージ集合」とも表す。)を作成する。このとき、本実施形態に係るメッセージ作成部115は、例えば、ユーザに指定された数のテストメッセージが含まれるメッセージ集合を作成する。
ソート部121は、メッセージ作成部115により作成されたメッセージ集合に含まれるテストメッセージをメッセージ長によってソート(並び替え)する。例えば、ソート部121は、メッセージ集合に含まれるテストメッセージをメッセージ長の昇順(又は降順)にソートする。
分割部122は、ソート部121によるソート後のメッセージ集合を、当該メッセージ集合に含まれるテストメッセージの長さに応じて、1以上のサブセットに分割する。例えば、分割部122は、同一のサブセットに含まれるテストメッセージが同程度の長さとなるように、メッセージ集合を1以上のサブセットに分割する。これにより、例えば、同程度の長さのテストメッセージがそれぞれ含まれる1以上のサブセットが作成される。なお、分割部122は、分割部の一例である。
計測メッセージ作成部123は、分割部122により作成されたサブセットのうちの選択されたサブセットに含まれるテストメッセージから、当該選択されたサブセットのメッセージ時間t0及びt1の算出に用いるテストメッセージ(以降、「計測用メッセージ」とも表す。)を作成する。これにより、サブセット毎に計測用メッセージが作成される。
そして、本実施形態に係るメッセージ時間算出部112では、計測メッセージ作成部123により作成された計測用メッセージを用いて、当該サブセットに含まれる各テストメッセージのファジングテストに用いるメッセージ時間t0及びt1を算出する。その後、本実施形態では、サブセット毎に算出されたメッセージ時間t0及びt1を用いて、当該サブセットに含まれる各テストメッセージのファジングテストが行われる。なお、計測メッセージ作成部123は、計測メッセージ作成部の一例である。
このように、本実施形態では、例えば同程度の長さのテストメッセージが含まれるサブセット毎にメッセージ時間t0及びt1を算出し、これら算出したメッセージ時間t0及びt1を用いて、当該サブセットに含まれるテストメッセージのファジングテストを行う。これにより、当該サブセットに含まれるテストメッセージ(QoS=0)の送信後、テスト対象装置20に受信されるまでの時間と、メッセージ時間t0との誤差が低減させることができる。同様に、当該サブセットに含まれるテストメッセージ(QoS=1)の送信後、ファジングテスト装置10がACKを受信するまでの時間と、メッセージ時間t1との誤差を低減させることができる。したがって、本実施形態に係るファジングテスト装置10によれば、テストメッセージの長さが異なるためにメッセージ時間t0及びt1に誤差が生じることによるファジングテストの効率低下を防止することができる。
<テストメッセージの作成及び送信処理>
次に、本実施形態に係るテストメッセージの作成及び送信処理について、図11A及び図11Bを参照しながら説明する。図11A及び図11Bは、本実施形態に係るテストメッセージの作成及び送信処理の一例を示すフローチャートである。なお、図11A及び図11BのステップS504〜ステップS506、ステップS508〜ステップS509及びステップS512〜ステップS520は、図5と同様であるため、その説明を省略する。
まず、ファジングテスト処理部110のUI制御部111は、例えば図12に示すテスト開始画面G300を表示する(ステップS1101)。図12は、テスト開始画面G300の一例を示す図である。なお、テスト開始画面G300は、例えば、ファジングテストプログラム100が起動されることにより表示される。
図12に示すテスト開始画面G300には、総メッセージ数の入力欄G310と、サブセット数(メッセージ集合の分割数)の入力欄G320とが含まれる。ユーザは、作成されるテストメッセージの総数と、メッセージ集合の分割数とをそれぞれ入力欄G310と入力欄G320とに指定すると共に、想定初期エラー発生率を入力欄G120に指定する。そして、テスト実行ボタンG130を押下することで、ユーザは、テスト開始操作を行うことができる。以降では、総メッセージ数Lと、サブセット数Sと、想定初期エラー発生率p1とが指定された上で、テスト開始操作が行われたものとする。
次に、ファジングテスト処理部110のUI制御部111は、総メッセージ数Lと、サブセット数Sと、想定初期エラー発生率p1とが指定されたテスト開始操作の入力を受け付ける(ステップS1102)。
次に、ファジングテスト処理部110のメッセージ作成部115は、L個のテストメッセージが含まれるメッセージ集合を作成する(ステップS1103)。これらのL個のテストメッセージは、QoSに任意の値が設定されていても良いし、QoSが設定されていなくても良い。又は、全てのテストメッセージのQoSが「0」又は「1」に設定されていても良い。なお、本実施形態では、総メッセージ数Lはユーザにより指定されるものとしたが、これに限られず、例えば、総メッセージ数Lは予め決められていても良い。
次に、ファジングテスト処理部110のソート部121は、メッセージ作成部115により作成されたメッセージ集合に含まれるテストメッセージをメッセージ長によってソートする(ステップS1104)。ソート部121は、例えば、メッセージ集合に含まれるテストメッセージをメッセージ長の昇順(又は降順)にソートする。
次に、ファジングテスト処理部110の分割部122は、ソート部121によるソート後のメッセージ集合をS個のサブセットに分割する(ステップS1105)。
例えば、分割部122は、ソート後のメッセージ集合の先頭(又は末尾)からceil(L/S)個ずつテストメッセージを取得し、取得したceil(L/S)個のテストメッセージを1つのサブセットとする。なお、ceilは、L/Sの小数点以下を切り上げることを意味する。
より具体的には、例えば、ソート後のメッセージ集合に含まれる1番目からceil(L/S)番目までのテストメッセージをサブセットV1、ceil(L/S)+1番目から2×ceil(L/M)番目までのテストメッセージをサブセットV2とする。以降も同様に、(i−1)×ceil(L/S)+1番目からi×ceil(L/S)番目までのテストメッセージをサブセットViとする。ただし、i=1,2,・・・,S−1である。
また、(S−1)×ceil(L/S)+1番目以降の全てのテストメッセージをサブセットVSとする。
これにより、ceil(L/S)個のテストメッセージが含まれるS−1個のサブセットと、ceil(L/S)個以下のテストメッセージが含まれる1個のサブセットとにメッセージ集合が分割される。このとき、テストメッセージの長さの昇順又は降順にソートされたメッセージ集合の先頭又は末尾から順にceil(L/S)個のテストメッセージを取得することで各サブセットに分割しているため、同一のサブセットに含まれるテストメッセージの長さは同程度となる。
ただし、上記以外にも、例えば、或る範囲内の長さのメッセージが同一のサブセットに含まれるように、メッセージ集合を分割しても良い。例えば、メッセージの長さを表す定数をd1,d2,・・・,dS,dS+1として、d1<d2<・・・<dS<dS+1とする。このとき、メッセージの長さがd1以上d2未満であるテストメッセージをサブセットV1,メッセージの長さがd2以上d3未満であるテストメッセージをサブセットV2,・・・,メッセージの長さがdS以上dS+1未満であるテストメッセージをサブセットVSに含まれるように、メッセージ集合を分割しても良い。これにより、上記と同様に、同一のサブセットに含まれるテストメッセージの長さは同程度となる。
なお、同一のサブセットに含まれるテストメッセージの長さが同程度となるようにメッセージ集合をサブセットに分割する場合に限られず、例えば、各サブセットに含まれるテストメッセージの長さの平均が同程度となるようにメッセージ集合を分割することも考えられる。より具体的には、mを0以上の整数として、mV+i番目のテストメッセージがサブセットViに含まれるように、メッセージ集合を分割しても良い。ただし、i=1,2,・・・,Sである。
なお、本実施形態では、サブセット数Sはユーザにより指定されるものとしたが、これに限られず、例えば、サブセット数Sは予め決められていても良い。
以降では、メッセージ集合がサブセットV1,V2,・・・,VSに分割されたものとして説明を続ける。
次に、ファジングテスト処理部110は、サブセットV1,V2,・・・,VSの中から、未選択のサブセットを1つ選択する(ステップS1106)。以降では、未選択のサブセットVjが選択されたものとして説明を続ける。
次に、ファジングテスト処理部110は、選択したサブセットVjに対するメッセージ時間の算出処理を行って、このサブセットVjのメッセージ時間t0及びt1を算出する(ステップS1107)。このように、本実施形態では、サブセットVj毎にメッセージ時間t0及びt1を算出する。したがって、サブセットVjのメッセージ時間t0は、t0 jとも表すことができる。同様に、サブセットVjのメッセージ時間t1は、t1 jとも表すことができる。なお、メッセージ時間の算出処理の詳細については後述する。
ステップS506又はステップS510に続いて、ファジングテスト処理部110のメッセージ作成部115は、サブセットVjに含まれるテストメッセージのうち、未選択のテストメッセージを1つ選択する。そして、メッセージ作成部115は、選択したテストメッセージのQoSに「0」を設定する(ステップS1108)。このテストメッセージ(QoS=0)がステップS508でテスト対象装置20に送信される。
なお、メッセージ作成部115は、例えば、サブセットVjに含まれるテストメッセージの中から、QoSに「0」を設定するテストメッセージをランダムに選択しても良いし、テストメッセージの長さの昇順又は降順に選択しても良い。
ステップ509において、送信メッセージ数nがNk−1以上であると判定された場合、ファジングテスト処理部110のメッセージ作成部115は、サブセットVjに含まれるテストメッセージのうち、未選択のテストメッセージを選択する。そして、メッセージ作成部115は、選択したテストメッセージのQoSに「1」を設定する(ステップS1109)。このテストメッセージ(QoS=1)がステップS512でテスト対象装置20に送信される。
なお、メッセージ作成部115は、例えば、サブセットVjに含まれるテストメッセージの中から、QoSに「1」を設定するテストメッセージをランダムに選択しても良いし、テストメッセージの長さの昇順又は降順に選択しても良い。
ステップS518に続いて、ファジングテスト処理部110は、未選択のテストメッセージがサブセットVjにNk+1個以上あるか否かを判定する(ステップS1110)。
ステップS1110において、未選択のテストメッセージがサブセットVjにNk+1個以上あると判定された場合、ファジングテスト処理部110は、ステップS520に進む。
一方で、ステップS1110において、未選択のテストメッセージがサブセットVjにNk+1個以上ないと判定された場合、ファジングテスト処理部110は、サブセットV1,V2,・・・,VSのうち、未選択のサブセットがあるか否かを判定する(ステップS1111)。
ステップS1111において、未選択のサブセットがあると判定されなかった場合、ファジングテスト処理部110は、処理を終了する。すなわち、ファジングテスト処理部110は、ファジングを終了する。
一方で、ステップS1111において、未選択のサブセットがあると判定された場合、ファジングテスト処理部110は、ステップS1106に戻る。これにより、ステップS1106において、サブセットV1,V2,・・・,VSの中から、未選択のサブセットVjが選択され、ステップS1107以降の処理が実行される。
以上のように、本実施形態に係るファジングテスト装置10は、例えば同程度の長さのテストメッセージが含まれるサブセットVj毎に、メッセージ時間t0=t0 jと、メッセージ時間t1=t1 jとを算出する。そして、本実施形態に係るファジングテスト装置10は、これらのメッセージ時間t0=t0 j及びt1=t1 jを用いて、サブセットVjに含まれるテストメッセージでファジングテストを行う。
これにより、本実施形態に係るファジングテスト装置10では、テストメッセージの長さが異なるためにメッセージ時間t0及びt1に誤差が生じることによるファジングテストの効率低下を防止することができる。
なお、図11A及び図11Bに示す例では、テストメッセージ集合を予めサブセットV1,V2,・・・,VSに分割した後、サブセットVj毎に、メッセージ時間の算出(ステップS1107)と、ファジングテスト(ステップS504以降)とを繰り返したが、これに限られない。例えば、テストメッセージ集合から1つのサブセットVjを作成し、当該サブセットVjのメッセージ時間の算出と、当該サブセットVjのファジングテストとを行った後、次のサブセットVjを作成することを繰り返しても良い。
<メッセージ時間の算出処理>
ここで、上記のステップS1107のメッセージ時間の算出処理について、図13を参照しながら説明する。図13は、本実施形態に係るメッセージ時間の算出処理の一例を示すフローチャートである。なお、図13のステップS701、ステップS703〜ステップS707、ステップS709〜ステップS713は、図7と同様であるため、その説明を省略する。
まず、ファジングテスト処理部110の計測メッセージ作成部123は、サブセットVjに含まれるテストメッセージから計測用メッセージを作成する(ステップS1301)。
ここで、計測メッセージ作成部123は、計測用メッセージの長さとしては、例えば、サブセットVjに含まれるテストメッセージのメッセージ長のうちの最大の長さとしても良いし、これらのテストメッセージのメッセージ長の平均の長さとしても良い。
また、計測メッセージ作成部123は、計測用メッセージのデータ内容(ファズデータの内容)としては、例えば、サブセットVjに含まれる任意のテストメッセージと同一のデータ内容としても良いし、ランダムな文字列又は所定の文字列等としても良い。ただし、計測メッセージ作成部123は、テスト対象装置20でエラーが発生しないファズデータを作成する。
ステップS701又はステップS707に続いて、ファジングテスト処理部110のメッセージ作成部115は、計測メッセージ作成部123により作成された計測用メッセージのQoSに「0」を設定する(ステップS1302)。QoSに「0」が設定された計測用メッセージ(テストメッセージ(QoS=0))がステップS703でテスト対象装置20に送信される。
ステップS706において、送信数rがR以上であると判定された場合、ファジングテスト処理部110のメッセージ作成部115は、計測メッセージ作成部123により作成された計測用メッセージのQoSに「1」を設定する(ステップS1303)。QoSに「1」が設定された計測用メッセージ(テストメッセージ(QoS=1))がステップS709でテスト対象装置20に送信される。
以上により、サブセットVjのメッセージ時間t0=t0 j及びt1=t1 jが算出される。しかも、本実施形態では、サブセットVjに含まれるテストメッセージのメッセージ長の最大又は平均の長さの計測用メッセージを用いてメッセージ時間t0及びt1を算出する。これにより、本実施形態では、当該サブセットVjに含まれる各テストメッセージを送信した場合に、テストメッセージ(QoS=0)の送信後、テスト対象装置20に受信されるまでの時間との誤差が少ないメッセージ時間t0を算出することができる。同様に、本実施形態では、当該サブセットVjに含まれる各テストメッセージを送信した場合に、テストメッセージ(QoS=1)の送信後、ファジングテスト装置10がACKを受信するまでの時間との誤差が少ないメッセージ時間t1を算出することができる。
<テストメッセージの作成及び送信処理の他の例>
ここで、本実施形態に係るテストメッセージの作成及び送信処理の他の例について、図14A及び図14Bを参照しながら説明する。図14A及び図14Bは、本実施形態に係るテストメッセージの作成及び送信処理の他の例を示すフローチャートである。なお、図14A及び図14BのステップS504〜ステップS506、ステップS508〜ステップS509、ステップS512〜ステップS520、ステップS1104〜ステップS1111は、図11A又は図11Bと同様であるため、その説明を省略する。
まず、ファジングテスト処理部110のUI制御部111は、例えば図15に示すテスト開始画面G400を表示する(ステップS1401)。図15は、本実施形態に係るテスト開始画面G400の他の例を示す図である。なお、テスト開始画面G400は、例えば、ファジングテストプログラム100が起動されることにより表示される。
図15に示すテスト開始画面G400には、テストメッセージを作成するためのルールの選択欄G410と、各ルールで作成するテストメッセージ数の入力欄G420とが含まれる。ルールとは、テストメッセージを作成するために予め決められた作成方法のことである。ルールとしては、例えば、「完全ランダム」、「正常メッセージから所定の長さをファズデータに変更」、「正常メッセージの所定の項目をファズデータに変更」等が挙げられる。
ルール「完全ランダム」とは、例えば、任意の長さのファズデータを作成し、任意の位置に当該ファズデータが含まれ、かつ、任意の長さのテストメッセージを作成する方法のことである。ルール「正常メッセージから所定の長さをファズデータに変更」とは、例えば、所定の長さのファズデータを作成し、正常メッセージの任意の位置に当該ファズデータが含まれるテストメッセージを作成する方法のことである。ルール「正常メッセージの所定の項目をファズデータに変更」とは、例えば、所定の項目と同一の長さのファズデータを作成し、正常メッセージの当該項目の位置に当該ファズデータが含まれるテストメッセージを作成する方法のことである。なお、以降では、選択欄G410から選択されたルールが含まれる集合を「ルール集合」とも表す。
ユーザは、ルールを選択欄G410から選択すると共に、各ルールで作成するテストメッセージ数を入力欄G420に指定する。また、ユーザは、想定初期エラー発生率を入力欄G120に指定する。そして、テスト実行ボタンG130を押下することで、ユーザは、テスト開始操作を行うことができる。以降では、ルール1及びルール3が含まれるルール集合と、各ルールのメッセージ数Lと、想定初期エラー発生率p1とが指定された上で、テスト開始操作が行われたものとする。
なお、図15に示すテスト開始画面G400では、ルール集合に含まれる全てのルールに対して共通のメッセージ数Lを指定する場合を示しているが、これに限られない。メッセージ数は、ルール集合に含まれるルール毎に指定されても良い。
次に、ファジングテスト処理部110のUI制御部111は、ルール集合と、各ルールのメッセージ数Lと、サブセット数Sと、想定初期エラー発生率p1とが指定されたテスト開始操作の入力を受け付ける(ステップS1402)。
次に、ファジングテスト処理部110は、ルール集合に含まれるルールの中から、未選択のルールを1つ選択する(ステップS1403)。
次に、ファジングテスト処理部110のメッセージ作成部115は、選択されたルールに基づいて、L個のテストメッセージが含まれるメッセージ集合を作成する(ステップS1404)。なお、本実施形態では、メッセージ数Lはユーザにより指定されるものとしたが、これに限られず、例えば、メッセージ数Lは予め決められていても良い。
例えば、上記のステップS1404で選択されたルールが「完全ランダム」である場合、メッセージ作成部115は、例えば、任意の長さのL個のファズデータを作成する。そして、メッセージ作成部115は、任意の位置にこれらのファズデータが含まれ、任意の長さのL個のテストメッセージを作成する。
また、例えば、上記のステップS1404で選択されたルールが「正常メッセージから所定の長さをファズデータに変更」である場合、メッセージ作成部115は、例えば、所定の長さのL個のファズデータを作成する。そして、メッセージ作成部115は、L個の正常メッセージの任意の位置にこれらのファズデータがそれぞれ含まれるテストメッセージを作成する。
また、例えば、上記のステップS1404で選択されたルールが「正常メッセージの所定の項目をファズデータに変更」である場合、メッセージ作成部115は、例えば、所定の項目と同一の長さのL個のファズデータを作成する。そして、メッセージ作成部115は、L個の正常メッセージの当該項目の位置にこれらのファズデータがそれぞれ含まれるテストメッセージを作成する。
これにより、上記のステップS1404で選択されたルールに応じたテストメッセージが含まれるメッセージ集合が作成される。
ステップS1111において、未選択のサブセットがあると判定されなかった場合、ファジングテスト処理部110は、未選択のルールがルール集合にあるか否かを判定する(ステップS1405)。
ステップS1405において、未選択のルールがあると判定されなかった場合、ファジングテスト処理部110は、処理を終了する。すなわち、ファジングテスト処理部110は、ファジングを終了する。
一方で、ステップS1405において、未選択のルールがルール集合にあると判定された場合、ファジングテスト処理部110は、ステップS1403に戻る。これにより、ステップS1403において、ルール集合の中から、未選択のルールが選択され、ステップS1404以降の処理が実行される。
以上のように、本実施形態に係るファジングテスト装置10は、ユーザにより指定されたルール毎にメッセージ集合を作成することができる。これにより、本実施形態に係るファジングテスト装置10では、同一のルールに基づいて作成されたテストメッセージが含まれるサブセットVjからメッセージ時間t0=t0 jと、メッセージ時間t1=t1 jとが算出される。
これにより、本実施形態に係るファジングテスト装置10では、メッセージ時間t0及びt1に生じる誤差の更なる低減が期待できる。また、本実施形態に係るファジングテスト装置10では、ルール毎にメッセージ集合を作成することで、例えば、全てのルールを用いてメッセージ集合を作成する場合と比べて、必要な記憶領域やテストメッセージのソートに必要な計算量等を削減することもできる。
<従来技術との比較>
ここで、本実施形態に係るファジングと、従来技術を用いたファジングとにおける有効なテストメッセージ数の比較について、図16及び図17を参照しながら説明する。図16及び図17は、単位時間あたりの有効なテストメッセージ数の比較例を説明する図である。
図16は、単位時間あたりに10個のメッセージを送受信することができる場合における「KeepAlive方式によるファジング」と、「全てのテストメッセージをQoS=1にする方式によるファジング」と、「本実施形態に係るファジング」との比較例である。
図16(a)に示すように、KeepAlive方式によるファジングでは、単位時間内に、テストメッセージ1(QoS=0)〜テストメッセージ10(QoS=1)がファジングテスト装置10からテスト対象装置20に送信される。
このとき、例えば、テストメッセージ3(QoS=0)でエラーが発生した場合、テストメッセージ4(QoS=0)〜テストメッセージ10(QoS=0)は、テスト対象装置20でテストされないため、無駄なテストメッセージとなる。したがって、この場合、有効なテストメッセージ数は「3」となる。
図16(b)に示すように、全てのテストメッセージをQoS=1にする方式によるファジングでは、単位時間内に、テストメッセージ1(QoS=1)〜テストメッセージ5(QoS=1)がファジングテスト装置10からテスト対象装置20に送信される。
このとき、例えば、上記と同様にテストメッセージ3(QoS=0)でエラーが発生したとしても、テストメッセージ4(QoS=1)〜テストメッセージ5(QoS=1)は、テスト対象装置20の再起動後に送信されるため、有効なテストメッセージとなる。したがって、この場合、有効なテストメッセージ数は「5」となる。
図16(c)に示すように、本実施形態に係るファジングでは、例えば、メッセージ群のメッセージ数を「4」とした場合、単位時間内に、2個のメッセージ群がファジングテスト装置10からテスト対象装置20に送信される。すなわち、テストメッセージ1(QoS=0)〜テストメッセージ3(QoS=0)と、テストメッセージ4(QoS=1)と、テストメッセージ5(QoS=0)〜テストメッセージ7(QoS=0)と、テストメッセージ8(QoS=1)とが送信される。
このとき、例えば、上記と同様にテストメッセージ3(QoS=0)でエラーが発生した場合、テストメッセージ4(QoS=1)は、テスト対象装置20でテストされないため、無駄なメッセージとなる。一方で、テストメッセージ5(QoS=0)〜テストメッセージ7(QoS=0)と、テストメッセージ8(QoS=1)とは、テスト対象装置20の再起動後に送信されるため、有効なテストメッセージとなる。したがって、この場合、有効なテストメッセージ数は「7」となる。
このように、本実施形態に係るファジングでは、従来技術を用いたファジングと比較して、単位時間あたりの有効なテストメッセージ数が増加するため、効率的なファジングテストを行うことができるようになる。
なお、図16では、一例として、テストメッセージ3でエラーが発生する場合について説明した。本実施形態に係るファジングでは、いずれのテストメッセージでエラーが発生する場合であっても、エラー発生率に応じて、メッセージ群のメッセージ数を動的に更新することで、従来技術を用いたファジングによりも有効なメッセージ数を増加させることができる。
図17は、以下の前提条件の下で、1秒経過時点における有効なメッセージ数の比較例である。
・テストメッセージ(QoS=0)のメッセージ時間t0:0.00001秒
・テストメッセージ(QoS=1)のメッセージ時間t1:0.00010秒
・想定初期エラー発生率p1:0.001
このとき、図17に示すように、100テストメッセージ毎に1回エラーが発生する場合、1000テストメッセージ毎に1回エラーが発生する場合、10000メッセージ毎に1回エラーが発生する場合のいずれでも有効なメッセージ数を増加させることができる。したがって、本実施形態に係るファジングでは、従来技術を用いたファジングと比較して、単位時間あたりの有効なテストメッセージを増加させることができ、効率的なファジングを行うことができるようになる。
以上、本発明の実施形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
ファジングによるテスト対象装置と接続されるファジングテスト装置であって、
前記テスト対象装置に送信したファズメッセージに対するエラー発生率を算出する第1の算出部と、
算出した前記エラー発生率に応じて、前記テスト対象装置に送信する死活確認メッセージの送信比率を決定する決定部と、
決定した送信比率に応じて、ファズメッセージと、死活確認メッセージとを前記テスト対象装置に送信する送信部と、
を有するファジングテスト装置。
(付記2)
前記ファズメッセージを前記テスト対象装置が受信するまでの第1の時間と、前記死活確認メッセージに対する応答を前記ファジングテスト装置が受信するまでの第2の時間と算出する第2の算出部を有し、
前記決定部は、
前記エラー発生率と、前記第1の時間と、前記第2の時間とに応じて、前記送信比率を決定する、ことを特徴とする付記1に記載のファジングテスト装置。
(付記3)
送信した前記死活確認メッセージに対する応答を前記第2の時間以内に受信しなかった場合、前記テスト対象装置を再起動させるための指示を該テスト対象装置に送信する再起動指示部を有する、ことを特徴とする付記2に記載のファジングテスト装置。
(付記4)
ファズデータが含まれる複数のメッセージを作成するメッセージ作成部と、
作成した前記複数のメッセージを、メッセージ長に応じて、複数の集合に分割する分割部とを有し、
前記第2の算出部は、
前記集合毎に、前記第1の時間と、前記第2の時間とを算出する、ことを特徴とする付記2又は3に記載のファジングテスト装置。
(付記5)
前記集合に含まれるメッセージのメッセージ長の最大又は平均をメッセージ長とする計測メッセージを作成する計測メッセージ作成部を有し、
前記第2の算出部は、
前記集合毎に、前記計測メッセージから作成されたファズメッセージを前記テスト対象装置が受信するまでの第1の時間と、前記計測メッセージから作成された死活確認メッセージに対する応答を前記ファジングテスト装置が受信するまでの第2の時間とを算出する、ことを特徴とする付記4に記載のファジングテスト装置。
(付記6)
前記メッセージ作成部は、
予め決められたルール毎に、該ルールに基づいて前記複数のメッセージを作成する、ことを特徴とする付記4又は5に記載のファジングテスト装置。
(付記7)
前記ファズメッセージは、MQTTプロトコルで規定されたメッセージであって、ファズデータが含まれ、かつ、QoSに0が設定されたメッセージであり、
前記死活確認メッセージは、MQTTプロトコルで規定されたメッセージであって、ファズデータが含まれ、かつ、QoSに1が設定されたメッセージである、ことを特徴とする付記1乃至6の何れか一項に記載のファジングテスト装置。
(付記8)
ファジングによるテスト対象装置と接続されるコンピュータが、
前記テスト対象装置に送信したファズメッセージに対するエラー発生率を算出し、
算出した前記エラー発生率に応じて、前記テスト対象装置に送信する死活確認メッセージの送信比率を決定し、
決定した送信比率に応じて、ファズメッセージと、死活確認メッセージとを前記テスト対象装置に送信する、
処理を実行するファジングテスト方法。
(付記9)
前記コンピュータが、
前記ファズメッセージを前記テスト対象装置が受信するまでの第1の時間と、前記死活確認メッセージに対する応答を前記ファジングテスト装置が受信するまでの第2の時間と算出する処理を実行し、
前記決定する処理は、
前記エラー発生率と、前記第1の時間と、前記第2の時間とに応じて、前記送信比率を決定する、ことを特徴とする付記8に記載のファジングテスト方法。
(付記10)
前記コンピュータが、
送信した前記死活確認メッセージに対する応答を前記第2の時間以内に受信しなかった場合、前記テスト対象装置を再起動させるための指示を該テスト対象装置に送信する、
処理を実行する、ことを特徴とする付記9に記載のファジングテスト方法。
(付記11)
前記コンピュータが、
ファズデータが含まれる複数のメッセージを作成し、
作成した前記複数のメッセージを、メッセージ長に応じて、複数の集合に分割する、
処理を実行し、
前記集合毎に、前記第1の時間と、前記第2の時間とを算出する、ことを特徴とする付記9又は10に記載のファジングテスト方法。
(付記12)
前記コンピュータが、
前記集合に含まれるメッセージのメッセージ長の最大又は平均をメッセージ長とする計測メッセージを作成する、
処理を実行し、
前記集合毎に、前記計測メッセージから作成されたファズメッセージを前記テスト対象装置が受信するまでの第1の時間と、前記計測メッセージから作成された死活確認メッセージに対する応答を前記ファジングテスト装置が受信するまでの第2の時間とを算出する、ことを特徴とする付記11に記載のファジングテスト方法。
(付記13)
予め決められたルール毎に、該ルールに基づいて前記複数のメッセージを作成する、ことを特徴とする付記11又は12に記載のファジングテスト方法。
(付記14)
前記ファズメッセージは、MQTTプロトコルで規定されたメッセージであって、ファズデータが含まれ、かつ、QoSに0が設定されたメッセージであり、
前記死活確認メッセージは、MQTTプロトコルで規定されたメッセージであって、ファズデータが含まれ、かつ、QoSに1が設定されたメッセージである、ことを特徴とする付記8乃至13の何れか一項に記載のファジングテスト方法。
(付記15)
ファジングによるテスト対象装置と接続されるコンピュータに、
前記テスト対象装置に送信したファズメッセージに対するエラー発生率を算出し、
算出した前記エラー発生率に応じて、前記テスト対象装置に送信する死活確認メッセージの送信比率を決定し、
決定した送信比率に応じて、ファズメッセージと、死活確認メッセージとを前記テスト対象装置に送信する、
処理を実行させるファジングテストプログラム。
(付記16)
前記コンピュータに、
前記ファズメッセージを前記テスト対象装置が受信するまでの第1の時間と、前記死活確認メッセージに対する応答を前記ファジングテスト装置が受信するまでの第2の時間と算出する処理を実行させ、
前記決定する処理は、
前記エラー発生率と、前記第1の時間と、前記第2の時間とに応じて、前記送信比率を決定する、ことを特徴とする付記15に記載のファジングテストプログラム。
(付記17)
前記コンピュータに、
送信した前記死活確認メッセージに対する応答を前記第2の時間以内に受信しなかった場合、前記テスト対象装置を再起動させるための指示を該テスト対象装置に送信する、
処理を実行させる、ことを特徴とする付記16に記載のファジングテストプログラム。
(付記18)
前記コンピュータに、
ファズデータが含まれる複数のメッセージを作成し、
作成した前記複数のメッセージを、メッセージ長に応じて、複数の集合に分割する、
処理を実行させ、
前記集合毎に、前記第1の時間と、前記第2の時間とを算出する、ことを特徴とする付記16又は17に記載のファジングテストプログラム。
(付記19)
前記コンピュータに、
前記集合に含まれるメッセージのメッセージ長の最大又は平均をメッセージ長とする計測メッセージを作成する、
処理を実行させ、
前記集合毎に、前記計測メッセージから作成されたファズメッセージを前記テスト対象装置が受信するまでの第1の時間と、前記計測メッセージから作成された死活確認メッセージに対する応答を前記ファジングテスト装置が受信するまでの第2の時間とを算出する、ことを特徴とする付記18に記載のファジングテストプログラム。
(付記20)
予め決められたルール毎に、該ルールに基づいて前記複数のメッセージを作成する、ことを特徴とする付記18又は19に記載のファジングテストプログラム。
(付記21)
前記ファズメッセージは、MQTTプロトコルで規定されたメッセージであって、ファズデータが含まれ、かつ、QoSに0が設定されたメッセージであり、
前記死活確認メッセージは、MQTTプロトコルで規定されたメッセージであって、ファズデータが含まれ、かつ、QoSに1が設定されたメッセージである、ことを特徴とする付記15乃至20の何れか一項に記載のファジングテストプログラム。