Upgrade to Pro — share decks privately, control downloads, hide ads and more …

成長したい開発者にTDDが与える学習効果 / tdd makes you growth

成長したい開発者にTDDが与える学習効果 / tdd makes you growth

JaSST'20 Kyushu での登壇資料です

Kazuki Higashiguchi

November 20, 2020
Tweet

More Decks by Kazuki Higashiguchi

Other Decks in Technology

Transcript

  1. © 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
  2. © 2012-2019 BASE, Inc. 4 西尾 泰和. エンジニアの知的生産術 効率的に学び、整理し、アウトプットする 第1章

    新しいことを学ぶには 学びのサイクル 抽象化・モデル化・パターンの発見 https://www.amazon.co.jp/dp/B07JFRF6MW/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
  3. © 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
  4. © 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)
  5. © 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 外部品質/内部品質
  6. © 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
  7. © 2012-2019 BASE, Inc. TDD Cycleの中で学びのサイクルを回す Testabilityの低さ を”Hard-to-Test Code”に体験す る

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

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

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

    Cycleの中で、テストの声を聞く。 Test Firstという制約によって内部品質、特にテスト容易性に関す る体験(具象)を得る Red-Green-Refactorの"Refactor”にて体験から得た分析結果を 実践(応用)する 14
  11. © 2012-2019 BASE, Inc. 15 マイケル・C・フェザーズ. レガシーコード改善ガイド 第10章 このメソッドをテストハーネスで動かすことができません /

    10.1 隠れたメソッド “良い設計はテスト可能であり、テスト可能でない設計 は悪い設計である” “クラスのメソッドを変更する必要があるものの、それがprivateメソッドだった 場合、どうするべきでしょうか。最初に検討すべきことは、publicメソッドを通 じたテストが可能かどうかです。 (中略)私は、次のアドバイスが耳ざわりなことを理解していますが、これによ り、いくつかの大きなプラスの効果があります。良い設計はテスト可能で あり、テスト可能でない設計は悪い設計である、ということは常 に真実です。” https://www.amazon.co.jp/dp/B01AN97W08
  12. © 2012-2019 BASE, Inc. まとめ:TDD Cycleを「学びのサイクル」にする 成長 = 学びのサイクル(具象→抽象化→応用)をいかに回せるか TDD

    Cycleの中で、内部品質に対するフィードバックを得て、分析 して、実践する Baby Steps、小さなステップを高速に繰り返し、成長を加速する 20