tdd のこころ @ osh2014
DESCRIPTION
at Open Seminar Hiroshima 2014 (#osh2014) 2014.02.01 (Sat) http://osh-2014.github.io/TRANSCRIPT
![Page 1: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/1.jpg)
TDDのこころ
和田 卓人 (a.k.a id:t-wada or @t_wada)Feb 1, 2014 @ OSH2014
![Page 2: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/2.jpg)
和田 卓人id: t-wada@t_wadagithub: twada
![Page 3: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/3.jpg)
![Page 4: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/4.jpg)
![Page 5: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/5.jpg)
よろしくおねがいします
![Page 6: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/6.jpg)
こんな風景
![Page 7: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/7.jpg)
荒みきったコード
![Page 8: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/8.jpg)
疲弊しきった現場
![Page 9: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/9.jpg)
爆弾処理のようなリリース
![Page 10: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/10.jpg)
なぜこうなってしまうのか?
![Page 11: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/11.jpg)
http://blogs.itmedia.co.jp/hiranabe/2012/09/rightwing-and-leftwing-of-agile.html
![Page 12: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/12.jpg)
左サイドだけでは点は取れない
![Page 13: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/13.jpg)
誰がシステムを作り続ける
のか
![Page 14: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/14.jpg)
TDDとは?
![Page 15: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/15.jpg)
![Page 16: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/16.jpg)
最後に残った4つの章では、私が「問答無用で実践すべき」だと考えているアジャイルなソフトウェアエンジニアリングのプラクティスを紹介していきたい。具体的には次の4つだ。
![Page 17: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/17.jpg)
アジャイルなプログラミング
•第12章 ユニットテスト•第13章 リファクタリング•第14章 テスト駆動開発•第15章 継続的インテグレーション
![Page 18: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/18.jpg)
![Page 19: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/19.jpg)
絶版!
![Page 20: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/20.jpg)
「動作するきれいなコード」、ロン・ジェフリーズのこの簡潔な言葉は、TDD(テスト駆動開発)の目標である。動作するきれいなコードは、あらゆる理由で価値がある。
─ Kent Beck
![Page 21: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/21.jpg)
動作する、きれいなコードへ
きれい
汚い
(すぐには)動かない 動作する
二つの道がある
![Page 22: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/22.jpg)
TDDのサイクル1. 次の目標を考える2. その目標を示すテストを書く3. そのテストを実行して失敗させる(Red)4. 目的のコードを書く5. 2で書いたテストを成功させる(Green)6. テストが通るままでリファクタリングを行う(Refactor)
7. 1~6を繰り返す
![Page 23: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/23.jpg)
きれい
汚い
(すぐには)動かない 動作する
Red
Green
Refactoring
TDDと黄金の回転
![Page 24: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/24.jpg)
![Page 25: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/25.jpg)
絶版!
![Page 26: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/26.jpg)
![Page 27: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/27.jpg)
TDDのこころ
![Page 28: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/28.jpg)
一つずつ少しずつ 段を
小さく
![Page 29: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/29.jpg)
ひとりずつ対処する。
複数を相手にしない。
![Page 30: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/30.jpg)
すばやくまわす
![Page 31: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/31.jpg)
自分が最初のユーザ
![Page 32: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/32.jpg)
不安をテストに
![Page 33: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/33.jpg)
命綱を編む
![Page 34: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/34.jpg)
•即座にフィードバックを得るため•書いたコードに自信を持つため•これから書くコードに自信を持つため
TDD や Developer Testing にソフトウェア工学的なメリットはいろいろあるけれど、最大の理由は工学的なものではない。最大の理由は心理的なもの
![Page 35: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/35.jpg)
テストは目的ではなく手段
![Page 36: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/36.jpg)
TDDの真の目的
![Page 37: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/37.jpg)
健康
![Page 38: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/38.jpg)
変化に対応するのは健康体のコード
![Page 39: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/39.jpg)
変化に対応するのは健康体のチーム
![Page 40: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/40.jpg)
不安の克服健康の維持
![Page 41: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/41.jpg)
デモ
![Page 42: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/43.jpg)
事例
![Page 44: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/44.jpg)
© 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](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/45.jpg)
© 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](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/46.jpg)
応用
![Page 47: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/47.jpg)
テストの無いコードが既にたくさんある
![Page 48: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/48.jpg)
![Page 49: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/49.jpg)
JUnit をマスターしたい
![Page 50: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/50.jpg)
![Page 51: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/51.jpg)
既にデータの入ったデータベースがある
![Page 52: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/52.jpg)
![Page 53: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/53.jpg)
絶版!
![Page 54: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/54.jpg)
FragileTests
テストが脆い
![Page 55: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/55.jpg)
テストが遅い
Slow Tests
![Page 56: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/56.jpg)
![Page 57: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/57.jpg)
どこまでテストすればよいのか
![Page 58: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/58.jpg)
![Page 59: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/59.jpg)
現実のシステムはもっと複雑だ
![Page 60: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/60.jpg)
![Page 61: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/61.jpg)
画面のテストはどうすれば?
![Page 62: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/62.jpg)
![Page 63: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/63.jpg)
組み込みシステムはどうすれば?
![Page 64: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/64.jpg)
![Page 65: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/65.jpg)
![Page 66: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/66.jpg)
おわりに
![Page 67: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/67.jpg)
きれい
汚い
(すぐには)動かない 動作する
Red
Green
Refactoring
TDDと黄金の回転
![Page 68: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/68.jpg)
本をたどる
![Page 69: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/69.jpg)
絶版! 絶版!
絶版!
絶版!
絶版!絶版!
絶版!
![Page 70: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/70.jpg)
gihyo.jpの連載『[動画で解説]和田卓人の“テスト駆動開発”講座』
http://gihyo.jp/dev/serial/01/tdd/全20回すべて動画付き解説ニコニコ動画でも見れます
WEB+DB過去記事の特設サイトと動画も
![Page 71: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/71.jpg)
TDDはスキルです•ひとりから始められる•テストやTDDはスキルです。つまり…•才能ではなく、習得可能です•量は質に転化します•写経!!
![Page 72: TDD のこころ @ OSH2014](https://reader035.vdocuments.site/reader035/viewer/2022062307/553ade565503461c478b4603/html5/thumbnails/72.jpg)
テストはプロの嗜み
ご清聴ありがとうございました