Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
TDD
はじめる前に
アジャイルひよこクラブ
2016.06.24
安井力 / やっとむ
安井 力 / やっとむ
プログラマー
Java Python Ruby JavaScript
テスト駆動開発
アジャイルコーチ
ワークショップ 現場導入 技術支援
認定スクラムマスター
コンサルタント
モデリング ユーザーストーリー
twitter:@yattom facebook:yattom
github:yattom bitbucket:yattom
TDDはじめる前に
TDDはじめる前に
テスト書いてますか?
• テストしてる?
• テスト自動化してる?
• TDDしてる?
TDDしたい?
• TDD
• Test Driven Development
• テスト駆動開発
TDDはじめる前に
• 動作するきれいなコード
• 動作する
• きれい
動作する、きれいなコード
きれい
汚い
(すぐには)動かない 動作する
テスト駆動開発
• 1. テストを書く
• 2. 実行して失敗させる
• 3. テストが通る実装を書く
• 4. テストを成功させる
• 5. テストが通る状態のままリファクタリングする
動作する、きれいなコードへ
きれい
汚い
(すぐには)動かない 動作する
二つの道がある
TDDでサイクルにする
きれい
汚い
(すぐには)動かない 動作する
きれい
汚い
(すぐには)動かない 動作する
Green
Refactoring
TDDと黄金の回転
• 自信と安心
テストファースト
TDDはじめる前に
TDDはじめる前に
テスト駆動開発の効果
IBM
ドライバ
Microsoft
Windows
Microsoft
MSN
Microsoft
VisualStudio
チーム人数 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” 2008
http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf
保守性への影響
生産性
(行数/工数)
保守性 ※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))
TDDの効果の研究をまとめた研究
"Effects of Test-Driven Development: A
Comparative Analysis of Empirical Studies" Simo
Makinen and Jurgen Munch, 2013
• 既存の実証研究を調査し、10の内部・外部品質評価項目で、各
研究の結論を整理した
• TDDは欠陥の作り込み(introduced defects)を減らし、メンテナ
ンスしやすいコードを産む
• TDDで実装されたコードは、部分的に、サイズが小さく、複雑
度が低い場合がある
• メンテナンスがしやすくなるものの、初期開発では時間がかか
る
TDDの効果の研究をまとめた研究
やっとむ TDD 検索
TDDはじめる前に
テスト駆動開発
• TDDのテストはテストではない!! …のか?
http://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html
• テスティング Testing
• チェッキング Checking
アジャイルテスト 高品質を追求するアジャイルチームにおけるテストの視点 増田聡 Developer Summit 2010
http://www.slideshare.net/satoshimasuda/ss-3241717
• 品質のためのテスト-ユニットテスト-TDDのテスト
JaSST’11 Tokyo 新しいTDDアプローチ http://togetter.com/li/93719
テスト自動化のメリット
• 回帰テスト
• 追加/変更が容易、安心
• 品質管理しやすい、品質向上
• 機能横断と多能工
• 依存性排除
• 他にもたくさん!
• システムテスト自動化標準ガイド
• ソフトウェアテスト技法ドリル
テスト書きたい?
• TDD×テスト自動化
• TDD×BDD(振る舞い駆動開発)
品質の作り込み
品質の作り込み
• テスト駆動開発≠テスト自動化+開発
• 両方欲しい!
• TDDしていれば自動テストが書ける
• 試験性
• ISO/IEC 9126 ソフトウェアの品質特性
TDDしてる?
• NO!
TDDはじめる前に
IPA 情報処理推進機構
アジャイル型開発におけるプラクティス活用事例調査
http://www.ipa.go.jp/sec/softwareengineering/reports/20130319.html
A Comparative Case Study on the Impact of Test-Driven Development on Program Design and Test Coverage
Maria Siniaalto and Pekka Abrahamsson, ESEM, 2007
http://se.inf.ethz.ch/old/teaching/2010-S/0276/slides/pletikosa.pdf
結合度: TDDが悪く見えるけど微妙
凝集度: TDDの経験が足らない
テストカバレッジ: TDDは非常に良い
TDDの効果の研究をまとめた研究
やっとむ TDD 検索
良い影響より
影響なしのほうが多い
TDDは無意味
Jim Coplien (ジム・コプリン)
『組織パターン』著者
スクラムの成立に影響
https://www.facebook.com/yattom/posts/731467806867197
私がFacebookにTDDのことを書いた
ら
すごい爆撃を食らった
TDDは悪い設計を生
む
そういう研究論文が
多数ある
TDDより優れた
やり方がある
人にTDD勧めるとか
お前ふざけんな
DHH(デイヴィッド・ハイネマイヤー・ハンソ
ン)
Rubyist, Ruby on Railsを作った人
http://david.heinemeierhansson.com/
http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html
http://d.hatena.ne.jp/yach/20140424
TDDは死んだ
テスティングよ栄えよ
きょんさん (うさ耳)
テストアーキテクト
マサカリが痛い なごや方面
http://www.slideshare.net/KyonMm/in-tech-talk
TDDの自殺
Additionally…
TDD damages or breaks an architecture
TDD 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やアジャイルの人は
テストや品質保証の知識が足らない
https://www.flickr.com/photos/iancarroll/4149865894/
• 「TDD問題解決」
• ≠
• 「壺を買えば幸せに!」
• TDDはツール
• 訓練になる
• 個人でもチームでも使える
• 問題解決に役立つ(こともある)
• Yattom said…
• 個人的には好き
• チームではできないことが多い
• 使うときも100%ではない 知らない領域、試行錯誤
• T-wada said…
• ミスったときや、悩んだとき
• テストは書く TDDとは限らない
• 間合いを調節、制御するのにTDDを利用する
• 色々なツールのひとつとして
• 太田健一郎 said…
• 徹底的にやり込んで熟練すると使いどころがわかるようになる
• Martin Fowlerも同じことを言っている
• 実践テスト駆動開発
TDDするために
• TDDできるようになる
• 効果を上げられるようになる
• 人に説明できるようになる
• 現状の問題を識別、顕在化する
• 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
• 今日のスライドよりちょっと突っ込んで解説
おしまい

More Related Content

TDDはじめる前に