テスト駆動開発入門 - c4k meetup#2

31
テスト駆動開発入門 第ニ回 Code for Kosen 勉強会,Dec 20 2014 Masashi Shibata TDD のリズムを掴み , より良いテスト設計へ

Upload: masashi-shibata

Post on 15-Apr-2017

338 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: テスト駆動開発入門 - C4K Meetup#2

テスト駆動開発入門

第ニ回 Code for Kosen 勉強会,Dec 20 2014

Masashi Shibata

TDDのリズムを掴み,より良いテスト設計へ

Page 2: テスト駆動開発入門 - C4K Meetup#2

自己紹介

・ 芝田 将

・ 電気情報工学科 5 年( 来年度、専攻科)

・ はてなブログ: http://nwpct1.hatenablog.com

・ Python

・ TDDBC in Tokyo

・ C4K勉強会 #1 「暖かい部屋に帰るために」

Page 3: テスト駆動開発入門 - C4K Meetup#2

テストの需要

テストがないコードはレガシーコードだ

 レガシーコード実践ガイド

テストのないアプリケーションは壊れています

 Testing - Flask Documentation

テスト書いてないとかお前それ@t_wada の前...

Page 4: テスト駆動開発入門 - C4K Meetup#2

こういう経験ないですか?・ プログラムがどんどん肥大化 リファクタリングを試みる 結果が変化 リファクタリングを諦める・ とりあえず実装 書きながら何度も設計を変更  結構時間立ったのに進捗少ない 悲しみ

Page 5: テスト駆動開発入門 - C4K Meetup#2

アジェンダ

・ テスト駆動開発とは

・ 実践してみる

・ テストとは

・ 勉強法等の紹介

Page 6: テスト駆動開発入門 - C4K Meetup#2

テスト駆動開発とは

Page 7: テスト駆動開発入門 - C4K Meetup#2

小さなステップを繰り返してプログラムの「設計と開発」を行っていくソフトウェアの開発手法 .

テスト駆動開発Test Driven Development

Page 8: テスト駆動開発入門 - C4K Meetup#2

コードを書くまでの道のり

汚い

きれい

動く動かない

Page 9: テスト駆動開発入門 - C4K Meetup#2

TDDのステップ

1. これから書く機能に対するテストを 1つ書き、  テストが失敗することを確認 (RED)2. 最小限のコードを実装することによって  テストを通す (GREEN)3. リファクタリングを行う (リファクタリング )

繰り返す

Page 10: テスト駆動開発入門 - C4K Meetup#2

引用: http://d.hatena.ne.jp/shuji_w6e/20110429/1304079615

TDDと黄金の回転

汚い

きれい

動く動かない

Page 11: テスト駆動開発入門 - C4K Meetup#2

・ 大きなものは小さく分割・ テストは個別撃破!・ 素早くテンポよく繰り返す

「小さく 個別に 素早く」

TDDのこころ

Page 12: テスト駆動開発入門 - C4K Meetup#2

実践してみる

Page 13: テスト駆動開発入門 - C4K Meetup#2

FizzBazz

1から 100までの数をプリントするプログラムを書け。 ただし 3の倍数のときは数の代わりに「Fizz」と、 5 の倍数のときは「Buzz」とプリントし、 3 と 5両方の倍数の場合には「FizzBuzz」とプリントすること。

Page 14: テスト駆動開発入門 - C4K Meetup#2

・ Assert First・ 仮実装(Fake it)・ 三角測量(Triangulation)・ 明白な実装(Obvious implementation)・ リファクタリング(Refactor)

用語

Page 15: テスト駆動開発入門 - C4K Meetup#2

正規表現を使って、何らかのパターンマッチング 自信を持って実装できますか? 正規表現ライブラリの使い方は?→ 「不安」ならテストでコントロール

どこまでテストするのか

テストの最小単位は不安      ー 和田 卓人

Page 16: テスト駆動開発入門 - C4K Meetup#2

TDDのメリット

・ 素早いフィードバック

・ 実行可能なドキュメント

・ 工数は 2割増えるがバグは大幅に減る

・ 「不安」をコントロール

 ・書いたコードに自身を持つ ・これから書くコードに自身を持つ

Page 17: テスト駆動開発入門 - C4K Meetup#2

引用 :http://www.slideshare.net/t_wada/the-spirit-of-tdd

Page 18: テスト駆動開発入門 - C4K Meetup#2

テストとは

Page 19: テスト駆動開発入門 - C4K Meetup#2

・ 単体テスト・ 結合テスト・ 機能テスト・ 受け入れテスト・ パフォーマンステスト・ etc...

テスト

対象や観点によって様々

Page 20: テスト駆動開発入門 - C4K Meetup#2

テストを分類・ Developer Testing  開発者が行うテスト  開発促進(単体テストなど)・ Customer Testing  顧客が行うテスト  進捗管理・機能要件の検証(受け入れテストなど)・ QA Testing  非機能要件に関するテスト  品質保証

Page 21: テスト駆動開発入門 - C4K Meetup#2

システムの変更方法1. 編集して祈る

2. 保護して変更する

Page 22: テスト駆動開発入門 - C4K Meetup#2

もし、テストコードなしで大幅な修正を加えるとしたら、信じられないほどのスキルと明確な理解が必要になる

レガシーコード改善ガイド

Page 23: テスト駆動開発入門 - C4K Meetup#2

テストとはエラーをみつけるつもりでプログラムを実行する過程である。

ソフトウェアテストの技法より

TDDは定義のテスト

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

ー Kent Beck

Page 24: テスト駆動開発入門 - C4K Meetup#2

・ 実験結果を解析するプログラムを書いた場合、 出力が数値だと、それが正しいのか目で見て 判断するのが難しい。

・ テストがないと実験結果が正しいか不安になる 人も多いけど、テストを書いていれば少なくとも テストにかかれてある振舞いを満たしている。

研究におけるテスト

Page 25: テスト駆動開発入門 - C4K Meetup#2

勉強法

Page 26: テスト駆動開発入門 - C4K Meetup#2

TDDはスキルです・ 才能ではなく技術です・ だから、習得可能です・ 量は質に転化します・ 迷ったら写経してみましょう

ー 和田 卓人

Page 27: テスト駆動開発入門 - C4K Meetup#2

TDDを習得するには?

1. ペアプログラミング

  TDDのリズムが身につく

 → 相手いない?

2. 写経

  → 1 人でもできる

Page 28: テスト駆動開発入門 - C4K Meetup#2

言語マスターするために、テストとかテスト駆動開発を私は積極的に利用しています        ー 和田 卓人

言語を習得してからテスト?

Page 29: テスト駆動開発入門 - C4K Meetup#2

xUnit Test Patterns

著者: Gererd Meszaros

よりよいテスト設計を

Page 30: テスト駆動開発入門 - C4K Meetup#2

TDDの原典

著者: Kent Beck今でも TDDに精通する多くのプログラマが推薦

但し 絶版

Page 31: テスト駆動開発入門 - C4K Meetup#2

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