Slide 1

Slide 1 text

Strategic Test-driven Development

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Francesco Strazzullo (AKA Strazz) @TheStrazz86 (Follow me on Twitter!) Ego Slide

Slide 4

Slide 4 text

https://www.apress.com/it/book/9781484249666 Use “TheStrazz” discount code

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

What is Test-driven Development?

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Test Driven Development

Slide 14

Slide 14 text

How can Development be driven by Tests?

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

A Big Decision is hidden in plain sight

Slide 17

Slide 17 text

What is the next test to write?

Slide 18

Slide 18 text

“Software development is a learning process, working code is a side effect. If that’s true… how can we maximize learning?” Alberto Brandolini

Slide 19

Slide 19 text

Write the test that lets you learn the most about the problem

Slide 20

Slide 20 text

Write the test that lets you reach your goal as fast as possible

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Another Big Decision is hidden in plain sight

Slide 23

Slide 23 text

Write just the code that you need to pass the new test

Slide 24

Slide 24 text

Write a test that lets you approach the goal Write just the code needed to pass that test Refactor keeping the test green

Slide 25

Slide 25 text

Your Design emerges from tests

Slide 26

Slide 26 text

TDD is a goal oriented decision-making tool based on tests

Slide 27

Slide 27 text

Test Driven Development

Slide 28

Slide 28 text

What is a Test?

Slide 29

Slide 29 text

“Tests are just one form of feedback” Kent Beck

Slide 30

Slide 30 text

Feedback Driven Development

Slide 31

Slide 31 text

Define a feedback that lets you approach the goal Build something “small” Validate your code with “fast” feedbacks

Slide 32

Slide 32 text

TDD is a goal oriented decision-making tool based on feedbacks

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

Goal Small Outcome Feedback

Slide 35

Slide 35 text

What kind of decisions can you make with TDD?

Slide 36

Slide 36 text

Strategic long term decisions Tactical put strategy into action Operational made daily

Slide 37

Slide 37 text

How to use TDD “mindset” for Tactical or Strategic Decisions?

Slide 38

Slide 38 text

Choosing the next feature

Slide 39

Slide 39 text

Impact Mapping

Slide 40

Slide 40 text

Graph by Susanna Ferrario

Slide 41

Slide 41 text

Choose the impact that you believe will help the most to reach the goal Build a small deliverable Use Metrics to validate your assumptions

Slide 42

Slide 42 text

Software Architecture

Slide 43

Slide 43 text

What is the goal of Software Architecture?

Slide 44

Slide 44 text

Non-functional Requirements

Slide 45

Slide 45 text

“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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

What are the feedback for Software Architecture?

Slide 48

Slide 48 text

Fitness Functions

Slide 49

Slide 49 text

What is a “small outcome” for Software Architecture?

Slide 50

Slide 50 text

Walking Skeleton

Slide 51

Slide 51 text

“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

Slide 52

Slide 52 text

Define a set of NFRs to check with fitness functions Build a “walking skeleton” Evolve architecture with fitness functions

Slide 53

Slide 53 text

We should build this software?

Slide 54

Slide 54 text

What kind of feedback do we need?

Slide 55

Slide 55 text

User Research

Slide 56

Slide 56 text

Define your idea Small Outcome Use User Feedbacks to validate your idea

Slide 57

Slide 57 text

Strategic Operational Tactical

Slide 58

Slide 58 text

Goal Small Outcome Feedback

Slide 59

Slide 59 text

In a nutshell...

Slide 60

Slide 60 text

Learn the rules of the tool Find the principles that are hidden in the tool Explore interrelationships between tools

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

Thanks! Francesco Strazzullo [email protected]