- Model based test
- Metamorphic test
- Postconditions
- Round-trip test
- 有効なテストがどの程度の頻度で行われているのか確認しよう。(例:リストに存在しない値に対するlookupがテストの大半を占めていないか)
collect
,label
,labelExamples
,tabulate
,classify
を使ってテストをデバッグしよう。 http://hackage.haskell.org/package/QuickCheck-2.13.1/docs/Test-QuickCheck.html#g:21
- Generatorの良し悪し
- Generatorはboundry case, edge caseを適切に生成しているのか。(例: 10万回に1回しかedge caseを生成していないか)
- 適切なshrinkingを行おう
一言でいうと非常に難解かつ特殊なライブラリでした。。 http://hackage.haskell.org/package/quickcheck-state-machine
- generic-arbitraryは絶対使わない
http://hackage.haskell.org/package/generic-arbitrary-0.1.0 - Property-driven development
forAll
は適切にshrinkされないから使用する際には注意!
http://hackage.haskell.org/package/QuickCheck-2.13.1/docs/Test-QuickCheck.html#v:forAll- Testing statistical properties https://link.springer.com/chapter/10.1007/978-1-4612-0919-5_18
面白いのは、これに関する論文は1940年代に発表されたけど、軍事機密 に関わるという理由でしばらく公表されなかったこと