今日も適当ダイアリー

PHP や Javascript や Symfony、BEAR.Sunday などのWeb周りのことを中心に。それ以外のことも気まぐれに投稿します。

TDDBC Tokyo 1.7 for PHP に参加して #tddbc

8/21(日)にタイレルシステムズさんの TDDBC Tokyo 1.7 for PHP に参加してきました。
すでに3週間が経とうとしてますが、あの時感じた事や、今想う事をここに書いておきます。(なので、TDDのやり方やブートキャンプ部分については、今回は触れていません。。。)

なお、TDDBCについてのまとめ記事は主催者である @shishi4tw さんが書かれた記事が詳しいので、そちらをどうぞ。
It's just same as dust ahead of a wind: TDDBC Tokyo 1.7 for PHP を開催しました
http://shishithefool.blogspot.com/2011/08/tddbc-tokyo-17-for-php.html


今回のTDDBCの内容は大きく2つにわかれ、1つめは日本のTDD先駆者である @t_wada 氏によるTDD(BC)についての基調講演を中心とした(いわゆる普通の)勉強会の部分、2つめはTDDをペアプログラミングで実践してみるTDDBCのBCの部分です。

@t_wada 氏による基調講演では、TDDの前提から、基本的な事を丁寧に説明がありました。その中でも、TDDに限った話ではないのですが、そもそもエンジニアとしてどうあるべきか、という部分が心に刺さりました。
それは、エンジニアとしての自分にやましい部分を感じていたからだと思います。

良心のある開発者でいたい。
動く綺麗なコードを作りたい。

そう思いながら、そう出来ていない自分がいます。悩み、改善しなければ、と思いつつも、「スケジュールが…」とか、「うちの会社じゃ…」とか言って、先延ばしにする。見えないフリをしている。
そんなやましい自分に正面から向き合うように言われた気がしたのです。

完璧主義の呪い

「きれいなコード」、「動くコード」を書こうとした場合について、和田さんは以下のように説明されました。

良い設計を行おうとすると、設計から逃れることができない。
きれいな設計には終わりがない。
→いつまで経ってもコードが書き始められない
→でも、コードを書き始めて気付く事は非常に多い
→完璧な設計だと思って始めたら、全然完璧じゃない

また、「動かして学ぶことで学ぶ点が多い」ことも挙げて、「動くコード」を書くことを最初にやると「動くけど汚い」コードで止まってしまう。

そして、動くコードをきれいなコードにしていくことで、これらの問題を解決しよう、という実践的な試みが「TDD」である、と。
「きれいなコードにする事をあきらめない」ために、TDDの心として挙げれていたものが重要だと思ったので、以下に簡単にまとめます。(メモ書きですが)

一つずつ、少しずつ

大きな問題を、小さくすぐに達成可能な分解された問題の連続にする
大きな問題を制御可能に

一人ずつ仕留める

一対多を一対一の連続にすれば、負けることはない!

すばやくまわす

サイクルが速ければ速いほど開発が加速化される
1〜2分でテストコード、1分でコードを書いて、3分でリファクタリング、を目標にしてみたら?

サイクルのスピードを保ち続ける
開発が進んでくるとスピードが落ちがち。でも、様々なテクニックを駆使してそのスピードを維持!

自分が最初のユーザー

自分がテストコードを書く→自分の書くコードの最初のコードが自分自身になる
テストコードを書く=利用者視点に立てる

道具にこだわる

プロフェッショナルとして道具にこだわる
どれが一番効率的か
エディタ、IDE、そのほかのツール…

不安をテストに

不安に対してテストコードを書く
何を自分の手を止めるか→不安によるもの
テストの粒度はものによって異なる
getter/setterにテストコードは必要?→基本的には不要では?
不安なものは、不安を解消できるテストを書く

祈るのではダメ

機能追加・修正でバグは生まれないか?
→祈るのではダメ!
→日々のコーディングの中でテストコードを書く・整備すること

テストが命綱

必要な時にテストを書くでは遅い
→テストコードを書くモチベーションを保ち、日々書いていこう

TDDの真の目的は「健康」

  • 健康体のコード(無駄のない、引き締まった体を持ったコード)
  • 健康体のチーム
  • 健康体の自分

これらがあって、変化に柔軟に対応できるコード(プロジェクト)になる。
そして、テストを書くことで、不安を克服できる。

テストは目的ではなく手段、である。

  • 即座にフィードバックを得る
  • 書いたコードに自身を持つ
  • これから書くコードに自信を持つ

ためにテストを書き、リファクタリングできれいにすることで、「健康を維持」しよう。

私たちは完璧なプログラマーではない事を自覚し、その上で、プロフェッショナルであり続けるために、いろいろな事を学び、改善し続けなければならない、と深く感じた一日でした。

最後になりましたが、主催された @shishi4tw さん、講演された @t_wada さんを始めスタッフ・参加者の皆さん、本当にありがとうございました!

acts_as_professional !