2011年12月 6日 0:00

実録!TDD風景 #TddAdventJp

TDD Advent Calendar jp: 2011 の6日目で @shuji_w6e さんのエントリの次です。

他の人のエントリと比べると内容がかなりぶっとんでいるのであしからず(笑)

TDDを学ぶ上で何が一番いいなぁと考えたのですが、実際にコーディングしている風景を見るのがいいかと思い動画を撮ってみました。既出かどうかはシラネ


今回はTDDBC横浜のお題でTDDしてみました(言語はJava)

コード

本来なら課題4までやっていたのですが動画が途中で壊れていたので課題2まで収録しています。(githubには課題4まで収録)

不自然に間が空いているのは途中何度もサブPCでググったりしてるからです。一発撮り無編集なのであしからず。
実際のコーディング風景からTDDのリズムを感じ取ってもらえれば幸いです。

Quick JUnitではなくS2JUnit4 Pluginを使っていますが、使い方はだいたい一緒です。仕事がSeasar2中心なのでその流れでWinにはS2JUnit Pluginを入れています。(MacにはQuick JUnitだけどw)

キー入力表示には拙作の「見えるキーボード」を利用しています。


よく使うEclipseのショートカット(Macの人はCtrlをCommandに読み替えてください)

  • Ctrl + Space: コード補完
    • 「tes」まで入れるとテストメソッドのテンプレートが作れる
    • カーソル位置がそのままだとJUnit3用のテストメソッド(testXxxxメソッド)
    • カーソルを1つ上に移動させるとJUnit4用のテストメソッド(@Testメソッド)
  • Ctrl + 1: クイックフィックス。その場に応じた補完ができる
    • エラーや警告があればそれを解決
    • テストファーストで先にテストケースだけ作り、必要なメソッドがない状態でコンパイルエラーにしておいた状態からメソッドを作るのは日常茶飯事
    • メソッドの戻り値をローカル変数やフィールド変数に代入
    • とにかくいろいろできるすぎるのでとりあえず困ったらCtrl + 1しておくと吉
  • Ctrl + Shift + O: インポートの編成。足りないimport文や余分なimport文の整理ができる
  • Alt + Shift + R: クラス名、メソッド名、変数名などの変更。
    • 直接参照している箇所はもとより、Javadocの中も全部まとめて変更できるので超便利
    • ただしリフレクションで参照してるのは無理なので、リファクタリングのことを考えるとリフレクションは極力使わない方がいい
  • Alt + Shift + L: 選択範囲をローカル変数に抽出
  • Alt + Shift + M: 選択範囲をメソッド抽出
  • Alt + Shift + I: インライン展開。ローカル変数抽出やメソッド抽出の逆
右クリック→リファクタリングは便利なコマンドが揃ってるので、一度全部使ってみてどんなことができるか確認してみるといいです。


以下はQuick JUnit or S2JUnit plugin専用(JavaでEclipseでTDDやる上ではどちらかは必須)

  • Ctrl + 0: テスト実行(テストメソッド内であればそのメソッドだけ、それ以外ならテストクラス全体)
  • Ctrl + 9: テスティングペアの移動。なければ新規作成ダイアログ

その他や詳しいショートカットはこちらが参考になります



自分がTDDをやり始めて1年くらい経つのでついでに雑感など。

そもそも自分の場合、初めからTDDをやろうとしてたわけじゃないです。
前のPJとかその前のPJとかでテストコードをほとんど書いてなくて苦労してた苦い経験があり、丁度新しいPJということで今度は何が何でもがっつりテストコードを書こうと勝手に決心したのが始まりです。

その頃はTDDという言葉は知っていても具体的にどんなことかは知らず、ただ闇雲にテストを書きやすい開発スタイルを追求していったら自然とTDDのRed→Green→Refactoringの黄金の回転らしきものが見についていました。

※たぶん同時期にリファクタリングやクリーンコードも読んでいたと思いますが、「テストコードのリファクタリング」という言葉を知らない時期に書いたテストコードはいい加減リファクタリングしたいです。(この間リファクタリングして1クラス4000行から3000行くらいには減ったけどw)

そして実際にTDD BootCampに参加し和田さんの講演を聞いたり実際にペアプロをやったりして、自分の開発スタイルがTDDであることを再認識し自信をもつ頃が出来ました。

5年後とか10年後とか先のことは分かりませんが、とりあえず現時点で自分に一番相性のいい開発スタイルはTDDなので飽きるまではこのスタイルで行くと思います。


まぁ、何が言いたいかと言うと

べ、べつに好きでTDDをやっているんじゃないんだからね!///

ということです(ぇー