41
Viking Mythology

TDD & Effective Software Development

Embed Size (px)

DESCRIPTION

This presentation explains WHY Test Driven Development matters and what are some of the infinite advantages of this great technique for programming a cleaner and higher quality code.

Citation preview

  • 1.Sam Serpoosh@masihjesus http://masihjesus .wordpress.com https://github.com/Sam-Serpoosh http://linkedin.com /in/samserpoosh

2. programmers have more in common with chefs than with desk jockeys like accountants or attorneys. ~Greg Baugues 3. Nobodywants to wash the dishes! 4. Test-First programming.Kent Beck used it in Chrysler C3 project in 1996.TDD in XP(eXtreme Programming) practices.the most important and useful approach 5. EnumerableSelect method inRuby! Invokes the block passing insuccessive elements from self, returning an array containing those elements for which the block returns a true value (equivalent to Enumerable#select). 6. it fetches green squares do green_square = squares.select {|square| square.color == green} green_square.color.should == green end 7. Tests tell the code how to look like from its users perspectiveIt is more a design technique and tests are great side-effects!You feel the pain first when its hard to use! 8. You are not allowed to write any production code unless you have a failing unit test and that production code is about to make it 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. 9. Kent Beck defines: Never write a single line of code unless you have a failing automated test.Eliminate Duplication(DRY, Dont Repeat Yourself) 10. Red (Automated test fails) Green (Automated test pass) Refactor (eliminate duplication, eliminate the mess, clean the code) Sushi Chef Metaphor Red Dirty Dishes of dinner GreenRefactor 11. StartWrite a test See it fails because theres no dev codeRun the TestWrite (just enough) Dev Code to compile See it fails because no logic is implementedRun the Test Write (just enough) Dev Code to compileSee the Test passRun the TestRefactoring 12. Knowing about execution of system all the times.Short cycles (even 10 minutes is too long).A minute ago all their code worked. (Pick a Random Person) 13. Thousands of unit tests will be produced.Can run them anytime we want.Whenever we make any kind of change.Executable and live documentation of system instead of pile of papers. 14. Theres a test as an example to show you what you want!They CANNOT be out of dateMake the FEAR disappear (Refactoring) 15. OhMy God this code is a messIneed to clean this up! But Im not gonna touch it! 16. TDD Testable DecoupledDecoupling most important factor TDD managing dependency better DIP 17. so much flexible and easy to change. Software is Soft again! Go ahead and change!NOT Fragile, Rigid, Immobile 18. TESTS MORE SPECIFIC CODE MORE GENERAL 19. 2005 study TDD more productive & increase their confidence.software much more flexible, reliable, testable & with great live documentation.NOT PROFESSIONAL if you dont do TDD (~ Uncle Bob, Ron Jeffries, Kent Beck, etc.) 20. had been a programmer for 3 decades before I was introduced to TDD. I did not think anyone could teach me a low level programming practice that would make a difference. But when I started TDD, I was dumbfounded at the effectiveness of the technique. ~ Robert C. MartinI 21. Blog posts and articles: Grand Design by Stephen Hawking & Leonard Mlodinowhttp://objectmentor.com/articleshttp://cleancoder.com/articleshttp://codebetter.com/articlesCode like a chef series! 22. Robert C. Martin craftsmanship article seriesUncle Bob on Rules and Benefits of TDDMichael Feathers Synergy between Design and TestabilityJeremy D. Miller Writing Maintainable Programs seriesSarah Gray on Visualizing Enumerable 23. Books: TDD by Example (Kent Beck) Clean Code (Robert C. Martin) Agile Software Development Principles, Patterns, Practices (Robert C. Martin) Working Effectively With Legacy Code (Michael Feathers) Growing Object-Oriented Software Guided by Tests (Steve Freeman & Nat Pryce) Refactoring (Martin Fowler) 24. Lectures And Conferences: Clean Code I, II (Robert C. Martin) Are you a Professional? (Robert C. Martin) Synergy between Design and Testability (Michael Feathers) Effective Software Development (Alistair Cockburn) Clean, Testable Code (Misko Hevery) Clean Coders Videos (Clean Code Matters) Destroy All Software (Gary Bernhardt)