Slide 1

Slide 1 text

© 2012-2019 BASE, Inc. presented by @hgsgtk (Kazuki Higashiguchi) 成長したい開発者に TDDが与える学習効果 #jasstkyushu

Slide 2

Slide 2 text

© 2012-2019 BASE, Inc. 2 TDDの実践に踏みとどまる当人・その同僚に渡せる資料とな ること 成長したくない開発者はそんなにいないはずで、何が一歩目 になるかわからないこともあるのかも TDDがその一歩目としてあなたに学習機会を与えてくれるか も 当資料のモチベーション

Slide 3

Slide 3 text

© 2012-2019 BASE, Inc. 自己紹介 @hgsgtk Kazuki Higashiguchi 東京に住まうWeb開発者 BASE BANK, Inc. Tech Lead (BASE, Inc.の子会社) 『Software Design 2020年12月号』 > 【第1特集】Dockerアプリケーション開発実践ガイド > コンテナアプリケーションの設計セオリー 3 https://gihyo.jp/magazine/SD/archive/2020/202012

Slide 4

Slide 4 text

© 2012-2019 BASE, Inc. 4 西尾 泰和. エンジニアの知的生産術 効率的に学び、整理し、アウトプットする 第1章 新しいことを学ぶには 学びのサイクル 抽象化・モデル化・パターンの発見 https://www.amazon.co.jp/dp/B07JFRF6MW/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

Slide 5

Slide 5 text

© 2012-2019 BASE, Inc. いかに多くの体験し(具体)、 分析し(抽象化)、 実践するか(応用)

Slide 6

Slide 6 text

© 2012-2019 BASE, Inc. 6 TDD (Test Driven Development) TDD Cycle TDD Rules 1. Don’t write a line of new code unless you first have a failing automated test 2. Eliminate duplication https://www.eecs.yorku.ca/course_archive/2003-04/W/ 3311/sectionM/case_studies/money/KentBeck_TDD_b yexample.pdf

Slide 7

Slide 7 text

© 2012-2019 BASE, Inc. 7 “TDD is about testing code, verifying its externally visible qualities such as functionality and performance. TDD is also about feedback on the code’s internal qualities: the coupling and cohesion of its classes, dependencies that are explicit or hidden, and effective information hiding—the qualities that keep the code maintainable. “Freeman, Steve. Growing Object-Oriented Software, Guided by Tests” / Chapter 1. What Is the Point of Test-Driven Development? https://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627 テストの声を聞く(Listening to the tests)

Slide 8

Slide 8 text

© 2012-2019 BASE, Inc. 8 “External quality is how well the system meets the needs of its customers and users (is it functional, reliable, available, responsive, etc.), and internal quality is how well it meets the needs of its developers and administrators (is it easy to understand, easy to change, etc.).” “Freeman, Steve. Growing Object-Oriented Software, Guided by Tests” / Chapter 1. What Is the Point of Test-Driven Development? https://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627 外部品質/内部品質

Slide 9

Slide 9 text

© 2012-2019 BASE, Inc. 9 https://www.thomasalspaugh.org/pub/fnd/ility.html 保守性の一つ Testability(テスト容易性)

Slide 10

Slide 10 text

© 2012-2019 BASE, Inc. 10 Meszarosf, Gerard. xUnit Test Patterns: Refactoring Test Code / Chapter 15. Code Smells “Hard-to-Test Code” “Hard-to-Test Code is one factor that makes it difficult to write complete, correct automated tests in a cost-effective manner.” https://www.amazon.co.jp/dp/B004X1D36K

Slide 11

Slide 11 text

© 2012-2019 BASE, Inc. TDD Cycleの中で学びのサイクルを回す Testabilityの低さ を”Hard-to-Test Code”に体験す る ex. 責務の兼任が多い長大なコード 依存が多い・交換不可なコード →テストの追加が難しい体験  具象

Slide 12

Slide 12 text

© 2012-2019 BASE, Inc. TDD Cycleの中で学びのサイクルを回す Testabilityの低さ を”Hard-to-Test Code”に体験す る ex. 責務の兼任が多い長大なコード 依存が多い・交換不可なコード →テストの追加が難しい体験 テストによって覚えた”違和感”の 正体を分析・学習 具象 抽象化

Slide 13

Slide 13 text

© 2012-2019 BASE, Inc. TDD Cycleの中で学びのサイクルを回す Testabilityの低さ を”Hard-to-Test Code”に体験す る ex. 責務の兼任が多い長大なコード 依存が多い・交換不可なコード →テストの追加が難しい体験  テストによって覚えた”違和感”の 正体を分析・学習 分析結果をリファクタリングで試す 次のCycleで更にフィードバックを得る 具象 抽象化 応用

Slide 14

Slide 14 text

© 2012-2019 BASE, Inc. TDD Cycleを「学びのサイクル」にする 成長 = 学びのサイクル(具象→抽象化→応用)をいかに回せるか TDD Cycleの中で、テストの声を聞く。 Test Firstという制約によって内部品質、特にテスト容易性に関す る体験(具象)を得る Red-Green-Refactorの"Refactor”にて体験から得た分析結果を 実践(応用)する 14

Slide 15

Slide 15 text

© 2012-2019 BASE, Inc. 15 マイケル・C・フェザーズ. レガシーコード改善ガイド 第10章 このメソッドをテストハーネスで動かすことができません / 10.1 隠れたメソッド “良い設計はテスト可能であり、テスト可能でない設計 は悪い設計である” “クラスのメソッドを変更する必要があるものの、それがprivateメソッドだった 場合、どうするべきでしょうか。最初に検討すべきことは、publicメソッドを通 じたテストが可能かどうかです。 (中略)私は、次のアドバイスが耳ざわりなことを理解していますが、これによ り、いくつかの大きなプラスの効果があります。良い設計はテスト可能で あり、テスト可能でない設計は悪い設計である、ということは常 に真実です。” https://www.amazon.co.jp/dp/B01AN97W08

Slide 16

Slide 16 text

© 2012-2019 BASE, Inc. Testabilityを気にするその先 “良い設計はテスト可能であり、テスト可能でない設計は悪い設計 である” →これはテスト可能であれば良い設計だと言っているわけではない TestabilityはMaintabilityの1要素に過ぎない →更に他の要素はどうカバーできるだろうか? 二歩目・三歩目につながっていく 16

Slide 17

Slide 17 text

© 2012-2019 BASE, Inc. 助走があっても構わない

Slide 18

Slide 18 text

© 2012-2019 BASE, Inc. “Test First”が難しい人の助走 「テストを最初に書くのが慣れてない」 「テストを書く事自体慣れてない」 “テストセカンド”で少しずつテストファーストに近づけていく手も 学びのサイクルを回し始めて、より内部品質の声が聞こえるサイク ルへ慣れていく ただし、”Giant Step”ではなく”Baby Steps”に 18

Slide 19

Slide 19 text

© 2012-2019 BASE, Inc. 19 “私は「あなたができる最も小さなことで、正しい方向がすぐにわか るものは何ですか?」とよく質問している。ベイビーステップは、静 止状態や変化の遅さを正当化するものではない。条件が整っていれ ば、人やチームは小さなステップを高速に繰り返し、まるで跳躍して いるかのように見せることもできる。” Kent Beck ・ Cynthia Andres エクストリームプログラミング 5.13 Baby Steps https://www.amazon.co.jp/dp/4274217620 XP原則 “Baby Steps”

Slide 20

Slide 20 text

© 2012-2019 BASE, Inc. まとめ:TDD Cycleを「学びのサイクル」にする 成長 = 学びのサイクル(具象→抽象化→応用)をいかに回せるか TDD Cycleの中で、内部品質に対するフィードバックを得て、分析 して、実践する Baby Steps、小さなステップを高速に繰り返し、成長を加速する 20