SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
Test 
Yourself テストを書くと何がどう変わるか 
和田 卓人 (a.k.a id:t-wada or @t_wada) 
Sep 5, 2014 @JaSST Hokkaido ’14
和田 卓人 
id: t-wada 
@t_wada 
github: twada
各所で猛威を振るう t_wada.png
よろしく 
おねがい 
します
Q. TDDは、まだ良くわから 
ないです 
Q. 具体的な方法が分からない
TDD 
とは何か
「動作するきれいなコード」、ロン・ジェフ 
リーズのこの簡潔な言葉は、TDD(テスト駆 
動開発)の目標である。動作するきれいなコー 
ドは、あらゆる理由で価値がある。 
─ Kent Beck
動作する、きれいなコードへ 
きれい 
汚い 
二つの道がある 
(すぐには)動かない動作する
TDDのサイクル 
1. 次の目標を考える 
2. その目標を示すテストを書く 
3. そのテストを実行して失敗させる(Red) 
4. 目的のコードを書く 
5. 2で書いたテストを成功させる(Green) 
6. テストが通るままでリファクタリングを行 
う(Refactor) 
7. 1~6を繰り返す
Refactoring TDDと黄金の回転 
きれい 
汚い 
Red 
Green 
(すぐには)動かない動作する
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) 
© Towersquest, Inc. 2010. all rights reserved. 
20 
IBM Driver MS 
Windows 
MS MSN MS Visual 
Studio 
ソースコードサイズ (KLOC) 
テストコードサイズ (KLOC) 
TDDを採用していない類似プロ 
ジェクトでの欠陥密度を1とし 
たときの欠陥密度 
TDD採用により増加したコード 
実装時間(管理者の見積による) 
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% 
N. Nagappan, M. E. Maximilien, T. Bhat and L. Williams: Realizing quality improvement through test driven development: results and 
experiences of four industrial teams, Journal of Empirical Software Engineering, vol. 13, pp. 289-302 (2008)
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) 
© Towersquest, Inc. 2010. all rights reserved. 
21
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” 
=> クリーンテストの5つの規則
Fast 
Independent 
Repeatable 
Self-Validating 
Timely
“A-TRIP” 
=> 良質なテストの特性
Automated 
Thorough 
Repeatable 
Independent 
Professional
F.I.R.S.T 
A-TRIP 
共通するもの
Fast 
Independent 
Repeatable 
Self-Validating 
Timely 
Automated 
Thorough 
Repeatable 
Independent 
Professional
xUnit Test Patterns より 
テストのメンテナンスコスト 
理想 
現実
Fast 
Independent 
Repeatable 
Self-Validating 
Timely 
Automated 
Thorough 
Repeatable 
Independent 
Professional
テストコードの 
リファクタリング 
デモ
Q. テスト駆動開発について、テスト専門の人 
にアドバイスを貰ったり、質問したりするこ 
とはあるのでしょうか?テスト専門の立場か 
ら、開発へどういった貢献が出来るか模索中 
です。 
Q. 製品コードの作成者とは別にテストコード 
の作成者を用意して、テストコードの作成を 
進めたいと考えています。留意すべきことが 
あれば教えてください。
テストは品質を上げない 
体重計に乗るだけでは 
痩せないのと同じ 
https://www.flickr.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過去記事の特設サイトと動画も
ご清聴ありがとうございました

Más contenido relacionado

La actualidad más candente

日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
 

La actualidad más candente (20)

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 

Destacado

「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11
Minoru Chikamune
 

Destacado (6)

ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
 
テストを書こう、Unity編
テストを書こう、Unity編テストを書こう、Unity編
テストを書こう、Unity編
 
ストリーム処理エンジン「Zero」の開発と運用
ストリーム処理エンジン「Zero」の開発と運用ストリーム処理エンジン「Zero」の開発と運用
ストリーム処理エンジン「Zero」の開発と運用
 
Ameba広告の配信制御アーキテクチャを刷新した話 ~オレシカナイトvol.3~
Ameba広告の配信制御アーキテクチャを刷新した話 ~オレシカナイトvol.3~Ameba広告の配信制御アーキテクチャを刷新した話 ~オレシカナイトvol.3~
Ameba広告の配信制御アーキテクチャを刷新した話 ~オレシカナイトvol.3~
 
「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
 

Similar a Test Yourself - テストを書くと何がどう変わるか

nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会
ko ty
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
kyon mm
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
Takuto Wada
 
Fitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてFitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化について
tecopark
 

Similar a Test Yourself - テストを書くと何がどう変わるか (20)

Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)
 
アジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りアジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作り
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
 
phpspecで始めるBDD
phpspecで始めるBDDphpspecで始めるBDD
phpspecで始めるBDD
 
Test Driven Development in LabVIEW
Test Driven Development in LabVIEWTest Driven Development in LabVIEW
Test Driven Development in LabVIEW
 
TDD を自分の道具にしよう
TDD を自分の道具にしようTDD を自分の道具にしよう
TDD を自分の道具にしよう
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
テストの視点を活用した TDD アプローチの検討とその検証
テストの視点を活用した TDD アプローチの検討とその検証テストの視点を活用した TDD アプローチの検討とその検証
テストの視点を活用した TDD アプローチの検討とその検証
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous Testing
 
TDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめTDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめ
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門
 
Fitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてFitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化について
 

Más de Takuto Wada

Más de Takuto Wada (20)

OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
unassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in productionunassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in production
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれ
 
power-assert, mechanism and philosophy
power-assert, mechanism and philosophypower-assert, mechanism and philosophy
power-assert, mechanism and philosophy
 
アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書
 
テスト用ライブラリ power-assert
テスト用ライブラリ power-assertテスト用ライブラリ power-assert
テスト用ライブラリ power-assert
 
Reviewing RESTful Web Apps
Reviewing RESTful Web AppsReviewing RESTful Web Apps
Reviewing RESTful Web Apps
 
power-assert in JavaScript
power-assert in JavaScriptpower-assert in JavaScript
power-assert in JavaScript
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
 
愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い
 
ペアプログラミング ホントのところ
ペアプログラミング ホントのところペアプログラミング ホントのところ
ペアプログラミング ホントのところ
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
TDDBC お題
TDDBC お題TDDBC お題
TDDBC お題
 
DevLOVE DDDBC
DevLOVE DDDBCDevLOVE DDDBC
DevLOVE DDDBC
 
TDDBC Fukuoka Day1
TDDBC Fukuoka Day1TDDBC Fukuoka Day1
TDDBC Fukuoka Day1
 
js テスト放浪記
js テスト放浪記js テスト放浪記
js テスト放浪記
 
xUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase ClassxUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase Class
 

Último

Último (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Test Yourself - テストを書くと何がどう変わるか