java-ja 8th tdd
TRANSCRIPT
![Page 1: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/1.jpg)
第一回チキチキ日本ペアプログラミングの会java-ja支部会
![Page 2: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/2.jpg)
自己紹介名前: 和田 卓人 (わだ たくと)
ブログ: http://d.hatena.ne.jp/t-wada
メール: [email protected]
Twitter: http://twitter.com/t_wada
タワーズ・クエスト株式会社 プログラマ 兼 取締役社長
![Page 3: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/3.jpg)
これまで書いたものWEB + DB PRESSvol.35 「実演! テスト駆動開発」vol.37 「実演! リファクタリング」vol.42 「REST特集」LifeHacks PRESSオープンソースマガジン(リレーコラム)他いろいろ
![Page 4: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/4.jpg)
gihyo.jpの連載『[動画で解説]和田卓人の“テスト駆動開発”講座』http://gihyo.jp/dev/serial/01/tdd/全20回すべて動画付き解説ニコニコ動画でも見れます
WEB+DB過去記事の特設サイトと動画も
![Page 5: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/5.jpg)
Agenda•Developer TestingとTDD•デモ•リズム / つぶやき / 間合い•ペアプロ実演
![Page 6: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/6.jpg)
Developer TestingとTDD
![Page 7: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/7.jpg)
テストの分類DeveloperTesting
開発者
開発促進
CustomerTesting
顧客(のロール)
進捗管理
QATesting
品質保証担当者(のロール)
品質保証
「テスト」
![Page 8: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/8.jpg)
Developer Testingとは
•プログラマの•プログラマによる•プログラマのための•プログラムとしてのテストを書きながら•開発を行っていく手法がDeveloper Testing
![Page 9: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/9.jpg)
動作する、きれいなコードへ
きれい
汚い
(すぐには)動かない 動作する
二つの道がある
![Page 10: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/10.jpg)
TDDのサイクル1. テストを書き2. そのテストを実行して失敗させ(Red)3. 目的のコードを書き4. 1で書いたテストを成功させ(Green)5. テストが通るままでリファクタリングを行う(Refactor)
6. 1~5を繰り返す
![Page 11: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/11.jpg)
TDDとコード
きれい
汚い
(すぐには)動かない 動作する
Red
Green
Refactoring
![Page 12: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/12.jpg)
デモ
![Page 13: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/13.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 14: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/14.jpg)
ukaiさんのお題• 制限を加える(ループを使わないで書く、剰余を使わないで書く、…)
• printせず list にしてかえす• FizzBuzzをテストするプログラムを書く• 3とか5がパラメータ化されているとして、出力からそのパラメータを調べる
http://blogger.ukai.org/2007/09/itpro-challenge.html
![Page 15: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/15.jpg)
開発環境
• Eclipse 3.4(Ganymede) M4• Subversive• Quick-JUnit
• JUnit 4.4
![Page 16: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/16.jpg)
1st iteration
![Page 17: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/17.jpg)
掘り下げるか、積み上げるか
不安をテストにする
構成要素に不安があるのか
全体像に不安があるのか
![Page 18: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/18.jpg)
TDDの基本テクニック
• テストファースト• アサートファースト
• 仮実装(Fake it)• 三角測量(Triangulation)• 明白な実装(Obvious Implementation)
![Page 19: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/19.jpg)
2nd iteration
![Page 20: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/20.jpg)
Design for Testability
• テストしやすいコードを書くためには?• テストから先に書く => テスト可能になる• テストを考える = 設計を考える
![Page 21: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/21.jpg)
間合いを測る• 対象を見定める• ゴールへの距離を感じる
• 不安は何か• 何なら不安でないか• 小さな一歩を考える
• 一度にひとつずつ
![Page 22: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/22.jpg)
3rd iteration
![Page 23: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/23.jpg)
Refactoring
• 呼吸をするようにリファクタリングする• Rename (改名)• Extract (抽出)• Inline (インライン化)
![Page 24: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/24.jpg)
帽子• ロールを「帽子」だと考えてみる• 帽子を取り替えながら開発する• 開発者の帽子• 顧客の帽子• 品質の帽子
![Page 25: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/25.jpg)
おわりに
![Page 26: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/26.jpg)
テストはスキルです• テストやTDDはスキルです。つまり…• 才能ではなく、習得可能です• 量は質に転化します• 写経!!
![Page 27: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/27.jpg)
参考文献
![Page 28: java-ja 8th TDD](https://reader033.vdocument.in/reader033/viewer/2022052411/5564aff7d8b42a3e618b47ea/html5/thumbnails/28.jpg)
Thank you.