効果の低いテストの話
bleis-tift
January 11, 2015
自己紹介
id:bleis-tift / @bleis
なごやではたらくゆるふわ Fer
最近の Java はわからない人
言語仕様であればそれなりに
テストの目的
バグを見つけること
極論、「バグを見つけること」に寄与しないので
あれば、自動化なんてしなくてもいい
(もちろん、手動でやる意味もない)
極論ですよ?
テストの目的を突き詰めていくと
結果から見ると、「バグを見つけたテスト」
だけあればよかった
 個の独立したバグを見つけるために、 個の
テストで見つけられた場合が最も効率が良い
結果論なので実現不可能
だけど、これに近づける努力はする
バグが「ありそう」な場所をテストするとか
そういうの
境界値分析とか
テストの「自動化」とは?
テストケース考えたり、テストケースを実装
したりは通常「手動」
一般的には、テストの「実行」を自動化
する話
実行しか自動化しないということは・・・
変更に対して、壊していないことの確認が主
バグを見つけに行くためのテストというよりは、
バグが飛び込んでくるのを待ち構えるための
テストにした方がいい
テストの実行の自動化の目的は
バグを「待ち構える」テストを
何回も実行すること
→ テストケース数はある一定以上減らせない
テスト自動化の注意事項
テストを自動実行することを目的にしない
カバレッジを上げることを目的にしない
バグを見つけるという目的を忘れない
自動テストを書くなら、効果の高いテストを書く
ようにする。言い換えると、
「効果の低いテストは書かないようにする」
効果の低いテストの例
getter/setter のテスト
設定系のテスト
モック酔い (TDD のアンチパターンより) に
陥っているテスト
などなど
getter/setterのテスト
getter/setter はテストが書きやすく、
数が稼げる
テストの目的に数とか関係ない
getter/setter にバグが入り込む可能性とは
そもそも、getter/setter が OOP 的には
よろしくない
求めるな、命じよ
設定系のテスト
設定項目 1 つ 1 つに対して、設定ファイルに
設定した値が取れるかどうか確認
テストの数が稼げ(ry
設定ファイルを変更したらテスト落ちる
設定を変更してもコードを直さなくていいよう
にするために設定ファイルに分離したのでは?
モック酔いに陥っているテスト
モックの返す値をテスト
それ、使っているモックライブラリのテスト
をしているのですか?
システムの振る舞いをテストしたかったはず
そこでバグが出ても、それはモックライブラリ
のバグであり、テストしたいシステムのバグで
はない
まとめ
効果の高いテストを書こう
効果の低いテストを書かないことから
はじめよう
テストの目的を見失わないようにしよう
おわり

効果の低いテストの話