GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

【書評】経験ゼロでもできるプログラミング現場の単体テスト

BBQ和尚の同僚の方とは知らずタイトル買いした本ですが、タイトルに偽りなしです。とにかく平易で優しいわりにいちいち実践的で助かってます。最小の努力で結果が出るように配慮されています。

経験ゼロでもできるプログラミング現場の単体テスト

経験ゼロでもできるプログラミング現場の単体テスト

この本を買ったきっかけは、とにかくデグレを無くしていい意味で手離れの良いコードを書いて楽がしたい、というもの。その為にはテストツールの使い方よりも、「どうやってテストコードを書けばある一定の品質が保てるのか」ということが書いてあるまとまった情報が欲しかった。で、本書をあたりました。

テストコードの書き方がわかっても、テストの内容が不十分であったりテストする単位が均質でなければ意味がない。「テストの内容が不十分」ってのは漏れがあるってことに等しいんですが、漏れないためにはどうすべきかって所を「優しく」語ってくれる本は、本書が一番なんじゃないかなぁ。

一番参考になったのはDBアクセス部分のテストの書き方でした。SELECT、INSERT、UPDATE、DELETE、DB制約・・・。この辺のテスト手法をわかりやすくポイント絞って書いてくれている。大変参考にさせて頂いています。

また、テストコードを書いていると、「このコードはテストしにくいな・・・」っていう違和感を覚えるようになった。テストしにくいってことは、引数から結果を返す過程が直感的じゃないってことなので、要はやり方がマズイわけで。テストがやりにくいってことは、設計が腐ってるってことなんだなーと。Less is Moreでいきたいもんです。

以下、読後のログ。

参考になった部分を書いておきます。

  • 先にテストコードを書かなければならないってことはない。ただ、「実装したコード」と「テストコード」の時間を空けると腰が重くなるからダメ。
    • ホントその通りで今後悔してるのは秘密。
    • IDからちょいとJOINして抜くコードは5分でかけるのに、テストコードは1時間かかるのがめんどくて・・・。SELECT文ってテストするのかなりめんどいじゃん・・・。でも、ダメ。書かないと未来が見えてこない。ホントに影響が無いんですと(僕が)言い切れる為には、テストコード重要。
  • MVCモデルのコアはModel。ここにバグがあったらまったく使えない。
    • テスト厨になったらあかん。時間は有限。致命的なバグになるDB操作とビジネスルールの担保ができなければ・・・。
    • コントローラー関係はテスト書くよりブレークポイント使えば良くねって思った。ブレイク〜ブレイク〜あなたのバグを〜。
  • カバレッジ率が高くても、条件間違えちゃったらバグよ。
    • ある程度テストケースが作れて回せるようになってきたらカバレッジ率を意識する。そうすると、不要な実装や通ってない箇所に気づき、潜在的なバグをなくすことができる。
  • アイデンティファイア重要
    • 同意。カラムを1個に絞る事と、検索条件に呼応してデータを抜くことは、似てるようで違う。これがあるとDB操作が楽。「楽々ERDレッスン」参照。下手な我流よりプロの流儀に沿ったほうが幸せなこと多い。
  • SQLとメソッドの粒度を1対1にする。
    • 同意。DB操作のメソッドと、その操作をビジネスルールに基づいて行う上位メソッドの区別をつけないと、テストしにくくなる。DB操作のメソッドが正しいから、ビジネスルールに沿った実装ができる。
  • SQLで計算するのは控えよう
    • countやsumを使うなって訳じゃないお。小計、税、合計の計算をSQLの中に書くなっていっているんだお!計算ロジックはビジネスロジックの1つとして考えるのだ。

参考書籍

経験ゼロでもできるプログラミング現場の単体テスト

経験ゼロでもできるプログラミング現場の単体テスト

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン重要。業務アプリ屋はこの本持ってないと損するよ。

中の人のTwitterアカウント

片桐 一宗 (nemuzuka) on Twitter

SQLを学習できるWebサービスを作りました。