TDD (JSAG)Presented By : Harinder Singh Bedi6 July 2011
AgendaWhat is TDD ?
Steps to start
Refactoring
TDD terminology
Benefits
JUnit
Mocktio
Continuous IntegrationTest Driven Development (TDD) or Test First Development is a Software Development technique and one of the key factors of Extreme Programming Methodology.Test Driven Development
Development ApproachesAd hoc development
Writing pseudo code first
Model Driven Development (MDD)
Test Driven Development (TDD)What is TDD ?TDD = Test First Development + Refactoring
How Does TDD HelpEnsures that your design is clean by focusing on creation of operations that are callable and testable
Shortens the programming feedback loop
Provides detailed specification through tests
Provides concrete evidence that your software works
Supports evolutionary development.TDD says ..When we have a new feature to implement, we initially often think, ok how should I implement this ?But TDD says don't do it! "In TDD, the greater emphasis is on the usage rather than implementation"
Steps to start TDDAnalyze the requirements and write the list of tasks or featuresPick a task or featureBrainstorm a list of tests for the task or featureReview the tests list and pick a testWrite the test caseRun the test case and see it fails to compileWrite only enough code that the test case compilesRun the test and see running the code failsWrite only enough code to just pass the testRefactor the production code and eliminate duplicationRepeat
When a bug is found ..First create a test case to reveal the bugModify the production code so that the failed test passes Finally run all the tests and make sure your bug is fixed and covered.
Refactoring is one of the most important parts of TDD, which means you need to refine the code design as you add new tests.Refactoring should be done consistently as you increment the software, adding tests and production code.Refactoring

TDD - Agile

  • 1.
    TDD (JSAG)Presented By: Harinder Singh Bedi6 July 2011
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
    Continuous IntegrationTest DrivenDevelopment (TDD) or Test First Development is a Software Development technique and one of the key factors of Extreme Programming Methodology.Test Driven Development
  • 10.
  • 11.
  • 12.
  • 13.
    Test Driven Development(TDD)What is TDD ?TDD = Test First Development + Refactoring
  • 14.
    How Does TDDHelpEnsures that your design is clean by focusing on creation of operations that are callable and testable
  • 15.
  • 16.
  • 17.
    Provides concrete evidencethat your software works
  • 18.
    Supports evolutionary development.TDDsays ..When we have a new feature to implement, we initially often think, ok how should I implement this ?But TDD says don't do it! "In TDD, the greater emphasis is on the usage rather than implementation"
  • 19.
    Steps to startTDDAnalyze the requirements and write the list of tasks or featuresPick a task or featureBrainstorm a list of tests for the task or featureReview the tests list and pick a testWrite the test caseRun the test case and see it fails to compileWrite only enough code that the test case compilesRun the test and see running the code failsWrite only enough code to just pass the testRefactor the production code and eliminate duplicationRepeat
  • 20.
    When a bugis found ..First create a test case to reveal the bugModify the production code so that the failed test passes Finally run all the tests and make sure your bug is fixed and covered.
  • 21.
    Refactoring is oneof the most important parts of TDD, which means you need to refine the code design as you add new tests.Refactoring should be done consistently as you increment the software, adding tests and production code.Refactoring
  • 22.
    TDD terminologyTestcase :Function or method that tests one behavior of the code Testsuite : Set of test cases, typically grouped by fixture. Fixture : generated via a setUp() method and destroyed in tearDown(). Assertion Function or macro allowing to compare the expected value against the actual one.setUp() : It is a method of the Test Case class in jUnit that can be redefined in your Test class and used to create the execution environment for all test cases in the class.
  • 23.
    TDD terminologyRefactoring :is a source code manipulation to improving the design of the code, without altering its external behavior. Unit : what is being tested, ranging from a single method to a set of classes. Mock object an object implementing the same interface as, or sub classing a class of the production code, and exhibiting a deterministic behavior. Red bar and green bar : comes from the graphical version of JUnit, where progression bar shows the execution of the tests, and goes from green to red when a test fails.
  • 24.
    TDD BenefitsTest Coverage: TDD does make sure that virtually every line is executed and tested.Test Repeatability : Having the tests to back you up can give you the courage to make changes that would otherwise be too risky to make.Documentation : The tests describe your understanding of how the code should behave. They also describe the API. Therefore, the tests are a form of documentation.API Design : when you write tests first, you put yourself in the position of a user of your program's API.
  • 25.
    TDD BenefitsSystem Design:A module that is independently testable is a module that is decoupled from the rest of the system. Reduced Debugging : When you move in the tiny little steps recommended by TDD, it is hardly ever necessary to use the debugger.Confidence : If you observe a team of developers who are practicing TDD, you will notice that every pair of developer had their code working a minute ago.
  • 26.
    Testing librariesJava -JUnitRuby – Test::UnitJavascript – Test.More or JSUnit no clear standardC++ - CPPUnitPHP - PHPUnitPython - PyUnit
  • 27.
    TDD frameworksJUnit :It is the primary test tool for satisfying the first requirement for a Java test framework. Tutorial Reference : \\harinder1637\Share-d\TDD\Couse materialMockito : is a Java-based framework for creating mock objects. It allows developers to create mocks based on classes or interfaces, specify behavior and return values for methods, and verify interactions.Tutorial Reference : http://gojko.net/2009/10/23/mockito-in-six-easy-examples/
  • 28.
    Continuous integrationContinuous integration(CI) is a software engineering practice in which isolated changes are immediately tested and reported on when they are added to a larger code base. The goal of CI is to provide rapid feedback so that if a defect is introduced into the code base, it can be identified and corrected as soon as possible. Continuous integration software tools can be used to automate the testing and build a document trail.
  • 29.
    Best Practices ofCIAutomate the build
  • 30.
    Create Tests tomake the build self-testing
  • 31.
    Everyone commits tothe baseline every day
  • 32.
    Every commit (tobaseline) should be built
  • 33.
    Everyone can seethe results of the latest build
  • 34.
  • 35.
    Automation testing isabsolute essential as the system grows e.g. selenium, fitnesseHaving a tester in the team from day 1 is a MUST
  • 36.
    By the timedeveloper is ready with a feature, Tester is also ready with scripts to break the feature
  • 37.
    Testers should evaluaterequirements and should actively participate with product team to do analysisTDD tests provide a way so that every developer machine can be tested. Also tests make the build self-testing.
  • 38.
    Software tools tosupport CIHudson – powerful software written in Java to automate build software, supports CVS, SVN, Git, Ant, Maven. Bamboo -- toautomate build software.
  • 39.
    BuildMaster -- proprietaryapplication life cycle management and continuous integration tool by Inedo.
  • 40.
    Questions / Queries/ Feedback ?Send to feedback@nagarro.comThank You