きっと方眼の理から逃れられないお前たちにも告げる!テストコードを手に入れるのだ! #TddAdventJP

タイトルは思いつきで意味は無いです。
本来ならこのネタタイトルだけで終わらせたい…



TDD Advent Calendar jp: 2011 : ATNDの19日目のエントリーです。
前日の18日目は[twitter:@megascus]さんのアジャイルにTDDしようとしてペアプロして失敗した話
翌日の20日目は[twitter:@haru01]さんのTesting と 私と 苦い出来事になります。

内容

諸々の事情で今年から社内SEに転職しました。
そんなこんなで元システム屋の同業者として他社の社内システム担当さんと話をする機会もありました。
その中で、Excelのマクロが出来ますと面接で言って入社したら、
システム担当にさせられた上に、
今までプログラミング経験がないのにVBAまで書くことになってしまったという、
よくありそうな経歴をお持ちの方とお会いすることとなり、
TDDをいろいろ教えてみたら喜んでもらえたよ。
という内容をgdgdっと書いてみます。


テスト?そんなもんはどうでもいい!
目の前の事を片づけるので精一杯!
って人にTDD(ぽい?)ことをオススメすることがあるときに
何か参考になればいいんですが…

社内システム担当さんの背景

地方の中小企業で社内システム担当と言っても本業の業務もしつつ
システムからインフラまでの世話をしてるような人です。
兼業社内SEさん的な仕事されています。


割り込みは当たり前で本業の繁忙期だと帳票1枚を作るだけで
複雑なものだと完成は1ヶ月後になったりということもある状況…


周囲も理解はあるのでその辺りは見越してお願いしてくれるけど、
緊急時はサビ残通り越してサビ徹になることも…


そういう状態がなんとかならないかと思ってる。


こんな前提です。

めんどくさい…もう確認駆動開発でいいや…

TDDを説明するときにテスト駆動開発という言葉を出すと途端に説明の難易度が上がることがよくあります。
このときも、テスト駆動開発という言葉と出したら

  • いや、テスト仕様書とか納品の書類に沢山くっついてきてるけど、出来てきたもんてこんなもんだよ?
  • まぁ仮にきちんとテストする方法があっても自分の状況じゃできないよ…

というような内容に対しての説明をしないといけなくなってしまいました。


現時点で品質の向上以前の段階の人にテストって言葉を一々説明するのは面倒臭いと思い、
「テストとは言ったけど、確認駆動開発って言ったほうがいいかな…」
などと口からでまかせをいいつつ、
「ここは後々ヤバいよな、とか、ここは難しいな、とかってところを確認しながら作っていくやり方です。」
と説明するといい具合に話を進められました。


まぁこの話の進め方だと本来のTDDとは違ってくるんですが、
まずは始めてもらうという意味ではハードルを下げられていいかなと思っています。

小さく、すばやく、段取りよく

当然ながら、Red、Green、Refactoringの黄金の三角形は意識してもらうのですが
TDDのリズムとか割り込み上等の職場では無理な上、緊急の場合はRedの状態で放置なんてことも起るわけで…


ということで、まずはTodoメモを作って、仕掛り、完了が把握できるようにしてもらった。
その上でペアプロぽく、実際に溜ってるモノを作業しながら説明入れながらなどと小一時間やってみたらなかなか好評でした。

TDDを意識すると、関数やプロシージャの大きさは小さくなります。
そうなると全体の見通しがよくなるので、割り込みから開放されたときに作業への復帰はすばやくなります。
その上、事前にTodoメモを作ること事前の段取りとなって作業自体の停滞が発生しにくくなります。


職場で体感してもらうと、テストコードを書くことについても、
コストが高いとは思わないで受け入れてもらえてよかったです。

で、何をどこまで確認すればいいの?

何を=テストコードが書けるすべて
どこまで=最低、関数レベルで重複が除去されてGreenな状態
と提示してみたら、
何を→コピペで使い廻してるコードはテストがいらないんじゃない?等
どこまで→コピペ云々…+Greenはともかく、急いでるときは重複あってもいいんじゃない?等


テストコードの有用性は理解してても全範囲でテストコードを書くのは面倒臭いようです…


一応、
ライブラリを整備しててコピペしてるのは修正が必要なコードだからでしょ?
→修正があるということはテストコードでの確認が必要
忙しいときの重複放置は修正が必要なときに重複全部を修正するコストや
修正の確認漏れがある場合のハマリどころを作るリスクが高くなりますよ。
→コストやリスクは早めに回収したほうがいいので重複までは除去しておきましょう。
と伝えはしましたが、楽天的にスルーしていたので…


テストコードがないところは"NoTest"
重複除去までしてないところは"NoRef"
とコメント入れて注意はするようにしてもらいました。


後日、御機嫌伺いした時に、「例のコメント入れたところが特にハマってるんですが…」と
絵に描いたような発言をいただけたので「wwwざwwwまwwwぁwww」と生温かいエールを送ったことを追記しておきます。

確認駆動開発からテスト駆動開発へ…

といきたいところなんですが…

TDDのペアプロ適当講習から2ヶ月半ほど経っていますが、
ちゃんと残業代が貰える時間内での残業で作業ができているようです。
フォーム周りのテストとかも独学でやって頑張っているみたいで…


これで、Excel-DNAに移行して.NETやって佐賀の勉強会の戦力に…とか思ってたら、
「ひとまず会社からなんか言われてるわけじゃないんでこれでいいかなと…
あと、俺、会社以外でパソコンとかいじらないし、
本当のプログラマさんとか相手できないですよ…すいません」
…だってさ…(´・ω・`)


職業として頑張っているという、
いい意味での職業プログラマさんはこれ以上望まれていないようです…


まあ、いろいろ思うところは多々あるのですが、
今も普通にいろいろと聞かれることもあるので、
次のステップを望んだときに応えられるように私も精進しようかと…

まとめ

  • 結局TDD教えられたのかはわかんないです…
  • どんな人でもプログラミングで困ってるならTDDを試す価値はあるのでは…
  • テスト駆動開発の"テスト"で引く人がよくいる、確認駆動開発ってのもどうかと思ってますが、preTDD的なものが名前だけでも公式であるといいなと…"いやいやテストっていってもね"的な説明面倒臭い…
  • TDDって実際に人に教えてもらったほうが理解しやすいと思う。
  • TDDBCはオススメ
  • TDDBCに参加できそうにないorTDD知ってそうな人がいないならtwitter#TddAdventJpで近くの人を探して教えてくれないか交渉してみる。
  • 教えてくれた人が勉強会の開催を希望してるならできる限りはサポートしようね…
  • いっそのこと、"俺様にTDDを教える勉強会"を主催してみる。(普通の勉強会だと主催者は勉強できないらしいので…)
  • 佐賀は3月末までに何かやるかもしれません。
  • AdventCalendarをGoogleChromeで書くのはやめたほうがいい。


ということでgdgdと書いてみました。
それではみなさんよいクリスマスを!

サテライト TDDBC佐賀を開催しました

ブログを書くまでがTDDBCということでサテライトといえ参加させていただいたので…とそろそろ10日経とうとするのに書いてます…



今回は開催といってもustream見てペアプロしてただけでしたので一参加者として楽しませていただきました。
最低会場の鍵を開けないといけなかったので急な仕事にドタキャンもできず、朝5時まで仕事してバタバタしてたのが一番主催者っぱいことだったかもしれません。


まずは、TDDBC東京1.5のustream配信担当の方、主催された[twitter:@HIROCAST]さん、講演をしていただいたid:t-wadaさん、運営の方々、現場で盛り上げていただいた参加者のみなさんとustreamで参加されたみなさん、本当にありがとうございました。



今回は非開発職の私の知人が初心者として参戦予定だったのですが仕事の都合で急遽欠席となり、私はなでしこから開放されて言語選択がフリーに…なぜかいつものメンバーも言語選択フリーで参戦…
で佐賀はどういうわけか全員Groovyを選択、私のとこのペアはJunit、もう一つのペアはSpockでした。


「困ったときはJavaで書けるよ」といわれてもeach以外Javaじゃないか…というようなGroovyのコードを四苦八苦しながら書いてTDD?何それ美味しいの状態に陥いっていました…



やっぱり、こういうイベントでペアプロしながらのTDDならやはり多少なりとも知ってる言語で参加するのが基本だよね…と当然のことを思いながらでしたがそれはそれで楽しいペアプロでした。相手のいつものメンバーのHyuutaさんがどうだったかはわかりませんが…



お昼のTLでしたが、
テスト駆動開発始めました!
組織のエロい人がさっさと導入したほうがいい的な話はまず失敗も含めて新規的なことを許容できる組織づくりなんだろうなといろいろ思いながら聞かせてもらいました。
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDについての話で個人で導入しようとしたあるある苦労話でした。
社内SEに転職してから本格的にひとりTDDを初めて、周りはこちらのことを何も知らないと言う状況で現時点では好き勝手にさせてもらっているのですが普通ならすぐ心が折れて続かないだろうなと思いながら聞かせてもらいました。
http://tomykaira.github.com/HowToGit_tddbc/
git-nowいいよとかいいつつ、基本がmercurialなのでとても参考になりました。
人類ペアプロ計画
やれ!→暴走→なんとか終了→ループの話はほんとうにあるあるで泣けてきつつもせめて仕事を楽しくしようという展開がすてきでした。


と、記憶も薄れているので本家のTDDBC東京1.5のまとめは
http://hiroki.jp/2011/07/10/2044/
佐賀サテライトの話は
サテライト #tddbc 佐賀に参加 - pocketberserkerの爆走
サテライト #TDDBC 佐賀 に参加してきました - What is it, naokirin?
の記事が詳しいかと…


ということで
佐賀は9月にid:naokirinさんがpartake.inという勉強会を企画されています。
また、TDD関連も9月か10月くらいにやる予定ですので、よろしくお願いします。m(_ _)m

7/9 #TDDBC 東京の佐賀サテライト やります!! 他の地域でもやりましょう!!


ひとまず,場所を確保したのでTDD Boot Camp in Tokyo 佐賀サテライトの開催予定をご報告します.


詳しくは改めてATNDにて…
で,サテライト #TDDBC 佐賀 : ATNDどしどし参加してくださいね.


ATNDに書いてないのは名前どうしよう?ってだけなんですけどね…
今回はTDDBCの名前を使わせてもらっていいかなと思ってるんですが,
"TDDBC東京佐賀サテライト"って...おいwどこだよwwwって感じだなと…


それは置いといて…

やること

佐賀単独ですることは,

  • 東京のust見て勉強しましょう.
  • 午後からペアプロしましょう.
  • 東京のレビュー見て勉強しましょう.
  • 東京のustが不調でも午後の実習ネタは入手可能だと思うのでペアプロしましょう.

と,東京頼りの方向で基本はやってみようかなと…

参加者募集!!

ust映像なので見づらいこともあると思いますが,現地の空気は伝わってくるのではと思っています.
また,家で見てたらいろいろと邪魔が入って結局見てなかったってこともあると思います.
こういうところだと運営がゴソゴソして多少の邪魔をすることはあっても基本落ち着いて見ることができます.
それに,ペアプロができる!!というのは大きい利点です.
佐賀でTDDBC東京のust一人で見ようかなと思ってる方なんかにはオススメの企画と思います.
また,興味があるけど,どうだろう?という方もustだけじゃなく実際にいろんな方と交流ができるいい機会ですので是非参加してみてください.

他の地域のサテライト募集!!

勉強会開催したかったけど手始めに,これなら自分でもできるかも…
なんて思った方は是非やりましょう!!
そういうところがあれば不調気味のSkypeメッセンジャーを利用してやりとりや疑問点等情報の共有をしましょう!!


また,TDDBC東京申し込めなかったよ…とか遠くて行けないよ…という方でこんな感じでやってみるかな…
と思った方も是非やりましょう!!


地方の開催が佐賀ひとつだとできることも限られてくるというか上記のようなことしかできないです.
いろんなところでやってみようかという話がでてくると「こんなことやってみない?」とか話も出てくると思いますし,
今回できないかもしれないけれどいろんなサテライト企画に繋がると思います.


gdgd上等ぐらいの気持ちでやってみましょう!!結構なんとかなりますw


ということで,なにかあれば,コメントか[twitter:@cubeon]かcubeonのgmail.comtwitterの"#tddbc"までよろしくお願いいたいします.

#TDDBC 東京に地方から乗っかてみる(案) 地方の勉強会も増やそう!!

まぁ,あくまで思いつきなので,このまま消える可能性も大ですが,
今回の7/9開催のTDDBC東京ですがATND(TDD Boot Camp in Tokyo #tddbc : ATND)を見るとustをやるということなので,
地方でustに乗っかってサテライト開催するということを思いついてみました.

とりあえず


などとつぶやいてみましたが
ひとまず,主催者の[twitter:@HIROCAST]さんにDMを送信してサテライト開催は基本問題ないということと,
連携できることがあれば東京ともやってみましょうとの返事をいただきました.


twitterを眺めてみるとよく,"tddbcを地方でしたいけど…人が集まるかなぁ…"的なつぶやきをよく見かけるのですが,
実際にTDDBCに参加してその空気というか雰囲気を掴むことってその地方で人を集めるには非常に大事だと思うのです.


で今回ustもあるので現場とは違うとは思いますが地方でTDDBCの空気に触れるいい機会ではないかと思い,
やるなら地方でサテライト開催をする人たちで連携して,

  • 東京のレビュー時間に平行してレビューを交替でustしてみるとか
  • 疑問があっても東京からのサポートは難しいと思うので地方間で解決を試みてみるとか
  • 可能であればできる方が距離を越えて遠隔ペアプロしてみるとか
  • あとできることがあればいろいろ…

と,妄想してみました.


また,自分の地域でプログラミングの勉強会をしてみたいけど人が少ないからな…
と常々考えている方々にもオススメです.
TDDは基本言語を選びません.
ということは,プログラミング人口が少ないと思われる地域でも母数が増えます.
自分が勧めたい言語を広めるチャンスにもなりますし,
逆に自分が知らない言語を知る良い機会にもなります.


それに,勉強会やりたいけど企画とか運営とかどうしよう…
と思われてる方々もオススメです.
ありがたいことにベースとなる企画や運営は東京にあります.
本当に感謝すべきことだと思います.
実際に現地の方がよいのでしょうが
ust経由であれ学ぶことは多いにあると思います.



ということで,

  • 地方でTDDBCを開催したい!
  • 勉強会が少ないので是非やってみたい!
  • 東京までいけないので地元でTDDBCしたい!の

等々開催意欲のある地方の方は是非
コメントか[twitter:@cubeon]かcubeonのgmail.comtwitterの"#tddbc"まで
よろしくお願いいたいします.

TDD'P'C佐賀開催しました

台風も進路を南に取り,多少の小雨と強風の中,TDD'P'C佐賀を開催しました.


今回は初参加3名なのでちょっとTDDの説明をと思って小一時間説明をしたのですが…orz
id:pocketberserker さんにもtwitterでダメ出しされてしまいました…
それと,gitの説明はgit nowとgit commitくらいしか使っていない私は固まってしまい…orz
id:pocketberserkerさんにチェンジしていただいてなんとか終了…


参加者の自己紹介をしてほしかったと懇親会で聞いて,あっ忘れてた…orz


その後,FizzBuzz演習とmzp演習でした.
私は弄ったことがあるPHPペアのフォローに
…といいつつ,TDDの出だしだけ伝えてあとはおまかせでした…仕事しろ>俺…orz


もうひとつのJava組はいろいろと悪戦苦闘している様子も見せつつ,
mzp演習のあと,LINQをやっていて肝心なところを見逃がしていたので非常に悔しかったです.


演習の内容を事前に分かるように公開しててほしかったと懇親会で聞いて.そうだね,予習は必要だね…orz


そして時間となり,居酒屋さんへ
いろいろと話をしました.

  • やっぱり,こういう活動している院生に紹介できる企業って佐賀にないよね
  • PHPはそんなに悪い言語じゃないと思うんだけど…やっぱり良くないの?
  • PHPにはEclipseよりもNetBeansがいい
  • 個人的には嫌いだけどJava自体は悪い言語と思わないんだけど…やっぱりオワコンなの?
  • いろんなところで自動テストは普及してきてはいるけど,TDDは普及しないよね
  • TDDの普及にはアジャイルの思想の普及(私),TDDで単体テスト工程までカバーしてそれをアピール(id:pocketberserker)…多分両方いると思う
  • 今後はCIやアジャイルも視野に入れたネタを仕込みたいな
  • etc…


今回の反省やらいろいろ

  • やっぱり人前で発表するならもうちょっと準備しないとね.
  • 人前で発表とか考えると多少デモとかできるように自前のノートPCが欲しいな.
  • 始めるときに自己紹介するのを忘れないようにしないと.
  • 次回から演習の詳細をきちんと公開するように
  • 飛び込みでもない事前に分かってる言語やフレームワークはもう少し勉強しておく
  • 佐賀のtwitter参加率を考えると他の告知方法も考えないといけないかな
  • 初心者への普及と経験者の交流を両立させるには…多分,人を増やして別日程が無難だろうな…人が読めなくても可能な方法は?
  • ネタを仕込むといっても自分もきちんとTDDを初めたのはTDDBC福岡から(それもきちんとできているか)…というところからどうネタを持ってくるか?
  • Java系列なのにScalaEmacs,Vimベースの開発というのはいい感じがした
  • etc…

そんな感じでした.
他のイベントがない限りは隔月ペースでやりたいなとは思っています.

まぁ,こんなネタどうよ?とか俺にこのネタやらせろよ!とか参加したい!とかは
コメントや[twitter:@cubeon]やcubeonのgmail.comとかに書いてくれると
中の人が喜びますのでよろしくお願いいたいしますm(_ _)m

5/29TDD'P'C佐賀のプログラムを決めました

初心者の方は演習で経験者はテスト駆動開発入門の読書会に落ち着きそうでしたが


id:pocketberserkerさんが次のような形でTDDBC福岡の演習を研究対象にされています.
『修士研究の一環でTDDプロセスデータ収集中です』という話 - pocketberserkerの爆走
演習の中にテスト用のweb環境の構築が必要なものがあるのですが,
id:t-wadaさんがwebサービスを立ち上げていただけることになったようです.


そこでpocketberserkerさんとtwitterでのやりとりで,
それに乗っかろうと私が決めました.


ということで,最初に私がTDDBC福岡の資料等を基に簡単なTDDの説明をする予定です.
その後の演習は初心者+バージョン管理との併用が未経験のTDD経験者はFizzBuzz演習→mzp演習
経験者はmzp演習からという形で演習を行なうようにします.
もしなんらかの都合により演習ができない場合はテスト駆動開発入門の読書会になる予定です.


そんなこんなで定員まであと3名のTDD'P'C佐賀の参加はここ(ATND)からお願いいたしますm(_ _)m
特にtwitterIDじゃなくても参加できるみたいです.
twitterIDじゃない方は連絡用メールアドレス(こちらからは見えません)を登録しておいていただくと
何かあるときに連絡しやすいのでありがたいです.



また,この勉強会は幅広く参加してもらいたいという希望があるので言語縛りを基本的には設けてません.
逆に大したスキルもないのに主催してる私には結構な縛りでもありますが,
その辺りで言語を縛らずに楽しめるネタがあるよって方は
コメントなりcubeonのgmail.comなりで教えていただけると大変ありがたいです.


それ以外にも,こんなことやってほしいとかやらないの?とかやってやる!とかの
コメントもしてもらえると中の人が喜びますのでよろしくお願いいたします。

5/29 TDD'P'C佐賀を開催します


ということで,
札幌TDDBC1.5TDD'P'C佐賀札幌TDDBC2.0
という予定でバッチリですね(何

私はあいにく都合が悪いので佐賀だけにさせていただきます…ハイ


……
行きたいなぁ〜|ω・`)チラッ
札幌行きたいなぁ〜(*・д艸)チラッ
本当に行きたいなぁ〜(/ω・\)チラッ


…某試験とか某仕事とか…どこにチラッチラッしようと無理なんですけどね(´・ω・`)


ということで,TDD'P'C佐賀の参加はここ(ATND)からお願いいたしますm(_ _)m
twitterのアカウントないよ別にアカウント作りたくないよって人はここのコメントに参加表明していただけるとありがたいです.

あとは,こんなことやってほしいとかやらないの?とかやってやるとかの要望もコメントしてもらえると中の人が喜びますのでよろしくお願いいたいします。