2014/3/30 ミニTDDBC presented by yokhama.devtesting

28
TDD最初の一歩 2014/3/30 ミニTDDBC presented by yokohama.devtesting 大中浩行(@setoazusa)

description

 

Transcript of 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Page 1: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

TDD最初の一歩

2014/3/30 ミニTDDBC presented by yokohama.devtesting

大中浩行(@setoazusa)

Page 2: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

自己紹介

• 大中浩行 (Ohnaka, Hiroyuki)

• 泣き笑いせつなポップ中年。

• yokohama.devtesting / devtesting-ja

• @setoazusa

• http://blog.fieldnotes.jp/

• Javaプログラマ

• グロースエクスパートナーズ(株)所属

Page 3: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

yokohama.devtestingとは

• Developer Testing およびその周辺領域について、ディス

カッションやハンズオンなど、ゆるく行うコミュニティで

す。

• TDDBC横浜からスピンアウトしたコミュニティ

Page 4: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

4Copyright 2014 Hiroyuki Ohnaka

TDDとは

Page 5: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

TDD

• テスト

• 駆動

• 開発

• テストによって駆動される開発

Page 6: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

テスト

「全てのライフサイクルを通じて実施する静的、動的なプ

ロセスにおいて、成果物が特定の要件を満足するかを判定

し、目的に合致することを実証し、欠陥を見つけるため、

ソフトウェアプロダクトや関連成果物に対し、計画、準備、

評価をすること」

ソフトウェアテスト標準用語集 日本語版 Version 2.2.J01

Page 7: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

駆動

テスト駆動開発は、プログラム中の不安を管理する方法で

ある。ここで言う不安とは悪い意味ではない。...(略)...

道理にかなった不安、すなわち「これは困難な問題だから

最初から最後までは分からない」という感覚である。

「コードをどのように書けばいいのかわからない」とい

う不安を、失敗するテストとして表現することで、開発

を駆動させる原動力とするという、制御の逆転(Inversion

of Control)を表している

「テスト駆動開発入門」から

Page 8: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

開発

我々が最も価値を置くのは、価値あるソフトウェアを早いうち

から継続的にデリバリーすることを通じて顧客を満足させるこ

とである。

そのための、「価値の流れ」を構成する一連の営み

Principles behind the Agile Manifesto

http://agilemanifesto.org/principles.html

(訳は 和智・高木(2012))

Page 9: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

9Copyright 2014 Hiroyuki Ohnaka

TDDのゴール

Page 10: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

「動作するきれいなコード」

和田卓人(2014) TDDのこころ@OHC2014 より

Page 11: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

「動作するきれいなコードへの2つの道」

和田卓人(2014) TDDのこころ@OHC2014 より

Page 12: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

TDDのサイクル

1. 次の目標を考える

2. その目標を示すテストを書く

3. そのテストを実行して失敗させる(Red)

4. 目的のコードを書く

5. 2で書いたテストを成功させる(Green)

6. テストが通るままでリファクタリングを行う(Refator)

7. 1~6を繰り返す

Page 13: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

TDDと黄金の回転

和田卓人(2014) TDDのこころ@OHC2014 より

Page 14: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

キーワード

• テストファースト

• TODOリスト

• アサートファースト

• 仮実装

• 三角測量

• 明白な実装

• リファクタリング

Page 15: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

TDD三原則(「クリーンコード」より)

• 失敗する単体テストのコードを書く前に、製品のコードを書い

てはならない

• コンパイルが通り、適切に失敗する単体テストができるまでは、

次の単体テストを書いてはならない

• 現在失敗している単体テストが通るまで、次の製品コードを書

いてはならない。

Page 16: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

16Copyright 2014 Hiroyuki Ohnaka

TDDのこころ

Page 17: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

• 小さく回す

• 複数を相手にしない

「わが全力をもって敵の分力を撃つ。

つねに敵をつつむがごとくに運動す

る」

司馬遼太郎「坂の上の雲」より

http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:MIKASAPAINTING.jpg

Page 18: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

ユニットテストあるある

• 他のテストと一緒に流したら落ちるテスト

• 他のテストと一緒に流さないと落ちるテスト

• 月が変わると落ちるテスト

• リファクタリングするとコンパイルエラーになるテスト

• 仕様変更で全滅するテスト

• バグがあるのにグリーンバーなテスト

Page 19: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

良いテストのために優先すべきもの

•再現性、繰り返し可能(Repeatable)

•独立していること(Independent)

•詳しくは、http://xunitpatterns.com/

Page 20: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

20Copyright 2014 Hiroyuki Ohnaka

現場で戦う

Page 21: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

荒みきったコード

疲弊しきった現場

爆弾処理のようなリリースhttp://www.flickr.com/photos/okinawa-soba/2951808529/http://www.flickr.com/photos/22719239@N04/2246462044/http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Bomb_neutralizing_EOD_9.jpg

Page 22: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

僕たちはアムロにはなれない

• TDDは銀の弾丸ではない

• 全ての問題をテクニカルなプラクティスで解決しようとしな

• 原理主義に走らない

• 「テストを書かなければならない」

• 「テストファーストしなければならない」

• 「全てのクラスにユニットテストがなければならない」

Page 23: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

「2人目を探す」

• 「より良い開発」を目指すというコンセンサス

• 日々是改善

• そのことを考えた時に、TDDより先にやることがあるかも

しれない

• テストデータの整備

• デプロイ手順の整備

• etc…

Page 24: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

もうウンザリです。何も改善できません。

「しかし、私たちにはプログラミングをする本当の

理由があるはずです。」

「もし、自分や同僚がプログラミングを楽しめるな

ら、どんなシステムに取り組んでいるかは重要では

ありません。そのシステムに対してきちんとした仕

事ができるはずで、そうでなければ待っているのは

落胆です。そうなってしまっては何の楽しみもあり

ませんし、私たちはそんな目に遭うべきではありま

せん。」

Page 25: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

「レガシーコードで成功する鍵は、やりがいを見出すこと

です。」

Page 26: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

「君にも君を動かしているものがあるでしょう?」

牛木義隆(2008) 夢喰いメリー(1) 芳文社

Page 27: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

さいごに

「君が質の高いソフトウェアを届けることは誰にも止められ

ない。君が現場に立って、お客さんに向けてプロジェクトの

状況と、プロジェクトに必要なことを誠実に伝えることも誰

にも止められないんだ。」

Page 28: 2014/3/30 ミニTDDBC presented by yokhama.devtesting

Copyright 2014 Hiroyuki Ohnaka

参考文献

• Beck,Kent(2002) Test Driven Development: By Example Addison-Wesley Professional (長瀬 嘉秀(監訳)テクノロジックアート(訳) (2003) テスト駆動開発入

門 ピアソンエデュケーソン )

• Feathers, Michael C. (2005) Michael C. Feathers Working Effectively with Legacy Code Pearson Education (ウルシステムズ株式会社(監訳) 平澤章、越智典

子、稲葉信之、Fearless Change: Patterns for Introducing New Ideas田村友彦、小堀真義(訳) (2009) レガシーコード改善ガイド翔泳社)

• Humble,Jef Farley David(2011) Continuous Delivery :Reliable Software Releases Though Build,Test,And Deployment Automation Addison-Wesley

Professional (和智右桂、高木正弘(2012)継続的デリバリー信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化 アスキー・メディ

アワークス)

• Manns,Mary Linn, Rising,Linn(2004) Fearless Change: Patterns for Introducing New Ideas Addison-Wesley (川口恭伸、木村卓央(監訳) 高江洲睦、高橋一

貴、中込大祐、安井力、山口鉄平、角征典(訳) (2014) Fearless Change アジャイルに効くアイデアを組織に広めるための48のパターン丸善出版)

• Martin, Robert C. (2009) Clean CODE: A HANDBOOK OF AGILE OFTWARE CRAFTMANSHP Pearson Education (花井志生(訳) (2009) Clean Code アジャ

イルソフトウェア達人の技 アスキー・メディアワークス)

• Meszaros, Gerard (2007) xUnit Test Patterns: Refactoring Test Code Addison-Wesley Professional

• 日本ソフトウェアテスト資格認定委員会(2012) ソフトウェアテスト標準用語集日本語版 Version 2.2.J01 http://jstqb.jp/dl/JSTQB-glossary.V2.2.J01.pdf

• Rasmusson, Jonathan(2010) The Agile Samurai: How Agile Masters Deliver Great Software Pragmatic Bookshelf (西村直人、角谷信太郎(監訳)近藤修

平、角掛 拓未 アジャイルサムライ達人開発者への道オーム社)

• 和田卓人(2014) TDDのこころ@OHC2014 http://www.slideshare.net/t_wada/osh2014-sprit-of-tdd