読書会でまとめたものになります

14章『テストと読みやすさ』P.179

14章における「テスト」……他の(「本物」の)コードの振る舞いを確認するためのすべてのコードのこと
 

14.1 テストを読みやすくて保守しやすいものにする(P.180)

テストコードを読みやすくすることは大切。本物のコードの動作が理解しやすくなる。
テストコードは「本物のコードの動作と使い方を示した非公式的な文書」といえる。
 
鍵となる考え
他のプログラマが安心してテストの追加や変更ができるように、テストコードを読みやすくする。
 
ダメなテストコードが引き起こすこと
  • 本物のコードを修正することを恐れる
  • 新しいコードを書いたときにテストを追加しなくなる
 
テストコードを変更したことで既存のテストが壊れたとしても、簡単に原因が突き止められるなら安心してテストを追加できるようになる。

14.2 このテストのどこがダメなの?(P.180)
実例
 
14.3 テストを読みやすくする(P.181)
14.2の解説。
大切ではない詳細はユーザから隠し、大切な詳細は目立つようにするべき。
 
  • 最小のテストを作る
「12章 コードに思いを込める」の技法を使い、このテストが何をしようとしているのかを簡単な言葉で説明する→テストの本質を「こういう状況と入力から、こういう振る舞いと出力を期待する」のレベルまで要約→1行にまとめる
⇨コードが簡潔で読みやすくなる。テストケースの追加が簡単になる。
 
  • 独自の「ミニ言語」を実装する
独自のミニ言語を定義すれば、小さな領域で多くの情報を表現できる。
 
14.4 エラーメッセージを読みやすくする(P.185)
 
エラーメッセージはできるだけ役に立つようにするべき。
 
  • もっといいassert()を使う
多くの言語やライブラリには、洗練されたassert()が用意されている。詳細なエラーメッセージが表示された方が良い。
どの言語を使っていても、役立つライブラリやフレームワーク(xUnitなど)がきっとある。ライブラリのことを知っておこう!

  • 手作りのエラーメッセージ
理想のエラーメッセージがあるなら「手作りのアサート」を自分で書けばいい。
 
14.5 テストの適切な入力値を選択する(P.188)
テストの適切な入力値を選択するには優れた技能が必要。
適切な入力値=コードを完全にテストするもの かつ 簡単に読めるような単純なもの
 
鍵となる考え
コードを完全にテストする最も単純な入力値の組み合わせを選択しなければいけない。
 
 
鍵となる考え
テストには最もキレイで単純な値を選ぶ。

  • 1つの機能に複数のテスト
×「完ぺき」な入力値を1つ作る
○小さなテストを複数作る
簡単で効果的で読みやすい。
複数のテストで別々の方向からバグを見つけ出すようにする。
テストケースが分割されていれば、次の人がコードを扱いやすくなる。
意図せずにバグを発生させたとしても、失敗したテストによってその場所がわかる。
 
14.5 テストの適切な入力値を選択する(P188)
 ・コードを完全にテストする最も単純な入力値の組み合わせを選択しなければならない。
  →テストコードを書く際、最もキレイで単純な値を選ぶ
 ・1つの機能に複数のテスト
  →小さなテストを複数作る方が単純で読みやすい
   例:ソート、重複は許可
 
14.6 テストの機能に名前をつける(P190)
 ・テストコード(関数)に名前をつける
  例:Test_SortAndFilterDocs() など
  その際、名前が長くなっても良い。コメントだと思えば良い。
 
14.7 このテストのどこがダメだったのか?(P192)
 具体例だったので飛ばす
 
14.8 テストに優しい開発(P194)
 テストコードを書くつもりでコードを書くと、
 テストしやすいコードを設計しやすいようになり、いいコードが書けるようになる。
 
14.9 やりすぎ
 テストに集中しすぎる可能性もあるので注意する。
 ・テストのために本物のコードの読みやすさを犠牲にしてしまう。
 ・テストのカバレッジを100%しないと気がすまない。
 ・テストがプロダクト開発の邪魔になる。
 
担当:やし