テストを書くことを文化にするために、テスト駆動開発合宿をやった

テストを書くことを文化にするために、テスト駆動開発合宿をやった

テストを普及したく休日を割いて開発合宿をやってみた。

動機

テストを書くことの重要性はさんざん主張してきた。テスト自動化の環境も作った。けどほとんどのメンバーはテストを1つも書かなかった。彼らのいい分では、テストは重要なことは分かったけど、どうやればいいか分からないとのこと。

そこで1日割いて、テスト駆動開発を実際にやってみる合宿をやった。

内容

  1. なぜテストを書くのか by @frontainer
  2. テストを書いてテストの利点を実際に体験してみる https://github.com/TanUkkii007/daily-lives-with-tdd
  3. テストがすでに書いてある状況で、テストを通しながらアプリケーションをつくる https://github.com/TanUkkii007/tddworkshop

テストを書くことを文化にするためには?

当日メンターをやっていただいた@frontainer先生に、合宿の計画などのフィードバックをもらった。

@frontainer先生が人に教えるときに実践しているステップを教えてくれた。

  1. 重要性を説く(把握)
  2. 体感(失敗含む)する(体験)
  3. 一度振り返り、反省する(思考)
  4. 再度少しレベルを上げて挑戦する(復習)
  5. 実ケースにあるような無茶ぶりをする(実践)
  6. ここまでの経験を活かして無事対応できる(成功体験)

特に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

  1. 重要性を説く(把握)
  2. 体感(失敗含む)する(体験)

に相当する内容。

この資料の06と07の間に「郵便番号7桁ハイフン含むをチェックする関数を作り、テストする」という課題を出す。4. 再度少しレベルを上げて挑戦する(復習)に相当。

関数の実装もひとそれぞれ違ったけど、テスト項目も人それぞれで結構面白かった。

終わったあとの各自の感想:

  • テストコードを書いた方が情報量が多い
  • テストコードはもっと難しいと思っていたけど、意外と簡単
  • テストはコードだから人と共有できてよい
  • 簡単にいろんな入力を与えることができる
  • リファクタリングもやりやすい

3.テストがすでに書いてある状況で、テストを通しながらアプリケーションをつくる

資料: https://github.com/TanUkkii007/tddworkshop

 5. 実ケースにあるような無茶ぶりをする(実践)に相当。

定番のTodoリストを作ってもらった。内容は少し難しめ。2人1組のチームで、2時間ぐらいで65あるテストのうち、20-60のテストを通していた。

全員で実践し、普及し、必要不可欠なものへ

テストを書くことの重要性も、やり方も分かってくれた。あとは6. 「ここまでの経験を活かして無事対応できる(成功体験)」を残すのみだ。合宿に参加してくれたメンバーなら、実際に業務で実践し、ものにしていってくれるはず。

残念ながら参加者はメンバーの全員ではなかった。でも参加してくれたメンバーならもうテストを教えられるはず。残りのメンバーに普及していって欲しい。文化は1人では成らず。テストが文化になるには、君たちの力が必要だ。