72
TDDの こころ 和田 卓人 (a.k.a id:t-wada or @t_wada) Feb 1, 2014 @ OSH2014

TDD のこころ @ OSH2014

Embed Size (px)

DESCRIPTION

at Open Seminar Hiroshima 2014 (#osh2014) 2014.02.01 (Sat) http://osh-2014.github.io/

Citation preview

Page 1: TDD のこころ @ OSH2014

TDDのこころ

和田 卓人 (a.k.a id:t-wada or @t_wada)Feb 1, 2014 @ OSH2014

Page 2: TDD のこころ @ OSH2014

和田 卓人id: t-wada@t_wadagithub: twada

Page 3: TDD のこころ @ OSH2014
Page 4: TDD のこころ @ OSH2014
Page 5: TDD のこころ @ OSH2014

よろしくおねがいします

Page 6: TDD のこころ @ OSH2014

こんな風景

Page 7: TDD のこころ @ OSH2014

荒みきったコード

Page 8: TDD のこころ @ OSH2014

疲弊しきった現場

Page 9: TDD のこころ @ OSH2014

爆弾処理のようなリリース

Page 10: TDD のこころ @ OSH2014

なぜこうなってしまうのか?

Page 12: TDD のこころ @ OSH2014

左サイドだけでは点は取れない

Page 13: TDD のこころ @ OSH2014

誰がシステムを作り続ける

のか

Page 14: TDD のこころ @ OSH2014

TDDとは?

Page 15: TDD のこころ @ OSH2014
Page 16: TDD のこころ @ OSH2014

最後に残った4つの章では、私が「問答無用で実践すべき」だと考えているアジャイルなソフトウェアエンジニアリングのプラクティスを紹介していきたい。具体的には次の4つだ。

Page 17: TDD のこころ @ OSH2014

アジャイルなプログラミング

•第12章 ユニットテスト•第13章 リファクタリング•第14章 テスト駆動開発•第15章 継続的インテグレーション

Page 18: TDD のこころ @ OSH2014
Page 19: TDD のこころ @ OSH2014

絶版!

Page 20: TDD のこころ @ OSH2014

「動作するきれいなコード」、ロン・ジェフリーズのこの簡潔な言葉は、TDD(テスト駆動開発)の目標である。動作するきれいなコードは、あらゆる理由で価値がある。

─ Kent Beck

Page 21: TDD のこころ @ OSH2014

動作する、きれいなコードへ

きれい

汚い

(すぐには)動かない 動作する

二つの道がある

Page 22: TDD のこころ @ OSH2014

TDDのサイクル1. 次の目標を考える2. その目標を示すテストを書く3. そのテストを実行して失敗させる(Red)4. 目的のコードを書く5. 2で書いたテストを成功させる(Green)6. テストが通るままでリファクタリングを行う(Refactor)

7. 1~6を繰り返す

Page 23: TDD のこころ @ OSH2014

きれい

汚い

(すぐには)動かない 動作する

Red

Green

Refactoring

TDDと黄金の回転

Page 24: TDD のこころ @ OSH2014
Page 25: TDD のこころ @ OSH2014

絶版!

Page 26: TDD のこころ @ OSH2014
Page 27: TDD のこころ @ OSH2014

TDDのこころ

Page 28: TDD のこころ @ OSH2014

一つずつ少しずつ 段を

小さく

Page 29: TDD のこころ @ OSH2014

ひとりずつ対処する。

複数を相手にしない。

Page 30: TDD のこころ @ OSH2014

すばやくまわす

Page 31: TDD のこころ @ OSH2014

自分が最初のユーザ

Page 32: TDD のこころ @ OSH2014

不安をテストに

Page 33: TDD のこころ @ OSH2014

命綱を編む

Page 34: TDD のこころ @ OSH2014

•即座にフィードバックを得るため•書いたコードに自信を持つため•これから書くコードに自信を持つため

TDD や Developer Testing にソフトウェア工学的なメリットはいろいろあるけれど、最大の理由は工学的なものではない。最大の理由は心理的なもの

Page 35: TDD のこころ @ OSH2014

テストは目的ではなく手段

Page 36: TDD のこころ @ OSH2014

TDDの真の目的

Page 37: TDD のこころ @ OSH2014

健康

Page 38: TDD のこころ @ OSH2014

変化に対応するのは健康体のコード

Page 39: TDD のこころ @ OSH2014

変化に対応するのは健康体のチーム

Page 40: TDD のこころ @ OSH2014

不安の克服健康の維持

Page 41: TDD のこころ @ OSH2014

デモ

Page 42: TDD のこころ @ OSH2014

FizzBuzz問題Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

1から100までの数をプリントするプログラムを書け。ただし3

の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

http://tickletux.wordpress.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

Page 43: TDD のこころ @ OSH2014

事例

Page 44: TDD のこころ @ OSH2014

© Towersquest, Inc. 2010. all rights reserved.

TDD導入効果(MS, IBM)

44

IBM Driver MS Windows

MS MSN MS Visual Studio

ソースコードサイズ (KLOC)

テストコードサイズ (KLOC)

TDDを採用していない類似プロジェクトでの欠陥密度を1としたときの欠陥密度TDD採用により増加したコード実装時間(管理者の見積による)

41.0 6.0 26.0 155.2

28.5 4.0 23.2 60.3

0.61 0.38 0.24 0.09

15~20% 25~35% 15% 20~25%

N. Nagappan, M. E. Maximilien, T. Bhat and L. Williams: Realizing quality improvement through test driven development: results and experiences of four industrial teams, Journal of Empirical Software Engineering, vol. 13, pp. 289-302 (2008)

Page 45: TDD のこころ @ OSH2014

© Towersquest, Inc. 2010. all rights reserved.

TDD導入効果(エリクソン他)

• TDDを実施した場合に報告されている知見‣ 機能テストでの不具合検出数が18%削減された‣ コーディング(実装)の時間が16%増えた‣ テストのカバレッジが大きくなった

•被験者を対象としたアンケート‣ 96%の被験者がデバッグの工数を減らすと感じた‣ 88%の被験者が要求が洗練されると感じた‣ 92%の被験者がコードの品質を上げると感じた‣ 50%の被験者が開発工数を減らすと感じた

45

Boby George, a and Laurie Williams: A structured experiment of test-driven development, Journal of Information and Software Technology Vol. 46, No. 5, p. 337-342(2004)

Page 46: TDD のこころ @ OSH2014

応用

Page 47: TDD のこころ @ OSH2014

テストの無いコードが既にたくさんある

Page 48: TDD のこころ @ OSH2014
Page 49: TDD のこころ @ OSH2014

JUnit をマスターしたい

Page 50: TDD のこころ @ OSH2014
Page 51: TDD のこころ @ OSH2014

既にデータの入ったデータベースがある

Page 52: TDD のこころ @ OSH2014
Page 53: TDD のこころ @ OSH2014

絶版!

Page 54: TDD のこころ @ OSH2014

FragileTests

テストが脆い

Page 55: TDD のこころ @ OSH2014

テストが遅い

Slow Tests

Page 56: TDD のこころ @ OSH2014
Page 57: TDD のこころ @ OSH2014

どこまでテストすればよいのか

Page 58: TDD のこころ @ OSH2014
Page 59: TDD のこころ @ OSH2014

現実のシステムはもっと複雑だ

Page 60: TDD のこころ @ OSH2014
Page 61: TDD のこころ @ OSH2014

画面のテストはどうすれば?

Page 62: TDD のこころ @ OSH2014
Page 63: TDD のこころ @ OSH2014

組み込みシステムはどうすれば?

Page 64: TDD のこころ @ OSH2014
Page 65: TDD のこころ @ OSH2014
Page 66: TDD のこころ @ OSH2014

おわりに

Page 67: TDD のこころ @ OSH2014

きれい

汚い

(すぐには)動かない 動作する

Red

Green

Refactoring

TDDと黄金の回転

Page 68: TDD のこころ @ OSH2014

本をたどる

Page 69: TDD のこころ @ OSH2014

絶版! 絶版!

絶版!

絶版!

絶版!絶版!

絶版!

Page 70: TDD のこころ @ OSH2014

gihyo.jpの連載『[動画で解説]和田卓人の“テスト駆動開発”講座』

http://gihyo.jp/dev/serial/01/tdd/全20回すべて動画付き解説ニコニコ動画でも見れます

WEB+DB過去記事の特設サイトと動画も

Page 71: TDD のこころ @ OSH2014

TDDはスキルです•ひとりから始められる•テストやTDDはスキルです。つまり…•才能ではなく、習得可能です•量は質に転化します•写経!!

Page 72: TDD のこころ @ OSH2014

テストはプロの嗜み

ご清聴ありがとうございました