SlideShare a Scribd company logo
1 of 62
Download to read offline
私にとっての
テスト
和田 卓人 (a.k.a id:t-wada or @t_wada)
Jul 24, 2013 @Testing Casual #1
和田 卓人
id: t-wada
@t_wada
github: twada
#97prog_ja
#sqlap
Agenda
•「品質」について
•TDD の T について
•(TDD の) 良いテストとは
•才能と技術
•私にとって TDD とは
品質
品質とは何か
品質とは誰かにとっ
ての価値である
Accessibility
Adaptability
Administrability
Analyzability
Auditability
Availability
Calibrability
Changeability
Compatibility
Configurability
Exploitability
Extensibility
Flexibility
Functionality
Installability
Integrability
Internationalizability
Interoperability
Learnability
Maintainability
Marketability
Maturity
Modifiability
Operability
Personalizability
Portability
Recoverability
Reliability
Replaceability
Reusability
Scalability
Security
Sensitivity
Stability
Suitability
Supportability
Testability
Traceability
Transactionality
Understandability
Upgradeability
Usability
... and lots more!
「品質」は
なにやら難しそうで、
ちょっと怖そうに見えがち
「品質」っちゅうか
ら難しく聞こえてまう
んや。「質」と言えば
皆わかってくれる。
(出典失念。テレビかラジオのインタビュー番組より)
品質
私たちには、何か「良いも
の」を見抜く能力があらか
じめ備わっている
QWAN
(Quality without a name)
1. 生き生き alive
2. 全一的 whole
3. 快適 comfortable
4. 自由 free
5. 正確 exact
6. 無我 egoless
7. 永遠 eternal
http://www.itmedia.co.jp/im/articles/0610/25/news127.html
戻ります……
(´・ω・`)
http://www.thomasalspaugh.org/pub/fnd/ility.html
Boehm, Brown, and Lipow's 23 Quality Characteristics (1976)
Agenda
•「品質」について
•TDD の T について
•(TDD の) 良いテストとは
•才能と技術
•私にとって TDD とは
TDDの
T について
TDDのサイクル
1. 次の目標を考える
2. その目標を示すテストを書く
3. そのテストを実行して失敗させる(Red)
4. 目的のコードを書く
5. 3で書いたテストを成功させる(Green)
6. テストが通るままでリファクタリングを行
う(Refactor)
7. 1∼6を繰り返す
「動作するきれいなコード」、ロン・ジェフ
リーズのこの簡潔な言葉は、TDD(テスト駆
動開発)の目標である。動作するきれいなコー
ドは、あらゆる理由で価値がある。
─ Kent Beck
テストとは,エラーをみつ
けるつもりでプログラムを
実行する過程である
あるテストエンジニア
の思い出
テストとは
創造的破壊行為
http://www.developsense.com/blog/2009/08/testing-vs-checking/
Testing
or
Checking
TDD は
Checking
https://speakerdeck.com/everzet/bdd-in-symfony2
Checking
だけじゃダメ
http://www.exampler.com/old-blog/2003/08/21/#agile-testing-project-1
Brian Marick による四象限モデル
http://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/
http://www.thomasalspaugh.org/pub/fnd/ility.html
Joseph P. Cavano and James A. McCall.A framework for the measurement of software quality. In
software quality assurance workshop on Functional and performance issues, pages 133–139, 1978.
Cavano and McCall s 11 Quality Factors (1978)
Agenda
•「品質」について
•TDD の T について
•(TDD の) 良いテストとは
•才能と技術
•私にとって TDD とは
(Checking の文脈での)
良いテストは
どんなものか
F.I.R.S.T
=> クリーンテストの5つの規則
Fast
Independent
Repeatable
Self-Validating
Timely
高速である
独立している
再現性がある
自己検証可能
適時性がある
R > S >>> I >>>>>>>>> F >>> T
再現性がある > 自己検証可能 >>> 独立している >>>>>>>>> 高速である >>> 適時性がある
A-TRIP
=> 良質なテストの特性
Automated
Thorough
Repeatable
Independent
Professional
自動
徹底
繰り返し可能
独立している
専門的
R > A >>> I > P >>>>>>>>>> T
繰り返し可能 > 自動 >>> 独立している > 専門的 >>>>>>>>>> 徹底
F.I.R.S.T
A-TRIP
共通するもの
Fast
Independent
Repeatable
Self-Validating
Timely
Automated
Thorough
Repeatable
Independent
Professional
Fast
Independent
Repeatable
Self-Validating
Timely
Automated
Thorough
Repeatable
Independent
Professional
Agenda
•「品質」について
•TDD の T について
•(TDD の) 良いテストとは
•才能と技術
•私にとって TDD とは
才能と技術に
ついて
テストでは品質は上がらない
ですよ。テストはあくまでも品
質をあげるきっかけ。品質をあ
げるのはプログラミングです。
これは大昔からそう。
シンプルさは信頼性の前提である
――Edsger W. Dijkstra
複雑さはシステムに損傷をもたらす
――Bertrand Meyer
Simplicity matters.
――Rich Hickey
まったく同じ予測をする2つの競
合する理論があるときは、単純な
方が優れている。
――節約の原則
きれい
汚い
(すぐには)動かない 動作する
Red
Green
Refactoring
TDDと黄金の回転
Agenda
•「品質」について
•TDD の T について
•(TDD の) 良いテストとは
•才能と技術
•私にとって TDD とは
私にとって
TDDとは
無意識
意識的
無鉄砲 用心深い
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?TechnicalDebtQuadrant
Fowler による技術的負債の四象限モデル
この象限が手強い
自動テストの良いところは、
改善を我慢しなくても良く
なったこと
全ては変化する
仕様が固まることは無い
開発が終わることは無い
理解は常に深化する
スキルも常に進化する
技術も常に進化する
私の好きなテストは
変化を妨げないテスト
変化を後押しするテスト
私にとって
TDD とは 悪あがき
あきらめずに改善したい
自分のコードを嫌いたくない
TDDはスキルです
•ひとりから始められる
•テストやTDDはスキルです。つまり…
•才能ではなく、習得可能です
•量は質に転化します
•写経しましょう!!
ご清聴ありがとうございました

More Related Content

What's hot

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
 

What's hot (20)

フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 

More from Takuto Wada

More from 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
 
テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
 
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
 

私にとってのテスト