私の知る限り、「イベントの生成」と呼ばれるものは、Koen Claessen と John Hughes による「QuickCheck を使用したモナディック コードのテスト」に由来します。彼らが与える例は、キューのテストです。使用されるアプローチは常に似ています-コメントが言うように、「基本的な」クイックチェック(さまざまなプラットフォームでのクイックチェックポートのファミリーを説明するために小文字のクイックチェックを使用します)は、不変のデータを生成すると想定しているため、一見すると使いにくいです副作用のあるステートフルなシステムをテストするためのクイックチェック。
一連の状態遷移 (コマンド、アクション、イベントなどと呼ばれます) を実行することによって、ステートフル システムが特定の状態になることに気付くまでは。そして、このシーケンスは、不変遷移の不変リストとして完全に表すことができます! 通常、各遷移は、テスト対象の実際のシステムとその状態のモデルで実行されます。次に、各遷移の後、モデルの状態が実際の状態と比較されます。
たとえば、Quvik QuickCheck (Erlang 用) でこれがどのように機能するかを確認するには、Thomas Arts、John Hughes、Joakim Johansson、および Ulf Wiger による「Quviq QuickCheck を使用したテレコム ソフトウェアのテスト」を参照してください。
QuickCheck自体を含むほとんどのクイックチェックには、基本的なクイックチェック機能の上にレイヤーがあり、通常は事前条件と事後条件などを使用したステートマシンのようなアプローチを使用して、一連の状態遷移を生成できると思います.
これは特に新しいことではないと思いますが、おそらく少し強調されていません。
たとえば、FsCheck は何年にもわたってモデル ベースのテストを行ってきました(開示: 私は FsCheck の主な貢献者です)。同じことが ScalaCheck にも当てはまると思います。Quvik QuickCheck は、おそらく最も高度な実装です (確かに最も高度なアプリケーションで)。