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

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