実践プロパティベーステスト ― PropErとErlang/Elixirではじめよう(電子書籍のみ)
通常価格
¥4,200(税込¥4,620)
特別価格
- PDFのみの提供です
- 紙書籍も必要な場合は、こちらからお得なセットをお求めください
- 紙書籍のみを差額等でお求め頂くことはできません
テストケースはコンピューターで書くべき! でもどうやって? その答えが「プロパティベーステスト」です
- Fred Hebert 著、山口能迪 訳
- 原書 Property-Based Testing with PropEr, Erlang, and Elixir
- 376ページ
- A5判
- ISBN:978-4-908686-18-4
- 2023年11月1日 発行
従来のユニットテストでは、人間が「入力に対してコードが返すべき値」を考えて、その通りの結果が得られるかどうかをテストします。 これに対してプロパティベーステストでは、数万にも及ぶ多様なテストケースをコンピューターで自動生成し、その大量のテストを水面下で実行することによって、どんな入力に対してどんな問題が起きるかをテストします。 人間には思いもつかない入力まで網羅できることから、単に手間をかけずにテストケースを増えせるだけでなく、場合によっては仕様に潜むバグさえもあぶり出せる強力なテスト手法です。
プロパティベーステストで人間が記述するのは、「入力に対してコードが返すべき値」ではなく、「入力に対するコードの振る舞い」そのものを表す実行可能なコード(プロパティ)です。プロパティを書くためのアプローチとして、本書では次のような考え方を学びます。
- 通常のユニットテストで人間が書くようなテストケースをランダムに自動生成する
- より単純な機能を使った別の実装を作って比較する
- 不変条件や対称的な操作を見つけてそれを利用する
これらのアプローチ自体は言語に依存しませんが、表現力や実行方法はさまざまな言語で実装されているプロパティベーステストのためのフレームワークに依存します。 本書では、Erlang/Elixirで利用可能なPropErというフレームワークを利用し、上記のような基本的なアプローチによるプロパティベーステストはもちろん、生成したいテストケースが互いに独立でない場合のプロパティベーステストや、状態に依存するシステムに対するプロパティベーステストなど、高度な応用事例についても紹介します。
本格的なアプリケーション開発を通して、プロパティベーステストの基礎から極北までを体験できる、唯一無二の解説書です。
本書の対象読者
- ErlangおよびElixirを使ってソフトウェア開発をしている方
- ソフトウェアの品質に日々悩んでいる方
- テストの経験があり、問題探索に向けてもっと知識を深めたい方
執筆者紹介
Fred Hebert(著書)
システムアーキテクトとして、画像監視、アクセス制御管理、ナンバープレート識別を提供する企業に勤務。以前はテックリードとして、クラウドプラットフォームのネットワーキングサービスに勤務していた。また、Erlang の指導およびトレーニングコースの整備担当として、リアルタイムビディングのシステムでも勤務している。Erlang の主要なビルドツール(rebar3)のメンテナの一人でもある。
山口能迪(訳者)
グーグル合同会社シニアデベロッパーリレーションズエンジニア。クラウド製品の普及と技術支援を担当し、特にオブザーバビリティ、SRE、DevOps といった領域を担当。OpenTelemetry やGoのコミュニティの支援も活発に行っている。以前はウェブ、Android、Google アシスタントなどと各種新規製品・新規機能のリリースと普及に関わり、多くの公開事例の技術支援を担当。好きなプログラミング言語の傾向は、実用指向で標準の必要十分に重きを置くもので、特にGoやPython を好んでいる。
目次
訳者まえがき
原書への推薦の言葉
謝辞
はじめに
第I部 基礎
第1章 プロパティベーステストの基礎
1.1 プロパティベーステストの約束
1.2 プロパティから始める
1.3 自分のプロジェクトでプロパティベーステストを始める
1.4 プロパティを実行する
1.5 まとめ
第2章 プロパティを書く
2.1 プロパティの構造
2.2 デフォルトジェネレーター
2.3 すべてをまとめる
2.4 まとめ
2.5 演習
第3章 プロパティで考える
3.1 モデル化
3.2 事例テストを汎化する
3.3 不変条件
3.4 対称プロパティ
3.5 すべてをまとめる
3.6 まとめ
3.7 演習
第4章 カスタムジェネレーター
4.1 デフォルトジェネレーターの限界
4.2 統計情報を収集する
4.3 基本的なカスタムジェネレーター
4.4 技巧的なカスタムジェネレーター
4.5 まとめ
4.6 演習
第II部 実践で学ぶステートレスプロパティ
第5章 信頼できるテスト
5.1 仕様
5.2 プログラムの構造に関する考察
5.3 CSVのパース
5.4 レコードのフィルタリング
5.5 従業員モジュール
5.6 テンプレート
5.7 すべてをつなぎ合わせよう
5.8 まとめ
第6章 プロパティ駆動開発
6.1 仕様
6.2 最初のテストを書いてみる
6.3 特価品の購入をテストする
6.4 特価の実装
6.5 ネガティブテスト
6.6 まとめ
第7章 収縮
7.1 ?SHRINKで中立点をずらす
7.2 ?LETSHRINKを使ってより詳しく調べる
7.3 まとめ
7.4 演習
第8章 標的型プロパティ
8.1 標的型プロパティを理解する
8.2 実践 標的型プロパティ
8.3 独創的に考える
8.4 まとめ
第III部 ステートフルプロパティ
第9章 ステートフルプロパティ
9.1 ステートフルプロパティの配置
9.2 ステートフルプロパティの動作
9.3 プロパティを書く
9.4 基本的な並行キャッシュのテスト
9.5 並列実行をテストする
9.6 まとめ
9.7 演習
第10章 ケーススタディ:書籍の貸出システム
10.1 アプリケーションの紹介
10.2 ジェネレーターを書く
10.3 広範囲のステートフルテスト
10.4 状態の正確なモデル化
10.5 テストを改善する
10.6 ステートフルプロパティをデバッグする
10.7 並列テスト
10.8 まとめ
第11章 有限状態機械プロパティ
11.1 有限状態機械プロパティを配置する
11.2 有限状態機械プロパティはどのように動作するか
11.3 プロパティを書く
11.4 サーキットブレーカーのテスト
11.5 サーキットブレーカーをモデル化する
11.6 モデルの調整
11.7 まとめ
付録A 演習への解答
A.1 プロパティを書く
A.2 プロパティで考える
A.3 カスタムジェネレーター
A.4 収縮
A.5 ステートフルプロパティ
付録B Elixir移植版
B.1 プロパティで考える
B.2 信頼できるテスト
B.3 ステートフルプロパティ
B.4 ケーススタディ:書籍の貸出システム
B.5 有限状態機械プロパティ
付録C PostgreSQLのインストール
付録D ジェネレーターリファレンス
索引