+ All Categories
Home > Documents > Testing in Legacy: From Rags to Riches -...

Testing in Legacy: From Rags to Riches -...

Date post: 21-May-2020
Category:
Upload: others
View: 5 times
Download: 0 times
Share this document with a friend
69
Testing in Legacy: From Rags to Riches
Transcript
Page 1: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Testing in Legacy: From Rags to Riches

Page 2: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

About me

{

“First name”: “Taras”,

“Last name”: “Slipets”,

“E-mail”: “[email protected]”,

“LinkedIn Profile”: “http://www.linkedin.com/

pub/taras-slipets/

48/466/516”,

“Interests”: [

“Software Engineering”,

“Music”

]

}

2

Page 3: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

About presentation

3

Page 4: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

I’d like to share our experience

4

Page 5: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What does it mean – Legacy system?

5

Page 6: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Ask expert

6

Page 7: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Legacy system is…

7

Page 8: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Just long-term project

8

Page 9: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What we’ve received

• 11-years old system SUCCESSFULLY running on production servers

• Written in Java 1.4

• No frameworks usage

• No documentation

• No developers who has worked on it

• Impatient customers

• Pantient management

• other surprises…

9

Page 10: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Bus factor

10

Page 11: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What we’d like to have?

11

Page 12: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What we’d like to have?

12

Shiny system with all cutting-edge frameworks

Reduce pain of maintenance and support

Page 13: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What we’d like to have?

13

Shiny system with all cutting-edge frameworks

Reduce pain of maintenance and support

Page 14: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

So, how we did it?

14

Page 15: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

15

Page 16: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Logs, logs, logs

16

Page 17: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Domain model – classes level

17

Page 18: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Domain model – database level

18

Page 19: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Domain model – workflows

19

Page 20: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Peer review VERY often

20

Page 21: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Before changing code

21

Page 22: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

We need to ensure it works

22

Page 23: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Testing

23

Page 24: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Testing levels

• Unit tests

• Integration tests

• System tests

24

Page 25: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Unit tests

25

Page 26: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Integration tests

26

Page 27: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

System tests

27

Page 28: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Test existing and expected behavior

28

Page 29: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

System testing (feature testing)

29

Application under testing

System tests

Process Process

Page 30: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

External world communication

30

Page 31: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

External world communication - mocks

31

Page 32: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

External world communication - mocks

32

Page 33: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

External world communication - mocks

33

Page 34: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

External world communication - mocks

34

Page 35: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

System tests automation

35

Page 36: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Finally – let’s touch code!

36

Page 37: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Top occurring issues

• “do-stuff” methods

• “I’m aware of everything” classes

• “Celebrities” classes/interfaces

• “Magic goes here” blocks without comments

• Just obsolete code

37

Page 38: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What to do?

38

Page 39: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

How about

39

Page 40: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

40

Page 41: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Refactoring facilities

• Extract method

• Extract interface

• Parameter object

• Method object

• Replace type-checking code with State/Strategy

• Move method/field

• …

41

Page 42: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Unit tests jumps into

42

Page 43: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Frameworks

• EasyMock

• Mockito

• PowerMock

43

Page 44: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Indication

After initial tests are written, use PowerMock as indicator of bad system design

44

Page 45: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What is next?

45

Page 46: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

46

Page 47: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

47

Page 48: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Most used in our case

• Template method

• Strategy

• State

• Visitor

• Command

• Chain of Responsibility

• Observer

48

Page 49: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

49

Page 50: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

And again - logs, logs, logs

50

Page 51: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Hey, where are new features?

51

Page 52: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Extend functionality AFA it’s possible

52

Page 53: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

How deep refactoring should be?

53

Page 54: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Theory the Godmother

• S.O.L.I.D.

• D.R.Y.

• K.I.S.S.

• …

54

Page 55: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

In real world

55

Page 56: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Now we can add integration tests

56

Page 57: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

What about build/deployment time?

57

Page 58: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Simple rule

58

Page 59: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

But for us it hurt

59

Page 60: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Remedy?

60

Page 61: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Remedy

61

• Make app self-contained

• Simplify manual installation

Page 62: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Operations are happy

62

Page 63: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

If it steal hurts - automate deployment

63

Page 64: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Complete features list + tests for them

64

Page 65: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

The winner takes it all

65

Page 66: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

The dreams come true - build-pipeline!

66

Page 67: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

A-team!

67

Page 68: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Links

• http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052

• http://xpdays.com.ua/archive/xp-days-ukraine-2011/materials/legacy/

• http://xpdays.com.ua/archive/xp-days-ukraine-2012/materials/code-story/

• http://jeeconf.com/archive/materials-2014/legacy-projects/

• http://jeeconf.com/materials/web-application-i-have-always-dreamt-of/

68

Page 69: Testing in Legacy: From Rags to Riches - JUGjug.ua/.../2015/07/TestingLegacyFromFromRagsToRiches.pdf · 2015-07-06 · pub/taras-slipets/ 48/466/516”, “Interests”: [ ... About

Thanks for your attention!

69


Recommended