Download - 自動テストの誤解とアンチパターン in 楽天 Tech Talk
![Page 1: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/1.jpg)
Automate Testing Anti-pattern
自動テストの誤解とアンチパターン
by kyon_mmin Rakuten Tech Talk 12/02/2014
![Page 2: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/2.jpg)
Self Introduction
きょん(@kyon_mm)
テストアーキテクト
Groovy, C#, F#, Scala
SCMBootCamp, Nagoya.Testing, TDDBootCamp
![Page 3: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/3.jpg)
Agenda
自動統合テスト
誤解と効果
TDD/BDDについて
歴史
TDDの自殺
失敗するTDD
![Page 4: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/4.jpg)
Agenda
自動統合テスト
誤解と効果
TDD/BDDについて
歴史
TDDの自殺
失敗するTDD
![Page 5: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/5.jpg)
Test Level
単体テスト/コンポーネントテスト 「それらではアプリケーションとして成立しないファイル群に対するテスト」
統合テスト「デプロイされている状態でのアプリケーションに対するテスト」
システムテスト「デプロイされていて、シナリオも含めたテスト」
![Page 6: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/6.jpg)
Attention
テストは手動/自動に関わらずコスト意識が大切です。
自動化しても見合わないこともあるし、手動で続けるのが見合わないこともあります。
見合う見合わずではなくとも、どれくらいのコストであるかを見積もる、計測する事は大切な事が多いです。(開発規模が大きくなるほど。)
![Page 7: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/7.jpg)
Test ROI
テストの自動化は何度も実行しなければもとが取れないとかいう話があります。
よく3回以上と言われています。
![Page 8: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/8.jpg)
Test ROI
自動化は3回やらないと元がとれない?
目を覚ませ。建前はいらないのだよ。
![Page 9: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/9.jpg)
Test ROI
テストの自動化は何度も実行しなければもとが取れないとかいう話がありますが、そういうのは建前です。嘘です。いい訳です。
「統合テスト自動化で得られる最大のメリットはテスト実装者が得る幅広いプログラミングスキルとアーキテクチャ知識である」
「手動では不可能なテストの実装、コストの大幅低減」を実現するのは多くはシステムテストレベルである事が(比較的)多い。
![Page 10: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/10.jpg)
Test ROI
「統合テスト自動化で得られる最大のメリットはテスト実装者が得る幅広いプログラミングスキルとアーキテクチャ知識である」
統合テストレベルの自動化をしなくていいと言っているのは、上のメリットを「(優先順位を考慮して)必要ない」と言っているのと同義だと捉えていることを忘れてはいけない。
![Page 11: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/11.jpg)
Test ROI
自動テストを誰かが勝手にやってくれるものとして保証する
自動テストを自分の手足のように使う(理解する)ものとして保証する
自動テストなしで保証する
どの立場でテストを行うかはあなた次第
![Page 12: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/12.jpg)
Test ROI
例えば。。。
誰かが品質に対して警鐘を鳴らしてくれればよい。というのは、かなり手慣れた領域での話である。
初めての「ドメイン」「大規模化」「複雑化」「汎用化」などにおいては、知識の不足が露呈しやすく、効率よく知識を得る必要がある。
![Page 13: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/13.jpg)
Integration Test
統合テストの自動化のROIで実行回数に目がいくのか?
統合テストの自動化で意味があるものは?
![Page 14: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/14.jpg)
Integration Test
統合テストの自動化がうまくいっているとはどういうことか
保守性?
属個人性?
![Page 15: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/15.jpg)
Integration Test
自動統合テストが「うまくいっている」と思い込んでしまうパターンがある。
「無駄なテストを大量に増やせる事」
「効果がありそうなんだけど無駄なテスト」をいかに減らせるかが鍵になってくる。
![Page 16: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/16.jpg)
Integration Test
効果的な自動統合テストとはどうすればつくれるのか?
![Page 17: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/17.jpg)
Reduction
統合テストを減らすには、統合テストより前の段階でどうやって減らすかにかかっている。
テストで減らす : 統合テストより下のテストと「網羅対象や度合い」をテスト設計する
設計で減らす:統合テストでの因子水準を減らせるようなプロダクト設計する
![Page 18: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/18.jpg)
Integration Test
プロダクトコードをレビューできるスキルがないなら、効果的な自動統合テストは不可能に近い。
![Page 19: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/19.jpg)
Test ROI
効果的な自動テストはなにかを考えないと、「自動化対象外と協調したテスト設計をおろそかにする」
自動化対象のテストのみに着目するので「ROI=予想実行回数」のような発想になる。
![Page 20: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/20.jpg)
Agenda
自動統合テスト
誤解と効果
TDD/BDDについて
歴史
TDDの自殺
失敗するTDD
![Page 21: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/21.jpg)
TDD/BDD
TDD=Test Driven Development
BDD=Behavior Driven Development
![Page 22: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/22.jpg)
![Page 23: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/23.jpg)
History of TDD/BDD
TDDというものはSmalltalk界隈の人達の習慣を洗練させ形式化したものでした。
それをしたのがKentBeckです。
彼を中心にMartin Fowler, Uncle Bob, Ron JeffriesなどがTDDとリファクタリングを洗練させていきます。
![Page 24: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/24.jpg)
Kent Beck says...
自動テストが失敗した場合だけ、 新しいコードを書く。 重複を取り除く。2つの規則はプログラミングのタスクにおける順番を意味する。
レッド ‐ 動作しないテストを少しだけ作成する。 おそらく最初はコンパイルできない。
グリーン ‐ テストをすぐに動作させる。 そのためには、 どのようなコードでもよい。
リファクタリング ‐ テストを動作させるためだけに作成された重複をすべて取り除く。
![Page 25: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/25.jpg)
Uncle Bob says...
3つの原則を守りながら実装をすすめる。
失敗するテストができるまでプロダクトを書いてはいけない
失敗するテストがある場合にはそれ以上テストを追加してはいけない
テストを成功させるプロダクトがある場合にはそれ以上プロダクトを追加してはいけない
![Page 26: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/26.jpg)
t_wada says...
プログラマーを含めた開発の健康をたもつプラクティス
RED - GREEN - REFACTORの黄金の回転を回す
動くけど汚ないコード - 動いて美しいコード - 動かないコードの状態遷移
![Page 27: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/27.jpg)
kyon_mm says
ソフトウェア開発者支援フレームワークである
RED - GREEN - REFACTOR のスパイラルモデルが根幹にある
「開発者の意図を確認すること」「開発者が心地よいコードを書き始める事」を支援する。
![Page 28: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/28.jpg)
Descended from origin
TDD By Example[テスト駆動開発入門] By KentBeck
Refactoring[リファクタリング] By Martin Fowler
[アジャイル開発の奥義-オブジェクト指向開発の原則-] By Uncle Bob
Clean Code By Uncle Bob
JUnit By Kent Beck
NUnit By Ron Jeffries
![Page 29: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/29.jpg)
XP
アジャイルの一形態であるeXtreme Programming(XP)では 様々なプラクティスが提案されました。 その中にも「受け入れテストの自動化」は存在します。 これによって常にプロダクトに対して要求に近い検査を行うことが可能になりました。
XPが直接ではないですが、この頃からATDDという概念が生まれはじめます。 このときのATDDはまさに「オンサイト顧客」などのいわゆる 「ユーザーのための受け入れテスト」でTDDするというものでした。
![Page 30: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/30.jpg)
FIT
Framework for Integrated Test(FIT) TDDやXPが広まるなかでより言語に依存しない形でのテスト(特にIntegration Test)に 注目されるようになった。
ノンプログラマーにフレンドリーであり、実行でき、実装すべきモノがみえるテスト
![Page 31: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/31.jpg)
Fit/FitNesseFITの有名な実装としてFit/FitNesseが存在する。
Ward CunninghamによるFit. Uncle BobによるFitNesse.
次のような要素からなる。
Wiki上でテストケースを表で記述
Wikiからテストを実行できる
各プログラミング言語とのアダプタ
各プログラミング言語でのテストケース実装
![Page 32: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/32.jpg)
BDD
Kentは「常に(その時における)ユーザーの立場でテストを実装するんだ。」といいました。 現実には多くのTDDビギナーはそうはせず、 UnitTestに集中しすぎ、時には実装をテストしてしまうことに注力したのです。
BDDは様々な思惑があったとは言え、 現実的な理由としてはTDDの誤解される使い方を是正するための考え方として生まれました。
![Page 33: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/33.jpg)
Scenario BDD
より自然言語らしさを目指した結果、 テストコードと自然言語を記述するファイルを分断するという選択をした流れがあり、 それらをScenarioBDDとよぶことがおおいです。 現在のCucumber系がそれらにあたります。
![Page 34: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/34.jpg)
Spec BDD
テストコードと自然言語をできるだけ同一ファイル内におさめながら、 可読性の向上を目指すという選択をした流れがあります。 それらをSpecBDDとよぶことがおおいです。 現在のRSpec系がそれらにあたります。
![Page 35: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/35.jpg)
STDD
アジャイルの一形態であるScrumは今や世界中で認識されている手法になりました。 Scrumは実現すべき事に「Readyの定義」「Doneの定義」を決めることが多いです。 実現すべき事はProduct BackLog Itemとよばれ、 ユーザーストーリーで書かれることが多いです。
このDoneの定義をユーザーストーリーを取り組むときに、 テストとして実装してしまうことで開発をするSTDDがうまれました。 StoryTestDrivenDevelopmentです。
![Page 36: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/36.jpg)
Specification By Example
幾年かを経て、Specification By Exampleという概念がうまれます。 これは今迄のBDDやATDDをうまく包括するような概念として生まれました。 主張は「Specification By Exampleとして書かれたテストはLive Documentなんだ」 (「例示による仕様としてのテストは生きたドキュメントだ!」)ということです。
![Page 37: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/37.jpg)
Agenda
自動統合テスト
誤解と効果
TDD/BDDについて
歴史
TDDの自殺
失敗するTDD
![Page 38: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/38.jpg)
Domain
ドメインの分け方として2分別する方法がある
アプリケーションドメイン
ソリューションドメイン
![Page 39: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/39.jpg)
Application Domain
ソフトウェアシステムの導入によって変化させたい領域のこと。
問題ドメインと呼ばれる事が多いが、必ずしも一致しない。
![Page 40: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/40.jpg)
Application Domain
端的な例だと、要求レベルで表現できるユーザーが達成しようとしている内容
![Page 41: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/41.jpg)
Solution Domain
ソフトウェアシステムの個々の技術や組み合わせ方。
解決ドメイン、解決領域と翻訳されることもある。
![Page 42: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/42.jpg)
Solution Domain
個々の言語、ライブラリ、ミドルウェアなど。
実際のコードや設定やインフラなどによる実装技術。
![Page 43: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/43.jpg)
Best Production Code
Application DomainとSolution Domainが同一表現になること。
「やりたいことを書いた」=「実装した」
![Page 44: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/44.jpg)
Example
MDA系
一部では概念図からプロダクトコードを自動生成することに注力している
DSL系
アプリケーションドメインをそのままかけるような専用言語によってソリューションドメインとの身時を埋める
![Page 45: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/45.jpg)
Example
BRMS
システムのロジックの一部をデシジョンテーブルで記述できるようにする
![Page 46: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/46.jpg)
Problem
我々の世界はそこまで綺麗にコードをかける実力もツールもない
![Page 47: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/47.jpg)
TDD Solution
まずテストコードに達成したい事を表現する
プロダクトコードを実装する
テストが通った状態で綺麗にする
![Page 48: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/48.jpg)
Test Code of TDD
TDDはDog Foodingである
テストコードが最初のユーザー
テストコードに要求を書いている
テストコードにアプリケーションドメインがある
![Page 49: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/49.jpg)
Production Code of TDD
まずはある範囲で保証できるコードを書く
保証できる中で綺麗にしていく
TDDの中でどうやってテストとプロダクトを綺麗にするかは語られていない。
TDD用のリファクタリングがない
![Page 50: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/50.jpg)
![Page 51: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/51.jpg)
Best Production Code
アプリケーションドメイン= ソリューションドメイン
![Page 52: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/52.jpg)
TDD
テストコード = アプリケーションドメイン
プロダクトコード = ソリューションドメイン
![Page 53: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/53.jpg)
Product Refactoring
実際にはなんらかの形でアプリケーションドメインをプロダクトコードに入れている
命名、依存関係整理、レイヤ分割
![Page 54: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/54.jpg)
Test Refactoring
DRY...?
![Page 55: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/55.jpg)
Domain
テストコードにアプリケーションドメインが残ってしまっている。
アプリケーションドメインが重複している。
![Page 56: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/56.jpg)
Domain
重複しているだけならまだいい。
実際には違うものが表現されている。
![Page 57: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/57.jpg)
Example
TestDouble
Integration Test
![Page 58: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/58.jpg)
Domain
TestDoubleもしくはIntegrationTestのsetupを書く事で、既にある他の機能の劣化コピーもしくは完全なコピーを書く事になる。
![Page 59: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/59.jpg)
Domain
ツールとTDDの都合でテストコードもしくはプロダクトコードにあるアプリケーションドメインを変化させてコピーしなければいけない
![Page 60: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/60.jpg)
Domain
そのテストを動かすために最短でセットアップできるものを書くのは本当に正しいのかも怪しい。
何よりアプリケーションドメインが重複している。
![Page 61: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/61.jpg)
TDD Suicide
プロダクトコードからアプリケーションドメインが漏れたり、埋め込まれないことがある
それを促進する力がTDDにはある
![Page 62: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/62.jpg)
TDD Suicide
アプリケーションドメインがないプロダクトコードなんて何やっているかわからない死体と同然である。
TDDは開発の理想を壊す、守るべきプロダクトコードを死体にしてしまう事がある。だが、それに気づきにくい。
![Page 63: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/63.jpg)
TDD Suicide
レゾンデートルを自ら破壊してしまうというTDDはまさに自殺しているに等しい。
「ドメインの重複、エセドメインの生産をしてプロダクトコードをダメにしてしまう」というTDDは自殺している。これをTDDの自殺という。
![Page 64: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/64.jpg)
Agenda
自動統合テスト
誤解と効果
TDD/BDDについて
歴史
TDDの自殺
失敗するTDD
![Page 65: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/65.jpg)
TDD
TDDをして品質があがると思う人が多くいる。一方で上がらないと思っている人がいる。
(効果のある品質特性が異なるという話ではないよ。
![Page 66: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/66.jpg)
Good TDD
強制的に検査されたプロダクトしか手に入らなくなる事によって、つまらないバグが減る。
最低限のテスト、最低限のプロダクトのみによって進められるサイクルによって得られる本質に近づくための知識を取得できる。
![Page 67: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/67.jpg)
Bad TDD
あるコミュニティにとってTDDは成功しやすい手法かもしれないが、失敗する場合もある。
例
AdaコンパイラはTDDを採用したが、よろしくないTDDを行ってしまって、今までにないバグを発生させた。
![Page 68: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/68.jpg)
Why Fail
TDDが難しいから?
TDDでカバレッジ100%を目指したから?
自動テストの実行結果がオールグリーンのスクリーンショットをExcelにはったから?
上3つをクリアしても失敗する原因がある
![Page 69: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/69.jpg)
Why Fail
TDDはコードを増やすことになっている。
低スキルなプログラマーが「プロダクト」だとしても「テスト」だとしても書くのは「ひどいコード」であることには変わりない。
でも、意味の通じないドキュメントを書いてしまうことよりはずっとマシ :-p
言い換えれば、TDDで効果があがるのは、属個人性の排除と、意味の通じないドキュメントによって生み出されるバグ予防、確認不足の予防
![Page 70: 自動テストの誤解とアンチパターン in 楽天 Tech Talk](https://reader031.vdocuments.net/reader031/viewer/2022020920/554f84d8b4c9052a518b4e3d/html5/thumbnails/70.jpg)
ご清聴ありがとうございました!