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

Strategic Test Driven Development

Strategic Test Driven Development

The easy answer to the question “What is TDD?” is “To write unit tests before the actual code”. Actually “Test first” it’s really different than “test-driven”. in TDD your code design emerges from the tests. The tests are driving you. We can take the same approach and apply it to a more strategic level? Even to build a vision for your company? In Francesco’s opinion yes, let’s see how in this talk.

Francesco Strazzullo

October 22, 2019
Tweet

More Decks by Francesco Strazzullo

Other Decks in Programming

Transcript

  1. Write a failing test Write code to pass that test

    Refactor keeping the test green
  2. Write a failing test Write code to pass that test

    Refactor keeping the test green
  3. “Software development is a learning process, working code is a

    side effect. If that’s true… how can we maximize learning?” Alberto Brandolini
  4. Write a test that lets you approach the goal Write

    code to pass that test Refactor keeping the test green
  5. Write a test that lets you approach the goal Write

    just the code needed to pass that test Refactor keeping the test green
  6. Define a feedback that lets you approach the goal Build

    something “small” Validate your code with “fast” feedbacks
  7. Choose the impact that you believe will help the most

    to reach the goal Build a small deliverable Use Metrics to validate your assumptions
  8. “A non-functional requirement (NFR) is a requirement that specifies criteria

    that can be used to judge the operation of a system, rather than specific behaviors.” Wikipedia
  9. accessibility accountability accuracy adaptability reliability administrability affordability agility auditability responsiveness

    autonomy availability compatibility composability seamlessness configurability correctness credibility customizability simplicity debugability self-sustainability robustness dependability sustainability deployability determinability discoverability distributability usability durability effectiveness efficiency extensibility repeatability fault tolerance fidelity flexibility inspectability reusability reproducibility integrity interoperability learnability securability maintainability manageability mobility modifiability stability modularity operability evolvability performances tailorability portability precision predictability resilience transparency producibility safety recoverability relevance testability
  10. “A Walking Skeleton is a tiny implementation of the system

    that performs a small end-to-end function. It need not use the final architecture, but it should link together the main architectural components. The architecture and the functionality can then evolve in parallel.” Alistair Cockburn
  11. Define a set of NFRs to check with fitness functions

    Build a “walking skeleton” Evolve architecture with fitness functions
  12. Learn the rules of the tool Find the principles that

    are hidden in the tool Explore interrelationships between tools