(57)【要約】【課題】クラスの状態の明確な定義の有無に拘わらず、あらゆるクラスに対して、「状態の網羅」という１つの尺度に基づいたテストの効率化を可能にする。【解決手段】判定対象オブジェクトとその判定対象状態を指定し（Ｓ２０１）、状態判定メソッド集合を作成、登録する（Ｓ２０２）。複数の状態判定メソッド集合が作成された場合には、使用する状態判定メソッド集合を選択する。判定対象状態である各具象状態に対して、選択された状態判定メソッド集合に含まれる全てのメソッドをそれぞれ呼び出し（Ｓ２０３）、実行結果を記録する（Ｓ２０４）。各具象状態に対して、プログラムの実行に使用した状態判定メソッド集合と実行結果とを足して擬似状態を作成する（Ｓ２０５）。複数の擬似状態を得た複数の異なる具象状態を、同一の擬似状態となる具象状態ごとにグループ化する（Ｓ２０６）。【選択図】  図２
2004213053.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを利用してオブジェクト指向プログラムにおけるオブジェクトの状態を分類する方法において、
判定対象となる判定対象オブジェクトおよびその状態を指定する判定対象オブジェクト指定ステップと、
前記判定対象オブジェクトの前記指定された状態から呼び出されるメソッドを要素とするメソッド集合を作成するメソッド集合作成ステップと、
前記判定対象オブジェクトの前記指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を判定対象状態とし、その判定対象状態から前記メソッド集合に含まれるメソッドを呼び出すプログラムを実行するプログラム実行ステップと、
前記メソッドを呼び出した場合の実行結果を記録する実行結果記録ステップと、
前記判定対象オブジェクトの前記判定対象状態に対して、前記メソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の前記実行結果とをマージして擬似状態を作成する擬似状態作成ステップと、
を含むことを特徴とするオブジェクト状態分類方法。
【請求項２】
複数の前記判定対象状態に対して複数の前記擬似状態が作成された場合に、それらの複数の擬似状態を比較して、同一の擬似状態ごとに分類する擬似状態分類ステップを含む、
ことを特徴とする請求項１に記載のオブジェクト状態分類方法。
【請求項３】
前記メソッド集合作成ステップは、
前記メソッド集合として複数のメソッド集合が作成された場合に、使用するメソッド集合を選択するメソッド集合選択ステップを含む、
ことを特徴とする請求項1または請求項２に記載のオブジェクト状態分類方法。
【請求項４】
前記メソッド集合作成ステップは、
前記判定対象オブジェクトの前記指定された状態から呼び出されるメソッドを要素とする状態探索用のメソッド集合を作成する第１のメソッド集合作成ステップと、
前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態から呼び出されるメソッドを要素とする状態判定用のメソッド集合を作成する第２のメソッド集合作成ステップを含み、
前記プログラム実行ステップは、
前記判定対象オブジェクトの前記指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を実行前状態とし、その実行前状態から前記状態探索用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行する第１の実行ステップと、
前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態から前記状態判定用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行する第２の実行ステップとを含み、
前記擬似状態作成ステップは、前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態を前記判定対象状態とし、その判定対象状態に対して、前記状態判定用のメソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の実行結果とをマージして擬似状態を作成するステップを含む、
ことを特徴とする請求項１乃至請求項３のいずれかに記載のオブジェクト状態分類方法。
【請求項５】
前記擬似状態分類ステップは、
前記判定対象状態に対して得られた前記擬似状態が未登録である場合にその擬似状態を登録するステップを含み、
前記プログラム実行ステップは、
前記擬似状態が新たに登録された場合に、その擬似状態を得た前記判定対象状態を前記実行前状態として、前記第１と第２の実行ステップを繰り返すステップを含む、
ことを特徴とする請求項４に記載のオブジェクト状態分類方法。
【請求項６】
コンピュータを利用してオブジェクト指向プログラムにおける継承関係にある複数のオブジェクトの状態を分類する方法において、
前記請求項４または請求項５に記載の方法を用いて、前記複数のオブジェクト中における親クラスと子クラスのオブジェクトの擬似状態を検出する擬似状態検出ステップと、
前記親クラスと子クラスのオブジェクトに対して得られた擬似状態を比較してその差分を検出する擬似状態差分検出ステップとを含み、
前記擬似状態検出ステップは、
前記親クラスのオブジェクトに対し、前記状態探索用と状態判定用のメソッド集合として当該親クラス用の各メソッド集合を使用して、当該親クラスのオブジェクトの擬似状態を検出する親クラス擬似状態検出ステップと、
前記子クラスのオブジェクトに対し、前記状態探索用のメソッド集合として当該親クラス用のメソッド集合とは異なるメソッド集合を使用し、かつ、前記状態判定用のメソッド集合として当該親クラス用のメソッド集合と同じメソッド集合を使用して、当該子クラスのオブジェクトの擬似状態を検出する子クラス擬似状態検出ステップを含む、
ことを特徴とするオブジェクト状態分類方法。
【請求項７】
コンピュータを利用してオブジェクト指向プログラムにおけるオブジェクトの状態を分類するシステムにおいて、
判定対象となる判定対象オブジェクトおよびその状態を指定する判定対象オブジェクト指定部と、
前記判定対象オブジェクトの前記指定された状態から呼び出されるメソッドを要素とするメソッド集合を作成するメソッド集合作成部と、
前記判定対象オブジェクトの前記指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を判定対象状態とし、その判定対象状態から前記メソッド集合に含まれるメソッドを呼び出すプログラムを実行するプログラム実行部と、
前記メソッドを呼び出した場合の実行結果を記録する実行結果記録部と、
前記判定対象オブジェクトの前記判定対象状態に対して、前記メソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の前記実行結果とをマージして擬似状態を作成する擬似状態作成部と、
を備えたことを特徴とするオブジェクト状態分類システム。
【請求項８】
前記メソッド集合作成部は、
前記判定対象オブジェクトの前記指定された状態から呼び出されるメソッドを要素とする状態探索用のメソッド集合を作成する第１のメソッド集合作成部と、
前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態から呼び出されるメソッドを要素とする状態判定用のメソッド集合を作成する第２のメソッド集合作成部を含み、
前記プログラム実行部は、
前記判定対象オブジェクトの前記指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を実行前状態とし、その実行前状態から前記状態探索用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行した後に、当該メソッドの呼び出しにより得られた状態から前記状態判定用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行するように構成され、
前記擬似状態作成部は、前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態を前記判定対象状態とし、その判定対象状態に対して、前記状態判定用のメソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の実行結果とをマージして擬似状態を作成するように構成された、
ことを特徴とする請求項７に記載のオブジェクト状態分類システム。
【請求項９】
コンピュータを利用してオブジェクト指向プログラムにおける継承関係にある複数のオブジェクトの状態を分類するシステムにおいて、
前記請求項８に記載のシステムを用いて、前記複数のオブジェクト中における親クラスと子クラスのオブジェクトの擬似状態を検出する擬似状態検出部と、
前記親クラスと子クラスのオブジェクトに対して得られた擬似状態を比較してその差分を検出する擬似状態差分検出部とを含み、
前記擬似状態検出部は、
前記親クラスのオブジェクトに対し、前記状態探索用と状態判定用のメソッド集合として当該親クラス用の各メソッド集合を使用して、当該親クラスのオブジェクトの擬似状態を検出すると共に、
前記子クラスのオブジェクトに対し、前記状態探索用のメソッド集合として当該親クラス用のメソッド集合とは異なるメソッド集合を使用し、かつ、前記状態判定用のメソッド集合として当該親クラス用のメソッド集合と同じメソッド集合を使用して、当該子クラスのオブジェクトの擬似状態を検出するように構成された、
ことを特徴とするオブジェクト状態分類システム。
【請求項１０】
コンピュータを利用してオブジェクト指向プログラムにおけるオブジェクトの状態を分類するためのプログラムにおいて、
判定対象となる判定対象オブジェクトおよびその状態を指定する判定対象オブジェクト指定機能と、
前記判定対象オブジェクトの前記指定された状態から呼び出されるメソッドを要素とするメソッド集合を作成するメソッド集合作成機能と、
前記判定対象オブジェクトの前記指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を判定対象状態とし、その判定対象状態から前記メソッド集合に含まれるメソッドを呼び出すプログラムを実行するプログラム実行機能と、
前記メソッドを呼び出した場合の実行結果を記録する実行結果記録機能と、
前記判定対象オブジェクトの前記判定対象状態に対して、前記メソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の前記実行結果とをマージして擬似状態を作成する擬似状態作成機能と、
をコンピュータに実現させることを特徴とするオブジェクト状態分類用のプログラム。
【請求項１１】
前記メソッド集合作成機能は、
前記判定対象オブジェクトの前記指定された状態から呼び出されるメソッドを要素とする状態探索用のメソッド集合を作成する第１のメソッド集合作成機能と、
前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態から呼び出されるメソッドを要素とする状態判定用のメソッド集合を作成する第２のメソッド集合作成機能を含み、
前記プログラム実行機能は、
前記判定対象オブジェクトの前記指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を実行前状態とし、その実行前状態から前記状態探索用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行する第１の実行機能と、
前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態から前記状態判定用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行する第２の実行機能とを含み、
前記擬似状態作成機能は、前記状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態を前記判定対象状態とし、その判定対象状態に対して、前記状態判定用のメソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の実行結果とをマージして擬似状態を作成する機能を含む、
ことを特徴とする請求項１０に記載のオブジェクト状態分類用のプログラム。
【請求項１２】
コンピュータを利用してオブジェクト指向プログラムにおける継承関係にある複数のオブジェクトの状態を分類するためのプログラムにおいて、
前記請求項１１に記載のプログラムを用いて、前記複数のオブジェクト中における親クラスと子クラスのオブジェクトの擬似状態を検出する擬似状態検出機能と、
前記親クラスと子クラスのオブジェクトに対して得られた擬似状態を比較してその差分を検出する擬似状態差分検出機能とをコンピュータに実現させるプログラムであって、
前記擬似状態検出機能は、
前記親クラスのオブジェクトに対し、前記状態探索用と状態判定用のメソッド集合として当該親クラス用の各メソッド集合を使用して、当該親クラスのオブジェクトの擬似状態を検出する親クラス擬似状態検出機能と、
前記子クラスのオブジェクトに対し、前記状態探索用のメソッド集合として当該親クラス用のメソッド集合とは異なるメソッド集合を使用し、かつ、前記状態判定用のメソッド集合として当該親クラス用のメソッド集合と同じメソッド集合を使用して、当該子クラスのオブジェクトの擬似状態を検出する子クラス擬似状態検出機能を含む、
ことを特徴とするオブジェクト状態分類用のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向プログラムにおいて、テストの効率化を目的として擬似的な状態を定義するために使用されるオブジェクト状態分類方法とシステムに関する。
【０００２】
【従来の技術】
オブジェクト指向プログラムのクラスに対する単体テストでは、多様な状態のオブジェクトに対して、多様なメソッドを呼び出すという手法が主流である（例えば、特許文献１、２および非特許文献１、２参照。）。この場合、クラスにどのような状態が存在するかはプログラム設計者が決定することであるが、実際に個々のクラスに対してどのような状態が存在するか明確に定義されることは少ない。
【０００３】
また、効率的にクラスのテストを行うための具体的な方法としては、例えば、抽象的な状態（メンバ変数の範囲によって状態が定義されている場合など）から具体的な状態を１つだけ作り出してテストに用いる、等の方法も考えられる。しかし、この方法は、状態の定義がなされていて初めて可能となる方法である。逆に言えば、クラスの状態が明確に定義されていない場合には、「クラスの状態」というものに基づいてテストの効率化を図ることは不可能である。
【０００４】
【特許文献１】
特開平９−３２５９５２号公報
【特許文献２】
特開平７−２６２０４４号公報
【非特許文献１】
ヒョンソクホン（Hyoung Seok Hong），ヨンレクォン（Young Rae Kwon），ソントクチャ（Sung Deok Cha）著，“有限状態機械によるオブジェクト指向テスト（Testing Object-Oriented Based on Finite State Machines）”，アジア太平洋ソフトウェア工学国際会議（Asia-Pacific Software Engineering Conference）発行，１９９５年１２月，ｐ．２３４
【非特許文献２】
ディー・シー・クン（D.C.Kung），エヌ・スチャック（N.Suchak），ジェイ・ガオ（J.Gao），ピー・シーア（P.Hsia）著，“オブジェクト状態テストについて（On Object State Testing）”，コンピュータ・ソフトウェア・アプリケーション国際会議１９９４（COMPSAC: Computer Software and Applications Conference 1994），ＩＥＥＥコンピュータ・ソサィエティ・プレス（IEEE Computer
Society Press）発行，１９９４年，ｐ．２２２
【０００５】
【発明が解決しようとする課題】
前述したように、個々のクラスについて状態の定義が明確になされていない以上、クラスのテストを行う場合のテスターとして、なるべく多数の具体的な状態（各メンバ変数に値を設定したもの。以下、具象状態と呼ぶ）を作り出し、テストを行うことが一般的となる。このようにして作成された多くの具象状態の中には、意味的に同じグループに属すると考えられる複数の具象状態が存在する可能性がある。このことから、設計者が意図する「状態」とは、意味的に等しい具象状態の集合だと考えることもできる。
【０００６】
しかしながら、意味的に等しい複数の具象状態に対してそれぞれテストを行うことはテスト効率の低下を意味する。この点について、図１０を参照して簡単に説明する。ここで、図１０は、１つのクラスと、それに対する設計者の意図する状態の定義の有無とそれに応じたテストケースのリストの一例を示す説明図である。この図１０に示すように、設計者が意図する状態が定義されている場合には、「設計者の意図する状態」に該当する「具象状態１」のみからメソッドを呼び出しており、テストケースは２個だけである。これに対し、設計者が意図する状態が定義されていない場合には、想定した全ての具象状態すなわち「具象状態１」、「具象状態２」からメソッドを呼び出しており、テストケースの数は４個と、設計者が意図する状態が定義されている場合に比べて倍増している。
【０００７】
このような問題が生じる理由は、クラスの状態がプログラム設計者によって定義されない限り、外部から決定できない点にある。
【０００８】
本発明は、上記のような従来技術の課題を解決するために提案されたものであり、その目的は、クラスの状態が明確に定義されていない場合でも、多様な条件におけるプログラムの動作に基づいて擬似的に状態を定義可能とすることにより、クラスの状態の明確な定義の有無に拘わらず、あらゆるクラスに対して、「状態の網羅」という１つの尺度に基づいたテストの効率化が可能なオブジェクト状態分類方法とシステムを提供することである。
【０００９】
【課題を解決するための手段】
本発明は、ユーザにより与えられたオブジェクトの具象状態に対して、ユーザにより与えられたメソッド集合中の各メソッドを呼び出すことによって擬似状態を得ることにより、多様な条件におけるプログラムの動作に基づいて擬似的に状態を定義できるようにしたものである。このような本発明によれば、テスト対象となるメソッドを呼び出す前のオブジェクトの具象状態をその擬似状態に応じて限定することにより、テストケースの数を減らしてテストの効率化を実現することができる。
【００１０】
請求項１の発明は、コンピュータを利用してオブジェクト指向プログラムにおけるオブジェクトの状態を分類する方法において、判定対象オブジェクト指定ステップ、メソッド集合作成ステップ、プログラム実行ステップ、実行結果記録ステップ、擬似状態作成ステップ、を含むことを特徴としている。ここで、判定対象オブジェクト指定ステップは、判定対象となる判定対象オブジェクトおよびその状態を指定するステップであり、メソッド集合作成ステップは、判定対象オブジェクトの指定された状態から呼び出されるメソッドを要素とするメソッド集合を作成するステップである。
【００１１】
また、プログラム実行ステップは、判定対象オブジェクトの指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を判定対象状態とし、その判定対象状態からメソッド集合に含まれるメソッドを呼び出すプログラムを実行するステップであり、実行結果記録ステップは、メソッドを呼び出した場合の実行結果を記録するステップである。さらに、擬似状態作成ステップは、判定対象オブジェクトの判定対象状態に対して、メソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の実行結果とをマージして擬似状態を作成するステップである。
【００１２】
請求項７の発明は、請求項１の発明をシステムの観点から把握したものであり、コンピュータを利用してオブジェクト指向プログラムにおけるオブジェクトの状態を分類するシステムにおいて、請求項１の発明における各ステップに対応する各構成部分として、判定対象オブジェクト指定部、メソッド集合作成部、プログラム実行部、実行結果記録部、擬似状態作成部、を備えたことを特徴としている。
【００１３】
請求項１０の発明は、請求項１、請求項７の発明をコンピュータプログラムの観点から把握したものであり、コンピュータを利用してオブジェクト指向プログラムにおけるオブジェクトの状態を分類するためのプログラムにおいて、請求項１の発明における各ステップに対応する各機能として、判定対象オブジェクト指定機能、メソッド集合作成機能、プログラム実行機能、実行結果記録機能、擬似状態作成機能、をコンピュータに実現させることを特徴としている。
【００１４】
以上のような発明によれば、ユーザにより与えられたオブジェクトの具象状態またはその状態からメソッドの呼び出しにより得られた別の状態を判定対象状態とし、ユーザにより与えられたメソッド集合の各メソッドを判定対象状態から呼び出すことにより、メソッド集合の要素であるメソッドとメソッド呼び出しの実行結果から、判定対象状態の擬似状態を得ることができる。したがって、多様な条件におけるプログラムの動作に基づいて擬似的に状態を定義することができるため、テスト対象となるメソッドを呼び出す前のオブジェクトの具象状態を、得られた擬似状態に応じて限定することにより、テストケースの数を減らしてテストの効率化を実現することができる。
【００１５】
請求項２の発明は、請求項１のオブジェクト状態分類方法において、擬似状態分類ステップを含むことを特徴としている。ここで、擬似状態分類ステップは、複数の判定対象状態に対して複数の擬似状態が作成された場合に、それらの複数の擬似状態を比較して、同一の擬似状態ごとに分類するステップである。
【００１６】
この発明によれば、同一の擬似状態ごとに分類してグループ化することにより、テスト対象となるメソッドを呼び出す前のオブジェクトの具象状態を、同一の擬似状態となる具象状態ごとにグループ化し、各グループを代表するものだけに絞る等、擬似状態のグループ化を利用して具象状態を適切に限定することができるため、テストケースの数を減らしてテストの効率化を実現することができる。
【００１７】
請求項３の発明は、請求項1または請求項２のオブジェクト状態分類方法において、メソッド集合作成ステップが、メソッド集合選択ステップを含むことを特徴としている。ここで、メソッド集合選択ステップは、メソッド集合として複数のメソッド集合が作成された場合に、使用するメソッド集合を選択するステップである。
【００１８】
この発明によれば、複数のメソッド集合が作成された場合に、使用するメソッド集合を選択することにより、全てのメソッド集合に含まれる全てのメソッドを呼び出す場合に比べてメソッドの呼び出しを限定することができるため、擬似状態を効率よく作成することができる。
【００１９】
請求項４の発明は、請求項１乃至請求項３のいずれかのオブジェクト状態分類方法において、メソッド集合作成ステップが、第１と第２のメソッド集合作成ステップを含み、プログラム実行ステップが、第１と第２の実行ステップを含み、擬似状態作成ステップが、メソッド呼び出しにより得られた判定対象状態の擬似状態作成ステップを含むことを特徴としている。ここで、第１のメソッド集合作成ステップは、判定対象オブジェクトの指定された状態から呼び出されるメソッドを要素とする状態探索用のメソッド集合を作成するステップである。また、第２のメソッド集合ステップは、状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態から呼び出されるメソッドを要素とする状態判定用のメソッド集合を作成するステップである。
【００２０】
一方、第１の実行ステップは、判定対象オブジェクトの指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を実行前状態とし、その実行前状態から状態探索用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行するステップである。また、第２の実行ステップは、状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態から状態判定用のメソッド集合に含まれるメソッドを呼び出すプログラムを実行するステップである。さらに、メソッド呼び出しにより得られた判定対象状態の擬似状態作成ステップは、状態探索用のメソッド集合に含まれるメソッドの呼び出しにより得られた状態を判定対象状態とし、その判定対象状態に対して、状態判定用のメソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の実行結果とをマージして擬似状態を作成するステップである。
【００２１】
請求項８の発明は、請求項４の発明をシステムの観点から把握したものであり、請求項７のオブジェクト状態分類システムにおいて、メソッド集合作成部が、請求項４の発明における第１と第２のメソッド集合作成ステップに対応する第１と第２のメソッド集合作成部を含み、プログラム実行部と擬似状態作成部が、請求項４の発明におけるプログラム実行ステップと擬似状態作成ステップに含まれる各ステップに対応する機能を有するように構成されたことを特徴としている。
【００２２】
請求項１１の発明は、請求項４、請求項８の発明をコンピュータプログラムの観点から把握したものであり、請求項１０のオブジェクト状態分類用のプログラムにおいて、メソッド集合作成機能、プログラム実行機能、および擬似状態作成機能が、請求項４の発明におけるメソッド集合作成ステップ、プログラム実行ステップ、および擬似状態作成ステップに含まれる各ステップに対応する各機能を含むことを特徴としている。
【００２３】
以上のような発明によれば、ユーザにより与えられた具象状態から、状態探索用のメソッド集合に含まれるメソッドを呼び出して得られた状態を判定対象状態とし、この判定対象状態から、状態判定用のメソッド集合に含まれるメソッドを呼び出すことにより、ユーザにより与えられた具象状態からメソッドを呼び出して得られた状態に対する擬似状態を得ることができる。
【００２４】
請求項５の発明は、請求項４のオブジェクト状態分類方法において、擬似状態分類ステップが、擬似状態を登録するステップを含み、プログラム実行ステップが、第１と第２の実行ステップを繰り返すステップを含むことを特徴としている。ここで、擬似状態を登録するステップは、判定対象状態に対して得られた擬似状態が未登録である場合にその擬似状態を登録するステップである。また、第１と第２の実行ステップを繰り返すステップは、擬似状態が新たに登録された場合に、その擬似状態を得た判定対象状態を実行前状態として、第１と第２の実行ステップを繰り返すステップである。
【００２５】
この発明によれば、判定対象状態に対して得られた擬似状態が未登録である場合に擬似状態を登録すると共に、新たな擬似状態が登録された場合にメソッドの呼び出しを繰り返すことにより、ユーザにより与えられた初期状態に基づいて、オブジェクトが取り得る擬似状態を網羅的に検出することができる。したがって、網羅された擬似状態を得たそれぞれの判定対象状態である各具象状態からテスト対象となるメソッドをそれぞれ呼び出すことにより、網羅的なテストを効率よく行うことができる。
【００２６】
請求項６の発明は、コンピュータを利用してオブジェクト指向プログラムにおける継承関係にある複数のオブジェクトの状態を分類する方法において、擬似状態検出ステップと擬似状態差分検出ステップを含むことを特徴としている。ここで、擬似状態検出ステップは、請求項４または請求項５に記載の方法を用いて、複数のオブジェクト中における親クラスと子クラスのオブジェクトの擬似状態を検出するステップである。また、擬似状態差分検出ステップは、親クラスと子クラスのオブジェクトに対して得られた擬似状態を比較してその差分を検出するステップである。
【００２７】
さらに、擬似状態検出ステップは、親クラス擬似状態検出ステップと子クラス擬似状態検出ステップを含む。ここで、親クラス擬似状態検出ステップは、親クラスのオブジェクトに対し、状態探索用と状態判定用のメソッド集合として当該親クラス用の各メソッド集合を使用して、当該親クラスのオブジェクトの擬似状態を検出するステップである。また、子クラス擬似状態検出ステップは、子クラスのオブジェクトに対し、状態探索用のメソッド集合として当該親クラス用のメソッド集合とは異なるメソッド集合を使用し、かつ、状態判定用のメソッド集合として当該親クラス用のメソッド集合と同じメソッド集合を使用して、当該子クラスのオブジェクトの擬似状態を検出するステップである。
【００２８】
請求項９の発明は、請求項６の発明をシステムの観点から把握したものであり、コンピュータを利用してオブジェクト指向プログラムにおける継承関係にある複数のオブジェクトの状態を分類するシステムにおいて、請求項６の発明における擬似状態検出ステップと擬似状態差分検出ステップに対応する擬似状態検出部と擬似状態差分検出部を含むことを特徴としている。
【００２９】
請求項１２の発明は、請求項６、請求項９の発明をコンピュータプログラムの観点から把握したものであり、請求項６の発明における擬似状態検出ステップと擬似状態差分検出ステップに対応する擬似状態検出機能と擬似状態差分検出機能をコンピュータに実現させることを特徴としている。
【００３０】
以上のような発明によれば、子クラスのオブジェクトに対して、子クラス独自の状態探索用のメソッド集合を使用し、かつ、親クラスと共通の状態判定用のメソッド集合を使用して、擬似状態を検出し、親クラスのオブジェクトに対して得られた擬似状態と比較することにより、子クラスが親クラスに対して不正な状態を作り出しているか否かを容易にチェックすることができる。
【００３１】
【発明の実施の形態】
以下には、本発明の実施形態を図面に沿って具体的に説明する。ただし、ここで記載する実施形態は、本発明を何ら限定するものではなく、本発明の一態様を例示するものにすぎない。
【００３２】
本発明は、典型的には、コンピュータをソフトウェアで制御することにより実現される。この場合のソフトウェアは、コンピュータのハードウェアを物理的に活用することで本発明の作用効果を実現するものであり、また、従来技術を適用可能な部分には好適な従来技術が適用される。さらに、本発明を実現するハードウェアやソフトウェアの具体的な種類や構成、ソフトウェアで処理する範囲などは自由に変更可能であり、例えば、本発明を実現するプログラムは本発明の一態様である。
【００３３】
［１．用語の説明］
まず、以下の実施形態において使用する用語のうち、「具象状態」、「状態判定メソッド集合」、「擬似状態」、「状態探索メソッド集合」、について次のように定義する。
【００３４】
［１−１．具象状態］
「具象状態」は、「クラスの各メンバ変数が取る値を具体的に指定した集合」を意味している。以下の表１は、具象状態の一例を示している。
【表１】
2004213053.tif 000003
【００３５】
［１−２．状態判定メソッド集合］
「状態判定メソッド集合」は、「メソッドと引数の値の組を要素とする集合」を意味している。なお、メソッド内でグローバル変数が参照されている場合には、その値も含む。また、１つの要素は、メソッド１つだけである必要はなく、複数のメソッドからなるメソッド系列でもよい。下の表２に示す例では、状態判定メソッド集合の３番目の要素のみがメソッド系列となっている。このメソッド系列は、与えられた状態から、「lock()メソッドを呼び出し、引き続いてisOpened()メソッドを呼び出す」ことを意味している。
【表２】
2004213053.tif 000004
【００３６】
［１−３．擬似状態］
「擬似状態」は、「状態判定メソッド集合の各要素と、それに対する実行結果の組を要素とする集合」を意味している。下の表３に示す例では、実行結果としてパスを用いている。
【表３】
2004213053.tif 000005
【００３７】
［１−４．状態探索メソッド集合］
「状態探索メソッド集合」は、基本的に、「状態判定メソッド集合」と同様の集合を意味しているが、メソッド系列を１つの要素として指定しない点で異なる。
【００３８】
［２．システム構成］
図１は、本発明を適用した一つの実施形態に係るオブジェクト状態分類システムの構成を示すブロック図である。この図１に示すように、本実施形態のオブジェクト状態分類システムは、判定対象オブジェクト指定部１０１、状態探索メソッド集合作成部１０２、状態判定メソッド集合作成部１０３、状態判定メソッド集合選択部１０４、プログラム実行部１０５、実行結果記録部１０６、擬似状態作成部１０７、擬似状態分類部１０８、擬似状態差分検出部１０９、ソースコード解析部１１０、等を備えている。各部の詳細は次の通りである。
【００３９】
判定対象オブジェクト指定部１０１は、ユーザの指定に応じて、判定対象となる判定対象オブジェクトを指定すると共に、その判定対象オブジェクトの判定対象となる判定対象状態あるいは初期状態を指定する部分である。
【００４０】
状態探索メソッド集合作成部１０２は、ユーザの指定に応じて、判定対象オブジェクトの指定された初期状態から呼び出されるメソッドを要素とする状態探索メソッド集合を作成して状態探索メソッド集合データベース１１１に登録する部分であり、本発明における第１のメソッド集合作成部に相当する。
【００４１】
状態判定メソッド集合作成部１０３は、ユーザの指定に応じて、状態探索メソッド集合データベース１１１に登録された状態探索メソッド集合に含まれるメソッドの呼び出しにより得られた状態から呼び出されるメソッドを要素とする状態判定メソッド集合を作成して状態判定メソッド集合データベース１１２に登録する部分であり、本発明における第２のメソッド集合作成部に相当する。
【００４２】
状態判定メソッド集合選択部１０４は、状態判定メソッド集合作成部１０３により複数の状態判定メソッド集合が作成されて状態判定メソッド集合データベース１１２に登録された場合に、使用する状態判定メソッド集合を選択する部分である。
【００４３】
プログラム実行部１０５は、オブジェクトのある状態からメソッドを呼び出す実行プログラム１１３を実行する部分であり、特に、判定対象オブジェクト指定部１０１により指定された状態またはその状態からメソッドの呼び出しにより得られた別の状態を判定対象状態とし、その判定対象状態からメソッド集合に含まれるメソッドを呼び出す部分である。すなわち、プログラム実行部１０５は、実行プログラム１１３の実行により、後述する「状態の分類」動作時には、判定対象オブジェクト指定部１０１により指定された判定対象状態から判定対象メソッド集合に含まれるメソッドを呼び出すようになっている。
【００４４】
プログラム実行部１０５はまた、後述する「擬似状態の検出」動作時には、実行プログラム１１３の実行により、指定された初期状態から状態探索メソッド集合に含まれるメソッドを呼び出し、続いて状態判定メソッド集合に含まれるメソッドを呼び出すようになっている。すなわち、プログラム実行部１０５は、「擬似状態の検出」動作時には、指定された初期状態またはその初期状態からメソッドの呼び出しにより得られた別の状態を実行前状態とし、その実行前状態から状態探索メソッド集合に含まれるメソッドを呼び出し、続いて、そのメソッド呼び出しにより得られた状態から状態判定メソッド集合に含まれるメソッドを呼び出すようになっている。
【００４５】
実行結果記録部１０６は、状態探索メソッド集合または状態判定メソッド集合に含まれるメソッドを呼び出した場合の実行結果を記録する部分である。
【００４６】
擬似状態作成部１０７は、判定対象オブジェクトの判定対象状態に対して、判定対象メソッド集合の要素であるメソッド群と、それらのメソッド群の各メソッドを呼び出した場合の実行結果とをマージして擬似状態を作成する部分である。
【００４７】
擬似状態分類部１０８は、判定対象オブジェクトの各判定対象状態に対して得られた擬似状態を比較して、同一の擬似状態ごとに分類する部分である。そして、後述する「状態の分類」動作時においては、複数の判定対象状態を、同一の擬似状態となる判定対象状態ごとにグループ化するようになっている。擬似状態分類部１０８はまた、後述する「擬似状態の検出」動作時においては、得られた擬似状態を登録済みの擬似状態と比較して、得られた擬似状態が未登録である場合にその擬似状態を新規に検出された擬似状態として擬似状態データベース１１４に登録するようになっている。
【００４８】
擬似状態差分検出部１０９は、継承関係にある複数のオブジェクトの状態を分類する場合に、判定対象オブジェクト指定部１０１〜擬似状態分類部１０８までの各部の動作により親クラスと子クラスのオブジェクトに対してそれぞれ得られた擬似状態を比較してその差分を検出する部分である。
【００４９】
ソースコード解析部１１０は、ソースコードデータベース１１５に格納された分類対象となるオブジェクト指向プログラムのソースコードを解析して、判定対象オブジェクト指定部１０１、状態探索メソッド集合作成部１０２、状態判定メソッド集合作成部１０３、等の部分に必要なデータを提供する部分である。
【００５０】
［３．動作］
以下には、以上のような構成を有する本実施形態のオブジェクト状態分類システムによる具体的な動作について説明する。
【００５１】
［３−１．状態の分類］
図２は、本実施形態のオブジェクト状態分類システムの基本的な動作として、ユーザにより指定されたオブジェクトの具象状態に対する擬似状態を取得し、得られた擬似状態に応じて具象状態を分類する動作の概略を示すフローチャートである。また、図３は、図２に示す「状態の分類」動作の対象となる具体的なオブジェクト指向プログラムのプログラムリストの一例を示す説明図である。
【００５２】
以下には、これらの図２、図３を参照しながら、本実施形態のオブジェクト状態分類システムによる状態の分類について具体的に説明する。なお、本明細書中において、ユーザによる「指定」は、具体的には、「コンピュータに一般的に付随または接続された入出力装置によるユーザの指定操作」を意味しており、判定対象オブジェクト指定部１０１等による「指定」は、「コンピュータによるデータの指定」を意味している。
【００５３】
図２に示すように、状態の分類においてはまず、ユーザによる指定に応じて、判定対象オブジェクト指定部１０１により、判定対象となる判定対象オブジェクトを指定すると共に、その判定対象オブジェクトの判定対象となる判定対象状態を指定する（Ｓ２０１）。すなわち、どのクラスのインスタンスを判定対象オブジェクトとし、また、そのインスタンスのどの具象状態を判定対象状態とするかを指定する。ここでは例えば、図３に示すクラス「Door」のインスタンスの具象状態として、以下の表４に示す８個の具象状態「状態０１」〜「状態０８」を指定したものとする。また、子クラスのインスタンスに対して、親クラスとしての具象状態を指定することも考えられる。
【００５４】
【表４】
2004213053.tif 000006
【００５５】
次に、ユーザによる指定に応じて、状態判定メソッド集合作成部１０３により、擬似状態の判定、分類を行うために必要となるメソッドを要素とする状態判定メソッド集合を作成して状態判定メソッド集合データベース１１２に登録する（Ｓ２０２）。この状態判定メソッド集合の作成は、メソッド集合の設定、参照する引数の設定、およびグローバル変数の設定を含む。また、状態判定メソッド集合を複数準備しておき、プログラムを実行する際に、その複数の状態判定メソッド集合の中から使用する状態判定メソッド集合を選択することも可能である。
【００５６】
ここでは例えば、下の表５に示すように、図３に示すクラス「Door」に定義されている全てのメソッドを状態判定メソッドとして使用し、さらに、「setAngle」メソッドについては、引数の値として、「−１０」、「４５」、「１００」という３つの値を与えたものとする。
【００５７】
【表５】
2004213053.tif 000007
【００５８】
なお、状態判定メソッド集合データベース１１２に複数の状態判定メソッド集合が登録されている場合には、ユーザによる指定に応じて、状態判定メソッド集合選択部１０４により、どの状態判定メソッド集合を用いて擬似状態の判定を行うか選択する。また、状態判定メソッド集合が１つしか存在しない場合には、その状態判定メソッド集合が自動的に選択される。
【００５９】
続いて、プログラム実行部１０５により、判定対象オブジェクトの指定された各具象状態に対して、選択された状態判定メソッド集合に含まれる全てのメソッドをそれぞれ呼び出す（Ｓ２０３）。ここで注意すべきは、状態判定メソッドを呼び出す前のオブジェクトは、必ず指定された具象状態でなければならない点である。なぜなら、状態判定メソッド集合に含まれるメソッドを連続的に呼び出した場合には、あるメソッドがオブジェクトの状態を変えてしまう可能性があるからである。したがって、状態判定メソッドがオブジェクトの状態を変えないことが保証されていない限り、状態判定メソッドを呼び出す前には、オブジェクトを指定の具象状態になるようにセットしておく必要がある。
【００６０】
次に、実行結果記録部１０６により、プログラム実行部１０５によるプログラムの実行結果を記録する（Ｓ２０４）。この場合、「実行結果」としては、具体的には、「メソッドの戻り値」、「実行パス」等が考えられる。この例では、実行結果として、呼び出したメソッド内部での実行パスを用いるものとする。なお、この場合の「実行パス」とは、分岐文において「true」であったか、「false」であったか等、分岐においてどれを実行したかについての記録を意味する。また、図３に示すプログラム内においては、コメントで「ブロック１１」等と記入しているが、このブロック番号の列が実行パスに相当する。
【００６１】
続いて、擬似状態作成部１０７により、判定対象状態である各具象状態に対して、プログラムの実行に使用した状態判定メソッド集合と実行結果とを足して擬似状態を作成し、擬似状態データベース１１４に登録する（Ｓ２０５）。下の表６は、表４に示した具象状態「状態０１」に対して表５に示した状態判定メソッド集合を使用してプログラムを実行した場合に作成された擬似状態を示している。この例では、実行パスとして、図３のプログラム中に記述されているブロック番号を用いている。なお、この例では、実行パスが単一のブロック番号となっているが、一般的には、実行パスはブロック番号の列となる。
【００６２】
【表６】
2004213053.tif 000008
【００６３】
また、表４に示した残り７個の具象状態「状態０２」〜「状態０８」に対しても、同様に擬似状態が作成される。下の表７は、８個の具象状態「状態０１」〜「状態０８」に対してそれぞれ作成された擬似状態を示している。
【００６４】
【表７】
2004213053.tif 000009
【００６５】
以上のようにして判定対象オブジェクトの各具象状態に対して、それぞれ擬似状態が定義されるが、判定対象状態である異なる具象状態に対して、擬似状態が同一となる可能性がある。そこで、本実施形態においては、擬似状態分類部１０８により、得られた複数の擬似状態を比較して、同一の擬似状態ごとに分類してグループ化し、それらの擬似状態を得た複数の異なる具象状態を、同一の擬似状態となる具象状態ごとにグループ化する（Ｓ２０６）。
【００６６】
上記の表７に示す例においては、８個の具象状態「状態０１」〜「状態０８」に対して４つの擬似状態「擬似状態Ａ」〜「擬似状態Ｄ」のいずれかが得られているため、下の表８に示すように、８個の具象状態「状態０１」〜「状態０８」を、得られた擬似状態「擬似状態Ａ」〜「擬似状態Ｄ」ごとに４つのグループに分類することができる。
【００６７】
【表８】
2004213053.tif 000010
【００６８】
［３−２．状態の分類による作用効果］
以上のような本実施形態のオブジェクト状態分類システムによる「状態の分類」によれば、ユーザにより与えられたオブジェクトの具象状態を判定対象状態とし、ユーザにより与えられた状態判定メソッド集合の各メソッドを判定対象状態から呼び出すことにより、状態判定メソッド集合の要素であるメソッド群とメソッド呼び出しの実行結果から、判定対象状態の擬似状態を得ることができる。
【００６９】
したがって、多様な条件におけるプログラムの動作に基づいて擬似的に状態を定義することができるため、テスト対象となるメソッドを呼び出す前のオブジェクトの具象状態を、得られた擬似状態に応じて限定することにより、テストケースの数を減らしてテストの効率化を実現することができる。
【００７０】
特に、同一の擬似状態となる具象状態ごとにグループ化することにより、メソッドを呼び出す前のテスト対象となるオブジェクトの具象状態を、各グループを代表するものだけに絞る等、擬似状態によるグループ化を利用して具象状態を適切に限定することができるため、テストケースの数を減らしてテストの効率化を実現することができる。この点について、以下により詳細に説明する。
【００７１】
まず、上記のような「状態の分類」を用いた実用上の手法としては、例えば、多様なオブジェクトの具象状態からメソッドを呼び出すテストを行おうとする場合に、予め擬似状態により具象状態群を分類しておくことが考えられる。図３、表４〜表８に示した例では、例えば、図４に示すように、４個の擬似状態「擬似状態Ａ」〜「擬似状態Ｄ」を代表する具象状態を１つずつ選び出し、その状態のみをテストすることが考えられる。この場合には、本来は８個の具象状態「状態０１」〜「状態０８」に対してテストを行う予定であったのに対し、各擬似状態を代表する４個の具象状態「状態０１」、「状態０２」、「状態０５」、「状態０６」のみに対してテストを行うことにより、テストケースの数を半分に減らしてテストの効率化を図ることができる。
【００７２】
また、上記のような状態の分類によれば、複数の状態判定メソッド集合が作成された場合に、状態判定メソッド集合選択部１０４により、使用する状態判定メソッド集合を選択することにより、全ての状態判定メソッド集合に含まれる全てのメソッドを呼び出す場合に比べてメソッドの呼び出しを限定することができるため、擬似状態を効率よく作成することができる。
【００７３】
［３−３．擬似状態の検出］
図５は、本実施形態のオブジェクト状態分類システムによる別の動作として、ユーザにより指定されたオブジェクトの初期状態からメソッドを呼び出して得られる具象状態に対する擬似状態を検出する動作の概略を示すフローチャートである。この擬似状態の検出においては、初期状態から状態探索メソッドを呼び出し、それにより得られる具象状態に対して状態判定メソッドの呼び出しにより擬似状態を検出し、検出した擬似状態が未登録の擬似状態である場合には、さらに状態探索メソッドを呼び出し、それにより得られる具象状態に対して状態判定メソッドの呼び出しにより擬似状態を検出する、という手順を繰り返すものである。以下には、この図５を参照しながら、本実施形態のオブジェクト状態分類システムによる擬似状態の検出について具体的に説明する。
【００７４】
図５に示すように、擬似状態の検出においてはまず、ユーザによる指定に応じて、判定対象オブジェクト指定部１０１により、判定対象となる判定対象オブジェクトとその初期状態を指定する（Ｓ５０１）。具体的には、特定のコンストラクタを指定することで代替できる。
【００７５】
次に、ユーザによる指定に応じて、状態探索メソッド集合作成部１０２により、初期状態から呼び出されるメソッドを要素とする状態探索メソッド集合を作成して状態探索メソッド集合データベース１１１に登録する（Ｓ５０２）。この状態探索メソッド集合の作成は、メソッド集合の設定、参照する引数の設定、およびグローバル変数の設定を含む。
【００７６】
なお、あるメソッドが状態探索メソッド集合に含まれることの意味は、「そのメソッドを呼び出した後の状態を擬似状態として判定する」ことにある。したがって、状態探索メソッド集合に含まれるメソッドは、本来、オブジェクトの状態を変更する可能性があるものだけにすることが望ましい。
【００７７】
続いて、ユーザによる指定に応じて、状態判定メソッド集合作成部１０３により、擬似状態の判定、分類を行うために必要となるメソッドを要素とする状態判定メソッド集合を作成して状態判定メソッド集合データベース１１２に登録する（Ｓ５０３）。この状態判定メソッド集合の作成・登録については、「状態の分類」動作における状態判定メソッド集合の作成・登録について説明した通りである。
【００７８】
次に、指定された初期状態またはメソッド呼び出し後の状態を実行前状態として、プログラム実行部１０５により、その実行前状態に対して、状態探索メソッド集合に含まれる全てのメソッドと状態判定メソッド集合に含まれる全てのメソッドとの全ての組み合わせをそれぞれ呼び出す。すなわち、実行前状態から状態探索メソッド集合に含まれる１個のメソッドを呼び出し、続いて、そのメソッド呼び出しにより得られた状態を判定対象状態として、その判定対象状態から状態判定メソッド集合に含まれる１個のメソッドを呼び出す（Ｓ５０４）。
【００７９】
図６は、このようなプログラム実行手順の一例を示す説明図である。この図６の例においては、初期状態「初期状態α」が指定されると共に、３個のメソッド「method01()」、「method02()」、「method03()」を要素とする状態探索メソッド集合が作成され、３個のメソッド「judge01()」、「judge02()」、「judge03()」を要素とする状態判定メソッド集合が作成されている場合を示している。
【００８０】
この図６の例では、「初期状態α」から状態探索メソッド集合に含まれるメソッド「method01()」を呼び出した後の状態を「状態α'」としている。そして、この状態「状態α'」から状態判定メソッド集合に含まれる３個のメソッド「judge01()」、「judge02()」、「judge03()」をそれぞれ呼び出している。同様に、「初期状態α」から「method02()」を呼び出した後の状態を「状態α''」、「初期状態α」から「method03()」を呼び出した後の状態を「状態α'''」として、それぞれの状態から３個のメソッド「judge01()」、「judge02()」、「judge03()」をそれぞれ呼び出す。この例では、下の表９に示すように、合計９個の実行パターンが存在する。なお、表中の矢印「→」は、連続してメソッドを呼び出すことを意味している。
【００８１】
【表９】
2004213053.tif 000011
【００８２】
次に、実行結果記録部１０６により、プログラム実行部１０５によるプログラムの実行結果を記録する（Ｓ５０５）。このような実行結果の記録については、「状態の分類」動作における実行結果の記録について説明した通りである。
【００８３】
続いて、擬似状態作成部１０７により、判定対象状態である各具象状態に対して、プログラムの実行に使用した状態判定メソッド集合と実行結果とを足して擬似状態を作成する（Ｓ５０６）。このような擬似状態の作成・登録については、「状態の分類」動作における擬似状態の作成について説明した通りである。
【００８４】
続いて、擬似状態分類部１０８により、得られた複数の擬似状態を比較して、同一の擬似状態ごとに分類してグループ化し、各グループの擬似状態を登録済みの擬似状態と比較して同じものが存在しない場合、すなわち、得られた擬似状態が未登録である場合には、その擬似状態を新規に検出された擬似状態として擬似状態データベース１１４に登録する（Ｓ５０７）。
【００８５】
そして、新たに登録された擬似状態がある場合（Ｓ５０８のＹＥＳ）には、その登録された擬似状態を得た具象状態を実行前状態として、プログラム実行部１０５によるメソッド呼び出し、実行結果記録部１０６によるその実行結果の記録、擬似状態作成部１０７による擬似状態の作成、擬似状態分類部１０８による擬似状態の分類・登録、という一連の手順（Ｓ５０４〜Ｓ５０７）を繰り返す。
【００８６】
図７は、このような一連の手順（Ｓ５０４〜Ｓ５０７）を行った場合の処理内容の一例を示す説明図である。この図７に示す例においては、初期状態として、コンストラクタ「constructor」が指定され、このコンストラクタ「constructor」から得られる擬似状態が「擬似状態Ａ」として登録されている場合に、一連の手順（Ｓ５０４〜Ｓ５０７）を５回繰り返した場合を示している。
【００８７】
すなわち、この例では、第１回目の処理として、初期状態から「method01()」、「method02()」、「method03()」をそれぞれ呼び出して得られた各状態を判定対象状態とし、それらの判定対象状態に対して、登録済みの「擬似状態Ａ」以外に、未登録の擬似状態「擬似状態Ｂ」が得られているため、その「擬似状態Ｂ」を登録し、「擬似状態Ｂ」を得た具象状態から第２回目の処理を行っている。
【００８８】
この第２回目の処理においては、未登録の「擬似状態Ｃ」、「擬似状態Ｄ」が得られているため、「擬似状態Ｃ」を登録し、「擬似状態Ｃ」を得た具象状態からの第３回目の処理を行うと共に、「擬似状態Ｄ」を登録し、「擬似状態Ｄ」を得た具象状態から第４回目の処理を行っている。この場合、第３回目の処理においては、未登録の擬似状態が得られないが、第４回目の処理においては、未登録の「擬似状態Ｅ」が得られているため、「擬似状態Ｅ」を登録し、「擬似状態Ｅ」を得た具象状態から第５回目の処理を行っている。この第５回目の処理においては、未登録の擬似状態が得られないため、繰り返し処理を終了している。
【００８９】
このように、新たな擬似状態が登録される限り（Ｓ５０８のＮＯ）、一連の手順（Ｓ５０４〜Ｓ５０７）を何回でも繰り返して、擬似状態の検出を続ける。そして、最終的に、新たな擬似状態が登録されなくなった時点（Ｓ５０８のＮＯ）で、「擬似状態の検出」を終了する。
【００９０】
［３−４．擬似状態の検出による作用効果］
以上のような本実施形態のオブジェクト状態分類システムによる「擬似状態の検出」によれば、ユーザにより与えられた具象状態から、状態探索メソッド集合に含まれるメソッドを呼び出して得られた状態を判定対象状態とし、この判定対象状態から、状態判定メソッド集合に含まれるメソッドを呼び出すことにより、ユーザにより与えられた具象状態からメソッドを呼び出して得られた状態に対する擬似状態を得ることができる。
【００９１】
特に、判定対象状態に対して得られた擬似状態が未登録である場合に擬似状態を登録すると共に、新たな擬似状態が登録された場合にメソッドの呼び出しを繰り返すことにより、ユーザにより与えられた初期状態に基づいて、オブジェクトが取り得る擬似状態を網羅的に検出することができる。したがって、網羅された擬似状態を得たそれぞれの判定対象状態である各具象状態からテスト対象となるメソッドをそれぞれ呼び出すことにより、網羅的なテストを効率よく行うことができる。
【００９２】
［３−５．クラス階層内での擬似状態の差分検出］
図８は、本実施形態のオブジェクト状態分類システムによる別の動作として、前述した「擬似状態の検出」を用いて、クラス階層内での擬似状態の差分を検出する動作の概略を示すフローチャートである。また、図９は、図８に示す「クラス階層内での擬似状態の差分検出」の対象となる継承関係にある親クラスと子クラス、およびそれらのクラスにおける擬似状態の検出結果の一例を示す説明図である。以下には、これらの図８、図９を参照しながら、本実施形態のオブジェクト状態分類システムによる「クラス階層内での擬似状態の差分検出」について具体的に説明する。
【００９３】
まず、親クラスの判定対象オブジェクトに対し、親クラス用の状態探索メソッド集合と状態判定メソッド集合を用いて、図５に示すような「擬似状態の検出」を行い、親クラスのオブジェクトが取る擬似状態を検出する（Ｓ８０１）。図９の例では、親クラスの判定対象オブジェクトとしてインスタンス「Parent」を指定し、その初期状態として「p1=0, p2=0」を指定している。そして、この初期状態から、親クラスのメソッド群「PMethod01()」、「PMethod02()」、「PMethod03()」を、親クラス用の状態探索メソッド集合および状態判定メソッド集合として用いて、親クラスのオブジェクトが取る擬似状態を検出している。この図９の例では、親クラスのオブジェクトが取る擬似状態として、「擬似状態Ａ」、「擬似状態Ｂ」という２個の擬似状態が検出されている。
【００９４】
次に、子クラスの判定対象オブジェクトに対し、子クラス用の状態探索メソッド集合と、親クラス用の状態判定メソッド集合を用いて、図５に示すような「擬似状態の検出」を行い、子クラスのオブジェクトが取る、「親クラスとしての」擬似状態を検出する（Ｓ８０２）。図９の例では、子クラスの判定対象オブジェクトとしてインスタンス「Child」を指定し、その初期状態として「p1=0, p2=0」を指定している。そして、この初期状態から、子クラスのメソッド群「CMethod01()」、「CMethod02()」を、子クラス用の状態探索メソッド集合として用いると共に、親クラスと同じ状態判定メソッド集合を用いて、子クラスのオブジェクトが取る擬似状態を検出している。この図９の例では、子クラスのオブジェクトが取る擬似状態として、「擬似状態Ａ」、「擬似状態Ｂ」、「擬似状態Ｃ」という３個の擬似状態が検出されている。
【００９５】
続いて、親クラスと子クラスのオブジェクトに対して得られた擬似状態を比較してその差分を検出する（Ｓ８０３）。すなわち、子クラスのオブジェクトに対して検出された擬似状態の中に、親クラスのオブジェクトに対して検出されていない擬似状態があるか否かを検出する。図９の例においては、子クラスのオブジェクトに対して検出された擬似状態の中に、親クラスのオブジェクトに対して検出されていない「擬似状態Ｃ」が存在するため、この「擬似状態Ｃ」が差分として検出される。
【００９６】
［３−６．クラス階層内での擬似状態の差分検出による作用効果］
以上のような本実施形態のオブジェクト状態分類システムによる「クラス階層内での擬似状態の差分検出」によれば、子クラスのオブジェクトに対して、子クラス独自の状態探索用のメソッド集合を使用し、かつ、親クラスと共通の状態判定用のメソッド集合を使用して、擬似状態を検出し、親クラスのオブジェクトに対して得られた擬似状態と比較することにより、子クラスが親クラスに対して未発見の状態を作り出しているか否かを容易にチェックすることができる。
【００９７】
したがって、子クラスのオブジェクトに対して検出された擬似状態の中に、親クラスのオブジェクトに対して検出されていない擬似状態が存在する場合には、子クラスが、親クラスとして不正な、あるいは、チェックしていない状態を作り出した可能性があるものとして、ユーザに何らかの警告を発する等により、ユーザの注意を喚起することができる。
【００９８】
［４．他の実施形態］
なお、本発明は、前述した実施形態に限定されるものではなく、本発明の範囲内で他にも多種多様な形態が実施可能である。
【００９９】
例えば、図１に示したシステム構成や、図２、図５、図８等に示した処理手順は、一例にすぎず、具体的なシステム構成や処理手順は自由に変更可能である。また、図３に示したプログラムリストは一例にすぎず、本発明は、各種のオブジェクト指向プログラムに同様に適用可能であり、同様に優れた効果が得られるものである。
【０１００】
【発明の効果】
以上説明したように、本発明によれば、ユーザにより与えられたオブジェクトの具象状態に対して、ユーザにより与えられたメソッド集合中の各メソッドを各状態から呼び出すことによって擬似状態を得ることにより、多様な条件におけるプログラムの動作に基づいて擬似的に状態を定義することができる。したがって、クラスの状態の明確な定義の有無に拘わらず、あらゆるクラスに対して、「状態の網羅」という１つの尺度に基づいたテストの効率化が可能なオブジェクト状態分類方法とシステムを提供することができる。
【図面の簡単な説明】
【図１】本発明を適用した一つの実施形態に係るオブジェクト状態分類システムの構成を示すブロック図。
【図２】図１に示すオブジェクト状態分類システムの基本的な動作として、「状態の分類」動作の概略を示すフローチャート。
【図３】図２に示す「状態の分類」動作の対象となる具体的なオブジェクト指向プログラムのプログラムリストの一例を示す説明図。
【図４】図２に示す「状態の分類」を用いた実用上の手法の一例を示す説明図。
【図５】図１に示すオブジェクト状態分類システムによる「擬似状態の検出」動作の概略を示すフローチャート。
【図６】図５に示す「擬似状態の検出」動作におけるプログラム実行手順の一例を示す説明図。
【図７】図５に示す「擬似状態の検出」動作において、実行前状態からの一連の手順を行った場合の処理内容の一例を示す説明図。
【図８】図１に示すオブジェクト状態分類システムによる「クラス階層内での擬似状態の差分検出」動作の概略を示すフローチャート。
【図９】図８に示す「クラス階層内での擬似状態の差分検出」の対象となる継承関係にある親クラスと子クラス、およびそれらのクラスにおける擬似状態の検出結果の一例を示す説明図。
【図１０】１つのクラスと、それに対する設計者の意図する状態の定義の有無とそれに応じたテストケースのリストの一例を示す説明図。
【符号の説明】
１０１…判定対象オブジェクト指定部
１０２…状態探索メソッド集合作成部
１０３…状態判定メソッド集合作成部
１０４…状態判定メソッド集合選択部
１０５…プログラム実行部
１０６…実行結果記録部
１０７…擬似状態作成部
１０８…擬似状態分類部
１０９…擬似状態差分検出部
１１０…ソースコード解析部
１１１…状態探索メソッド集合データベース
１１２…状態判定メソッド集合データベース
１１３…実行プログラム
１１４…擬似状態データベース
１１５…ソースコードデータベース
【図１】
2004213053.tif 000012
【図２】
2004213053.tif 000013
【図３】
2004213053.tif 000014
【図４】
2004213053.tif 000015
【図５】
2004213053.tif 000016
【図６】
2004213053.tif 000017
【図７】
2004213053.tif 000018
【図８】
2004213053.tif 000019
【図９】
2004213053.tif 000020
【図１０】
2004213053.tif 000021