1

私が理解しているように、ほとんどのプロパティ テスト ツールは関数のレベルで動作します。一連の引数が与えられると、そのようなツールはランダムな入力を生成し、何らかの不変条件に対して出力をテストします。

ステートフル システムをテストするためのイベントの生成が ScalaCheck に組み込まれ始めていることを読みました。しかし、私はそれに関する多くの情報を見つけることができません。これは他の *check エコシステム (fscheck、quickcheck、その他のバリエーション) でも人気が高まっていますか?

4

1 に答える 1

1

私の知る限り、「イベントの生成」と呼ばれるものは、Koen Claessen と John Hughes による「QuickCheck を使用したモナディック コードのテスト」に由来します。彼らが与える例は、キューのテストです。使用されるアプローチは常に似ています-コメントが言うように、「基本的な」クイックチェック(さまざまなプラットフォームでのクイックチェックポートのファミリーを説明するために小文字のクイックチェックを使用します)は、不変のデータを生成すると想定しているため、一見すると使いにくいです副作用のあるステートフルなシステムをテストするためのクイックチェック。

一連の状態遷移 (コマンド、アクション、イベントなどと呼ばれます) を実行することによって、ステートフル システムが特定の状態になることに気付くまでは。そして、このシーケンスは、不変遷移の不変リストとして完全に表すことができます! 通常、各遷移は、テスト対象の実際のシステムとその状態のモデルで実行されます。次に、各遷移の後、モデルの状態が実際の状態と比較されます。

たとえば、Quvik QuickCheck (Erlang 用) でこれがどのように機能するかを確認するには、Thomas Arts、John Hughes、Joakim Johansson、および Ulf Wiger による「Quviq QuickCheck を使用したテレコム ソフトウェアのテスト」を参照してください。

QuickCheck自体を含むほとんどのクイックチェックには、基本的なクイックチェック機能の上にレイヤーがあり、通常は事前条件と事後条件などを使用したステートマシンのようなアプローチを使用して、一連の状態遷移を生成できると思います.

これは特に新しいことではないと思いますが、おそらく少し強調されていません。

たとえば、FsCheck は何年にもわたってモデル ベースのテストを行ってきました(開示: 私は FsCheck の主な貢献者です)。同じことが ScalaCheck にも当てはまると思います。Quvik QuickCheck は、おそらく最も高度な実装です (確かに最も高度なアプリケーションで)。

于 2016-03-09T08:28:31.903 に答える