Agile Enginerring Practices - Key

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 40

An Introduction to Agile Engineering Practices

Kane Mar Danube Technologies, Inc

The New New Product Development Game - Takeuchi and Nonaka

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

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

Continuous Integration

What is Continuous Integration?

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

Commit

Commit

1. Compile & Build 2. Unit Tests 3. Integration Tests 4. Report Errors

10

Commit

1. Compile & Build 2. Unit Tests 3. Integration Tests 4. Report Errors

Checkout

11

Commit

1. Compile & Build 2. Unit Tests 3. Integration Tests 4. Report Errors

Checkout

12

Commit

1. Compile & Build 2. Unit Tests 3. Integration Tests 4. Report Errors

Checkout

13

14

Why is Continuous Integration important?

15

1. Reducing Risk.

16

When we are integrating the product all the time the risk of a failed integration is spread throughout the duration of the project ...
17

rather than being left until the end.

18

2. Behavior.

19

If doing a complete build and test of any product is difficult ...

20

doing it continuously is very difficult.

21

Teams need to develop different ways of working.

22

Never letting the build break.

23

Commit

1. Compile & Build 2. Unit Tests 3. Integration Tests 4. Report Errors A broken build or Checkout integration test here ...

24

Commit

1. Compile & Build 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

The Friday Afternoon Pattern of broken builds.

26

Delivering smaller increments of well tested functionality.

27

Investing in automated testing frameworks.

28

Test, Test and Test again.

29

I believe that all teams should practice CI.

30

The tools are free, like free beer.

31

The only price to pay for introducing CI is ...

32

education.

33

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

Test Driven Development

35

What is Test Driven Development?

36

1. Add a test

37

2. Run all test and see the new ones fail

38

3. Write some code

39

4. Run the automated tests and see them succeed

40

5. Refactor

41

Red/Green/Refactor

42

Why is TDD important?

43

TDD is a method of designing software, not merely an approach to testing.

44

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

Over a period of time, TDD will lead to suite of automated integration tests.

46

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 TestDriven Development (PDF) Universitat Karlsruhe, Germany

47

Refactoring

48

What is Refactoring?

49

Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. - Martin Fowler

50

Each transformation (called a 'refactoring') does little, but a sequence of transformations can produce a significant restructuring.

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

Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. - Martin Fowler

53

How do we establish that the behavior is unchanged?

54

Continuous Integration and Test Driven Development

55

The term Refactoring is poorly used.

56

If somebody talks about a system being broken for a couple of days while they are refactoring ...

57

you can be pretty sure they are not refactoring ...

58

Refactoring is a very specific technique, founded on using small behavior-preserving transformations - Martin Fowler
59

References

Fowler, Martin (1999). Refactoring. Addison-Wesley. ISBN 0-201-48567-2. http://martinfowler.com/bliki/RefactoringMalapropism.html

60

Pair Programming

61

What is Pair Programming?

62

Two team members working on the same code base and working side-by-side

63

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

64

I told you Slashdot was more popular than Digg


65

Modern software development is full of drama ...


66

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

67

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

68

The thrill of victory ...


69

And the agony of defeat.


70

Why is Pair Programming important?

71

Pair Programming significantly reduces the number of defects, and greatly increase the quality of the code.
72

It is, however, very difficult to introduce.

73

There are many issues mostly related to loss of personal space and lack of privacy.

74

Why do we care?

75

76

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

77

What would it mean to you if your cost of change was linear rather than exponential?

78

Thank You!

79

You might also like