テスト駆動開発入門 - c4k meetup#2
TRANSCRIPT
![Page 1: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/1.jpg)
テスト駆動開発入門
第ニ回 Code for Kosen 勉強会,Dec 20 2014
Masashi Shibata
TDDのリズムを掴み,より良いテスト設計へ
![Page 2: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/2.jpg)
自己紹介
・ 芝田 将
・ 電気情報工学科 5 年( 来年度、専攻科)
・ はてなブログ: http://nwpct1.hatenablog.com
・ Python
・ TDDBC in Tokyo
・ C4K勉強会 #1 「暖かい部屋に帰るために」
![Page 3: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/3.jpg)
テストの需要
テストがないコードはレガシーコードだ
レガシーコード実践ガイド
テストのないアプリケーションは壊れています
Testing - Flask Documentation
テスト書いてないとかお前それ@t_wada の前...
![Page 4: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/4.jpg)
こういう経験ないですか?・ プログラムがどんどん肥大化 リファクタリングを試みる 結果が変化 リファクタリングを諦める・ とりあえず実装 書きながら何度も設計を変更 結構時間立ったのに進捗少ない 悲しみ
![Page 5: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/5.jpg)
アジェンダ
・ テスト駆動開発とは
・ 実践してみる
・ テストとは
・ 勉強法等の紹介
![Page 6: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/6.jpg)
テスト駆動開発とは
![Page 7: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/7.jpg)
小さなステップを繰り返してプログラムの「設計と開発」を行っていくソフトウェアの開発手法 .
テスト駆動開発Test Driven Development
![Page 8: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/8.jpg)
コードを書くまでの道のり
汚い
きれい
動く動かない
![Page 9: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/9.jpg)
TDDのステップ
1. これから書く機能に対するテストを 1つ書き、 テストが失敗することを確認 (RED)2. 最小限のコードを実装することによって テストを通す (GREEN)3. リファクタリングを行う (リファクタリング )
繰り返す
![Page 10: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/10.jpg)
引用: http://d.hatena.ne.jp/shuji_w6e/20110429/1304079615
TDDと黄金の回転
汚い
きれい
動く動かない
![Page 11: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/11.jpg)
・ 大きなものは小さく分割・ テストは個別撃破!・ 素早くテンポよく繰り返す
「小さく 個別に 素早く」
TDDのこころ
![Page 12: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/12.jpg)
実践してみる
![Page 13: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/13.jpg)
FizzBazz
1から 100までの数をプリントするプログラムを書け。 ただし 3の倍数のときは数の代わりに「Fizz」と、 5 の倍数のときは「Buzz」とプリントし、 3 と 5両方の倍数の場合には「FizzBuzz」とプリントすること。
![Page 14: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/14.jpg)
・ Assert First・ 仮実装(Fake it)・ 三角測量(Triangulation)・ 明白な実装(Obvious implementation)・ リファクタリング(Refactor)
用語
![Page 15: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/15.jpg)
正規表現を使って、何らかのパターンマッチング 自信を持って実装できますか? 正規表現ライブラリの使い方は?→ 「不安」ならテストでコントロール
どこまでテストするのか
テストの最小単位は不安 ー 和田 卓人
![Page 16: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/16.jpg)
TDDのメリット
・ 素早いフィードバック
・ 実行可能なドキュメント
・ 工数は 2割増えるがバグは大幅に減る
・ 「不安」をコントロール
・書いたコードに自身を持つ ・これから書くコードに自身を持つ
![Page 17: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/17.jpg)
引用 :http://www.slideshare.net/t_wada/the-spirit-of-tdd
![Page 18: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/18.jpg)
テストとは
![Page 19: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/19.jpg)
・ 単体テスト・ 結合テスト・ 機能テスト・ 受け入れテスト・ パフォーマンステスト・ etc...
テスト
対象や観点によって様々
![Page 20: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/20.jpg)
テストを分類・ Developer Testing 開発者が行うテスト 開発促進(単体テストなど)・ Customer Testing 顧客が行うテスト 進捗管理・機能要件の検証(受け入れテストなど)・ QA Testing 非機能要件に関するテスト 品質保証
![Page 21: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/21.jpg)
システムの変更方法1. 編集して祈る
2. 保護して変更する
![Page 22: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/22.jpg)
もし、テストコードなしで大幅な修正を加えるとしたら、信じられないほどのスキルと明確な理解が必要になる
レガシーコード改善ガイド
![Page 23: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/23.jpg)
テストとはエラーをみつけるつもりでプログラムを実行する過程である。
ソフトウェアテストの技法より
TDDは定義のテスト
「動作するきれいなコード」、ロン・ジェフシリーズのこの簡潔な言葉は、TDD( テスト駆動開発 )の目標である。動作するきれいなコードはあらゆる理由で価値がある。
ー Kent Beck
![Page 24: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/24.jpg)
・ 実験結果を解析するプログラムを書いた場合、 出力が数値だと、それが正しいのか目で見て 判断するのが難しい。
・ テストがないと実験結果が正しいか不安になる 人も多いけど、テストを書いていれば少なくとも テストにかかれてある振舞いを満たしている。
研究におけるテスト
![Page 25: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/25.jpg)
勉強法
![Page 26: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/26.jpg)
TDDはスキルです・ 才能ではなく技術です・ だから、習得可能です・ 量は質に転化します・ 迷ったら写経してみましょう
ー 和田 卓人
![Page 27: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/27.jpg)
TDDを習得するには?
1. ペアプログラミング
TDDのリズムが身につく
→ 相手いない?
2. 写経
→ 1 人でもできる
![Page 28: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/28.jpg)
言語マスターするために、テストとかテスト駆動開発を私は積極的に利用しています ー 和田 卓人
言語を習得してからテスト?
![Page 29: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/29.jpg)
xUnit Test Patterns
著者: Gererd Meszaros
よりよいテスト設計を
![Page 30: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/30.jpg)
TDDの原典
著者: Kent Beck今でも TDDに精通する多くのプログラマが推薦
但し 絶版
![Page 31: テスト駆動開発入門 - C4K Meetup#2](https://reader031.vdocuments.site/reader031/viewer/2022013113/587a3e911a28abdb1c8b7bb1/html5/thumbnails/31.jpg)
ご清聴ありがとうございました