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.

Agile Engineering Practices

4,500 views

Published on

My presentation to the Seattle Scrum Users group on 29th May, 2008

Published in: Technology, Education

Agile Engineering Practices

  1. 1. An Introduction to Agile Engineering Practices Kane Mar 1
  2. 2. “The New New Product Development Game” - Takeuchi and Nonaka 2
  3. 3. photo: http://www.flickr.com/photos/nicmcphee/ 3
  4. 4. 4
  5. 5. From: Kent Beck To: Jeff Sutherland <jsutherland> Reply: 70761.1216@compuserve.com Date: Mon, 15 May 1995 18:01:15 -0400 (EDT) Subj: HBR paper _________________________ Is there a good place to get reprints of the SCRUM paper from HBR? I've written patterns for something very similar and I want to make sure I steal as many ideas as possible. Kent 5
  6. 6. Continuous Integration 6
  7. 7. What is Continuous Integration? 7
  8. 8. “Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.” -Martin Fowler 8
  9. 9. Commit 9
  10. 10. 1. Compile & Build Commit 2. Unit Tests 3. Integration Tests 4. Report Errors 10
  11. 11. 1. Compile & Build Commit 2. Unit Tests 3. Integration Tests 4. Report Errors Checkout 11
  12. 12. 1. Compile & Build Commit 2. Unit Tests 3. Integration Tests 4. Report Errors Checkout 12
  13. 13. 1. Compile & Build Commit 2. Unit Tests 3. Integration Tests 4. Report Errors Checkout 13
  14. 14. 14
  15. 15. Why is Continuous Integration important? 15
  16. 16. 1. Reducing Risk. 16
  17. 17. When we are integrating the product all the time the risk of a failed integration is spread throughout the duration of the project ... 17
  18. 18. rather than being left until the end. 18
  19. 19. 2. Behavior. 19
  20. 20. If doing a complete build and test of any product is difficult ... 20
  21. 21. doing it “continuously” is very difficult. 21
  22. 22. Teams need to develop different ways of working. 22
  23. 23. Never letting the build break. 23
  24. 24. 1. Compile & Build Commit 2. Unit Tests 3. Integration Tests 4. Report Errors A broken build or Checkout integration test here ... 24
  25. 25. 1. Compile & Build Commit 2. Unit Tests 3. Integration Tests 4. Report Errors A broken build or Checkout integration test here ... will get propagated here, here and here. 25
  26. 26. The Friday Afternoon Pattern of broken builds. 26
  27. 27. Delivering smaller increments of well tested functionality. 27
  28. 28. Investing in automated testing frameworks. 28
  29. 29. Test, Test and Test again. 29
  30. 30. I believe that all teams should practice CI. 30
  31. 31. The tools are free, like free beer. 31
  32. 32. The only price to pay for introducing CI is ... 32
  33. 33. education. 33
  34. 34. References http://www.martinfowler.com/articles/ ✦ continuousIntegration.html ✦ http://cruisecontrol.sourceforge.net/ ✦ http://www.jetbrains.com/teamcity/ ✦ http://luntbuild.javaforge.com/ ✦ https://hudson.dev.java.net/ 34
  35. 35. Test Driven Development 35
  36. 36. What is Test Driven Development? 36
  37. 37. 1. Add a test 37
  38. 38. 2. Run all test and see the new ones fail 38
  39. 39. 3. Write some code 39
  40. 40. 4. Run the automated tests and see them succeed 40
  41. 41. 5. Refactor 41
  42. 42. Red/Green/Refactor 42
  43. 43. Why is TDD important? 43
  44. 44. TDD is a method of designing software, not merely an approach to testing. 44
  45. 45. “We found that test-first students on average wrote more tests and, in turn, students who wrote more tests tended to be more productive.” - Erdogmus, Hakan; Morisio, Torchiano 45
  46. 46. Over a period of time, TDD will lead to suite of automated integration tests. 46
  47. 47. References Erdogmus, Hakan; Morisio, Torchiano. “On the Effectiveness of Test-first ✦ Approach to Programming,” Proceedings of the IEEE Transactions on Software Engineering, 31(1). January 2005. (NRC 47445). “We found that test-first students on average wrote more tests and, in turn, students who wrote more tests tended to be more productive.” Newkirk, JW and Vorontsov, AA. “Test-Driven Development in Microsoft .NET,” ✦ Microsoft Press, 2004. Feathers, M. “Working Effectively with Legacy Code,” Prentice Hall, 2004 ✦ Beck, K. “Test-Driven Development by Example,” Addison Wesley, 2003 ✦ Muller, Matthias M.; Padberg, Frank. “About the Return on Investment of Test- ✦ Driven Development (PDF)” Universitat Karlsruhe, Germany 47
  48. 48. Refactoring 48
  49. 49. What is Refactoring? 49
  50. 50. “Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.” - Martin Fowler 50
  51. 51. “Each transformation (called a 'refactoring') does little, but a sequence of transformations can produce a significant restructuring.” 51
  52. 52. double disabilityAmount() { if (_seniority < 2) return 0; if (_monthsDisabled > 12) return 0; if (_isPartTime) return 0; // compute the disability amount double disabilityAmount() { if (isNotEligableForDisability()) return 0; // compute the disability amount 52
  53. 53. “Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.” - Martin Fowler 53
  54. 54. How do we establish that the behavior is unchanged? 54
  55. 55. Continuous Integration and Test Driven Development 55
  56. 56. The term Refactoring is poorly used. 56
  57. 57. “If somebody talks about a system being broken for a couple of days while they are refactoring ...” 57
  58. 58. “you can be pretty sure they are not refactoring ... “ 58
  59. 59. “Refactoring is a very specific technique, founded on using small behavior-preserving transformations” - Martin Fowler 59
  60. 60. References Fowler, Martin (1999). “Refactoring.” Addison-Wesley. ISBN 0-201-48567-2. ✦ http://martinfowler.com/bliki/RefactoringMalapropism.html ✦ 60
  61. 61. Pair Programming 61
  62. 62. What is Pair Programming? 62
  63. 63. Two team members working on the same code base and working side-by-side 63
  64. 64. photo: http://www.flickr.com/photos/improveit/ 64
  65. 65. “I told you Slashdot was more popular than Digg” 65
  66. 66. Modern software development is full of drama ... 66
  67. 67. photo: http://www.flickr.com/photos/improveit/ 67
  68. 68. photo: http://www.flickr.com/photos/improveit/ 68
  69. 69. The thrill of victory ... 69
  70. 70. And the agony of defeat. 70
  71. 71. Why is Pair Programming important? 71
  72. 72. Pair Programming significantly reduces the number of defects, and greatly increase the quality of the code. 72
  73. 73. It is, however, very difficult to introduce. 73
  74. 74. There are many issues mostly related to loss of personal space and lack of privacy. 74
  75. 75. Why do we care? 75
  76. 76. 76
  77. 77. 80% of the cost of software is incurred after it has gone live. 77
  78. 78. What would it mean to you if your cost of change was linear rather than exponential? 78
  79. 79. Thank You! 79

×