Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TDD and Refactoring with LEGO


Published on

  • Be the first to comment

TDD and Refactoring with LEGO

  1. 1. UnderstandingTDD and Refactoringwith LEGOBryan Beecham@BillyGarnet90 minutes
  2. 2. Introduction
  3. 3. Exercise - 1 Open up one LEGO packet Build a person and a house out of LEGO
  4. 4. Admire your workTake a photo. Upload to Twitter. Brag to your friends.
  5. 5. ReferenceTest-DrivenDevelopmentBy ExampleKent Beck
  6. 6. TDDClean code that works ~ Ron Jefferies
  7. 7. TDDIt is a predictable way to develop. You know when youare finished, without having to worry about a long bugtrail
  8. 8. TDDIt gives you a chance to learn all of the lessons that thecode has to teach you. If you only slap together the firstthing you think of, then you never have time to think ofa second, better thing.
  9. 9. TDDIt improves the lives of the users of your software.
  10. 10. TDDIt lets your teammates count on you, and you on them.
  11. 11. TDDIt feels good to write it.
  12. 12. The MantraRed - Green - Refactorphoto from
  13. 13. The Mantra - RedWrite a small test that doesn’t work
  14. 14. The Mantra - GreenDo the minimum to make the test work
  15. 15. The Mantra - RefactorEliminate duplication
  16. 16. Exercise - 2 Build a person and a house with TDD
  17. 17. Prepare your environmentClear the area in front of you. This is your program.
  18. 18. First Test Does the person exist? No?
  19. 19. Hurray!!!We failed the test!Celebrate! High 5s!
  20. 20. Minimum to pass the testAdd a block. Can that be a person?
  21. 21. Hurray!!! The person now exists! Not very impressive but it could represent a person. We passed the test! We are rocking now!
  22. 22. RefactorRemove any duplication. In this case we’re good.
  23. 23. Same thing for houseBlah, blah, awesome recreation by speaker...everyoneis extremely impressed and are thinking this might bethe best session of the whole conference.
  24. 24. We need a new testThe house is taller then the person.Assert.IsTrue(house.height > person.height);
  25. 25. Hurray!!! -More FailureThe person is thesame size so we failthis test.Well done!
  26. 26. Failure =Learning OpportunityIf your not failing, your not learning.
  27. 27. Minimum to pass the testFrom the audience this time. Anyone? Bueller?
  28. 28. Hurray!!! - Success Alright, we passed the test.
  29. 29. RefactorStill very simple. Still nice and clean.
  30. 30. Software RequirementsSoftware must do three things: It must work It must be understandable It must be updatable (Robert C. Martin...I think)
  31. 31. We need a new testIs the house wider then the person? No?We failed another test! Awesome! We are learning a lotabout improvements that are needed to our code.Let’s do the minimum to pass the test.Any duplication to remove?
  32. 32. We need a new testCan your person fit in the house? Yikes! No.We failed another test! Awesome! We are learning somuch about what our customer needs.Let’s do the minimum to pass the test.Any duplication to remove?
  33. 33. Exercise - 3 Partners! Break into groups of two for this next exercise. When developers do this we call it Pair Programming Berkley photo from the web
  34. 34. New RequirementsYour new program needs to have: A person A house A tree An animal A vehicle
  35. 35. Let’s Practice! Work together to come up with some new tests Keep building to minimally pass tests Don’t worry about Refactoring for now Here’s a few if you get stuck: Is the house at least x inches/cm tall? Is the tree the same size as the house? Is the animal smaller than the person?
  36. 36. ReviewLet’s take a few minutes to walk around and look ateverybody’s creations!Taking breaks and stretching your muscles is veryimportant to stay healthy
  37. 37. ApologyYou may have to break your wonderful new structuresfor the components for the next section.Don’t worry, there is more building to come!Please do take a photo. Remember @BillyGarnet if yourtweeting about the amazing time your having!
  38. 38. RefactoringRefactoring is the process of changing a softwaresystem in such a way that it does not alter the externalbehavior of the code yet improves its internal structure.~Martin Fowler
  39. 39. LEGO RefactoringWe will be using bigbricks with two pointson top and panels withtwo points on top.
  40. 40. Build our programStack up big (normal height) bricks like this:brown-red-blue-blue-red-green-yellow-red-greenbrown on top and green at the very bottom
  41. 41. Class and MethodsYour group of lego bricks represents a classEach one of these colour bands represents a method
  42. 42. Duplication Notice how there are repeats of the same colour bands. This is duplication in our code. Let’s fix this!
  43. 43. Extract MethodWe are going to start by extracting the method. We willreplace the first big red block with a small red panel.Put the structure back together and put the big redblock on the bottom.This small red panel simply tells the program to go torun the big red block code.
  44. 44. Remove DuplicationNow let’s replace the other big red blocks with the flatred panels.We don’t need to move these big red blocks to thebottom since we already have that code there.
  45. 45. Keep Going!Let’s do (Extract Method) on that big blue section.Even though it’s not repeated, it would be easier toread the program with that blue blob at the bottom.
  46. 46. Audience Participation Can anyone see other duplication? Important Note: Consider Light and Dark Green the same colour for this exercise. (that was a hint btw)
  47. 47. Readability I really don’t like the way we are mixing big and flat pieces at the top of our program. Let’s extract brown and yellow as well
  48. 48. Clarity Remember one of the requirements for good software is that it’s easy to update. Let’s re-arrange these big bottom blocks to match the order of the flat panels that are above them.
  49. 49. BreakStand up and stretch - really, it’s important
  50. 50. Exercise 4 -Team BuildArrange yourself into groups of 4 or 5.Each group will come up with a large structure to build.You will be a software team, working in pairs,contributing to a large structure (the build).
  51. 51. Decide on an ideaShh...don’t tell the other tables.(Jeopardy music...)
  52. 52. Break it into componentsTake a minute to write out each of the components thatneed to be built.Each pair will have a few minutes to build their partthrough TDD.We will then add the sections to the big project. Makesure they still pass the tests.We will repeat this a few times
  53. 53. Demo time!Each team will now present their creation.Please share a few tests that you came up with.
  54. 54. ReviewTest-Driven Development / DesignRefactoringPair ProgrammingA bit of developer speak
  55. 55. Questions?Bryan
  56. 56. No really, it’s over
  57. 57. There are no more slides
  58. 58. No trailers
  59. 59. Looking for more?Check out http://www.humanrefactor.comSoon to have lot’s of cool info there