• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Test driven development_continuous_integration

Test driven development_continuous_integration



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



Total Views
Views on SlideShare
Embed Views



2 Embeds 4

https://twitter.com 2
http://www.linkedin.com 2



Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.


12 of 2 previous next

  • 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
Post Comment
Edit your comment

    Test driven development_continuous_integration Test driven development_continuous_integration Presentation Transcript

    • 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 。
    • 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
    • Agenda● What is TDD?● Why use TDD?● How to do TDD?● What is CI?● Why use CI?● TDD + CI
    • TDD = TFD +Refactoring
    • Not aboutwriting tests...
    • TDD is aboutwriting better code
    • from http://ch.englishbaby.com/forum/LifeTalk/thread/441379
    • Test Myths
    • I have no time for testing
    • Technical Debt from http://www.freedebtadvice-uk.com/
    • My code isBUG-FREE!
    • from http://vincentshy.pixnet.net/blog/post/5397455
    • QA will do the testing
    • Black Box Testing from http://www.jasonser.com/marketing-black-box/
    • http://www.ocoee.org/Departments/HR/
    • Fasterfrom http://cllctr.com/view/c2fdb4d2625e109069c843ea1bb99e50
    • from Test Driven Development Tutorial by Kirrily Robert
    • Faster● Shorter release cycle● Automation saves time● Find bugs earlier
    • Betterfrom http://www.nataliedee.com/archives/2005/sep/
    • Better● Greater code coverage● The courage to refactor● Prevent regression bugs● Improve your design
    • "Im not a great programmer;Im just a good programmerwith great habits." - Kent Beck
    • Testing the Old Way
    • TDD
    • TDD
    • 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
    • DesignWe need a method add(), which takes two parameters and addthem together, then it will return the result.
    • Test
    • FAILjava.lang.AssertionError: expected:<2> but was:<0>...at tw.idv.haocheng.play.CalculatorTest.one_plus_one_is_two(CalculatorTest.java:20)
    • Implement
    • PASS
    • Write the least codeto make the test pass
    • More Test
    • FAILjava.lang.AssertionError: expected:<4> but was:<2>...at tw.idv.haocheng.play.CalculatorTest.two_plus_two_is_four(CalculatorTest.java:25)
    • Implement
    • PASS
    • DesignThe add() method only accept positive numbers
    • Test
    • 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)
    • Implement
    • PASS
    • Unit Test Frameworks● Java - JUni● Python - PyUnit● PHP - PHPUnit● Ruby - Test:Unit● Javascript - Jasmine● .Net - NUnit
    • Good Test● One test per scenario● Test in isolation● Readability● Minimum Test Fixture● Repeatable
    • Bad Smell● NO Assert/Meaningless Assert● High maintenance cost● Interacting Tests● Require manual debugging● Evil Singleton
    • 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
    • Theres No Silver Bulletfrom http://www.penn-olson.com/2009/12/22/social-media-the-silver-bullet/
    • It takes time...from http://chunkeat626.blogspot.com/2010_11_01_archive.html
    • Need tomaintain tests
    • TDD is not suitable for... from http://www.flickr.com/photos/ilike/2443295369/
    • from http://tw.gamelet.com/game.do?code=heroes
    • from http://dilbert.com/
    • ContinuousIntegration
    • 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
    • Why CI?● Rapid Feedback● Reduced Risk● Collective Ownership● Continuous Deployment● Offload from people
    • Why TDD + CI?
    • Effective tests must be automatedfrom http://www.laurentbrouat.com/why-you-should-stop-sending-auto-dms/automated/
    • Write once, run often● Write tests once● Run frequently● No human input● Common output
    • Best Practices of CI● Single Source Repository● Commit often● Make Your Build Self-Testing● Automate the Build● Build fast
    • Extensible continuous integration server
    • What is Jenkins?● Open-source CI server● Easy to install and use● Extensibility
    • Why Jenkins?● GUI to manage● Strong community and eco-system● Distributed builds● Open Source and Free!
    • mailing list subscription is increasing
    • GitHub members is also increasing
    • Basic Features● Notice a change● Check out source code● Execute builds/tests● Record and publish results● Notify developers
    • CI Overview from Continuous integration with Hudson
    • Notice a change● Build Periodically● Depend on other projects● Poll SCM ○ Subversion Push vs. Pull
    • Check out source code● Subversion● CVS● Git● Mercurial● Perforce
    • Execute builds/tests● Java ○ Ant, Maven, Gradle● .Net ○ MSBuild, PowerShell● Shell Script ○ Python, Ruby, Groovy
    • Record and publish results● JUnit● TestNG● Findbugs● Cobertura● Checkstyle● PMD
    • Job Status Job State: Job Stability:
    • Findbugs Integration
    • Cobertura Integration
    • Project Relationship
    • Notify developers● Twitter● email● RSS● IM● IDE● Android/iPhone● Firefox
    • Twitter
    • Jenkins on EclipseUpdate Site: http://code.google.com/p/hudson-eclipse/
    • Jenkins on Android ● Android Market ● Jenkins Wiki
    • eXtreme Feedback Panel plugin
    • Jenkins Sound pluginhttp://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Sounds+plugin
    • Installation&Upgrade● Download Tomcat 7● Download latest jenkins.war● Put jenkins.war under webapps● Start Tomcat
    • Create a Job
    • Configure a Job
    • Configure Jenkins
    • Manage Plugins
    • Jenkins for non-Java Projects● Python● PHP● Ruby● .Net
    • 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
    • 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 讓你愛上寫測試
    • 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