SlideShare a Scribd company logo
1 of 40
Download to read offline
Agile Software Development in
Practice – A Developer
Perspective

                Weerasak Witthawaskul
                       Mr. Sweet Corn
                       29 August 2009
Companies' Most Important Assets

Employees = You
Current Treatments
  More workload /
  documentation
  = More stresses, High
  turnover, Low quality
  work
Happy, talented,
empowered, passionate
employees = productive
To Agile, or Not to Agile
What? You are still not an agile
            developer?
                           Agile will make you
                            more, if not most,
                            productive
                               Don't do things that do
                                not help make working
                                software
                               No more repeated bugs
   Agile is about organizational transformation
   Try Scrum for project management
   Try XP for design, develop and test
Pick 3 out of 4

        Deadline



Scope                 Budget



        Quality
Agile Practices

   User Stories
   Iteration Planning Meeting
   Daily Stand-up Meeting
   Retrospective
   TDD
   Refactoring
   Continuous Integration
User Story Stack
Scrum in Theory
Scrum in Practice
Card Wall
 Ready    In Dev     In BA     In QA   Ready for
for Dev                                Business
Release and Iteration Plannings
                           Daily Standup




Release 1 Planning
IPM 1
         End of Iteration 1
            Retrospective
                     IPM 2 End of Iteration 2
                                Retrospective
                           Release 2 Planning
                                        IPM 3             End of Iteration 3
                                   Release 1                 Retrospective
                                                                      IPM 4
                       IPM = Iteration Planning Meeting
Iteration Planning
   Review vision and roadmap
   Review development status from previous
    iterations
   Demo of previous iterations
   Review team availability & capacity
   Review product backlog & select items for
    iteration
   Identify tasks & estimates
   Commit
Productive Scrum

   Time management is crucial
   All roles must be identified
       Business / PM / BA / Tech Lead / Dev / QA
   Onsite team is most desirable
   Be concise and direct
   Trust that everybody does the best job possible
    given context and timeframe
   Daily or on-demand group huddle
   Use simplest tools possible
Measurements
   Frequent releases of working software
   Iteration Velocity
   Repeated Defects
   Team productivity / morale / happiness
Eternal Engineering Sunshine of
      the Spotless Minds
   We tend to overengineer design...
       Lets do the Strategy pattern when there is only one
        algorithm
       Lets use the Observer pattern when there is only
        one observable and one observer
       Lets use this because in the future...
       I have beautiful diagrams of the system; don't
        change it
       Aim for 100% test coverage
XP is for...
eXtreme Programming (XP)
                                      Move People                                   100%
               CRC                      Around
               Cards                                                                 Unit
                                      Change    We                                  Tests
    Simple                             Pair    Need
                                               Help                                Passed
    Design
               Complex
               Problem                                              Run All Unit
                             Failed                                   Tests
                              Unit                    New Unit
Next Task           Create    Test        Pair         Tests
Or Failed                             Programming              Continuous
                    a Unit                                     Integration
Acceptance          Test     Passed                    New
Test                          Unit                  Functionality
                                      Simple   Complex
                                      Code      Code
                                       Refactor                              Acceptance
                                      Mercilessly                               Test
                                                                               Passed
Copyright 200 J. D. Wells
                             Collective Code Ownership
Pair Programming

   Pairing Matrix
       Developer    Dev A       Dev B       Dev C       Dev D


       Dev A                    Monday      Tuesday     Wednesday


       Dev B        Monday                  Wednesday   Thursday


       Dev C        Tuesday     Wednesday               Friday


       Dev D        Wednesday   Thursday    Friday



   Ping Pong Programming
Test Driven Development

   New Project
       Help you shape your design from the caller point of
        view
       Set of tests (test suite) become assets
   Reengineering Project
       Help you understand existing implementation by
        writing test coverage of existing code
       Ensure that your refactored code and new code do
        not break tests
Three Rules of TDD Fight Club
Three Rules of Fight Club TDD


   You are not allowed to write any production
    code unless it is to make a failing unit test pass.
   You are not allowed to write any more of a unit
    test than is sufficient to fail; and compilation
    failures are failures.
   You are not allowed to write any more
    production code than is sufficient to pass the
    one failing unit test.
Typical Coding
   Understand user accpetance criterias in
    each user story
   Write functional tests for each criteria
       They will fail
   For each functional test
       Write unit tests for controllers
       Think about what should be in controllers, what
        should be abstracted into models
       Write unit tests for models
       Write code to make tests pass
Test Double

         Use Stubs / Mocks
         Stubbing things you
          don't want to test but
          are necessary
         Mocking things you
          expect some
          behaviors
         Examples?
Level of Tests
   Unit tests
       One class; stubs the rest
   Functional tests
       Groups of classes; use fixtures as test data
   External tests
       External service dependencies; may fail if
        external services are unavailable
   Integration tests; User acceptance tests
       End-to-end tests
       Webapp tests from web browser
Testing Styles
   Assertion is so '90s
      assert_equals(”must be empty”, message, ””)
   Behavior Drien Design (BDD)
      message.should == ””
   Test name prefixed is for grandpa
      void testMessageMustBeEmpty() { … }
   Use annotation
      [test]
      void messageMustBeEmpty() { … }
BDD
   We describe something that it must behave …
    describe ”user login” do
      it ”must not allow user login without password” do
      … password.should_not be_nil ...
      end
      it ”checks password from the user id” do
      … user.valid?(password).should == true ...
      end
    end
BDD and User Stories

   Story n
    As a …stakeholder...
    I want to …goal...
    so that …reason/business value...
       Scenario m
        Given …context...
        When ...event...
        Then ...expectation...
From User Story to Implementation Demo




     Story 1
     Title: Customer withdraws cash
     As a customer,
     I want to withdraw cash from an ATM,
     so that I don’t have to wait in line at the bank.
Demo – ATM Withdrawal
Scenario 1: Account is in credit     Scenario 2: Account is overdrawn past
                                     the overdraft limit
Given the account is in credit
                                     Given the account is overdrawn
And the card is valid                And the card is valid
And the dispenser contains cash      When the customer requests cash
                                     Then ensure a rejection message is
When the customer requests cash      displayed
Then ensure the account is debited   And ensure cash is not dispensed
                                     And ensure the card is returned
And ensure cash is dispensed

And ensure the card is returned
Spec-first Design – User/BA pairing
BA / Dev Pairing



                   Dev Pairing
Test / Code / Test Cycle
Dev done when we see all dots




                 With nested option, test result
                 becomes documentation
Checkin Messages as Documents

   Instead of
       svn ci -m ”fixing bugs”
   Try
       svn ci -m ”[jira 1234] Boat/Pok – Checked null
        pointers of cart.items before accessing each item”
   Why?
       svn log | grep -i -C 3 pok | less
       svn log | grep -i -C 3 cart | less
       Bug tracking tool integration
Continuous Integration
                              Builder Server 2

           Builder Server 1

 VCS




       Check-in
Tools
   User Stories
       Index cards
   User Story Tracking – Card Wall
       Whiteboard
       Mingle
   VCS
       Subversion / Git
   Bug Tracking
       Jira / Bugzilla
Testing Libraries / Tools
   Mockito – Java




   rSpec DSL – Ruby
   Selenium/Watir – Web
    UAT
Presentation Summary

   No more excuse not to do agile
   If you can't go full-stream agile, consider
    gradually applying agile practices
   Self-discipline, don't do shortcuts, i.e. always
    test first. You will thank yourself later.
   There is no 'i' in Teamwork; develop soft skills
    to work effectively with others
Keep Learning

   Self Study – Keep up with technololgy
   Software Craftmanship: Apprenticing
   Higher Education
Towards Agile Manifesto – Thai Edition
Now You Have Questions



       Time to Ask!
   Agile 2009 http://www.agile2009.org/
   Martin Fowler Bliki http://martinfowler.com/bliki/
   Agile Consulting
    http://agileconsulting.blogspot.com/
   Planet ThoughtWorks
    http://blogs.thoughtworks.com/

More Related Content

What's hot

Flavours of agile software engineering
Flavours of agile software engineeringFlavours of agile software engineering
Flavours of agile software engineering
Zeeshan Masood S
 
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex EnvironmentsDr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
AgileSparks
 
Shirly Ronen - User story testing activities
Shirly Ronen - User story testing activitiesShirly Ronen - User story testing activities
Shirly Ronen - User story testing activities
AgileSparks
 
Shirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-asShirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-as
AgileSparks
 
Test driven development
Test driven developmentTest driven development
Test driven development
Shalabh Saxena
 
Agile engineering practices – a short overview
Agile engineering practices – a short overviewAgile engineering practices – a short overview
Agile engineering practices – a short overview
Serhiy Yevtushenko
 
How to bake in quality in agile scrum projects
How to bake in quality in agile scrum projectsHow to bake in quality in agile scrum projects
How to bake in quality in agile scrum projects
Santanu Bhattacharya
 
Shirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defectShirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defect
AgileSparks
 

What's hot (20)

Automate your way to agility
Automate your way to agilityAutomate your way to agility
Automate your way to agility
 
Bdd Introduction
Bdd IntroductionBdd Introduction
Bdd Introduction
 
Flavours of agile software engineering
Flavours of agile software engineeringFlavours of agile software engineering
Flavours of agile software engineering
 
Creating value using Agile Methods- Nanda Lankalapalli
Creating value using Agile Methods- Nanda LankalapalliCreating value using Agile Methods- Nanda Lankalapalli
Creating value using Agile Methods- Nanda Lankalapalli
 
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex EnvironmentsDr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
 
Shirly Ronen - User story testing activities
Shirly Ronen - User story testing activitiesShirly Ronen - User story testing activities
Shirly Ronen - User story testing activities
 
Shirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-asShirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-as
 
Cobol agile
Cobol agileCobol agile
Cobol agile
 
Agile Testing
Agile TestingAgile Testing
Agile Testing
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
BDD presentation
BDD presentationBDD presentation
BDD presentation
 
Extreme programming (xp)
Extreme programming (xp)Extreme programming (xp)
Extreme programming (xp)
 
Scrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboScrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - Colombo
 
Agile Maintenance
Agile MaintenanceAgile Maintenance
Agile Maintenance
 
Facilitating Release Planning Event
Facilitating Release Planning EventFacilitating Release Planning Event
Facilitating Release Planning Event
 
Scrum Testing Methodology
Scrum Testing MethodologyScrum Testing Methodology
Scrum Testing Methodology
 
(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should know(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should know
 
Agile engineering practices – a short overview
Agile engineering practices – a short overviewAgile engineering practices – a short overview
Agile engineering practices – a short overview
 
How to bake in quality in agile scrum projects
How to bake in quality in agile scrum projectsHow to bake in quality in agile scrum projects
How to bake in quality in agile scrum projects
 
Shirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defectShirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defect
 

Similar to Agile Software Development in Practice - A Developer Perspective

Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
Michael Palotas
 
Agile Testing at eBay
Agile Testing at eBayAgile Testing at eBay
Agile Testing at eBay
Dominik Dary
 
Software Design for Testability
Software Design for TestabilitySoftware Design for Testability
Software Design for Testability
amr0mt
 

Similar to Agile Software Development in Practice - A Developer Perspective (20)

Releasing fast code - The DevOps approach
Releasing fast code - The DevOps approachReleasing fast code - The DevOps approach
Releasing fast code - The DevOps approach
 
Behavior Driven Development by Example
Behavior Driven Development by ExampleBehavior Driven Development by Example
Behavior Driven Development by Example
 
Testing Sap: Modern Methodology
Testing Sap: Modern MethodologyTesting Sap: Modern Methodology
Testing Sap: Modern Methodology
 
Beyond Scrum: Scaling Agile with Continuous Delivery and Subversion
Beyond Scrum: Scaling Agile with Continuous Delivery and SubversionBeyond Scrum: Scaling Agile with Continuous Delivery and Subversion
Beyond Scrum: Scaling Agile with Continuous Delivery and Subversion
 
Effective Strategies for Distributed Testing
Effective Strategies for Distributed TestingEffective Strategies for Distributed Testing
Effective Strategies for Distributed Testing
 
TDD in functional testing with WebDriver
TDD in functional testing with WebDriverTDD in functional testing with WebDriver
TDD in functional testing with WebDriver
 
Manual testing1
Manual testing1Manual testing1
Manual testing1
 
Agile testing
Agile testingAgile testing
Agile testing
 
Eswaranand Attuluri CV
Eswaranand Attuluri CVEswaranand Attuluri CV
Eswaranand Attuluri CV
 
Essential practices and thinking tools for Agile Adoption
Essential practices and thinking tools for Agile AdoptionEssential practices and thinking tools for Agile Adoption
Essential practices and thinking tools for Agile Adoption
 
Product quality in agile project
Product quality in agile projectProduct quality in agile project
Product quality in agile project
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
 
Agile Testing 20021015
Agile Testing 20021015Agile Testing 20021015
Agile Testing 20021015
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
 
Flexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts ExplainedFlexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts Explained
 
Agile Testing Overview
Agile Testing OverviewAgile Testing Overview
Agile Testing Overview
 
Agile Testing, Uncertainty, Risk, and Why It All Works
Agile Testing, Uncertainty, Risk, and Why It All WorksAgile Testing, Uncertainty, Risk, and Why It All Works
Agile Testing, Uncertainty, Risk, and Why It All Works
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
Agile Testing at eBay
Agile Testing at eBayAgile Testing at eBay
Agile Testing at eBay
 
Software Design for Testability
Software Design for TestabilitySoftware Design for Testability
Software Design for Testability
 

Recently uploaded

Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
FIDO Alliance
 

Recently uploaded (20)

The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform Engineering
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptx
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptx
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch Tuesday
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideCollecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 

Agile Software Development in Practice - A Developer Perspective

  • 1. Agile Software Development in Practice – A Developer Perspective Weerasak Witthawaskul Mr. Sweet Corn 29 August 2009
  • 2. Companies' Most Important Assets Employees = You Current Treatments More workload / documentation = More stresses, High turnover, Low quality work Happy, talented, empowered, passionate employees = productive
  • 3. To Agile, or Not to Agile
  • 4. What? You are still not an agile developer?  Agile will make you more, if not most, productive  Don't do things that do not help make working software  No more repeated bugs  Agile is about organizational transformation  Try Scrum for project management  Try XP for design, develop and test
  • 5. Pick 3 out of 4 Deadline Scope Budget Quality
  • 6. Agile Practices  User Stories  Iteration Planning Meeting  Daily Stand-up Meeting  Retrospective  TDD  Refactoring  Continuous Integration
  • 10. Card Wall Ready In Dev In BA In QA Ready for for Dev Business
  • 11. Release and Iteration Plannings Daily Standup Release 1 Planning IPM 1 End of Iteration 1 Retrospective IPM 2 End of Iteration 2 Retrospective Release 2 Planning IPM 3 End of Iteration 3 Release 1 Retrospective IPM 4 IPM = Iteration Planning Meeting
  • 12. Iteration Planning  Review vision and roadmap  Review development status from previous iterations  Demo of previous iterations  Review team availability & capacity  Review product backlog & select items for iteration  Identify tasks & estimates  Commit
  • 13. Productive Scrum  Time management is crucial  All roles must be identified  Business / PM / BA / Tech Lead / Dev / QA  Onsite team is most desirable  Be concise and direct  Trust that everybody does the best job possible given context and timeframe  Daily or on-demand group huddle  Use simplest tools possible
  • 14. Measurements  Frequent releases of working software  Iteration Velocity  Repeated Defects  Team productivity / morale / happiness
  • 15. Eternal Engineering Sunshine of the Spotless Minds  We tend to overengineer design...  Lets do the Strategy pattern when there is only one algorithm  Lets use the Observer pattern when there is only one observable and one observer  Lets use this because in the future...  I have beautiful diagrams of the system; don't change it  Aim for 100% test coverage
  • 17. eXtreme Programming (XP) Move People 100% CRC Around Cards Unit Change We Tests Simple Pair Need Help Passed Design Complex Problem Run All Unit Failed Tests Unit New Unit Next Task Create Test Pair Tests Or Failed Programming Continuous a Unit Integration Acceptance Test Passed New Test Unit Functionality Simple Complex Code Code Refactor Acceptance Mercilessly Test Passed Copyright 200 J. D. Wells Collective Code Ownership
  • 18. Pair Programming  Pairing Matrix Developer Dev A Dev B Dev C Dev D Dev A Monday Tuesday Wednesday Dev B Monday Wednesday Thursday Dev C Tuesday Wednesday Friday Dev D Wednesday Thursday Friday  Ping Pong Programming
  • 19. Test Driven Development  New Project  Help you shape your design from the caller point of view  Set of tests (test suite) become assets  Reengineering Project  Help you understand existing implementation by writing test coverage of existing code  Ensure that your refactored code and new code do not break tests
  • 20. Three Rules of TDD Fight Club
  • 21. Three Rules of Fight Club TDD  You are not allowed to write any production code unless it is to make a failing unit test pass.  You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.  You are not allowed to write any more production code than is sufficient to pass the one failing unit test.
  • 22. Typical Coding  Understand user accpetance criterias in each user story  Write functional tests for each criteria  They will fail  For each functional test  Write unit tests for controllers  Think about what should be in controllers, what should be abstracted into models  Write unit tests for models  Write code to make tests pass
  • 23. Test Double  Use Stubs / Mocks  Stubbing things you don't want to test but are necessary  Mocking things you expect some behaviors  Examples?
  • 24. Level of Tests  Unit tests  One class; stubs the rest  Functional tests  Groups of classes; use fixtures as test data  External tests  External service dependencies; may fail if external services are unavailable  Integration tests; User acceptance tests  End-to-end tests  Webapp tests from web browser
  • 25. Testing Styles  Assertion is so '90s assert_equals(”must be empty”, message, ””)  Behavior Drien Design (BDD) message.should == ””  Test name prefixed is for grandpa void testMessageMustBeEmpty() { … }  Use annotation [test] void messageMustBeEmpty() { … }
  • 26. BDD  We describe something that it must behave … describe ”user login” do it ”must not allow user login without password” do … password.should_not be_nil ... end it ”checks password from the user id” do … user.valid?(password).should == true ... end end
  • 27. BDD and User Stories  Story n As a …stakeholder... I want to …goal... so that …reason/business value...  Scenario m Given …context... When ...event... Then ...expectation...
  • 28. From User Story to Implementation Demo Story 1 Title: Customer withdraws cash As a customer, I want to withdraw cash from an ATM, so that I don’t have to wait in line at the bank.
  • 29. Demo – ATM Withdrawal Scenario 1: Account is in credit Scenario 2: Account is overdrawn past the overdraft limit Given the account is in credit Given the account is overdrawn And the card is valid And the card is valid And the dispenser contains cash When the customer requests cash Then ensure a rejection message is When the customer requests cash displayed Then ensure the account is debited And ensure cash is not dispensed And ensure the card is returned And ensure cash is dispensed And ensure the card is returned
  • 30. Spec-first Design – User/BA pairing
  • 31. BA / Dev Pairing Dev Pairing
  • 32. Test / Code / Test Cycle Dev done when we see all dots With nested option, test result becomes documentation
  • 33. Checkin Messages as Documents  Instead of  svn ci -m ”fixing bugs”  Try  svn ci -m ”[jira 1234] Boat/Pok – Checked null pointers of cart.items before accessing each item”  Why?  svn log | grep -i -C 3 pok | less  svn log | grep -i -C 3 cart | less  Bug tracking tool integration
  • 34. Continuous Integration Builder Server 2 Builder Server 1 VCS Check-in
  • 35. Tools  User Stories  Index cards  User Story Tracking – Card Wall  Whiteboard  Mingle  VCS  Subversion / Git  Bug Tracking  Jira / Bugzilla
  • 36. Testing Libraries / Tools  Mockito – Java  rSpec DSL – Ruby  Selenium/Watir – Web UAT
  • 37. Presentation Summary  No more excuse not to do agile  If you can't go full-stream agile, consider gradually applying agile practices  Self-discipline, don't do shortcuts, i.e. always test first. You will thank yourself later.  There is no 'i' in Teamwork; develop soft skills to work effectively with others
  • 38. Keep Learning  Self Study – Keep up with technololgy  Software Craftmanship: Apprenticing  Higher Education
  • 39. Towards Agile Manifesto – Thai Edition
  • 40. Now You Have Questions Time to Ask!  Agile 2009 http://www.agile2009.org/  Martin Fowler Bliki http://martinfowler.com/bliki/  Agile Consulting http://agileconsulting.blogspot.com/  Planet ThoughtWorks http://blogs.thoughtworks.com/