10.4 テスト駆動開発はすばやいフィードバックをもたらす
内容
ソフトウェアを開発するいちばん安価な方法は、最初からバグが発生しないようにすることだ。
次に安価な方法は、あとで別のチームが修正するのではなく、発見したらすぐに同じ人または同じチームによって修正することだ。
一連の刺激と反応のトランザクションが精神に定着するためには、刺激に対してすばやい反応を続けることが必要だと、ある生物学者は示している。
この生物学的観点でも、バグを生んだ本人がすぐ治すのが早いということになる。
そして、テスト駆動開発はすばやいフィードバックをもたらしてくれる。
10.5 テスト駆動開発はリファクタリングをサポートする
コードがテストによってサポートされている場合は、リファクタリングが安全にできる。何かを間違えたらテストが失敗してすぐに教えてくれるからだ。
リファクタリングが必要なシーン
- 視野が狭くなっていると命名が少しずさんになる傾向がある。
- ふるまいを実装している最中に、何に命名をする必要があるかわからなくなることがある。
アジャイルはリファクタリングしながら進むと効率的
アジャイル開発では、すべてを最初から理解しようとせず、反復的にソフトウェアを「間違いながら」「設計しながら」作ることが許されており、そのほうがはるかに効率的。そうするためにはリファクタリングしながら進むのは必須で、そのためにはテストが常にサポートしてくれる環境が必要。
学び
- 記憶を定着させるには反復練習が必要。
- レガシーの匂いがするコードは対処を先延ばしにしないようにしないと、レガシーコードを作った本人がいなくなる可能性がある。レガシーコードが残ると拡張しづらいシステムになるので、レガシーコードはなるべくリアルタイムで修正する。
- レガシーコードを産まないようにするにはテスト駆動開発とペアプロすると、正しく進んでいくのがよいのではないか。
- リファクタリングにはテストを担保するものが常に横にある必要がある
- リファクタリングは開発中が一番コストをかけずにできる
学びを活かすアイディア・行動
- 現場にテスト駆動開発をシフトさせる。どうすればいいか。。
- 現場のリファクタリング計画のためにリファクタリング内容に紐づく修正ファイル対象の一覧を作る。案件があるときに、合わせて修正を検討する。