テストを書くことを文化にするために、テスト駆動開発合宿をやった
テストを書くことを文化にするために、テスト駆動開発合宿をやった
テストを普及したく休日を割いて開発合宿をやってみた。
動機
テストを書くことの重要性はさんざん主張してきた。テスト自動化の環境も作った。けどほとんどのメンバーはテストを1つも書かなかった。彼らのいい分では、テストは重要なことは分かったけど、どうやればいいか分からないとのこと。
そこで1日割いて、テスト駆動開発を実際にやってみる合宿をやった。
内容
- なぜテストを書くのか by @frontainer
- テストを書いてテストの利点を実際に体験してみる https://github.com/TanUkkii007/daily-lives-with-tdd
- テストがすでに書いてある状況で、テストを通しながらアプリケーションをつくる https://github.com/TanUkkii007/tddworkshop
テストを書くことを文化にするためには?
当日メンターをやっていただいた@frontainer先生に、合宿の計画などのフィードバックをもらった。
@frontainer先生が人に教えるときに実践しているステップを教えてくれた。
- 重要性を説く(把握)
- 体感(失敗含む)する(体験)
- 一度振り返り、反省する(思考)
- 再度少しレベルを上げて挑戦する(復習)
- 実ケースにあるような無茶ぶりをする(実践)
- ここまでの経験を活かして無事対応できる(成功体験)
特に6番へ全員が至るかどうかが文化となるか否かのラインだとのこと。
2 の”体感(失敗含む)する”が今まで足りていなかったもの。2-5までを合宿でカーバーした。
1. なぜテストを書くのか by @frontainer
最初に@frontainer先生の「なぜテストを書くのか」という内容をディスカッション。
テストの種類を挙げて見よう
など。
現時点で社内でやっているテストは何テスト?
- (手動の)ユニットテスト
- モンキーテスト
会社全体でテストにどれぐらいコストはらっている?
開発者がテストに費やす時間 × 開発者の単価 + デバッガーがテストに費やす時間 × デバッガーの単価
ただし誰も把握してない テストコードを書くことを批判する人は、テストコードを書くコストしか見てない。組織全体のテストコストを最適化しよう。
自分のテストのコストは?
普段の開発でテストしてる時間の比率: 3-4割
開発人生の3-4割を占めるテストをおろそかにしていいの?
そのテストは誰のため?
- ユニットテスト -> 自分のため
テストしないのは無防備、自分を守れてないということ
どのぐらいテストを書くの?
ユニットテストは自分のため -> じゃあ自分の生活を守れる粒度で書く
テストの学習コスト
- jasmineだとtoBeとtoEqualという2つの関数で8割は完結
- たった2つの関数を覚えるだけ
- 難しいことはあとで
自動化しよう
テスト仕様書のスプレッドシートにテスト項目を埋めるのも手段の1つ テストコードを書いて自動化するのとどっちがいい?
ここでみんなのテストに対するモチベーションはMaxに。
2. テストを書いてテストの利点を実際に体験してみる
資料: https://github.com/TanUkkii007/daily-lives-with-tdd
- 重要性を説く(把握)
- 体感(失敗含む)する(体験)
に相当する内容。
この資料の06と07の間に「郵便番号7桁ハイフン含むをチェックする関数を作り、テストする」という課題を出す。4. 再度少しレベルを上げて挑戦する(復習)に相当。
関数の実装もひとそれぞれ違ったけど、テスト項目も人それぞれで結構面白かった。
終わったあとの各自の感想:
- テストコードを書いた方が情報量が多い
- テストコードはもっと難しいと思っていたけど、意外と簡単
- テストはコードだから人と共有できてよい
- 簡単にいろんな入力を与えることができる
- リファクタリングもやりやすい
3.テストがすでに書いてある状況で、テストを通しながらアプリケーションをつくる
資料: https://github.com/TanUkkii007/tddworkshop
5. 実ケースにあるような無茶ぶりをする(実践)に相当。
定番のTodoリストを作ってもらった。内容は少し難しめ。2人1組のチームで、2時間ぐらいで65あるテストのうち、20-60のテストを通していた。
全員で実践し、普及し、必要不可欠なものへ
テストを書くことの重要性も、やり方も分かってくれた。あとは6. 「ここまでの経験を活かして無事対応できる(成功体験)」を残すのみだ。合宿に参加してくれたメンバーなら、実際に業務で実践し、ものにしていってくれるはず。
残念ながら参加者はメンバーの全員ではなかった。でも参加してくれたメンバーならもうテストを教えられるはず。残りのメンバーに普及していって欲しい。文化は1人では成らず。テストが文化になるには、君たちの力が必要だ。