(57)【特許請求の範囲】
【請求項１】
マルチプロセス機能を有するオペレーティングシステム上でプロセス内のオブジェクト間のメッセージ通信および異なるプロセスに属するオブジェクト間でのメッセージ通信をテストするオブジェクト指向メッセージ通信テスト装置にあって、
自己を含む自プロセスが出力するオブジェクト宛のメッセージを受け取るとともに、そのメッセージの宛先オブジェクトが自プロセスと同一プロセス内に存在するか否かをオブジェクトの論理オブジェクトＩＤとプロセスとを対応付けたプロセス対応マップに基づき判断し、そのメッセージの宛先が自プロセス内であるときはその宛先オブジェクトに前記メッセージを引き渡し、前記宛先オブジェクトが他のプロセス内となるときは、共有メモリに前記メッセージを保存し、また、他のプロセスによって共有メモリに保存されたメッセージを取り出して、他のプロセスが出力する自プロセス内のオブジェクト宛のメッセージをその宛先オブジェクトに前記メッセージを引き渡し、また、前記メッセージの引き渡しは、宛先オブジェクトの論理オブジェクトIDと動作時オブジェクトIDとを対応付けたオブジェクト対応マップに基づいて行うメッセージ通信制御手段と、
前記一以上のプロセスが有する前記一以上のオブジェクトのそれぞれに割り当てられ、割り当てられたオブジェクトに引き渡されるメッセージを格納するメッセージ蓄積手段と、
前記メッセージ蓄積手段を監視し、前記メッセージ蓄積手段に格納されたメッセージに対応する前記宛先オブジェクトのメソッドを呼び出す監視手段とを備え、
前記オブジェクト対応マップは、テスト対象外のオブジェクトの論理オブジェクトＩＤとテストハンドラの動作時オブジェクトＩＤとの対応付けも含み、
前記オブジェクトはデータと手続きとをカプセル化したものであることを特徴とするオブジェクト指向メッセージ通信テスト装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はオブジェクト指向メッセージ通信テスト装置、更に詳しくはプログラムの並行動作が可能なマルチプロセス／マルチスレッド環境において、複数のオブジェクト間のメッセージ通信により所定の機能を実現可能なソフトウエアをテストする部分に特徴のあるオブジェクト指向メッセージ通信テスト装置及び記憶媒体に関する。
【０００２】
【従来の技術】
近年Ｃ＋＋言語等のオブジェクト指向言語を用いてプログラム作成が行われるようになっている。このオブジェクト指向言語においては、データ処理等を行う手続きとその対応データとを一体（カプセル化）としてオブジェクトという単位を構成し、あるオブジェクトのデータは、当該オブジェクトの手続きのみを介して操作するようにしている。
【０００３】
したがって、一のオブジェクトが他のオブジェクトのデータに関連して何らかの処理を行う場合には、当該一のオブジェクトの手続きが当該他のオブジェクトの手続きに対して処理を依頼することになる。具体的には、オブジェクト間でメッセージ通信が行われることで依頼処理等が実現される。ここで、オブジェクト指向の概念におけるメッセージ通信とは、オブジェクトは自律的に動作しており、必要に応じてメッセージを送信することである。
【０００４】
一方、プログラムの並行処理が可能なマルチプロセス／マルチスレッド環境を実現するＵＮＩＸ等のＯＳ（オペレーティングシステム）が広く用いられるようになっている。
【０００５】
このようなプリエンプティブ方式のマルチタスクＯＳでは、プログラムはプロセスという単位で実行されるとともに、さらにスレッドというプロセスよりも細かい実行単位を導入してスケジューリングを行っている。
【０００６】
マルチプロセス／マルチスレッド機能を有する並行環境でオブジェクト指向言語のプログラムを実行させる場合、一般に、プロセスは複数のオブジェクトを有することとなり、オブジェクトはスレッドに対応する場合が多い。また、マルチタスクＯＳでは、プロセスは複数存在するのが一般的である。
【０００７】
このような場合、オブジェクト間のメッセージ通信は図２７に示すようなメソッドにより行われる。なお、メソッドとは、Ｃ＋＋言語におけるクラスの中で定義される操作の実装である。
【０００８】
図４８はメッセージ通信を行う場合における従来のプログラム記述方法の例を示す図である。
【０００９】
同図では、メッセージ通信対象となるオブジェクトが同一プロセス内にある場合（同図（ａ））と、異なるプロセス内にある場合（同図（ｂ），（ｃ））とを示している。
【００１０】
同一プロセス内のオブジェクトに対しては、図４８（ａ）に示すように直接メッセージを送信することができる。一方、他プロセス内のオブジェクトに対しては、図４８（ｂ）に示すようにそのオブジェクトが存在するプロセスの位置を指定することによって、メッセージを送信することになる。
【００１１】
しかし、このような方法でメッセージ送信を行うのでは、プログラム作成時に各オブジェクトがどのプロセスに配置されているのかを意識する必要が生じる。これではシステム開発に多大な労力がかかることになり、さらにその保守、変更等を行う場合にも負担が大きい。かかる事情は、システム開発者の労力を大きくするばかりでなく、プログラムミスの少ない信頼性の高いシステムを容易に構築できるようにする上でも不都合である。
【００１２】
また、例えばプログラム処理の進行等に従って、オブジェクトＢのプロセス配置が変更されるような場合には、図４８（ｃ）に示すようにオブジェクトＡのメソッドを修正する必要があり、プログラム作成上の負荷がますます大きくなる。
【００１３】
さらに、オブジェクトのメッセージ通信を行う必要のある複数のプロセスが、複数の計算機上に分散して配置される場合には、上記負担は更に過大となる。
【００１４】
このような実情を考慮し、特願平１０−３２８０６５号において送信先オブジェクトのプロセス配置等を送信元オブジェクトにおいて意識することなく、オブジェクト間のメッセージ通信を実現可能とする技術が提案されている。
【００１５】
この技術においては、メッセージ通信制御手段が設けられている。そして、このメッセージ通信制御手段によって、あるオブジェクトから他のオブジェクトへのオブジェクト宛メッセージの引き渡し制御が実行され、上記オブジェクト間のメッセージ通信が実現されるものである。
【００１６】
【発明が解決しようとする課題】
しかしながら、特願平１０−３２８０６５号に示される技術であっても、そのソフトウエア開発段階において、作成途中のオブジェクト間メッセージ通信をいかにテストするかという問題がある。
【００１７】
図４９は開発途中におけるオブジェクト間通信テストの様子を示す図である。
【００１８】
ここでメッセージ通信テストを行うために、テスト対象となるオブジェクトが生成された上で、図４９（ａ）に示すテストルーチンが記述される。さらにテストを実行するのに同テストルーチンがコンパイル・リンクされる。この場合には、オブジェクトＡにメッセージＡを送信するシナリオとなっている。
【００１９】
次に、別のテストシナリオにするためには、図４９（ｂ）に示すように先に作成したテストルーチンを変更し、テストプログラムを再コンパイル・リンクする必要がある。すなわちこのテスト方法では、テストシナリオを変更するたびに、テストルーチンを変更し、その都度テストプログラムを再コンパイル・リンクすることになる。
【００２０】
しかしながら、一々テストシナリオをコンパイル・リンクしながらテスト作業を行うのでは、テストに時間が掛かることになり効率が悪いものとなる。
【００２１】
一方、テスト対象となっているオブジェクトがメッセージを受け取ったことにより、テスト対象外のオブジェクトにメッセージを送信する際には、テストプログラムが途中で異常終了してしまう可能性があり、テストを効果的に行い得ないという問題もある。
【００２２】
図５０は実行されたテストプログラムが途中で異常終了してしまう場合を示す図である。
【００２３】
同図において例えば、テスト対象のオブジェクトがオブジェクトＡであった場合を考える。このオブジェクトＡは、同図（ｂ）に示すようにメッセージＡを受け取ると、メソッドＡ（メッセージＡに対応する処理）の中でオブジェクトＸへメッセージＸを送信するようになっている。
【００２４】
したがって、オブジェクトＸが存在しない状態でテストを実行すると、オブジェクトＡのメソッドＡによってオブジェクトＸへメッセージＸが送信され、この時点でテストプログラムが異常終了してしまう。このとき、あらかじめオブジェクトＸを生成しておけば問題は発生しないが、システムを開発途中の場合には、すべてのオブジェクトが開発済みであるとは限らない。
【００２５】
本発明は、このような実情を考慮してなされたもので、その第１の目的は、開発したオブジェクトをテストするためのテストシナリオを柔軟に選択・変更でき、ひいてはシステム開発途上時のオブジェクトのテストを効率的に行い、システムを効率的に開発できるオブジェクト指向メッセージ通信テスト装置及び記憶媒体を提供することにある。
【００２６】
また、第２の目的は、テスト対象のオブジェクトからテスト対象外のオブジェクトへのメッセージ通信があるような場合でもテストプログラムを続行可能とし、ひいてはシステム開発途上時のオブジェクトのテストを効率的に行い、システムを効率的に開発できるオブジェクト指向メッセージ通信テスト装置及び記憶媒体を提供することにある。
【００２７】
【課題を解決するための手段】
上記課題を解決するために、請求項１に対応する発明は、マルチプロセス機能を有するオペレーティングシステムにて実行される一以上のプロセスを生成させ、かつ、データと手続きとをカプセル化した一以上のオブジェクトをプロセスが有するように、当該プロセスを生成させるためのプログラムに対し、オブジェクト間のメッセージ通信をテストするオブジェクト指向メッセージ通信テスト装置についてなされたものである。
【００２８】
【課題を解決するための手段】
上記課題を解決するために、請求項１に対応する発明は、マルチプロセス機能を有するオペレーティングシステム上でプロセス内のオブジェクト間のメッセージ通信および異なるプロセスに属するオブジェクト間でのメッセージ通信をテストするオブジェクト指向メッセージ通信テスト装置にあって、自己を含む自プロセスが出力するオブジェクト宛のメッセージを受け取るとともに、そのメッセージの宛先オブジェクトが自プロセスと同一プロセス内に存在するか否かをオブジェクトの論理オブジェクトＩＤとプロセスとを対応付けたプロセス対応マップに基づき判断し、そのメッセージの宛先が自プロセス内であるときはその宛先オブジェクトに前記メッセージを引き渡し、前記宛先オブジェクトが他のプロセス内となるときは、共有メモリに前記メッセージを保存し、また、他のプロセスによって共有メモリに保存されたメッセージを取り出して、他のプロセスが出力する自プロセス内のオブジェクト宛のメッセージをその宛先オブジェクトに前記メッセージを引き渡し、また、前記メッセージの引き渡しは、宛先オブジェクトの論理オブジェクトIDと動作時オブジェクトIDとを対応付けたオブジェクト対応マップに基づいて行うメッセージ通信制御手段と、前記一以上のプロセスが有する前記一以上のオブジェクトのそれぞれに割り当てられ、割り当てられたオブジェクトに引き渡されるメッセージを格納するメッセージ蓄積手段と、前記メッセージ蓄積手段を監視し、前記メッセージ蓄積手段に格納されたメッセージに対応する前記宛先オブジェクトのメソッドを呼び出す監視手段とを備え、前記オブジェクト対応マップは、テスト対象外のオブジェクトの論理オブジェクトＩＤとテストハンドラの動作時オブジェクトＩＤとの対応付けも含み、前記オブジェクトはデータと手続きとをカプセル化したものであることを特徴とするオブジェクト指向メッセージ通信テスト装置である。
【００３０】
したがって、図５０に示したような問題が生じることがなく、テスト対象のオブジェクトからテスト対象外のオブジェクトへのメッセージ通信があるような場合でもテストプログラムを続行可能とし、ひいてはシステム開発途上時のオブジェクトのテストを効率的に行い、システムを効率的に開発することができる。
【００５６】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。
【００５７】
（発明の第１の実施の形態）
図１は本発明の第１の実施の形態における計算機システムの一例を示す構成図である。この計算機システムのために開発されるプログラムが、第２の実施形態以降で説明するオブジェクト指向メッセージ通信テスト装置にてテストされるものである。
【００５８】
この計算機システム２０は、パーソナルコンピュータやワークステーション等の計算機上でマルチプロセス／マルチスレッド環境を実現するＵＮＩＸ等のＯＳが動作し、さらに当該ＯＳ上に複数のプロセス２１−１〜２１−２（プロセス＃１〜＃２）が設けられてなっている。以下、本明細書において各機能構成部分を示す符号における「−１」，「−２」，．．部分を削除して例えば「プロセス２１」等と示した場合には、その機能構成部分の一般的な場合を意味する。
【００５９】
各プロセス２１−１〜２１−２は、オブジェクト指向言語で記述されたプログラムをもとに生成されたものであり、それぞれメッセージ通信制御部２３およびアクタ部２４で構成されている。逆にそのオブジェクト指向言語は、本実施形態のプロセス２１を構成できるような仕様となっている。
【００６０】
アクタ部２４には、そのプロセス独自の処理を行うための主たるオブジェクトが配置される。ここで、プロセス２１−１のアクタ部２４には、オブジェクト２９−１〜２９−２（オブジェクトＡ〜Ｂ）が存在する。また、プロセス２１−２のアクタ部２４には、オブジェクト２９−３〜２９−４（オブジェクトＣ〜Ｄ）が存在する。
【００６１】
メッセージ通信制御部２３は、アクタ部２４に配置された各オブジェクト２９が他のオブジェクトと通信するために、メッセージハンドラ３０等の各機能を有している。なお、メッセージ通信制御部２３の機能構成部分も基本的にはオブジェクトから構成される。
【００６２】
メッセージハンドラ３０は、プロセス対応マップ３１及びオブジェクト対応マップ３２を参照してアクタ部２４内のオブジェクト２９が出力するメッセージ通信の取り扱いを管理する。すなわち直接メッセージ通信の引き渡しを管理するか、プロセスメッセージハンドラ等の他の機能構成部分にメッセージ通信の送信を依頼し、あるいは他の機能構成部分から自プロセス２１宛のメッセージ通信を受け取る。
【００６３】
このために各メッセージハンドラ３０−１〜３０−２は、システム内に唯一存在するプロセス対応マップ３１を参照し、送信先オブジェクト２９−１〜２９−４が存在するプロセスを識別する。
【００６４】
図２はプロセス対応マップの構成例を示す図である。
【００６５】
同図（ａ）はプロセス対応マップの一般的な構成（フォーマット）を示し、同図（ｂ）は本実施形態の場合におけるプロセス対応マップ３１の構成を示している。
【００６６】
また、図３はオブジェクト対応マップの構成例を示す図である。
【００６７】
同図（ａ）はオブジェクト対応マップの一般的な構成（フォーマット）を示し、同図（ｂ）は本実施形態の場合におけるオブジェクト対応マップ３２−１の構成を示す。さらに、同図（ｃ）は本実施形態の場合におけるオブジェクト対応マップ３２−２の構成を示している。
【００６８】
プロセス対応マップ３１を参照した結果、同一プロセス内での通信であることが判定された場合には、メッセージハンドラ３０−１は、さらに図３に示すオブジェクト対応マップ３２−１，３２−２（オブジェクト対応マップＰ１，Ｐ２）をそれぞれ参照し、送信先オブジェクトの識別番号（動作時オブジェクトＩＤ）を取得する。さらに取得したオブジェクトＩＤをもとに、アクタ部２４内でのメッセージの引き渡しを行う。
【００６９】
図４は各プロセスにおけるアクタ部の詳細構成例を示すブロック図である。
【００７０】
同図に示すように、アクタ部２４においては各オブジェクト２９に対応して、メッセージキュー３８及びメッセージマップ３９が設けられている。詳細は後述するが、このメッセージキュー３８及びメッセージマップ３９によりメッセージ通信の引き渡しが実現される。
【００７１】
図５はメッセージマップの構成例を示す図である。
【００７２】
同図（ａ）はメッセージマップの一般的な構成（フォーマット）を示し、同図（ｂ）は本実施形態の場合におけるメッセージマップ３９−１の構成を示す。さらに、同図（ｃ），（ｄ），（ｅ）は、それぞれ本実施形態の場合におけるメッセージマップ３９−２，３９−３，３９−４の構成を示している。
【００７３】
また、メッセージハンドラ３０は、後述するプロセスメッセージハンドラ３４からメッセージの取り扱い通知を受けたときも上記と同様にしてアクタ部２４のオブジェクトＩＤを取得して、メッセージの引き渡しを行う。
【００７４】
一方、プロセス対応マップ３１を参照した結果、異なるプロセス間での通信であることが判定された場合には、メッセージハンドラ３０−１は、このメッセージ通信を図６に示すプロセスメッセージハンドラ３４に依頼する。
【００７５】
図６は各プロセスにおけるメッセージ通信部の詳細構成例を示すブロック図である。
【００７６】
すなわちオブジェクト２９−１〜２９−２とオブジェクト２９−３〜２９−４との間のメッセージ通信は、プロセスメッセージハンドラ３４−１〜３４−２（プロセスメッセージハンドラＰ１−Ｐ２〜Ｐ２−Ｐ１）が取り扱う。
【００７７】
ここで、プロセス２１−１とプロセス２１−２との間は、共有メモリ３７−１（共有メモリＰ１−Ｐ２：プロセス＃１からプロセス＃２へのメッセージ通信）及び共有メモリ３７−２（共有メモリＰ２−Ｐ１：プロセス＃２からプロセス＃１へのメッセージ通信）が設けられ、これらの共有メモリ３７−１〜３７−２を介して、オブジェクト２９−１〜２９−２とオブジェクト２９−３〜２９−４との間のメッセージ通信が可能となっている。
【００７８】
なお、メッセージハンドラ３０−１〜３０−２、プロセスメッセージハンドラ３４−１〜３４−２、オブジェクト２９−１〜２９−４は、それぞれ自律的に動作し一つのスレッドが割り当てられており、このスレッドが自分自身のキューを監視している。アクタ部２４のオブジェクト２９−１〜２９−４の存在するプロセス２１−１〜２１−２を表現したプロセス対応マップ３１は、あらかじめ図２（ｂ）に示す内容でファイルや共有メモリなどシステム稼動時に参照できるような形態で保管しておく。
【００７９】
次に、以上のように構成された本実施形態における計算機システムの動作について説明する。
【００８０】
オブジェクトからのメッセージ通信について説明する。
【００８１】
まず、同一プロセス内のオブジェクト間メッセージ通信について図８を用いて説明する。
【００８２】
図７はメッセージハンドラスレッドによるメッセージ通信処理の様子を示す流れ図である。
【００８３】
ここでオブジェクト２９−１のメソッドｍ１によってオブジェクト２９−２に向けてメッセージＡを送信することを考える。
【００８４】
図８はオブジェクト２９−１のメソッドｍ１の内容例を示す図である。
【００８５】
同図に示されるオブジェクトＩＤは、プログラム中の論理的な番号を意味し、以下、論理オブジェクトＩＤ１０１と呼ぶ。この論理オブジェクトＩＤ１０１は、図２，図３に示すプロセス対応マップ３１及びオブジェクト対応マップ３２に対応するものである。なお、この論理オブジェクトＩＤ１０１と区別するために、生成された動作中のオブジェクトに付けられるオブジェクトＩＤを動作時オブジェクトＩＤ１０２と呼ぶ（図３）。動作時オブジェクトＩＤ１０２は当該オブジェクトが計算機におけるメモリ上の位置を示し、具体的にはポインタ等を意味している。
【００８６】
さて、図７において、オブジェクト２９−１からオブジェクト２９−２に向けてメッセージＡが送信されると、メソッドｍ１によって送信先のオブジェクト２９−２の論理オブジェクトＩＤ１０１と送信メッセージＡがメッセージハンドラ３０−１に渡され、メッセージハンドラキュー３３−１に格納される（Ｔ１３）。
【００８７】
このメッセージハンドラキュー３３−１からオブジェクト２９−２の論理オブジェクトＩＤ１０１とメッセージＡとがメッセージハンドラ３０−１によって取り出され（Ｔ１４）、プロセス対応マップ３１（図２）に記述されたオブジェクト２９−２の論理オブジェクトＩＤ１０１に対応するプロセスが検索される（Ｔ１５）。
【００８８】
ここで、検出されたオブジェクト２９−２がオブジェクト２９−１と同一プロセス２１−１（プロセス＃１）に存在するかどうかが判定される（Ｔ１６）。
【００８９】
この場合は、同一プロセスに存在することが判明するので、ステップＴ１７に進む。ステップＴ２１に進む場合は後述する。
【００９０】
次に、メッセージハンドラ３０−１により、メッセージＡがスレッド終了メッセージでないことが確認される（Ｔ１７）。さらに、メッセージハンドラ３０−１がオブジェクト対応マップ３２−１を検索することで（Ｔ１８）オブジェクト２９−２の論理オブジェクトＩＤ１０１（オブジェクト識別子）に基づき動作時オブジェクトＩＤ１０２（オブジェクト）が取り出される（Ｔ１９）。
【００９１】
次に、取り出された動作時オブジェクトＩＤ１０２に基づき、メッセージハンドラ３０−１による送信先オブジェクト２９−２へのメッセージＡの送信が行われる（Ｔ２０）。
【００９２】
以降、アクタ部２４におけるオブジェクトスレッドによる処理に移る。
【００９３】
図９はアクタ部のオブジェクトスレッドによるメッセージ通信処理を示す図である。
【００９４】
アクタ部２４に対しメッセージＡが送信されると、送信メッセージＡが送信先オブジェクト２９−２に渡され、メッセージキュー３８−２に格納される（Ｔ２４）。
【００９５】
このメッセージＡは、送信先オブジェクト２９−２によってメッセージキュー３８−２から取り出され（Ｔ２５）、スレッド終了メッセージでないことが確認される（Ｔ２６）。さらに、当該オブジェクト２９−２によってメッセージＡに対応するメソッドＡが図５のメッセージマップ３９−２から検索される（Ｔ２７）。
【００９６】
この場合は、図５（ｃ）に示すようにメッセージＡがメソッドＡに対応しているので、このメソッドＡがオブジェクト２９−２によって呼び出され、実行される（Ｔ２８）。
【００９７】
以上が同一プロセス内のオブジェクト間メッセージ通信であるが、次に、別プロセスに属するオブジェクト間でのメッセージ通信について説明する。
【００９８】
ここでは、オブジェクト２９−１がオブジェクト２９−４に向けてメッセージＡを送信する場合を考える。この通信においても、その通信用メゾットでは図９のメゾットｍ１と同一の形式で通信相手が規定される。すなわち通信相手オブジェクトの論理オブジェクトＩＤ１０１のみが指定されている。
【００９９】
この場合、図７におけるステップＴ１３からＴ１５までの動作は上述と同様である。
【０１００】
ここで、オブジェクト２９−４の論理オブジェクトＩＤ１０１はＩＤ＿Ｄでありプロセス２１−２（＃２）に属するためオブジェクト２９−１とは異なるプロセスに存在することが判明する（Ｔ１６）。したがって、この場合は図７においてステップＴ２１に進む。
【０１０１】
まず、メッセージハンドラ３０−１により、プロセス２１−２に対応するプロセスメッセージハンドラ３４−１が取り出される（Ｔ２１）。ついで、オブジェクト２９−４の論理オブジェクトＩＤとメッセージＡとがプロセスメッセージハンドラ３４−１に送信される（Ｔ２２）。この論理オブジェクトＩＤとメッセージＡとは、プロセスメッセージハンドラ３４−１によってプロセス送信用メッセージキュー３５−１に格納される（Ｔ２３）。続いて共有メモリ３７−１上にオブジェクト２９−４の論理オブジェクトＩＤとメッセージＡが置かれる。
【０１０２】
この共有メモリ３７−１に置かれた各データはプロセス＃２によって以下のように処理される。
【０１０３】
図１０は他のプロセスから受信したメッセージがプロセスメッセージハンドラにより処理される様子を示す流れ図である。
【０１０４】
まず、送信先オブジェクト２９−４が存在するプロセス２１−２（＃２）内のプロセスメッセージハンドラ３４−２によって、共有メモリ３７−１に置かれたオブジェクト２９−４の論理オブジェクトＩＤとメッセージＡが取り出され、プロセス受信用メッセージキュー３６−２に格納される（Ｔ２９）。
【０１０５】
このオブジェクト２９−４の論理オブジェクトＩＤとメッセージＡとはプロセスメッセージハンドラ３４−２によって、プロセス受信用メッセージキュー３６−２から取り出される（Ｔ３０）。さらにメッセージＡがスレッド終了メッセージでないことが確認された上で（Ｔ３１）、メッセージハンドラ３０−２に送信される（Ｔ３２）。
【０１０６】
送信された論理オブジェクトＩＤとメッセージとは、プロセス＃２のメッセージハンドラ３０−２により、メッセージハンドラキュー３３−２に格納される（図７：Ｔ１３）。
【０１０７】
これらの論理オブジェクトＩＤとメッセージＡとはメッセージハンドラ３０−２によってメッセージハンドラキュー３３−２から取り出され（Ｔ１４）、プロセス対応マップ３１によってこの論理オブジェクトＩＤ１０１に対応するプロセスが検索される（Ｔ１５）。
【０１０８】
この場合、図２（ｂ）に示すように、オブジェクト２９−４の論理オブジェクトＩＤ１０２は、メッセージハンドラ３０−２と同一プロセス２１−２に存在することが判明するため（Ｔ１６）、ステップＴ１７に進む。
【０１０９】
つまり、この場合は、プロセス＃２において、プロセス＃１から受け取った論理オブジェクトＩＤを調べたところ、そのメッセージの送信先がプロセス＃２であることがメッセージハンドラ３０−２により判定されたものである。両プロセス＃１，＃２内のメッセージハンドラ３０−１，３０−２は同様な動作を行うため、以降の処理は、上述した同一プロセス内でのメッセージ通信と同様である。
【０１１０】
すなわちメッセージＡがスレッド終了でないことが確認された上（Ｔ１７）オブジェクト対応マップ３２−２から動作時オブジェクトＩＤ１０２が検索され（Ｔ１８）、取り出され（Ｔ１９）、送信先オブジェクト２９−４にメッセージＡが送信される（Ｔ２０）。
【０１１１】
さらに、図９の処理に移って、送信されたメッセージＡが送信先オブジェクト２９−４のメッセージキュー３８−４に一旦格納された後（Ｔ２４）、メッセージＡが取り出される（Ｔ２５）。さらに、メッセージＡがスレッド終了メッセージでないことが確認され（Ｔ２６）、メッセージＡに対応するメソッドＡをメッセージマップ３９−４から検索される（Ｔ２７）。そして、メッセージＡに対応するメソッドＡが呼び出され実行される（Ｔ２８）。
【０１１２】
こうして異なるプロセス間でのオブジェクト間メッセージ通信が実現される。
【０１１３】
以上の同一プロセス内でのオブジェクト間メッセージ通信、及び異なるプロセス間でのオブジェクト間メッセージ通信の何れも、論理オブジェクトＩＤ１０１のみが指定されたメゾットｍ１と同一形式のメゾットにより実現される。すなわち通信相手のオブジェクトの所属するプロセスや動作時プロセスＩＤを全く考慮することなく、通信可能となっている。
【０１１４】
上述したように、本発明の実施の形態に係る計算機システムは、プログラムの並行処理が可能なマルチプロセス／マルチスレッド環境において、データと手続きをカプセル化した複数のオブジェクト間のメッセージ通信装置を提供するようにしたので、オブジェクト指向の概念におけるメッセージ通信、およびオブジェクトの自律的な動作を実現し、さらにオブジェクト間のメッセージ通信において送信先オブジェクトのプロセス配置を意識しないようにすることができる。
【０１１５】
（発明の第２の実施の形態）
本実施形態においては、第１の実施形態の計算機システムに用いられるオブジェクト指向プログラムをテストするためのオブジェクト指向メッセージ通信テスト装置について説明する。
【０１１６】
図１１は本発明の第２の実施の形態に係るオブジェクト指向メッセージ通信テスト装置の一例を示す構成図であり、図１〜図１０と同一部分には同一符号を付して説明を省略し、ここでは異なる部分についてのみ述べる。
【０１１７】
同図に示すオブジェクト指向メッセージ通信テスト装置２０′は、第１の実施形態の計算機システム２０と同様な計算機上に構成されるものであり、第１の実施形態では図示を省略した入力装置９９が示されるとともに、プロセス２１−１（＃１）がメッセージ通信テスト用のプロセスとなっている他、第１の実施形態と同様に構成されている。
【０１１８】
本実施形態では、プロセス２１−１（＃１）及びプロセス２１−２（＃２）の２つのプロセスが設けられ、本実施形態のプロセス２１−２（＃２）は第１の実施形態のプロセス２１−１（＃１）に相当する。したがって、これに対応し、以降の図面においては、符号の「−１」，「−２」部分が修正されている。
【０１１９】
また、プロセス２１−１はメッセージ通信テスト用のプロセスであり、アクタ部２４に代えてテスト制御部２２が設けられる他、第１の実施形態と同様に構成されている。なお、テスト制御部２２は本発明において改良を施したアクタ部２４の一形態である。
【０１２０】
また、図１２は本実施形態のオブジェクト指向メッセージ通信テスト装置におけるメッセージ通信制御部の詳細構成例を示すブロック図であり、図１〜図１１と同一部分には同一符号を付して説明を省略する。
【０１２１】
さらに、図１３は本実施形態のオブジェクト指向メッセージ通信テスト装置におけるテスト制御部並びにアクタ部の詳細構成例を示すブロック図であり、図１〜図１２と同一部分には同一符号を付して説明を省略する。
【０１２２】
すなわちテスト制御部２２は、図１３に示すように、テストハンドラ２５，テストシナリオ２６，テストアイテムリスト２７，メッセージ送受表示ＧＵＩ２８及びメッセージキュー３８−０から構成されている。なお、メッセージ送受表示ＧＵＩ２８の出力先であり表示装置は図示を省略している。
【０１２３】
すなわちプロセス２１−１は、テストハンドラ２５によってテストシナリオ７を駆動するプロセスであって、プロセス２１−２はそのテスト対象となるオブジェクト２９−１〜２９−２（オブジェクトＡ〜Ｂ）を含むプロセスである。
【０１２４】
テストハンドラ２５は、メッセージ代理受信手段、テストアイテム抽出手段及びテスト実行手段として機能するものである。すなわちメッセージ送受表示ＧＵＩ２８の指令に従い、メッセージハンドラ３０−１とメッセージを送受することでメッセージ送信テストを実行し、また、そのテスト結果をメッセージ送受表示ＧＵＩ２８に引き渡す。メッセージハンドラ３０−１以降の処理はプロセス対応マップ３１及びオブジェクト対応マップ３２に従い第１の実施形態と同様に扱われる。
【０１２５】
また、テストハンドラ２５によるテストは、メッセージ送受表示ＧＵＩ２８に指定されたテストシナリオ２６に従う場合、テストアイテムリスト２７を利用しメッセージ送受表示ＧＵＩ２８から直接指示入力する場合等がある。
【０１２６】
テストシナリオ２６には、予め設定された又は入力装置９９により設定入力される少なくとも１種類のメッセージ送信テストのシナリオが保持されており、このシナリオは送信先オブジェクトとメッセージを表現したものである。
【０１２７】
なお、テストシナリオ２６は、図１３に示すような内容でファイルや共有メモリなどシステム稼動時に参照できるような形で保管しておく。
【０１２８】
図１４はテストシナリオの内容例を示す図であり、同図（ａ）は一般形、同図（ｂ）は本実施形態に対応する内容例を示している。
【０１２９】
テストアイテムリスト２７には、各オブジェクト名やメッセージ名等のテストパターンを組むための情報が格納されている。この情報は、システム立ち上げ時にテストシナリオ２６から抽出されて保存されるが、立ち上げ後に入力することも可能である。テストシナリオ２６にないシナリオパターンでテストする場合等にこのテストアイテムリスト２７に格納された各情報が使用される。
【０１３０】
メッセージ送受表示ＧＵＩ２８は、入力装置９９からの設定情報や指令入力を受け付けるとともに、表示装置に結果出力し、また、テストシナリオ２６あるいはテストアイテムリスト２７に設定情報を出力するとともに、テストハンドラ２５に対してテスト指令を出力するようになっている。
【０１３１】
メッセージキュー３８−０は、テストにおいて行き先のないメッセージを戻す戻し先に用いられるものである。
【０１３２】
なお、メッセージハンドラ３０−１〜３０−２、プロセスメッセージハンドラ３４−１〜３４−２、テストハンドラ２５、オブジェクト２９−１〜２９−２は、それぞれ自律的に動作し一つのスレッドが割り当てられており、このスレッドが自分自身のキューを監視している。テスト制御部２２のテストハンドラ２５およびアクタ部２４のオブジェクト２９−１〜２９−２の存在するプロセス２１−１〜２１−２を表現したプロセス対応マップ３１は、あらかじめ図１５に示す内容でファイルや共有メモリなどシステム稼動時に参照できるような形態で保管しておく。次に、プロセス対応マップ３１，オブジェクト対応マップ３２及びメッセージマップ３９の構成例を示す。
【０１３３】
図１５は本実施形態におけるプロセス対応マップの構成を示す図である。
【０１３４】
図１６は本実施形態におけるオブジェクト対応マップの構成を示す図であり、同図（ａ）はオブジェクト対応マップ３２−１、同図（ｂ）はオブジェクト対応マップ３２−２の構成を示している。
【０１３５】
図１７は本実施形態におけるメッセージマップの構成を示す図であり、同図（ａ）はメッセージマップ３９−１、同図（ｂ）はメッセージマップ３９−２の構成を示している。
【０１３６】
なお、図１５，図１６及び図１７における一般的な構成は、第１の実施形態と同様であるので省略している。
【０１３７】
図１５に示すように、本実施形態では架空のオブジェクトＣがプロセス＃１に論理オブジェクトＩＤ１０１として割り付けられている。これに対応し、図１６のオブジェクト対応マップ３２ではオブジェクトＣの論理オブジェクトＩＤ１０１に対する動作時オブジェクトＩＤ１０２としてテストハンドラが割り付けられている。このようなマップ構成とすることで未だに作成されていないオブジェクトにメッセージを発信する場合があってもエラーを生じずにテストできるようになっている。
【０１３８】
なお、プロセス対応マップ３１はメッセージテスト用に予め作成されるものであり、メッセージマップ２９もメソッドとメッセージの関係に対応して予め作成されている。しかし、オブジェクト対応マップ３２は後述するように、テストシステム生成時に作成されるものである。
【０１３９】
次に、以上のように構成された本実施形態におけるオブジェクト指向メッセージ通信テスト装置の動作について説明する。
【０１４０】
（システム起動）；
システムを起動する際のプロセスの動作、メッセージ通信制御部２３、テスト制御部２２およびアクタ部２４の動作を図１８及び図１９のフロー図を参照して説明する。
【０１４１】
図１８は本実施形態におけるシステム起動の際の立ち上げ処理を説明する第１の図である。
【０１４２】
図１９は本実施形態におけるシステム起動の際の立ち上げ処理を説明する第２の図である。
【０１４３】
図１８に示すように、テストハンドラ２５を含むプロセスが起動される場合には、まず始めに、メッセージハンドラ３０−１が生成される（図１８（ａ）：Ｓ１）。次に、テストシナリオ２６を駆動するテストハンドラ２５が生成される（Ｓ２）。さらに、シナリオ情報およびテストアイテム（送信先オブジェクトＩＤとメッセージ）を表示するメッセージ送受表示ＧＵＩ２８が生成される（Ｓ３）。
【０１４４】
一方、テスト対象オブジェクト２９−１〜２９−２を含むプロセスが起動される場合には、まず始めに、メッセージハンドラ３０−２（図１８（ｂ）：Ｓ４）が生成される。次に、プロセスに存在するべきオブジェクト２９−１〜２９−２が生成される（Ｓ５）。
【０１４５】
以下に各処理のより詳細な説明を行う。
【０１４６】
まず、ステップＳ１又はＳ４におけるメッセージハンドラ３０−１〜３０−２の生成について説明する。この場合は、まずメッセージハンドラキュー３３−１〜３３−２が生成され（図１８（ｃ）：Ｓ６）、メッセージハンドラキュー３３−１〜３３−２を監視するためのスレッドが起動される（Ｓ７）。さらに、プロセス対応マップ３１が読み込まれ（Ｓ８）、プロセスメッセージハンドラ３４−１〜３４−２が生成される（Ｓ９）。
【０１４７】
また、ステップＳ９におけるプロセスメッセージハンドラ３４−１〜３４−２の生成時には、まずプロセス送信用メッセージキュー３５−１〜３５−２が生成され（図１９（ｄ）：Ｓ１０）、プロセス受信用メッセージキュー３６−１〜３６−２が生成される（Ｓ１１）。さらに、プロセス受信用メッセージキュー３６−１〜３６−２を監視するためのスレッドが起動される（Ｓ１２）。
【０１４８】
また、ステップＳ２におけるテストハンドラ２５の生成時には、テストシナリオ２６からシナリオ情報が読み込まれ（図１９（ｅ）：Ｓ１３）、テストシナリオ２６から送信先オブジェクトおよびメッセージを抽出したテストアイテムリスト２７が作成される（Ｓ１４）。次に、読み込んだシナリオ情報と作成したテストアイテムがメッセージ送受表示ＧＵＩ２８に表示され（Ｓ１５）、メッセージキュー３８−０が生成される（Ｓ１６）。さらに、メッセージキュー３８−０を監視するためのスレッドが起動され（Ｓ１７）、メッセージハンドラ３０−１に自分自身が登録される（ステップＳ１８）。
【０１４９】
これにより図１６に示すように、オブジェクト対応マップ３２−１に未だ作成されていないオブジェクトについても登録がなされることになる。ここで、当該オブジェクトの代わりになるのはテストハンドラ２５である。すなわちプロセス対応マップ３１の情報からプロセス＃１にオブジェクトＣが存在することとなる。しかし、実際には同オブジェクトＣが存在しないため、オブジェクトＣの論理オブジェクトＩＤ１０１にテストハンドラの動作時オブジェクトＩＤ１０２が割り付けられることになるようオブジェクト対応マップ３２−１が生成される。
【０１５０】
一方、ステップＳ２で生成されるべきテスト対象となるオブジェクト２９−１〜２９−２の生成時には、まずメッセージキュー３８−１〜３８−２が生成され（図１９（ｆ）：Ｓ１９）、メッセージキュー３８−１〜３８−２を監視するためのスレッドが起動される（Ｓ２０）。さらに、メッセージハンドラ３０−２に自分自身が登録される（Ｓ２１）。以上により図１６に示すように、オブジェクト対応マップ３２−１〜３２−２にオブジェクトが登録される。
【０１５１】
（メッセージ通信テスト）；
以上のようにして、テストハンドラ２５が生成されると、テストシナリオ２６が読み込み、送信先のオブジェクトＩＤと送信メッセージとが取得され、シーケンシャルなシナリオ情報としてメッセージ送受表示ＧＵＩ２８に表示される。一方、任意の送信先オブジェクトＩＤと任意の送信メッセージを選択できるように、テストシナリオ６から送信先オブジェクトおよびメッセージが抽出されてテストアイテムリスト７が作成され、メッセージ送受表示ＧＵＩ８に先のシーケンシャルなシナリオ情報とは別にこれらの情報が表示される（後述の図２４）。こうして、メッセージ通信テストの準備が整うことになる。
【０１５２】
この状態で、シナリオを開始するか、あるいは任意の送信先オブジェクトＩＤと任意の送信メッセージを選択すると、テストハンドラ２５によりメッセージ通信テストが開始される。本実施形態ではテストシナリオ２６を用いてテストする場合を説明し、任意組み合わせモードによるテストは後述の第４の実施形態で説明する。
【０１５３】
以下に説明する例においては、シナリオではテストハンドラ２５からオブジェクトＡにメッセージＡを送信するようになっている。この最初のメッセージ送信の結果、オブジェクトＡからオブジェクトＢへ通信メッセージＢが送信され、さらにオブジェクトＢからオブジェクトＣへメッセージＣが送信されるように、それぞれのオブジェクトＡ，Ｂがプログラムされている場合を考える。
【０１５４】
しかしながら、図１１〜図１３に示すように、オブジェクトＡ及びＢはテストハンドラとは異なる同一プロセス＃２内に存在し、オブジェクトＣ自体は未だ作成されていない。
【０１５５】
このような状況において、テストハンドラプロセス２１−１からテスト対象プロセス２１−２へのメッセージ通信（テストハンドラ２５からオブジェクト２９−１〜２９−２へのメッセージ通信）、同一プロセス内のテスト対象オブジェクト間のメッセージ通信（オブジェクト２９−１からオブジェクト２９−２へのメッセージ通信）、テスト対象プロセス２１−２からテストハンドラプロセス２１−２へのメッセージ通信（オブジェクト２９−２からテスト対象外オブジェクトへのメッセージ通信）の各メッセージ通信テストについて、図２０〜図２３のフロー図を用いて順に説明する。
【０１５６】
図２０は本実施形態におけるメッセージハンドラスレッドメッセージ通信の動作を示す流れ図であり、図２１は本実施形態におけるプロセスメッセージハンドラスレッドメッセージ通信の動作を示す流れ図である。
【０１５７】
また、図２２は本実施形態におけるテストハンドラスレッドメッセージ通信の動作を示す流れ図であり、図２３は本実施形態におけるオブジェクトスレッドメッセージ通信の動作を示す流れ図である。
【０１５８】
ａ）通信テスト＃１；テストハンドラ２５からオブジェクト２９−１〜２９−２へのメッセージ通信
まず、テストハンドラプロセス２１−１からテスト対象プロセス２１−２へのメッセージ通信に関し、メッセージ通信制御部２３のメッセージハンドラ３０−１およびテスト制御部２２のテストハンドラ２５の動作を説明する。
【０１５９】
テストハンドラ２５が駆動するテストシナリオ２７は、図１４（ａ）に示すフォーマットであらかじめ与えられている。図１４（ｂ）は本実施例における具体例である。
【０１６０】
テストシナリオ２７には、［シナリオ情報］、［オブジェクト名対応］、［メッセージ名対応］の三種類の情報が記述されている。最初の［シナリオ情報］には、送信元オブジェクト名（“テストハンドラ”）、送信先オブジェクト名（“オブジェクトＡ”）、メッセージ名（“メッセージＡ”）を順に記述する。次の［オブジェクト名対応］と［メッセージ名対応］は、テストハンドラ２５がメッセージ送受表示ＧＵＩ２８にシナリオ情報やメッセージ送受状況を表示するために利用される。［オブジェクト名対応］とは、オブジェクトＩＤとオブジェクト名の対応を表し、［メッセージ名対応］とは、メッセージＩＤとメッセージ名の対応を表す。なお、図１４において、左側の番号（１，２，３，．．等）がＩＤ（論理オブジェクトＩＤ１０１等に相当）を示し、番号の右側の名称（オブジェクトＡ，メッセージＡ等）がオブジェクト名等を示している。
【０１６１】
また、オブジェクトがメッセージを送信する際には、実際には送信元オブジェクトＩＤとメッセージＩＤを格納したものを作成する。以下では、説明を簡略化するため、メッセージの送信はメッセージ名（メッセージＡなど）で記述する。
【０１６２】
図２４はメッセージ送受表示ＧＵＩによって表示されるメッセージ通信テスト環境画面を示す図である。
【０１６３】
同図に示す画面において、テストを行う開発者によりシナリオ読み込みボタン１１１が指定入力されると（マウスクリック等による）、テストハンドラ２５によりテストシナリオ２６が読み込まれ、メッセージ送受表示ＧＵＩ２８のシナリオ一覧１１２にシナリオ情報が表示される。また、このときオブジェクトおよびメッセージ一覧１１３にはシナリオ２６から抽出されテストアイテムリスト２７に格納された情報が表示される。
【０１６４】
ここで、シナリオ一覧１１２のシナリオ情報が選択され、連続送信ボタン１１４が押されると、テストハンドラ２５により一定間隔でテストシナリオ２６に沿ったメッセージ送信が行われる。
【０１６５】
ここで、テストハンドラ２５がオブジェクト２９−１に向けてメッセージＡを送信することを考える。
【０１６６】
テストハンドラ２５のメッセージ送信メソッドは、図２５（ａ）に示す内容になっている。
【０１６７】
図２５は本実施形態のテストハンドラあるいはオブジェクトに対応する各メゾット内容例を示す図である。
【０１６８】
ここでテストハンドラ２５によりオブジェクト２９−１（オブジェクトＡ）に向けてメッセージＡが送信されると、まず送信先オブジェクト２９−１の論理オブジェクトＩＤと送信メッセージＡが図１２のメッセージハンドラ３０−１に渡され、メッセージハンドラキュー３３−１に格納される（図２０；Ｓ２２）。
【０１６９】
メッセージハンドラ３０−１により、メッセージハンドラキュー３３−１からオブジェクト２９−１の論理オブジェクトＩＤ１０１とメッセージＡが取り出され（Ｓ２３）、図１５のプロセス対応マップ３１に記述されたオブジェクト２９−１の論理オブジェクトＩＤ１０１に対応するプロセスが検索される（ステップＳ２４）。
【０１７０】
ここでまず、オブジェクト２９−１がメッセージハンドラ３０−１と同一プロセス２１−１に存在するかどうかが調べられる（Ｓ２５）。この場合、図１５にあるように、オブジェクトＡがテストハンドラ２５とは異なるプロセス＃２に存在することが判明する。したがって、メッセージハンドラ３０−１により、プロセス２１−２（＃２）に対応するプロセスメッセージハンドラ３４−１が取り出され（Ｓ３０）、オブジェクト２９−２の論理オブジェクトＩＤ１０１とメッセージＡがプロセスメッセージハンドラ３４−１に送信される（Ｓ３１）。オブジェクト２９−２の論理オブジェクトＩＤ１０１とメッセージＡが送信されると、これらがプロセス送信用メッセージキュー３５−１に格納され（Ｓ３２）、続いて共有メモリ２７−１上にオブジェクト２９−１の論理オブジェクトＩＤ１０１とメッセージＡとが置かれる。
【０１７１】
次に、送信先オブジェクト２９−１が存在するプロセス２１−２内のプロセスメッセージハンドラ３４−２により共有メモリ３７−１に置かれたオブジェクト２９−１の論理オブジェクトＩＤ１０１とメッセージＡが取り出され、プロセス受信用メッセージキュー３６−２に格納される（図２１；Ｓ３３）。プロセスメッセージハンドラ３４−２により、プロセス受信用メッセージキュー３６−２からオブジェクト２９−１の論理オブジェクトＩＤ１０１とメッセージＡが取り出される（Ｓ３４）。このメッセージＡがスレッド終了メッセージでないことが確認された上で（Ｓ３５）、これらがメッセージハンドラ３０−３に送信される（Ｓ３６）。
【０１７２】
この送信されたオブジェクト２９−１のオブジェクトＩＤとメッセージＡは、メッセージハンドラ３０−２によりメッセージハンドラキュー３３−２に一旦格納される（図２０；Ｓ２２）。メッセージハンドラ３０−２により、メッセージハンドラキュー３３−２からオブジェクト２９−１のオブジェクトＩＤとメッセージＡが取り出され（Ｓ２３）、図１５のプロセス対応マップ３１に記述されたオブジェクト２９−１の論理オブジェクトＩＤ１０１に対応するプロセスが検索される（Ｓ２４）。この場合、オブジェクト２９−１がメッセージハンドラ３０−２と同一プロセス２１−２に存在するかどうかが調べられる（Ｓ２５）。
【０１７３】
ここでは図１５にあるように、同一プロセス＃２に存在することが判明するので、メッセージＡがスレッド終了メッセージでないことが確認された上で（Ｓ２６）、メッセージハンドラ３０−２によって、図１６のオブジェクト対応マップ３２−２からオブジェクト２９−１の論理オブジェクトＩＤ１０１に対応するオブジェクト２９−１の動作時オブジェクトＩＤ１０２が検索される（Ｓ２７）。
【０１７４】
この場合には、オブジェクト２９−１の論理オブジェクトＩＤ１０１に対応する動作時オブジェクト１０２がオブジェクト対応マップ３２から取り出され（Ｓ２８）、送信先オブジェクト２９−１にメッセージＡが送信される（Ｓ２９）。
【０１７５】
メッセージＡが送信されると、送信メッセージＡが送信先オブジェクト２９−１に渡され、送信先オブジェクト２９−１のメッセージキュー３８−１に格納される（図２３；Ｓ４１）。このメッセージＡは送信先オブジェクト２９−１によってメッセージキュー３８−１から取り出され（Ｓ４２）、メッセージＡがスレッド終了メッセージでないことが確認された上で（Ｓ４３）、メッセージＡに対応するメソッドＡが図１７のメッセージマップ３９−１から検索される（Ｓ４４）。そしてメッセージＡに対応するメソッドＡが呼び出され、実行される（Ｓ４５）。
【０１７６】
こうして、正常なメッセージ通信並びに通信に基づく正常なオブジェクト動作がなされたか否かが確認される。なお、このメッセージ通信状況は、例えば図２４に示すようにメッセージ送受表示ＧＵＩ２８のメッセージ送受信状況１１５に表示される。
【０１７７】
ｂ）通信テスト＃２；オブジェクト２９−１からオブジェクト２９−２へのメッセージ通信
次に、同一プロセス内のテスト対象オブジェクト間のメッセージ通信に関し、メッセージ通信制御部２３のメッセージハンドラ３０−２およびアクタ部２４のオブジェクト２９−１〜２９−２の動作を説明する。
【０１７８】
オブジェクト２９−１のメソッドＡによりオブジェクト２９−２に向けてメッセージＢを送信することとなる場合を考える。この場合、オブジェクト２９−１のメソッドＡは、図２５（ｂ）に示す内容になる。
【０１７９】
ここでオブジェクト２９−１がオブジェクト２９−２に向けてメッセージＢを送信すると、送信先のオブジェクト２９−２のオブジェクトＩＤと送信メッセージＢがメッセージハンドラ３０−２に渡され、メッセージハンドラキュー３３−２に格納される（図２０；Ｓ２２）。メッセージハンドラ３０−２により、メッセージハンドラキュー３３−２からオブジェクト２９−２の論理オブジェクトＩＤ１０１とメッセージＢが取り出される（Ｓ２３）。さらに、図１５のプロセス対応マップ３１に記述されたオブジェクト２９−２のオブジェクトＩＤに対応するプロセスが検索される（Ｓ２４）。これによりオブジェクト２９−２がオブジェクト２９−１と同一プロセス２１−２（プロセス＃２）に存在するかどうかが調べられる（Ｓ２５）。
【０１８０】
この場合、図１５にあるように、各オブジェクト２０−１，２９−２が同一プロセスに存在することが判明するので、メッセージＢがスレッド終了メッセージでないことが確認された上で（Ｓ２６）、メッセージハンドラ３０−２により、図１６（ｂ）のオブジェクト対応マップ３２−２からオブジェクト２９−２のオブジェクトＩＤに対応するオブジェクトが検索される（Ｓ２７）。
【０１８１】
この検索の結果、メッセージハンドラ３０−２により、オブジェクト２９−２の論理オブジェクトＩＤ１０１から動作時オブジェクト１０２が取り出され（Ｓ２８）、送信先オブジェクト２９−２にメッセージＢが送信される（Ｓ２９）。
【０１８２】
この送信されたメッセージＢは送信先オブジェクト２９−２に渡され、メッセージキュー３８−２に格納される（図２３；Ｓ４１）。送信先オブジェクト２９−２により、メッセージキュー３８−２からメッセージＢが取り出され（Ｓ４２）、メッセージＢはスレッド終了メッセージでないことが確認され（Ｓ４３）、メッセージＢに対応するメソッドＢが図１７（ｂ）のメッセージマップ３９−２から検索される（Ｓ４４）。
【０１８３】
こうしてメッセージＢに対応するメソッドＢが呼び出され、オブジェクトＢにより実行される（ステップＳ４５）。
【０１８４】
なお、ここでは、テストの一部分として、オブジェクトＡからオブジェクトＢへのメッセージ送信という形で説明したが、例えば送信側オブジェクトＡとしてテストハンドラ２５を用いれば同一プロセス内のオブジェクト間通信の場合であってもメッセージ通信テストを実行できることになる。
【０１８５】
ｃ）通信テスト＃３；オブジェクト２９−２からテスト対象外オブジェクトへのメッセージ通信
次に、テスト対象プロセス２１−２からテストハンドラプロセス２１−２へのメッセージ通信に関し、テスト制御部２２、メッセージ制御部２３およびアクタ部２４の動作を説明する。
【０１８６】
ここでは、オブジェクト２９−２のメソッドＢによりテスト対象外のオブジェクトＣに向けてメッセージＣを通信することとなる場合を考える。オブジェクト２９−２のメソッドＢは、図２５（ｃ）に示す内容になる。
【０１８７】
この場合、オブジェクトＣへのメッセージをテストハンドラ２５に受信させるために、図１５にあるように、プロセス対応マップ３１では、オブジェクトＣが存在するプロセスをテストハンドラ２５が存在するプロセス２１−１（プロセス＃１）としている。一方、テストハンドラ２５が生成された際に、メッセージハンドラ３０−１に自分自身が登録される（図１９（ｅ）；Ｓ１８）。この時プロセス対応マップ３１でテストハンドラ２５が存在するプロセス２１−１に送信先オブジェクト（この場合はオブジェクトＣ）が対応付けられているときは、該当するオブジェクトＩＤもテストハンドラ２５自身として登録される。これは、テスト対象外であるオブジェクトＣへのメッセージ送信をテストハンドラ２５が受け取るための仕組みである。
【０１８８】
このような状況において、オブジェクト２９−２（オブジェクトＢ）がオブジェクトＣに向けてメッセージＣが送信されると、図２０のステップＳ２５までは先と同様な動作が行われる。
【０１８９】
ここで、図１５に示されるように、オブジェクトＣが存在するプロセスは、テストハンドラ２５が存在するプロセス２１−１であるため、メッセージハンドラ３０−２によって、プロセス２１−１に対応するプロセスメッセージハンドラ３４−２が取り出される（Ｓ３０）。さらに、オブジェクトＣの論理オブジェクトＩＤ１０１（テストハンドラ２５の動作時オブジェクトＩＤ１０２に対応）とメッセージＣがプロセスメッセージハンドラ３４−２に送信される（Ｓ３１）。
【０１９０】
送信されたオブジェクトＣの論理オブジェクトＩＤ１０１とメッセージＣは、プロセス送信用メッセージキュー３５−２に格納され（Ｓ３２）、続いて共有メモリ３７−２上に置かれる。
【０１９１】
次に、プロセス対応マップ３１で送信先オブジェクトＣが存在すると記述されたプロセス２１−１内のプロセスメッセージハンドラ３４−１によって、共有メモリ３７−２に置かれたオブジェクトＣの論理オブジェクトＩＤ１０１とメッセージＡが取り出され、プロセス受信用メッセージキュー３６−１に格納される（図２１；Ｓ３３）。オブジェクトＣの論理オブジェクトＩＤ１０１とメッセージＡはプロセスメッセージハンドラ３４−１によってプロセス受信用メッセージキュー３６−１から取り出される（Ｓ３４）。さらに、メッセージＡがスレッド終了メッセージでないことが確認された上で（Ｓ３５）、メッセージハンドラ３０−１に送信される（Ｓ３６）。
【０１９２】
送信されたオブジェクトＣの論理オブジェクトＩＤ１０１とメッセージＡは、メッセージハンドラ３０−１によって、メッセージハンドラキュー３３−１に格納される（図２０；Ｓ２２）。さらに、メッセージハンドラ３０−１によって、メッセージハンドラキュー３３−１からオブジェクトＣの論理オブジェクトＩＤ１０１とメッセージＣが取り出される（Ｓ２３）。
【０１９３】
この取り出されたオブジェクトＣの論理オブジェクトＩＤ１０１に対応するプロセスが、図１５のプロセス対応マップ３１から検索される（Ｓ２４）。これにより、オブジェクトＣがメッセージハンドラ３０−１と同一プロセス２１−１に存在するかどうか調べられる（Ｓ２５）。この場合は、同一プロセスに存在することが判明するので、メッセージＣがスレッド終了メッセージでないことが確認された上で（Ｓ２６）、メッセージハンドラ３０−１によって、図１６（ａ）のオブジェクト対応マップ３２−１からオブジェクトＣの論理オブジェクトＩＤ１０１に対応する動作時オブジェクトＩＤ１０２が検索される（Ｓ２７）。
【０１９４】
図１６（ａ）にあるように、オブジェクト対応マップ３２−１においてはオブジェクトＣの論理オブジェクトＩＤ１０１に対してはテストハンドラ２５の動作時オブジェクトＩＤ１０２が割り付けられている。したがって、テストハンドラ２５の動作時オブジェクトＩＤ１０２が取り出され（Ｓ２８）、オブジェクトＣの代用としてのテストハンドラ２５にメッセージＣが送信される（プＳ２９）。
【０１９５】
送信されたメッセージＣはテストハンドラ２５に渡され、テストハンドラ２５のメッセージキュー３８−０に格納される（図２２；Ｓ３７）。このメッセージＣは、テストハンドラ２５によってメッセージキュー３８−０から取り出され（Ｓ３８）、スレッド終了メッセージでないことが確認される（Ｓ３９）。さらに、同メッセージＣに基づき、メッセージ送受表示ＧＵＩ２８によって、送信元オブジェクト２９−２（オブジェクトＢ）の名前、送信先オブジェクトＣの名前、メッセージＣの名前がメッセージ送受信状況１１５に表示される（Ｓ４０）。
【０１９６】
こうして、例えばオブジェクトＣが未作成などの理由により存在しない場合でも異常終了とならずにメッセージ通信テストが可能となる。
【０１９７】
（システム停止）；
次に、システムを停止する際のプロセスの動作、テスト制御部２２、メッセージ通信制御部２３およびアクタ部２４の動作を図２６及び図２７のフロー図を用いて説明する。
【０１９８】
図２６はシステム停止時の処理を示す第１の流れ図である。
【０１９９】
図２７はシステム停止時の処理を示す第２の流れ図である。
【０２００】
テスト対象オブジェクトを含むプロセスを停止するときには、まず始めに、プロセスに存在しているオブジェクト２９−１〜２９−２が破壊される（図２６（ａ）；Ｓ４６）。次に、メッセージハンドラ３０−２が破壊される（Ｓ４７）。
【０２０１】
一方、テストハンドラ２５を含むプロセスを停止するときには、まず始めに、メッセージ送受表示ＧＵＩ２８が破壊される（図２６（ｂ）；Ｓ４８）。次に、テストハンドラ２５が破壊される（ステップＳ４９）、最後に、メッセージハンドラ３０−１が破壊される（Ｓ５０）。
【０２０２】
以下、それぞれの処理についてさらに詳しく説明する。
【０２０３】
まず、ステップＳ４６のオブジェクト２９−１〜２９−２の破壊時には、まず論理オブジェクトＩＤの登録がメッセージハンドラ３０−２から抹消される（図２６（ｃ）；ステップＳ５１）。続いて、自分自身にスレッド終了メッセージが送信され（Ｓ５２）、メッセージキュー３８−１〜３８−２を監視していたスレッドの終了が待たれたのち（Ｓ５３）、メッセージキュー３８−１〜３８−２が破壊される（ステップＳ５４）。
【０２０４】
また、ステップＳ４９のテストハンドラ２５の破壊時には、オブジェクトＩＤの登録がメッセージハンドラ３０−１から抹消される（図２７（ｄ）；Ｓ５５）さらに、自分自身にスレッド終了メッセージが送信され（Ｓ５６）、メッセージキュー３８−０を監視していたスレッドの終了が待たれたのち（Ｓ５７）、メッセージキュー３８−０が破壊される（ステップＳ５８）。
【０２０５】
次に、ステップＳ４７，Ｓ５０のメッセージハンドラ３０−１〜３０−２の破壊時には、まず、プロセスメッセージハンドラ３４−１〜３４−２が削除される（図２７（ｅ）；Ｓ５９）。さらに、自分自身にスレッド終了メッセージが送信され（Ｓ６０）、メッセージハンドラキュー３３−１〜３３−２を監視していたスレッドの終了が待たれたのち（Ｓ６１）、メッセージハンドラキュー３３−１〜３３−２が破壊される（Ｓ６２）。
【０２０６】
さらに、メッセージハンドラ３０の破壊時におけるステップＳ５９のプロセスメッセージハンドラ３４−１〜３４−２の破壊時には、まず自分自身にスレッド終了メッセージが送信される（図２７（ｆ）；Ｓ６３）。次に、プロセス受信用メッセージキュー３６−１〜３６−２を監視していたスレッドの終了が待たれたのち（Ｓ６４）、プロセス受信用メッセージキュー３６−１〜３６−２が破壊される（Ｓ６５）。さらに、プロセス送信用メッセージキュー３５−１〜３５−２が破壊される（Ｓ６６）。
【０２０７】
このようにしてメッセージ通信テストシステムが終了する。
【０２０８】
上述したように、本発明の実施の形態に係るオブジェクト指向メッセージ通信テスト装置は、第１の実施形態と同様な構成を設けた他、メッセージ通信テスト装置を提供するようにしたので、開発したオブジェクトをテストするためのテストシナリオを柔軟に選択・変更できるとともに、テスト対象のオブジェクトからテスト対象外へのオブジェクトへのメッセージ通信があるような場合でもテストプログラムを続行可能とすることができる。
【０２０９】
これらによってプロセス配置の変更に伴うプログラムの変更量を軽減するとともに、システム開発途上時のオブジェクトのテストを効率的に行い、システムを効率的に開発することができる。
【０２１０】
（発明の第３の実施の形態）
本実施形態においては、第１の実施形態の計算機システムに用いられるオブジェクト指向プログラムをテストするためのオブジェクト指向メッセージ通信テスト装置について説明する。また、第２の実施形態ではプロセス２１が２つの場合について説明したが、本実施形態ではプロセス２１が３つの場合を説明する。
【０２１１】
図２８は本発明の第３の実施の形態に係るオブジェクト指向メッセージ通信テスト装置の一例を示す構成図であり、図１１〜図２７と同一部分には同一符号を付して説明を省略し、ここでは異なる部分についてのみ述べる。
【０２１２】
同図に示すオブジェクト指向メッセージ通信テスト装置２０”は、第１及び第２の実施形態と同様な計算機上に構成されるものであり、オブジェクト２９−３（オブジェクトＣ）を含むプロセス２１−３（＃３）が設けられる他、第２の実施形態と同様に構成されている。
【０２１３】
このシステムにおいては、第２の実施形態でテスト対象外であったオブジェクトＣがオブジェクト２９−３として新たに別のプロセス＃３に配置されている。
【０２１４】
プロセス２１−３は、メッセージ通信制御部２３及びプロセスＣを含むアクタ部２４を備えるとともに、共有メモリ３７−３，３７−４を介してプロセス２１−１と通信できるようになっている。
【０２１５】
また、図２９は本実施形態のオブジェクト指向メッセージ通信テスト装置におけるメッセージ通信制御部の詳細構成例を示すブロック図であり、図１１〜図２８と同一部分には同一符号を付して説明を省略する。
【０２１６】
さらに、図３０は本実施形態のオブジェクト指向メッセージ通信テスト装置におけるテスト制御部並びにアクタ部の詳細構成例を示すブロック図であり、図１１〜図２９と同一部分には同一符号を付して説明を省略する。
【０２１７】
図３０には、メッセージキュー２８−３（Ｃ）及びメッセージマップ２９−３（Ｃ）が示されるが、これらは第２実施形態のメッセージキュー２８−１（Ａ），２８−２（Ｂ）及びメッセージマップ２９−１（Ａ），２９−２（Ｂ）と同様なものである。
【０２１８】
本実施形態においても、第２の実施形態と同様に、テストハンドラ２５からオブジェクト４９−１（オブジェクトＡ）に向けてメッセージＡが送信される場合を考える。つまり本実施形態は、第２の実施形態に示された状況からプログラム開発が進み、オブジェクトＣを含むプロセス２１−３（＃３）が完成し、このプロセス＃３も含めてテストをしようとする場合である。
【０２１９】
本実施形態の場合においては、テストハンドラ２５→オブジェクトＡ→オブジェクトＢ→オブジェクトＣ→オブジェクトＸという順でメッセージ送信が進行することになる。
【０２２０】
図３１は本実施形態のテストハンドラあるいはオブジェクトに対応する各メゾット内容例を示す図である。
【０２２１】
同図には図２５の場合に比べてオブジェクトＣのメゾットＣが加えられており（図３１（ｄ））、同メゾットＣではオブジェクトＸに対してメッセージＸを送信するようになっている。
【０２２２】
本実施形態において、オブジェクトＣが存在するプロセスを追加したことによる修正の必要が生じるのは図３２に示すプロセス対応マップ３１のみであり、テストプログラム自体を修正する必要はない。したがって、テスト対象のオブジェクトが増えて、オブジェクトのプロセス配置が変更されても、オブジェクトのプロセス配置を意識する必要はない。第２の実施形態に説明したように、オブジェクト対応マップは、プロセス対応マップ３１等の情報からテスト環境に適合するように自動生成されるためであり、メッセージマップ３９はそもそも変更する必要がないためである。
【０２２３】
図３２は本実施形態におけるプロセス対応マップの構成を示す図である。
【０２２４】
図３３は本実施形態におけるオブジェクト対応マップの構成を示す図であり、同図（ａ）はオブジェクト対応マップ３２−１、同図（ｂ）はオブジェクト対応マップ３２−２、同図（ｃ）はオブジェクト対応マップ３２−３、の構成を示している。
【０２２５】
図３４は本実施形態におけるメッセージマップの構成を示す図であり、同図（ａ）はメッセージマップ３９−１、同図（ｂ）はメッセージマップ３９−２、同図（ｃ）はメッセージマップ３９−３の構成を示している。
【０２２６】
なお、第１、第２の実施形態で説明したように、本システムではオブジェクト対応マップ３２は、オブジェクトが生成される際の立ち上げ処理時に登録されるため、これらのマップを事前に修正する必要はない。ただし、オブジェクト４９−３（オブジェクトＣ）を追加する際には、先の実施形態と同様に図３４に示すようなメッセージマップをオブジェクトＣに用意する。
【０２２７】
次に、以上のように構成された本実施形態におけるオブジェクト指向メッセージ通信テスト装置の動作について説明する。
【０２２８】
本実施形態においてもまず、図２４に示すメッセージ送受表示ＧＵＩ２８からテスト者が連続送信ボタン１１４をクリックすることで開始される。
【０２２９】
これにより、まず図３１のテストハンドラ２５からプロセス＃２のオブジェクトＡにメッセージが送信される。なお、メッセージ制御部２４やアクタ部２３等における処理は図３２，図３３及び図３４に示すプロセス対応マップ３１、オブジェクト対応マップ３２及び３９に従い、第１，第２の実施形態と同様にして行われる。
【０２３０】
次に、テストハンドラ２５からのメッセージを受け取ったオブジェクトＡからは、図３１（ｂ）に示すメソッドＡに従い、同一プロセス＃２内のオブジェクトＢに対してメッセージＢが出力される。ここまでは、第２の実施形態と同様である。
【０２３１】
さらに、オブジェクトＡからのメッセージＢを受け取ったオブジェクトＢからは、図３１（ｃ）に示すメソッドＢに従い、プロセス＃３のオブジェクトＣに対してメッセージＣが出力される。第２の実施形態ではプロセス＃３が存在しなかったため、このメッセージＣはプロセス＃１のテストハンドラ２５に戻されたが、本実施形態ではプロセス対応マップ３１に従い、現実に存在するプロセス＃３に送信される。
【０２３２】
次に、オブジェクトＢからのメッセージＣを受け取ったオブジェクトＣからは、図３１（ｄ）に示すメソッドＣに従い、オブジェクトＸに対してメッセージＸが出力される。本実施形態においては、オブジェクトＸは未だ存在しないので、オブジェクトＸは、図３２，図３３のプロセス対応マップ３１及びオブジェクト対応マップ３２−１からわかるようにプロセス＃１のテストハンドラ２５に割り付けられている。
【０２３３】
したがって、このメッセージＸは、テストハンドラ２５に送信され、これを受け取ったテストハンドラ２５からの通知により、その通信結果がメッセージ送受表示ＧＵＩ２８のメッセージ送受状況１１５に表示される。
【０２３４】
上述したように、本発明の実施の形態に係るオブジェクト指向メッセージ通信テスト装置は、第２の実施形態と同様な構成を設けた他、新たなオブジェクトＣを含むプロセス＃３を設けたが、オブジェクト対応マップ３２はプロセス対応マップ３１等の情報からテスト環境に適合するように自動生成されるので、オブジェクトＣが存在するプロセスを追加したことによる修正の必要が生じるのは図３２に示すプロセス対応マップ３１のみとすることができる。
【０２３５】
したがって、テスト対象のオブジェクトが増えて、オブジェクトのプロセス配置が変更されても、オブジェクトのプロセス配置を意識する必要はなく、適宜の段階毎の繰り返しテストを容易に実行することができる。
【０２３６】
なお、本実施形態では、プロセス数を３つに増やした場合を説明したが、例えばオブジェクトＢをオブジェクトＡとは別プロセスに配置してテストすることも容易に実現できる。すなわち、図２８でオブジェクト４９−２（オブジェクトＢ）を別のプロセス＃４に再配置し、プロセス間にオブジェクト４９−１（オブジェクトＡ）とのメッセージ通信を可能にするための共有メモリを設け、プロセス対応マップ３１を修正すればよい。
【０２３７】
第２，第３の実施形態をさらに一般化した構成を図３５〜図４１に示す。
【０２３８】
なお、図３５〜図４１において、プロセス１は、本実施形態のプロセス２１に対応し、同様に、テスト制御部２，メッセージ通信制御部３，アクタ部４，テストハンドラ５，テストシナリオ６，テストアイテムリスト７，メッセージ送受表示ＧＵＩ８，オブジェクト９，メッセージハンドラ１０，プロセス対応マップ１１，オブジェクト対応マップ１２，メッセージハンドラキュー１３，プロセスメッセージハンドラ１４，プロセス送信用メッセージキュー１５，プロセス受信用メッセージキュー１６，共有メモリ１７，メッセージキュー１８，メッセージマップ１９は、それぞれ本実施形態のテスト制御部２２，メッセージ通信制御部２３，アクタ部２４，テストハンドラ２５，テストシナリオ２６，テストアイテムリスト２７，メッセージ送受表示ＧＵＩ２８，オブジェクト２９，メッセージハンドラ３０，プロセス対応マップ３１，オブジェクト対応マップ３２，メッセージハンドラキュー３３，プロセスメッセージハンドラ３４，プロセス送信用メッセージキュー３５，プロセス受信用メッセージキュー３６，共有メモリ３７，メッセージキュー３８，メッセージマップ３９に対応する。
【０２３９】
この一般化構成の場合も、上記と同様なメッセージ通信テストを実現させることができる。
【０２４０】
（発明の第４の実施の形態）
第２の実施形態では、本発明に係るオブジェクト指向メッセージ通信テスト装置においては、テストシナリオ２６に従う場合と、テストアイテムリスト２７を利用しメッセージ送受表示ＧＵＩ２８から直接指示入力する場合とについてテストが可能である旨説明している。このうち、第２，第３実施形態においては、テストシナリオ２６に従う場合を説明した。本実施形態では、第３の実施形態と同様な構成において、テストアイテムリスト２７を利用しメッセージ送受表示ＧＵＩ２８から直接テスト指示入力する場合について説明する。
【０２４１】
本実施形態では、図２８で示した第２の実施実施形態のテスト環境を含むマルチプロセス／マルチスレッドシステムの構造を示す計算機システムを利用する。
【０２４２】
このような構成を備えたオブジェクト指向メッセージ通信テスト装置においては、まずシステム生成時の処理により、テストシナリオ２６からオブジェクトおよびメッセージを抽出したテストアイテムリスト２７が作成される。さらに、本実施形態では、このテストアイテムリスト２７より任意のオブジェクトおよびメッセージが選択されてテストが実行されるようになっている。
【０２４３】
図４２は本発明の第４の実施形態のオブジェクト指向メッセージ通信テスト装置におけるテストシナリオを示す図である。ここで、図４２（ａ）はテストシナリオ２６の一般フォーマットであり、同図（ｂ）は本実施例における具体例としてのテストシナリオ２６である。
【０２４４】
システム生成時に、テストハンドラ２５が生成されると、同テストハンドラ２５の処理によりテストシナリオ２６の［オブジェクト名対応］の欄から送信元オブジェクトおよび送信先オブジェクトが、［メッセージ名対応］の欄からメッセージの候補が抽出される。
【０２４５】
本実施形態の状況では、図４２（ｂ）に示すように、オブジェクトの候補として“テストハンドラ”、“オブジェクトＡ”、“オブジェクトＢ”、“オブジェクトＣ”が、メッセージの候補として“メッセージＡ”、“メッセージＢ”、“メッセージＣ”、“メッセージＸ”が抽出される。
【０２４６】
次に、テストシナリオ２６の［オブジェクト名対応］の欄からオブジェクトＩＤとオブジェクト名の対応が、［メッセージ名対応］の欄からメッセージＩＤとメッセージ名の対応が識別される。これらの情報に基づき、テストハンドラ２５によって、テストシナリオ２６からテストアイテムリスト２７が作成される。なお、テストアイテムリスト２７とは、送信元オブジェクトおよび送信先オブジェクトの候補となるオブジェクトを列挙したオブジェクトリストと、送信メッセージの候補となるメッセージを列挙したメッセージリストとからなる。
【０２４７】
図４３は本実施形態におけるオブジェクトリストの構成例を示す図である。ここで、オブジェクトリストは、図４３（ａ）に示すフォーマットの情報であり、同図（ｂ）は本実施例における具体例を示す。
【０２４８】
図４４は本実施形態におけるメッセージリストの構成例を示す図である。メッセージリストは、図４４（ａ）に示すフォーマットの情報であり、同図（ｂ）は本実施例における具体例を示す。
【０２４９】
また、図４５はメッセージ送受表示ＧＵＩによって表示されるメッセージ通信テスト環境画面を示す図であり、図２４と同一部分には同一符号を付して詳細説明を省略する。
【０２５０】
オブジェクトリスト及びメッセージリストが上記のようになっている結果、メッセージ送受表示ＧＵＩ２８によって、図４５に示すメッセージ通信テスト環境のオブジェクトおよびメッセージ一覧１１３に、送信元オブジェクト１２１、送信先オブジェクト１２２、およびメッセージ１２３が表示されることになる。
【０２５１】
ここで、図４５に示されるメッセージ通信テスト環境を用い、開発者が任意選択モードでテストを行う場合を考える。
【０２５２】
この場合、図４５における送信元オブジェクト１２１を“テストハンドラ”とし、送信先オブジェクト１２２を“オブジェクトＡ”とし、送信メッセージ１２３を“メッセージＢ”として選び送信ボタン１２４を押して、テストを開始したことを想定する。
【０２５３】
まず、図４６（ａ）に示すテストハンドラ２５の送信メソッドにより、オブジェクトＡにメッセージＢが送信される。この後、メッセージＢがオブジェクトＡに到達するまでの動作は、既に示した実施形態と同様であるので省略する。
【０２５４】
図４６は本実施形態における各メゾットの例を示す図である。
【０２５５】
また、図４７は本実施形態のオブジェクトＡ，Ｂのメッセージマップを示す図である。なお、メッセージマップの一般形は先の実施形態と同様であるので省略する。
【０２５６】
一方、テストハンドラ２５から送信された送信先であるオブジェクトＡには、図４７（ａ）に示すようなメッセージマップが用意されている。ここでオブジェクトＡには、メッセージＢに対応するメソッドＢが存在する。
【０２５７】
したがって、図４６（ｂ）に示すメソッドが実行されることになる。図４６（ｂ）のメソッドにより、オブジェクトＡからオブジェクトＢにメッセージＸが送信される。
【０２５８】
以降、オブジェクトＢのメッセージマップに基づき、オブジェクトＢのメゾットＸ（図４６（ｃ））が実行され、テストが継続されていくことになる。
【０２５９】
上述したように、本発明の実施の形態に係るオブジェクト指向メッセージ通信テスト装置は、第２，第３の実施形態と同様な構成を設け、テストシナリオ２６のシナリオ情報からテストアイテムリスト２７を抽出し、これを用いて任意の組み合わせでテストを行い得るようにしたので、テスト開始段階において開発者が動的にシナリオを組み立てることができ、より効率的なメッセージ通信テストを実施することができる。
【０２６０】
すなわちオブジェクトおよびメッセージ一覧１１３に示される各要素を、テストシステム立ち上げ後に自在に組み替えてテストを実行することが可能になる。
【０２６１】
以上の第２〜第４実施形態に説明したオブジェクト指向メッセージ通信テスト装置を利用することにより、オブジェクトに割り当てられるプロセスが変更されても柔軟に対応することが可能であり、テストプログラムを変更することなしにテストシナリオを柔軟に修正・追加することが可能であり、シナリオに沿ってテストを行うだけでなく任意のオブジェクトに任意のメッセージを送信することも可能となる。
【０２６２】
なお、本発明は、上記各実施の形態に限定されるものでなく、その要旨を逸脱しない範囲で種々に変形することが可能である。
【０２６３】
第２〜第４の実施形態は、第１の実施形態のシステムをテストする場合に対応して本発明を適用したが、本発明の適用範囲はこれに限られるものではない。板発明は、第１の実施形態のシステム以外のオブジェクト指向プログラムに対しても適宜変形して適用させることができる。
【０２６４】
また、実施形態では、同一計算機内に各プロセスを生成する場合について説明したが、本発明は同一計算機内にてメッセージ送信テストを実行する場合に限られるものではない。例えばＬＡＮ等のネットワーク上の複数計算機に跨って各プロセスを設け、データ伝送路を介するメッセージ送信テストを実行するようにしてもよい。
【０２６５】
なお、実施形態に説明した装置は、記憶媒体に格納したプログラムをコンピュータに読み込ませることで実現させることができる。
【０２６６】
ここで本発明における記憶媒体としては、磁気ディスク、フロッピーディスク、ハードディスク、光ディスク（ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＤＶＤ等）、光磁気ディスク（ＭＯ等）、半導体メモリ等、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であってもよい。
【０２６７】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が本実施形態を実現するための各処理の一部を実行してもよい。
【０２６８】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶又は一時記憶した記憶媒体も含まれる。
【０２６９】
また、記憶媒体は１つに限らず、複数の媒体から本実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何らの構成であってもよい。
【０２７０】
なお、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、本実施形態における各処理を実行するものであって、パソコン等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であってもよい。
【０２７１】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【０２７２】
【発明の効果】
以上詳記したように本発明によれば、テストシナリオから情報を抽出し任意選択モード用のテスト情報を作成するようにしたので、開発したオブジェクトをテストするためのテストシナリオを柔軟に選択・変更でき、ひいてはシステム開発途上時のオブジェクトのテストを効率的に行い、システムを効率的に開発できるオブジェクト指向メッセージ通信テスト装置及び記憶媒体を提供することができる。
【０２７３】
また、本発明によれば、未作成のオブジェクトの通信先をテストハンドラに割り当てるようにしたので、テスト対象のオブジェクトからテスト対象外のオブジェクトへのメッセージ通信があるような場合でもテストプログラムを続行可能とし、ひいてはシステム開発途上時のオブジェクトのテストを効率的に行い、システムを効率的に開発できるオブジェクト指向メッセージ通信テスト装置及び記憶媒体を提供することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態における計算機システムの一例を示す構成図。
【図２】プロセス対応マップの構成例を示す図。
【図３】オブジェクト対応マップの構成例を示す図。
【図４】各プロセスにおけるアクタ部の詳細構成例を示すブロック図。
【図５】メッセージマップの構成例を示す図。
【図６】各プロセスにおけるメッセージ通信部の詳細構成例を示すブロック図。
【図７】メッセージハンドラスレッドによるメッセージ通信処理の様子を示す流れ図。
【図８】オブジェクト２９−１のメソッドｍ１の内容例を示す図。
【図９】アクタ部のオブジェクトスレッドによるメッセージ通信処理を示す図。
【図１０】他のプロセスから受信したメッセージがプロセスメッセージハンドラにより処理される様子を示す流れ図。
【図１１】本発明の第２の実施の形態に係るオブジェクト指向メッセージ通信テスト装置の一例を示す構成図。
【図１２】同実施形態のオブジェクト指向メッセージ通信テスト装置におけるメッセージ通信制御部の詳細構成例を示すブロック図。
【図１３】同実施形態のオブジェクト指向メッセージ通信テスト装置におけるテスト制御部並びにアクタ部の詳細構成例を示すブロック図。
【図１４】テストシナリオの内容例を示す図。
【図１５】同実施形態におけるプロセス対応マップの構成を示す図。
【図１６】同実施形態におけるオブジェクト対応マップの構成を示す図。
【図１７】同実施形態におけるメッセージマップの構成を示す図。
【図１８】同実施形態におけるシステム起動の際の立ち上げ処理を説明する第１の図。
【図１９】同実施形態におけるシステム起動の際の立ち上げ処理を説明する第２の図。
【図２０】同実施形態におけるメッセージハンドラスレッドメッセージ通信の動作を示す流れ図。
【図２１】同実施形態におけるプロセスメッセージハンドラスレッドメッセージ通信の動作を示す流れ図。
【図２２】同実施形態におけるテストハンドラスレッドメッセージ通信の動作を示す流れ図。
【図２３】同実施形態におけるオブジェクトスレッドメッセージ通信の動作を示す流れ図。
【図２４】メッセージ送受表示ＧＵＩによって表示されるメッセージ通信テスト環境画面を示す図。
【図２５】同実施形態のテストハンドラあるいはオブジェクトに対応する各メゾット内容例を示す図。
【図２６】システム停止時の処理を示す第１の流れ図。
【図２７】システム停止時の処理を示す第２の流れ図。
【図２８】本発明の第３の実施の形態に係るオブジェクト指向メッセージ通信テスト装置の一例を示す構成図。
【図２９】同実施形態のオブジェクト指向メッセージ通信テスト装置におけるメッセージ通信制御部の詳細構成例を示すブロック図。
【図３０】同実施形態のオブジェクト指向メッセージ通信テスト装置におけるテスト制御部並びにアクタ部の詳細構成例を示すブロック図。
【図３１】同実施形態のテストハンドラあるいはオブジェクトに対応する各メゾット内容例を示す図。
【図３２】同実施形態におけるプロセス対応マップの構成を示す図。
【図３３】同実施形態におけるオブジェクト対応マップの構成を示す図。
【図３４】同実施形態におけるメッセージマップの構成を示す図。
【図３５】オブジェクト指向メッセージ通信テスト装置の一般的な構成例を示すブロック図。
【図３６】図３５のオブジェクト指向メッセージ通信テスト装置におけるプロセス＃１のメッセージ通信制御部の詳細構成例を示すブロック図。
【図３７】図３５のオブジェクト指向メッセージ通信テスト装置におけるプロセス＃２のメッセージ通信制御部の詳細構成例を示すブロック図。
【図３８】図３５のオブジェクト指向メッセージ通信テスト装置におけるプロセス＃ｎのメッセージ通信制御部の詳細構成例を示すブロック図。
【図３９】図３５のオブジェクト指向メッセージ通信テスト装置におけるプロセス＃１のテスト制御部の詳細構成例を示すブロック図。
【図４０】図３５のオブジェクト指向メッセージ通信テスト装置におけるプロセス＃２のアクタ部の詳細構成例を示すブロック図。
【図４１】図３５のオブジェクト指向メッセージ通信テスト装置におけるプロセス＃ｎのアクタ部の詳細構成例を示すブロック図。
【図４２】本発明の第４の実施形態のオブジェクト指向メッセージ通信テスト装置におけるテストシナリオを示す図。
【図４３】同実施形態におけるオブジェクトリストの構成例を示す図。
【図４４】同実施形態におけるメッセージリストの構成例を示す図。
【図４５】メッセージ送受表示ＧＵＩによって表示されるメッセージ通信テスト環境画面を示す図。
【図４６】同実施形態における各メゾットの例を示す図。
【図４７】同実施形態のオブジェクトＡ，Ｂのメッセージマップを示す図。
【図４８】メッセージ通信を行う場合における従来のプログラム記述方法の例を示す図。
【図４９】開発途中におけるオブジェクト間通信テストの様子を示す図。
【図５０】実行されたテストプログラムが途中で異常終了してしまう場合を示す図。
【符号の説明】
１−１〜１−３…プロセス＃１〜＃ｎ
２…テスト制御部
３…メッセージ通信制御部
４…アクタ部
５…テストハンドラ
６…テストシナリオ
７…テストアイテムリスト
８…メッセージ送受表示ＧＵＩ
９−１〜９−４…オブジェクトＡ〜Ｆ
１０−１〜１０−３…メッセージハンドラＰ１〜Ｐｎ
１１…プロセス対応マップ
１２−１〜１２−３…オブジェクト対応マップＰ１〜Ｐｎ
１３−１〜１３−３…メッセージハンドラキューＰ１〜Ｐ３
１４−１〜１４−６…プロセスメッセージハンドラＰ１−Ｐ２〜Ｐｎ−Ｐｎ−１
１５−１〜１５−６…プロセス送信用メッセージキューＰ１−Ｐ２〜Ｐｎ−Ｐｎ−１
１６−１〜１６−６…プロセス受信用メッセージキューＰ２−Ｐ１〜Ｐｎ−１−Ｐｎ
１７−１〜１７−１２…共有メモリＰ１−Ｐ２〜Ｐｎ−Ｐｎ−１−Ｐｎ
１８−０〜１８−４…メッセージキューＡ〜Ｆ
１９−１〜１９−４…メッセージマップＡ〜Ｆ
２０…計算機システム
２０′，２０”…オブジェクト指向メッセージ通信テスト装置
２１−１〜２１−２…プロセス＃１〜＃２
２２…テスト制御部
２３…メッセージ通信制御部
２４…アクタ部
２５…テストハンドラ
２６…テストシナリオ
２７…テストアイテムリスト
２８…メッセージ送受表示ＧＵＩ
２９−１〜２９−２…オブジェクトＡ〜Ｂ
３０−１〜３０−２…メッセージハンドラＰ１〜Ｐ２
３１…プロセス対応マップ
３２−１〜３２−２…オブジェクト対応マップＰ１〜Ｐ２
３３−１〜３３−２…メッセージハンドラキューＰ１〜Ｐ２
３４−１〜３４−２…プロセスメッセージハンドラＰ１−Ｐ２〜Ｐ２−Ｐ１
３５−１〜３５−２…プロセス送信用メッセージキューＰ１−Ｐ２〜Ｐ２−Ｐ１
３６−１〜３６−２…プロセス受信用メッセージキューＰ２−Ｐ１〜Ｐ１−Ｐ２
３７−１〜３７−２…共有メモリＰ１−Ｐ２〜Ｐ２−Ｐ１
３８−０〜３８−２…メッセージキューＡ〜Ｂ
３９−１〜３９−２…メッセージマップＡ〜Ｂ
１０１…論理オブジェクトＩＤ
１０２…動作時オブジェクトＩＤ
【図１】
0003791876.tif 000002
【図２】
0003791876.tif 000003
【図３】
0003791876.tif 000004
【図４】
0003791876.tif 000005
【図５】
0003791876.tif 000006
【図６】
0003791876.tif 000007
【図７】
0003791876.tif 000008
【図８】
0003791876.tif 000009
【図９】
0003791876.tif 000010
【図１０】
0003791876.tif 000011
【図１１】
0003791876.tif 000012
【図１２】
0003791876.tif 000013
【図１３】
0003791876.tif 000014
【図１４】
0003791876.tif 000015
【図１５】
0003791876.tif 000016
【図１６】
0003791876.tif 000017
【図１７】
0003791876.tif 000018
【図１８】
0003791876.tif 000019
【図１９】
0003791876.tif 000020
【図２０】
0003791876.tif 000021
【図２１】
0003791876.tif 000022
【図２２】
0003791876.tif 000023
【図２３】
0003791876.tif 000024
【図２４】
0003791876.tif 000025
【図２５】
0003791876.tif 000026
【図２６】
0003791876.tif 000027
【図２７】
0003791876.tif 000028
【図２８】
0003791876.tif 000029
【図２９】
0003791876.tif 000030
【図３０】
0003791876.tif 000031
【図３１】
0003791876.tif 000032
【図３２】
0003791876.tif 000033
【図３３】
0003791876.tif 000034
【図３４】
0003791876.tif 000035
【図３５】
0003791876.tif 000036
【図３６】
0003791876.tif 000037
【図３７】
0003791876.tif 000038
【図３８】
0003791876.tif 000039
【図３９】
0003791876.tif 000040
【図４０】
0003791876.tif 000041
【図４１】
0003791876.tif 000042
【図４２】
0003791876.tif 000043
【図４３】
0003791876.tif 000044
【図４４】
0003791876.tif 000045
【図４５】
0003791876.tif 000046
【図４６】
0003791876.tif 000047
【図４７】
0003791876.tif 000048
【図４８】
0003791876.tif 000049
【図４９】
0003791876.tif 000050
【図５０】
0003791876.tif 000051