(57)【特許請求の範囲】
【請求項１】
ホスト・コンピュータ上で実行される既存のアプリケーションからの第１ユーザ・インターフェースを、クライアント・コンピュータ上で実行される第２ユーザ・インターフェースに変換し、ユーザ・インターフェースが、入力のための１組のプロンプトと出力のための１組の表示から成る、システムであって、
前記ホスト・コンピュータと通信する訓練用コンピュータであって、前記ホスト・コンピュータ上で実行される前記既存のアプリケーション・プログラムの前記第１ユーザ・インターフェースを、該訓練用コンピュータを通じて、同時に処理する第１ユーザが発生する第１組のプロンプトおよび表示を対話的に監視しかつ捕獲するように構成され、前記第１組のプロンプトおよび表示を、前記クライアント・コンピュータ上の前記第２ユーザ・インターフェースを通じて提示するために、前記第１ユーザによって選択された第２組のプロンプトおよび表示に変換するように構成され、更に、前記第１組のプロンプトおよび表示を、前記第２組のプロンプトおよび表示と関連付けて記憶するように構成された、前記訓練用コンピュータと、
前記ホスト・コンピュータおよび前記クライアント・コンピュータと通信する変換用コンピュータであって、前記第１組のプロンプトおよび表示のために、前記既存のアプリケーションの第１ユーザ・インターフェースを監視するように構成され、更に、前記クライアント・コンピュータ上の前記第２ユーザ・インターフェース上で、前記第１組のプロンプトおよび表示と関連付けられた前記第２組のプロンプトおよび表示を表示するように構成された、前記変換用コンピュータと、
を具備し、
これによって、前記クライアント・コンピュータを操作する前記第２ユーザが、前記変換用コンピュータを通じて、前記第２組のプロンプトおよび表示を通じて、前記ホスト・コンピュータ上で実行される前記既存のアプリケーションと相互作用させてなるシステム。
【請求項２】
請求項１記載の装置において、前記訓練用コンピュータおよび前記ホスト・コンピュータは、前記ホスト・コンピュータおよび前記訓練用コンピュータとして動作するように構成された単一のコンピュータである装置。
【請求項３】
請求項１記載の装置において、前記第１ユーザ・インターフェースは、第１の情報量を表示可能な第１情報表示装置を含み、前記第２インターフェースは、第２の情報量を表示可能な第２情報表示装置を含み、前記第１の情報量は前記第２の情報量とは等しくない装置。
【請求項４】
請求項１記載の装置において、前記既存のアプリケーションは、少なくとも２つの別個のコンピュータ・プログラムを含み、前記少なくとも２つの別個のコンピュータ・プログラムは同時に実行される装置。
【請求項５】
請求項１または４記載の装置において、前記第１組のプロンプトおよび表示の前記第２組のプロンプトおよび表示への前記変換は、前記第１組のプロンプトおよび表示の一部を、前記第２組のプロンプトおよび表示として捕獲することを含む装置。
【請求項６】
請求項１または４記載の装置において、前記第１組のプロンプトおよび表示の前記第２組のプロンプトおよび表示への前記変換は、前記第１組のプロンプトおよび表示の一部を捕獲し、前記第２組のプロンプトおよび表示を一連の予め定義されている組のプロンプトおよび表示の１つとして定義することを含み、前記一連の予め定義されているプロンプトおよび表示の前記１つは、前記第１組のプロンプトおよび表示に基づいて選択される装置。
【請求項７】
請求項１または４記載の装置において、前記第１組のプロンプトおよび表示の前記第２組のプロンプトおよび表示への前記変換は、前記第１組のプロンプトおよび表示の一部を捕獲し、前記第２組のプロンプトおよび表示を一連の予め定義されている組のプロンプトおよび表示の１つとして定義することを含み、前記一連の予め定義されているプロンプトおよび表示の前記１つは、前記クライアント・コンピュータ上で相互作用する前記第２ユーザに基づいて選択される装置。
【発明の詳細な説明】
本発明は、対象とするコンピュータから新たなコンピュータへの、ソフトウエア・アプリケーション・ユーザ・インターフェースの統合および変換を、基礎となるアプリケーションを変更せずに行うことに関するものである。
ソフトウエア開発者、システム・インテグレータ、付加価値販売者、およびエンドユーザは、最先端のハンドヘルド・コンピュータや携帯用データ収集端末を利用することを欲している。しかしながら、これらの新しい装置を既存のソフトウエアシステムに組み込むことは、第一に、アプリケーションを実行するコンピュータ・システムはユーザ・インターフェースに最小限の機能性を備えていなければならないため、困難であることが立証されている。例えば、在庫管理システム(inventory system)のユーザ・インターフェースは、２４行ｘ８０文字を表示することができる画面を必要とする場合がある。しかしながら、携帯用端末は４行ｘ４０文字を与えるに過ぎないので、このアプリケーションを直接実行することはできない。ハンドヘルドまたは携帯用端末は、典型的に、必要とされる最小限の機能性を備えていないので、これらは現在のアプリケーションのほとんどを実行することができない。
この問題に対するこれまで解決案は、古いアプリケーションの書き換え、携帯用端末の制約に合った新しいアプリケーションの購入、またはフィールド、プロンプト、および応答を対象のコンピュータ表示装置上の各位置から、携帯用装置上のより使い易い位置に「割り当てる(map)」、個別のマッピング・プログラムの書き込みを含んでいた。古いアプリケーションの書き換えは時間がかかり、費用もかかり、既存のシステムにバグを侵入させる危険性もある。新たなアプリケーションの購入には、多大な費用および危険が伴う。
個別マッピング・プログラムは高価であり、作成に時間がかかり、更に、アプリケーション・プログラムの変更によって、個別マッピング・プログラムにも変更が必要となる可能性があるので、アプリケーションの保守費用が増大することになる。加えて、個別マッピング・プログラムは、同期の問題(synchronization problem)を生じる可能性がある。同期を取る必要性は、タイプ入力を継続して進めている操作者には見えないエラー・メッセージの衝撃について考えれば明白となろう。したがって、個別マッピング・プログラムは、この問題に対する満足のいく解決案とはなっていない。
本発明は、既存のアプリケーションと新たなコンピュータ・システムとの間で、インテリジェントな訓練可能インターフェースとして作用することによって、この問題を解決するものである。その結果、本発明は、既存のコンピュータ・ソフトウエアを、元々はそのために設計されたのではないハードウエアを用いて使用できるようにする。具体的には、本発明は、既存のプログラムとのインターフェースを行い、当該既存のプログラムの表示画面からのデータを処理し、これらのデータを異なる態様および／またはフォーマットでユーザに提示する手段を提供する。同様に、ユーザからのデータを受け入れ、必要であればそのデータをフォーマットし直し、フォーマットし直したデータを既存のアプリケーションに提示する。
本発明の目的の１つは、既存のソフトウエア・アプリケーションのユーザ・インターフェースを変換(translate or convert)し、新たなコンピュータ・システム上で動作できるようにするシステムを提供することである。加えて、本発明の目的は、単純な方式を用いて既存のソフトウエア・アプリケーションのユーザ・インターフェースを変換するように教育または訓練を行うシステムを提供することである。本発明の更に別の目的は、携帯用装置の動作を既存のソフトウエア・アプリケーションのそれに同期させる、同期機構を提供することである。本発明の付加的な目的は、アプリケーション・エラーに対する堅固なエラー処理を提供することである。
発明の概要
本発明によって、必要なレベルのユーザ・インターフェース機能性を備えていないシステム上で、既存のアプリケーション・ソフトウエアを利用することが可能となる。
本発明は、既存のソフトウエア・アプリケーションのユーザ・インターフェースを変換する、訓練可能な装置を開示する。前記装置は、ホスト・コンピュータおよびクライアント・コンピュータ双方と通信するように構成されたコンピュータを含む。前記装置はホスト・コンピュータの入出力ストリームを傍受し、アプリケーションのユーザ・インターフェースをクライアントのユーザ・インターフェースに変換し、クライアント・コンピュータ上で使用できるようにする。前記コンピュータは、更に、アプリケーションのユーザ・インターフェースによって搬送されるタスクの繰り返しや冗長な情報を隠すことによって、ユーザのアプリケーションとの相互作用を簡略化するように構成されている。前記コンピュータは、更に、ホスト・アプリケーションを単一のユーザ・インターフェースに一本化するように構成されている。
前記装置を作成しかつ訓練する方法も開示する。前記装置は、ユーザのアプリケーションとの相互作用を監視することによって訓練される。監視プロセスは、アプリケーションのユーザ・インターフェースを変換するために、前記装置が利用するパス履歴(path history)を作成する。
【図面の簡単な説明】
第１図は、ハンドヘルドまたは携帯用端末を利用する従来技術のコンピュータ・システムのブロック図である。
第２図は、携帯用端末とアプリケーションが対象とする端末との間の機能的な差を示す図である。
第３図は、携帯用端末にインターフェースするために本発明を利用するコンピュータ・システムのブロック図である。
第４図は、教育プロセスの間に作成された仮想ユーザ・パスのブロック図である。
第Ａ図ないし第ＫＫ図は、本発明の一実施例の画面を印刷したものである。
好適実施例の詳細な説明
第１図は、携帯用端末を用いる従来技術のコンピュータ・システムである。コンピュータ・システム１０は、携帯用端末１６に特定して設計されたアプリケーション１２を実行する。このアプリケーション１２は、携帯用端末１６を通じてユーザ１４と相互作用を行う。アプリケーション１２は、赤外線、無線周波数、または直線配線のような通信媒体１８を通じて、携帯用端末１６と通信を行う。携帯用端末１６は、ユーザ１４に、特定の情報を要求するプロンプトを表示する。ユーザ１４はこれらの要求に応答して、携帯用端末１６に回答を入力する。
アプリケーション・プログラムが携帯用端末で動作するように設計されていない場合、ユーザはアプリケーションと対話することができない。例えば、第２図を参照して、アプリケーションが機能キーを含むフル・サイズ・キーボード２１を有する端末２０を必要とし、このキーボードが携帯用端末２２上で使用可能なキーボード２３とは異なる場合がある。また、アプリケーションは、画面サイズが携帯用端末２２上の画面２５よりも大きい端末２４も必要とする場合もある。いずれの状況においても、アプリケーションは、システムにある形の変化を加えることなくては、携帯用端末上で実行することはできない。
第３図は、本発明を利用したコンピュータ・システムを示す。コンピュータ・システム３０は、携帯用端末と共に用いるように設計されたのではないアプリケーション３２を実行する。本発明３４は、アプリケーション３２と携帯用端末３６との間に挿入される。アプリケーション３２は、通信媒体３３を通じて本発明３４と通信を行い、一方、本発明３４は通信媒体３８を通じて携帯用端末３６と通信を行う。ここでも、携帯用端末３６は、ユーザ３９に、特定の情報を要求するプロンプトを表示するが、これらのプロンプトは本発明が発生するのであって、基礎となるアプリケーション３２ではない。ユーザ３９は、これらのプロンプトに応答して、携帯用端末３６に回答を入力するが、これらの回答も本発明３４によって捕獲され、必ずしも直接アプリケーション３２に渡されるのではない。
本発明は、基礎となるアプリケーション・プログラムと同一のコンピュータ・システム上に存在することができ、あるいは別個のコンピュータ・システム内に存在し、ネットワークを通じて当該アプリケーション・プログラムと通信することもできる。いずれの状況においても、本発明は、Ｉ／Ｏストリームを傍受し、ユーザ・インターフェースを変換して、携帯用端末上で使用できるようにする。また、本発明は、既存のプログラムのそれと同一のコンピュータ・システムを通じたアクセスであっても、既存のプログラムまたはプログラム群へのアクセスを簡略化するために用いることもできる。
既存のアプリケーションと携帯用端末との間でインターフェースおよび変換を行うために、本発明は仮想ユーザ（ＶＵ：virtual user）を作成する。ＶＵは、既存のアプリケーションには実際のユーザとして見える。ＶＵを訓練して、丁度実際のユーザが行うように、既存のアプリケーションを処理させて、携帯用端末と互換性のあるフォーマットで、実際のユーザにデータを提示する。
アプリケーションを処理している間の人間のユーザの相互作用を監視することによって、最終システムにおける使用に先だって、ＶＵを作成する。バックグラウンドでは、本発明は「パス・ファイル(path file)」を作成し、ＶＵは、これを用いて、自動的にアプリケーション内の特定のタスクを通じて移動する(navigate)。パス・ファイルは、訓練プロセスの間に作成された一連の自動発生された「ステップ」から成り、ＶＵは後にこれらを線形または分岐シーケンスで実行することによって、アプリケーション中を移動する。アプリケーションにおけるあらゆるカーソルの停止は、ＶＵによって再検討され、少なくとも１つのステップ、恐らく一連のステップが、この停止と関連付けられる。
本発明は、ＶＵの作成を容易にする３つの特徴を備えている。第１に、本発明は、メニュー先導型インターフェース(menu driven interface)を利用し、ＶＵを作成するプロセスを容易にすることによって、プロセスを、「オフ・ライン」ではなく、対話式(interactive)にしている。ユーザは、古典的な意味でプログラムする必要はなく、単にアプリケーションと対話すればよい。
第２に、ＶＵは、基礎となるアプリケーション上では使用できない機能を作成し利用することができる。本発明は単に予め定義されているステップ集合に従うだけなので、人が入力可能なあらゆるキーストロークの組み合わせは、ＶＵも行うことができる。これによって、ＶＵを訓練または教育して、アプリケーション全体にわたる移動、異なるアプリケーションへの出入り、更に異なるホストへのアクセスおよび退出さえも可能となる。例えば、あるアプリケーションが２つのメニュー選択肢を有するとする。第１のメニューは手持ちの項目の量を掲示し、第２のメニューは項目の位置を掲示するものとする。アプリケーションに直接アクセスする典型的なユーザは、第１のメニュー選択肢に入って量を得て、第１メニュー選択肢から出て、第２メニュー選択肢に入って位置を得ることによって、双方の情報を得る。ＶＵは、これと同じステップを行うように訓練可能であるが、双方の情報を有する１つの画面をユーザに提示することもできる。したがって、本発明は、特定のアプリケーションを「書かれているように直接」実行するのではこれまで得られなかった新しい機能を、ユーザに作成することができる。
第３に、本発明はストリーム監視を設け、これによって、ＶＵはそれ自体をアプリケーションと同期させることができる。ＶＵは、ホストにいずれのキーストロークを返送する前でも、あらゆるアプリケーションのカーソル停止と同期を取らなければならない。ストリーム監視を用いることによって、ＶＵは現在のカーソル位置を認識し、それによってどのアプリケーションの画面をそれが「見ている」のかを判断することができる。
仮想ユーザの作成および訓練
アプリケーションのユーザ・インターフェースを変換するためには、ＶＵを作成し教育しなければならない。
以下に示すのは、教育プロセスの間本発明のメニュー・バーの選択肢ファイル(FILE)、変数(VARS)、ホスト(HOST)、クライアント(CLIENT)およびその他(MISC)からアクセス可能な全コマンドのリストである。
ファイル・メニュー
Save path File:   作成したステップをパス・ファイルにセーブするが、終了しない。
Save & Exit:      パス・ファイルをセーブし、終了する。
Quit:             セーブせずに終了する。
Save Window:      後に印刷するために、あらゆる画面の画像をセーブすることができる。
変数メニュー
Declare Variable:    作成したパス・ファイル内で使用する変数を宣言する。
Set Variable:        既に宣言済みの変数を初期値に初期化する。
Branch on Variable:  ここで定義し、ファイルされたto match"と変数が等しいときに、プログラムが分岐するパス名(path name)を定義する。注意："No. "はパス内のステップ＃を選択する。
ホスト・メニュー（初回）
Control Local (PTY):   ホスト・アプリケーションへの接続方法を、ＶＵが実行しているのと同一コンピュータへの疑似端末(pseudo terminal)アクセスとして定義する。
Connect Local (Pipe):  ホスト・アプリケーションへの接続方法は、ＶＵが実行しているのと同一コンピュータへのパイプ(pipe)を介してであることを定義する。
Connect via TELNET:    ホスト・アプリケーションへの接続方法は、テルネット(telnet)を介してであることを定義し、この場合、アプリケーションはＶＵとは異なるコンピュータ上で実行している。
Connect via Serial:    ホスト・アプリケーションへの接続方法は、ＶＵが実行しているコンピュータ上の直列ポートを介してであることを定義する。
ホスト・メニュー
Send to Host:  いずれのキーストロークの組み合わせもホストに送る。
Wait for Host:   ＶＵとホスト・アプリケーションとが、所与の時刻において所与のアプリケーションの正確に同一文字にあることを確実にする同期ステップ。
Save Host Screen Data:  ホスト画面の特定のウインドウ(window)をセーブする。毎回画面の同一ライン上に現われるエラー・メッセージをセーブするためにしばしば用いられる。
Bypass Virtual User:   相互作用訓練を停止し、ホスト・アプリケーションへ直接データを入力させる。
クライアント・メニュー
Clear Screen:  画面をクリアするためのコマンド・シーケンスを送る。
Sound Tone:    ベル・トーンを鳴らすためのコマンド・シーケンスを送る。
Move Cursor:  クライアントの画面のｘ、ｙ座標へカーソルを動かすコマンド・シーケンスを送る。
Send Cursor:  表示のために、クライアントに文字列を送る。
Get Replay:   クライアントからの回答を要求する（スキャナまたはキーボード入力）。
ＭＩＳＣメニュー
Start New Path:   現ステップをパスの始点として定義する。以下の接続ステートメント(connect statement)を用いるときに、接続点(connect point)として用いられる。
End Path:         パスの終点を定義する。
Connect (Loop):   上述の"Start New Path"選択肢を用いて指定したパス・レベルに、プログラム・フローの方向を変える。
Exec Procedure:   プログラム制御を予め定義されている手順に渡すことを可能にする。端末モード(Terminal Mode)、ログオン(Logon)等に手順が使用可能である。
上で定義したメニュー・バーからの種々の選択肢を選択することによって、ＶＵを訓練するアプリケーションにアクセスすることができる。アプリケーションにアクセスした後、ＶＵを対話式に訓練し、アプリケーションにおけるプロンプトに適切に反応させるようにすることができる。
重要な概念はアプリケーション・プログラム・フロー(application program flow)である。アプリケーション・プログラム・フローは、特定のアプリケーションの使用のために従わなければならない、一連のデータ入力プロンプトである。これらのプロンプトは、メニュー選択、データおよび時刻入力、およびアプリケーションを処理するために必要な他の入力を含む。本発明は、誰がどのようにアプリケーションと対話したか（例えば、仮想ユーザ）を予め定義し、憶えておく方法を提供する。
いずれかのアプリケーションを使用する人にとっての第１ステップは、アプリケーションとどのように相互作用するかについての訓練を受けることである。ＶＵは、しかしながら、繰り返しのキーストローク・シーケンス、アクセス時刻およびデータ情報を憶えておき、どのようにそれを行うかを決して忘れないように訓練することができる。ＶＵは、アプリケーションが行うカーソル停止(cursor stop)にどのように反応するかについての訓練を受けなければならない。カーソル停止／プロンプトにどのように反応するかについて訓練を受けた後、ＶＵはアプリケーション内の同一機能をそれ自体で処理できるようになる。
データ入力を容易にするために、ＶＵには、クライアント・データ入力のためのプロンプトに対する訓練を行わなければならない。クライアントは、操作者がデータを入力する端末（ＲＦハンドヘルド、通常の端末等）である。ＶＵは、アプリケーション内でプログラミングの変更を全く行う必要なく、当該アプリケーションの処理を簡略化する。ＶＵは、大多数のアプリケーションのカーソル停止／プロンプトを自動化し、手持ちの特定のタスクに対して要求された情報のみをクライアントに渡すことによって、これを行う。アプリケーション中の各カーソル停止において、クライアントにデータを催促するか、あるいはメニュー・バーが許す他の機能のいずれかを行う選択肢がある。この選択肢によって、ＶＵは所与のアプリケーションのカーソル停止に対するその応答を変更することができる。このように、本発明は、ステップの実行において確実に分岐が行えるようにする。
以下に示すのは、典型的な仮想ユーザ訓練セッションの基本ステップのリストである。
１）ホスト接続／ログオン／アプリケーション・アクセス
２）クライアント・メニュー
３）ホスト・アプリケーション・アクセス
４）アクセス・メニュー間の自動移動
５）クライアント・データ入力の催促
６）クライアント・データに基づく分岐およびエラー命令
７）再びクライアント・タスクを開始するための繰り返し、またはクライアント・メニューへの帰還。
実行しようとしているいずれかの機能に対して、これらの部分を繰り返すことにより、簡略化されたユーザ入力画面を携帯用端末操作者のために作成することができる。ＶＵは単に人と同じように、アプリケーション中を６６ＭＨｚ（コンピュータのクロック速度）で移動するだけなので、人が折好く実行できることを期待できないタスクを行うように、それを訓練することができる。この簡単な概念によって、あるアプリケーション（いくつかの異なるアプリケーションでもよい）のいくつかのメニュー選択肢からの機能を纏めて、元のアプリケーションにも存在し得ない、単一の操作者画面を作成することができるようになる。
これらのステップ各々の詳細は、以下の訓練セッションの例を通じてより明確となろう。以下の例で引用する図は、３つの重要な領域を示していることに注意されたい。各図は、本発明の訓練画面を表わす。図の上部には、第Ａ−ａ図に示すように、上述の機能メニューにアクセスするために用いるメニュー・バーがある。図の真ん中にあるのは"Client"と標記されたモデル・クライアント・ウインドウであり、第Ａ−ａ図に示すように、クライアント・コンピュータ・システム上の画面の大きさおよび形状を反映する。この画面は、スペック・ファイルにおいて定義される。スペック・ファイル(spec file)の一例が、補足資料Ｂとして含まれている。最後に、"HOST"と標記された"Host Window Shade（ホスト・ウインドウ・シェード）"が必要に応じてポップアップ(pop up)され、ホストが送ったメッセージおよびプロンプトを示す。これは、第Ｉ−ｃ図に示されている。CLIENT、HOSTおよび本発明のメニューは、教育プロセスの間のシステム状態を示す。教育プロセスが終了したとき、完成したＶＵは訓練された通りに動作する。
仮想ユーザ訓練／教育セッションの例
以下に述べるのは、ＶＵの作成を例示するために、実際のユーザによって実行される簡単なアプリケーション例である。以下の説明において、［］はプルダウン・メニューを用いて選択すべき選択肢を表わすか、あるいは押圧する実際のキーを表わすために用いられる。例えば、Select [Start New Path]は、プルダウン・メニューの中の選択肢"Start New Path"を強調することを意味し、press [end]は、エンド・キーを押圧することを意味する。
ステップ０：（第Ａ−ａ図から第Ａ−ｄ図）
Ｍｉｓｃ．メニューにアクセスし、[Start New Path]を選択する。開始しようとしているパス(path)の名称を定義しなければならない。これは、ループ処理および分岐制御には重要である。パス名は、分岐およびループ・アクセスのためのパス内の地点を指定する。この例では、name [main_menu]が選択されているが、これがメイン・メニューを表示する地点であるからである。
ステップ１：（第Ｂ−ａ図から第Ｂ−ｂ図）
クライアント・メニューにアクセスし、[Move Cursor]を選択する。これは、クライアント・ウインドウの中のカーソル位置を設定する。デフォルト設定である行：１および列：１が選択されている。クライアント・ウインドウ内のカーソルは、ｘ，ｙ位置即ち１，１に結果として移動する。
ステップ２：（第Ｃ−ａ図から第Ｃ−ｂ図）
クライアント・メニューにアクセスし、[Clear Screen]を選択する。その結果、クライアント画面はクリアされる。
ステップ３：（第Ｄ−ａ図から第Ｄ−ｈ図）
クライアント・メニューにアクセスし、[Send Message]を選択する。サブメニューが表示される。タイプ・サブメニューにアクセスし、[Text]を選択し、クライアント画面上に表示されるメッセージを入力する。この例では、[Do you want to run the program y/n（このプログラムを実行したいですか。  はい／いいえ）]というメッセージを入力する。この時点で、文章[Do you want to run the program y/n]が、クライアント画面上に納まるように適切な長さのラインに分割されて、クライアント画面上に表示される。こうして、システムはクライアントからの回答を受ける用意が完了する。
ステップ４：（第Ｅ−ａ図から第Ｅ−ｃ図）
変数メニューにアクセスし、[Declare Variable]を選択する。クライアントからのステップ３における質問に対する応答を記憶することによって、変数を宣言することができる。変数名[answer]を入力する。
ステップ５：（第Ｆ−ａ図から第Ｆ−ｂ図）
クライアント・メニューにアクセスし、[Get Reply]を選択する。[answer][tab][1]とタイプし、"answer"を変数として入力する。クライアントからの応答を記憶し、最大長を１文字に等しく設定する。尚、編集上の間違いに対して通常期待されるように、[backspace]がここで機能することを注記しておく。
ステップ６：（第Ｇ図）
定義する必要のある選択肢が２つある。第１に"y"即ち肯定の応答であり、通常、典型的な訓練手順であれば、アプリケーションを処理するために必要とされる「通常の」パスを通過することになる。この場合、通常とは"y"を意味するので、"y"で応答する。後にこの例において、"n"に対する訓練を入力することができる。
ステップ７：（第Ｈ−ａ図から第Ｈ−ｃ図）
変数にアクセスし、[Branch on Variable]を選択する。[answer][tab][y][tab][start_rw][tab]とタイプする。これは以下の動作を定義する。変数"answer"が値"y"に等しい場合、"start_rw"と命名されたパスに進む。次のメニューで[d]を選択し、パス名を宣言する。このとき"n"の動作も定義してよい。[n][tab][exit][tab][d]と入力する。これによって、"answer"が"n"のときパス"exit"が実行されることになる。
ここで、"start_rw"と命名されたパスが作成される。
ホスト接続／ログオン／アプリケーションへのアクセス：この訓練例では、同一のホスト上でアプリケーションと本発明の双方を実行する。したがってアプリケーションのことを、異なる即ち遠隔ホスト(remote host)に対して、ローカル・ホスト(local host)上での実行と呼ぶ。以下の命令は、ローカル・ホスト上のみで疑似端末（ＰＴＹ）を通じてアプリケーションへアクセスする場合に適用される。本発明を実行するために、ローカル・ホストをログオンしなければならない。したがって、この接続方法を用いれば、アプリケーションにアクセスする前に、ホストにログオンする必要はない。他の接続方法については、適用可能な項を参照されたい。
パス名：  start_rw
ステップ０：（第Ｉ−ａ図から第Ｉ−ｃ図）
ホスト・メニュー選択肢にアクセスする。一旦メニュー・バーに「入った」なら、移動のためには矢印キーを使用すればよい。ホストのウインドウ・シェード(window shade)を「プルダウン(pull down)」するには、下向きの矢印を使用する。[Connect Local (PTY)]を強調し、[enter]を押圧することによって、この選択肢を選択する。すると、コマンドの催促を受ける(:Command)。通常用いているキーを入力して、アプリケーションにアクセスする。実世界では[go-rw]とタイプすると、"Argument:"を残すことができる。空白を一列に並べ、[end]を押圧することによって、このステップを完了する。[end]を押圧すると、仮想ユーザが、ホストへのコマンド・ライン入力として、操作者のキーストロークを送ってくることに気が付くであろう。この時点で、端末（中間）ウインドウ内の実世界アプリケーションの第１画面を見ることになる。
[Exec Procedure]を使用する代替案
ステップ０：
Ｍｉｓｃメニューにアクセスし、[Exec Procedure]を選択する。[go_rw][end]とタイプする。
アクセス・メニュー中の自動化された移動：この時点で、仮想ユーザに、どのようにアプリケーション中を移動するかについて訓練させる準備が整っている。おわかりのように、カーソル停止(cursor stop)において実行される第１ステップは、「ホストを待つ(Wait for Host)」ステップである。この処理は、仮想ユーザおよびホスト・アプリケーションが互いに同期していることを確認するためのものである。ホストに情報を送ろうとすると、まず「ホストを待つ」を実行するように要求される。クライアント入力を催促する順序は、完全に操作者次第である。この指導は基本的指針に従うものである。
パス名：nav_menus
ステップ０：（第Ｊ−ａ図から第Ｊ−ｃ図）
Ｍｉｓｃメニューにアクセスし、[Start New Path][enter]を選択する。[nav_menus][end]とタイプする。注意：[nav_menus]は１名称として選択された。何故なら、このパスは所望のトランザクションにアクセスするために必要なメニュー中を移動するからである。この名称には下線(underscore)が必要であり、空間は許されない。
ステップ１：（第Ｋ−ａ図から第Ｋ−ｃ図）
ホスト・メニューにアクセスし、[Wait for Host]を選択する。[enter]を押圧し、下向き矢印を使用して[automatic]を選択し、[enter][enter]を押圧する。この時点で、文字列"o continue, or ESC to exi"がホスト画面の底部に現われるための自動ホスト同期が確認されている。
ステップ２：（第Ｌ−ａ図から第Ｌ−ｃ図）
ホスト・メニューにアクセスし、[Send to Host]を選択する。サブメニューにおいて、[Special Char(s)]を選択する。[enter]を押圧すると、ウインドウ内に<cr>が見え、[.][enter]を押圧する。必要な場合には[tab]キーを用いて編集を行う。[end]を押圧してこのステップを活性化する。アプリケーションがＶＵのキャリッジ・リターンに対して次の画面で応答するのを見て、ここで頭文字を入力しなければならない。
ステップ３：（第Ｍ図）
ステップ＃２におけるシーケンスを用いることによって、１組の頭文字を容易に「ハードコード化(hardcode)」することができる。あるいは、クライアントに「ユーザの頭文字」を催促することもできる。クライアントにユーザの頭文字を催促するために、以下のように処理を進める。クライアント・メニューにアクセスし、下向き矢印を用いて[Clear Screen]を選択する。この時点でクライアント画面は空白になり、古いプロンプト"Real World (y/n)?"が端末ウインドウの背後に隠されるので、全く変化を見ることができない場合がある。
パス名：item_transfer
ステップ０：（第Ｎ−ａ図から第Ｎ−ｃ図）
Ｍｉｓｃメニューにアクセスし、[Start New Path]を選択する。パスの名称として、[item_transfer]とタイプする。このパスは、クライアントに情報を催促し、項目転送トランザクションを完了する。プログラムは、最後のパス"access"を新たなパス"item_transfer"に連結する選択肢を操作者に与える。[n]を押圧して、"link to New Path"を選択する。
ステップ１：（第Ｏ図）
先のステップにおけるように、画面をクリアする。クライアント・メニューにアクセスし、[Clear Screen]を選択する。ここで、クライアント画面は空白となっているはずである。
ステップ２：（第Ｐ図）
上述のように、クライアント・メニューにアクセスし、[Move Cursor]を選択する。行１および列１を選択する。この時点で、カーソルは、クライアント画面上のｘ，ｙ位置１，１において点滅するはずである。
ステップ３：（第Ｑ−ａ図から第Ｑ−ｂ図）
クライアント・メニューにアクセスし、[Send Message]を選択する。サブメニュー内で[Text]を選択する。この時点で、クライアント画面上に表示すべきメッセージを入力する。[item:]を入力する。プロンプト"item:"がここでクライアント画面上に現われる。
ステップ４：（第Ｒ図）
先と同様、変数メニューにアクセスし、[Declare Variabale]を選択する。この時点で、クライアントの応答を項目プロンプトに記憶するための変数が宣言される。名称[item]を変数の名称として入力する。
ステップ５：（第Ｓ−ａ図から第Ｓ−ｂ図）
クライアント・メニューにアクセスし、[Get Reply]を選択する。この時点で、クライアントからの回答が入力され、変数"item"に記憶される。[item][tab][10]と入力し、クライアントの応答に対する変数としての"item"を入力し、最大長１０文字が許される。メニュー・バーは、"Waiting for Client Input at Client or here（クライアントまたはここにおいて、クライアント入力を待つ）"と置き換えられる。有効な項目名をここで入力する。
パス名：  Update_host
ステップ０：（第Ｔ図）
Ｍｉｃｓメニューにアクセスし、[Start New Path]を選択する。この一連のステップに対する新たなパス名として、[update_host]とタイプする。このパスは、"item_transfer"パスの下で受信した応答を用いて、ホストを更新する。
ステップ１：（第Ｕ図）
先と同様、クライアント・メニューにアクセスし、[Clear Screen]を選択して、この時点での画面をクリアする。
ステップ２：（第Ｖ図）
先と同様、クライアント・メニューにアクセスし、[Move Cursor]を選択する。行１および列１を新たな位置として選択する。クライアント・ウインドウ内のカーソルは、この時点で、ｘ，ｙ位置１，１に配置されるはずである。
ステップ３：（第Ｗ図）
先と同様、クライアント・メニューにアクセスし、[Send Message]を選択する。サブメニューにおいて[Text]を選択する。ここで、クライアント画面上に表示すべきメッセージを入力する。[Processing Data（処理データ）]を入力する。ここで、クライアント画面上に、プロンプト"Processing Data"が表示される。
ステップ４：（第Ｘ−ａ図から第Ｘ−ｂ図）
ホスト・メニューにアクセスし、[Wait for Host]を選択する。[automatic]を選択する。これにより、この時点で、ホストとクライアントとを自動的に同期させることになる。"item_error"の"None of the above"パスにおいて、エラー処理が設けられること、および、１００ｘ．１秒＝１０秒に、タイム・アウトを設定することを注記しておく。したがって、エラー状態では、応答がないまま１０秒経過すると、item_errorが実行される。
ステップ５：（第Ｙ−ａ図から第Ｙ−ｂ図）
ホスト・メニューにアクセスし、[Send to Host]を選択する。ここで、変数"item"がホストに送られる。サブメニューから[Variable]を選択し、ホストに送る変数として、[item]とタイプする。サブメニューから[Special Char(s)]を選択し、[cr]を入力する。これによって、キャリッジ・リターンがホストに渡される。
パス名：item_error
ステップ０：（第Ｚ−ａ図から第Ｚ−ｂ図）
データが入力され、それによってアプリケーションがそのエラー処理ルーチンに入ったので、カーソルはもはや第２のプロンプト"warehouse"近くにあるその通常の「次の入力(next entry)」位置にはない。代わりに、メッセージ"Press Enter or F8（EnterまたはF8を押圧する）"と共に、画面の右下側角に位置している。画面の左側角には、エラー・メッセージ"Item not on file（項目はファイル上にない）"が表示されていることを注記しておく。"update_host"のステップ４は、"non of the aboave"条件が真である場合に使用するパスとして定義された、"item_error"という名称のエラー処理サブルーチンを有していた。したがって、エラー状態を処理するために、制御は"item_error"に渡されている。ホストにアクセスし、[Wait for Host]を選択する。これで、自動ホスト同期の確認が行われたことになる。
ステップ１：（第ＡＡ図）
先と同様、変数メニューにアクセスし、[Declare Variable]を選択する。この変数は、ホスト画面上で現在"error window（エラー・ウインドウ）"内にあるホスト・データを記憶する。[item_error]とタイプし、変数"item_error"を定義し、これを次のステップで使用する。
ステップ２：（第ＢＢ図）
ホスト・ウインドウ・シェードを選択し、"save host data（ホスト・データをセーブする）"を選択する。ステップ１で宣言した変数を入力し、矢印キーを用いて、画面上のエラー・メッセージを覆うように「ウインドウ」を移動する。シフト「＋」または「−」キーを用いて、"Save Host Screen Data"ボックス内の角括弧によって定義されている「ウインドウ」のサイズの拡大または縮小を行う。
ステップ３：（第ＣＣ図）
先と同様、クライアント・メニューにアクセスし、[Clear Screen]を選択する。これで、クライアント・スクリーンはクリアされるはずである。
ステップ４：（第ＤＤ図）
先と同様、クライアント・メニューにアクセスし、[Move Cursor]を選択する。行を１に、そして列を１に設定する。クライアント画面において、カーソルはｘ，ｙ位置１，１に移動するはずである。
ステップ５：（第ＥＥ図）
クライアント・メニューから[Sound Tone]を選択する。クライアントにトーンが発せられ、ユーザにエラーを通知する。
ステップ６：（第ＦＦ図）
先と同様、クライアント・メニューにアクセスし、[Send Message]を選択する。サブメニューから[Variable]を選択する。"item_error"を変数名として入力し、[Special Char(s)]を選択し、キャリッジ・リターンおよびライン・フィードを定義し、テキストの次の行がエラー・メッセージを上書きしないようにする。[Text]を選択し、クライアント画面上で表示したいメッセージを入力する。[Special Char(s)]を選択し、キャリッジ・リターン、ライン・フィードおよび表示すべきメッセージの最後の部分を入力する。この例では、"<cr><lf> Press ENTER to <cr><lf> continue:"という内容である。
ステップ７：（第ＧＧ図）
上述のステップにおいて示したように、新たな変数"answer"を宣言し、継続するためにクライアントからENTERキーを得る。
ステップ８：（第ＨＨ図）
以前のステップにおいて示したように、クライアントの回答を得る。
ステップ９：（第ＩＩ図）
プロンプトに対するクライアントの応答を待つ。
ステップ１０：（第ＪＪ図）
クライアントから入力されたばかりの"answer"を送る前に、ホストを待つ。
ステップ１１：（第ＫＫ−ａ図から第ＫＫ−ｂ図）
この時点では、ホストは項目入力プロンプトに戻っている。Ｍｉｓｃメニューにアクセスし、[Loop]を選択し、このエラー・パスをitem_transferの先頭に接続し、再度クライアントに項目番号を催促する。
あらゆるエラー状態もこの技術を用いることによって処理可能であることを注記しておく。"Wait for Host"ダイアログ・ボックスの"Possible Response"領域のいずれかを用いることも、同等に正しい。したがって、５つの付加的な「既知の」応答を宣言し、上述と同様に「訓練」することができる。全ての条件で用いる１つのエラー応答についてのみ、ＶＵを訓練したい場合、"none of the above"選択肢が最適である。
第４図は、上述の例において記載した種々のパスの相互接続を示す。上述のように訓練されたＶＵは、この時点では、前記アプリケーション例と携帯用端末との間のインターフェースとして使用できるよう準備が整っている。
パス・ファイル・プリミティブ(Path File Primitives)
パス・ファイルは、ＶＵの教育プロセスの間に捕獲した一連のステップおよびコマンドを指定する。補足資料Ａは、先に例示したＶＵの例に対するパス・ファイルを含む。以下のプリミティブは、ホスト・プログラムの挙動および人の操作者との相互作用を記録するために用いられる。
Ｓｅｎｄａｃｔ：  端末パス・ファイル
$cl_connect:      クライアントの接続を確保する。
$cl_clear:        クライアントの画面をクリアする。
$cl_tone:         クライアント上でベル・トーンを鳴らす。
$cl_move:         クライアントのカーソルを位置付ける。
$cl_send:         クライアントにデータを送る。
$cl_get:          クライアントからデータを得る。
$cl_discon:       クライアントとの接続を切断する。
$host_send:       ホスト・アプリケーションにデータを送る。
$host_connect:    ホスト・アプリケーションへの接続を確保する。
$host_discon:     ホスト・アプリケーションとの接続を切断する。
$host_save:       エミュレーション領域からのデータを記憶する。
$host_sync:       ホストの動作を監視し、挙動データベースと比較する。
$declare:         記憶変数を宣言する。
$param:           システム・パラメータとして変更する。
$set:             変数の値を変える。
$pipe:            クライアントとホスト・アプリケーションとの間で透明な接続を確保する。
$new_path:        新たな一連の動作を開始する。
$loop:            制御を移転する。
$done:            パスを終了する。
$vbranch:         変数値に応じた条件付き分岐を行う。
$exec:            プログラム手順を実行する。
スペック・ファイル・プリミティブ(Spec File Primitive)
スペック・ファイルは、ＶＵによって使用するためのシステム依存情報を捕獲する。補足資料Ｂは、先に例示したＶＵの一例に対するスペック・ファイルを含む。「プログラム・レベル」インターフェースでは、以下のプリミティブに対応している。
nop:         動作なし
mark:        プログラム位置にラベルを付ける。
label:       プログラム位置にラベルを付ける。
begin:       プログラム構造を起動する。
end:         プログラム構造を終了する。
write:       ホストまたはクライアントにデータを出力する。
display:     クライアントにデータを出力する。
send:        ホストにデータを出力する。
file_write:  ディスク・ファイルにデータを出力する。
get:         クライアントからのデータを入力する。
read:        データを入力する。
find:        エミュレータ画面上にデータを配置する。
if:          条件付き実行。
else:        条件付き実行。
endif:       条件付き実行。
declare:     記憶変数を宣言する。
param:       システム構成を設定する。
set:         変数の値を設定する。
eof:         スペック・ファイルを終了する。
connect:     クライアントまたはホストへの接続を確保する。
disconnect:  接続を切断する。
monitor:     ホストまたはクライアントからのデータを監視し、予測したデータと比較する。
pipe:        ホストまたはクライアントとモニタとの間でデータを転送する。
configure:   エミュレーション、クライアントＩ／Ｏ、またはホストＩ／Ｏ構成を設定する。
sleep:       遅らせる。
capture:     訓練モードを入力する。
include:     サブファイルからコマンドを挿入する。
declare_action:  パスファイルを処理し記憶する。
run_action:  パスファイルを実行する。
file_open:   ディスク・ファイルを開く。
file_close:  ディスク・ファイルを閉じる。
spawn:       システム・コマンドをサブプロセスとして実行する。
goto:        フロー制御
loop:        フロー制御
break:       フロー制御
exit:        フロー制御
gosub:       フロー制御
return:      フロー制御
next:        フロー制御
then:        フロー制御
上述の例によって開示したように、既存のプログラムの処理は、実際のユーザではなく、仮想ユーザ・プログラムが行う。したがって、以下の機能に対応する。
１．実際のユーザから得たデータのシーケンスおよびフォーマットは、元のプログラムによって要求されたものとは異なっていてもよい。
２．ユーザ・データを他のデータ源からのデータと組み合わせて、既存のアプリケーションに提示することができる。
３．単一ホスト上または多数のホスト・コンピュータからであっても、所与のアプリケーションまたは多数のアプリケーションの多数の機能からのデータを組み合わせ、ユーザに提示することができる。また、ユーザの対話があってもなくても、あるホスト・アプリケーションから他のアプリケーションにデータを渡すことができる。これによって、新たなアプリケーション・プログラムを書くことなく、新しく、より複雑な機能の生成が可能となる。
４．対話式リアル・タイム、メニュー先導方式で、仮想ユーザの訓練を行う。本発明は、目標ホスト・アプリケーションの実際の挙動を監視し、この挙動の詳細を記憶して、将来参考にする。ホストのプログラム挙動の多くの面が記録され、それには、実際のデータ・ストリームのキー要素や、エミュレートされた画面表示の内容が含まれる。この挙動データベースは、ＶＵモデュールによって使用され、連続的にホスト・プログラムを処理する（エラー状態の検出および解釈を含む）と共に、人の操作者に提示するためのデータ源として使用され、および／またはアプリケーション内の異なるデータ入力画面および／または異なるホスト・アプリケーションに渡される。
５．ＶＵモデュールは、ホスト・プログラムによる予測しなかった動作を検出し、それらを例外状態として操作者に報告し、および／またはその挙動および必要な応答を学習する。
本発明はＡＮＳＩ  Ｃプログラミング言語で実施した。本発明は、４８６クラスのワークステーション上で動作する、ＳＣＯ  Ｕｎｉｘオペレーティング・システム(Stanta Crus, CA)の下で実行する。クライアントの携帯用端末は、ＡＮＳＩまたはＶＴ１００端末エミュレータを実行可能であれば、いかなる装置でもよい。このような装置には、Ｊａｎｕｓ  Ｊ２０１０  Ｈａｎｄｈｅｌｄ(Everett, WA)がある。
本発明は、その精神または本質的な特性から逸脱することなく、他の特定形態においても具現化が可能であることは、当業者には認められよう。したがって、ここに開示した実施例は、いかなる意味においても、例示的なのであって制限的ではないと解釈されるものとする。
0003683586.tif 000002
0003683586.tif 000003
0003683586.tif 000004
0003683586.tif 000005
【図１】
0003683586.tif 000006
【図２】
0003683586.tif 000007
【図３】
0003683586.tif 000008
【図４】
0003683586.tif 000009
【図Ａ−ａ】
0003683586.tif 000010
【図Ａ−ｂ】
0003683586.tif 000011
【図Ａ−ｃ】
0003683586.tif 000012
【図Ａ−ｄ】
0003683586.tif 000013
【図Ｂ−ａ】
0003683586.tif 000014
【図Ｂ−ｂ】
0003683586.tif 000015
【図Ｃ−ａ】
0003683586.tif 000016
【図Ｃ−ｂ】
0003683586.tif 000017
【図Ｄ−ａ】
0003683586.tif 000018
【図Ｄ−ｂ】
0003683586.tif 000019
【図Ｄ−ｃ】
0003683586.tif 000020
【図Ｄ−ｄ】
0003683586.tif 000021
【図Ｄ−ｅ】
0003683586.tif 000022
【図Ｄ−ｆ】
0003683586.tif 000023
【図Ｄ−ｇ】
0003683586.tif 000024
【図Ｄ−ｈ】
0003683586.tif 000025
【図Ｅ−ａ】
0003683586.tif 000026
【図Ｅ−ｂ】
0003683586.tif 000027
【図Ｅ−ｃ】
0003683586.tif 000028
【図Ｆ−ａ】
0003683586.tif 000029
【図Ｆ−ｂ】
0003683586.tif 000030
【図Ｇ】
0003683586.tif 000031
【図Ｈ−ａ】
0003683586.tif 000032
【図Ｈ−ｂ】
0003683586.tif 000033
【図Ｈ−ｃ】
0003683586.tif 000034
【図Ｉ−ａ】
0003683586.tif 000035
【図Ｉ−ｂ】
0003683586.tif 000036
【図Ｉ−ｃ】
0003683586.tif 000037
【図Ｊ−ａ】
0003683586.tif 000038
【図Ｊ−ｂ】
0003683586.tif 000039
【図Ｊ−ｃ】
0003683586.tif 000040
【図Ｋ−ａ】
0003683586.tif 000041
【図Ｋ−ｂ】
0003683586.tif 000042
【図Ｋ−ｃ】
0003683586.tif 000043
【図Ｌ−ａ】
0003683586.tif 000044
【図Ｌ−ｂ】
0003683586.tif 000045
【図Ｌ−ｃ】
0003683586.tif 000046
【図Ｍ】
0003683586.tif 000047
【図Ｎ−ａ】
0003683586.tif 000048
【図Ｎ−ｂ】
0003683586.tif 000049
【図Ｎ−ｃ】
0003683586.tif 000050
【図Ｏ】
0003683586.tif 000051
【図Ｐ】
0003683586.tif 000052
【図Ｑ−ａ】
0003683586.tif 000053
【図Ｑ−ｂ】
0003683586.tif 000054
【図Ｒ】
0003683586.tif 000055
【図Ｓ−ａ】
0003683586.tif 000056
【図Ｓ−ｂ】
0003683586.tif 000057
【図Ｔ】
0003683586.tif 000058
【図Ｕ】
0003683586.tif 000059
【図Ｖ】
0003683586.tif 000060
【図Ｗ】
0003683586.tif 000061
【図Ｘ−ａ】
0003683586.tif 000062
【図Ｘ−ｂ】
0003683586.tif 000063
【図Ｙ−ａ】
0003683586.tif 000064
【図Ｙ−ｂ】
0003683586.tif 000065
【図Ｚ−ａ】
0003683586.tif 000066
【図Ｚ−ｂ】
0003683586.tif 000067
【図ＡＡ】
0003683586.tif 000068
【図ＢＢ】
0003683586.tif 000069
【図ＣＣ】
0003683586.tif 000070
【図ＤＤ】
0003683586.tif 000071
【図ＥＥ】
0003683586.tif 000072
【図ＦＦ】
0003683586.tif 000073
【図ＧＧ】
0003683586.tif 000074
【図ＨＨ】
0003683586.tif 000075
【図ＩＩ】
0003683586.tif 000076
【図ＪＪ】
0003683586.tif 000077
【図ＫＫ−ａ】
0003683586.tif 000078
【図ＫＫ−ｂ】
0003683586.tif 000079
【図ＫＫ−ｃ】
0003683586.tif 000080