テスト駆動開発入門 - c4k meetup#2
TRANSCRIPT
テスト駆動開発入門
第ニ回 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に精通する多くのプログラマが推薦
但し 絶版
ご清聴ありがとうございました