UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Test】TDDの定義の話

Kent Beck氏がTDDの定義を改めて明確化した文章をt-wadaさんが翻訳した記事

t-wada.hatenablog.jp

内容としては、Kent Beck氏がTDDの本来の意味や定義が弱まって伝わっている(t-wadaさんは「意味の希薄化」と書かれている)ことが残念なので、正しく広まってほしいため改めて定義するというものだった

TDDの定義は以下

  1. テストリストを書く
  2. テストコードを書いてテストが失敗することを確認する(1つずつ)
  3. プロダクトコードを変更しテストを成功させる(その過程で気づいたことはテストリストに追加する)
  4. 必要に応じてリファクタリングを行い、実装の設計を改善する
  5. テストリストが空になるまでステップ2に戻って繰り返す

私はほとんど認識齟齬はなかったが、いくつかはやりがちなものがあった

例えば、

  • 3.でテスト対象を実際に動かしたときの値をコピーして、テストコードの中の期待値にペーストしてしまうこと
    →たまにAPIの結果で分かりきったjsonの構造を手で作るのが大変すぎると感じた時にやってしまうことがある
  • 4.で必要以上にリファクタリングしてしまうこと
    →Kent Beck氏も言っているが、コードの整理整頓は気持ちよくついやってしまうことがある

t-wadaさんのご意見の中で、言葉の定義も誤解している人がいると書かれていて

テストファーストなのか、開発者テストなのか、自動テストなのか、はちゃんと区別して使うべきというのはそうだと感じた