第14章:テストと読みやすさ
概要
本章では、効果的なテストを書くための技法を解説している。(ここでのテストは、コードの振る舞いを確認するための全てのコードのいこと。)
まとめ
テストコードでも読みやすさが必要で、テストが読みやすければテスト書きやすくなる。また、本物のコードをテストしやすく設計すれば、コードの設計が全体的に改善される。
学んだ点
・テストコードを読みやすくするのは、テスト以外のコードを読みやすくするのと同じくらい大切である。
・他のプログラマが安心してテストの追加変更ができるように、テストコードを読みやすくすることが必要である。
・一般的な原則として、「大切ではない詳細は目立つようにする」べきである。
・テストの本質は、「対象の状況と入力から、こういう振る舞いと出力を期待する」のレベルまで要約できる。また、その挙動を記述するためには、1行で事足りることが多い。コードを簡潔に読みやすくするためだけでなく、テストステートメントを近くすることで、テストいケースの追加が簡単になる。
・エラーメッセージは、できるだけ役立つようにすることが大事で、自分好みのエラーメッセージを印字する「手作りのアサート」を用意するのが最善である。
・コードを完全にテストする最も単純な入力値の組み合わせを選択しなければならない。
・テストには、最もキレイで単純な値を選ぶ
・コードを検証する「完璧」な入力値を1つ作るのではなく、小さなテストを複数作るほうが、簡単で、効果的で、読みやすい。そうすることで、複数のテストで別々の方向からバグを見つけ出せるようにする。
・テストケースが分割されていれば、次の人がコードが扱いやすくなる。
・関数等に名前を付ける場合、テストの内容を表した名前を付けるべきで、テストコードを読む人が以下のことを理解できるようにする。①テストするクラス②テストする関数③テストする状況やバグ
・テストで利用する関数の場合、「Test~」と接頭語をつけて情報をまとめて書くべきである。
・テストコードは、長くなってしまったとしても、「Test_<関数名>_<状況>()」という形式で書くべきである。
・ほとんどのスティングフレームワークでは、テストが失敗したらその関数の名前が印字されるようになっているので、名前は、関数の処理の説明の方がいい。
・後でテストコードを書くつもりで、コードを書くとテストしやすいようにコードを設計するようになるので効率がいい。
・テスト駆動開発とは、本物のコードを書く前にテストを書くというプログラミング手法であり、コードを書いてからテストを書くよりもコードの品質が飛躍的に向上するらしい。
・プログラミングをクラスやメソッドに分割するというのは、疎結合にしたほうがテストしやすいからである。
・テストのために本物のコードの読みやすさを犠牲にしない。
・テストのカバレッジを100%にしようとこだわりすぎない。(カバレッジ100%はほぼ不可能)
・テストがプロダクト開発の邪魔にならないようにする。
感想と振り返り
普段の実装ではテストコード...という感じなので、勉強し直せてよかったです!Rubyの個人開発時には、ライブラリを使ってモデルとテストコードを活用して簡単にテストできたので、Swiftでもテストコードに関して学習して積極的に活用していきたいと思います!
今回学んだところには記述しなかったのですが、「テストの容易性の低いコードの特性とそこらか生じる設計の問題」と「テスト容易性の高いコードの特性とそこから生じる設計の利点」を表にして説明してくれているので、ぜひ手に取って読んでみてください!