周りに教えてくれる人が居なかった為、TDDというものを1から勉強しましたが、途中何度も躓きました
今となってはそれなりにTDDこなせるようになったので、何故躓いたか、理由を分析してみました
誰かに教える際の参考にしてくれたら幸いです
TDDはそもそも難しい
本来、TDDというのは難しい技術です
何故ならば、前提条件にテストファーストを理解する必要性があると、私は思うからです
テストファーストを理解する為には、前提条件にテストコードの理解が必要でしょう
テストコードを理解する為には、テストを理解する必要性があります
テストファースト、テストコード、テストを理解せずにTDDを理解させるのは、言ってしまえば行列をベクトルも三角関数も三角比もわからないような人間に、いきなり覚えろって言うようなものではないでしょうか。つまり初めから無茶なのです
そもそもなんでテストをするか
端的に言うと、人間は間違えるからです
しかし、プログラミングで間違えた事のない人にはなかなか理解しにくい分野でもあります
その場合は、一度失敗してから理解するのが一番手っ取り早いでしょう
適当に競プロをやればなんとなくテスト出力が必要な理由が解ってくる筈です。間違えないで出来た天才肌の方はこんな記事なんて読まずにレッドコーダー辺り挑戦してみてはいかがでしょうか
テストコードの意味
テストコードは、要するにテストの自動化です
TDDを独学する際に、ここで躓く人も多いと思われます
それは当然で、何故ならば短期間だけ見るならテストコード書くより人力テストをした方が楽だからです
しかし、長い目で見ると自動化した方が何十倍も楽になります。これがテストコードのメリットだと私は思います
テストを何度も手動で実行するより、コードにテストしてもらった方が早いんじゃないか、という所に自力で到着するのは至難の業でしょう
ここは、printデバッグを覚えて貰ってから、試しにテストコードを書いてみてからでも遅くないと思います
少なくとも、私はそれでテストファーストを理解しました
テストファーストの意味
テストコードを書いてる途中にある人は思いました。「テストを先に書いておけば、それに通るコード書くだけでいいんじゃね?」と
実際に試してみたら上手く行ったので、この開発手法は強烈な支持を集めました
実際にテストから先に書いてみて、それに通るコードを書いてみるのが手っ取り早いです
何せ現場で生まれた技術なので、実際に使ってみないと効力がなかなか発揮できないからです
テスト駆動開発について
実は、私には人に説明出来る程TDDの理解がないので、別の記事を当たって頂ければ幸いです
幸い、TDDだけなら色々な本で取り上げられているので、そちらを読む事をおすすめします
ただ、私の経験として以下のものがあります
- 複雑なロジックを採用する場合は、レッド→グリーン→リファクタリング のサイクルが肝心になる
- 複雑なロジックを採用しない場合は要らないかもしれない
最後に
私もTDDを深く理解しているわけではないので間違いは多いと思います。その為、ここが間違っていると指摘してくれる人が居たら幸いです