tddはじめる前に

69
TDD はははははは ははははははははははは 2016.06.24 ははは / はははは

Upload: yasui-tsutomu

Post on 21-Jan-2017

1.326 views

Category:

Software


0 download

TRANSCRIPT

Page 1: TDDはじめる前に

TDDはじめる前に

アジャイルひよこクラブ2016.06.24

安井力 / やっとむ

Page 2: TDDはじめる前に

安井 力 / やっとむ

プログラマーJava Python Ruby JavaScript

テスト駆動開発

アジャイルコーチワークショップ 現場導入 技術支援

認定スクラムマスター

コンサルタントモデリング ユーザーストーリー

twitter:@yattom facebook:yattomgithub:yattom bitbucket:yattom

Page 3: TDDはじめる前に
Page 4: TDDはじめる前に
Page 5: TDDはじめる前に

テスト書いてますか?

Page 6: TDDはじめる前に

• テストしてる?• テスト自動化してる?• TDD してる?

Page 7: TDDはじめる前に

TDD したい?

Page 8: TDDはじめる前に

• TDD• Test Driven Development• テスト駆動開発

Page 9: TDDはじめる前に
Page 10: TDDはじめる前に

• 動作するきれいなコード

Page 11: TDDはじめる前に

• 動作する

Page 12: TDDはじめる前に

• きれい

Page 13: TDDはじめる前に

動作する、きれいなコード

きれい

汚い

( すぐには ) 動かない 動作する

Page 14: TDDはじめる前に

テスト駆動開発

Page 15: TDDはじめる前に

• 1. テストを書く• 2. 実行して失敗させる• 3. テストが通る実装を書く• 4. テストを成功させる• 5. テストが通る状態のままリファクタリングする

Page 16: TDDはじめる前に

動作する、きれいなコードへ

きれい

汚い

( すぐには ) 動かない 動作する

二つの道がある

Page 17: TDDはじめる前に

TDD でサイクルにする

きれい

汚い

( すぐには ) 動かない 動作する

Page 18: TDDはじめる前に

きれい

汚い

( すぐには ) 動かない 動作する

Red

Green

Refactoring

TDD と黄金の回転

t-wadasaid…

Page 19: TDDはじめる前に

• 自信と安心

Page 20: TDDはじめる前に

テストファースト

Page 21: TDDはじめる前に
Page 22: TDDはじめる前に
Page 23: TDDはじめる前に

テスト駆動開発の効果

IBMドライバ

MicrosoftWindows

MicrosoftMSN

MicrosoftVisualStudio

チーム人数 9 6 5-7 7コード量(KLOC)

41.0 6.0 26.0 155.2

開発規模 ( 人月 )

119 24 46 20

欠陥数(TDD 未使用に対する )

61% 38% 24% 9%

開発時間の増加( 管理者の見積 )

15 ~20 %

25 ~35 %

15 % 20 ~ 25 %

Nachiappan Nagappan, E. Michael Maximilien, Thirumalesh Bhat, Laurie Williams “Realizing quality improvement through test driven development: results and experiences of four industrial teams” 2008http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf

Page 24: TDDはじめる前に

保守性への影響

生産性( 行数 / 工数 )

保守性 ※ 1

( 工数 / 変更件数 )

プロジェクト A( 非 TDD)

2.3 84

プロジェクト B( 非 TDD)

2.5 80

プロジェクト C(TDD)

1.8 59※1 保守期間 (260 日間 ) 中、変更要求の対応にかかった工数の平均

"The effectiveness of test-driven development: an industrial case study"(Tomazˇ Dogsˇa • David Baticˇ , Software Qual J (2011))

Page 25: TDDはじめる前に

TDD の効果の研究をまとめた研究

"Effects of Test-Driven Development: A Comparative Analysis of Empirical Studies" Simo Makinen and Jurgen Munch, 2013• 既存の実証研究を調査し、 10 の内部・外部品質評価項目で、

各研究の結論を整理した• TDD は欠陥の作り込み (introduced defects) を減らし、メン

テナンスしやすいコードを産む• TDD で実装されたコードは、部分的に、サイズが小さく、複

雑度が低い場合がある• メンテナンスがしやすくなるものの、初期開発では時間がか

かる

Page 26: TDDはじめる前に

TDD の効果の研究をまとめた研究

やっとむ TDD 検索

Page 27: TDDはじめる前に
Page 28: TDDはじめる前に

テスト駆動開発

Page 29: TDDはじめる前に

• TDD のテストはテストではない!! …のか?

Page 31: TDDはじめる前に

• テスティング Testing• チェッキング Checking

Page 32: TDDはじめる前に

アジャイルテスト 高品質を追求するアジャイルチームにおけるテストの視点 増田聡 Developer Summit 2010http://www.slideshare.net/satoshimasuda/ss-3241717

TDDのテスト

Page 33: TDDはじめる前に

• 品質のためのテスト - ユニットテスト -TDD のテスト

Page 34: TDDはじめる前に

JaSST’11 Tokyo 新しい TDD アプローチ http://togetter.com/li/93719

Page 35: TDDはじめる前に

テスト自動化のメリット

• 回帰テスト• 追加 / 変更が容易、安心• 品質管理しやすい、品質向上• 機能横断と多能工• 依存性排除

• 他にもたくさん!

Page 36: TDDはじめる前に

• システムテスト自動化標準ガイド

Page 37: TDDはじめる前に

• ソフトウェアテスト技法ドリル

Page 38: TDDはじめる前に

テスト書きたい?

Page 39: TDDはじめる前に

• TDD× テスト自動化

Page 40: TDDはじめる前に

• TDD×BDD( 振る舞い駆動開発 )

Page 41: TDDはじめる前に

品質の作り込み

Page 42: TDDはじめる前に

品質の作り込み

Page 43: TDDはじめる前に

• テスト駆動開発≠テスト自動化+開発• 両方欲しい!

Page 44: TDDはじめる前に

• TDD していれば自動テストが書ける

• 試験性• ISO/IEC 9126 ソフトウェアの品質特性

Page 45: TDDはじめる前に

TDD してる?

• NO!

Page 46: TDDはじめる前に
Page 47: TDDはじめる前に

IPA 情報処理推進機構アジャイル型開発におけるプラクティス活用事例調査http://www.ipa.go.jp/sec/softwareengineering/reports/20130319.html

Page 48: TDDはじめる前に

A Comparative Case Study on the Impact of Test-Driven Development on Program Design and Test CoverageMaria Siniaalto and Pekka Abrahamsson, ESEM, 2007http://se.inf.ethz.ch/old/teaching/2010-S/0276/slides/pletikosa.pdf

結合度 : TDD が悪く見えるけど微妙凝集度 : TDD の経験が足らないテストカバレッジ : TDD は非常に良い

Page 49: TDDはじめる前に

TDD の効果の研究をまとめた研究

やっとむ TDD 検索

良い影響より影響なしのほうが多い

TDD は無意味

Page 50: TDDはじめる前に

Jim Coplien ( ジム・コプリン )『組織パターン』著者スクラムの成立に影響

Page 51: TDDはじめる前に

https://www.facebook.com/yattom/posts/731467806867197

私が Facebook に TDD のことを書いたら

すごい爆撃を食らった

TDD は悪い設計を生むそういう研究論文が多数ある

TDD より優れたやり方がある人に TDD勧めるとかお前ふざけんな

Page 52: TDDはじめる前に

DHH( デイヴィッド・ハイネマイヤー・ハンソン )

Rubyist, Ruby on Rails を作った人Basecamp (37signals)http://david.heinemeierhansson.com/

Page 53: TDDはじめる前に

http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.htmlhttp://d.hatena.ne.jp/yach/20140424

TDD は死んだテスティングよ栄えよ

Page 54: TDDはじめる前に

きょんさん (うさ耳)テストアーキテクト

マサカリが痛い なごや方面

Page 55: TDDはじめる前に

http://www.slideshare.net/KyonMm/in-tech-talk

TDD の自殺

Page 56: TDDはじめる前に

Additionally…TDD damages or breaks an architectureTDD people have forgotten the knowledge of testing and quality (as in Quality Assurance)So TDD has little or even negative effects on quality

TDD はアーキテクチャを破壊するTDD やアジャイルの人は

テストや品質保証の知識が足らない

Page 57: TDDはじめる前に

https://www.flickr.com/photos/iancarroll/4149865894/

Page 58: TDDはじめる前に

•「 TDD問題解決」• ≠•「壺を買えば幸せに!」

Page 59: TDDはじめる前に

• TDD はツール• 訓練になる• 個人でもチームでも使える• 問題解決に役立つ ( こともある )

Page 60: TDDはじめる前に

• Yattom said…•個人的には好き• チームではできないことが多い• 使うときも 100% ではない 知らない領域、試行錯誤

Page 61: TDDはじめる前に

• T-wada said…•ミスったときや、悩んだとき• テストは書く TDD とは限らない• 間合いを調節、制御するのに TDD を利用する•色々なツールのひとつとして

Page 62: TDDはじめる前に

•太田健一郎 said…•徹底的にやり込んで熟練すると使いどころがわかるようにな

• Martin Fowler も同じことを言っている

Page 63: TDDはじめる前に

• 実践テスト駆動開発

Page 64: TDDはじめる前に

TDD するために

Page 65: TDDはじめる前に

• TDD できるようになる• 効果を上げられるようになる• 人に説明できるようになる

Page 66: TDDはじめる前に

• 現状の問題を識別、顕在化する• TDD で解決 /改善できる筋道を付ける

Page 67: TDDはじめる前に

•仲間を増やす• 上達し、実績をつくる• フィードバックのツールとしていつでも使えるようにしてお

Page 68: TDDはじめる前に

続きは……

•『テスト駆動開発入門』 (絶版中 ; 復刊の噂も? )• バイブル

•[動画で解説]和田卓人の“テスト駆動開発”講座• http://gihyo.jp/dev/serial/01/tdd/ • 実際に手を動かすために (無料 )

• [ペアプロ ][TDD]ペアプロ・ TDD の『お題』をまとめてみた• http://d.hatena.ne.jp/absj31/20120721/1342880403 • 練習、素振り、写経のために

•『レガシーコード改善ガイド』 (翔泳社 )• テストのないところにテストを書くには

•『実践テスト駆動開発』 (翔泳社 )• TDD をやりすぎてみる

•『ソフトウェアテスト技法ドリル』 ( 日科技連出版社 )• テスト技法を基礎から学ぶ

• Hey It’s Not My TDD! http://slideshare.net/yattom/hey-its-not-my-tdd • 今日のスライドよりちょっと突っ込んで解説

Page 69: TDDはじめる前に

おしまい