🚀 Does TDD Really Lead to Good Design? (Sandro Mancuso)

DevTernity Conference
9 Dec 201857:59

Summary

TLDRThe speaker reflects on their 14-year journey with Test-Driven Development (TDD), emphasizing its impact on good software design. They discuss the TDD cycle, the importance of design decisions, and the emergence of design through TDD. The talk explores different TDD styles like Classicist and Outside-In, and how they influence design. It also touches on the use of mocks as a design tool and the concept of 'inflection point' in design to balance simplicity and future-proofing. The speaker concludes by highlighting the importance of understanding design principles to effectively use TDD.

Takeaways

  • 🎯 The speaker emphasizes the importance of Test-Driven Development (TDD) in shaping good software design over the past 14 years.
  • 🔄 The speaker's initial skepticism towards TDD transformed into a deep appreciation after experiencing the benefits of its structured approach to design and development.
  • 📚 Influenced by the book 'Thinking Fast and Slow', the speaker began to question and reassess the foundations of his professional practices, including TDD.
  • 🤔 The speaker highlights the need for developers to understand where design decisions come from when test-driving code and the impact of different TDD styles on design.
  • 🔧 TDD is described as a workflow rather than a design tool itself, with design emerging through the process of writing tests and making them pass.
  • 🔑 The speaker identifies 'Just-in-Time Design' as the initial design decisions made before TDD, which are critical for setting the direction of the code.
  • 🌟 The Classicist and Outside-In approaches to TDD are explained, showing how they both follow the TDD cycle but differ in where and how design decisions are made.
  • 🛠 The use of mocks in TDD is presented as a design tool to help define interfaces and interactions between components, rather than just a testing tool.
  • 🧐 The importance of understanding the domain and business requirements is underscored for making informed design decisions before writing tests.
  • 🔍 The concept of 'Inflection Point' in design is introduced, which is about finding the balance between simplicity and future-proofing the software without over-engineering.
  • 🔄 The speaker concludes that TDD, when combined with a good understanding of design principles, can greatly enhance the development process and result in higher quality software.

Q & A

  • What is the main topic of the speaker's talk?

    -The main topic of the talk is the speaker's journey and insights into Test-Driven Development (TDD), its impact on software design, and the different styles of TDD.

  • How long has the speaker been involved in software design?

    -The speaker has been involved in software design for 22 years.

  • What inspired the speaker to initially try TDD?

    -The speaker was inspired to try TDD after a conversation with someone who suggested that TDD could complement the speaker's interest in software design.

  • What was the speaker's initial reaction to TDD?

    -The speaker initially thought TDD was weird and unnecessary, believing it to be too slow and cumbersome for their design process.

  • What book impacted the speaker's perspective on TDD and design?

    -The book 'Thinking, Fast and Slow' by Daniel Kahneman had a profound impact on the speaker's perspective on TDD and design.

  • What does the speaker mean by 'emergent design'?

    -'Emergent design' refers to the design that evolves from the code as the system is being developed, rather than being pre-planned in detail.

  • What are the two main styles of TDD mentioned in the talk?

    -The two main styles of TDD mentioned are 'Classicist' and 'Outside-In'.

  • What is the difference between 'Classicist' and 'Outside-In' TDD approaches?

    -The 'Classicist' approach focuses on writing a failing test and making it pass with the simplest possible code, then refactoring, while the 'Outside-In' approach starts from the outer layers of the system and works inwards, defining interfaces and interactions using mocks.

  • How does the speaker view the role of design in TDD?

    -The speaker views design in TDD as a combination of 'just-in-time design' decisions made upfront and 'emergent design' that evolves through the TDD cycle.

  • What is the significance of understanding 'composition' vs. 'aggregation' in TDD?

    -Understanding 'composition' vs. 'aggregation' is crucial in TDD for determining the unit under test and making informed design decisions about class responsibilities and interactions.

  • What is the 'inflection point' in software design according to the speaker?

    -The 'inflection point' in software design is the optimal balance between starting with a simple solution and preparing for future requirements without over-engineering or under-engineering.

Outlines

plate

Dieser Bereich ist nur für Premium-Benutzer verfügbar. Bitte führen Sie ein Upgrade durch, um auf diesen Abschnitt zuzugreifen.

Upgrade durchführen

Mindmap

plate

Dieser Bereich ist nur für Premium-Benutzer verfügbar. Bitte führen Sie ein Upgrade durch, um auf diesen Abschnitt zuzugreifen.

Upgrade durchführen

Keywords

plate

Dieser Bereich ist nur für Premium-Benutzer verfügbar. Bitte führen Sie ein Upgrade durch, um auf diesen Abschnitt zuzugreifen.

Upgrade durchführen

Highlights

plate

Dieser Bereich ist nur für Premium-Benutzer verfügbar. Bitte führen Sie ein Upgrade durch, um auf diesen Abschnitt zuzugreifen.

Upgrade durchführen

Transcripts

plate

Dieser Bereich ist nur für Premium-Benutzer verfügbar. Bitte führen Sie ein Upgrade durch, um auf diesen Abschnitt zuzugreifen.

Upgrade durchführen
Rate This

5.0 / 5 (0 votes)

Ähnliche Tags
TDDSoftware DesignAgileDevelopment WorkflowEmergent DesignRefactoringDesign DecisionsClean ArchitectureDomain-Driven DesignTestingBest Practices
Benötigen Sie eine Zusammenfassung auf Englisch?