Rubyが好きなプログラマーの日記。日々の生活、開発に関するメモとか考えとか。
タイトルは釣りです。釣れたのかわかりませんが。
昨日はTDD Boot Camp Tokyoが行われたということで、申し込みに乗り遅れて参加できなかったので、色々とテストについて考えてみた。
自分が真面目にテストコードを書くようになったのは、東京Ruby会議03の@t_wadaさんのワークショップに参加してからだ。今でもこのワークショップで得た感動を覚えている。簡単なハンズオンではあるが、テストが開発を駆動するところを実感できた。それまで、テストコードは書きたくても
といった漠然としたリスクを感じていたので、利点を感じつつも、テスト駆動開発をやる気が起きていなかった。 ところが、先のワークショップで、利点の方が大きいし、むしろこの不安はほとんど起き得ないと感じた。そして、今では実際にその不安は無い。
テストの分も書かなければならないので、コード量は増えるかもしれない。だが、これが単純に開発期間を伸ばすかというと、そうではない。 ある機能を開発をする時、開発者が行うことは単にコードを書くだけではなく、その前に
という2つの工程があり、そして、それをコードで表現すると思う。テストコードを書くということは、これら2つの前工程に相当する。
テスト駆動開発をやり始めの頃は、この過程に時間がかかるかもしれない。自分はそうだった。けれど、これはコード量が増えたからではなく、それまで頭のなかで仕様を理解する上で使っていた言葉が、自然言語からプログラミング言語に変わったためだ。本質的な仕様理解に時間がかかるようになったのではなく、その表現方法が変わったので、新しい表現方法に慣れさえすればいい。
つまり、TDD導入直後は学習コストの分だけ増えるけど、そのリスクは継続することで抑えることができる。
レビュワーは、変更されたコード、新たに追加されたコードをレビューする。レビューする観点はチームやプロジェクトに依るのが、TDDを導入した直後はテストコードが加わった分だけ、レビュー対象のコード量は増える。
レビュワーがやることは、開発者が書いたコードやドキュメントから
そして、レビューすることだと思う。テストコードはこの工程を助ける。 テストコードには、開発者が理解した仕様が、「どういう時に(前提条件)、どうなっているべき(期待値)」という形で書かれているので、理解しやすい。 しかし、以前はそれが異なる言語、つまり自然言語だったのがプログラミング言語に変わっているので、TDD導入直後は時間がかかる。
結局、開発の時間が増えるかもしれない、というのと同じことで、学習コストによって時間は一時的に増えるが、継続することで抑えることができる。
上の2つのリスクは解消可能なので、利点の方が自然と大きくなる。 ドキュメントや口頭の自然言語でやりとりしていた仕様理解を、実行可能であるプログラミング言語にすることで色々捗る。
まとまりのない文章になってしまったけど、要するにテスト駆動で開発に取り組まない理由は無いと思うので、みなさんテストを書いてハッピーエンジニアライフを送りましょう。
以前からFacebookとかでちらほら見ていて興味があったので、Scrum Master Night に行ってきました。
スクラムマスターが集まって、それぞれが持ってる疑問や悩み事を、会社の壁を超えて、オープンにディスカッションするといったイベント。ファシリテーターは、その場で決め、テーマも会場から応募・投票し、最終的には各ファシリテーターが決めるという、参加者主導型で面白かった。
で、折角なので、ファシリテーターに立候補してディスカッションしてきました。
選んだテーマは、
ということで、普段聞けない他社での評価とか、それに対してスクラムってどういう位置づけなのか、といったところで議論した。
ファシリテーターと言いつつ、「面白い話だ」とウンウンしながら、一番楽しんでいる聴衆であったような気がする。
議論したことできになる所を以下にメモ。
なんだかまとまりのない発散した議論になってしまいましたが、個人では考えるのが難しいところが、色々な視点(評価者、評価対象者であったり、SMだけでなくアジャイルコーチがいたり)の意見が聞けたので、非常に面白かった。
その後の懇親会でも、議論は絶えず、
みたいな話をした。
次回は8月下旬から9月上旬に開催するそうなので、SMの方もそうで無い方も都合が付く方は、日頃の悩みを持って行ってみると良いと思います。