SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Test Driven Development
(TDD)
Sameer Soni
@_sameersoni
What TDD is not
• is not about Testing
• is not Test Last
What TDD is
is about
evolving the design of the system through Tests.
Game Of Life - Stories
1. Any live cell with fewer than two live neighbours dies, as if caused by
under-population.
2. Any live cell with two or three live neighbours lives on to the next
generation.
3. Any live cell with more than three live neighbours dies, as if by
overcrowding.
4. Any dead cell with exactly three live neighbours becomes a live cell, as
if by reproduction.
Specify what test should do
[TestClass]	
  
	
  	
  	
  	
  public	
  class	
  GameOfLifeTest	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  [TestMethod]	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  void	
  LiveCell_WithLessThanTwoNeighbour_Dies()	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //Given	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  CellState	
  cellState	
  =	
  CellState.ALIVE;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  int	
  neighbourCount	
  =	
  1;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //When	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  CellState	
  result	
  =	
  LifeRules.GetNewState(cellState,	
  neighbourCount);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //Then	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Assert.AreEqual(CellState.DEAD,	
  result);	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
}
Write enough to compile
public	
  class	
  LifeRules	
  
{	
  
	
  	
  	
  public	
  static	
  CellState	
  GetNewState(CellState	
  cellState,	
  int	
  neighbourCount)	
  
	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  throw	
  new	
  System.NotImplementedException();	
  
	
  	
  	
  }	
  
}
RED
Write enough to pass your
test
public	
  class	
  LifeRules	
  
{	
  
	
  	
  	
  public	
  static	
  CellState	
  GetNewState(CellState	
  currentState,	
  int	
  neighbourCount)	
  
	
  	
  	
  {	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  if	
  (currentState	
  ==	
  CellState.ALIVE	
  &&	
  neighbourCount	
  <	
  2)	
  
	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.DEAD;	
  
	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  return	
  currentState;	
  
	
  	
  	
  }	
  
}
GREEN
General Test Structure
Minimum Setup for Test (Given)
Invoke the event (When)
Verify assertions (Then)
Add Test for next story
[TestMethod]	
  
public	
  void	
  LiveCell_WithTwoOrThreeNeighbour_Survives()	
  
{	
  
	
  	
  	
  	
  //Given	
  
	
  	
  	
  	
  CellState	
  cellState	
  =	
  CellState.ALIVE;	
  
	
  	
  	
  	
  int	
  neighbourCount	
  =	
  3;	
  
	
  	
  	
  	
  //When	
  
	
  	
  	
  	
  CellState	
  result	
  =	
  LifeRules.GetNewState(cellState,	
  neighbourCount);	
  
	
  	
  	
  	
  //Then	
  
	
  	
  	
  	
  Assert.AreEqual(CellState.ALIVE,	
  result);	
  
}	
  
Add Implementation
public	
  class	
  LifeRules	
  
{	
  
	
  	
  	
  public	
  static	
  CellState	
  GetNewState(CellState	
  currentState,	
  int	
  neighbourCount)	
  
	
  	
  	
  {	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  if	
  (currentState	
  ==	
  CellState.ALIVE	
  &&	
  neighbourCount	
  <	
  2)	
  
	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.DEAD;	
  
	
  	
  	
  	
  	
  	
  	
  }	
  
if	
  (currentState	
  ==	
  CellState.ALIVE	
  &&	
  neighbourCount	
  >	
  3)	
  
	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.DEAD;	
  
	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  return	
  currentState;	
  
	
  	
  	
  }	
  
}
Add Test for two more stories
[TestMethod]	
  
public	
  void	
  LiveCell_WithMoreThanThreeNeighbour_Dies()	
  
{	
  
	
  	
  	
  	
  //Given	
  
	
  	
  	
  	
  CellState	
  cellState	
  =	
  CellState.ALIVE;	
  
	
  	
  	
  	
  	
  	
  	
  int	
  neighbourCount	
  =	
  4;	
  
	
  	
  	
  	
  //When	
  
	
  	
  	
  	
  CellState	
  result	
  =	
  LifeRules.GetNewState(cellState,	
  neighbourCount);	
  
	
  	
  	
  //Then	
  
	
  	
  	
  Assert.AreEqual(CellState.DEAD,	
  result);	
  
}	
  
[TestMethod]	
  
public	
  void	
  DeadCell_WithThreeNeighbour_Lives()	
  
{	
  
	
  	
  	
  	
  //Given	
  
	
  	
  	
  	
  CellState	
  cellState	
  =	
  CellState.DEAD;	
  
	
  	
  	
  	
  int	
  neighbourCount	
  =	
  3;	
  
	
  	
  	
  	
  //When	
  
	
  	
  	
  	
  CellState	
  result	
  =	
  LifeRules.GetNewState(cellState,	
  neighbourCount);	
  
	
  	
  	
  	
  //Then	
  
	
  	
  	
  	
  Assert.AreEqual(CellState.ALIVE,	
  result);	
  
}
Add remaining implementations
public	
  class	
  LifeRules	
  
{	
  
	
  	
  	
  	
  public	
  static	
  CellState	
  GetNewState(CellState	
  currentState,	
  int	
  neighbourCount)	
  
	
  	
  	
  	
  {	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (currentState	
  ==	
  CellState.ALIVE	
  &&	
  neighbourCount	
  <	
  2)	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.DEAD;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (currentState	
  ==	
  CellState.ALIVE	
  &&	
  neighbourCount	
  >	
  3)	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.DEAD;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (currentState	
  ==	
  CellState.DEAD	
  &&	
  neighbourCount	
  ==	
  3)	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.ALIVE;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  currentState;	
  
	
  	
  	
  	
  }	
  
}
REFACTOR
Refactored Code
public	
  class	
  LifeRules	
  
{	
  
	
  	
  	
  	
  public	
  static	
  CellState	
  GetNewState(CellState	
  currentState,	
  int	
  neighbourCount)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  switch	
  (currentState)	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  CellState.ALIVE:	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (neighbourCount	
  <	
  2	
  ||	
  neighbourCount	
  >	
  3)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.DEAD;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  CellState.DEAD:	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (neighbourCount	
  ==	
  3)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  CellState.ALIVE;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  currentState;	
  
	
  	
  	
  	
  }	
  
}
Theme of TDD
FAIL
PASS
REFACTOR
Crux of TDD
• Analysing the minimalistic need of story and
implementing it in the cleanest way possible
• Design the code unit by unit
Benefits of TDD
• Deliver what is necessary.
• Helps take baby steps.
• System so developed does just what is required, no
more, no less.
• No future stories development (YAGNI - You ain’t
gonna need it).
• Better Code Coverage
TDD results in decoupled design
• Favours composition over inheritance.
• Small loosely coupled classes.
• Promotes coding to supertypes.
Benefits of TDD
• Increased confidence in developers working on test-
driven codebases
• Better code quality (in particular, less coupling and
higher cohesion)
• Improved maintainability and changeability of
codebases
• Ability to refactor without fear of breaking things
Benefits of TDD
• Test act as a "living specification" of expected behaviour
• Smaller production codebases with more simple designs
• Easier detection of flaws in the interactions between
objects
• Reduced need for manual testing
• Faster feedback loop for discovering whether an
implementation is correct
Removes Code Smells
• Duplicate Code
• Long methods
• Classes with too much code
• Lot of unused code
• Too many private methods
• Excessive Overloading
Costs of TDD
Claim - Slower per-feature development work because tests take
a lot of time to write
Rebut - Prevents speculative design and living with debugger.
Claim - Tests are code in themselves, require maintenance and
that’s overhead.
Rebut - Better than maintaining bug list.
Claim - Effectiveness is highly dependent on experience/
discipline of dev team.
Rebut - TDD is not a silver bullet. Just like with any skill, one
needs time to hone their skills.
Good Test are
• Small
• Expressive
• Maintainable
• Should execute fast
• talk Domain language
• must be thorough
• automated
• repeatable
Flavours of Test
• Unit Tests
• Integration Tests
• End to End Tests
Unit testing frameworks
• JUnit/TestNG for Java
• NUnit/MsTest for C#
• Minitest/TestUnit for Ruby
• pyUnit/unittest for Python
Thank you

Más contenido relacionado

Similar a Test Driven Development (TDD)

J unit스터디슬라이드
J unit스터디슬라이드J unit스터디슬라이드
J unit스터디슬라이드
ksain
 
Core java concepts
Core    java  conceptsCore    java  concepts
Core java concepts
Chikugehlot
 
Advance unittest
Advance unittestAdvance unittest
Advance unittest
Reza Arbabi
 
Using Formal Methods to Create Instruction Set Architectures
Using Formal Methods to Create Instruction Set ArchitecturesUsing Formal Methods to Create Instruction Set Architectures
Using Formal Methods to Create Instruction Set Architectures
DVClub
 
Java fundamentals
Java fundamentalsJava fundamentals
Java fundamentals
HCMUTE
 
CS5393-Korat_Mittal_Akshay_ProjReport
CS5393-Korat_Mittal_Akshay_ProjReportCS5393-Korat_Mittal_Akshay_ProjReport
CS5393-Korat_Mittal_Akshay_ProjReport
Akshay Mittal
 
IPA Fall Days 2019
 IPA Fall Days 2019 IPA Fall Days 2019
IPA Fall Days 2019
Annibale Panichella
 
Reply if you have any doubts.public class Life {    public stati.pdf
Reply if you have any doubts.public class Life {    public stati.pdfReply if you have any doubts.public class Life {    public stati.pdf
Reply if you have any doubts.public class Life {    public stati.pdf
nareshsonyericcson
 
Core java by a introduction sandesh sharma
Core java by a introduction sandesh sharmaCore java by a introduction sandesh sharma
Core java by a introduction sandesh sharma
Sandesh Sharma
 

Similar a Test Driven Development (TDD) (20)

J unit스터디슬라이드
J unit스터디슬라이드J unit스터디슬라이드
J unit스터디슬라이드
 
JUnit PowerUp
JUnit PowerUpJUnit PowerUp
JUnit PowerUp
 
Some testing - Everything you should know about testing to go with @pedro_g_s...
Some testing - Everything you should know about testing to go with @pedro_g_s...Some testing - Everything you should know about testing to go with @pedro_g_s...
Some testing - Everything you should know about testing to go with @pedro_g_s...
 
Core java concepts
Core    java  conceptsCore    java  concepts
Core java concepts
 
Introduction to JUnit
Introduction to JUnitIntroduction to JUnit
Introduction to JUnit
 
00_Introduction to Java.ppt
00_Introduction to Java.ppt00_Introduction to Java.ppt
00_Introduction to Java.ppt
 
Advance unittest
Advance unittestAdvance unittest
Advance unittest
 
More topics on Java
More topics on JavaMore topics on Java
More topics on Java
 
Using Formal Methods to Create Instruction Set Architectures
Using Formal Methods to Create Instruction Set ArchitecturesUsing Formal Methods to Create Instruction Set Architectures
Using Formal Methods to Create Instruction Set Architectures
 
Cryptographic Hash Function using Cellular Automata
Cryptographic Hash Function using Cellular AutomataCryptographic Hash Function using Cellular Automata
Cryptographic Hash Function using Cellular Automata
 
Ifi7107 lesson4
Ifi7107 lesson4Ifi7107 lesson4
Ifi7107 lesson4
 
Java fundamentals
Java fundamentalsJava fundamentals
Java fundamentals
 
CS5393-Korat_Mittal_Akshay_ProjReport
CS5393-Korat_Mittal_Akshay_ProjReportCS5393-Korat_Mittal_Akshay_ProjReport
CS5393-Korat_Mittal_Akshay_ProjReport
 
IPA Fall Days 2019
 IPA Fall Days 2019 IPA Fall Days 2019
IPA Fall Days 2019
 
Reply if you have any doubts.public class Life {    public stati.pdf
Reply if you have any doubts.public class Life {    public stati.pdfReply if you have any doubts.public class Life {    public stati.pdf
Reply if you have any doubts.public class Life {    public stati.pdf
 
Chapter i(introduction to java)
Chapter i(introduction to java)Chapter i(introduction to java)
Chapter i(introduction to java)
 
Core java by a introduction sandesh sharma
Core java by a introduction sandesh sharmaCore java by a introduction sandesh sharma
Core java by a introduction sandesh sharma
 
Java Design Patterns: The State Pattern
Java Design Patterns: The State PatternJava Design Patterns: The State Pattern
Java Design Patterns: The State Pattern
 
Learn How to Develop a Distributed Game of Life with DDS
Learn How to Develop a Distributed Game of Life with DDSLearn How to Develop a Distributed Game of Life with DDS
Learn How to Develop a Distributed Game of Life with DDS
 
Java Tutorials
Java Tutorials Java Tutorials
Java Tutorials
 

Último

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Último (20)

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 

Test Driven Development (TDD)

  • 2. What TDD is not • is not about Testing • is not Test Last
  • 3. What TDD is is about evolving the design of the system through Tests.
  • 4. Game Of Life - Stories 1. Any live cell with fewer than two live neighbours dies, as if caused by under-population. 2. Any live cell with two or three live neighbours lives on to the next generation. 3. Any live cell with more than three live neighbours dies, as if by overcrowding. 4. Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
  • 5. Specify what test should do [TestClass]          public  class  GameOfLifeTest          {                  [TestMethod]                  public  void  LiveCell_WithLessThanTwoNeighbour_Dies()                  {                          //Given                          CellState  cellState  =  CellState.ALIVE;                          int  neighbourCount  =  1;                          //When                          CellState  result  =  LifeRules.GetNewState(cellState,  neighbourCount);                          //Then                          Assert.AreEqual(CellState.DEAD,  result);                  }          }   }
  • 6. Write enough to compile public  class  LifeRules   {        public  static  CellState  GetNewState(CellState  cellState,  int  neighbourCount)        {              throw  new  System.NotImplementedException();        }   }
  • 7. RED
  • 8. Write enough to pass your test public  class  LifeRules   {        public  static  CellState  GetNewState(CellState  currentState,  int  neighbourCount)        {                      if  (currentState  ==  CellState.ALIVE  &&  neighbourCount  <  2)                {                        return  CellState.DEAD;                }                return  currentState;        }   }
  • 10. General Test Structure Minimum Setup for Test (Given) Invoke the event (When) Verify assertions (Then)
  • 11. Add Test for next story [TestMethod]   public  void  LiveCell_WithTwoOrThreeNeighbour_Survives()   {          //Given          CellState  cellState  =  CellState.ALIVE;          int  neighbourCount  =  3;          //When          CellState  result  =  LifeRules.GetNewState(cellState,  neighbourCount);          //Then          Assert.AreEqual(CellState.ALIVE,  result);   }  
  • 12. Add Implementation public  class  LifeRules   {        public  static  CellState  GetNewState(CellState  currentState,  int  neighbourCount)        {                      if  (currentState  ==  CellState.ALIVE  &&  neighbourCount  <  2)                {                        return  CellState.DEAD;                }   if  (currentState  ==  CellState.ALIVE  &&  neighbourCount  >  3)            {                      return  CellState.DEAD;                }                return  currentState;        }   }
  • 13. Add Test for two more stories [TestMethod]   public  void  LiveCell_WithMoreThanThreeNeighbour_Dies()   {          //Given          CellState  cellState  =  CellState.ALIVE;                int  neighbourCount  =  4;          //When          CellState  result  =  LifeRules.GetNewState(cellState,  neighbourCount);        //Then        Assert.AreEqual(CellState.DEAD,  result);   }   [TestMethod]   public  void  DeadCell_WithThreeNeighbour_Lives()   {          //Given          CellState  cellState  =  CellState.DEAD;          int  neighbourCount  =  3;          //When          CellState  result  =  LifeRules.GetNewState(cellState,  neighbourCount);          //Then          Assert.AreEqual(CellState.ALIVE,  result);   }
  • 14. Add remaining implementations public  class  LifeRules   {          public  static  CellState  GetNewState(CellState  currentState,  int  neighbourCount)          {                        if  (currentState  ==  CellState.ALIVE  &&  neighbourCount  <  2)                  {                          return  CellState.DEAD;                  }                  if  (currentState  ==  CellState.ALIVE  &&  neighbourCount  >  3)                  {                          return  CellState.DEAD;                  }                  if  (currentState  ==  CellState.DEAD  &&  neighbourCount  ==  3)                  {                          return  CellState.ALIVE;                  }                  return  currentState;          }   }
  • 16. Refactored Code public  class  LifeRules   {          public  static  CellState  GetNewState(CellState  currentState,  int  neighbourCount)          {                  switch  (currentState)                  {                                  case  CellState.ALIVE:                                          if  (neighbourCount  <  2  ||  neighbourCount  >  3)                                                  return  CellState.DEAD;                                  break;                                  case  CellState.DEAD:                                          if  (neighbourCount  ==  3)                                                  return  CellState.ALIVE;                                  break;                  }                  return  currentState;          }   }
  • 18. Crux of TDD • Analysing the minimalistic need of story and implementing it in the cleanest way possible • Design the code unit by unit
  • 19. Benefits of TDD • Deliver what is necessary. • Helps take baby steps. • System so developed does just what is required, no more, no less. • No future stories development (YAGNI - You ain’t gonna need it). • Better Code Coverage
  • 20. TDD results in decoupled design • Favours composition over inheritance. • Small loosely coupled classes. • Promotes coding to supertypes.
  • 21. Benefits of TDD • Increased confidence in developers working on test- driven codebases • Better code quality (in particular, less coupling and higher cohesion) • Improved maintainability and changeability of codebases • Ability to refactor without fear of breaking things
  • 22. Benefits of TDD • Test act as a "living specification" of expected behaviour • Smaller production codebases with more simple designs • Easier detection of flaws in the interactions between objects • Reduced need for manual testing • Faster feedback loop for discovering whether an implementation is correct
  • 23. Removes Code Smells • Duplicate Code • Long methods • Classes with too much code • Lot of unused code • Too many private methods • Excessive Overloading
  • 24. Costs of TDD Claim - Slower per-feature development work because tests take a lot of time to write Rebut - Prevents speculative design and living with debugger. Claim - Tests are code in themselves, require maintenance and that’s overhead. Rebut - Better than maintaining bug list. Claim - Effectiveness is highly dependent on experience/ discipline of dev team. Rebut - TDD is not a silver bullet. Just like with any skill, one needs time to hone their skills.
  • 25. Good Test are • Small • Expressive • Maintainable • Should execute fast • talk Domain language • must be thorough • automated • repeatable
  • 26. Flavours of Test • Unit Tests • Integration Tests • End to End Tests
  • 27. Unit testing frameworks • JUnit/TestNG for Java • NUnit/MsTest for C# • Minitest/TestUnit for Ruby • pyUnit/unittest for Python