agile enginerring practices.key

Upload: gravitywriting

Post on 14-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/27/2019 Agile Enginerring Practices.key

    1/40

    An Introduction to AgileEngineering Practices

    1

    Kane Mar

    Danube Technologies, Inc

    The New New ProductDevelopment Game

    - Takeuchi and Nonaka

    2

  • 7/27/2019 Agile Enginerring Practices.key

    2/40

    photo: http://www.flickr.com/photos/nicmcphee/

    3

    4

  • 7/27/2019 Agile Enginerring Practices.key

    3/40

    From: Kent Beck

    To: Jeff Sutherland

    Reply: [email protected]

    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 fromHBR? I've written patterns for something very similar and I want tomake sure I steal as many ideas as possible.

    Kent

    5

    6

    Continuous Integration

  • 7/27/2019 Agile Enginerring Practices.key

    4/40

    What is ContinuousIntegration?

    7

    Continuous Integration is a softwaredevelopment 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 anautomated build (including test) to detectintegration errors as quickly as possible.

    -Martin Fowler

    8

  • 7/27/2019 Agile Enginerring Practices.key

    5/40

    9

    Commit

    10

    1. Compile & Build2. Unit Tests3. Integration Tests4. Report Errors

    Commit

  • 7/27/2019 Agile Enginerring Practices.key

    6/40

    11

    1. Compile & Build2. Unit Tests3. Integration Tests4. Report Errors

    Commit

    Checkout

    12

    1. Compile & Build2. Unit Tests3. Integration Tests4. Report Errors

    Commit

    Checkout

  • 7/27/2019 Agile Enginerring Practices.key

    7/40

    13

    1. Compile & Build2. Unit Tests3. Integration Tests4. Report Errors

    Commit

    Checkout

    14

  • 7/27/2019 Agile Enginerring Practices.key

    8/40

    Why is Continuous Integrationimportant?

    15

    1. Reducing Risk.

    16

  • 7/27/2019 Agile Enginerring Practices.key

    9/40

    When we are integrating theproduct all the time the risk of a

    failed integration is spreadthroughout the duration of the

    project ...

    17

    rather than being left until theend.

    18

  • 7/27/2019 Agile Enginerring Practices.key

    10/40

    2. Behavior.

    19

    If doing a complete build andtest of any product is difficult ...

    20

  • 7/27/2019 Agile Enginerring Practices.key

    11/40

    doing it continuously is verydifficult.

    21

    Teams need to develop differentways of working.

    22

  • 7/27/2019 Agile Enginerring Practices.key

    12/40

    Never letting the build break.

    23

    24

    1. Compile & Build2. Unit Tests3. Integration Tests4. Report Errors

    Commit

    CheckoutA broken build orintegration test

    here ...

  • 7/27/2019 Agile Enginerring Practices.key

    13/40

    25

    1. Compile & Build2. Unit Tests3. Integration Tests4. Report Errors

    Commit

    CheckoutA broken build orintegration testhere ...

    will get propagatedhere, here and here.

    The Friday Afternoon Pattern ofbroken builds.

    26

  • 7/27/2019 Agile Enginerring Practices.key

    14/40

    Delivering smaller incrementsof well tested functionality.

    27

    Investing in automated testingframeworks.

    28

  • 7/27/2019 Agile Enginerring Practices.key

    15/40

    Test, Test and Test again.

    29

    I believe that allteams shouldpractice CI.

    30

  • 7/27/2019 Agile Enginerring Practices.key

    16/40

    The tools are free, like free beer.

    31

    The only price to pay forintroducing CI is ...

    32

  • 7/27/2019 Agile Enginerring Practices.key

    17/40

    education.

    33

    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

    References

  • 7/27/2019 Agile Enginerring Practices.key

    18/40

    35

    Test Driven Development

    What is Test DrivenDevelopment?

    36

  • 7/27/2019 Agile Enginerring Practices.key

    19/40

    1. Add a test

    37

    2. Run all test and see the newones fail

    38

  • 7/27/2019 Agile Enginerring Practices.key

    20/40

    3. Write some code

    39

    4. Run the automated tests andsee them succeed

    40

  • 7/27/2019 Agile Enginerring Practices.key

    21/40

    5. Refactor

    41

    Red/Green/Refactor

    42

  • 7/27/2019 Agile Enginerring Practices.key

    22/40

    Why is TDD important?

    43

    TDD is a method of designingsoftware, not merely an

    approach to testing.

    44

  • 7/27/2019 Agile Enginerring Practices.key

    23/40

    We found that test-firststudents on average wrote moretests and, in turn, students whowrote more tests tended to be

    more productive.

    - Erdogmus, Hakan; Morisio,

    Torchiano45

    Over a period of time, TDD willlead to suite of automated

    integration tests.

    46

  • 7/27/2019 Agile Enginerring Practices.key

    24/40

    Erdogmus, Hakan; Morisio, Torchiano. On the Effectiveness of Test-firstApproach 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 tobe 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

    References

    48

    Refactoring

  • 7/27/2019 Agile Enginerring Practices.key

    25/40

    What isRefactoring?

    49

    Refactoring is a disciplined technique forrestructuring an existing body of code,altering its internal structure without

    changing its external behavior.- Martin Fowler

    50

  • 7/27/2019 Agile Enginerring Practices.key

    26/40

    Each transformation (called a 'refactoring')does little, but a sequence of

    transformations can produce a significantrestructuring.

    51

    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

  • 7/27/2019 Agile Enginerring Practices.key

    27/40

    Refactoring is a disciplined technique forrestructuring an existing body of code,altering its internal structure without

    changing its external behavior.- Martin Fowler

    53

    How do we establish that thebehavior is unchanged?

    54

  • 7/27/2019 Agile Enginerring Practices.key

    28/40

    Continuous Integration

    and

    Test Driven Development

    55

    The termRefactoring is poorlyused.

    56

  • 7/27/2019 Agile Enginerring Practices.key

    29/40

    If somebody talks about asystem being broken for a

    couple of days while they arerefactoring ...

    57

    you can be pretty sure they arenot refactoring ...

    58

  • 7/27/2019 Agile Enginerring Practices.key

    30/40

    Refactoring is a very specifictechnique, founded on using

    small behavior-preservingtransformations

    - Martin Fowler

    59

    Fowler, Martin (1999). Refactoring. Addison-Wesley. ISBN 0-201-48567-2.

    http://martinfowler.com/bliki/RefactoringMalapropism.html

    60

    References

  • 7/27/2019 Agile Enginerring Practices.key

    31/40

    61

    Pair Programming

    What isPair Programming?

    62

  • 7/27/2019 Agile Enginerring Practices.key

    32/40

    Two team members working onthe same code base and working

    side-by-side

    63

    photo: http://www.flickr.com/photos/improveit/

    64

  • 7/27/2019 Agile Enginerring Practices.key

    33/40

    I told you Slashdot was more popular than Digg

    65

    Modern software development is full of drama ...

    66

  • 7/27/2019 Agile Enginerring Practices.key

    34/40

    photo: http://www.flickr.com/photos/improveit/

    67

    photo: http://www.flickr.com/photos/improveit/

    68

  • 7/27/2019 Agile Enginerring Practices.key

    35/40

    The thrill of victory ...

    69

    And the agony of defeat.

    70

  • 7/27/2019 Agile Enginerring Practices.key

    36/40

    Why isPair Programmingimportant?

    71

    Pair Programming significantlyreduces the number of defects,and greatly increase the quality

    of the code.

    72

  • 7/27/2019 Agile Enginerring Practices.key

    37/40

    It is, however, very difficult tointroduce.

    73

    There are many issues mostlyrelated to loss of personal space

    and lack of privacy.

    74

  • 7/27/2019 Agile Enginerring Practices.key

    38/40

    75

    Why do we care?

    76

  • 7/27/2019 Agile Enginerring Practices.key

    39/40

    80% of the cost of software isincurred after it has gone live.

    77

    What would it mean to you ifyour cost of change was linear

    rather than exponential?

    78

  • 7/27/2019 Agile Enginerring Practices.key

    40/40

    Thank You!

    79