L E AV E N O T R A C E :
T E S T D R I V E N D E V E L O P M E N T U S I N G T H E S O L I D
P R I N C I P L E S
@ J E N N A P E D E R S O N
W W W. 6 1 2 S O F T WA R E F O U N D RY. C O M
C O P Y R I G H T © 2 0 1 4 J E N N A P E D E R S O N . A L L R I G H T S R E S E R V E D .
W H O A M I ?
• Independent, full-stack web developer
• Code geek + process geek - agile, TDD, productivity, etc.
• Co-Ambassador for the Twin Cities Geekettes
• www.geekettes.io
• @jennapederson
• www.612softwarefoundry.com
A G E N D A
• What makes a design good?
• Test Driven Development
• SOLID Principles
• Examples
W H AT M A K E S A D E S I G N G O O D ?
R I G I D I T Y
I T I S H A R D T O C H A N G E B E C A U S E E V E RY C H A N G E A F F E C T S T O O M A N Y O T H E R PA R T S
O F T H E S Y S T E M .
F R A G I L I T Y
W H E N Y O U M A K E A C H A N G E , U N E X P E C T E D PA R T S O F T H E S Y S T E M B R E A K .
I M M O B I L I T Y
I T I S H A R D T O R E U S E I N A N O T H E R A P P L I C A T I O N B E C A U S E I T C A N N O T B E
D I S E N TA N G L E D F R O M T H E C U R R E N T A P P L I C A T I O N .
W H AT I S T D D ?
M A K E I T W O R K , M A K E I T B E T T E R
S I N G L E
R E S P O N S I B I L I T Y
P R I N C I P L E
A C L A S S S H O U L D H AV E O N E A N D
O N LY O N E R E A S O N T O C H A N G E .
B E F O R E S R PB E F O R E S R P
A F T E R S R P
A F T E R S R P
A P P LY I N G S R P T O O U R T E S T I N G
• Tests are more granular
• Easier to understand and maintain
• Fewer changes to tests
• Failing tests point to only one responsibility instead of many
T H E O P E N C L O S E D
P R I N C I P L E
Y O U S H O U L D B E A B L E T O E X T E N D A C L A S S ’
B E H AV I O R , W I T H O U T M O D I F Y I N G I T.
B E F O R E S R PB E F O R E O C P
B E F O R E S R PA F T E R O C P
A P P LY I N G O C P T O O U R T E S T I N G
• Classes under test are open so we can:
• inject mocked dependencies
• override methods that make calls to external services
L I S K O V
S U B S T I T U T I O N
P R I N C I P L E
D E R I V E D C L A S S E S M U S T B E
S U B S T I T U TA B L E F O R T H E I R B A S E C L A S S E S .
B E F O R E S R PB E F O R E L S P
B E F O R E S R PA F T E R L S P
A P P LY I N G L S P T O O U R T E S T I N G
• Allows us to mock dependencies by creating substitutes (derived classes or
mocks)
• Helps keep tests isolated so we only test one responsibility
• Less coupling to dependencies means we don’t need to know as much
about the internals to write a test
I N T E R FA C E
S E G R E G AT I O N
P R I N C I P L E
M A K E F I N D G R A I N E D I N T E R FA C E S
T H AT A R E C L I E N T S P E C I F I C .
B E F O R E S R PB E F O R E I S P
B E F O R E S R PA F T E R I S P
A P P LY I N G I S P T O O U R T E S T I N G
• Classes depend on narrower interfaces, making
• tests smaller
• mocking easier
D E P E N D E N C Y
I N V E R S I O N
P R I N C I P L E
D E P E N D O N A B S T R A C T I O N S , N O T O N
C O N C R E T I O N S .
B E F O R E S R PB E F O R E D I P
B E F O R E S R PA F T E R D I P
A P P LY I N G D I P T O O U R T E S T I N G
• Writing more decoupled code allows mocking and injecting of
dependencies
• If you skip these abstractions, your tests become more end-to-end tests
because you are unable to swap out implementations for mocks.
N O W W H AT ?
• Use the SOLID Principles to guide your way toward keeping your codebase
clean, easier to extend, maintain, and reuse
• SOLID is not the law
• TDD does not guarantee good design
• Don’t forget to engage your brain!
Q U E S T I O N S ?
P L E A S E T H A N K
T H E S P O N S O R S !
H T T P S : / / W W W. T H A T C O N F E R E N C E . C O M /
S P O N S O R S
C O D E & R E S O U R C E S
H T T P S : / / G I T H U B . C O M / J E N N A P E D E R S O N / T D D - U S I N G - T H E - S O L I D - P R I N C I P L E S
S O L I D M O T I VAT I O N A L P H O T O C R E D I T S : H T T P : / / B I T. LY / M O T I VAT I O N A L _ S O L I D
T H A N K Y O U !
@ J E N N A P E D E R S O N
W W W. 6 1 2 S O F T WA R E F O U N D RY. C O M

TDD Using the SOLID Principles

  • 2.
    L E AVE N O T R A C E : T E S T D R I V E N D E V E L O P M E N T U S I N G T H E S O L I D P R I N C I P L E S @ J E N N A P E D E R S O N W W W. 6 1 2 S O F T WA R E F O U N D RY. C O M C O P Y R I G H T © 2 0 1 4 J E N N A P E D E R S O N . A L L R I G H T S R E S E R V E D .
  • 3.
    W H OA M I ? • Independent, full-stack web developer • Code geek + process geek - agile, TDD, productivity, etc. • Co-Ambassador for the Twin Cities Geekettes • www.geekettes.io • @jennapederson • www.612softwarefoundry.com
  • 4.
    A G EN D A • What makes a design good? • Test Driven Development • SOLID Principles • Examples
  • 5.
    W H ATM A K E S A D E S I G N G O O D ?
  • 6.
    R I GI D I T Y I T I S H A R D T O C H A N G E B E C A U S E E V E RY C H A N G E A F F E C T S T O O M A N Y O T H E R PA R T S O F T H E S Y S T E M .
  • 7.
    F R AG I L I T Y W H E N Y O U M A K E A C H A N G E , U N E X P E C T E D PA R T S O F T H E S Y S T E M B R E A K .
  • 8.
    I M MO B I L I T Y I T I S H A R D T O R E U S E I N A N O T H E R A P P L I C A T I O N B E C A U S E I T C A N N O T B E D I S E N TA N G L E D F R O M T H E C U R R E N T A P P L I C A T I O N .
  • 9.
    W H ATI S T D D ? M A K E I T W O R K , M A K E I T B E T T E R
  • 12.
    S I NG L E R E S P O N S I B I L I T Y P R I N C I P L E A C L A S S S H O U L D H AV E O N E A N D O N LY O N E R E A S O N T O C H A N G E .
  • 13.
    B E FO R E S R PB E F O R E S R P
  • 14.
    A F TE R S R P
  • 15.
    A F TE R S R P
  • 16.
    A P PLY I N G S R P T O O U R T E S T I N G • Tests are more granular • Easier to understand and maintain • Fewer changes to tests • Failing tests point to only one responsibility instead of many
  • 17.
    T H EO P E N C L O S E D P R I N C I P L E Y O U S H O U L D B E A B L E T O E X T E N D A C L A S S ’ B E H AV I O R , W I T H O U T M O D I F Y I N G I T.
  • 18.
    B E FO R E S R PB E F O R E O C P
  • 19.
    B E FO R E S R PA F T E R O C P
  • 20.
    A P PLY I N G O C P T O O U R T E S T I N G • Classes under test are open so we can: • inject mocked dependencies • override methods that make calls to external services
  • 21.
    L I SK O V S U B S T I T U T I O N P R I N C I P L E D E R I V E D C L A S S E S M U S T B E S U B S T I T U TA B L E F O R T H E I R B A S E C L A S S E S .
  • 22.
    B E FO R E S R PB E F O R E L S P
  • 23.
    B E FO R E S R PA F T E R L S P
  • 24.
    A P PLY I N G L S P T O O U R T E S T I N G • Allows us to mock dependencies by creating substitutes (derived classes or mocks) • Helps keep tests isolated so we only test one responsibility • Less coupling to dependencies means we don’t need to know as much about the internals to write a test
  • 25.
    I N TE R FA C E S E G R E G AT I O N P R I N C I P L E M A K E F I N D G R A I N E D I N T E R FA C E S T H AT A R E C L I E N T S P E C I F I C .
  • 26.
    B E FO R E S R PB E F O R E I S P
  • 27.
    B E FO R E S R PA F T E R I S P
  • 28.
    A P PLY I N G I S P T O O U R T E S T I N G • Classes depend on narrower interfaces, making • tests smaller • mocking easier
  • 29.
    D E PE N D E N C Y I N V E R S I O N P R I N C I P L E D E P E N D O N A B S T R A C T I O N S , N O T O N C O N C R E T I O N S .
  • 30.
    B E FO R E S R PB E F O R E D I P
  • 31.
    B E FO R E S R PA F T E R D I P
  • 32.
    A P PLY I N G D I P T O O U R T E S T I N G • Writing more decoupled code allows mocking and injecting of dependencies • If you skip these abstractions, your tests become more end-to-end tests because you are unable to swap out implementations for mocks.
  • 33.
    N O WW H AT ? • Use the SOLID Principles to guide your way toward keeping your codebase clean, easier to extend, maintain, and reuse • SOLID is not the law • TDD does not guarantee good design • Don’t forget to engage your brain!
  • 34.
    Q U ES T I O N S ?
  • 35.
    P L EA S E T H A N K T H E S P O N S O R S ! H T T P S : / / W W W. T H A T C O N F E R E N C E . C O M / S P O N S O R S
  • 37.
    C O DE & R E S O U R C E S H T T P S : / / G I T H U B . C O M / J E N N A P E D E R S O N / T D D - U S I N G - T H E - S O L I D - P R I N C I P L E S S O L I D M O T I VAT I O N A L P H O T O C R E D I T S : H T T P : / / B I T. LY / M O T I VAT I O N A L _ S O L I D
  • 38.
    T H AN K Y O U ! @ J E N N A P E D E R S O N W W W. 6 1 2 S O F T WA R E F O U N D RY. C O M