実践プロパティベーステスト ― PropErとErlang/Elixirではじめよう
https://www.lambdanote.com/cdn/shop/files/fh-proper-cover-20231012-light_530x.jpg?v=1698644631
従来のユニットテストでは、人間が「入力に対してコードが返すべき値」を考えて、その通りの結果が得られるかどうかをテストします。
これに対して プロパティベーステスト では、数万にも及ぶ多様なテストケースをコンピューターで自動生成し、その大量のテストを水面下で実行することによって、どんな入力に対してどんな問題が起きるかをテストします。 人間には思いもつかない入力まで網羅できることから、単に手間をかけずにテストケースを増えせるだけでなく、場合によっては仕様に潜むバグさえもあぶり出せる強力なテスト手法です。
プロパティベーステストで人間が記述するのは、「入力に対してコードが返すべき値」ではなく、「入力に対するコードの振る舞い」そのものを表す実行可能なコード(プロパティ)です。プロパティを書くためのアプローチとして、本書では次のような考え方を学びます。 - 通常のユニットテストで人間が書くようなテストケースをランダムに自動生成する
- より単純な機能を使った別の実装を作って比較する
- 不変条件や対称的な操作を見つけてそれを利用する
これらのアプローチ自体は言語に依存しませんが、表現力や実行方法はさまざまな言語で実装されているプロパティベーステストのためのフレームワークに依存します。 本書では、Erlang / Elixirで利用可能な PropEr というフレームワークを利用し、上記のような基本的なアプローチによるプロパティベーステストはもちろん、生成したいテストケースが互いに独立でない場合のプロパティベーステストや、状態に依存するシステムに対するプロパティベーステストなど、高度な応用事例についても紹介します。 本格的なアプリケーション開発を通して、プロパティベーステストの基礎から極北までを体験できる、唯一無二の解説書です。
目次
第I部 基礎
第1章 プロパティベーステストの基礎
第2章 プロパティを書く
第3章 プロパティで考える
第4章 カスタムジェネレーター
第II部 実践で学ぶステートレスプロパティ
第5章 信頼できるテスト
第6章 プロパティ駆動開発
第7章 収縮
第8章 標的型プロパティ
第III部 ステートフルプロパティ
第9章 ステートフルプロパティ
第10章 ケーススタディ:書籍の貸出システム
第11章 有限状態機械プロパティ