TestYourself
テストを書くと何がどう変わるか

和田 卓人 (a.k.a id:t-wada or @t̲wada)
Sep 5, 2014 @JaSST Hokkaido ʼ14

和田 卓人
id: t-wada@t̲wadagithub: twada各所で猛威を振るう t̲wada.png

よろしくおねがいしますQ. TDDは、まだ良くわからないです
Q. 具体的な方法が分からない

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

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

きれい二つの道がある
汚い(すぐには)動かない

動作する

TDDのサイクル
1. 次の目標を考える
2. その目標を示すテストを書く
3. そのテストを実行して失敗させる(Red)
4. 目的のコードを書く
5. 2で書いたテストを成功させる(Green)
6. テストが通るままでリファクタリングを行う(Refactor)
7. １〜6を繰り返す

TDDと黄金の回転
きれい

汚いRefactoringde
RGreen(すぐには)動かない

動作する

TDD や Developer Testing にソフトウェア工学的なメリットはいろいろあるけれど、最大の理由は工学的なものではない。最大の理由は心理的なもの•即座にフィードバックを得るため•書いたコードに自信を持つため•これから書くコードに自信を持つため

デモhttp://www.planetgeek.ch/wp-content/uploads/2012/06/ATDD-cycle.png

頻繁なリリースとデモ受け入れテスト

ユニットテストWhy:
顧客は何故それを欲しているのか

What:
何を作れば良いだろうか
How:
どう作れば良いだろうか
永和システムマネジメント家永氏の資料より

https://www.facebook.com/notes/kent-beck/when-tdd-doesnt-matter/797644973601702

TDDの導入効果

TDD導入効果(MS, IBM)IBM Driver MS
WindowsMS MSNMS VisualStudio

ソースコードサイズ (KLOC)
41.0

6.0

26.0

155.2

28.5

4.0

23.2

60.3

0.61

0.38

0.24

0.09

15〜20%

25〜35%

15%

20〜25%

テストコードサイズ (KLOC)

TDDを採用していない類似プロ
ジェクトでの欠陥密度を１としたときの欠陥密度
TDD採用により増加したコード
実装時間(管理者の見積による)

N. Nagappan, M. E. Maximilien, T. Bhat and L. Williams: Realizing quality improvement through test driven development: results andexperiences of four industrial teams, Journal of Empirical Software Engineering, vol. 13, pp. 289-302 (2008)20© Towersquest, Inc. 2010. all rights reserved.

TDD導入効果(エリクソン他)• TDDを実施した場合に報告されている知見‣

機能テストでの不具合検出数が18%削減された‣

コーディング(実装)の時間が16％増えた‣

テストのカバレッジが大きくなった• 被験者を対象としたアンケート‣

96%の被験者がデバッグの工数を減らすと感じた‣

88%の被験者が要求が洗練されると感じた‣

92%の被験者がコードの品質を上げると感じた‣

50%の被験者が開発工数を減らすと感じた

Boby George, a and Laurie Williams: A structured experiment of test-driven development, Journal of Information and Software Technology Vol. 46, No. 5, p. 337-342(2004)21© Towersquest, Inc. 2010. all rights reserved.

Q. 開発者自身がテストを書くようになったらテストエンジニアは不要だと思いますか？

TDDのT について考える「動作するきれいなコード」、ロン・ジェフ
リーズのこの簡潔な言葉は、TDD(テスト駆動開発)の目標である。動作するきれいなコードは、あらゆる理由で価値がある。
─ Kent Beck“テストとは，エラーをみつけるつもりでプログラムを実行する過程である”

http://www.developsense.com/blog/2009/08/testing-vs-checking/TDD はCheckingでしかないhttps://speakerdeck.com/everzet/bdd-in-symfony2

http://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/

Q. テストスクリプトの作成コストと維持。ユニットテストケースの運用維持が、確実には出来ていない
Q. テストコード自体はプロダクションコードよりも基準が緩いため、難しかったり煩雑なテストコードが散見し、テストコードのメンテナンス性が悪くなっている

(Checking の文脈での)良いテストはどんなものか“F.I.R.S.T”=> クリーンテストの５つの規則

FastIndependent
Repeatable
Self-Validating
Timely“A-TRIP”=> 良質なテストの特性

AutomatedThoroughRepeatable
Independent
Professional

F.I.R.S.T
A-TRIP共通するもの

FastAutomated

Independent

ThoroughRepeatable

Repeatable

Self-Validating

Independent

TimelyProfessional

理想

現実

xUnit Test Patterns より

テストのメンテナンスコストFast

Automated

Independent

ThoroughRepeatable

Repeatable

Self-Validating

Independent

TimelyProfessionalテストコードのリファクタリングデモQ. テスト駆動開発について、テスト専門の人にアドバイスを貰ったり、質問したりすることはあるのでしょうか？テスト専門の立場から、開発へどういった貢献が出来るか模索中です。
Q. 製品コードの作成者とは別にテストコードの作成者を用意して、テストコードの作成を進めたいと考えています。留意すべきことがあれば教えてください。

テストは品質を上げない
体重計に乗るだけでは痩せないのと同じ

https://www.ﬂickr.com/photos/tompagenet/2271383143

“テストでは品質は上がらないですよ。テストはあくまでも品質をあげるきっかけ。品質をあげるのはプログラミングです。
これは大昔からそう。”

自動テストの良いところは、改善を我慢しなくても良くなったこと

ソフトウェアの質は自分たちで上げる
自分たちでしか上げられないでも、開発者にはテストの知識が不足しがちだから、いっしょにやりましょう

http://www.flickr.com/photos/recompile_net/3298985098/

TDDはスキルです• ひとりから始められる• テストやTDDはスキルです。つまり…
• 才能ではなく、習得可能です• 量は質に転化します• 写経しましょう!!

gihyo.jpの連載『［動画で解説］和田卓人の“テスト駆動開発”講座』

http://gihyo.jp/dev/serial/01/tdd/
全20回すべて動画付き解説
ニコニコ動画でも見れます
WEB+DB過去記事の特設サイトと動画もご清聴ありがとうございました