Agile Engineering Practices

Post on 01-Nov-2014

4.907 views 1 download

Tags:

description

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

Transcript of Agile Engineering Practices

An Introduction to Agile Engineering Practices

1

Kane Mar

“The New New Product Development Game”

- Takeuchi and Nonaka

2

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

3

4

From: Kent BeckTo: Jeff Sutherland <jsutherland>Reply: 70761.1216@compuserve.comDate: 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

Continuous Integration

What is Continuous Integration?

7

“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

Commit

10

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

Commit

11

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

Commit

Checkout

12

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

Commit

Checkout

13

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

Commit

Checkout

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

24

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

Commit

CheckoutA broken build or integration test here ...

25

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

Commit

CheckoutA broken build or integration test here ...

will get propagated here, here and here.

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

✦ 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

35

Test Driven Development

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,

Torchiano45

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

integration tests.

46

✦ 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

References

48

Refactoring

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 Integrationand

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

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

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

60

References

61

Pair Programming

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

75

Why do we care?

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