7

現在取り組んでいる小さなサッカー ゲーム用の有限ステート マシン モジュールを作成しました。FSM (基本的にその状態と遷移) を設定するためのインターフェイスを提供します。状態ごとに、開始時と終了時に起動される関数を提供できます。または、FSM が同じ状態のままである間にこれらの関数がいくつかのメッセージを返します。また、時変状態を生成し、時間の経過とともに発生するメッセージを収集するリアクティブ インターフェイス (Yampa) も提供します。コードはData/FSM.hsにあります。

このモジュールをテストする良い方法を探しています。純正なので、クイックチェックしてみようと思いました。私はクイックチェックの経験がないので、ヒントをいただければ幸いです。これまでの私の基本的な理解: FSM を多かれ少なかれランダムに構築するいくつかの関数を提供し、それらに対していくつかの (再び多かれ少なかれランダムな) 遷移を実行します。しかし、そのようにテストを構築する方法がよくわかりません...

4

1 に答える 1

4

まず第一に、QuickCheck は幅広い一般的なプロパティを検証するのに最適です。何らかのタイプの任意のデータを指定して、いくつかの操作を実行し、述語を使用して、結果が入力に関連するプロパティを持つようにします。段階的な動作の正確な詳細を含むものは、このスタイルではうまく機能しない可能性があり、QuickCheck ですべてを実行する義務を感じるべきではありません!

とはいえ、コメントで提供したより複雑な例に基づいて、FSM と入力と共に期待される出力を単純に生成することを検討しましたか? 構成によって正しいことがわかっている望ましい結果を生成できる場合は、入力に対して FSM を実行し、実際の結果を構成されたバージョンと比較できます。

QuickCheck プロパティを何らかの入力で関数をテストするものと考えるのではなく、1 つ以上の値がテスト対象の関数に関して表現された述語を満たすかどうかをチェックするものと考えると役立つ場合があります。この値のコレクション (必要に応じて複数の入力、出力を含む場合があります) は、QuickCheck によって実際にランダムに生成されるものです。

于 2011-12-17T23:29:51.627 に答える