generated at
『実践プロパティベーステスト』
2023/11/1

なんでElixir/Erlang?って気はするけど頑張って(?)読むかmrsekut
サンプルコードが両言語用のものがある
読み進めても、どちらか片方だけで良かったやろ、という気持ちにしかならないmrsekut
PropErを使う
演習問題もついている



訳者まえがき


>第I部 基礎


第1章 プロパティベーステストの基礎
elixirでproject作成
$ nix-shell -p elixir
$ mix test でtest実行
インタプリタで試す
$ mix deps.get
$ MIX_ENV="test" iex -S mix


第2章 プロパティを書く
stateless propertyとstateful propertyの2つがある
なんか具体的すぎる話が多いなmrsekut
moduleがtest suitの単位になる
property
test本体と言える箇所
helper
ランダムに作るやつ、自作もできる
iex
iex(1)> :proper_types.term() iex(2)> :proper_gen.pick(:proper_types.number())


とはいえ、elixir書けてもしゃあないので、tsかhsでサンプルは試したいなmrsekut
そうなると、PropCheckが提供するgeneratorが具体的にそれに依存してしまう
まあ、fast-checkはしらんけど、hsのQuickCheckなら相当するものはあるだろう
erlangとelixirは読めりゃ良い
testとは関係ないけど、elixirってこんな感じで関数定義するんだ、おもろmrsekut
pattern matchingと、(引数の個数の異なる)overloadを多用する感じ




第3章 プロパティで考える
面白くなってきたmrsekut
いろんな手法
モデル化
事例テストを汎化する
具体例が、言うほど事例テストの汎化になってるか?という感じの説明だ
不変条件
対称プロパティ




第4章 カスタムジェネレーター
PBTならではの懸念点など
同じ入力が複数あったときにのみバグる関数がある場合、ランダム入力が2回以上ないと気づけない
「ランダム」と言っても本当にエッジケースの入力が行われているのかは、ライブラリの仕様を見ないと確認できない
collect/2aggregate/2のような統計情報を収集するための関数があるらしい
hsのやつにはなさそう?
custom generator
resize
transform
constraint
確率を変更する


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 ジェネレーターリファレンス



索引