『JUnit実践入門』写経・実践会 in 横浜 #5 を開催してきた #junitbook

第5回目を数える『JUnit実践入門』写経・実践会 in 横浜。そろそろ会としての締めも見えて参りました。今回の対象(範囲)は『BDD(振舞駆動開発)』。

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)


会場は横浜タネマキ。今回は(参加当日時点で)17人参加登録があり、うち16人が参加。これまでの中で参加最大人数を更新する形となりました。

当日の進行内容

タイムテーブルはこちら。最初に書籍のディスカッションを行い、その後BDD実践(ペアプロ/もくもく)を行う形を取りました。書籍第17章、17-3については丸々Cucumber-junitに割いている章だったので全体でのディスカッションは割愛。

書籍ディスカッション

今回のディスカッション、テーマが『BDD』という事でしたが、参加者各者の中での『BDD(振舞駆動開発)』の位置付けやポジションが若干フワッとしていたのもあったせいか、そこまで"白熱した"という感じでは無かったような気が。

BDDの定義や位置付けの曖昧さ(というか定義の"揺れ"と言う方がしっくり来るのかしら)、また受け入れテストの側面から"受け入れる側"からの視点や意見(実際の利用可否とか状況とか)を聞くことが出来なかった(参加者は全員"開発者"側の人でしたし)のも背景としてあったのかも知れません。


ディスカッションの内容はTogetterにもつぶやきまとめておりますが、各参加者の参加ブログ等にも期待してみることにしよう。


以下個人的メモ。

17.1 受け入れテストとは
  • 仕事で受け入れテストやってくれてる人は?半数(8人程)が挙手。チェックリスト的なものを使う、手動、要件適宜から項目を起こして確認する程度。BDDのような形で実践しているというものは無かった。
  • 本来の定義・意味で『BDD』を実践しているという人は居るのかな?
  • 仕様を決めないと始まらない、というのはTDDでも同じ事が言える。
  • お客さんがバリバリコードを書くというのはイメージしづらい?アメリカではこの辺どうなんだろう。
  • BDDの2つの視点
    • 『ユーザー目線から書くパターン』と『開発者からの視点APIとしての仕様から書くパターン』
    • JUnitはクラス、メソッド単位でのテスト実施で使うけど、JUnitでもBDD的な事は出来る。
    • RSpec使ってるが、BDD的な使い方はしてない。SpockでもBDD的な使い方は…
    • ツールと言うよりも、視点の問題?
    • 敢えて曖昧にすることで受け入れ条件の幅を広げている。
  • API周辺でガチガチにテストを固めていくと、リファクタリングが大変。外部からの振る舞いをベースに書いていくと、その辺り柔軟に対応可能。
  • 書くタイミングとしては要件定義等の早い段階?でも書けるかどうかは…
  • @joker1007さんの以下の資料も参考に。
17.2 振舞駆動開発とは?
  • BDDの生まれた背景
    • RspecRubyというよりDSLに近い。
    • テストを書くときにDSLによってテスト対象のスペックを書くことが出来る。と気付いた。
    • 振る舞いを継承する事によって開発を駆動することが出来る。
    • →という事は開発者視点から誕生したもの?
    • 自動化をしたい、というのも要望があった。
    • 前提としてTDDとBDDは補完し合うもの。どちらかがあれば万全、という訳では無い。
  • アジャイルの文脈で言えば、この範囲はDoneの定義で語られる部分なのか?
  • Goos本では、BDDもTDDとして書かれていないか?(以下、この書籍におけるTDD/BDDの位置付け等についてしばらくディスカッションが続く)
  • そもそも、BDDが出来ると何が嬉しいのか?誰が嬉しいのか?
    • 『***開発』とついているからには"開発者が嬉しい"?
  • 仕様として書けている、という時点でセーフネット的な役割は果たしているのでは。

BDD実践

書籍ディスカッションを1時間半程で終えた後は、各々興味のあるフレームワークで卓に別れてペアプロorもくもくでBDD実践。時間にすると2時間半〜3時間程でしょうか。『お題』も各自チョイスする形で進行。

ちなみにその際の座席表はこちら。綺麗にCucumber班とSpock班で半々に分かれた形となりました。

個人的には当日の進行業雑務&座席表作成などを終えた後、『Jnario』というBDDフレームワークについて、公式ドキュメントを参考に導入やサンプルコードの写経・実践を行なってました。

しばらく前に『Java BDD』辺りで調べてたところ、最近では『Jnario』というものがあるらしいぞ、また、Hideki Kishida (TwitterID:@quicy)さんがJnarioについて時折言及されているのを見てこれはちょっと面白そうだぞ、となったのが切っ掛けです。

進行資料にも@quicyさんのつぶやきを引用させて頂きました。これらのつぶやきでJnarioの特長やメリットを存分に説明されていると思いますが、併せて記載させて頂いた@mzkhさんの『本気でSpockとCucumberを殺しにきた』というコメントも個人的にはツボでした。

最近は専らIntelliJ IDEA派なのでEclipseベースででしか(現状)使えない、と言うのは若干気になる所ではありますが(IntelliJ IDEAでも使えるように(Xtend対応?)なって欲しいなぁ)、Spockのような事がJnarioでも実現出来る、またやりすぎなんじゃと思える(良い意味で)位の機能もあったりで今後も要注目!なものになるのではないでしょうか。(以下がそう思えた箇所。Spockの様にテーブル形式でテストデータを記述出来、且つ失敗したか箇所にはご丁寧にチェック(v や x)まで付けて解説してくれてるw)


Jnarioの実践結果については少しづつではありますが、ブログにエントリとしてアウトプットしてみる事にしました。空いた時間を見つけつつ、マイペースで出力を続けられればと思います。


しばらくしたら、TDDBC等でも『Java/Jnario』で実践する人とかも現れてきたりするのかな。そうなってくると面白いですね。

Lightning Talk & 各者成果発表

BDD実践の合間、またBDD実践タイム終了後には適宜LTや実践結果の発表が入りました。上記のJnarioに関する簡単な実践報告もこのタイミングで実施。主だったものを以下にご紹介。

  • とーます (TwitterID:@grimrose)さんによるSpock実践結果の発表。写真はPowerAssertの機能で『間違った箇所の度合いをパーセンテージ表示してくれる』というものでしたが、『94%、惜しい!』…って惜しくてもアウトはアウトじゃん、というツッコミを皆でしておりましたw

  • Ryuji TSUTSUI (TwitterID:@ryu22e)さんのbehave(Python製BDDフレームワーク)によるコード写経結果の発表&behave翻訳ドキュメントの途中経過について。ドキュメント翻訳状況は現在20%程度との事ですが、behave使いの人にとってはこちらも完成が待ち遠しい、興味深いプロダクトになるのではないでしょうか。


次回(#6)開催予定について

という訳で第5回BDD編もタイムテーブル通り、19:00には完全撤収して終了。自身の体調都合もあったので懇親会的な催しは行いませんでしたが、参加者の皆様は途中どこかで軽く会等催されたのかな?

今回は『BDD編』で1回時間を割いて開催してみた訳ですが、"BDD"自体の定義や位置付けの曖昧さや個人差があり深く議論を進められなかった、また実践者の生の声を聞く事が出来なかったというのはあったと思います。これはどうなんでしょう、そもそもBDD自体の定義定着・周知度合いとも関連して来るものなのかな…。『BDDによって、何が/誰が嬉しいのか?』という根本的な問いにも明確にバシッと回答が出ていなかったのもその辺を象徴しているのではないかな、と思いました。


そんな中でも個人的にしっくり来たのは以下のポイント辺り。BDD自体の理解も関連書籍を含めてより一層、深める必要がありそうですね。

  • TDDとBDDは補完し合うものであり、どちらかだけで十分という事はない。
  • ツールどうこう定義どうこうって言うよりも、視点の問題。
  • 『振舞駆動"開発"』と言う時点で嬉しいのは開発者サイドではないか。

The RSpec Book (Professional Ruby Series)

The RSpec Book (Professional Ruby Series)

実践テスト駆動開発 (Object Oriented SELECTION)

実践テスト駆動開発 (Object Oriented SELECTION)

Specification by Example: How Successful Teams Deliver the Right Software

Specification by Example: How Successful Teams Deliver the Right Software

定義や考え方、取り組み方については、とーます@grimroseさんが開催中につぶやいていた以下のエントリが色々と参考になりそうなのかな。

そして次回第6回の開催予定についてですが、以下の予定で実施したいと思います。

  • 開催日時: 2013/05/25(土) 13:00 - 19:00
  • 開催場所: 横浜タネマキ
  • 対象範囲: 第14章(コードカバレッジ)、第15章(継続的テスト)


比重的には第15章、継続的テスト及びCI周りの内容が主になる予定です。前半ディスカッション、中盤〜後半は実践という今回同様の形式になりそう。

  • 書籍のディスカッション
  • CI周りの実践タイム
    • 各種環境構築、実践(各自興味のあるものをチョイスする形になりそう)
    • プラグイン作成や各種連携作業のもくもく等もお好みで


募集サイトは以下になります。詳細は決まり次第随時以下のページ若しくはハッシュタグ( #junitbook )でつぶやきますので、興味のある方は是非ご参加頂けると嬉しいです。


当日ご参加頂いた皆様、またつぶやきなどでご意見をお寄せ頂いた皆様、ありがとうございました!