Your SlideShare is downloading. ×
  • Like
Test driven development_continuous_integration
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Test driven development_continuous_integration

  • 3,927 views
Published

This is the slides of my talk about test-driven development and continuous integration on 2011/06/11

This is the slides of my talk about test-driven development and continuous integration on 2011/06/11

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Excellent
    Are you sure you want to
    Your message goes here
  • Excellent!!
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,927
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
212
Comments
2
Likes
18

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Test-Driven Development & Continuous Integration Hao-Cheng Lee 本著作係依據創用 CC Attribution-ShareAlike 3.0 Unported 授權條款進行授權。如欲瀏覽本授權條款之副本,請造訪 http://creativecommons.org/licenses/by-sa/3.0/ ,或寄信至 Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA 。
  • 2. About me● Hao-Cheng Lee● Java Engineer for 7+ years● Quality Engineer@Yahoo (till yesterday ;-))● Interested in Java, Scala, TDD, CI● email: haocheng.lee@gmail.com● twitter: https://twitter.com/#!/haocheng
  • 3. Agenda● What is TDD?● Why use TDD?● How to do TDD?● What is CI?● Why use CI?● TDD + CI
  • 4. TDD = TFD +Refactoring
  • 5. Not aboutwriting tests...
  • 6. TDD is aboutwriting better code
  • 7. from http://ch.englishbaby.com/forum/LifeTalk/thread/441379
  • 8. Test Myths
  • 9. I have no time for testing
  • 10. Technical Debt from http://www.freedebtadvice-uk.com/
  • 11. My code isBUG-FREE!
  • 12. from http://vincentshy.pixnet.net/blog/post/5397455
  • 13. QA will do the testing
  • 14. Black Box Testing from http://www.jasonser.com/marketing-black-box/
  • 15. http://www.ocoee.org/Departments/HR/
  • 16. Fasterfrom http://cllctr.com/view/c2fdb4d2625e109069c843ea1bb99e50
  • 17. from Test Driven Development Tutorial by Kirrily Robert
  • 18. Faster● Shorter release cycle● Automation saves time● Find bugs earlier
  • 19. Betterfrom http://www.nataliedee.com/archives/2005/sep/
  • 20. Better● Greater code coverage● The courage to refactor● Prevent regression bugs● Improve your design
  • 21. "Im not a great programmer;Im just a good programmerwith great habits." - Kent Beck
  • 22. Testing the Old Way
  • 23. TDD
  • 24. TDD
  • 25. How to do TDD?● Design: figure out what you want to do● Test: write a test to express the design ○ It should FAIL● Implement: write the code● Test again ○ It should PASS
  • 26. DesignWe need a method add(), which takes two parameters and addthem together, then it will return the result.
  • 27. Test
  • 28. FAILjava.lang.AssertionError: expected:<2> but was:<0>...at tw.idv.haocheng.play.CalculatorTest.one_plus_one_is_two(CalculatorTest.java:20)
  • 29. Implement
  • 30. PASS
  • 31. Write the least codeto make the test pass
  • 32. More Test
  • 33. FAILjava.lang.AssertionError: expected:<4> but was:<2>...at tw.idv.haocheng.play.CalculatorTest.two_plus_two_is_four(CalculatorTest.java:25)
  • 34. Implement
  • 35. PASS
  • 36. DesignThe add() method only accept positive numbers
  • 37. Test
  • 38. FAILjava.lang.AssertionError: IllegalArgumentException expectedat org.junit.Assert.fail(Assert.java:91)at tw.idv.haocheng.play.CalculatorTest.negative_numbers_will_throw_exception(CalculatorTest.java:32)
  • 39. Implement
  • 40. PASS
  • 41. Unit Test Frameworks● Java - JUni● Python - PyUnit● PHP - PHPUnit● Ruby - Test:Unit● Javascript - Jasmine● .Net - NUnit
  • 42. Good Test● One test per scenario● Test in isolation● Readability● Minimum Test Fixture● Repeatable
  • 43. Bad Smell● NO Assert/Meaningless Assert● High maintenance cost● Interacting Tests● Require manual debugging● Evil Singleton
  • 44. When is enough enough?● One Test per class● Testing the feature● Find bugs, add tests● Skip Getter/Setter if generated● Skip Private methods● Code coverage
  • 45. Theres No Silver Bulletfrom http://www.penn-olson.com/2009/12/22/social-media-the-silver-bullet/
  • 46. It takes time...from http://chunkeat626.blogspot.com/2010_11_01_archive.html
  • 47. Need tomaintain tests
  • 48. TDD is not suitable for... from http://www.flickr.com/photos/ilike/2443295369/
  • 49. from http://tw.gamelet.com/game.do?code=heroes
  • 50. from http://dilbert.com/
  • 51. ContinuousIntegration
  • 52. Continuous Integration is a softwaredevelopment practice where membersof a team integrate their workfrequently, usually each personintegrates at least daily – leading tomultiple integrations per day. -- Martin Fowler
  • 53. Why CI?● Rapid Feedback● Reduced Risk● Collective Ownership● Continuous Deployment● Offload from people
  • 54. Why TDD + CI?
  • 55. Effective tests must be automatedfrom http://www.laurentbrouat.com/why-you-should-stop-sending-auto-dms/automated/
  • 56. Write once, run often● Write tests once● Run frequently● No human input● Common output
  • 57. Best Practices of CI● Single Source Repository● Commit often● Make Your Build Self-Testing● Automate the Build● Build fast
  • 58. Extensible continuous integration server
  • 59. What is Jenkins?● Open-source CI server● Easy to install and use● Extensibility
  • 60. Why Jenkins?● GUI to manage● Strong community and eco-system● Distributed builds● Open Source and Free!
  • 61. mailing list subscription is increasing
  • 62. GitHub members is also increasing
  • 63. Basic Features● Notice a change● Check out source code● Execute builds/tests● Record and publish results● Notify developers
  • 64. CI Overview from Continuous integration with Hudson
  • 65. Notice a change● Build Periodically● Depend on other projects● Poll SCM ○ Subversion Push vs. Pull
  • 66. Check out source code● Subversion● CVS● Git● Mercurial● Perforce
  • 67. Execute builds/tests● Java ○ Ant, Maven, Gradle● .Net ○ MSBuild, PowerShell● Shell Script ○ Python, Ruby, Groovy
  • 68. Record and publish results● JUnit● TestNG● Findbugs● Cobertura● Checkstyle● PMD
  • 69. Job Status Job State: Job Stability:
  • 70. Findbugs Integration
  • 71. Cobertura Integration
  • 72. Project Relationship
  • 73. Notify developers● Twitter● email● RSS● IM● IDE● Android/iPhone● Firefox
  • 74. Twitter
  • 75. Jenkins on EclipseUpdate Site: http://code.google.com/p/hudson-eclipse/
  • 76. Jenkins on Android ● Android Market ● Jenkins Wiki
  • 77. eXtreme Feedback Panel plugin
  • 78. Jenkins Sound pluginhttp://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Sounds+plugin
  • 79. Installation&Upgrade● Download Tomcat 7● Download latest jenkins.war● Put jenkins.war under webapps● Start Tomcat
  • 80. Create a Job
  • 81. Configure a Job
  • 82. Configure Jenkins
  • 83. Manage Plugins
  • 84. Jenkins for non-Java Projects● Python● PHP● Ruby● .Net
  • 85. Reading List● The Bowling Game Kata● Unit Testing Guidelines● Why are we embarrassed to admit that we don’t know how to write tests? (中譯版本)● "The Clean Code Talks -- Unit Testing"● Top 10 things which make your code hard to test
  • 86. References - Test-Driven Development● Test Driven Development Tutorial by Kirrily Robert● Engineer Notebook: An Extreme Programming Episode by Robert C. Martin and Robert S. Koss● Technical Debt by Martin Fowler● InfoQ: Testing Misconceptions by Liam OConnor● Unit Test Isolation● Erratic Test● Singletons are Evil● RSpec 讓你愛上寫測試
  • 87. References - Continuous Integration● Jenkins: http://jenkins-ci.org/● Mailing List: http://groups.google.com/group/jenkinsci- users● Wiki: http://wiki.jenkins-ci.org/● Follow @jenkinsci on Twitter● Continous Integration by Martin Fowler● Continuous Integration with Hudson - the book● Continuous Integration with Hudson on JavaWorld