JPH11120030A - プログラムのテスト装置及び方法並びにプログラムのテスト用ソフトウェアを記録した記録媒体 - Google Patents

プログラムのテスト装置及び方法並びにプログラムのテスト用ソフトウェアを記録した記録媒体

Info

Publication number
JPH11120030A
JPH11120030A JP9288200A JP28820097A JPH11120030A JP H11120030 A JPH11120030 A JP H11120030A JP 9288200 A JP9288200 A JP 9288200A JP 28820097 A JP28820097 A JP 28820097A JP H11120030 A JPH11120030 A JP H11120030A
Authority
JP
Japan
Prior art keywords
scenario
program
input
test
output
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9288200A
Other languages
English (en)
Inventor
Hideji Kawada
秀司 川田
Naoshi Uchihira
直志 内平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP9288200A priority Critical patent/JPH11120030A/ja
Publication of JPH11120030A publication Critical patent/JPH11120030A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)

Abstract

(57)【要約】 【課題】 有意義なシナリオを作成することによって、
テストを効率化するプログラムのテスト装置を提供す
る。 【解決手段】 使用者が、プログラムの仕様を、入出力
の順序(観察集合)の形で与え、また、プログラム中で
実行の前後関係が問題とならない実行文の範囲は指定手
段46によって指定する。テスト手段41がプログラム
を実行することによってシナリオを作成し、シナリオ発
見手段44に与える。シナリオ発見手段44は、プログ
ラムPが示しうる他のシナリオであって、与えられたシ
ナリオと異なる入出力列を有するシナリオを作成し、提
示手段45がこのシナリオを使用者に提示する。使用者
はシナリオを確認して、シナリオに対する正誤の判断を
判定入力手段42から入力する。

Description

【発明の詳細な説明】
【0001】
【発明が属する技術分野】本発明は、プログラムの開発
を支援する技術の改良に関するもので、より具体的に
は、有意義なシナリオを作成することによって、プログ
ラムのテストの効率化を図ったものである。
【0002】
【従来の技術】コンピュータのプログラムを開発するに
は、プログラムのテストを行うことによって、プログラ
ムが正しく動作するかどうかを確認する必要がある。テ
ストでは、どのような入力をどのようなタイミングで与
えるかを、テストケースと呼ばれるデータとして幾通り
も用意し、それぞれのテストケースに対してプログラム
を実行することによってシナリオを得る。ここで、シナ
リオとは、プログラムの振る舞いを表すデータであり、
プログラムの実行履歴をそのまま記録したものは特に実
行ログと呼ぶ。また、プログラムをテストする目的は、
テストデータに基づく実行ログを検討することによっ
て、プログラムが正しい振る舞いを示すかどうかを判断
することである。なお、シナリオは、テストケースに対
して実際にプログラムを実行した結果として得られ、内
容を検討することによってプログラムの妥当性を判断し
たり、シナリオにしたがった振る舞いを実際にプログラ
ムに行わせることによって、動作を確認するのに用いら
れる。
【0003】プログラムのなかでも、並列プログラムに
ついてテストケースを用意したり、適切なシナリオを得
ることは特に困難である。ここで、「並列プログラム」
とは、複数の各実行主体が同時並列的に処理を行うプロ
グラムである。このような並列プログラムを用いたシス
テムは、実行主体の分け方に応じて「マルチプロセス」
「マルチスレッド」などと呼ばれ、また、複数のプログ
ラムがそれぞれ違ったコンピュータ上で動作し、相互に
通信を行いながら処理を進める形式などで構成される。
【0004】このような並列プログラムでは、並列に動
作する各実行主体の間で、相対的な動作速度やプログラ
ムの部分ごとの動作速度が、実行の度に異なる可能性が
ある。この結果、どのプログラムのどの部分がどのよう
な実行順序で実行されるかが実行の度に異なり、このた
め、実行結果やその当否の判定も異なる可能性がある。
このような変化の可能性を非決定性と呼び、非決定性
は、各実行主体について、どのような入力がどのような
タイミングで発生するか、また、どのステートメントが
どの程度の所要時間で実行されるか、といった事柄に起
因して発生する。
【0005】このような非決定性のために、並列プログ
ラムでは、各実行主体のステートメントが、設計者やプ
ログラマが想定していない順序で実行される場合があ
り、このような場合は、開発段階では予想していなかっ
た不具合が発生する可能性がある。テストの際も、この
ような非決定性のため、プログラムが示しうる実行のシ
ナリオは種類が極めて多く、このように多くの種類のシ
ナリオから適切なテストシナリオを決定する作業は極め
て困難かつ煩雑である。
【0006】また、プログラム内部では処理が若干相違
していても、外部との関係では同じ結果になるようなシ
ナリオ同士については、別々のシナリオを作成すること
は無駄である。したがって、テストで真に必要なシナリ
オは、他のシナリオと有意義な相違を持つシナリオであ
り、具体的には他のシナリオと正誤の判定が異なる可能
性のあるシナリオ、特に、誤と判定されるようなシナリ
オである。しかし、有意義なシナリオを自動的に作成し
たり判断する技術は従来存在しなかったので、必要なシ
ナリオはユーザが手作業で作成したり選択しなければな
らず、並列プログラムのテストを効率化することは困難
であった。
【0007】
【発明が解決しようとする課題】ところで、本出願人
は、信頼性の高い並列プログラムを開発するための技術
として、超逐次プログラミングを出願している(特開平
8−16429)。この技術は、並列プログラムを一旦
逐次化し、テスト実行とデバッグを行なったうえ、正し
い実行ログをマージしたグローバル状態遷移システムか
ら、改めて並列プログラム全体を再度生成するものであ
る。しかし、この技術では、シナリオの自動生成に言及
してはいるが、その具体的な方法を開示するものではな
い。
【0008】また、他の従来技術として、特開平5−6
1734では、1つのシナリオから非決定的な動作を抽
出し、新たなシナリオを自動的に生成する技術について
述べている。しかし、この技術は通信の分野に特化した
もので、非決定性の抽出も、メッセージを送受信するス
テートメントであるsend,receiveのみを対象としてい
る。さらに、この技術は、生成したシナリオに基づいて
他のシナリオを派生的に生成したり、テストを効率化す
るものではない。
【0009】プログラムの自動テストを行う従来技術と
しては、逐次プログラムを対象として、全てのテストケ
ースを網羅的にチェックしようとするものも存在する。
しかし、この種の従来技術は、従来の逐次プログラムに
おいてテストケースの数が有限であることを前提として
いるので、テストケースが無数に存在する並列プログラ
ムに適用することはできない。
【0010】上記のように、従来では、並列プログラム
のテストにおいては、無数に考えられるシナリオの中か
ら有意義なシナリオ、例えば、間違った挙動のシナリオ
をユーザが手作業で見つけなければならず、しかも、ユ
ーザは、そのような間違ったシナリオがあるかどうかも
不明な状況でこの作業を行わなければならなかった。
【0011】本発明は、上記のような従来技術の問題点
を解決するために提案されたもので、その目的は、有意
義なシナリオを作成することによって、プログラムのテ
ストの効率化を可能としたプログラムのテスト装置及び
方法並びにプログラムのテスト用ソフトウェアを記録し
た記録媒体を提供することにある。
【0012】
【課題を解決するための手段】上記の目的を達成するた
め、請求項1に記載の発明は、プログラムのテストを支
援するプログラムのテスト装置において、試験対象プロ
グラムの動作を表すシナリオに基づいて、前記プログラ
ムが示し得る他のシナリオであって、前記シナリオに含
まれる入出力列とは異なる入出力列を含むシナリオを作
成する手段を有することを特徴とするものである。
【0013】また、請求項7に記載の発明は、請求項1
に記載の発明を方法の観点から把握したもので、プログ
ラムのテストを支援するプログラムのテスト方法におい
て、試験対象プログラムの動作を表すシナリオに基づい
て、前記プログラムが示し得る他のシナリオであって、
前記シナリオに含まれる入出力列とは異なる入出力列を
含むシナリオを作成し、前記他のシナリオをテストする
ことを特徴とするものである。
【0014】さらに、請求項10の発明は、請求項7に
記載の発明をソフトウェアを記録した記録媒体の観点か
ら把握したもので、プログラムのテストを支援するプロ
グラムのテスト用ソフトウェアを記録した記録媒体にお
いて、前記ソフトウェアは、試験対象プログラムの動作
を表すシナリオに基づいて、前記プログラムが示し得る
他のシナリオであって、前記シナリオに含まれる入出力
列とは異なる入出力列を含むものを作成させるステップ
を含むことを特徴とするものである。
【0015】上記のような構成を有する請求項1,7,
10に記載の発明によれば、適当なテストケースによる
シナリオをもとに、プログラム各部の実行タイミングを
変えることによって、非決定性によって生じうる他のシ
ナリオを作成することができる。そして、作成されるシ
ナリオは、入出力への制約を基準として、当初与えられ
たシナリオとは異なる入出力を有するものである。この
ように、与えられたシナリオと、異なる入出力を有する
シナリオとでは、ユーザは異なった正誤の判定をする可
能性がある。このため、このようなシナリオを順次作成
すれば、プログラムが持っている非決定的な動作を全て
網羅的にテストした結果を得たのと同じであり、テスト
が効率化される。なお、作成する動作の範囲は、当初与
えられたシナリオの全体に対応するものでもよいし、与
えられたシナリオの途中まで又は一部分に対応するもの
でもよい。
【0016】請求項2に記載の発明は、プログラムのテ
ストを支援するプログラムのテスト装置において、試験
対象プログラムの動作を表すシナリオを作成する第1の
作成手段と、前記シナリオに基づいて、前記プログラム
が示し得る他のシナリオであって、前記シナリオに含ま
れる入出力列とは異なる入出力列を含むシナリオを作成
する第2の作成手段を有することを特徴とするものであ
る。
【0017】また、請求項8に記載の発明は、請求項2
に記載の発明を方法の観点から把握したもので、プログ
ラムのテストを支援するプログラムのテスト方法におい
て、試験対象プログラムの動作を表すシナリオを作成
し、前記シナリオに基づいて、前記プログラムが示し得
る他のシナリオであって、前記シナリオに含まれる入出
力列とは異なる入出力列を含むシナリオを作成し、前記
他のシナリオをテストすることを特徴とするものであ
る。
【0018】さらに、請求項11に記載の発明は、請求
項8に記載の発明をソフトウェアを記録した記録媒体の
観点から把握したもので、プログラムのテストを支援す
るプログラムのテスト用ソフトウェアを記録した記録媒
体において、前記ソフトウェアは、試験対象プログラム
の動作を表すシナリオを作成させるステップと、前記シ
ナリオに基づいて、前記プログラムが示し得る他のシナ
リオであって、前記シナリオに含まれる入出力列とは異
なる入出力列を含むものを作成させるステップを含むこ
とを特徴とするものである。
【0019】上記のような構成を有する請求項2,8,
11に記載の発明によれば、上記請求項1、7,10に
記載の発明の作用・効果に加えて、本テスト装置におい
てシナリオを作成できるので、外部からシナリオを与え
なくても、他のシナリオの作成を円滑に行うことができ
る。
【0020】請求項3に記載の発明は、請求項2に記載
のプログラムのテスト装置において、前記第2の作成手
段が、前記他のシナリオとして、当初与えられ又はその
時点までに選択されたいずれのシナリオとも入出力列が
異なるシナリオを作成するように構成されたことを特徴
とするものである。上記のような構成を有する請求項3
に記載の発明では、それまでに得られているシナリオと
は入出力列が異なる新たな類型のシナリオを順次作成
し、確認できるので、網羅的なテストを効率的に行うこ
とができる。
【0021】請求項4に記載の発明は、請求項2記載の
プログラムのテスト装置において、前記シナリオに対し
て正誤の判定を入力するための手段を備え、前記第2の
作成手段が、前記他のシナリオとして、誤と判定された
いずれかのシナリオと入出力列が共通するシナリオ、又
は、正と判定された全てのシナリオと入出力列が異なる
シナリオのうち少なくともいずれかを作成するように構
成されたことを特徴とするものである。
【0022】また、請求項9に記載の発明は、請求項4
に記載の発明を方法の観点から捉えたものであって、請
求項8記載のプログラムのテスト方法において、前記シ
ナリオに対して正誤の判定がなされた場合に、前記他の
シナリオとして、誤と判定されたいずれかのシナリオと
入出力列が共通するシナリオ、又は、正と判定された全
てのシナリオと入出力列が異なるシナリオのうち少なく
ともいずれかを作成することを特徴とするものである。
【0023】上記のような構成を有する請求項4、9に
記載の発明では、シナリオについて正誤の判定を入力し
ておけば、誤とされたシナリオと共通の入出力列を持つ
シナリオや、正のシナリオとは異なる入出力列を持つシ
ナリオ、すなわち正しくない可能性があるシナリオが作
成される。このため、プログラムが示す可能性のある誤
りを効率的に確認することができる。
【0024】請求項5に記載の発明は、請求項2乃至4
のいずれか一に記載のプログラムのテスト装置におい
て、プログラムに含まれる入出力の実行文の中から、実
行の順序関係が問題とならない範囲を指定する手段を備
えたことを特徴とするものである。上記のような構成を
有する請求項5に記載の発明では、ユーザが、実行順序
が変わってもよい入出力の実行文の範囲を指定すること
により、指定された範囲での相違は無視されて新たな他
のシナリオが作成される。これにより、ユーザの判断に
沿って、過不足なくシナリオが作成されるので、テスト
が効率化される。
【0025】請求項6に記載の発明は、請求項2乃至5
のいずれか一に記載のプログラムのテスト装置におい
て、与えられたシナリオの一部に対応する他のシナリオ
が作成された場合に、当該シナリオに不足する部分を補
間するための手段を備えたことを特徴とするものであ
る。上記のような構成を有する請求項6に記載の発明で
は、ユーザの指定などによってシナリオが部分的に作成
され、この結果、他のシナリオの入出力列と完全な比較
が困難な場合でも、不足部分をユーザが補間して完全な
動作としたうえで、正誤の判断を付けて保存することが
できる。このように補間されたシナリオとそれについて
の正誤の判定結果は、新たなテストケースで得たテスト
データと同様に、プログラムの妥当性を判断することに
役立つ。また、ユーザは、必要と考える場合だけ補間を
行えばよいので、真に必要なケースのみを補間し、テス
トすることによってテスト工数の短縮が可能となる。
【0026】
【発明の実施の形態】次に、本発明の並列プログラムの
テスト装置に係る実施の形態(以下「本実施形態」とい
う)について、図面を参照して説明する。なお、本発明
は、コンピュータとその周辺装置からなるハードウェア
を、並列プログラムのテスト用ソフトウェアで制御する
ことによって実現することが可能であり、このようなテ
スト用ソフトウェアを記録した記録媒体も本発明の一態
様である。
【0027】本実施形態を実現するために用いるコンピ
ュータは、CPU、メモリ、入出力制御回路などを有
し、周辺装置としては、キーボードやマウスなどの入力
装置、CRT表示装置やプリンタなどの出力装置、ネッ
トワーク接続装置などが挙げられる。これらハードウェ
アの具体的構成は種々考えられるので、以下では、本実
施形態の各機能に対応する仮想的回路ブロックを用いて
本実施形態を説明する。
【0028】〔1.用語の定義〕最初に、以下の説明で
用いる用語の定義を示す。まず、「シナリオ」とは、プ
ログラムの一連の挙動を表現するものであり、具体的に
は、プログラムの動作を、実行しているステートメン
ト、使用している変数の値、プログラム外部との入出力
を時系列的に列挙することにより表したものである。
【0029】「入出力ステートメント」とは、プログラ
ムにおいて入出力動作を行う命令であり、あるプログラ
ムPの全ての入出力ステートメントの集合を、Pの入出
力集合と呼ぶ。また、「観察集合」とは、プログラムの
入出力集合の要素だけからなる集合である。例えば、プ
ログラムPの入出力集合Iがあり、集合J(集合の集
合)の元が全て入出力集合Iの部分集合であるならば、
Jは観察集合であるという。
【0030】「観察列」とは、プログラムのシナリオに
現われる入出力ステートメントに対する入出力を、順番
を替えずに取り出したものである。例えば、あるシナリ
オθから取り出した観察列を「θの観察列」と呼び、プ
ログラムPのあるシナリオの観察列κは、「Pの観察
列」のように表現する。また、プログラムPのシナリオ
θについて観察列κがあり、プログラムPの入力集合の
部分集合iを考える場合、観察列κから、部分集合iの
元である入出力ステートメントに対応するもののみを取
り出した列を「θのi−観察列」のように表現する。ま
た、プログラムPのシナリオθについて、観察集合Jが
あるとき、{θのj−観察列|jはJの元}である集合
を「θのJ−観察列」のように表現する。
【0031】「観察同値」とは、同じプログラムの異な
ったシナリオの間で、入出力が一致することである。例
えば、プログラムPのシナリオθ1,θ2について観察
集合Jを考え、シナリオθ1のJ−観察列とシナリオθ
2のJ−観察列が一致するならば、「θ1とθ2はJ−
観察同値」であるといい、観察集合Jが入出力集合のみ
からなるとき、単に「θ1とθ2は観察同値」であると
いう。
【0032】また、「観察同値」は、異なったプログラ
ムの異なったシナリオの間で入出力が一致する場合にも
用いる。例えば、異なったプログラムP1,P2につい
て、共通の観察集合Jを考える場合も、同じプログラム
に基づくシナリオ間の場合と同様に、シナリオθ1のJ
−観察列とシナリオθ2のJ−観察列が一致するなら
ば、「θ1とθ2はJ−観察同値」であるといい、観察
集合Jが入出力集合のみからなるとき、単に「θ1とθ
2は観察同値」であるという。
【0033】さらに、「観察同値」は、異なったプログ
ラムの間で、一方のプログラムのどのシナリオに対して
もJ−観察同値となるシナリオが、他方のプログラムに
存在する場合についても用いる。例えば、異なったプロ
グラムP1,P2について、共通の観察集合Jを考え
る。この場合、プログラムP1に関する任意のシナリオ
θ1に対して、θ1とJ−観察同値となるあるプログラ
ムP2のシナリオθ2が存在し、かつ、プログラムP2
の任意のシナリオθ2に対しても、θ2とJ−観察同値
となるあるプログラムP1のシナリオθ1が存在するな
らば、「P1とP2はJ−観察同値」であるという。こ
の場合、観察集合Jが入出力集合のみからなるとき、単
に「P1とP2は観察同値」であるという。
【0034】「観察同値類分解」とは、一つのプログラ
ムのシナリオの集合を、観察同値なものに分けることで
ある。また、「観察同値類」はこのように分けられた個
々の集合である。さらに、「代表元選択」は前記観察同
値類から1つずつシナリオを選択することであり、「代
表元」とはこのように選択された各シナリオである。例
えば、プログラムPと観察集合Jを考え、プログラムP
のシナリオの集合をJ−観察同値なものに分けることを
J−観察同値類分解といい、プログラムPの全てのシナ
リオの集合をJ−観察同値類分解して得られるそれぞれ
の集合をJ−観察同値類と呼ぶ。各J−観察同値類から
一つずつシナリオを選択することをJ−代表元選択とい
い、J−代表元選択によって得られた各シナリオをJ−
代表元という。なお、観察集合Jが入出力集合のみから
なる場合は、単に観察同値、観察同値類分解、観察同値
類、代表元選択、代表元のように表す。
【0035】プログラムPの観察集合Jについて、J−
観察列をκとする場合、κに対応するJ−観察同値類を
「κ−J−観察同値類」といい、観察集合Jが入出力集
合のみからなる場合は「κ−観察同値類」という。
【0036】「観察定義仕様」とは、プログラムの入出
力が一定の条件を満たしてさえいれば満たされるような
仕様である。具体的には、例えば、プログラムの仕様S
について、観察集合Jを前提として、J−観察列全体の
集合から{true,false}へのある関数が存在
し、任意のプログラムPの任意のJ−観察列κに対しf
(κ)がtrueであることとプログラムPが仕様Sを
満たすことが同値である場合、仕様SはJ−観察定義仕
様であるという。このとき、関数fをシナリオ判定関数
と呼び、シナリオθのJ−観察列κに対し、f(κ)=
trueであることをθはSを満たすという。また、J
が入出力集合のみからなる集合であるとき、Sは観察定
義仕様であるという。
【0037】また、プログラムの仕様Sについて、観察
集合Jを前提として、J−観察列全体の集合から{tr
ue,false}へのある関数fが存在し、全てのプ
ログラムP1の任意のJ−観察列κに対しf(κ)がt
rueであることと、プログラムP1とJ−観察同値で
かつ仕様Sを満たすプログラムP2が存在すること、が
同値である場合、仕様Sは「J−半観察定義仕様」であ
るという。このとき、関数fを準シナリオ判定関数と呼
び、また、Jが入出力集合のみからなる集合であると
き、Sは半観察定義仕様であるという。
【0038】また、J−半観察定義仕様の仕様Sを満た
すプログラムPはJ−半観察定義実現であるといい、半
観察定義仕様の仕様Sを満たすプログラムPは半観察定
義実現であるといい、J−観察定義仕様の仕様Sを満た
すプログラムPはJ−観察定義実現であるといい、観察
定義仕様の仕様Sを満たすプログラムPは観察定義実現
であるという。
【0039】また、「観察有界」とは、プログラムの全
ての観察列について、どのκ−観察同値類のシナリオも
長さが有限である場合をいう。例えば、プログラムPの
全ての観察列κに対し、任意のκ−観察同値類のシナリ
オの長さがある整数n以下であるならば、プログラムP
は観察有界であるという。
【0040】プログラムPについて観察集合J、J−観
察列κを前提に、プログラムPを動作させながらJ−観
察列κにしたがって入力をプログラムPに与えていくと
き、κ−J−観察同値とならないことを確定する出力や
入力要求があるか、又は、出力や入力要求が発生しない
ために処理が続けられなくなる場合、非κ−J−観察シ
ナリオがあるという。
【0041】〔2.概念的モデル〕本実施形態は、並列
プログラムを対象としたテストを支援する装置であり、
図1は本実施形態の作用を示す概念図である。この図に
示すように、本実施形態では、試験対象となるプログラ
ムをテスト実行した際の実行ログ(第1の挙動)に基づ
いて、シナリオ発見手段44が、そのプログラムが示す
可能性がある他のシナリオ(第2の挙動)を作成する。
同じシナリオか他のシナリオかは、等価性条件に基づい
て判断する。
【0042】この等価性条件は同じシナリオと言えるた
めの条件であり、シナリオ同値と観察同値がある。な
お、「シナリオ同値」とは、シナリオの内容自体が共通
することであり、「観察同値」とは、プログラム内部で
の動作に拘わらず、外部から観察できるプログラムの挙
動が、シナリオの間で共通することである。本実施形態
では、等価性条件として「観察同値」を用い、外部から
観察できる入出力列が共通するシナリオ同士は同値とみ
なす。そして、このような等価性条件に照らして、与え
られた実行のログとは異なった入出力列を持つ他のシナ
リオを作成することによって、並列プログラムのテスト
の効率化を図るものである。
【0043】なお、本実施形態が対象とするプログラム
は、観察有界で、ある観察集合Jに対して、J−観察定
義プログラム又はJ−半観察定義プログラムである。こ
こで、プログラムは入力から出力を作成する手順である
から、プログラムの仕様は入出力列に求められる条件
(制約)として表すことができる。プログラムの動作を
このような入出力列を基準に判断する場合、動作が無限
に変化する、言い換えれば観察有界でないプログラム
は、内部に何らかの無限ループを含み、このような無限
ループを含むプログラムは通常正しくない。このため、
正しいプログラムは、示す動作の種類が有限と考えら
れ、対象を観察有界なプログラムに限定しても差しつか
えない。また、本実施形態が対象とする並列プログラム
は、J−観察定義プログラム又はJ−半観察定義プログ
ラムであるから、プログラムの仕様は、入出力の順序と
いう形で定義され、プログラムは、その入出力列が前記
入出力順序を満たせば仕様に合致するとみなされる。
【0044】このような観察有界なプログラムでは、具
体的な任意のJ−観察列κが与えられれば、κ−J−観
察同値類となる全てのシナリオも、全ての非κ−J−観
察シナリオも、いずれも機械的に作成することができ
る。本実施形態は、この特徴を利用したもので、同値と
みなせるシナリオは重複して作成せず、相互に有意義な
違いを持つシナリオを作成することによって、不必要な
テストを避けるだけでなく、本当に必要なテストを網羅
的にもれなく行ったのと同様のデータを得ることによっ
て、並列プログラムのテストを効率化するものである。
【0045】なお、対象とする並列プログラムがJ−半
観察定義プログラムの場合でも、1つのシナリオをテス
トすることが、そのシナリオのJ−観察同値類である全
てのシナリオをテストすることに相当するので、有意義
なシナリオを順次作成することによって、シナリオに基
づいたテストによって発見できる不具合は全て発見する
ことができる。
【0046】また、図2は、図1の構成に、テスト手段
41及び提示手段45を加えた構成例を示したものであ
る。この例では、テスト手段41がプログラムをテスト
実行することによって実行のログを提供することによっ
て、実行のログを改めて外部から入力する必要がない。
また、作成されたシナリオは、提示手段45がユーザに
提示するので、必要なデータを改めて読み出す必要がな
い。
【0047】〔3.構成〕次に、図3は、本実施形態の
具体的な構成を示す機能ブロック図である。この図に示
すように、本実施形態は、テスト手段41と、判定入力
手段42と、シナリオ・判定記憶手段43とを有する。
このうちテスト手段41は、与えられたプログラムPを
テスト実行することによって実行ログであるシナリオを
作成する手段である。また、判定入力手段42は、作成
されたシナリオがプログラムの仕様に合っているかどう
かについて正誤の判定を入力するための手段であり、シ
ナリオ・判定記憶手段43は、シナリオと、そのシナリ
オに対する判定を組にして記憶する手段である。
【0048】また、本実施形態は、シナリオ発見手段4
4と、提示手段45と、シナリオ補間手段51と、指定
手段46とを有する。このうち、シナリオ発見手段44
は、プログラムの動作を表すシナリオから、前記プログ
ラムが示しうる他のシナリオで、前記シナリオに含まれ
る入出力列とは異なる入出力列を含むものを、全体的に
又は部分的に作成する手段である。また、提示手段45
は、与えられたシナリオ及び作成されたシナリオを使用
者に提示する手段である。また、シナリオ補間手段51
は、シナリオ発見手段44によって部分的に作成された
シナリオについて、欠けている部分を使用者が補間する
ことによって完全なシナリオを作成するための手段であ
る。指定手段46は、プログラムに含まれる入出力の実
行文のなかから、実行の順序関係が問題とならない範囲
を指定するための手段である。
【0049】また、前記シナリオ発見手段44は、観察
集合受付部101、観察集合記憶部112、取り出し部
113及びシナリオ生成部114を有する。このうち観
察集合受付部101は、プログラムに要求される仕様と
して使用者が入力する観察集合(入出力順序仕様)を受
け付ける部分である。また、観察集合記憶部112は、
観察集合受付部101が受け付けた観察集合を記憶する
手段であり、取り出し部113は、前記シナリオ・判定
記憶手段43に記憶されたシナリオから入出力列を取り
出す部分である。また、シナリオ生成部114は、プロ
グラムP、取り出された入出力列及び観察集合に基づい
て、プログラムPが示しうる他のシナリオを生成する部
分である。
【0050】なお、生成する他のシナリオとしては次の
ようなものが考えられ、具体的には使用者が指定する。
【0051】・当初与えられ又はその時点までに選択さ
れたいずれのシナリオとも入出力列が異なるシナリオ ・誤と判定されたいずれかのシナリオと入出力列が共通
するシナリオ ・真と判定された全てのシナリオと入出力列が異なるシ
ナリオ なお、以下の例では、当初与えられ又はその時点までに
選択されたいずれのシナリオとも入出力列が異なるシナ
リオを順次生成するものとする。
【0052】〔4.第1実施形態の作用及び効果〕上記
のような構成を有する本実施形態は、次のような作用を
有する。 〔4−1.全体の動作〕まず、本実施形態における全体
的な処理手順を図4に示す。なお、プログラムPは予め
使用者が入力しておく。また、必要があれば、プログラ
ムPの入出力文のうち実行順序が問題とならないもの
を、指定手段46を通じて指定しておく。この指定は、
シナリオを作成するときに用いられるので、シナリオ生
成部114内に記録される。
【0053】図4の手順では、まず、使用者が、観察集
合すなわち入出力順序仕様を入力する(ステップ40
1)。この入出力順序仕様とは、プログラムに要求され
る仕様を、入出力の順序として表したものである。な
お、前記観察集合の入力は、使用者が入力装置から手作
業で行ってもよいし、記録媒体からファイルの形で読み
込むなどしてもよい。
【0054】次に、テスト手段41が、与えられたプロ
グラムPをテスト実行して、実行ログであるシナリオを
作成する(ステップ402)。続いて、使用者は、前記
シナリオの動作が正しいか誤っているかを判定し、この
判定結果を判定入力手段42から入力する(ステップ4
03)。次に、このシナリオとそのシナリオに対する判
定結果は、組としてシナリオ・判定記憶手段43に記憶
され(ステップ404)、この判定が「誤」であれば
(ステップ405)、使用者がプログラムPを修正した
うえ(ステップ411)再度テストに進み(ステップ4
02)、一方、ステップ405において判定が「正」で
あれば、全てのシナリオが生成済みでないかぎり(ステ
ップ406)、シナリオ発見手段44のシナリオ生成部
114が他のシナリオを1つ生成する(ステップ40
7)。なお、ここで作成されるシナリオは、その時点ま
でにシナリオ・判定記憶手段に保存されているどのシナ
リオとも異なった入出力列を持つものである。
【0055】このようなシナリオが生成されると、シナ
リオ生成部114は、このシナリオを使用者に提示して
判定させる(ステップ408)。このとき、使用者は、
判定が可能であれば「正」又は「誤」を入力し、判定不
能であればその旨を入力する。使用者による判定が可能
で(ステップ409)、その判定結果が「正」のときは
ステップ406,407に戻ってシナリオの生成を繰り
返す。一方、判定結果が「誤」のときは、プログラムを
修正し(ステップ411)、ステップ402に戻る。
【0056】一方、ステップ409において、判定不能
の場合であって、生成されたシナリオが完全なもののと
きはステップ402に戻り、使用者に改めて判定を求め
る(ステップ403)。また、判定が不能で、かつ、生
成されたシナリオが不完全なもののときは、使用者がシ
ナリオ補間手段51を用いて、シナリオの欠けている部
分を補間したうえ(ステップ413)、ステップ402
に戻り、改めて判定を入力する(ステップ403)。
【0057】〔4−2.シナリオを作成する手順〕ステ
ップ407において他のシナリオを1つ生成するには、
各プロセス(タスク)のプログラムをシミュレーション
実行し、入出力列の順序がそれまでに得たシナリオの入
出力列とは異なったものとなるように、各プロセスの実
行を進めたり遅らせたりすればよい。例えば、一方のプ
ロセスの入力文を、他方のプロセスの入力文より先に実
行させるためには、当該他方のプロセスの実行を一時保
留し、当該一方のプロセスの実行を入力文の位置まで進
めればよい。
【0058】〔4−2−1.シナリオの作成手順〕この
ようにシナリオを作成する手順の一例を、図5に具体的
に示す。この手順では、必要な変数を「初期化」したう
え(ステップ501)、制御ルーチンの役割を果たす
「実行前処理」(ステップ502)が、次にどのプロセ
スのどの実行文を実行するかを順次決定し、決定した実
行文が入出力かそれ以外かに応じて、入出力の実行文を
処理するための「1つ入出力実行」(ステップ50
3)、又は、入出力以外の実行文を処理するための「1
つ実行」の処理(ステップ504)を呼び出す。「1つ
入出力実行」「1つ実行」の各処理は、実行文の内容に
応じた処理を行った後、再度「実行前処理」を呼び出
す。どのプロセスのどの部分を実行したかを記録しなが
らこのような処理を繰り返し、各タスクの実行位置(カ
レントポイント)がタスクのプログラムの終端に達する
ことで1つのシナリオの作成が終了する。この手順は、
1つのシナリオを作成する毎に停止し、判定の入力後に
続行する。
【0059】そして、「実行前処理」において、シナリ
オ作成に用いる実行文の順序をスタックに記録してお
き、新たにシナリオを作成するときに、入出力文がそれ
までになかった順序となるように、次に実行するタスク
とその実行文を決定する。
【0060】なお、新たな他のシナリオの作成にあたっ
てシナリオの入出力列同士を比較して共通か異なるかを
判断する場合、指定手段46によって指定された範囲で
並べ替えることによって共通の入出力列となる入出力列
同士は、共通するものとみなす。
【0061】〔4−2−2.初期化の具体的な手順〕次
に、「初期化」の具体的な手順を図6に示す。この手順
では、まず、最初に観察同値集合を空集合とし(ステッ
プ601)、入出力列と観察集合を読み込み(ステップ
602)、ログ、シナリオスタック(SS)、生成入出
力列をそれぞれクリアし(ステップ603)、与えられ
た入出力列を、観察集合に述べられている項目ごと、例
えば、同じ変数に関する入力と出力に整理することによ
って、観察同値集合とする(ステップ604)。すなわ
ち、観察同値集合は、観察同値な観察列の代表元であ
り、観察同値集合を作ることは、与えられたシナリオの
入出力列を、観察集合の記述形式に合わせて整理するこ
とによって、観察同値なシナリオの標準形を決めること
である。新たなシナリオは、もととなるシナリオに対し
て非観察同値なものであり、前記観察同値集合と異なる
入出力列を持つものとして作成される。
【0062】初期化では続いて、全タスクについて、タ
スクのカレントポイント(CP)を0にセットしたうえ
(ステップ605,606)、全タスクについて順次実
行前処理を呼び出す(ステップ607,608)。この
実行前処理には、タスクのカレントポイント、タスク番
号、シナリオスタック、生成入出力列がデータとして引
き渡される。ここで、1つのタスクについて初期化処理
から実行前処理を呼び出すことは、そのタスクが最初に
実行されるシナリオの作成が開始されることを意味す
る。
【0063】なお、シナリオスタック(SS)は、ある
タスクの実行から開始されるシナリオの生成で用いた実
行文を記録しておくことによって、そのタスクから開始
される他のシナリオを作成するためのスタックであり、
シナリオスタックリスト(リスト/SSL)は処理済み
のシナリオスタックを記録しておくスタックである。す
なわち、シナリオに含まれる実行文が全てpushされた状
態から、最後にpushされたいくつかの実行文をpop し、
シナリオの最後からpop した分を取り除いて、その代わ
りに異なる実行文の組み合わせで置き換えれば、異なる
内容のシナリオが作成される。
【0064】〔4−2−3.実行前処理の具体的な手
順〕次に、実行前処理の具体的な手順を図7に示す。
「実行前処理」は、タスクのカレントポイント、タスク
番号、シナリオスタック、生成入出力列をデータとして
受け取り、次のような処理を行う。すなわち、現タスク
のカレントポイントが「終り」になるまで(ステップ7
09)、現タスクのカレントポイントに応じて次の「1
つ入出力実行」又は「1つ実行」の処理を行う。すなわ
ち、現タスクのカレントポイントが入出力であれば(ス
テップ701)、まず、観察同値集合と観察集合から次
に実行する実行文の候補(次候補)を取得して候補集合
とする(ステップ702)。このとき、必要に応じてス
タックを参照することによって、それまでのシナリオと
は異なる入出力列を持つシナリオとなるように、候補を
選択する。ここで、候補集合が空の場合は(ステップ7
03)シナリオスタックをリストにプッシュする(ステ
ップ704)。候補集合については、空になるまで(ス
テップ705)、候補集合から候補を選択し(ステップ
706)、選択した候補を候補集合から削除し(ステッ
プ707)、選択した候補についてカレントポイント、
タスク番号、シナリオスタック、生成入出力列、候補を
引き渡して「1つ入出力実行」する(ステップ70
8)、という処理を繰り返す。なお、ステップ701に
おいて、現タスクのカレントポイントが入出力でない場
合は、現タスクのカレントポイントが「終り」であれば
リターンするが(ステップ709)、「終り」でなけれ
ば、カレントポイント、タスク番号、シナリオスタッ
ク、生成入出力列を引き渡して「1つ実行」の処理を行
う(ステップ710)。
【0065】〔4−2−4.「1つ実行」の具体的な手
順〕この「1つ実行」の具体的な手順を図8に示す。
「1つ実行」では、引き渡されたカレントポイント、タ
スク番号、シナリオスタック、生成入出力列を受け取
り、次の処理を行う。まず、シナリオスタックをシナリ
オスタック2(SS2)にコピーし、カレントポイント
はタスクのカレントポイント2(CP2)という変数に
コピーする(ステップ801)。続いて、コピーしたカ
レントポイント2について、現タスクを実行したうえ
(ステップ802)インクリメントする(ステップ80
3)。続いて、現タスクの番号をシナリオスタック2に
プッシュし(ステップ804)、後続の実行文を決定さ
せるために、すべてのタスクについて、新たなカレント
ポイント2、タスク番号、シナリオスタック2、生成入
出力列を引き渡し、実行前処理を呼ぶ(ステップ80
5)。
【0066】なお、引き渡された変数をシナリオスタッ
ク2やカレントポイント2といった異なった変数にコピ
ーするのは、実行文を実行することによるデータの更新
をコピー後の変数に対して行い、引き渡された変数をも
とのままにしておくためである。すなわち、これらもと
のままの変数の状態から、他の実行文を与えて「1つ入
出力実行」や「1つ実行」を呼び出すことによって、そ
れまでの過程を再度実行せずに、他のシナリオを生成す
ることができる。
【0067】〔4−2−5.「1つ入出力実行」の具体
的な手順〕また、「1つ入出力実行」の具体的な手順を
図9に示す。「1つ入出力実行」では、引き渡されたカ
レントポイント、タスク番号、シナリオスタック、生成
入出力列、入出力を用いて、次の処理を行う。まず、シ
ナリオスタックをシナリオスタック2(SS2)にコピ
ーし、タスクのカレントポイントはタスクのカレントポ
イント2(CP2)という変数にコピーし(ステップ9
01)、生成入出力列は生成入出力列2という変数にコ
ピーする(ステップ902)。続いて、現タスクのカレ
ントポイント2について、与えられた入出力を入出力実
行したうえ(ステップ903)インクリメントする(ス
テップ904)。次に、実行した入出力を生成入出力列
2にプッシュし(ステップ905)、現タスクの番号を
シナリオスタック2にプッシュしたうえ(ステップ90
6)、後続の実行文を決定させるために、全てのタスク
について、新たなカレントポイント2,シナリオスタッ
ク2及び生成入出力列と共に引き渡し、実行前処理を呼
ぶ(ステップ907)。
【0068】なお、上記の手順は、既存のシナリオと入
出力列を比較しながら新たなシナリオを生成するもので
あるが、この比較はシナリオを生成した後で行ってもよ
い。例えば、まず、与えられたシナリオをシナリオ・判
定記憶手段43から取り出し、このシナリオとは違った
様々なタイミングでプログラムの各部分を実行すること
によって仮のシナリオを生成する。そして、この仮のシ
ナリオから入出力列(以下「新たな入出力列」という)
を取り出し、与えられたシナリオから取り出し部113
が取り出した入出力列(以下「もとの入出力列」とい
う)と比較する。このとき、新たな入出力列がもとの入
出力列と同じであれば、仮のシナリオは使用せずにスキ
ップし、さらに別のシナリオを生成する。一方、新たな
入出力列がもとの入出力列と異なるときは、仮のシナリ
オを、新たに1つ生成したシナリオとして採用すること
もできる。
【0069】なお、利用者によって正と判定されたどの
シナリオとも異なる入出力列を持つシナリオや、誤と判
定されたいずれかのシナリオと共通の入出力列を持つシ
ナリオを生成する場合も、これら正や誤と判定されたシ
ナリオの入出力列を参照しながら新たなシナリオを作成
する。
【0070】〔4−3.具体例〕続いて、本実施形態に
おける並列プログラムのテストの具体例を示す。この例
では、テストの対象とする並列プログラムは、プロセス
A,B,C1,C2という4つの並列に動作する主体に
よって構成されているものとする。これら各プロセスの
うち、プロセスAはコンピュータaによって、プロセス
Bはコンピュータbによって、プロセスC1及びC2は
コンピュータcによって実行され、プロセスC1とC2
は変数を共有するものとする。コンピュータa,b,c
が通信を行う関係を図10の概念図に示す。
【0071】この並列プログラムに要求される仕様とし
て、コンピュータaは、整数を1つ入力して、12以上
15以下の数字が入力された場合はその数字から2を引
いたものをディスプレイに表示するものとする。また、
コンピュータbは、整数を1つ入力して、5以上15以
下の数字が入力された場合はその数字から2を引いたも
のをディスプレイに表示するものとする。また、コンピ
ュータcはコンピュータaもしくはbから整数を受け取
り、15以下ならば2を引いたものを送り返し、そうで
なければ−1を送り返すものとする。
【0072】この仕様を実現するため、各コンピュータ
は、次のような動作を求められる。すなわち、コンピュ
ータaは、整数の入力を行い、12以上のものをコンピ
ュータcに送り、その後、コンピュータcから受け取っ
た整数を出力する。また、コンピュータbは、整数の入
力を行い、5以上のものをコンピュータcに送り、その
後、コンピュータcから受け取った整数を出力する。コ
ンピュータcは、コンピュータaもしくはbから整数を
受け取り、15以下ならば2を引いたものを送り返し、
そうでなければ−1を送り返す。
【0073】ここで、各プロセスとして実行されるプロ
グラムのソースコードを図11〜14に示す。なお、こ
れらのプログラムは、プロセスA,B,C1,C2の全
てについて最後まで実行が終了するか、デッドロック
(無限ループ)状態に入ったときに終了するものとす
る。また、ソースコード中の各ステートメントの意味と
しては、例えば、read(a, …) はコンピュータaにおけ
る数値の入力、write(b,…) はコンピュータbにおける
数値の出力、send(1, …) はメールボックス1へ送る、
wait(1, …) はメールボックス1から受け取る(データ
が来ていない場合は来るまで待つ)、wait(a==b)はaと
bの値が同一になるまで待つ、という処理を意味する。
このプログラムの入出力集合は、 {read(a),write(a),read(b),write(b)} である。
【0074】以下、図4に示したフローチャートを参照
して、本実施形態においてこの並列プログラムをテスト
する例を示す。まず、利用者が観察集合を入力する(ス
テップ401)。ここでは、コンピュータa、コンピュ
ータbそれぞれにおける入出力ごとにまとめ、 観察集合J= {{read(a),write(a)},{read(b),write(b)}} とする。この仕様は、コンピュータaとbそれぞれにお
いて、数字の入力と出力が1回ずつ行われることを意味
する。このプログラムの仕様は、明らかにJ−観察定義
仕様かつJ−観察有界である。
【0075】次に、テスト手段41によってプログラム
をテスト実行することによって、実行ログに含まれる入
出力列(観察列)として、 {read(a,14),read(b,7),write(a,12),write(b,5)} というシナリオが得られたものとする。ユーザは、この
シナリオが正しいかどうかチェックして、判定結果を入
力する(ステップ403)。このシナリオは上記の観察
集合J(仕様)を満たすので、使用者は、判定入力手段
42から、シナリオは真という判定を入力したとする。
すると、シナリオ発見手段44が、このシナリオに基づ
いて他のシナリオを作成する。この場合、まず、取り出
し部113が、シナリオから各入力ポートの入力列及び
各出力ポートのJ−観察列を取り出し、これをκとす
る。ここで、J−観察列は、 {{read(a,14),write(a,12)},{read(b,7),write(b,5)}} である。そして、シナリオ生成部114が、取り出した
観察列にしたがい、プロセスA,B,C1,C2間で各
ステートメントの実行のタイミングをいろいろ変えなが
ら、様々なパターンのシナリオを作成する(ステップ4
07)。作成されたシナリオは順次提示手段45に提示
されるので、使用者は、シナリオの内容を読んだり、シ
ナリオにしたがってプログラムを動作させてみるなどし
てプログラムPのチェックを試みる。ここで、シナリオ
のパターンは有限であることから、全てのシナリオにつ
いて有限の時間のうちに実行とチェックを行うことがで
きる。
【0076】なお、作成されて提示されるシナリオとし
ては、上記実行ログに含まれる入出力列すなわちJ−観
察列とJ−観察同値類であるシナリオは全てスキップさ
れ、J−観察列同値でないシナリオ(非κ−J観察シナ
リオ)が出力される。例えば、以下のようなシナリオが
出力される。なお、例えば"A-1" のような表現は、プロ
セスAにおいて実行ポイントが第1行目に移ったことを
示す。
【0077】A-1,A-2,A-3,A-4,C1-1,C1-2,C1-3,C1-4,C1
-5,C1-6,C1-1,C1-2,C2-1,C2-2,C2-3,C2-4,C2-5,C2-6,C2
-7,A-5,A-6,A-7,A-8,B-1,B-2,B-3,B-4,C2-8,C1-3,C1-4,
C2-9,C2-10,C2-1,C2-2,C1-5,C1-6,C1-1,C1-2 このシナリオのJ−観察列は、 {{read(a,14),write(a,12)},{read(b,7)}} である。そして、ユーザは、シナリオの判定を行う(ス
テップ408)。ここで与えられる判定が「正」の場合
はステップ406へ戻り、次のシナリオの生成を行う
が、本例の場合は観察列に含まれるwrite(b)に対応する
出力がなく、判定は「誤」となるので、プログラムの修
正を行ったうえ、テストの実行(ステップ402)から
の手順を繰り返す。
【0078】〔5.実施形態の効果〕以上説明したよう
に、本実施形態では、適当なテストケースによるシナリ
オをもとに、プログラム各部の実行タイミングを変える
ことによって、非決定性によって生じうる他のシナリオ
を作成することができる。そして、作成されるシナリオ
は、入出力への制約を基準として、当初与えられたシナ
リオとは異なる入出力を有するものである。このよう
に、与えられたシナリオと異なる入出力を有するシナリ
オについては、ユーザは異なった判定をする可能性があ
る。このため、このようなシナリオを順次作成すれば、
プログラムが持っている非決定的な動作を全て網羅的に
テストした結果を得たのと同じであり、テストが効率化
される。なお、作成する動作の範囲は、当初与えられた
シナリオの全体に対応するものでもよいし、与えられた
シナリオの途中まで又は一部分に対応するものでもよ
い。
【0079】特に、本実施形態では、テスト手段41に
よって最初のシナリオを作成できるので、外部からシナ
リオを与えることなく、他のシナリオの作成を円滑に行
うことができる。また、本実施形態では、それまでに得
られているシナリオとは入出力列が異なる新たな類型の
シナリオが順次作成されるので、非決定性によって変化
するプログラムの動作を網羅的に確認することができ
る。
【0080】また、本実施形態では、各シナリオについ
てその判定結果を入力しておけば、誤と判定されたシナ
リオと共通の入出力列を持つシナリオや、正と判定され
たシナリオとは異なる入出力列を持つシナリオ、すなわ
ち正しくない可能性があるシナリオを作成することがで
きる。このため、プログラムが示す可能性のある誤りを
効率的に確認することができる。
【0081】また、本実施形態では、範囲指定手段を用
いて、ユーザが、実行順序が変わってもよい入出力の実
行文の範囲を指定すると、指定された範囲での相違は無
視されて新たな他のシナリオが作成される。このため、
ユーザの判断に沿って過不足なくシナリオが作成される
ことによってテストが効率化される。
【0082】また、本実施形態によれば、シナリオが部
分的に作成された場合も、補間手段51によって、不足
部分をユーザが補間して完全な動作としたうえ、正誤の
判断を付けて保存することができる。このように補間さ
れたシナリオと正誤の判定は、新たなテストケースで得
たテストデータと同様に、プログラムの妥当性を判断す
ることに役立つ。また、ユーザは、必要と考える場合だ
け補間を行えばよいので、真に必要なケースのみをテス
トすることによってテスト工数の短縮が可能となる。
【0083】〔6.他の実施の形態〕なお、本発明は、
上記実施の形態に限定されるものではなく、次に例示す
るような他の実施の形態をも包含するものである。例え
ば、テスト手段41、判定入力手段42、範囲指定手段
46、補間手段51は必ずしも必要でない。また、提示
手段45を設ける代わりに、使用者が通常のエディタ等
を用いて、作成されたシナリオをコンピュータのメモリ
から読み出すようにしてもよい。また、図5〜9に示し
たシナリオを作成する手順は、一例に過ぎず、シナリオ
は他の手順で作成してもよい。例えば、複数のタスクで
それぞれ各プロセスをシミュレーション実行し、プロセ
ス間の相対実行速度を毎回変更してシナリオを作成する
ことも可能である。また、図10〜14に示した具体例
も一例に過ぎず、本発明がテストの対象とするプログラ
ムについて、プロセスの数や言語の種類、プログラムの
内容などを自由に選択することができることはもちろん
である。
【0084】
【発明の効果】以上説明したように、本発明によれば、
相互に有意義な相違を持つシナリオを生成できるので、
各シナリオを確認することによってプログラムの妥当性
を容易に判断することができ、プログラムのテストが効
率化される。
【図面の簡単な説明】
【図1】本発明の作用を示す概念図。
【図2】本発明の作用を示す概念図。
【図3】本発明の一実施形態の具体的な構成を示す機能
ブロック図。
【図4】本発明の実施の形態の全体的な動作手順を示す
フローチャート。
【図5】本発明の実施の形態において、新たなシナリオ
を作成する手順の概略を示す図。
【図6】本発明の実施の形態において、新たなシナリオ
を作成するための「初期化」処理の具体的な手順を示す
図。
【図7】本発明の実施の形態において、新たなシナリオ
を作成するための「実行前処理」の具体的な手順を示す
図。
【図8】本発明の実施の形態において、新たなシナリオ
を作成するための「1つ実行」処理の具体的な手順を示
す図。
【図9】本発明の実施の形態において、新たなシナリオ
を作成するための「1つ入出力実行」処理の具体的な手
順を示す図。
【図10】本発明の実施の形態における具体例につい
て、コンピュータa,b,cが相互に通信を行う状態を
示す概念図。
【図11】本発明の実施の形態における具体例につい
て、コンピュータaで実行されるプロセスAのソースコ
ードを示す図。
【図12】本発明の実施の形態における具体例につい
て、コンピュータbで実行されるプロセスBのソースコ
ードを示す図。
【図13】本発明の実施の形態における具体例につい
て、コンピュータcで実行されるプロセスC1のソース
コードを示す図。
【図14】本発明の実施の形態における具体例につい
て、コンピュータcで実行されるプロセスC2のソース
コードを示す図。
【符号の説明】
41…テスト手段 42…判定入力手段 43…シナリオ・判定記憶手段 44…シナリオ発見手段 45…提示手段 46…指定手段 101…観察集合受付部 112…観察集合記憶部 113…取り出し部 114…シナリオ生成部

Claims (11)

    【特許請求の範囲】
  1. 【請求項1】 プログラムのテストを支援するプログラ
    ムのテスト装置において、 試験対象プログラムの動作を表すシナリオに基づいて、
    前記プログラムが示し得る他のシナリオであって、前記
    シナリオに含まれる入出力列とは異なる入出力列を含む
    シナリオを作成する手段を有することを特徴とするプロ
    グラムのテスト装置。
  2. 【請求項2】 プログラムのテストを支援するプログラ
    ムのテスト装置において、 試験対象プログラムの動作を表すシナリオを作成する第
    1の作成手段と、 前記シナリオに基づいて、前記プログラムが示し得る他
    のシナリオであって、前記シナリオに含まれる入出力列
    とは異なる入出力列を含むシナリオを作成する第2の作
    成手段を有することを特徴とするプログラムのテスト装
    置。
  3. 【請求項3】 前記第2の作成手段は、前記他のシナリ
    オとして、当初与えられ又はその時点までに選択された
    いずれのシナリオとも入出力列が異なるシナリオを作成
    するように構成されたことを特徴とする請求項2記載の
    プログラムのテスト装置。
  4. 【請求項4】 前記シナリオに対して正誤の判定を入力
    するための手段を備え、 前記第2の作成手段は、前記他のシナリオとして、誤と
    判定されたいずれかのシナリオと入出力列が共通するシ
    ナリオ、又は、正と判定された全てのシナリオと入出力
    列が異なるシナリオのうち少なくともいずれかを作成す
    るように構成されたことを特徴とする請求項2記載のプ
    ログラムのテスト装置。
  5. 【請求項5】 プログラムに含まれる入出力の実行文の
    中から、実行の順序関係が問題とならない範囲を指定す
    る手段を備えたことを特徴とする請求項2乃至4のいず
    れか一に記載のプログラムのテスト装置。
  6. 【請求項6】 与えられたシナリオの一部に対応する他
    のシナリオが作成された場合に、当該シナリオに不足す
    る部分を補間するための手段を備えたことを特徴とする
    請求項2乃至5のいずれか一に記載のプログラムのテス
    ト装置。
  7. 【請求項7】 プログラムのテストを支援するプログラ
    ムのテスト方法において、 試験対象プログラムの動作を表すシナリオに基づいて、
    前記プログラムが示し得る他のシナリオであって、前記
    シナリオに含まれる入出力列とは異なる入出力列を含む
    シナリオを作成し、 前記他のシナリオをテストすることを特徴とするプログ
    ラムのテスト方法。
  8. 【請求項8】 プログラムのテストを支援するプログラ
    ムのテスト方法において、 試験対象プログラムの動作を表すシナリオを作成し、 前記シナリオに基づいて、前記プログラムが示し得る他
    のシナリオであって、前記シナリオに含まれる入出力列
    とは異なる入出力列を含むシナリオを作成し、 前記他のシナリオをテストすることを特徴とするプログ
    ラムのテスト方法。
  9. 【請求項9】 前記シナリオに対して正誤の判定がなさ
    れた場合に、 前記他のシナリオとして、誤と判定されたいずれかのシ
    ナリオと入出力列が共通するシナリオ、又は、正と判定
    された全てのシナリオと入出力列が異なるシナリオのう
    ち少なくともいずれかを作成することを特徴とする請求
    項8記載のプログラムのテスト方法。
  10. 【請求項10】 プログラムのテストを支援するプログ
    ラムのテスト用ソフトウェアを記録した記録媒体におい
    て、 前記ソフトウェアは、 試験対象プログラムの動作を表すシナリオに基づいて、
    前記プログラムが示し得る他のシナリオであって、前記
    シナリオに含まれる入出力列とは異なる入出力列を含む
    ものを作成させるステップを含むことを特徴とするプロ
    グラムのテスト用ソフトウェアを記録した記録媒体。
  11. 【請求項11】 プログラムのテストを支援するプログ
    ラムのテスト用ソフトウェアを記録した記録媒体におい
    て、 前記ソフトウェアは、 試験対象プログラムの動作を表すシナリオを作成させる
    ステップと、 前記シナリオに基づいて、前記プログラムが示し得る他
    のシナリオであって、前記シナリオに含まれる入出力列
    とは異なる入出力列を含むものを作成させるステップを
    含むことを特徴とするプログラムのテスト用ソフトウェ
    アを記録した記録媒体。
JP9288200A 1997-10-21 1997-10-21 プログラムのテスト装置及び方法並びにプログラムのテスト用ソフトウェアを記録した記録媒体 Pending JPH11120030A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9288200A JPH11120030A (ja) 1997-10-21 1997-10-21 プログラムのテスト装置及び方法並びにプログラムのテスト用ソフトウェアを記録した記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9288200A JPH11120030A (ja) 1997-10-21 1997-10-21 プログラムのテスト装置及び方法並びにプログラムのテスト用ソフトウェアを記録した記録媒体

Publications (1)

Publication Number Publication Date
JPH11120030A true JPH11120030A (ja) 1999-04-30

Family

ID=17727119

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9288200A Pending JPH11120030A (ja) 1997-10-21 1997-10-21 プログラムのテスト装置及び方法並びにプログラムのテスト用ソフトウェアを記録した記録媒体

Country Status (1)

Country Link
JP (1) JPH11120030A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011010427A1 (ja) * 2009-07-23 2011-01-27 パナソニック株式会社 実行状態監視装置および実行状態監視方法
WO2022019124A1 (ja) * 2020-07-21 2022-01-27 日立Astemo株式会社 テスト方法、演算装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6232548A (ja) * 1985-08-05 1987-02-12 Hitachi Electronics Eng Co Ltd プログラム通過アドレストレ−ス装置
JPH0561734A (ja) * 1991-08-30 1993-03-12 Nippon Telegr & Teleph Corp <Ntt> 並列プログラムの非決定的動作テスト方法
JPH0573358A (ja) * 1991-09-12 1993-03-26 Hitachi Ltd カバレジ方式、及びエミユレータ
JPH05233323A (ja) * 1992-02-21 1993-09-10 Toshiba Corp 並行プログラムのデバッグ支援装置
JPH05324402A (ja) * 1992-05-27 1993-12-07 Mitsubishi Electric Corp プログラムのテスト状態計測方式
JPH0784832A (ja) * 1993-09-09 1995-03-31 Hitachi Ltd リアルタイムシステムシミュレーション装置
JPH09212385A (ja) * 1996-02-02 1997-08-15 Mitsubishi Electric Corp 並列プログラムデバッグ装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6232548A (ja) * 1985-08-05 1987-02-12 Hitachi Electronics Eng Co Ltd プログラム通過アドレストレ−ス装置
JPH0561734A (ja) * 1991-08-30 1993-03-12 Nippon Telegr & Teleph Corp <Ntt> 並列プログラムの非決定的動作テスト方法
JPH0573358A (ja) * 1991-09-12 1993-03-26 Hitachi Ltd カバレジ方式、及びエミユレータ
JPH05233323A (ja) * 1992-02-21 1993-09-10 Toshiba Corp 並行プログラムのデバッグ支援装置
JPH05324402A (ja) * 1992-05-27 1993-12-07 Mitsubishi Electric Corp プログラムのテスト状態計測方式
JPH0784832A (ja) * 1993-09-09 1995-03-31 Hitachi Ltd リアルタイムシステムシミュレーション装置
JPH09212385A (ja) * 1996-02-02 1997-08-15 Mitsubishi Electric Corp 並列プログラムデバッグ装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011010427A1 (ja) * 2009-07-23 2011-01-27 パナソニック株式会社 実行状態監視装置および実行状態監視方法
WO2022019124A1 (ja) * 2020-07-21 2022-01-27 日立Astemo株式会社 テスト方法、演算装置

Similar Documents

Publication Publication Date Title
JP4950454B2 (ja) テスト自動化のスタック階層化
US5860009A (en) Programming method for concurrent programs and program supporting apparatus thereof
US8429619B2 (en) Executable high-level trace file generation system
JP2795244B2 (ja) プログラムデバッグシステム
US7353427B2 (en) Method and apparatus for breakpoint analysis of computer programming code using unexpected code path conditions
US20130318504A1 (en) Execution Breakpoints in an Integrated Development Environment for Debugging Dataflow Progrrams
JP2009277225A (ja) データ・フロー及びステートチャート表記を組み合わせた混成図からの検査生成方法及び装置
JP2000181725A (ja) 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム
US7703077B2 (en) Programming model to detect deadlocks in concurrent programs
US6067415A (en) System for assisting a programmer find errors in concurrent programs
US20050086022A1 (en) System and method for providing a standardized test framework
JP4050339B2 (ja) 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
JPH09114693A (ja) プログラム開発支援装置及びプログラム実行装置
JPH11120030A (ja) プログラムのテスト装置及び方法並びにプログラムのテスト用ソフトウェアを記録した記録媒体
EP4047482A1 (en) Improved checking of correctness of a plc program
JP3641090B2 (ja) プログラミング支援装置とその方法
EP0760980A1 (en) A system and method for creating design configurations and for controlling the execution of multiple design tools
JP2002157144A (ja) ソフトウェア自動試験方式
JPH10177590A (ja) 論理回路モデルのデバッグ装置およびデバッグ方法
US20240004780A1 (en) Parallel execution during application debugging
JP5067705B2 (ja) 異常系テスト支援装置、異常系テスト支援方法、及びプログラム
JP4149047B2 (ja) シミュレータ
Rauscher A unified approach to microcomputer software development
JP2001005688A (ja) 並列プログラム用デバッグ支援装置
CN112799942A (zh) 基于Keil C51的软件源码和目标码覆盖率分析方法和系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040630

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070413

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070424

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071030

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071221

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080624