昨年に続きTDDBC仙台に参加してきました。
@t_wadaさん、スタッフ、および参加者の皆さん、どうもありがとうございました。
当日のtogetter
TDDBC仙台 4th - Togetterまとめ
基調講演
@t_wadaさんによる基調講演。
講演資料は後日SlideShareにアップするとの事。
TDDの目標
動作するキレイなコードがTDDの目標。
テストコードが存在することで、改善が可能になる。
ソフトウェア工学は予測性が低い。コードを書き始めることで初めて問題に気がつくことが多い。
なので、完璧な設計をしてから実装を始めるのではなく、とりあえず実装し、きれいなコードにするのはその後にする。TDDはその手助けをしてくれる。
TDDのサイクル
- 目標を示すテストコードを書く
- テストを成功させるプロダクションコードを書く
- プロダクションコードをリファクタリングする
このサイクルが重要。
納期等の理由でリファクタリングされなくなる事があるけどちゃんとやりましょう。
テストコードのメンテナンスコストが高いと、「テストコード修正が大変だからプロダクションコードの改造はしない」という本末転倒な事になる。
なので、テストコードにもリファクタリングが必要。
プロダクションコードと同じく、テストコードもDRYにする。コピペしまくったりとかやってはいけない。
TDDを導入することで、実装時間は2割弱増えるが、その後の不具合検出数が減るため、トータルでの開発工数は減る。
TDDの対象範囲
テストの目的は対象によって異なる。
TDDはDeveloper Testing。開発者の開発促進が目的。
TDDの"T"はTestというよりCheckingに近い。(TDDはプロダクションコードが動作する事の確認でしかないため)
要件のテストとして、BDDという方法も出て来ているが、RSpecを使用したBDDとScenarioを使用したBDDの二派に別れているのが現状。
テストを動かすだけでは品質は上がらない。テストは品質を明確にするだけ。
品質を高めるのはリファクタリング。
体重計に乗っただけでは体重は減らないのと同じ。
なぜTDDをするか
「動いているコードは触るな」とは今は言えない。
コードを触らなくても周り(OS、フレームワーク等)が変わっていく。直さざるを得ない。
何もしなければコードは腐っていく。
テストコードがあることで、コードへのフィードバックが即座に得られ、書いたコード、これから書くコードに自信が持てる。
TDDライブデモ
@135yshrさんと@nnasakiさんによるgo言語によるライブデモ。
go言語は全く知らなかったけど、@135yshrさんのIDE(Sublime text)の使いこなしに感心したり、「テストコード書くのにコピペは使わないようにしてる」の発言になるほどと思ったりしながら見させて頂きました。
昼飯
はらこめし。うま。
ペアプロ
昨年に続きJavaで参加。
Pythonやりたかったけどペア居なかった。。
課題と自分らのチームで実装したソース
QAとか
和田さんへの質問と回答。
Q) 基調講演の中で、プロダクションコードとテストコードの比率が同じになるような例が出ていたが、テストコードはそんなに減らせるものなのか?
A) プロダクションコードとテストコードの比率が1:1になるようにリファクタリングし、プロダクションコードとテストコードの比率が1:1~1:2の範囲に収まるようにする。
この比率を超えるようならテストコードの見直しが必要。
Q) テストコードで、Mockは使うべきか、使わないべきか?
A) Mockは使う派と使わない派がいるが、@t_wadaさんはMock使わない派。
実物のコードが使えるなら、出来るだけ実物を使うようにしている。実物のコードを使うことで時間がかかるのは仕方ないと考えている。
最後に
テスト書きましょう。