(57)【特許請求の範囲】
【請求項１】
オブジェクト間のメッセージ通信を同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力する入力手段と、
前記入力手段によって入力された指示内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについてメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するメソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについて前記キューを破壊し前記スレッドを停止するメソッドを呼び出すスレッド取扱手段と
を具備したことを特徴とするスレッドマッピングテスト制御装置。
【請求項２】
請求項１記載のスレッドマッピングテスト制御装置において、
前記オブジェクト毎の前記スレッドの動作状態を管理するスレッド対応情報を備え、
前記入力手段は、ユーザから入力された指示にしたがって前記スレッド対応情報を更新し、
前記スレッド取扱手段は、前記スレッド対応情報が更新された場合に、この更新の対象となったオブジェクトについて前記スレッドの動作状態を切り替えるためのメッセージを送信する
ことを特徴とするスレッドマッピングテスト制御装置。
【請求項３】
請求項２記載のスレッドマッピングテスト制御装置において、
前記スレッド対応情報の内容を表示し、前記スレッド取扱手段によって送信されたメッセージに対する応答メッセージに含まれている前記スレッドの動作状態の切り替え結果を表示する出力手段を付加したことを特徴とするスレッドマッピングテスト制御装置。
【請求項４】
請求項３記載のスレッドマッピングテスト制御装置において、
前記スレッド取扱手段によって送信されたメッセージに対する応答メッセージを格納するキューを付加したことを特徴とするスレッドマッピングテスト制御装置。
【請求項５】
自己宛てのメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するスレッド起動メソッドと、前記キューを破壊し前記スレッドを停止するスレッド停止メソッドとを含む複数のオブジェクト間のメッセージ通信を同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力し、この入力された指示の内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド起動メソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド停止メソッドを呼び出すスレッド取扱手段を含むスレッドマッピングテスト制御手段と、
前記複数のオブジェクトと前記スレッドマッピングテスト制御手段とのうちの少なくとも一つとともにプロセスを構成し、メッセージを受信・転送し、受信したメッセージが自プロセスのオブジェクトから送信されている場合に、このメッセージに含まれている通信方式情報に基づいてそのメッセージ通信が同期通信か非同期通信かを調べ、同期通信の場合にはこのメッセージの処理が完了した後に前記自プロセスのオブジェクトに通信の終了を通知し、非同期通信の場合には直ちに前記自プロセスのオブジェクトに通信の終了を通知するメッセージ取扱手段を含む複数のメッセージ通信制御手段と
を具備したことを特徴とする計算機システム。
【請求項６】
請求項５記載の計算機システムにおいて、
前記複数のメッセージ通信制御手段は、メッセージを他プロセスに転送し、他プロセスからのメッセージを前記メッセージ取扱手段に引き渡すプロセスメッセージ取扱手段を備え、
前記メッセージ取扱手段は、前記複数のオブジェクト及び前記スレッド取扱手段がどのプロセスに属するかを示すプロセス対応情報を参照し、受信したメッセージの送信先がどのプロセスに属するかを判定し、自プロセスに属する場合には当該送信先にメッセージを引き渡し、他プロセスに属する場合には前記プロセスメッセージ取扱手段にメッセージを引き渡す
ことを特徴とする計算機システム。
【請求項７】
請求項５又は請求項６記載の計算機システムにおいて、
前記複数のメッセージ通信制御手段は、前記複数のオブジェクトの識別情報及び前記スレッド取扱手段の識別情報のうち自プロセスに属するものの識別情報と、自プロセスに属するもののアドレスとを対応付けたオブジェクト対応情報を備え、
前記メッセージ取扱手段は、メッセージの送信先として、前記複数のオブジェクトのいずれかの識別情報又は前記スレッド取扱手段の識別情報が付されている場合に、前記オブジェクト対応情報を参照し、このメッセージの送信先のアドレスを取得して前記メッセージを引き渡す
ことを特徴とする計算機システム。
【請求項８】
コンピュータに、
オブジェクト間のメッセージ通信を同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力する入力機能と、
前記入力機能によって入力された指示内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについてメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するメソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについて前記キューを破壊し前記スレッドを停止するメソッドを呼び出すスレッド取扱機能と
を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項９】
請求項８記載のプログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記入力機能は、前記オブジェクト毎の前記スレッドの動作状態を管理するスレッド対応情報をユーザから入力された指示にしたがって更新し、
前記スレッド取扱機能は、前記スレッド対応情報が更新された場合に、この更新の対象となったオブジェクトについて前記スレッドの動作状態を切り替えるためのメッセージを送信する
ことを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１０】
請求項９記載のプログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記スレッド対応情報の内容を表示し、前記スレッド取扱機能によって送信されたメッセージに対する応答メッセージに含まれている前記スレッドの動作状態の切り替え結果を表示する出力機能を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１１】
コンピュータに、
自己宛てのメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するスレッド起動メソッドと前記キューを破壊し前記スレッドを停止するスレッド停止メソッドとを含む複数のオブジェクト間のメッセージ通信を、同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力し、この入力された指示の内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド起動メソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド停止メソッドを呼び出すスレッド取扱機能を含むスレッドマッピングテスト制御機能と、
前記複数のオブジェクトと前記スレッドマッピングテスト制御機能とのうちの少なくとも一つとともにプロセスを構成し、メッセージを受信・転送し、受信したメッセージが自プロセスのオブジェクトから送信されている場合に、このメッセージに含まれている通信方式情報に基づいてそのメッセージ通信が同期通信か非同期通信かを調べ、同期通信の場合にはこのメッセージの処理が完了した後に前記自プロセスのオブジェクトに通信の終了を通知し、非同期通信の場合には直ちに前記自プロセスのオブジェクトに通信の終了を通知するメッセージ取扱機能を含む複数のメッセージ通信制御機能と
を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１２】
請求項１１記載のプログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記複数のメッセージ通信制御機能は、メッセージを他プロセスに転送し、他プロセスからのメッセージを前記メッセージ取扱機能に引き渡すプロセスメッセージ取扱機能を備え、
前記メッセージ取扱機能は、前記複数のオブジェクト及び前記スレッド取扱機能がどのプロセスに属するかを示すプロセス対応情報を参照し、受信したメッセージの送信先がどのプロセスに属するかを判定し、自プロセスに属する場合には当該送信先にメッセージを引き渡し、他プロセスに属する場合には前記プロセスメッセージ取扱機能にメッセージを引き渡す
ことを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１３】
請求項１１又は請求項１２記載のプログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記複数のメッセージ通信制御機能は、メッセージの送信先として、前記複数のオブジェクトのいずれかの識別情報又は前記スレッド取扱手段の識別情報が付されている場合に、前記複数のオブジェクトの識別情報及び前記スレッド取扱手段の識別情報のうち自プロセスに属するものの識別情報と、自プロセスに属するもののアドレスとを対応付けたオブジェクト対応情報を参照し、このメッセージの送信先のアドレスを取得して前記メッセージを引き渡す
ことを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムの並列動作が可能なマルチプロセス／マルチスレッド環境において、複数のオブジェクト間のメッセージ通信により所定の機能を効率よく実現するためのテストを行うスレッドマッピングテスト制御装置、及び計算機システム、並びにプログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【０００２】
【従来の技術】
近年Ｃ＋＋言語等のオブジェクト指向言語を用いてプログラム作成が行われるようになっている。このオブジェクト指向言語では、データ処理等を行う手続きとその対応データとを一体として（カプセル化して）オブジェクトという単位が構成され、あるオブジェクトのデータは当該オブジェクトの手続きのみを介して操作される。
【０００３】
したがって、一のオブジェクトが他のオブジェクトのデータに関連して何らかの処理を行う場合には、当該一のオブジェクトの手続きが当該他のオブジェクトの手続きに対して処理を依頼することになる。具体的には、オブジェクト間でメッセージ通信が行われることで依頼処理等が実現される。ここで、オブジェクト指向の概念におけるメッセージ通信とは、オブジェクトが自律的に動作しており、必要に応じてメッセージを送信することをいう。
【０００４】
また、近年プログラムの並列処理が可能なマルチプロセス／マルチスレッド（マルチタスクともいう）環境が広く利用されており、例えばＵＮＩＸ等のＯＳ（オペレーティングシステム）にも利用されている。このマルチプロセス／マルチスレッド環境では、プログラムはプロセスという単位で実行されるとともに、さらにスレッドというプロセスよりも細かい実行単位を導入してこれらの動作についてスケジューリングが行われる。
【０００５】
マルチプロセス／マルチスレッド機能を有する並行環境でオブジェクト指向言語のプログラムを実行する場合には、一般的にプロセスに複数のオブジェクトが設けられる。また、スレッドは、オブジェクトを自律的に動作させるために起動される場合があり、起動されない場合もある。さらに、マルチタスクを実現する環境では、プロセスが複数存在するのが一般的である。
【０００６】
プログラムは、これらの多数のオブジェクト間でメッセージ通信を行いつつ、必要な処理を実行していく。
【０００７】
オブジェクト間のメッセージ通信の方法には、同期通信と非同期通信がある。同期通信とは、送信元オブジェクトが送信先オブジェクトへメッセージを送った時に、送信先オブジェクトにてメッセージに対応する処理が終了するまで、送信元オブジェクトが待たされる通信方式である。
【０００８】
図２６は、同期通信方式を用いるオブジェクト間のメッセージの送受信を時系列順に示すシーケンス図である。
【０００９】
同期通信を実現する一つの手段として、送信元オブジェクトが送信先オブジェクトのメソッドを直接呼び出す方法がある。なお、メソッドとは、Ｃ＋＋言語におけるクラスの中で定義される操作の実装である。このような同期通信を実現するためのプログラムの例を図２６の下側に示す。また、同期通信を実現する他の手段として、送信先オブジェクトにスレッドを割り当て、この送信先オブジェクトの処理が終了するまでスレッド間で同期待ちを行う方法もある。
【００１０】
これに対し、非同期通信とは、送信元オブジェクトが、送信先オブジェクトにメッセージを送った時にこの送信先オブジェクトにメッセージを送信した時点で、送信元オブジェクトが自分の処理を継続する通信方式である。
【００１１】
図２７は、非同期通信方式を用いるオブジェクト間のメッセージの送受信を時系列順に示すシーケンス図である。この図２７の下側に、非同期通信を実現するためのプログラムの例を示す。
【００１２】
一般的に同期通信と非同期通信とは、図２６、２７における下側のプログラムに示されるように異なるインタフェースを有する。したがって、あるオブジェクトを同期通信方式から非同期通信方式に変更、あるいはその逆に変更するためには、その都度プログラムを変更する必要がある。
【００１３】
また、非同期通信を実現するための他の手法が特願平１０−３２８０６５号で提案されている。この手法においては、各オブジェクトに対してメッセージを積んでおくメッセージキューと、このメッセージキューにメッセージが積まれた場合にそのメッセージに対応する処理を起動するスレッドとを生成する。また、この手法では、オブジェクトの生成とともにこのオブジェクトに対するメッセージキューが生成され、このメッセージキューを管理するスレッドが起動され、オブジェクトの破壊とともにこのスレッドが停止される。
【００１４】
この手法では、すべてのオブジェクトにスレッドを与え、かつオブジェクトの生成・破壊とスレッドの起動・停止のタイミングを同一にすることで、プロセスマッピングを容易に指定することが可能である。
【００１５】
しかしながら、この特願平１０−３２８０６５号における非同期通信の実現方法においては、次のような課題がある。
【００１６】
すなわち、この特願平１０−３２８０６５号では、すべてのオブジェクトに対してスレッドを起動する（マッピングする）が、あまりに多くのスレッドを起動すると、このスレッドについての処理負荷が増加するなどの理由により、逆にシステムの性能が劣化する場合がある。したがって、システム性能の調整のために、オブジェクトによってはスレッドを起動しない（マッピングしない）ことも考えられる。
【００１７】
オブジェクトについてのスレッドマッピングの状態（スレッドが動作しているか否かの状態、すなわちメッセージ通信を同期通信とするか非同期通信とするか）に関しては、システムの設計時点で決定すべき事項であるが、動作中のシステムの性能に満足できない場合には、スレッドマッピングの方針を再検討する必要がある。この場合、特願平１０−３２８０６５号では、オブジェクトの生成とスレッドの起動タイミングが同一であることから、システムを一度停止し、スレッドマッピングの状態を変更してから再度システムを起動し直す必要がある。
【００１８】
したがって、オブジェクトの生成・破壊とともにスレッドの起動・停止を行う特願平１０−３２８０６５号の方式では、ある時点まで同期通信だったオブジェクト間の通信方式を非同期通信に変更すること、またはその逆を行うことが困難である。
【００１９】
また、特願平１０−３２８０６５号では、オブジェクトの生成とスレッドの起動タイミングが同一であることから、図２８（ａ）に示すようなメッセージキューの生成及びスレッドの起動を行う生成メソッドをオブジェクトに記述している。
【００２０】
ここで、システム性能の調整のためにあるオブジェクトに対してスレッドをマッピングしない場合には、このオブジェクトの生成メソッドを図２８（ｂ）のように修正する必要がある。したがって、特願平１０−３２８０６５号においても、メッセージ通信の同期／非同期の切り替えにプログラムの変更が必要であり労力がかかる。
【００２１】
以上のような課題を解決するための技術が、特願平１１−３３６６０４号で提案されている。
【００２２】
図２９は、この特願平１１−３３６６０４号で提案されている計算機システムの概略構成を例示するブロック図である。
【００２３】
計算機システム１には、オブジェクトＡ、Ｂとメッセージ通信制御部３ａとから構成されるプロセス４ａと、オブジェクトＣ、Ｄとメッセージ通信制御部３ｂとから構成されるプロセス４ｂとが存在する。
【００２４】
なお、計算機システム１上にはプロセスが少なくとも一つあればよく、プロセスは少なくとも一つのオブジェクトを含んでいればよい。
【００２５】
以下においては、プロセス４ａを用いて説明を行うが他のプロセス４ｂの場合でも同様である。
【００２６】
プロセス４ａに含まれているオブジェクトＡ、Ｂには、自己について通信メッセージ受信用のメッセージキューを生成しこのメッセージキューを管理するスレッドを起動するための起動メソッド５ａが含まれている。
【００２７】
さらに、各オブジェクトＡ、Ｂには、自己についてのメッセージキューを破壊しスレッドを停止するための停止メソッド５ｂが含まれている。
【００２８】
メッセージ通信制御部３ａは、この計算機システム１に含まれている全てのオブジェクトＡ〜Ｄがどのプロセスに属し、これらのオブジェクトＡ〜Ｄについてスレッドをマッピングするか否かを指定するプロセス／スレッド対応マップ６を参照する。
【００２９】
また、メッセージ通信制御部３ａは、同一プロセス４ａ内のオブジェクトについての識別情報とその各オブジェクトのアドレスとの対応を示すオブジェクト対応マップ７ａを備えている。
【００３０】
メッセージ通信制御部３ａに備えられているメッセージハンドラ８ａは、プロセス／スレッド対応マップ６の指定にしたがって各オブジェクトＡ、Ｂに含まれている起動メソッド５ａ又は停止メソッド５ｂの呼び出しを行い、メッセージキューの生成・破壊及びスレッドの起動・停止を行う。
【００３１】
メッセージ通信において、送信先オブジェクトにメッセージキューとスレッドが生成されていない場合には、このメッセージ通信は同期通信となる。一方、送信先オブジェクトにメッセージキューとスレッドが生成されている場合には、このメッセージ通信は非同期通信となる。
【００３２】
また、メッセージハンドラ８ａは、メッセージを受信し転送する。さらに、メッセージハンドラ８ａは、受信したメッセージが自プロセスに含まれているオブジェクトから送信されている場合には、このメッセージに含まれている通信方式情報に基づいてその通信が同期通信か非同期通信かを調べる。その結果が同期通信の場合には、メッセージについての処理が完了した後にこの送信元オブジェクトに通信の終了を通知し、非同期通信の場合には、直ちにこの送信元オブジェクトに通信の終了を通知する。
【００３３】
さらに、メッセージハンドラ８ａは、プロセス／スレッド対応マップ６を参照し、受信した通信メッセージの送信先オブジェクトがどのプロセスに属するかを判定し、自プロセスに属する場合にはこの送信先オブジェクトに通信メッセージを送信する。一方、他プロセスに属する場合にはプロセスメッセージハンドラ９ａにメッセージを送信する。
【００３４】
プロセスメッセージハンドラ９ａは、メッセージを他プロセスに送信し、また他プロセスからのメッセージをメッセージハンドラ８ａに送信する。
【００３５】
この計算機システム１では、プログラムを変更することなくオブジェクトＡ〜Ｄ内の起動メソッド５ａ又は停止メソッド５ｂを呼び出して同期通信と非同期通信とを変更可能であり、オブジェクトの生成・破壊とオブジェクト内のスレッドの起動・停止を分離し、システム動作中に同期通信と非同期通信とを切り替えることが可能である。
【００３６】
【発明が解決しようとする課題】
上述したように、メッセージ通信の同期／非同期の切り替えにシステムの停止やプログラムの書き換えが必要な場合には、どのオブジェクトにスレッドをマッピングし、どのオブジェクトにスレッドをマッピングしないかを判断するテストを効率的に行うことは困難である。
【００３７】
一方、特願平１１−３３６６０４号で提案された図２９に示す計算機システム１においては、オブジェクト間のメッセージ通信の同期／非同期の切り替えを任意のタイミングで実現可能である。
【００３８】
しかしながら、オブジェクト間の各メッセージ通信を同期通信とするか非同期通信とするかを判断するために、メッセージ通信の同期／非同期の切り替えを行う回数が多くなる場合がある。このような場合には、起動メソッド５ａや停止メソッド５ｂを呼び出す手法の効率化が望まれる。
【００３９】
また、メッセージ通信の同期／非同期の切り替えを行う回数が多くなると、どのオブジェクトについてのスレッド及びキューがどのような状態であるか把握することが困難になる場合がある。
【００４０】
本発明は、以上のような実情に鑑みてなされたもので、オブジェクト間のメッセージ通信を同期通信とするか非同期通信とするかを任意のタイミングで切り替え可能な環境において、スレッドマッピングのテストを効率的に行うためのスレッドマッピングテスト制御装置、及び計算機システム、並びにプログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とする。
【００４１】
【課題を解決するための手段】
本発明を実現するにあたって講じた具体的手段について以下に説明する。
【００４２】
第１の発明は、オブジェクト間のメッセージ通信を同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力する入力手段と、入力手段によって入力された指示内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについてメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するメソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについてキューを破壊しスレッドを停止するメソッドを呼び出すスレッド取扱手段とを具備したスレッドマッピングテスト制御装置である。
【００４３】
この第１の発明は、先で述べた特願平１１−３３６６０４号で実現される環境のテストに利用される。
【００４４】
この第１の発明を利用すれば、システムの性能テストのために、プログラムを変更することなく、任意のタイミングでオブジェクトに対するスレッドマッピングの指定を再設定することができる。
【００４５】
また、この第１の発明を利用すれば、システムの性能テストのために、システムを停止することなくオブジェクトに対するスレッドマッピングの指定を変更できる。
【００４６】
したがって、システムの性能テストを効率的に行うことができる。特に、システムの開発途上時に行われるオブジェクトのスレッドマッピングテストを効率的に行うことができ、システムを効率的に開発できる。
【００４７】
第２の発明は、第１の発明と同様のスレッドマッピングテスト制御装置であるが、オブジェクト毎のスレッドの動作状態を管理するスレッド対応情報を備え、入力手段は、ユーザから入力された指示にしたがってスレッド対応情報を更新し、スレッド取扱手段は、スレッド対応情報が更新された場合に、この更新の対象となったオブジェクトについてスレッドの動作状態を切り替えるためのメッセージを送信する。
【００４８】
この第２の発明においては、スレッド対応情報にしたがって、スレッドの起動、停止が行われる。すなわち、この第２の発明を利用することによりスレッド起動メソッドやスレッド停止メソッドの呼び出しが容易となり、オブジェクト間のメッセージ通信の同期・非同期についてのテストを容易に行うことができ、上記第１の発明と同様の作用効果を得ることができる。
【００４９】
第３の発明は、第２の発明と同様のスレッドマッピングテスト制御装置であるが、スレッド対応情報の内容を表示し、スレッド取扱手段によって送信されたメッセージに対する応答メッセージに含まれているスレッドの動作状態の切り替え結果を表示する出力手段を付加している。
【００５０】
この第３の発明を利用することにより、スレッド対応情報の内容や、スレッドの動作状態が表示されるため、どのオブジェクトについてのスレッドがどのような状態であるか容易に把握できる。
【００５１】
これにより、上記第２の発明と同様の作用効果に加えて、テスト実行時の操作性を向上させることができる。
【００５２】
第４の発明は、第３の発明と同様のスレッドマッピングテスト制御装置であるが、スレッド取扱手段によって送信されたメッセージに対する応答メッセージを格納するキューを付加している。これにより、上記第３の発明と同様の作用効果に加えて、応答メッセージの受信が重なった場合でも対処できる。
【００５３】
第５の発明の計算機システムは、スレッドマッピングテスト制御手段と、複数のメッセージ通信制御手段とを備えている。
【００５４】
スレッドマッピングテスト制御手段は、自己宛てのメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するスレッド起動メソッドと、キューを破壊しスレッドを停止するスレッド停止メソッドとを含む複数のオブジェクト間のメッセージ通信を同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力し、この入力された指示の内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド起動メソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド停止メソッドを呼び出すスレッド取扱手段を含んでいる。
【００５５】
複数のメッセージ通信制御手段は、複数のオブジェクトとスレッドマッピングテスト制御手段とのうちの少なくとも一つとともにプロセスを構成し、メッセージを受信・転送し、受信したメッセージが自プロセスのオブジェクトから送信されている場合に、このメッセージに含まれている通信方式情報に基づいてそのメッセージ通信が同期通信か非同期通信かを調べ、同期通信の場合にはこのメッセージの処理が完了した後に自プロセスのオブジェクトに通信の終了を通知し、非同期通信の場合には直ちに自プロセスのオブジェクトに通信の終了を通知するメッセージ取扱手段を含んでいる。
【００５６】
この第５の発明の計算機システムでは、オブジェクト間のメッセージ通信がメッセージ通信制御手段によって制御されることにより同期通信あるいは非同期通信が実現される。また、各オブジェクトについてのスレッドの動作状態がスレッドマッピングテスト制御装置によって切り替えられる。
【００５７】
これにより、計算機システム上のプロセスをまとめてテスト対象とすることができる。
【００５８】
また、システムの性能テストのために、任意のタイミングでオブジェクトに対するスレッドマッピングの指定を再設定することができる。
【００５９】
さらに、システムの性能テストのために、システムを停止することなくオブジェクトに対するスレッドマッピングの指定を変更できる。
【００６０】
したがって、システムの性能テストを効率的に行うことができる。特に、システムの開発途上時に行われるオブジェクトのスレッドマッピングテストを効率的に行うことができ、システムを効率的に開発できる。
【００６１】
加えて、この第５の発明においては、プログラムの並列処理が可能なマルチプロセス環境にあって、オブジェクト指向の概念における同期メッセージ通信及び非同期メッセージ通信が容易に実現される。また、メッセージ内の通信方式情報のみを変更することで同期、非同期通信を変更できるので、同期通信及び非同期通信の両通信方式をプログラムを変更することなく容易に変更できる。
【００６２】
第６の発明は、第５の発明と同様の計算機システムであるが、複数のメッセージ通信制御手段が、メッセージを他プロセスに転送し、他プロセスからのメッセージをメッセージ取扱手段に引き渡すプロセスメッセージ取扱手段を備えている。
【００６３】
また、この第６の発明におけるメッセージ取扱手段は、複数のオブジェクト及びスレッド取扱手段がどのプロセスに属するかを示すプロセス対応情報を参照し、受信したメッセージの送信先がどのプロセスに属するかを判定し、自プロセスに属する場合には当該送信先にメッセージを引き渡し、他プロセスに属する場合にはプロセスメッセージ取扱手段にメッセージを引き渡す。
【００６４】
この第６の発明においては、複数のオブジェクト及びスレッド取扱手段がどのプロセスに配置されているかを各メッセージ通信制御手段が判断し、通信メッセージをそのプロセスに対して転送する。
【００６５】
これにより、各オブジェクトやスレッド取扱手段の間で通信メッセージの送受信が可能となり、上記第５の発明と同様の作用効果を得ることができる。
【００６６】
第７の発明は、第５又は第６の発明と同様の計算機システムであるが、複数のメッセージ通信制御手段は、複数のオブジェクトの識別情報及びスレッド取扱手段の識別情報のうち自プロセスに属するものの識別情報と自プロセスに属するもののアドレスとを対応付けたオブジェクト対応情報を備えている。また、この第７の発明におけるメッセージ取扱手段は、メッセージの送信先として、複数のオブジェクトのいずれかの識別情報又はスレッド取扱手段の識別情報が付されている場合に、オブジェクト対応情報を参照し、このメッセージの送信先のアドレスを取得してメッセージを引き渡す。
【００６７】
この第７の発明においては、プロセスが受信した通信メッセージのうち、このプロセスに属するオブジェクト又はスレッド取扱手段を送信先とするメッセージがあればその送信先にメッセージが送信される。
【００６８】
これにより、他プロセスからのメッセージや、自プロセスに属するオブジェクトやスレッド取扱手段の間での通信メッセージが送信先に送信され、第５又は第６の発明と同様の作用効果が得られる。
【００６９】
さらに、この第７の発明においては、プログラムを変更しなくてもオブジェクト対応情報を変更するのみでメッセージの送信先を変更できる。
【００７０】
第８の発明は、コンピュータに、オブジェクト間のメッセージ通信を同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力する入力機能と、入力機能によって入力された指示内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについてメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するメソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合に、このメッセージ通信における送信先オブジェクトについてキューを破壊しスレッドを停止するメソッドを呼び出すスレッド取扱機能とを実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００７１】
なお、このテスト入力機能とスレッド取扱機能とは、オブジェクトとして実現してもよい。
【００７２】
第９の発明は、第８の発明と同様のプログラムを記録したコンピュータ読み取り可能な記録媒体であるが、入力機能は、オブジェクト毎のスレッドの動作状態を管理するスレッド対応情報をユーザから入力された指示にしたがって更新し、スレッド取扱機能は、スレッド対応情報が更新された場合に、この更新の対象となったオブジェクトについてスレッドの動作状態を切り替えるためのメッセージを送信する。
【００７３】
第１０の発明は、第９の発明と同様のプログラムを記録したコンピュータ読み取り可能な記録媒体であるが、スレッド対応情報の内容を表示し、スレッド取扱機能によって送信されたメッセージに対する応答メッセージに含まれているスレッドの動作状態の切り替え結果を表示する出力機能を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００７４】
第１１の発明は、コンピュータに、自己宛てのメッセージ受信用のキューを生成しこのキュー管理用のスレッドを起動するスレッド起動メソッドとキューを破壊しスレッドを停止するスレッド停止メソッドとを含む複数のオブジェクト間のメッセージ通信を、同期通信とするか非同期通信とするか判断するスレッドマッピングテストのための指示を入力し、この入力された指示の内容にしたがってメッセージ通信を同期通信から非同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド起動メソッドを呼び出し、このメッセージ通信を非同期通信から同期通信に切り替える場合には、このメッセージ通信における送信先オブジェクトに含まれているスレッド停止メソッドを呼び出すスレッド取扱機能を含むスレッドマッピングテスト制御機能と、複数のオブジェクトとスレッドマッピングテスト制御機能とのうちの少なくとも一つとともにプロセスを構成し、メッセージを受信・転送し、受信したメッセージが自プロセスのオブジェクトから送信されている場合に、このメッセージに含まれている通信方式情報に基づいてそのメッセージ通信が同期通信か非同期通信かを調べ、同期通信の場合にはこのメッセージの処理が完了した後に自プロセスのオブジェクトに通信の終了を通知し、非同期通信の場合には直ちに自プロセスのオブジェクトに通信の終了を通知するメッセージ取扱機能を含む複数のメッセージ通信制御機能とを実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００７５】
第１２の発明は、第１１の発明と同様のプログラムを記録したコンピュータ読み取り可能な記録媒体であるが、複数のメッセージ通信制御機能は、メッセージを他プロセスに転送し、他プロセスからのメッセージをメッセージ取扱機能に引き渡すプロセスメッセージ取扱機能を備えている。
【００７６】
また、この第１２の発明におけるメッセージ取扱機能は、複数のオブジェクト及びスレッド取扱機能がどのプロセスに属するかを示すプロセス対応情報を参照し、受信したメッセージの送信先がどのプロセスに属するかを判定し、自プロセスに属する場合には当該送信先にメッセージを引き渡し、他プロセスに属する場合にはプロセスメッセージ取扱機能にメッセージを引き渡す。
【００７７】
第１３の発明は、第１１又は第１２の発明と同様のプログラムを記録したコンピュータ読み取り可能な記録媒体であるが、複数のメッセージ通信制御機能は、メッセージの送信先として、複数のオブジェクトのいずれかの識別情報又はスレッド取扱手段の識別情報が付されている場合に、複数のオブジェクトの識別情報及びスレッド取扱手段の識別情報のうち自プロセスに属するものの識別情報と、自プロセスに属するもののアドレスとを対応付けたオブジェクト対応情報を参照し、このメッセージの送信先のアドレスを取得してメッセージを引き渡す。
【００７８】
第８から第１３までの発明は、それぞれ第１から第３までの発明で説明したスレッドマッピングテスト制御装置、及び第５から第７までの発明で説明した計算機システムの機能をコンピュータにより実現するためのプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００７９】
このようなプログラムを記憶した記録媒体を用いることによって、上述した機能を有していない計算機システム及び計算機に対しても、簡単に上述した機能を付加することができる。
【００８０】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施の形態について説明する。
【００８１】
（第１の実施の形態）
本実施の形態においては、オブジェクト間で行われるメッセージ通信を同期通信とするか非同期通信とするか判断するテストを行うためのスレッドマッピングテスト制御部を備えた計算機システムについて説明する。
【００８２】
この計算機システムは、複数のオブジェクトを備えており、オブジェクト間のメッセージ通信を同期通信とするか非同期通信とするか任意のタイミングで切り替え可能である。
【００８３】
図１は、本実施の形態に係る計算機システムの構成例を示すブロック図であり、図２９と同一の部分については同一の符号を付してその説明を省略し、ここでは異なる部分についてのみ詳しく説明する。
【００８４】
計算機システム１０には、スレッドマッピングテスト制御部１１とメッセージ通信制御部１２ａとから構成されるプロセス１３と、テスト対象のオブジェクトＡ、Ｂとメッセージ通信制御部１２ｂとから構成されるプロセス１４とが存在する。なお、プロセスに含まれるオブジェクトの数や、オブジェクトを含むプロセスの数は任意である。
【００８５】
スレッドマッピングテスト制御部１１は、各プロセス１３、１４に存在するオブジェクトに対するスレッドマッピングに関する情報が設定されており、計算機システム１０をテストするための実行環境を実現する。
【００８６】
このスレッドマッピングテスト制御部１１は、主にスレッド対応マップ１５と、入出力部１６と、オブジェクトリスト１７と、スレッドハンドラ１８から構成される。
【００８７】
スレッド対応マップ１５は、テスト前の各オブジェクトに対するスレッドマッピングの状態を管理する初期設定スレッド対応マップ１５ａと、テストする内容の各オブジェクトに対するスレッドマッピングの状態を管理する任意設定スレッド対応マップ１５ｂとを備える。
【００８８】
入出力部１６は、テストに関する入力を受け付け、各オブジェクトに対するマッピングの状態を表示するスレッドマッピング表示ＧＵＩ（グラフィカル・ユーザ・インタフェース）である。
【００８９】
この入出力部１６は、ユーザからの入力に基づいて任意設定スレッド対応マップ１５ｂを更新する。また、初期設定スレッド対応マップ１５ａの内容と、任意設定スレッド対応マップ１５ｂの内容を表示する。さらに、ユーザからの入力に基づいてスレッドマッピングの状態を切り替えた場合にその切り替え結果を表示する。
【００９０】
オブジェクトリスト１７は、オブジェクトＩＤ（スレッドハンドラＩＤも含む）とオブジェクト（スレッドハンドラも含む）の名称とを対応付けたリストであり、入出力部１６によってオブジェクトに関する表示を行う場合にオブジェクトの名称を表示するために利用される。このオブジェクトリスト１７は、スレッド対応マップ１５からオブジェクトを抽出した情報である。
【００９１】
スレッドハンドラ１８は、任意設定スレッド対応マップ１５ａの内容が更新された場合に、この更新の対象となったオブジェクトについてのスレッドの動作状態を切り替えるためのメッセージをメッセージ通信制御部１２ａに送信し、またこの更新の対象となったオブジェクトから切り替え結果を示す応答メッセージを受信して入出力部１６に送信する。
【００９２】
メッセージ通信制御部１２ａ、１２ｂは、上述した図２９のメッセージ通信制御部３ａ、３ｂと同様にオブジェクト間のメッセージの送受信を制御し、さらにオブジェクトとスレッドハンドラ１８との間のメッセージの送受信も制御する。
【００９３】
すなわち、このメッセージ通信制御部１２ａ、１２ｂは、テスト対象のオブジェクトＡ、Ｂ間のメッセージ通信、テスト対象のオブジェクトＡ、Ｂからスレッドハンドラ１８へのスレッドマッピングの状態に関するメッセージ通信、スレッドハンドラ１８からテスト対象のオブジェクトＡ、Ｂへのスレッド起動又はスレッド停止についてのメッセージ通信を取り扱う。
【００９４】
メッセージ通信制御部１２ａは、主にプロセス／スレッド対応マップ１９と、オブジェクト対応マップ２０ａと、メッセージハンドラ２１ａと、プロセスメッセージハンドラ２２ａとから構成される。
【００９５】
プロセス／スレッド対応マップ１９は、オブジェクト間のメッセージ通信（スレッド間のメッセージ通信）を実現するために、計算機システム１０における全オブジェクトＡ、ＢのオブジェクトＩＤ及びスレッドハンドラＩＤと、それらの配置プロセスと、テスト対象の全オブジェクトＡ、Ｂのスレッドマッピングの状態との対応を示している。
【００９６】
オブジェクト対応マップ２０ａは、自プロセス内のオブジェクトのオブジェクトＩＤ及びスレッドハンドラＩＤと、それら自体（アドレス）との対応を示している。
【００９７】
メッセージハンドラ２１ａは、上記メッセージハンドラ８ａ、８ｂと同様に作用するが、スレッドハンドラ１８からのメッセージ、及びスレッドハンドラ１８へのメッセージも送受信するという特徴を持つ。
【００９８】
具体的には、このメッセージハンドラ２１ａは、メッセージの送信先オブジェクト又は送信先スレッドハンドラをプロセス／スレッド対応マップ１９から検索し、送信先オブジェクト又は送信先スレッドハンドラが存在するプロセスを調べる。そして、送信先オブジェクト又は送信先スレッドハンドラが同一プロセスに存在する場合には、オブジェクト対応マップ２０ａからオブジェクトＩＤに対応するオブジェクト、又はスレッドハンドラＩＤに対応するスレッドハンドラ１８を検索してメッセージを送信する。一方、送信先オブジェクト又は送信先スレッドハンドラが別プロセスに存在する場合には、プロセス／スレッド対応マップ１９に記述された送信先オブジェクト又は送信先スレッドハンドラが存在するプロセスへのメッセージ通信を取り扱うプロセスメッセージハンドラ２２ａに送信先オブジェクトＩＤ又は送信先スレッドハンドラＩＤとメッセージを送信する。
【００９９】
このメッセージハンドラ２１ａが同期通信・非同期通信を実現させるための機能について説明する。
【０１００】
メッセージハンドラ２１ａには、通信種別判定部、送信先判定部、制御戻し部とが備えられている。オブジェクトＡ、Ｂから送信されるメッセージは、送信先オブジェクトＩＤ及びメッセージ本体からなり、さらにメッセージ本体には、送信元オブジェクトＩＤ、メッセージＩＤ、同期／非同期どの通信を行うかを示す通信方式情報が格納されている。
【０１０１】
通信種別判定部は、オブジェクト、プロセスメッセージハンドラ２２ａ、スレッドハンドラ１８からメッセージを受け取ると、ここでは図示しないメッセージハンドラキューに積むとともに、そのメッセージに含まれる送信元オブジェクトＩＤ及び通信方式情報に基づいて通信種別を判定する。すなわち、まず送信元オブジェクトＩＤ及びプロセス／スレッド対応マップ１９に基づいて当該メッセージが自己のプロセス１３から出力されたものであるかを判定する。自己プロセスで発信され、かつ非同期通信を行う場合には、制御戻し部に直ちに制御を戻すように通知する。
【０１０２】
制御戻し部は、通信種別判定部より、メッセージが非同期通信を行う旨の通知を受けた場合には、送信元オブジェクトにおいてメッセージ関数が完了できるように、送信元オブジェクトに制御を戻す。一方、同期通信を行う場合には、送信先メッセージからメソッドの実行完了通知を受け取ると、送信元オブジェクトに制御を戻すように処理する。
【０１０３】
このように、メッセージ内容に対応して通信種別判定部及び制御戻し部が処理を行うことにより、同期／非同期通信が実現される。どの通信方式を採用するかは通信法式情報の指定のみで決定されるため、通信方式の適宜の変更が可能である。
【０１０４】
プロセスメッセージハンドラ２２ａは、別プロセスのメッセージハンドラ２１ｂから自プロセスに送信するメッセージ通信と、同一プロセス内のメッセージハンドラ２１ａから別プロセスに送信するメッセージ通信とを取り扱う。
【０１０５】
共有メモリ２３ａ、２３ｂは、オブジェクトＩＤ又はスレッドハンドラＩＤとメッセージとを記憶し、プロセスメッセージハンドラ２２ａ、２２ｂ間でのメッセージの送受信に利用される。なお、共有メモリ２３ａは、プロセス１３からプロセス１４へのメッセージ送信に利用され、共有メモリ２３ｂは、プロセス１４からプロセス１３へのメッセージ送信に利用される。
【０１０６】
なお、メッセージ通信制御部１２ｂについても、上記メッセージ通信制御部１２ａと同様であるため、ここでは説明を省略する。
【０１０７】
本実施の形態においては、メッセージの通信方式として同期通信と非同期通信を実現するために、例えばオブジェクトＡからオブジェクトＢにメッセージＸを送信する場合には、オブジェクトＡが図２（ａ）に示すようなコーディングを行う。
【０１０８】
ここで、図２（ａ）のSendMessage関数の第２引数「メッセージX」は、実際には構造体であり、図２（ｂ）に示すような情報を内部に持つ。
【０１０９】
この図２（ｂ）に示す構造体の第３番目に通信方式の種別が埋め込まれる。したがって、上記オブジェクトＡのメソッドＡは図２（ｃ）に示すような処理を行い、これによりメッセージに通信方式情報が格納される。
【０１１０】
上記のような構成を持つ計算機システム１０で実行される動作について以下に説明する。
【０１１１】
図３は、本実施の形態における入出力部１６によって表示される画面を例示する図である。
【０１１２】
まず、入出力部１６は、初期設定スレッド対応マップ１５ａと任意設定スレッド対応マップ１５ｂの内容を画面２４に表示する。なお、画面２４においてオブジェクトについて表示する場合には、オブジェクトリスト１７に基づいてオブジェクトＩＤをオブジェクト名に変換して表示する。
【０１１３】
ここで、例えばこの画面２４上でユーザが任意設定スレッド対応マップ１５ｂの表示内容を更新し、オブジェクトＢについてスレッドマッピングの状態を「ＯＦＦ」とする旨を指示したとする。
【０１１４】
すると、入出力部１６は、このユーザからの入力に基づいて任意設定スレッド対応マップ１５ｂを更新する。
【０１１５】
スレッドハンドラ１８は、この任意設定スレッド対応マップ１５ｂの更新内容にしたがってオブジェクトＢのスレッド停止メソッド５ｂをコールする旨のメッセージを送信する。
【０１１６】
このメッセージは、メッセージ通信制御部１２ａ、共有メモリ２３ａ、メッセージ通信制御部１２ｂを介してオブジェクトＢに送信され、オブジェクトＢのスレッド停止メソッド５ｂによりオブジェクトＢが自己のキューを破壊しスレッドを停止する。
【０１１７】
そして、切り替え結果を示す応答メッセージ（スレッドマッピングの状態を示すメッセージ）が、オブジェクトＢからメッセージ通信制御部１２ｂ、共有メモリ２３ｂ、メッセージ通信制御部１２ａを介してスレッドハンドラ１８へ返信される。
【０１１８】
なお、メッセージ通信制御部１２ａ、１２ｂのメッセージハンドラ２１ａ、２１ｂは、このスレッドマッピングの状態を示すメッセージを中継する場合にこのメッセージの内容に基づいてプロセス／スレッド対応マップ１９の内容を更新するとしてもよい。
【０１１９】
スレッドハンドラ１８にスレッドマッピングの状態を示すメッセージが受信されると、その内容が入出力部１６によって画面２４のスレッドマッピング状況として表示される。この例では「オブジェクトＢのスレッドが停止しました」と表示される。
【０１２０】
以上説明したように、本実施の形態に係る計算機システム１０においては、オブジェクトＡ、Ｂ間のメッセージ通信を同期通信とするか非同期通信とするかを容易に変更しつつテストを行うことができる。
【０１２１】
また、計算機システム１０の動作中に、任意のオブジェクトに対してスレッドの起動・停止及びキューの生成・破壊を行うことができ、スレッドマッピングの指定を柔軟に変更できる。
【０１２２】
また、この計算機システム１０においては、プログラムを変更することなくシステムの性能テストを行うことができ、効率的にテストを行うことができる。
【０１２３】
また、この計算機システム１０においては、画面２４を見ることで容易にテスト対象のオブジェクトＡ、Ｂの状態を把握でき、容易にこのテスト対象のオブジェクトＡ、Ｂの切り替えを命令することができるため、効率的にテストを行うことができる。
【０１２４】
また、この計算機システム１０においては、初期設定スレッド対応マップ１５を備えているため、テスト終了後などにスレッドの状態を元に戻すことができる。
【０１２５】
なお、本実施の形態におけるスレッドハンドラ１８、入出力部１６、スレッドマッピングテスト制御部１１などはオブジェクトとして実現してもよい。
【０１２６】
（第２の実施の形態）
本実施の形態においては、上記第１の実施の形態で説明した計算機システムの変形例について詳細に説明する。
【０１２７】
図４は、本実施の形態に係る計算機システムの構成例を示すブロック図である。
【０１２８】
計算機システム２５は、テスト環境を含むマルチプロセス・マルチスレッド環境を実現するシステムである。この計算機システム２５には、２つのプロセス３５、３６が存在する。プロセス３５はスレッドマッピングテスト制御部２６とメッセージ通信制御部１２ａとで構成されている。プロセス３６はメッセージ制御部１２ｂとアクタ部３２とで構成されている。
【０１２９】
プロセス３５は、スレッド対応マップ１５にしたがってスレッドマッピングの指定を行うプロセスであり、スレッドハンドラ２７を含んでいる。一方、プロセス３６は、オブジェクトＡ、Ｂを含んでいる。
【０１３０】
この計算機システム２５では、スレッドマッピングテスト制御部２６におけるスレッドハンドラ２７によって、入出力部であるスレッドマッピング表示ＧＵＩ１６ａに対する入出力、オブジェクトリスト１７及びスレッド対応マップ１５に対する読み出し・書き込みが管理される。
【０１３１】
スレッドマッピングテスト制御部２６におけるメッセージキュー２８は、テスト対象のオブジェクトＡ、Ｂからスレッドマッピングの状態を示すメッセージをスレッドハンドラ２７が受信してもプログラムを継続して動作確認を行うために、スレッドハンドラ２７へのメッセージを受信するキューである。
【０１３２】
メッセージ通信制御部１２ａ、１２ｂにおけるメッセージハンドラキュー２９ａ、２９ｂは、送信元オブジェクトからのメッセージやスレッドハンドラ２７からのメッセージを格納する。
【０１３３】
プロセスメッセージハンドラ２２ａ、２２ｂは、先で述べたように、互いに別プロセスに存在するオブジェクト間のメッセージ通信を実現し、ここではスレッドハンドラ２７からテスト対象のオブジェクトＡ、Ｂへのメッセージ通信、及びテスト対象のオブジェクトＡ、Ｂからスレッドハンドラ５へのスレッドマッピングの状態を示すメッセージ通信（すなわちプロセス３５、３６間のメッセージ通信）を実現する。
【０１３４】
具体的には、プロセスメッセージハンドラ２２ａ、２２ｂは、自プロセスから別プロセスへのメッセージ通信において、プロセス送信用メッセージキュー３０ａ、３０ｂに送信先オブジェクトＩＤとメッセージを格納する。また、別プロセスから自プロセスへのメッセージ通信において、プロセス受信用メッセージキュー３１ａ、３１ｂに送信先オブジェクトＩＤとメッセージを格納する。そして、同一プロセス内のメッセージハンドラ２１ａ、２１ｂから別プロセスに送信するために、共有メモリ２３ａ、２３ｂに送信先オブジェクトＩＤとメッセージを置く。
【０１３５】
メッセージ通信制御部１２ｂによりメッセージ通信が可能となるアクタ部３２は、他オブジェクトにメッセージを送信するオブジェクトＡ，Ｂと、その各オブジェクトＡ、Ｂについてメッセージを受信するメッセージキュー３３ａ、３３ｂ及び受信したメッセージとそのメッセージに対応するメソッドとの対応を示すメッセージマップ３４ａ、３４ｂと、受信したメッセージに対応するメソッドを呼び出す手段とを具備する。
【０１３６】
上記のような構成を持つ計算機システム２５においてスレッドハンドラ２７からスレッドマッピングに関するメッセージを送信する場合には、スレッドハンドラ２７からのメッセージをまずメッセージ通信制御部１２ａのメッセージハンドラ２１ａが取り扱う。
【０１３７】
一方、オブジェクトＡ、Ｂ間のメッセージ通信は、送信元オブジェクトからのメッセージをまずメッセージ通信制御部１２ｂのメッセージハンドラ２１ｂが取り扱う。
【０１３８】
各メッセージハンドラ２１ａ、２１ｂは、システム内に唯一存在するプロセス／スレッド対応マップ１９を読み込み、送信先オブジェクト又は送信先スレッドハンドラが存在するプロセスを識別する。
【０１３９】
例えば、スレッドマッピングの状態を示すメッセージは、オブジェクトＡ又はオブジェクトＢからスレッドハンドラ２７へ送信されるので、メッセージ通信制御部１２ａ、１２ｂのメッセージハンドラ２１ａ、２１ｂは、オブジェクト対応マップ２０ａを参照し、送信先スレッドハンドラ２７を取得する。
【０１４０】
また、プロセス３６において送信先がオブジェクトであるメッセージ通信では送信先オブジェクトが自プロセスに存在することになるので（プロセス３５はスレッドハンドラ２７が存在するプロセスであり、送信先オブジェクトが存在しない）、メッセージ通信制御部１２ｂのメッセージハンドラ２１ｂはオブジェクト対応マップ２０ｂを参照し、送信先オブジェクトを取得する。
【０１４１】
また、スレッドハンドラ２７とオブジェクトＡ、Ｂとの間のメッセージ通信は、プロセスメッセージハンドラ２２ａ、２２ｂが取り扱う。プロセス３５とプロセス３６との間には、共有メモリ２３ａ（プロセス３５からプロセス３６へのメッセージ通信）及び共有メモリ２３ｂ（プロセス３６からプロセス３５へのメッセージ通信）が存在し、これらの共有メモリ２３ａ、２３ｂを介して、スレッドハンドラ２７とオブジェクトＡ、Ｂとの間のメッセージ通信が可能となる。
【０１４２】
メッセージハンドラ２１ａ、２１ｂ、プロセスメッセージハンドラ２２ａ、２１ｂ、スレッドハンドラ２７は、それぞれ自律的に動作し一つのスレッドが割り当てられており、このスレッドが自己に関するキューを監視している。
【０１４３】
プロセス／スレッド対応マップ１９は、予め図５に示す内容で、スレッドマッピングテスト制御部２６のスレッドハンドラ２７の存在するプロセス３５、及びアクタ部３２のオブジェクトの存在するプロセス３６と、スレッドマッピングとの対応を表現しており、ファイルや共有メモリなどシステム稼動時に参照できるような形態で保管される。
【０１４４】
また、送信先オブジェクトとスレッドマッピングの指定を示したスレッド対応マップ１５は、予め図６に示す内容でファイルや共有メモリなどシステム稼動時に参照できるような形態で保管される。
【０１４５】
上記構成を持つ計算機システム２５の動作について以下に説明する。
【０１４６】
スレッドハンドラ２７が生成されると、このスレッドハンドラ２７はスレッド対応マップ１５を読み込み、送信先オブジェクトＩＤとスレッドマッピングの指定情報を取得し、スレッドマッピング表示ＧＵＩ１６ａに表示する。
【０１４７】
また、システム実行中において、任意の送信先オブジェクトＩＤに対してスレッドマッピングの指定を変更できるように、スレッド対応マップ１５からオブジェクト情報を抽出してオブジェクトリスト１７を作成し、スレッドマッピング表示ＧＵＩ１６ａにスレッド対応マップ１５の情報とは別にこれらの情報を表示する。
【０１４８】
スレッドハンドラ２７は、スレッド対応マップ１５の指定情報をそのまま実行する。任意の送信先オブジェクトＩＤに対してスレッドマッピングの指定が変更されると、スレッドハンドラ２７から送信先オブジェクトへスレッドマッピングの指定に関するメッセージを送信するために、スレッドハンドラ２７からメッセージハンドラ２１ａに送信先オブジェクトＩＤとメッセージが渡され、メッセージハンドラキュー２９ａに格納される。
【０１４９】
メッセージハンドラ２１ａは、メッセージハンドラキュー２９ａからオブジェクトＩＤを取り出し、プロセス／スレッド対応マップ１９に記述された送信先オブジェクトＩＤに対応するプロセスを調べる。
【０１５０】
一方、あるオブジェクトから送信先オブジェクトにメッセージを送信する場合には、送信先オブジェクトＩＤと送信されたメッセージがメッセージハンドラ２１ｂに渡され、メッセージハンドラキュー２９ｂに格納される。
【０１５１】
メッセージハンドラ２１ｂは、メッセージハンドラキュー２９ｂからオブジェクトＩＤを取り出し、プロセス／スレッド対応マップ１９に記述された送信先オブジェクトＩＤに対応するプロセスを調べる。
【０１５２】
ここで、送信依頼を受けたメッセージハンドラ２１ａ、２１ｂがプロセス／スレッド対応マップ１９に記述されたオブジェクトＩＤに対応するプロセスを調べた後の作用について説明する。
【０１５３】
送信先オブジェクトが同一プロセスに存在する場合、メッセージハンドラ２１ｂは、オブジェクト対応マップ２０ｂからオブジェクトＩＤに対応するオブジェクトを取り出し、送信先オブジェクトにメッセージを送信する。これにより、メッセージが送信先オブジェクトに渡され、送信先オブジェクトの受信メソッドが呼び出される。
【０１５４】
この場合において、送信先オブジェクトにスレッドがマッピングされていれば、受信メソッド内でメッセージがこの送信先オブジェクトに対応するメッセージキューに格納される。そして、送信先オブジェクトのスレッドは、自己に対応付けされているメッセージキューからメッセージを取り出し、メッセージに対応するメソッドを呼び出す。
【０１５５】
一方、送信先オブジェクトにスレッドがマッピングされていなければ、送信先オブジェクトのスレッドは、受信メソッド内でメッセージに対応するメソッドを呼び出す。
【０１５６】
送信先オブジェクトが別プロセスに存在する場合には、メッセージハンドラ２１ｂは、プロセス／スレッド対応マップ１９から、送信先オブジェクトが存在するプロセスへの送信を行うプロセスメッセージハンドラを取り出し、このプロセスメッセージハンドラにオブジェクトＩＤとメッセージを送信する。
【０１５７】
送信先オブジェクトがスレッドマッピングの状態を示すメッセージをスレッドハンドラ２７に通知する場合には、メッセージハンドラ２１ｂが、スレッドハンドラ２７の存在するプロセス３５への送信を行うプロセスメッセージハンドラ２２ｂを取り出し、このプロセスメッセージハンドラ２２ｂにスレッドハンドラＩＤとメッセージを送信する。
【０１５８】
プロセスメッセージハンドラ２２ｂは、スレッドハンドラＩＤとメッセージを受信すると、このスレッドハンドラＩＤとメッセージをプロセス送信用メッセージキュー３０ｂに格納し、すぐにプロセス送信用メッセージキュー３０ｂからスレッドハンドラＩＤとメッセージを取り出し、共有メモリ２３ｂに置く。
【０１５９】
すると、スレッドハンドラ２７の存在するプロセス３５内のプロセスメッセージハンドラ２２ａが、共有メモリ２３ｂに置かれたスレッドハンドラＩＤとメッセージを取り出し、プロセス受信用メッセージキュー３１ａに格納する。プロセスメッセージハンドラ２２ａは、プロセス受信用メッセージキュー３１ａからスレッドハンドラＩＤとメッセージを取り出し、メッセージハンドラ２１ａに送信する。
【０１６０】
スレッドハンドラＩＤとメッセージを受信したメッセージハンドラ２１ａは、これらをメッセージハンドラキュー２９ａに格納する。メッセージハンドラ２１ａは、メッセージハンドラキュー２９ａからスレッドハンドラＩＤを取り出し、プロセス／スレッド対応マップ１９に記述されたスレッドハンドラＩＤに対応するプロセスを調べる。この時点では、必ず送信先スレッドハンドラが同一プロセスに存在する。
【０１６１】
メッセージハンドラ２１ａは、オブジェクト対応マップ２０ａからスレッドハンドラＩＤに対応するスレッドハンドラを取り出し、送信先スレッドハンドラ２７にメッセージを送信する。
【０１６２】
メッセージが送信先スレッドハンドラ２７に渡されると、送信先スレッドハンドラ２７の受信メソッドが呼び出される。
【０１６３】
スレッドハンドラ２７では、このスレッドハンドラ２７の受信メソッド内でメッセージがメッセージキュー２８に格納される。スレッドハンドラ２７は、メッセージキュー２８からメッセージを取り出し、スレッドマッピング表示ＧＵＩ１６ａに表示する。
【０１６４】
送信先オブジェクトにスレッドがマッピングされている場合、受信メソッド内でメッセージが送信先オブジェクトに対応するメッセージキューに格納される。すると、送信先オブジェクトのスレッドは、メッセージキューからメッセージを取り出し、メッセージに対応するメソッドを呼び出す。
【０１６５】
一方、送信先オブジェクトにスレッドがマッピングされていない場合には、受信メソッド内でメッセージに対応するメソッドを呼び出す。
【０１６６】
以下に、計算機システム２５を起動した場合のプロセスの動作、スレッドハンドラ２７とテスト対象オブジェクトＡ、Ｂのメッセージ通信の動作（スレッドマッピングの状態を示すメッセージの場合も同様）、計算機システム２５を停止する場合のプロセスの動作を順に示す。
【０１６７】
（１）システム起動
図７は、システムを起動した際のプロセスの動作、メッセージ通信制御部１２ａ、１２ｂ、スレッドマッピングテスト制御部２６およびアクタ部３２の動作を示すフロー図である。
【０１６８】
図７（ａ）に示すように、スレッドハンドラ２７を含むプロセス３５を起動するときには、まずメッセージハンドラ２１ａを生成する（ステップＳ１）。次に、スレッド対応マップ１５にしたがってスレッドマッピングの指定を行うスレッドハンドラ２７を生成する（ステップＳ２）。さらに、スレッドマッピング情報及びオブジェクトリスト１７に基づいて表示を行うスレッドマッピング表示ＧＵＩ１６ａを生成する（ステップＳ３）。
【０１６９】
図７（ｂ）に示すように、テスト対象のオブジェクトＡ、Ｂを含むプロセス３６を起動するときには、まずメッセージハンドラ２１ｂを生成する（ステップＳ４）。次に、プロセス３６に存在すべきオブジェクトＡ、Ｂを生成する（ステップＳ５）。
【０１７０】
図７（ｃ）に示すように、メッセージハンドラ２１ａ、２１ｂの生成時には、メッセージハンドラキュー２９ａ、２９ｂを生成し（ステップＳ６）、メッセージハンドラキュー２９ａ、２９ｂを監視するためのスレッドを起動し（ステップＳ７）、プロセス／スレッド対応マップ１９を読み込み（ステップＳ８）、プロセスメッセージハンドラ２２ａ、２２ｂを生成する（ステップＳ９）。
【０１７１】
図７（ｄ）に示すように、プロセスメッセージハンドラ２２ａ、２２ｂの生成時には、プロセス送信用メッセージキュー３０ａ、３０ｂを生成し（ステップＳ１０）、プロセス受信用メッセージキュー３１ａ、３１ｂを生成し（ステップＳ１１）、プロセス受信用メッセージキュー３１ａ、３１ｂを監視するためのスレッドを起動する（ステップＳ１２）。
【０１７２】
図７（ｅ）に示すように、スレッドハンドラ２７の生成時には、スレッド対応マップ１５からスレッドマッピング情報を読み込み（ステップＳ１３）、スレッド対応マップ１５からオブジェクトを抽出したオブジェクトリスト１７を作成し（ステップＳ１４）、読み込んだスレッドマッピング情報と作成したオブジェクトリスト１７をスレッドマッピング表示ＧＵＩ１６ａに表示し（ステップＳ１５）、メッセージキュー２８を生成し（ステップＳ１６）、メッセージキュー２８を監視するためのスレッドを起動し（ステップＳ１７）、メッセージハンドラ２１ａに自分自身を登録する（ステップＳ１８）。これにより、オブジェクト対応マップ２０ａにスレッドハンドラ２７が登録される。
【０１７３】
図７（ｆ）に示すように、テスト対象となるオブジェクトＡ、Ｂの生成時には、メッセージハンドラ２１ｂに自分自身を登録する（ステップＳ１９）。これにより、オブジェクト対応マップ２０ｂにオブジェクトＡ、Ｂが登録される。
【０１７４】
図７（ｇ）に示すように、メッセージハンドラ２１ａ、２１ｂがスレッドハンドラ２７又はオブジェクトＡ、Ｂから登録指示を受けると、オブジェクト対応マップ２０ａ、２０ｂにスレッドハンドラ２７又はオブジェクトＡ、Ｂを登録する（ステップＳ２０）。
【０１７５】
次に、プロセス／スレッド対応マップ１９を参照し（ステップＳ２１）、登録したスレッドハンドラ２７又はオブジェクトＡ、Ｂに対してスレッドマッピングの指定があるかどうかを調べる（ステップＳ２２）。オブジェクトＡ、Ｂにはスレッドマッピングの指定がないのでそのまま終了する。一方、スレッドハンドラ２７については、スレッドマッピングの指定を無効としている。これは、先にスレッドハンドラ２７の生成で予めスレッドを起動しているからである。
【０１７６】
本実施の形態においては、予めオブジェクトＡ、Ｂにはスレッドをマッピングしていないが、スレッドをマッピングする場合には、メッセージハンドラ２１ｂからオブジェクトＡ、Ｂに対してスレッド起動メッセージを送信する（ステップＳ２３）。スレッド起動メッセージをオブジェクトＡ、Ｂが受け取り、スレッドをマッピングする。
【０１７７】
メッセージ通信の詳しい動作については後述するが、図８に示すように、スレッド起動メッセージ（図８（ｂ）、（ｃ）中のメッセージID_Run）をオブジェクトＡ、Ｂが受け取ると、自分自身でメッセージに対応するメソッドを呼び出す。この図８（ｂ）、（ｃ）に示すように、スレッド起動メッセージは、スレッド起動メソッドに対応している。このメソッドはオブジェクトＡ、Ｂにおいて共通に利用可能なため、オブジェクトＡ、Ｂを抽象化したオブジェクトで定義し、オブジェクトＡ、Ｂではオブジェクト指向技術の継承機構を導入して再利用する。
【０１７８】
オブジェクトＡ、Ｂに含まれているスレッド起動メソッドは、図９（ｂ）に示す内容になっている。このオブジェクトＡ、Ｂに含まれているスレッド起動メソッドでは、まずメッセージを受信するためのメッセージキュー３３ａ、３３ｂを生成し、スレッドを起動し、スレッドフラグをＯＮにする。この時点で、オブジェクトＡ、Ｂにおいて非同期メッセージ通信が可能な状態になる。
【０１７９】
スレッドマッピングテスト制御部２６におけるスレッド対応マップ１５はテスト環境用の情報であり、プロセス３５のメッセージ通信制御部１２ａのプロセス／スレッド対応マップ１９はシステムとしての情報である。両者は、別々に存在するものであり、相互に依存関係はない。プロセス／スレッド対応マップ１９は、システム起動時にテスト対象のオブジェクトＡ、Ｂを設定するものであって、ここではシステム実行中に変更することはできないとする。そのためシステム実行中に設定を変更するために、テスト環境用として別途スレッド対応マップ１５を設けている。
【０１８０】
（２）メッセージ通信
次に、スレッドハンドラ２７を含むプロセス３５からテスト対象のオブジェクトＡ、Ｂを含むプロセス３６へのメッセージ通信（スレッドハンドラ２７から送信先オブジェクトへのメッセージ通信）、テスト対象のオブジェクトＡ、Ｂを含むプロセス３６からスレッドハンドラ２７を含むプロセス３５へのメッセージ通信（オブジェクトＡ、Ｂからスレッドハンドラ２７へのメッセージ通信）、同一プロセス内のテスト対象のオブジェクトＡ、Ｂ間におけるメッセージ通信（例としてオブジェクトＡからオブジェクトＢへのメッセージ通信）について、順に説明する。なお、テスト対象のオブジェクトＡ、Ｂ間のメッセージ通信については、特願平１１−３３６６０４号で提案している通り、非同期通信と同期通信の双方があり、さらに送信先オブジェクトに対するスレッドマッピングの状態によって動作が異なる。ただし、本実施の形態においてはスレッドハンドラ２７を含むプロセス３５からテスト対象のオブジェクトＡ、Ｂを含むプロセス３６へのメッセージ通信に着目しており、テスト対象のオブジェクトＡ、Ｂ間のメッセージ通信については簡単に説明する。
【０１８１】
図１０は、メッセージ通信に関する第1のフロー図である。
【０１８２】
また、図１１は、メッセージ通信に関する第２のフロー図である。
【０１８３】
まず、スレッドハンドラ２７を含むプロセス３５からテスト対象のオブジェクトＡ、Ｂを含むプロセス３６へのメッセージ通信（スレッドハンドラ２７から送信先オブジェクトへのメッセージ通信）について、メッセージ通信制御部１２ａ、１２ｂのメッセージハンドラ２１ａ、２１ｂ、及びスレッドマッピングテスト制御部２６のスレッドハンドラ２７の動作をこの図１０及び図１１を参照して説明する。なお、ここで通信されるメッセージは、具体的にはスレッドマッピングの指定に関するメッセージ（スレッド起動メッセージ、スレッド停止メッセージ）である。
【０１８４】
スレッドハンドラ２７が読み込むスレッド対応マップ１５は、図６（ａ）に示すフォーマットで予め与えられている。図６（ｂ）は本実施の形態におけるスレッド対応マップ１５の具体例である。スレッド対応マップ１５には、［スレッド対応情報］、［オブジェクト名対応］、［スレッドＯＮ／ＯＦＦ対応］の３種類の情報が記述されている。
【０１８５】
［スレッド対応情報］には、オブジェクト名（“オブジェクトＡ”など）、スレッドマッピングの指定（“ＯＦＦ”など）を順に記述する。
【０１８６】
［オブジェクト名対応］と［スレッドＯＮ／ＯＦＦ対応］は、スレッドハンドラ２７がスレッドマッピング表示ＧＵＩ１６ａにスレッドマッピング情報やスレッドマッピングの状態を表示するために利用される。
【０１８７】
［オブジェクト名対応］とは、オブジェクトＩＤとオブジェクト名の対応を表し、［スレッドＯＮ／ＯＦＦ対応］とは、スレッドＯＮ／ＯＦＦを表すフラグ値とスレッドＯＮ／ＯＦＦを表す文字列の対応を表す。
【０１８８】
テストを行う開発者が先で述べた図３に示すスレッドマッピングテスト環境を用いて、スレッド対応マップファイルを指定すると、スレッドハンドラ２７がスレッド対応マップ１５を読み込み、スレッドマッピング表示ＧＵＩ１６ａにスレッドマッピング情報を表示する。この時、図３の「初期設定」ボタンを押し、スレッドハンドラ２７がスレッド対応マップ１５に沿ってスレッドマッピングの設定を行う。
【０１８９】
ここで、スレッドハンドラ２７がオブジェクトにスレッドをマッピングするために、送信先オブジェクトに向けてスレッド起動メッセージを送信する場合を考える。スレッドハンドラ２７のメッセージ送信メソッドは、先の図９（ａ）に示す内容になる。メッセージ関数（SendMessage）を利用して、スレッドハンドラ２７が送信先オブジェクトに向けてスレッド起動メッセージを送信すると、送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージがメッセージ通信制御部１２ａのメッセージハンドラ２１ａに渡され、メッセージハンドラキュー２９ａに格納される（ステップＳ２４）。
【０１９０】
さらに、同期通信かどうかを調べる（ステップＳ２５）。ここでは非同期通信の場合を想定する。この場合には、メッセージハンドラキュー２９ａに送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージが格納された時点でメッセージ関数は完了する。
【０１９１】
一方、スレッドハンドラ２７から送信先オブジェクトに向けてスレッド起動メッセージが送信されると、送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージがメッセージ通信制御部１２ａのメッセージハンドラ２１ａに渡され、メッセージハンドラキュー２９ａに格納される（ステップＳ２７）。
【０１９２】
メッセージハンドラ２１ａは、メッセージハンドラキュー２９ａから送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージを取り出し（ステップＳ２８）、プロセス／スレッド対応マップ１９に記述された送信先オブジェクトのオブジェクトＩＤに対応するプロセスを検索する（ステップＳ２９）。
【０１９３】
先で述べた図５（ａ）にプロセス／スレッド対応マップ２０のフォーマットを示している。また図５（ｂ）はその具体例である。
【０１９４】
メッセージハンドラ２１ａは、送信先オブジェクトがメッセージハンドラ２１ａと同一プロセス３５に存在するかどうか調べる（ステップＳ３０）。図５（ｂ）に示すように、別プロセスに存在することが判明するので、メッセージハンドラ２１ａは、送信先プロセスへの送信を行うプロセスメッセージハンドラ２２ａを取り出し（ステップＳ３５）、送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージをプロセスメッセージハンドラ２２ａに送信する（ステップＳ３６）。
【０１９５】
プロセスメッセージハンドラ２２ａは、送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージをプロセス送信用メッセージキュー３０ａに格納し（ステップＳ３７）、続いて共有メモリ２３ａ上にこの送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージを置く。
【０１９６】
すると、送信先オブジェクトが存在するプロセス３６内のプロセスメッセージハンドラ２２ｂが、共有メモリ２３ａに置かれた送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージを取り出し、プロセス受信用メッセージキュー３１ｂに格納する（ステップＳ３８）。
【０１９７】
メッセージ通信制御部１２ｂのプロセスメッセージハンドラ２２ｂは、プロセス受信用メッセージキュー３１ｂから送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージを取り出し（ステップＳ３９）、スレッド起動メッセージがスレッド終了メッセージでないことを確認した上で（ステップＳ４０）、メッセージ通信制御部１２ｂのメッセージハンドラ２１ｂに送信する（ステップＳ４１）。
【０１９８】
メッセージ通信制御部１２ｂのメッセージハンドラ２１ｂに送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージが受信されると、このメッセージハンドラ２１ｂは、これらをメッセージハンドラキュー２９ｂに格納する（ステップＳ２７）。
【０１９９】
また、メッセージハンドラ２１ｂは、メッセージハンドラキュー２９ｂから送信先オブジェクトのオブジェクトＩＤとスレッド起動メッセージを取り出し（ステップＳ２８）、プロセス／スレッド対応マップ１９に記述された送信先オブジェクトのオブジェクトＩＤに対応するプロセスを検索する（ステップＳ２９）。
【０２００】
さらに、メッセージハンドラ２１ｂは、送信先オブジェクトがメッセージハンドラ２１ｂと同一プロセス３６に存在するかどうか調べる（ステップＳ３０）。図５（ｂ）にあるように、同一プロセスに存在することが判明するので、メッセージハンドラ２１ｂは、スレッド起動メッセージがスレッド終了メッセージでないことを確認した上で（ステップＳ３１）、オブジェクト対応マップ２０ｂから送信先オブジェクトのオブジェクトＩＤに対応するオブジェクトを検索する（ステップＳ３２）。
【０２０１】
図１２（ａ）にオブジェクト対応マップ２０ａ、２０ｂのフォーマットを示す。図１２（ｂ）、（ｃ）はその具体例である。
【０２０２】
そして、メッセージハンドラ２１ｂは、送信先オブジェクトのオブジェクトＩＤとオブジェクトを取り出し（ステップＳ３３）、送信先オブジェクトにスレッド起動メッセージを送信する（ステップＳ３４）。
【０２０３】
スレッド起動メッセージが送信先オブジェクトに渡されると、送信先オブジェクトの受信メソッドが呼び出される。
【０２０４】
送信先オブジェクトは、スレッド指定があるかどうか調べる（ステップＳ４６）。図５（ｂ）に示すようにシステム起動時には送信先オブジェクトにスレッドがマッピングされていないため、この時点ではスレッド指定がないということになり、送信先オブジェクトは、送信されたスレッド起動メッセージに対応するスレッド起動メソッドをメッセージマップから検索する（ステップＳ４８）。先で述べた図８にメッセージマップのフォーマットを示す。図８（ｂ）、（ｃ）はメッセージマップ３４ａ、３４ｂの具体例である。
【０２０５】
そして、スレッド起動メッセージに対応する送信先オブジェクトのスレッド起動メソッドが呼び出される（ステップＳ４９）。
【０２０６】
スレッド起動メソッドは、先で述べた図９（ｂ）に示すように、メッセージキューを生成し、次にスレッドを起動し、スレッドフラグをＯＮにする。
【０２０７】
最後に、システムをデバッグ中の場合には、送信先オブジェクトは、送信先オブジェクトのスレッドを起動した旨をスレッドハンドラ２７に通知するため、スレッド起動完了メッセージを送信する。
【０２０８】
続いて、送信先オブジェクトは、同期通信かどうかを調べる（ステップＳ５０）。ここでは、非同期通信を想定しているため、送信先オブジェクトのスレッド起動メソッドが実行された時点で受信メソッドは完了する。ここで説明したスレッド起動メソッドおよび後述のスレッド停止メソッドはテスト対象となるオブジェクトＡ、Ｂで共通に利用するメソッドであるため、アクタ部３２のオブジェクトＡ、Ｂを抽象化したオブジェクトとして定義する。オブジェクトＡ、Ｂは、このオブジェクトを継承して利用する。
【０２０９】
以下において、テスト対象のオブジェクトＡ、Ｂを含むプロセス３６からスレッドハンドラ２７を含むプロセス３６へのメッセージ通信（例としてオブジェクトＢからスレッドハンドラ２７へのメッセージ通信）について、スレッドマッピングテスト制御部２６、メッセージ通信制御部１２ａ、１２ｂ、及びアクタ部３２の動作を上記と同様に図１０及び図１１のフロー図を参照して説明する。
【０２１０】
オブジェクトＢのスレッド起動メソッドでスレッドハンドラ２７に向けてスレッド起動完了メッセージを通信することを考える。オブジェクトＢのスレッド起動メソッドは、図９（ｂ）に示す内容になる。なお、スレッドハンドラ２７へのメッセージをこのスレッドハンドラ２７に送信可能とするために、図５（ｂ）に示すように、プロセス／スレッド対応マップ１９では、スレッドハンドラ２７が存在するプロセス３５についても記述している。
【０２１１】
スレッドハンドラ２７は、生成された際にメッセージハンドラ２１ａに自分自身を登録する（ステップＳ１８）。これは、テスト対象であるオブジェクトＡ、Ｂが送信するスレッド起動完了メッセージをスレッドハンドラ２７が受け取るための仕組みである。
【０２１２】
オブジェクトＢがスレッドハンドラ２７に向けてスレッド起動完了メッセージを送信し、メッセージハンドラ２１ｂがメッセージハンドラキュー２９ｂにスレッド起動完了メッセージを格納すると（ステップＳ２７）、メッセージハンドラ２１ｂは先と同様に別プロセス向けのメッセージ通信処理を行う。したがって、ここでは、スレッドハンドラ２７がオブジェクトＢからスレッド起動完了メッセージを受信した時点から説明する。
【０２１３】
スレッドハンドラ２７がスレッド起動完了メッセージを受信すると、スレッド起動完了メッセージがスレッドハンドラ２７のメッセージキュー２８に格納される（ステップＳ４２）。スレッドハンドラ２７は、メッセージキュー２８からスレッド起動完了メッセージを取り出し（ステップＳ４３）、スレッド起動完了メッセージがスレッド終了メッセージでないことを確認した上で（ステップＳ４４）、オブジェクトＢの名前、スレッド起動完了メッセージをスレッドマッピング表示ＧＵＩ１６ａに表示する（ステップＳ４５）。この場合、図１３のスレッドマッピング状況画面２４に示すように、「オブジェクトＢにスレッドがマッピングされました。」というメッセージが表示される。
【０２１４】
以下において、同一プロセス内のテスト対象オブジェクト間のメッセージ通信（例としてオブジェクトＡからオブジェクトＢへの非同期メッセージ通信）に関し、メッセージ通信制御部１２ｂのメッセージハンドラ２１ｂおよびアクタ部３２のオブジェクトＡ、Ｂの動作を図１０のフロー図を参照して説明する。
【０２１５】
オブジェクトＡのメソッドＡでオブジェクトＢに向けてメッセージＢを送信することを考える。オブジェクトＡのメソッドＡは、図９（ｄ）に示す内容になる。メッセージ関数（SendMessage）を利用して、スレッドハンドラ２７がオブジェクトＢに向けてスレッド起動メッセージを送信すると、テスト対象のオブジェクトＢのオブジェクトＩＤとスレッド起動メッセージがメッセージハンドラ２１ｂに渡され、メッセージハンドラキュー２９ｂに格納される（ステップＳ２４）。さらに、同期通信かどうかを調べる（ステップＳ２５）。
【０２１６】
ここでは、送信先オブジェクトＢは、スレッドマッピングテスト環境の初期設定により既にスレッドがマッピングされているとし、非同期通信を想定する。メッセージハンドラキュー２９ｂに送信先オブジェクトＢのオブジェクトＩＤとメッセージＢが格納された時点でメッセージ関数は完了する。
【０２１７】
オブジェクトＡがオブジェクトＢに向けてメッセージＢを送信すると、送信先オブジェクトＢのオブジェクトＩＤと送信メッセージＢがメッセージハンドラ２１ｂに渡され、メッセージハンドラキュー２９ｂに格納される（ステップＳ２７）。メッセージハンドラ２１ｂは、メッセージハンドラキュー２９ｂからオブジェクトＢのオブジェクトＩＤとメッセージＢを取り出し（ステップＳ２８）、プロセス／スレッド対応マップ１９に記述されたオブジェクトＢのオブジェクトＩＤに対応するプロセスを検索する（ステップＳ２９）。メッセージハンドラ２１ｂは、オブジェクトＢがオブジェクトＡと同一プロセス３６に存在するかどうかを調べる（ステップＳ３０）。図５（ｂ）に示すように、同一プロセスに存在することが判明するので、メッセージハンドラ２１ｂは、メッセージＢがスレッド終了メッセージでないことを確認した上で（ステップＳ３１）、オブジェクト対応マップ２０ｂからオブジェクトＢのオブジェクトＩＤに対応するオブジェクトを検索する（ステップＳ３２）。そして、図１２（ｃ）に示すように、メッセージハンドラ２１は、オブジェクトＢのオブジェクトＩＤからオブジェクトを取り出し（ステップＳ３３）、送信先オブジェクトＢにメッセージＢを送信する（ステップＳ３４）。
【０２１８】
メッセージＢが送信先オブジェクトＢに渡されると、送信先オブジェクトＢの受信メソッドが呼び出される。送信先オブジェクトＢにスレッドがマッピングされているか調べる（ステップＳ４６）。送信先オブジェクトＢは、スレッドマッピングテスト環境の初期設定により既にスレッドがマッピングされている。したがって、メッセージＢがメッセージキュー３３ｂに格納される（ステップＳ４７）。この時、オブジェクトＢにメッセージが積まれたことが通知される。
【０２１９】
続いて、オブジェクトＢがメッセージキュー３３ｂにメッセージが積まれたかどうかを調べる（ステップＳ５２）。送信先オブジェクトＢのスレッドは、メッセージキュー３３ｂからメッセージＢを取り出し（ステップＳ５３）、メッセージＢがスレッド終了メッセージでないことを確認し（ステップＳ５４）、メッセージＢに対応するメソッドＢをメッセージマップ３４ｂから検索する（ステップＳ５５）。そして、図８（ｃ）にあるように、メッセージＢに対応するメソッドＢを呼び出す（ステップＳ５６）。次に、同期通信かどうかを調べる（ステップＳ５７）。ここでは、非同期通信を想定しているため、送信先オブジェクトＢのメソッドＢが実行された時点で処理は完了する。そして、再びメッセージキュー３３ｂにメッセージを積まれるまで待つ。
【０２２０】
以下において、同一プロセス内のテスト対象オブジェクトＡ、Ｂ間のメッセージ通信（オブジェクトＡからオブジェクトＢへのスレッドなし同期メッセージ通信）に関し、メッセージ通信制御部１２ｂのメッセージハンドラ２１ｂおよびアクタ部３２のオブジェクトＡ、Ｂの動作を図１０のフロー図を参照して説明する。ここでは、スレッド対応マップ１５において、オブジェクトＢにスレッドがマッピングされていない場合を想定する。
【０２２１】
メッセージ関数（SendMessage）を利用して、オブジェクトＡがオブジェクトＢに向けてメッセージＢを送信すると、送信先オブジェクトＢのオブジェクトＩＤとメッセージＢがメッセージハンドラ２１ｂに渡され、メッセージハンドラキュー２９ｂに格納される（ステップＳ２４）。さらに、同期通信かどうかを調べる（ステップＳ２５）。この場合、同期通信を想定しているので、送信先オブジェクトＢのメソッドの実行が完了するまで待つ（ステップＳ２６）。したがって、オブジェクトＡは、オブジェクトＢと同期をとって動作することができる。
【０２２２】
オブジェクトＡからオブジェクトＢにメッセージＢを送信し、メッセージハンドラ２１ｂを経由してオブジェクトＢの受信メソッドが呼び出されるまでは先と同様であり、オブジェクトＢにスレッド指定があるかどうか調べる（ステップＳ４６）。オブジェクトＢは、スレッドがマッピングされていないため、メッセージＢに対応するメソッドＢをメッセージマップ３４ｂから検索する（ステップＳ４８）。
【０２２３】
そして、図８（ｂ）にあるように、メッセージＢに対応するメソッドＢを呼び出す（ステップＳ４９）。次に、同期通信かどうかを調べる（ステップＳ５０）。ここでは、同期通信を想定しているため、送信元オブジェクトＡに対して送信先オブジェクトＢのメソッドＢの実行が完了したことを通知する（ステップＳ５１）。この時点ではじめて、オブジェクトＡは動作を継続することができ、同期メッセージ通信を実現することができる。
【０２２４】
以下において、同一プロセス内のテスト対象オブジェクトＡ、Ｂ間のメッセージ通信（オブジェクトＡからオブジェクトＢへのスレッドあり同期メッセージ通信）に関し、メッセージ通信制御部１２ｂのメッセージハンドラ２１ｂおよびアクタ部３２のオブジェクトＡ、Ｂの動作を図１０のフロー図を参照して説明する。ここでは、スレッド対応マップ１５において、オブジェクトＢにスレッドがマッピングされており、オブジェクトＢにスレッドがマッピングされている場合を想定する。
【０２２５】
メッセージ関数（SendMessage）を利用して、オブジェクトＡがオブジェクトＢに向けてメッセージＢを送信すると、送信先オブジェクトＢのオブジェクトＩＤとメッセージＢがメッセージハンドラ２１ｂに渡され、メッセージハンドラキュー２９ｂに格納される（ステップＳ２４）。
【０２２６】
さらに、同期通信かどうかを調べる（ステップＳ２５）。この場合、同期通信を想定しているので、送信先オブジェクトＢのメソッドの実行が完了するまで待つ（ステップＳ２６）。したがって、オブジェクトＡは、オブジェクトＢと同期をとって動作する。
【０２２７】
オブジェクトＡからオブジェクトＢにメッセージＢを送信し、メッセージハンドラ２１ｂを経由してオブジェクトＢの受信メソッドが呼び出されるまでは先と同様である。ただし、同期通信を行うという情報をメッセージに付加する。送信先オブジェクトＢにスレッドがマッピングされているか調べる（ステップＳ４６）。送信先オブジェクトＢは、スレッドがマッピングされていると想定している。したがって、送信メッセージＢがメッセージキュー３３ｂに格納される（ステップＳ４７）。この時、オブジェクトＢにメッセージが積まれたことが通知される。続いて、オブジェクトＢがメッセージキュー３３ｂにメッセージが積まれたかどうかを調べる（ステップＳ５２）。送信先オブジェクトＢは、メッセージキューＢからメッセージＢを取り出し（ステップＳ５３）、メッセージＢがスレッド終了メッセージでないことを確認し（ステップＳ５４）、メッセージＢに対応するメソッドＢをメッセージマップ３４ｂから検索する（ステップＳ５５）。
【０２２８】
そして、図８（ｃ）に示すように、メッセージＢに対応するメソッドＢを呼び出す（ステップＳ５６）。次に、同期通信かどうかを調べる（ステップＳ５７）。ここでは、同期通信を想定しているため、送信先オブジェクトＢのメソッドＢが実行された時点でメソッド実行完了をオブジェクトＡに通知する。
【０２２９】
すると、オブジェクトＡがオブジェクトＢのメソッド実行完了待ち（ステップＳ５８）を抜け、処理を再開することになる。
【０２３０】
（３）システム停止
さらに、システムを停止する際のプロセスの動作、スレッドマッピングテスト制御部２６、メッセージ通信制御部１２ａ、１２ｂおよびアクタ部３２の動作を図１４のフロー図を参照して説明する。
【０２３１】
テスト対象のオブジェクトＡ、Ｂを含むプロセス３６を停止するときには、まずプロセス３６に存在しているオブジェクトＡ、Ｂを破壊する（ステップＳ５９）。次に、メッセージハンドラ２１ｂを破壊する（ステップＳ６０）。
【０２３２】
一方、スレッドハンドラ２７を含むプロセス３５を停止するときには、まずスレッドマッピング表示ＧＵＩ１６ａを破壊する（ステップＳ６１）。次に、スレッドハンドラ２７を破壊する（ステップＳ６２）、そして、メッセージハンドラ２１ａを破壊する（ステップＳ６３）。
【０２３３】
以下でさらに詳しく説明する。
プロセス３６に配置されたオブジェクトＡ、Ｂの破壊時には、オブジェクトＩＤの登録をメッセージハンドラ２１ｂから抹消する（ステップＳ６４）。
【０２３４】
この時点で、オブジェクト指向スレッドマッピングテスト制御部２６にてオブジェクトＡ、Ｂにスレッドがマッピングされている表示がある場合には、メッセージハンドラ２１ｂからオブジェクトＡ、Ｂにスレッド停止メッセージが送信され、図９（ｃ）に示すスレッド停止メソッドを実行する。
【０２３５】
スレッド停止メソッドでは、まずスレッドを停止し、メッセージキューを破壊し、スレッドフラグをＯＦＦにする。さらに、システムをデバッグ中には、スレッドハンドラ２７にスレッド停止完了メッセージを送信する。
【０２３６】
プロセス３５に配置されたスレッドハンドラ２５の破壊時には、オブジェクトＩＤの登録をメッセージハンドラ２１ａから抹消し（ステップＳ６５）、自分自身にスレッド終了メッセージを送信し（ステップＳ６６）、メッセージキュー２８を監視していたスレッドの終了を待ち（ステップＳ６７）、メッセージキュー２８を破壊する（ステップＳ６８）。
【０２３７】
メッセージハンドラ２１ａ、２１ｂの破壊時には、プロセスメッセージハンドラ２２ａ、２２ｂを削除し（ステップＳ６９）、自分自身にスレッド終了メッセージを送信し（ステップＳ７０）、メッセージハンドラキュー２９ａ、２９ｂを監視していたスレッドの終了を待ち（ステップＳ７１）、メッセージハンドラキュー２９ａ、２９ｂを破壊する（ステップＳ７２）。
【０２３８】
また、プロセスメッセージハンドラ２２ａ、２２ｂの破壊時には、自分自身にスレッド終了メッセージを送信し（ステップＳ７３）、プロセス受信用メッセージキュー３１ａ、３１ｂを監視していたスレッドの終了を待ち（ステップＳ７４）、プロセス受信用メッセージキュー３１ａ、３１ｂを破壊し（ステップＳ７５）、プロセス送信用メッセージキュー３０ａ、３０ｂを破壊する（ステップＳ７６）。
【０２３９】
メッセージハンドラ２１ａ、２１ｂがスレッドハンドラ２７又はオブジェクトＡ、Ｂから抹消指示を受けると、オブジェクト対応マップ２０ａ、２０ｂからスレッドハンドラ２７又はオブジェクトＡ、Ｂを抹消する（ステップＳ７７）。
【０２４０】
次に、プロセス／スレッド対応マップ１９を参照し（ステップＳ７８）、抹消したスレッドハンドラ２７又はオブジェクトＡ、Ｂに対してスレッドマッピングの指示があるかどうかを調べる（ステップＳ７９）。
【０２４１】
スレッドハンドラ２７にはスレッドマッピングの指定が無効であるので何もしない。一方、オブジェクトＡ、Ｂについては、オブジェクト指向スレッドマッピングテスト制御部２６によってどのようなスレッドのマッピングを行ったかによって異なるが、ここではプロセス／スレッド対応マップ１０によって記述されたスレッドマッピング情報に基づき、スレッドがマッピングされているオブジェクトに対して、スレッド停止メッセージを送信する（ステップＳ８０）。
【０２４２】
メッセージ通信の詳しい動作については既に述べたが、図８（ｂ）、（ｃ）に示すように、スレッド停止メッセージ（図８中のメッセージID_Terminate）をオブジェクトＡ、Ｂが受け取ると、自分自身でメッセージに対応するメソッドを呼び出す。この図８（ｂ）、（ｃ）に示すように、スレッド停止メッセージは、スレッド停止メソッドに対応している。このメソッドはオブジェクトＡ、Ｂにおいて共通で利用可能なため、オブジェクトＡ、Ｂを抽象化したオブジェクトで定義し、オブジェクトＡ、Ｂではオブジェクト指向技術の継承機構を導入して再利用する。
【０２４３】
さらに、スレッド停止メソッドは、図９（ｃ）に示す内容になっている。このメソッドでは、まずスレッドを停止し、メッセージを受信するためのメッセージキューを破壊し、スレッドフラグをＯＦＦにする。
【０２４４】
以上示したように、本実施の形態に係る計算機システム２５においては、オブジェクト指向スレッドマッピングテスト制御部２６を利用することで、オブジェクトＡ、Ｂに対して、初期設定としてスレッドをマッピングすることが容易に可能である。
【０２４５】
さらに、本実施の形態に係る計算機システム２５においては、オブジェクトＡ、Ｂのマッピングに基づきオブジェクトＡとオブジェクトＢ間のメッセージ通信について非同期通信および同期通信（スレッドあり、なし）を変更するためには、スレッド対応マップ１５を変更し、テスト環境上で初期設定するのみでよい。
【０２４６】
さらに、本実施の形態に係る計算機システム２５においては、オブジェクトＡ、Ｂ間のメッセージ通信について図９（ｄ）〜（ｅ）で示したように、メッセージ通信のインタフェースは全く変更する必要がない。
【０２４７】
したがって、この計算機システム２５においては、テスト対象のオブジェクトＡ、Ｂ間の通信を同期通信とするか非同期通信とするかを判断するためのテストを効率的に行うことができる。
【０２４８】
（第３の実施の形態）
図１５は、本実施の形態に係る計算機システムの構成例を示すブロック図であり、スレッドマッピングテスト制御部２６を備えたマルチプロセス・マルチスレッドシステムの構造を示している。この図１５に示す計算機システム３７は、上記第２の実施の形態で説明した計算機システム２５に対してオブジェクトＣを含むプロセス３８を付加したものである。なお、この図１５において図４と同一の部分については同一の符号を付する。
【０２４９】
この計算機システム３７には３つのプロセス３５、３６、３８が存在する。プロセス３５はスレッドマッピングテスト制御部２６及びメッセージ通信制御部１２ａで構成されている。プロセス３６はメッセージ通信制御部１２ｂとアクタ部３２で構成されている。プロセス３８はメッセージ通信制御部１２ｃとアクタ部３９で構成されている。
【０２５０】
プロセス３５はスレッド対応マップ１５の内容にしたがってスレッドマッピングの指定を行うプロセスであり、スレッドハンドラ２７を含んでいる。
【０２５１】
プロセス３６にはオブジェクトＡ、Ｂが、プロセス３８にはオブジェクトＣが存在する。
【０２５２】
スレッドハンドラ２７とオブジェクトＡ、Ｂとの間のメッセージ通信は、メッセージハンドラ２１ａ、２１ｂが取り扱う。
【０２５３】
一方、スレッドハンドラ２７とオブジェクトＣとの間のメッセージ通信は、メッセージハンドラ２１ａ、２１ｃが取り扱う。メッセージハンドラ２１ａ〜２１ｃは、システム内に唯一存在するプロセス／スレッド対応マップ１９を参照し、送信先オブジェクトが存在するプロセスを認識する。このとき、送信先オブジェクトが自プロセスの場合には、メッセージハンドラ２１ａはオブジェクト対応マップ２０ａを、メッセージハンドラ２１ｂはオブジェクト対応マップ２０ｂを、メッセージハンドラ２１ｃはオブジェクト対応マップ２０ｃをそれぞれ参照し、送信先オブジェクトを取得する。
【０２５４】
このような他のプロセスへのメッセージ通信は、最終的にはメッセージハンドラ２１ａ〜２１ｃから指示を受けたプロセスメッセージハンドラ２２ａ〜２２ｃが扱う。スレッドハンドラ２７とオブジェクトＡ、Ｂとの間のメッセージ通信は、プロセスメッセージハンドラ２２ａ、２２ｂが取り扱い、スレッドハンドラ２７とオブジェクトＣとの間のメッセージ通信は、プロセスメッセージハンドラ２２ａ、２２ｃが取り扱う。
【０２５５】
プロセス３５とプロセス３６の間には、共有メモリ２３ａ（プロセス３５からプロセス３６へのメッセージ通信用）および共有メモリ２３ｂ（プロセス３６からプロセス３５へのメッセージ通信用）が存在する。これらの共有メモリ２３ａ、２３ｂを介して、スレッドハンドラ２７とオブジェクトＡ、Ｂとの間のメッセージ通信が可能となっている。
【０２５６】
同様に、プロセス３５とプロセス３８の間には、共有メモリ２３ｃ（プロセス３５からプロセス３８へのメッセージ通信用）および共有メモリ２３ｄ（プロセス３８からプロセス３５へのメッセージ通信用）が存在する。これらの共有メモリ２３ｃ、２３ｄを介して、スレッドハンドラ２７とオブジェクトＣとの間のメッセージ通信が可能となっている。
【０２５７】
メッセージハンドラ２１ａ〜２１ｃ、プロセスメッセージハンドラ２２ａ〜２２ｃ、スレッドハンドラ２７は、それぞれ自律的に動作し一つのスレッドがマッピングされており、このスレッドが自分自身のキューを監視している。
【０２５８】
また、オブジェクトＡ〜Ｃは、システム起動時ではスレッドがマッピングされていないものとする。
【０２５９】
上記第１及び第２の実施の形態の場合と同様に、スレッドハンドラ２７がスレッド対応マップ１５にしたがってオブジェクトＡ〜Ｃに対してスレッドマッピングの初期設定を行う。ここでは、オブジェクトＡ、Ｃに対してスレッドをマッピングし、その後システムを動作させ、オブジェクトＡにメッセージＡが送信されると考える。
【０２６０】
図１６にスレッドハンドラのメッセージ送信関数、スレッド起動メソッド、スレッド停止メソッド、およびオブジェクトＡ〜Ｃのメソッドを示す。オブジェクトＡにメッセージＡが送信されると、オブジェクトＢにメッセージＢが送信され、さらにオブジェクトＣにメッセージＣが送信される。個々のメッセージ通信の流れは、上記第２の実施の形態の場合と同様であるのでここでは省略する。ここでは、図１６（ｄ）のオブジェクトＣのメソッドＣに注目する。自分自身に対して、スレッド起動メッセージを送っている。これは、オブジェクトＢからメッセージＣが送信されたことによって、オブジェクトＣに対してスレッドをマッピングすることを意味する。これによりシステム動作中にオブジェクトに対するスレッドの起動が実現される。本実施の形態では、自分自身にスレッド起動メッセージを送っているが、他のオブジェクトに対してスレッド起動メッセージを送ることも容易に可能である。これにより、ある時点までは同期通信を行っていたオブジェクトが、あるメッセージを受け取ることにより非同期通信を行うことを実現することができる。
【０２６１】
なお、図１７に本実施の形態におけるプロセス／スレッド対応マップ１９を、図１８に本実施の形態におけるオブジェクト対応マップ２０ａ〜２０ｃを、図１９に本実施の形態におけるメッセージマップ３４ａ〜３４ｃを示す。また、図２０に本実施の形態におけるスレッド対応マップ１５を、図２１に本実施の形態におけるオブジェクトリスト１７を示す。
【０２６２】
同一プロセス内あるいはプロセス間のメッセージ通信（スレッドの起動および停止メッセージを含む）は、第２の実施の形態の場合と同様である。
【０２６３】
以上のように、本実施の形態に係る計算機システム３７には３つのプロセスが存在するが、この場合にも上記第２の実施の形態と同様の作用により同様の効果を得ることができる。
【０２６４】
（第４の実施の形態）
本実施の形態においては、上記第２の実施の形態で説明した図４を利用して説明を行う。本実施の形態では、スレッド対応マップ１５からオブジェクトを抽出したオブジェクトリスト１７を作成し、このオブジェクトリスト１７より任意のオブジェクトを選択し、システム実行中にオブジェクトに対するスレッドマッピングの指定を変更し、システム全体の性能テストを行う場合について説明する。
【０２６５】
システム実行中にオブジェクトに対するスレッドマッピングを変更すると、システムがイベント待ち状態に入り、オブジェクトに対するスレッドマッピングを変更してもよいかどうかを開発者が判断する。
【０２６６】
スレッド対応マップ１５は、先の図６（ａ）に示すフォーマットで予め与えられており、図６（ｂ）はスレッド対応マップ１５の具体例を示している。スレッドハンドラ２７が生成されると、スレッド対応マップ１５の［オブジェクト名対応］の欄から送信元オブジェクトを、［スレッドＯＮ／ＯＦＦ対応］の欄からスレッドフラグの値を示す文字列を抽出する。図６（ｂ）に示すように、この場合にはオブジェクトの候補として“スレッドハンドラ”、“オブジェクトＡ”、“オブジェクトＢ”が、スレッドＯＮ／ＯＦＦ指定の文字列として“ＯＦＦ”、“ＯＮ”が抽出される。次に、スレッド対応マップ１５の［オブジェクト名対応］の欄からオブジェクトＩＤとオブジェクト名の対応を、［スレッドＯＮ／ＯＦＦ対応］の欄からスレッドフラグの値とスレッドＯＮ／ＯＦＦを表す文字列の対応を識別する。これらの情報により、スレッドハンドラ２７は、スレッド対応マップ１５からオブジェクトリスト１７を作成することができる。
【０２６７】
オブジェクトリスト１７とは、送信元オブジェクトの候補となるオブジェクトを列挙したオブジェクトネームリストと、スレッドＯＮ／ＯＦＦを列挙したスレッドＯＮ／ＯＦＦリストを指す。
【０２６８】
オブジェクトネームリストは、図２２（ａ）に示すフォーマットの情報である。図２２（ｂ）は本実施の形態における具体例である。また、スレッドＯＮ／ＯＦＦリストは、ＯＮとＯＦＦしかないため、ここではフォーマットの説明を省略する。
【０２６９】
以上の結果、図２３に示す画面２４の中央部に、スレッド対応情報として、オブジェクト、スレッドＯＮ／ＯＦＦを表示することができる。
【０２７０】
そこで、テストを行う開発者がシステム全体の性能をテストするため、図２３に示す画面２４に対して“オブジェクトＡ”を指定し、スレッドＯＮ／ＯＦＦ指定を“ＯＮ”とし、任意設定ボタンを押したとする。
【０２７１】
すると、先の図９（ａ）〜（ｅ）に示すスレッドハンドラ２７およびオブジェクトＡ、Ｂのメソッド、及び先の図８（ａ）〜（ｃ）に示すメッセージマップ３４ａを利用し、オブジェクトＡに対してスレッドをマッピングする。このように、システムの性能が満足するようにスレッドマッピングの指定を随時調整する。
【０２７２】
以上示したように、スレッド対応マップ１５内の情報を使って、システム動作中にスレッドマッピングの指定を変更し、システムの性能をテストすることで、効率的にテストを行うことができる。
【０２７３】
（第５の実施の形態）
本実施の形態においては、プロセスの数が４以上であり、プロセスに含まれるオブジェクトの数が一以上の計算機システムについて説明する。
【０２７４】
図２４は、本実施の形態に係る計算機システムの構成例を例示するブロック図である。この図２４においては図４と同一の部分に同一の符号を付している。
【０２７５】
上記記第１乃至第４においては、プロセスが３以下であり、プロセスに含まれるオブジェクトの数が２以下の場合を例として説明している。
【０２７６】
しかしながら、この図２４に示す計算機システム４０のように、４以上のプロセス３５、３６〜３６ｎから構成されてもよく、またプロセスに含まれるオブジェクトの数は３以上でもよい。
【０２７７】
図２５は、各プロセス３５、３６〜３６ｎの構成を詳細に例示するブロック図である。この計算機システム４０を構成する各プロセス３５、３６〜３６ｎは、他プロセス毎にプロセスメッセージハンドラ、プロセス送信用メッセージキュー、プロセス受信用メッセージキューを備えている。
【０２７８】
なお、上記各実施の形態においては、スレッドマッピングテスト制御部２６を含むプロセス３５にもオブジェクトを含めてもよい。
【０２７９】
また、上記各実施の形態に係る計算機システム１０、２５、３７、４０は、同様の作用・機能を実現可能であれば各構成要素の配置を変更させてもよく、また各構成要素を自由に組み合わせてもよい。
【０２８０】
また、上記各実施の形態に係る計算機システム１０、２５、３７、４０の各機能、各要素は、コンピュータに実行させることのできるプログラムとして、例えば磁気ディスク（フロッピーディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ等）、半導体メモリなどの記録媒体に書き込んで適用可能であり、通信媒体により伝送して、計算機、計算機システムに適用することも可能である。
【０２８１】
上記各機能を実現するコンピュータは、記録媒体に記録されたプログラムを読み込み、プログラムによって動作が制御されることにより、上述した処理を実行する。
【０２８２】
【発明の効果】
以上詳記したように本発明を利用すれば、プログラムの並行処理が可能なマルチプロセス・マルチスレッド環境を提供する計算機システムにおいて、データと手続きをカプセル化した複数のオブジェクトに対してスレッドマッピングテスト制御を実現し、オブジェクト指向の概念におけるメッセージ通信（同期通信および非同期通信）を実現し、同期通信および非同期通信を同じインタフェースで利用することができる。
【０２８３】
また、本発明を利用すれば、同期通信および非同期通信を容易に変更でき、さらにシステム動作中のオブジェクトに対してスレッドの起動・停止でき、スレッドマッピングの指定を柔軟に選択・変更できる。
【０２８４】
これにより、テスト対象のオブジェクトに対するスレッドマッピングを変更しながら、システム全体の性能テストを実施することが可能になり、スレッドマッピングの変更に伴うプログラムの変更量を軽減するとともに、システム開発途上時のオブジェクトのテストを効率的に行い、システムを効率的に開発することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る計算機システムの構成例を示すブロック図。
【図２】同実施の形態に係る計算機システムに配置されているオブジェクトの送信するメッセージの構造を例示する図。
【図３】同実施の形態に係る計算機システムの入出力部によって表示される画面を例示する図。
【図４】本発明の第２の実施の形態に係る計算機システムの構成例を例示するブロック図。
【図５】同実施の形態に係る計算機システムにおけるプロセス／スレッド対応マップを例示する図。
【図６】同実施の形態に係る計算機システムにおけるスレッド対応マップを例示する図。
【図７】同実施の形態に係る計算機システムのシステム起動時の動作を例示するフロー図。
【図８】同実施の形態に係る計算機システムにおけるメッセージマップを例示する図。
【図９】同実施の形態に係る計算機システムに配置されているオブジェクトのメソッドを例示する図。
【図１０】同実施の形態に係る計算機システムにおけるメッセージ通信に関する第１のフロー図。
【図１１】同実施の形態に係る計算機システムにおけるメッセージ通信に関する第２のフロー図。
【図１２】同実施の形態に係る計算機システムにおけるオブジェクト対応マップを例示する図。
【図１３】同実施の形態に係る計算機システムについてのスレッドマッピング状況を表示する画面を例示する図。
【図１４】同実施の形態に係る計算機システムのシステム停止時の動作を例示するフロー図。
【図１５】本発明の第３の実施の形態に係る計算機システムの構成例を例示するブロック図。
【図１６】同実施の形態に係る計算機システムで利用されるメソッドを例示する図。
【図１７】同実施の形態に係る計算機システムにおけるプロセス／スレッド対応マップを例示する図。
【図１８】同実施の形態に係る計算機システムにおけるオブジェクト対応マップを例示する図。
【図１９】同実施の形態に係る計算機システムにおけるメッセージマップを例示する図。
【図２０】同実施の形態に係る計算機システムにおけるスレッド対応マップを例示する図。
【図２１】同実施の形態に係る計算機システムにおけるオブジェクトリストを例示する図。
【図２２】本発明の第４の実施の形態に係る計算機システムにおけるオブジェクトネームリストを例示する図。
【図２３】同実施の形態に係る計算機システムの性能テストのために表示される画面を例示する図。
【図２４】本発明の第５の実施の形態に係る計算機システムの構成例を例示するブロック図。
【図２５】同実施の形態に係る計算機システムにおける各プロセスの構成を例示するブロック図。
【図２６】同期通信方式を用いるオブジェクト間のメッセージの送受信を時系列順に示すシーケンス図。
【図２７】同期通信方式を用いるオブジェクト間のメッセージの送受信を時系列順に示すシーケンス図。
【図２８】従来においてオブジェクト間のメッセージ通信について非同期通信／同期通信を実現するための処理内容を例示する図。
【図２９】オブジェクト間のメッセージ通信の通信方式を任意のタイミングで切り替え可能な計算機システムの概略構成を例示するブロック図。
【符号の説明】
１、１０、３７、４０…計算機システム
３ａ、３ｂ、１２ａ、１２ｂ、１２ｃ、１２ｎ…メッセージ通信制御部
４ａ、４ｂ、１３、１４、３５、３６、３６ｎ、３８…プロセス
５ａ…起動メソッド
５ｂ…停止メソッド
６、１９…プロセス／スレッド対応マップ
７ａ、７ｂ、２０ａ、２０ｂ…オブジェクト対応マップ
８ａ、８ｂ、２１ａ、２１ｂ…メッセージハンドラ
９ａ、９ｂ、２２ａ、２２ｂ…プロセスメッセージハンドラ
８ｂ…復元処理要素定義テーブル
１１、２６…スレッドマッピングテスト制御部
１５…スレッド対応マップ
１６…入出力部
１６ａ…スレッドマッピング表示ＧＵＩ
１７…オブジェクトリスト
１８、２７…スレッドハンドラ
２３ａ、２３ｂ…共有メモリ
２４…画面
２８…メッセージキュー
２９ａ、２９ｂ…メッセージハンドラキュー
３０ａ、３０ｂ…プロセス送信用メッセージキュー
３１ａ、３１ｂ…プロセス受信用メッセージキュー
３２…アクタ部
３３ａ、３３ｂ、３３ｃ…メッセージキュー
３４ａ、３４ｂ、３４ｃ…メッセージマップ
【図１】
0003749657.tif 000002
【図２】
0003749657.tif 000003
【図３】
0003749657.tif 000004
【図４】
0003749657.tif 000005
【図５】
0003749657.tif 000006
【図６】
0003749657.tif 000007
【図７】
0003749657.tif 000008
【図８】
0003749657.tif 000009
【図９】
0003749657.tif 000010
【図１０】
0003749657.tif 000011
【図１１】
0003749657.tif 000012
【図１２】
0003749657.tif 000013
【図１３】
0003749657.tif 000014
【図１４】
0003749657.tif 000015
【図１５】
0003749657.tif 000016
【図１６】
0003749657.tif 000017
【図１７】
0003749657.tif 000018
【図１８】
0003749657.tif 000019
【図１９】
0003749657.tif 000020
【図２０】
0003749657.tif 000021
【図２１】
0003749657.tif 000022
【図２２】
0003749657.tif 000023
【図２３】
0003749657.tif 000024
【図２４】
0003749657.tif 000025
【図２５】
0003749657.tif 000026
【図２６】
0003749657.tif 000027
【図２７】
0003749657.tif 000028
【図２８】
0003749657.tif 000029
【図２９】
0003749657.tif 000030