質問

Quickcheck とするものがござ Java)ようとするのは面白いです。しかし、ほかの学術利で本当に役立つ実用試験(例.GUIアプリケーションやクライアント/サーバーはもStackOverflow体)?載の経験だったのと同様の試験発電機をよろしくお願いいたします。

役に立ちましたか?

解決

はい、よく。実際にはありませんが、私はもともとQuickCheckを開発した人に師事してきたし、彼は本当に面白い人だ。

戻る2004年に、私たちはHaskellプログラムをテストするためにQuickCheckを使用することを余儀なくされた、それは善と悪の組み合わせでした。あなたはそれが働いてしまったとき、ほとんど悪いHaskellは少し自分自身を気力をくじくなかったので、決して少ない素晴らしいます。

ジョンはそれ以来、彼は数年前、実際に書いたものがEricssionはその複雑な通信ハードウェアをテストする助け完成させました、そして、彼は20百万人かそこら彼のアプローチを通じてわずか3つのステップにすることを減らすコードの行にバグを発見しました。常に彼に聞いて喜び、彼はとてもよく何提示していますが、すべてがすべてで、彼が何をQuickCheckでやったことは私には新鮮でしたので、彼は素晴らしいスピーカーです。だから私は彼の関心は市場にこれを持参していたものを、彼に尋ねました。彼は考えに開いていたが、一度に(QuickCheckをベースに)彼のビジネスは比較的新しかったので、彼に焦点を当てるだろう他のエリアがありました。これは今、私のポイントは、あなたが文句を言わない、それを使用して終了してもQuickCheckから学ぶことができるである2007年です。

しかし、QuickCheckは何ですか?これは、組み合わせテストフレームワークやプログラムをテストするための興味深い方法です。マイクロソフトリサーチの人々の上には組み込まれていますペックスの種類の類似しています。 PexがあなたのILを調べることによって、自動的にテストを生成します。しかし、ジョンは関数の可能な入力及びテストプロパティの発生を記述します。プロパティは、簡単にテストすることができるものです、それは多くの正式なのです。例えばリストを逆転?さて、リストを逆に、二つの半分にリストを分割し個別にそれぞれを逆にして、逆の順序で2つの逆転半分を連結することと同じである。

1,2,3,4 // original
1,2 3,4 // split into A and B
2,1 4,3 // reverse A and B
4,3,2,1 // concat B and A

これは仕様と呼ばQuickCheckをテストするための素晴らしい財産であり、その結果は非常に驚くべきことである。

PexとはQuickCheckのようにクールな素敵な、しかしではない、Pexのは、物事を単純化し、QuickCheckはしませんが、それは良いの仕様を記述するために多くの労力を要します。

QuickCheckの力は、それが失敗に実行したときに、それは可能な最小のフォームに、あなたのテストが失敗する原因となった入力を削減することです。状態の進行は、あなたのテストが失敗した原因の詳細な説明とあなたを残して。ただ強引な方法であなたのコードを破るしようとする他のテストフレームワークと比較します。

これは、あなたのテスト仕様書を作成する方法をすることが可能となります。 QuickCheckは、入力を発明し、それは、このためだ、バックトラックのその能力とあなたのテストに合格しない本当に小さな入力を見つけるために、擬似ランダム性に依存しています。

これは、QuickCheckのプロパティを記述するために多くの仕事だが、最終結果は、より良いテストです。ジョン自身が言ったように、バグの70%は、ユニットテストでキャッチ、それはあなたのプログラムがクラッシュし、他の30%ですされています。 QuickCheckは、それらの最後の30%をテストしてます。

他のヒント

私は、離散イベントシミュレーションを関与本当のHaskellの問題をやりました。だから私はMVarsとチャンネル当量とともに、継続モナドに基づくDESライブラリを書きました。私は、これが適切に働いていることを確認するために必要なので、私は、例えば、チャンネルに書き込まれた同時2つのデータストリームが正しく何も落とさずにマージされるだろう、ということを証明するためにQuickCheckプロパティの束を書いています。

私はまた、文書にQuickCheckを使用して、私の<のhref =「http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Ranged-sets-0.2.0」のプロパティを確認しましたREL = "noreferrerは">を設定の範囲であり、ライブラリ。

私の経験ではQuickCheckは時々素晴らしいです。あなたはプロパティが毛深いであることを実現したアルゴリズムが、簡潔な方法で重要な特性をまとめることができた場合は、QuickCheckは巨大な勝利です。一方私は、多くの場合、アルゴリズムは、私が検証したい性質と同等であることを見つけます。その場合、私は単純にプロパティを探します。例えば、仮定する機能「fooが」非厳密に単調なことになっています。そして、あなたが書くことができます。

prop_fooMonotonic x y = (x > y) ==> (foo x >= foo y)

使っていQuickCheck多くの個人のもの。ヶ月以内に:

  • たQuickCheck試験色の変化と離散コサイン変換画像圧縮器です。

  • たQuickCheck試験のための象徴的差別化モジュール私は一部の数値最適化。

  • たQuickCheck試験に複検索ツリーのスタイルのベントレー、Sedgewick.

QuickCheckまくいくことはほとんどな すべての 私のユニット検査ニーズで使うことができるように---とのQuickCheck法をいいます。

私は主に試験プロトコルおよびパーサの実装のために、主にstraighforwardようにし、それを非常に多く使用されてきています。

しかし、ここでは私の個人的な経験からあまり些細なビットがある: http://www.haskell.org/ haskellwiki / QuickCheck_as_a_test_set_generatorする

ScalaCheck (QuickCheckのためのスカラ)を用いて試験 機能Java, は、図書館がどの実施 a QuickCheck Java.

私の知る限りXMonadはQuickCheckで徹底的にテストされている。

私は少しだけヘルパーツールの開発のための運用環境ではHaskellを使用していました。主に私はHaskellのを読み、私が知っている開発者だけだから。私はかかわらず、広範囲にQuickCheckを使用して、類似した何かがC#で利用できないことを、本当にイライラしました。だから私は試してみることにしたと / <それを自分自身を書きますA>。私もPexと見て、しかしQuickCheckはそれを行う方法よりも少ない面白い最小限の入力を見つけるために使用されているプログラム探査技術を見つけます。

を使用していま FsCheck チェックが存F#翻訳内容に間違いがないか確認し、当社の最適なバージョン作品と同じ国連を最適化した。また、使用するレクサーとのパーサからの NHol プロジェクトを使用し パーサ combinator.

またヘルパーなどの機能-コンテンツの運営上での試験内 (ルです。して順調なものではなかった。見 assertProp.

私はLG LinuxのモバイルプラットフォームでSMSのPDUエンコーダおよびデコーダを試験するためQuickCheckを使用しています。私はその時点で開発されたソフトウェアの一部の(旧)バージョンのhttpでダウンロードできます/ /hackage.haskell.org/package/GenSmsPdu-0.1する

これは私のプロジェクトではないですが、containersパッケージはかなり広範囲にQuickCheckを使用しています。個人的に、私は私がarithmoiで、時にはセグメンテーションフォルトを1つを発見するために私を導いarithmoiの1、に書いた他愛ないプライムふるいを比較するためにそれを使用してみました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top