Skip to content

Instantly share code, notes, and snippets.

@pocketberserker
Created May 11, 2013 04:09
Show Gist options
  • Save pocketberserker/5558858 to your computer and use it in GitHub Desktop.
Save pocketberserker/5558858 to your computer and use it in GitHub Desktop.

テスト駆動開発とBoot Camp(仮じゃないよ)

自己紹介

  • なかやん・ゆーき / ぺんぎん / KEN HIRAI
  • @pocketberserker / id:pocketberserker
  • どこにでもいるふつーの新卒エンジニア
  • F# / Scala / Erlang / Haskell
  • ぐるぐるTシャツを着ていたらF# MVPになれました
  • 人生2度目の大都会

概要

TDD と TDD Boot Camp について、雑談を交えながらゆるく語ります。

Warning

  • この発表は個人見解に基づいています。
  • "私の知っている TDD"は"あなたの知っている TDD"とは異なる可能性があります。
  • "私の知っている Boot Camp"は"あなたの知っている Boot Camp"とは異なる可能性があります。
  • 60分喋ることはできないので議論タイムが入ります

私と大都会

講演依頼内容

「TDDをテーマに、なかやんさんの話しておきたい内容を自由にお話いただければ」

問題: どのTDD?

  • Test Driven Development
  • Type Driven Design / Type Driven Development
  • (Thanks Driven Development)
  • (TENGA Driven Docking)

今回は Test Driven Development です。

Test Driven Development

  • テスト駆動開発
  • ケント・ベックが考案した開発者支援のための概念
  • わりとゆるい意味でも使われることもある

今回は深くは説明しません。 知りたい方は後述する TDD Boot Camp に参加してください。 2013年は長岡(5/)、福岡、東京、岡山での開催が予定されています。

ケント・ベックの TDD

よく知られている TDD は以下のサイクルを繰り返す形のものです。

  • 失敗するテストコード書く
  • テストを実行し、失敗することを確認する(Red)
  • テストを pass する、最小のコードを書く
  • テストを実行し、成功することを確認する(Green)
  • テストに成功することを保ちつつ、リファクタリングを行う(Refactor)

会場に知らない方が多い場合は、ペアプログラミングでFizzBuzzを実装するデモを行いたいです (言語は Java か F# か Scala)。

私とTDD

私が TDD を (そして JUnit を) 最初に知ったのは学部2年の講義です。 でも、そのときは「ふーん、テストコードって書けるんだ」くらいにしか認識していませんでした。

しかし徐々に、これは私に必要なものだと感じるようになっていきました。 (講義の課題で使ってみたり、練習用コードを書いてみたり)

そして TDD Boot Camp へ

卒業研究が TDD に関することだった関連で、指導教員から TDD Boot Camp というイベントの存在を知ることになりました。

TDD Boot Camp とは

TDD Boot Camp(TDDBC) は、TDD について、 座学だけでなく、実習形式で手を動かして体得する ことを目的とするイベントです。

各地のコミュニティの方々が中心となって、全国各地で行われています。

TDDBC が最初に開催されたのは 2009/12/19 (http://kokucheese.com/event/index/750/)で、江端一将さんと和田卓人さんが舵取りをされていたと聞いています。 運営の始動が 2009/09/24 とのことなので、TDDBCは4年弱続いていることになります。

TDDBC に参加しようと思った理由

研究題材にしているけれど、"今の知識で大丈夫なのかな" と思っていたことが理由です。 そんな私にとって、実践されている方の話が聴けること、イベント内で体験できることが魅力的でした。

勉強会に参加したことはなかったのですが、研究に関連することだったので迷わず申し込んだ記憶があります。 ちなみに、当時の直近開催はTDDBC名古屋でした。

衝撃が走る

TDDBC名古屋に参加した2日間は衝撃的、刺激的でした。

  • TDDの目的
  • ペアプログラミングによるサイクルの確認
  • リファクタリング
  • 設計
  • プログラミング言語(関数プログラミング、JavaのGeneric、etc)
  • 開発環境への理解
  • レガシーコード改善

知らない言葉や概念も多く「こういうことを知らないと プログラマ になれないのか…」と思った記憶があります。

余談

TDDBC名古屋は1泊2日の宿泊形式だったので、修学旅行的な雰囲気があってとてもたのしかったです。

T って何さ

TDDBC より帰宅して以降、「T とは何ぞや」と考えるようになります。

当時の考え

人によって異なったかもしれません。

  • TDD は(基本的に)開発者のためのもの
  • 私の不安は「エンドユーザに必要な品質のものが届けられるのか」
  • 2度手間…?

そんなとき、 JaSST'11 Tokyo に投稿した論文が採択された知らせを受けます。

JaSST

  • ソフトウェアテストシンポジウム(JaSST : Japan Symposium on Software Testing)
  • 公式ページ http://jasst.jp/
  • 日本最大級のソフトウェアテストのイベント

JaSST'11 Tokyo での発見

ソフトウェアテストについて学び始めたのはこの頃からです。

TDD Boot Camp 福岡開催へ

  • 「TDDBC、自分の地域でもやりたい。少しでもいいから周りのメンバーを巻き込みたい」
  • 2010/11/09 に和田卓人さんに依頼メールを出す
  • 2011/03/18 開催

TDD と分散バージョン管理

当時、分散バージョン管理システム(DVCS)である Git を触っていました。 その関係で、TDD とバージョン管理をあわせて触ってみたら何かわかるのではと考えてイベント構成を考えました。

イベントを通して、 TDD と DVCS の相性はいいよね、という話になりました。 しかし、1つのイベントに (2日間とはいえ) 2つの内容を盛り込むのは難しいかもしれないとも感じました。

議論

普段どのVCSを使っているのか、なぜそのVCSを使っているのか、近くの人と話してみましょう。 席を移動したり運営の方を捕まえるのも良いでしょう。

余談

  • 上記が SCM Boot Camp を共同で立ち上げた理由の一つ
  • 当時在学していた某大学情報学科では、現在は Git を利用してソフトウェア開発の実験科目を行ってる

今一度考える、TDD

2011年の夏頃、TDD とは何か考え直したかったので TDDBC福岡の第2回をやろうと考えました。

このときはディスカッションも行いたいと考えていたので、以下の3名をお招きしました。

  • 和田卓人さん
  • きしだなおきさん
  • 大月美佳先生

このとき印象に残った言葉は「TDD は防具、身を守るためのもの」です。

ディスカッションの音声データは残っているのですが、現状未公開です。

議論

ソフトウェア開発において、何から「身を守る」のか、議論してみましょう。

余談

私にとって、イベントとは"知らないということを知る場"です。

Think からはじめよう

色んな人の TDD を見てみたい、ということで TDD in Action というイベントを開催しました。 このイベントでは、参加者の前でライブ TDD を行うという項目があり、その初回は私と@kyon_mm さんで行いました。

ここで示したのは「コードを書く前に考えることはたくさんあるよ」ということです。 具体的には、

  • 開発対象の使われ方の想定
  • 共通言語を考える(ユビキタス言語)
  • どういうテスト戦略か
  • Interface 指向や Type Driven

などです。

最近思っていること

最近は以下のようなことを考えています。

  • テストはなるべく書きたくない
  • Unit Test と Random Test の組み合わせ
  • 動的型付けのテストと静的型付けのテストの違い?
  • 言語を深く知るということ

議論

動的型付けと静的型付けでテストに差があると思いますか?

最後に

TDD という言葉の捉え方は人それぞれです。 あなたもきっと、"あなたの TDD" を見つけることになると思います。

そのきっかけとして、TDD Boot Camp に参加してみてはいかがでしょうか?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment