コンピュータやソフトウェアのあれこれ@道民(&元道民)
TDDBC
TDD Boot Camp 札幌 2.3に参加しました。
12月 12th
12月10日に行われた、TDDBC札幌 2.3に参加しました。
今回はJavaで参加。
お題は「ボーリングのスコア計算」でした。
事前イメージがあった
今回は、お題を聞いて最初におぼろげに実装をイメージしていました。
実装がイメージしやすかった分、当日も取り組みやすかったなと感じました。
int score = new Game("omuko").bowling(1,2)
.bowling(3,4)
.bowling(5,2)
.bowling(6,2)
.bowling(8,0)
.bowling(9,0)
.bowling(6,4)
.bowling(2,3)
.bowling(1,1)
.bowling(5,2)
.score();
assertThat(score, is(68));
※スコアはだいたい普段の成績、残念。
イメージ通りにはいかない
当日のプログラムはこちら https://bitbucket.org/irasally/tddbc2.3
細かい部品から作っていったのですが、どうしても(Javaの言語の性質もあると思いますが)かっちり作ろう、という方向に流れがちでした。
たぶん、一番エラーチェックが多いチームだったと思う。
「クラスに状態を持たせすぎるとテストが大変」というのを身をもって体験した感じ。
でも、部品を作り込んでいた分、部品の組み合わせは思ったよりも楽だった。
この辺りのバランス感覚は、磨いていきたいなと思いました。
「まず、1本簡単な実装を最初から最後まで通す、細かいことは2週目に考える」
途中からその言葉を何回か言いながら開発を進めていきました。
手を動かしたくてたまらなかった
わりと、テストで方向性がつかみやすかったことと、取り組みやすいお題だったことで、
悩んで考える時間よりも、手を動かしてコードを書きたい時間が長かった。
「どうやってテストを書こうか…」と悩む時間が今までで一番少なかったように思いました。
TDDをやりながら開発速度が上がるというのはこういう経験なのかもしれない。
自分が体験して思ったことは
- IN/OUT、得たい結果がはっきりしているお題であること
- お題(取り組むべき相手)が技術的に自分の手に負えること
この二つが揃うと、TDDがとても楽しくなりますね。
特に2は、自分が技術力を上げれば上げるほど広がる幅なので、精進あるのみ!です。
次回も是非参加したいと思います。
主催者の@shuji_w6eさん、今回もありがとうございました!
TDD Boot Camp 札幌 2.2に参加しました
11月 9th
11月3日(木)に開催されたTDD Boot Camp 札幌 2.2に参加してきました。
最近はJavaの(頼りない)TAとして参加させていただくことが多かったのですが、今回は少人数でまったり、基本に立ち返るということで、異なる言語を選択しました。
そう、札幌名物、SmalltalkでのTDDBC参戦です。
TDDBCでSmalltalkに触れた皆様がことごとく感動されていたので一度やってみたかった・・・!
きっと、初めてSmalltalkをやる場所はTDDBCが良いに違いない。ということで思い切って参加。
すごく、面白かったです。
Squeakによる開発を行ったのですが、最初に一瞬で環境が構築できたことに感動。
そして、バージョン管理やデバッグ、テスト環境がSqueakにすべて詰まっていることに驚き。
TDDの内容としては「FizzBuzzの実装」から始まり、最後は「BuzzFib(5の倍数とフィボナッチ数列)の実装」を行いました。
最初はJavaのこんなコードを思い浮かべて
int[] input = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
StringBuilder result = new StringBuilder();
for(int i : input){
StringBuilder sb = new StringBuilder();
if(i%3 == 0) sb.append("Fizz");
if(i%5 == 0) sb.append("Buzz");
if(sb.length() == 0) sb.append(i);
result.append(sb.toString());
}
数のリストをループさせてそれぞれを判定するロジックを考えていたのだけど、考え方が違った。
「それぞれの数が、自分が何者なのかを判定できるようにする」
「外からは”自分が何者なのかを判定するように”というメッセージを送る」
という考え方でした。
それが、頭に入ってきた時の「!」という感覚はとても新鮮だった。
(数字の型自体の実装に何かを追加できるということも「!」でした)
@sumimさんに「メッセージを送る」という考え方であるということを、きっちり教え込んでいただいたおかげで、ひっかかることもなく、スムーズに(ゆっくりと)コードを書き進めることができました。
疑問をすぐにぶつけて解決することができる環境が、贅沢でとても幸せでした。
テストが通ることを確認しながら、ソースをどんどんリファクタリングしていって、
最初とは全く違う形になっていったのが、なんだろう、なんか、わくわくしました。
すごく純粋に、プログラミング楽しいなーと感じました。
コーディングや新しい言語や、色々なものに触れることができた貴重な時間でした。
主催者の@shuji_w6eさん、そして@sumimさん、貴重な時間を本当にありがとうございました!
[TDD][TDDBC] TDDBC 横浜に参加してきました
11月 8th
[TDD][TDDBC] TDD Boot Camp 札幌 2.2 を開催します #tddbc
10月 1st
[Java][Cucumber][ATDD][TDDBC] cuke4duke を使い Cucumber を Java で使う
9月 29th
TDD Boot Camp 札幌 2.1に参加しました
9月 29th
9月24日に行われたTDD Boot Camp 札幌 2.1に参加してきました。
当日の様子については@sue445さんによるまとめ – TDD BootCamp 札幌 2.1 #TDDBC があります。
今回もJavaチームのTAとして参加。
演習では「会議室の予約を管理するよくある社内システム」を構築するというのをslim3&GAEを使って行いました。
セッション等については他の方が書いていると思いますので、TAとして思った事を書いていきたいと思います。
反省点
いきなり、反省点から。
slim3というほぼ初体験のFWを使ったTDDBCだったにも関わらず、事前準備があまりできませんでした。
前日のJenkins勉強会の懇親会時点で、環境構築で戸惑っていた始末。
(なのに懇親会に行ったのか?・・・@sue445さんに懇親会でお会いできたからこその当日だったのです)
ミスリードはしないまでも、slim3を使った開発という面での技術的支援はあまりできなかったです。ごめんなさい。むしろ、slim3とGAEでバリバリ開発経験のある@t_hachinoheさんから学ぶ事が多かった!大変感謝しております。
翌週なんてどうなるかわからないから、時間のあるうちにできることをしておけ、と身をもって学びました。
TAとして伝えたかった事
今回は「実際の仕事で(時間的制約がある中で)どこを抜いて、どこは締めるのか」をチームプログラミングを通じて少しでも伝えられていたら良いなと思って演習を進めていました。
仕事には、期限があります。決められた時間の中でより良いもの、質の高いものを作っていく、そのために大事な事の一つとしてTDDという開発手法があります。そう思っています。
実際に1時間で1ユースケースをこなすのは時間が足りなすぎた。
完璧なロジックで、理想の形でTDDをやる(つまりはすべてのパターンのテストを作って開発していく)のはなかなか難しい。
で、目的を達成するために外してはいけないところはどこなのか。
今回のシステムの場合、短納期のプロジェクトだったらどうするか、そこで出した答えは
「GUIのテストは省く」
でした。まずはデータだな、と。
データの取得更新がシステムとして正しい事、これだけは確実にしておこう。
ロジックとして引数が美しくないところもありましたが「そこは次のイテレーションがあったらそこで改善する」と割り切りました。その分データ更新の部分はテストからきちんと書くことにしました。
全体の流れ、ユースケースを実現する事を意識して。
実際、本当に必要なテストも若干足りていなかった(バリデーションのパターンが足りなかったなど)のですが、そこについては
「ここは絶対にやっておいたほうがよいところ、間違いなくTODOコメントを残しておく事」
と適宜話していく感じで、外してはいけない部分は伝えられたかなと思います。
テストからインターフェースを考える、というあたりをチームメンバーが既に把握していたというのもあり、実践として、自分が仕事で得た経験を・・・共有できて・・・いたかな。
「時間的制約」を意識してもらえていたら良かったなと思います。
制約のある中できちんとしたものを作りたい
↓
短い時間の中でもTDDで開発したコードは動くという自信が持てる
↓
TDDで作っておけば少々コードがアレでもあとで安心してリファクタリングできる
↓
そもそも技術力が上がればもっとたくさんのコードがかけるよね
このどれかでも持ち帰っていただければ!
だんだん書いていて不安になってきました。これでよかったんだろうか。
たのしかったこと
みんなで考えながら、プログラミングをする事が純粋に楽しかったです。
いままでは「テスト駆動開発をしよう」という緊張感のようなものがメンバーにありましたが、今回はTDDを行う事は当たり前、自然な事であるという流れができていたような気がします。どうテストをするかという悩みもありましたが、それよりもその先をどうしようか「どう作っていこうか」という話し合いが多くできた事がとてもよかったです。
(準備をもっとしていればはまらなかった事もあったのですが)、みんなで頭をひねって考える時間、ソースを見ながらあーだこーだ言う時間がもてたのは「参加型」としてよかったことだったかもしれないな、なんて。
あと、自分のチーム懇親会参加率が100%だった。えへ。
終わったあとの鶏とビールは最高でした。

謝辞
毎回、素晴らしいスピード感でTDDBCを開催してくださる@shuji_w6eさん、今回も本当にありがとうございました。
JavaのTAとして事前準備をまかせっぱなしにしてしまい、さらに前日から(お酒の席にも関わらず)サポートいただいた@sue445さん、今回お会いできて本当によかったです。ありがとうございました。
そして、同じチームだった@hope_784さん、@onjiroさん、@t_hachinoheさん、当日撮った写真では大変疲れた様子でしたが、楽しんでいただけましたでしょうか。至らないところもたくさんありましたが、皆さんとプログラミングができて、私はとても楽しかったです!ありがとうございました。
次回はみっちり自分も鍛え上げられるtddbcにも参加してみたいです。
[TDD][TDDBC][JenkinsCI] TDDBC 札幌 2.1 開催しました
9月 26th
[Java][JenkinsCI][TDDBC][JavaFX] 札幌 Java カンファレンス 2011開催しました
7月 10th
[Java札幌][TDDBC][Planet]オープンソースカンファレンス北海道2011に参加しました
6月 14th
TDDBC札幌2.0-SP1に参加しました
6月 7th
おそらく、日曜日は使い物にならないだろうと思っていたので
当日まで参加を迷っていたのですが、意外に朝起きることができたので、TDDBC SP1に参加しました。
結果として参加してとてもよかったです。
午前の部
お昼ご飯直前に来ました。
着いたらまずは、レッドブル。
到着直後に@t_wadaさんからいただいたお言葉。
午後の部
お昼ご飯にうどんを食べて、ソフトクリームたべて、元気になってきました。
前日のソースコードを元に完成を目指そうと思っていたのですが、
Javaチームで3本柱を作ろうという話になり、みんなで開発。
やっぱりみんなでやる方がたのしいねー。
作っていたのはこれです。
https://bitbucket.org/irasally/orderedmap
チケット駆動でテストを作って、mercurialでバージョン管理して、Jenkinsで自動テスト。
(できあがってはいないです、はい。)
ペアプロ
お題が簡単だった分、余裕を持ってペアプロができました。
一緒にペアプロしてくれた@EnnuiRさん、ありがとうございました。
すごく楽しかったです!(あと、Macの使い方盗ませてもらいました)
mercurial
はじめて、mercurial(分散バージョン管理)をそれらしく使いました。
(gitやmercurialを触ったことはあったけどブランチ切ったことはなかった)
こんなに簡単にブランチ切れるのかー!
おお!おお!おお!と発見がたくさん。
やり方をじっくり教えてもらえたので、これから自分でも使うことができそうです。
チーム
「お題の実装を考える」ことに悩まずにすんだお題だったので、
その分、普段のペアプロやJenkinsやチケットや、
そういうノウハウを共有することに時間をさけました。
一人だとなかなか実体験として覚えられない&言語化する機会がないことなので、
午後の濃密な時間、とてもよかったです。
おやつ
マイチョコはもちろん持参したのですが、
@quicyさんからシュークリームの差し入れが!!!
生き返りましたありがとうございます。
全体を通して
普段流している部分をみっちりやり直せた、そして次につなげることができた二日間でした。
今の自分に足りないこと、意識しなければならないことが浮かんできました。
そして、もうすぐ1年になるのですが、「転職してよかったなー」と実感したりしました。
ほぼ一人で仕切りから実現まで運営してくださった@shuji_w6eさん、本当にお疲れさま&ありがとうございました。

