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

Post on 05-Dec-2014

6.289 views 0 download

description

 

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

TDD最初の一歩

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

大中浩行(@setoazusa)

Copyright 2014 Hiroyuki Ohnaka

自己紹介

• 大中浩行 (Ohnaka, Hiroyuki)

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

• yokohama.devtesting / devtesting-ja

• @setoazusa

• http://blog.fieldnotes.jp/

• Javaプログラマ

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

Copyright 2014 Hiroyuki Ohnaka

yokohama.devtestingとは

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

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

す。

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

4Copyright 2014 Hiroyuki Ohnaka

TDDとは

Copyright 2014 Hiroyuki Ohnaka

TDD

• テスト

• 駆動

• 開発

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

Copyright 2014 Hiroyuki Ohnaka

テスト

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

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

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

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

評価をすること」

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

Copyright 2014 Hiroyuki Ohnaka

駆動

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

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

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

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

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

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

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

of Control)を表している

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

Copyright 2014 Hiroyuki Ohnaka

開発

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

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

とである。

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

Principles behind the Agile Manifesto

http://agilemanifesto.org/principles.html

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

9Copyright 2014 Hiroyuki Ohnaka

TDDのゴール

Copyright 2014 Hiroyuki Ohnaka

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

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

Copyright 2014 Hiroyuki Ohnaka

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

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

Copyright 2014 Hiroyuki Ohnaka

TDDのサイクル

1. 次の目標を考える

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

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

4. 目的のコードを書く

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

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

7. 1~6を繰り返す

Copyright 2014 Hiroyuki Ohnaka

TDDと黄金の回転

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

Copyright 2014 Hiroyuki Ohnaka

キーワード

• テストファースト

• TODOリスト

• アサートファースト

• 仮実装

• 三角測量

• 明白な実装

• リファクタリング

Copyright 2014 Hiroyuki Ohnaka

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

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

てはならない

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

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

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

いてはならない。

16Copyright 2014 Hiroyuki Ohnaka

TDDのこころ

Copyright 2014 Hiroyuki Ohnaka

• 小さく回す

• 複数を相手にしない

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

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

る」

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

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

Copyright 2014 Hiroyuki Ohnaka

ユニットテストあるある

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

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

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

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

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

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

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

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

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

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

20Copyright 2014 Hiroyuki Ohnaka

現場で戦う

荒みきったコード

疲弊しきった現場

爆弾処理のようなリリース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

Copyright 2014 Hiroyuki Ohnaka

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

• TDDは銀の弾丸ではない

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

• 原理主義に走らない

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

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

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

Copyright 2014 Hiroyuki Ohnaka

「2人目を探す」

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

• 日々是改善

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

しれない

• テストデータの整備

• デプロイ手順の整備

• etc…

Copyright 2014 Hiroyuki Ohnaka

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

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

理由があるはずです。」

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

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

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

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

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

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

せん。」

Copyright 2014 Hiroyuki Ohnaka

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

です。」

Copyright 2014 Hiroyuki Ohnaka

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

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

Copyright 2014 Hiroyuki Ohnaka

さいごに

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

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

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

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

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