Test driven development
Upcoming SlideShare
Loading in...5

Test driven development






Total Views
Views on SlideShare
Embed Views



1 Embed 8

http://www.browserlondon.com 8



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Test driven development Test driven development Presentation Transcript

    • Test Driven Development An Introduction by Lukasz Kujawa
    • About Me- Lukasz Kujawa- Lead Developer at Gloople- http://systemsarchitect.net/- @lukaszkujawa
    • What is TDD?"Test-driven development (TDD) is a softwaredevelopment process that relies on the repetition of avery short development cycle: first the developer writesan (initially failing) automated test case that defines adesired improvement or new function, then produces theminimum amount of code to pass that test, and finallyrefactors the new code to acceptable standards"- Wikipedia
    • What is TDD in English?Create test before code
    • TDD Cycle
    • The Three Laws of TDD- You might not write production code until youhave written a failing unit test- You might not write more of a unit test than issufficient to fail, and not compiling is failing- You may not write more production code thenis sufficient to pass the currently failing test
    • TDD Iterations Test Production code Write minimal Unit Test Create a Class Call method of the class Create the Method Assert output of the Add logic to return method expected output
    • Unit Testing"In computer programming, unit testing is a method bywhich individual units of source code, sets of one or morecomputer program modules together with associatedcontrol data, usage procedures, and operating procedures,are tested to determine if they are fit for use."- Wikipedia
    • Unit Testing in EnglishTesting smallest testable parts of application
    • Unit Test is not a Test- Very narrow and well defined scope- No complex dependencies- Test only one application layer- Environment independent- Fast
    • TTD - Too Damn Difficult?
    • Benefits for Developer- Confidence- Code quality- Time- Refactoring- Reopening issues- Self documenting code
    • Benefits for Business
    • Benefits for Business- Shorten development cycles- Delivering more- Stable products
    • Research 1"Art of Unit Testing" by Roy Osherove Stage Team without tests Team with tests Implementation 7 days 14 days (coding) Integration 7 days 2 days Testing / Bug Fixing 12 days 8 days Overall release time 26 days 24 days Bugs in production 71 11
    • Research 2Quality improvement through test drivendevelopment: results and experiences of fourindustrial teams (2008) by NachiappanNagappan, E. Michael Maximilien, ThirumaleshBhat and Laurie Williamshttp://biblio.gdinwiddie.com/biblio/StudiesOfTestDrivenDevelopment
    • Research 2 Metric IBM Drivers Microsoft: Microsoft: Microsoft: VS description Windows MSN Defect density W X Y Z of comparable team in organization but not using TDD Defect density 0.61W 0.38X 0.24Y 0.09Z of team using TDD Increase in time 15-20% 25-35% 15% 20-25% taken to code the feature because of TDD (%)
    • How to test?<?phpMyFramework::bootstrap();$obj = new Class_Under_Test();if( $obj->something(Foo) != 47 ) { throw new Exception(Incorrect output for Foo);}if( $obj->someting(Bar) !== false ) { throw new Exception(Incorrect output for Bar);}
    • Unit Test Frameworks- PHPUnit- SimpleTest
    • Using Framework- API- No maintenance- Integration with IDE- Code coverage report- Mocks
    • <?phpclass MyClassTest extends PHPUnit_Framework_TestCase { public static function setUpBeforeClass() { MyFramework::initAutoloader(); } protected function setUp() { $this->myClass = new MyClass(); } public function testSomething() { $this->assertEquals(1, $this->myClass->something()); } public function testSomethingElse() { $this->assertTrue( $this->myClass->somethingElse() ); $this->assertFalse $this->myClass->somethingElse( 47 ) ); }}
    • PHPUnit - Eclipse integration
    • Unit Testing - small print- Cant test directly private, protected and staticmethods- Tests only functionality- Database- Requires rigorous discipline
    • Q&A