TDDBC(TDD Boot Camp)仙台02に参加してきた

イベント案内 | 2012-08-11 (土) TDDBC(TDD Boot Camp)仙台02 - 東北デベロッパーズコミュニティ(TDC)
TDD Boot Camp(TDDBC) - TDDBC仙台02
TDDBC仙台02 #tddbc - Togetter


またの名を「ジョジョ駆動勉強会」。だいたい1年前の2011/07/02に第1回が開催されたのだけれど,去年は超絶多忙中につき基調講演しか参加できなかったので,そのリベンジも兼ねて参加してきた。一般参加でって後ろ髪を引かれたけど,いろいろ知りたいことがあったので無謀にもTA(Teaching Assistant)枠で参加してきた。


主催の id:nnasaki さんはじめ,遠方からわざわざ参加頂いた [twitter:@t_wada]さん,[twitter:@yujiorama]さん,[twitter:@tosikawa]さん,おつかれさまでした&ありがとうございました。
お盆時期で少人数だったにも関わらず非常に盛り上がったのは,講師である和田さんのタレント性やカリスマ性によるところが大きいなと実感する1日でありました。


ちなみに,わたしはTA兼タイムキーパー役でしたので,死蔵品のTAPE TIMERを小脇に抱えて参加しました。



基調講演:現代的なソフトウェア開発の三本柱

3つの柱の男...ではなく,以下の3つのこと。

  • バージョン管理
  • テスティング
  • 自動化

実は優劣があり,一番大事なのは「バージョン管理」だそうです。三脚イスのメメタァメタファで説明していたけど,なんとなく古代インドの宇宙観を類推してみたり(ただ,これだと数が合わない。
古代インドの宇宙観ペーパークラフト PDFランド 望月印刷


「バージョン管理が大事」なのはごもっともでも「バージョン管理をしないのは,ロールプレイングゲームで 一回もセーブせずクリアしろといっているようなもの」と聞くと,思わず減らず口を叩いてしまうのは,わたしの悪いクセ。


基調講演:そこここで出てくるジョジョネタ

杜王町の空気がそうさせるのか,いつしかテスト駆動からジョジョ駆動の流れに...。
「動作する/キレイな/コードのゴール」を見ては,


「黄金の回転」と聞けば,


Dog Foodingの話で「開発する側から利用する側にモードを替える」と聞いたそばから,


基調講演:TDDの真の目的は『健康』

6月に行われたレッツゴーデベロッパー THE NEXTで,継続的デリバリーの話したとき「これをやったら誰が幸せになる?」という問いの「(われわれが)深夜や土日に出勤しないで済むように」という回答とかぶる。
「健康になろう」って,いきなり怪しげなセミナー風になるけど,そもそもよく聞く「生産性ガー」とか「高品質ガー」だって,十分宗教めいたキーワードだよなと。それならば「作っているソフトウェア」も「作っている人たち」も総じて「健康になろう」というのは良い目的だと思う(「生産性/品質」系は,作り手に対する配慮がない。


以下はお約束です。


ペアプロのデモンストレーション

個人的に見てみたかった事もあり,さっくりハメてしまって申し訳ないです。が,しかし,Eclipseワークスペースを見て,実はやる気満々だったのを俺は見逃さなかったw > [twitter:@i_takehiro]


ペアプロのデモは,井上さん,和田さんの豪華ペアで,EclipseJava/JUnit4でFizzBuzzを実施。テストメソッド名に躊躇せず日本語を使うのを見て,「やっぱ日本語よねー」とつぶやいたところ,思いがけずるいもさんの闇を照らしてしまったみたい。


かくゆう,わたしも「テストメソッド名は日本語派」ですが,仕事では「testCase01_02()」みたいなテストコードを暖かい目で見守っております。

ブートキャンプ実施

課題は「飲み物自動販売機 Ver 2.0。基本2名1組みで6チーム編成。使用言語は,Java, Ruby, Python, Cの4種。
開発環境とかの内訳はこんな感じ。

#1 Java Eclipse JUnit4 hamcrest使用
#2 Java Eclipse JUnit4 AmaterasUML使用
#3 Java Eclipse Junit4  
#4 Ruby emacs rspec github使用
#5 Python vim unittest  
#6 C Visual C++ cunit  

JavaEclipse人気は揺るぎないですね。全員,JUnit4を使ってたけれど,hamcrest使っていたのは1組みだけで,他は assertEquals() 系だった。まあ,JUnit4の情報ってほとんど無いから,そうなるよね。しかし,それも当分の辛抱で解決しそうなふいんき


軽量言語組(Ruby/Python)は両方ともテキストエディタだったけど,IDE使う方が珍しいか。ただRuby組が一方がvim使いで,もう一方が非vim使いだったので間を取ってemacsにしたってのがユニークだった。vim使いな私としては,


と思ってみたり。:-)


それぞれのチームを見て回って思ったのは,やはり「バージョン管理は大事」と言うこと。ほとんどの人たちがバージョン管理せず課題を進めたり,リファクタリングを行ったりするのを傍で見てて,不安というか,なんとも居心地の悪い感じがした。それとテストのカバレッジ見れないのも,なんかこうスッキリしないつうかなんつうか。:-)
この辺は,開発環境の基本セットとか基礎操作とかの話で,辺にちょっかいかけてリズムをくずしても何なので,じーっとしてたけど,できたら,この辺りのテコ入れからやりたいと思った(なにより,Eclipseをよく知らないから口出せなかったってのがホントウ。


コードレビューにおいては,デモの派手さってのがあって,やってる人にはまったくもって余計な話なのだけれど「コンソールベースのテストランナーは地味だなー」と思ってみたり。:-)
あとテストコード,プロダクトコード共に「読みやすい」と思ったのはRubyPythonは意外とテストコードがJUnit3的だったのが別な意味で新鮮だった。Javaは,やっぱりJavaだなーと(Cは,そっとしといてあげてッ!

模範解答として和田さんがJavaScriptで作ったのをデモしてたけど,みんなが辿り着いてない「『投入した硬貨・紙幣にわけて』投入金額の総計を払い戻す」をサックリ実装して,参加者をビビらしてたのが面白かった。


ちなみに,和田さんが使ったテストライブラリはQUnitとのこと。

所感

みんながペアプロしながら演習しているのを見てて「ああ,やっぱりプログラミングも設計の一部なんだな」と改めて実感した。演習を進めていく過程での設計判断やその結果をどう書き残していくか,はそっくり抜け落ちていたけれど,それは参加した人それぞれの宿題って事なんだろな。そしてウォータフォール型とTDDの相性の悪さよw(動くかどうかも分からないのに,プログラム設計書を事前作成するって,ある意味でおめでたい開発プロセスだよなと,しみじみ思う。


それとTAやるからには,せめて技評さんとこの「[動画で解説]和田卓人の“テスト駆動開発”講座」は読んでおくべきだったなと反省しております。とは言え,TDDBCの感じはわかったので,自主練や野良TDDBCなんかは出来そう。:-)


和田さんや井上さんがすらすらコードを書いているのを見て,仕事でプログラム書く機会が減ってきたとしても,常に素振りはしとかないとなって思った。いい加減,Javaだけじゃなくて他の言語(とりあえずGroovy)でもソラで書けるようになっとこう(なにより,自分で課題やっとかないと。

さいごに

TDDBC仙台02はジョジョで始まり,ジョジョで終わる。