え?お前なに?ブログなんてやってたん?と言われること請け合いなくらい久しぶりに書きます。
こんにちわ。
もういつだったっけ…?って感じなんだけど、とりあえず行ってきた!
んで、もう概要だーなんだーはもう @shishi4tw さん の http://shishithefool.blogspot.com/2011/08/tddbc-tokyo-17-for-php.html を見てもらった方が話が早いのですが、とりあえずメモったことを箇条書き。
概要
現代ソフトウェア開発の三本柱
- バージョン管理
- 一番大事
- ブランチタグの使い方を覚える → セーブポイントを作る
- テスティング
- 自動化
- 人間は単純作業/繰り返し作業に弱い
- 機械はその逆
- 人間と機械のそれぞれの特徴を生かす
テストとは
そもそも
- 人によって、定義/粒度がバラバラ
- 単体テスト、結合テスト…etc
- テストを範囲で区切るには限界がある
テスト再分類のための視点を探す
- そもそも誰の為のテストなのか
- 開発者が開発促進のために
- 顧客が進捗確認のために
- 品質保証担当者(QA)が品質保証のために
TDD
動作するきれいなコードへ
- 昔はきれいな設計からきれいなコードが生成されると思われてきた
- そもそもよい設計とは?
- もっとよい設計があるのではないか…?
- つきつめるとキリがない、おわらない
- 完璧主義の呪い
- 開発(コーディング)し始めて気づくことが多い
- これがソフトウェア開発の特徴
- そもそもよい設計とは?
- 従ってまず開発を押し進める
- だけどこのまま開発を進めると動くけど汚いソースが大量生産
- ソースをきれいにすることをあきらめない
- そこで生まれたTDD
TDDのサイクル
- テストを書く→当然うごくはずがない(red)
- 目的のコードを書く
- テストを成功させる(green)
- リファクタリングする
- レッドになったらテスト通るまでリファクタリングする
- リファクタリングするということがTDDの肝
TDDの大事な所
- 問題を小さく、分解するということが大事
- 1体多⇒1対1の連続にする
- すばやくTDDのサイクルを回す
- はやければ早いほどいい
- テストコード⇒目的コード書く⇒リファクタリングするというのを最速のスピードでやる
- そのため、タスクを細分化する
- はやければ早いほどいい
- 自分が最初のユーザ
- 利用者の視点でテストコードを書く
- 自分でドッグフードを食べる的な
- 道具にこだわる
- 最速でコードを書くために必要なツールを揃える
- 不安をテストに
- getter/setterのようなものじゃなく、内部的なアルゴリズム、プログラマとして不安な箇所について手厚くテストを書く
- 緊急の時も
- テストコードを量産することでセーフティネットができる
なぜTDDをするか
- 自分たちは完璧なプログラマではないから
テストを書くことが目的ではない
最大の理由は心理的なもの
- 即座にフィードバックを得る
- 書いたコードに自信を持つため
- これから書くコードに自信を持つため
真の目的は健康
- ソースコードの上の健康
- 無駄のない健康体のコード
- 人間の肉体の健康
- 変化に対応できるのは健康体のチーム
- 不安の克服/健康の維持
事例について
TDDの導入効果
- 品質はかなりあがる
- バグ発生率が6~7割り減った事例も
- 当然コードの実装時間は当然増える
- 但しアンケート結果では…
- デバックの工数を減らすと感じた
- バグが圧倒的に減るので、開発工数が相対的に減る
- デバックは予想ありきなので時間が読めない
- 要求を洗練されると感じた
- コードの品質があがると感じた
- 開発工数を減らすと感じた
- デバックの工数を減らすと感じた
応用
テストのないコードがたくさんある。どうしたらいいのか
- レガシーコード改善ガイド (Object Oriented SELECTION)
クチコミを見る- 「テストがないソースに対してどうやって立ち向かえばいいか」の一つの解
既にデータの入ったデータがある
大事なこと!
- TDDはスキル
- 習得可能なのであきらめない
- 迷ったら写経する
- TDDと黄金の回転
- act_as_professional!
- メソッドの名前は日本語で
- わかりやすいから
- 仮実装大事
- 本来かえってくる値を定数で返すようにして強制的に正しい値を返すようにする
- テストプログラム自体は正しいというようにする
- 三角測量
- テストAとテストBが両方とも通る
- 明白な実装
- 答えが明確ならば三角測量をせずに一気に実装に向かう
メモったことまだあるんだけど、とりあえずこんな所で。
午後にペアプロもやってみました。
またペアプロとかやるときって人に教える/教わりながらやるからちゃんとやるよね。心理的に。
var_dumpするくらいならテストするといわれ意外だった…
最後に主催された @shishi4tw さん、講演して頂いた @t_wada さんを始め、会場を提供して頂いたタイレルシステムズさん、スタッフの皆さま、参加者の皆さま、本当にありがとうございました!
そして、懇親会楽しかったです!
P.S.
ちょっとづつ始めた奮闘記はまた今後…