Coderetreatと、たまたま知ったBDDとATDDについてざっくり調べてみる

この記事はMisoca+弥生+ALTOA Advent Calendar 2018 - Qiita 16日目の記事です。

こんにちは。弥生の海保です。 今回は、Coderetreatというイベントとそこで知ったBDDとATDDについて調べた話を書こうと思います。

Coderetreatについて

先日、Coderetreatというイベントが秋葉原で開催されたので参加してきました。

minna-de-ochakai.connpass.com

先ずはCoderetreatについて簡単に説明します。

  • お題は固定で、コンウェイのライフゲームを作る。*1

  • 1セッション45分で1日通して複数セッション行う。

  • セッション終了時に成果物は全て消す。

  • 各セッションペアプロで行う。*2

  • 使用する言語、フレームワークは自由。

  • 参加費は無料!さらに昼食、おやつ、飲み物も全て主催およびスポンサーが提供する。*3

とまぁこんな感じで、丸1日ガッツリプログラミングします。 今回はファシリテーターの方がTDD*4に詳しいということで、TDDを使ってみようという全体方針でした。
会場の雰囲気はかなりよく、お互いに「おー!これは完璧!」と褒めあったり、拍手が起こったりとワイワイ開発してました。*5

事の発端

そんな中、あるセッションでの設計中にこんな案が出ました。

・ライフゲームの機能を実装して完成させるのではなく、ある初期系に対する完成系をベタで出力して、そこにロジックを入れていけばライフゲームになるはず。

ふむ、文字にすると当たり前に感じますね。 当日はTDDでロジックを実装していたので、テスタブルなロジックの集合を作っていくことに思考が持っていかれていたので、面白い発想だと感じました。
ファシリテーターの方が、この手法はBDDやATDDに近い手法だと教えてくれました。

今回出た案、普段の業務で考えると、画像も文字列もベタ書きのモックアップにロジックを実装して行くイメージです。
さて、ではBDDとATDDとはどんなものなのか見てみましょう。

BDDって?

振る舞い駆動開発、ビヘイビア駆動開発と呼ばれ、TDDの1種とされています。 作業手順としてはTDDと同じでRED/GREEN/REFACTORを繰り返します。 TDDとの違いは思想的な部分で、何のためのテストを書くか。という部分に差があります。

BDDはその名の通り、「振る舞い」を記述するためにテストを書く。という原則があります。

コードを考える上では、必然的にTDDよりもスコープが広めのテストを考えることになります。 ユニットテストや結合テストのレベルのイメージです。

今回のライフゲームの例で言うと、初期系に対する完成系を出力するための1つ1つのロジック。が「振る舞い」ということになります。

基本的にTDDと同じ作業で、実装者もイメージしやすい形に設計されている感じですね。

ATDDって?

受け入れテスト駆動開発と呼ばれ、よりユーザー(顧客)向けのテストを想定したものです。 そのため、TDD、BDDに比べて粒度は大きくなります。

テストの組み方の難易度が上がり、REDである状態がどうしても長くなってしまいますが、開発最終段階のテストが早い段階で自動化できます。

今回のライフゲームの例で言うと、初期系に対する完成系が出力されること。がテストスコープとなります。

こちらはBDDに比べて実装難易度がかなり上がりそうです。 大きな枠組みのテストの中に、粒度の小さなテストをつめていく感じになるのでしょうか。
反面、ユーザー側にもわかりやすいテストに出来るので、要求の齟齬を抑えられるメリットがありそうです。

まとめ

かなりざっくりですが、BDDとATDDについて調べてみました。 どちらも、いかにわかりやすくテストを作っていくか。を考えて設計されているように感じます。 この他にもTDD関連の手法がいくつもあり、取り入れる場面ごとで考える必要性を感じました。 まだTDDそのものも使いこなせていないので、鍛えないといけませんが、コードの保守性、開発スピードなどを改善できる手法はどんどん取り入れていきたいですね。

Coderetreatも、普段使わないけど気になる言語を使ってみたり、スキルセットの異なるエンジニアと知識共有、意見交換が出来る有意義なイベントでした。
ちょっと興味が出た方は、定期的に開催されているようなので、次の機会に参加してみては?

ちなみに、Misoca+弥生+ALTOA Advent Calendar 2018 - Qiita 3日目を担当してくれている、@corocnさんもCoderetreatについて以前に記事を書いてくれています!写真つきで会場の雰囲気なども見られますので、ぜひ覗いてみてください! tech.misoca.jp

さて、次回は@kentaro_tsujinoさんの「オンプレ仮想基盤かAzureについて」のお話です。どうぞお楽しみに。

*1:ライフゲーム - Wikipedia 単純ルールですが、ライフゲームの仕組みだけでプログラムが作れたりします。

*2:今回参加したイベントはモブプロもありでした。

*3:全ては休日返上でがんばるプログラマへの想いで作られているそうです。学ばなければならないプレッシャーも感じます。

*4:テスト駆動開発

*5:参加当日まで、結構不安でドキドキだったことは内緒です。