SlideShare ist ein Scribd-Unternehmen logo
1 von 321
Downloaden Sie, um offline zu lesen
prepare for…
From Jurassic Park…
..to Microservices….
@SvenRuppert
has been coding java since 1996
Fellow / Head of R&D
reply Group
Germany - Munich
2
@SvenRuppert
has been coding java since 1996
3
@SvenRuppert
has been coding java since 1996
Projects in the field of:
•Automobile-industry
•Energy
•Finance / Leasing
•Space- Satellit-
•Government / UN / World-bank
Where?
•Europe
•Asia - from India up to Malaysia
3
4
Save harbor statement
4
Save harbor statement
The following is intended for information purposes only. I
can not be held responsible for the overuse of effects and
animations in this presentation. If any person in this room
has a medical condition that is triggered by fast moving
objects on the screen and/or explosions, he/she should
probably better leave now…
(I got carried away by the topic.)
5
@SvenRuppertAt the time I started - 3 yrs ago
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
hiring only students
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
the developers learned Java at this project
hiring only students
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
the developers learned Java at this project
hiring only students
the first feeling was like ……
6
@SvenRuppertAt the time I started - 3 yrs ago
7
@SvenRuppertOverview
The Team
The Knowledge - Sharing
The way of working
The way of leading the Team
QM / QS - How to increase quality
Technical Migration?
8
@SvenRuppertOverview - Start Small
9
@SvenRuppertOverview - Think Bigger
10
@SvenRuppertOverview - Build a Team
11
@SvenRuppertOverview - Trust
11
@SvenRuppertOverview - Trust
12
@SvenRuppertThe way of working
20% Time have time to play or try
start learning how to practice it ?
Closed Source versus Open Source
work from everywhere at your time
we started step by step
13
@SvenRuppertwork from everywhere
14
@SvenRuppertwork from everywhere
14
@SvenRuppertwork from everywhere
change your environment
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
remote Pair-Programming
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
remote Pair-Programming
work async.
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
remote Pair-Programming
work async.
work at your time that is the best for you
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
playing with my wife07PM to 09PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
playing with my wife07PM to 09PM
working09PM to 11PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
playing with my wife07PM to 09PM
working09PM to 11PM
and yes… I need only 6h sleep ;-)
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
working with Asia
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
working with Asia
working with Europe
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
working with Asia
working with Europe
working with US
17
@SvenRuppertThe way of working
17
@SvenRuppertThe way of working
20% Time
17
@SvenRuppertThe way of working
why you should do it?20% Time
17
@SvenRuppertThe way of working
why you should do it?20% Time
lost in daily business
17
@SvenRuppertThe way of working
why you should do it?20% Time
18
@SvenRuppertThe way of working
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?20% Time
18
@SvenRuppertThe way of working
how to make it useful ?20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
for the developer
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
for the developer
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
for the developer
for the company
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
example : POC in the Mountains
for the developer
for the company
20% Time
19
@SvenRuppertClosed- versus Open Source
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
we divided the
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
we divided the
code base
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
we divided the
code base
dev. environment
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
discuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
free choice of tools
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
free choice of tools
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
free choice of tools
higher motivation
21
@SvenRuppertThe way of working
21
@SvenRuppertThe way of working
Start Learning again
21
@SvenRuppertThe way of working
Start Learning again
for example:
21
@SvenRuppertThe way of working
Start Learning again
for example:
focus on a new paradigm
21
@SvenRuppertThe way of working
Start Learning again
for example:
functionalfocus on a new paradigm
21
@SvenRuppertThe way of working
Start Learning again
for example:
functionalfocus on a new paradigm reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm
but not everyone want to learn
reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm
but not everyone want to learn
or better…. some are learning faster
reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm
but not everyone want to learn
or better…. some are learning faster
reactive
this sometimes leads to …..
reactions….
22
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
22
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
22
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
running away
23
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
23
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
23
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
expecting something
24
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
24
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
feeling the near end
24
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
feeling the near end
25
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
25
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
or only
feeling to old
25
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
or only
feeling to old
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
if you don´t want
to loose them
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
make them
happy again
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
make them
happy again
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
make them
happy again
How we solved
this?
27
@SvenRuppertThe way of working
27
@SvenRuppertThe way of working
we are a product company
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
Core Developers - collect and clean
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
Core Developers - collect and clean
LTS Developers - keep alive
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
Core Developers - collect and clean
LTS Developers - keep alive
Why ?
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
some want to learn and experiment
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
some want to learn and experiment
some need more stabil environments
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
amount of hours paid by the customer
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
amount of hours paid by the customer
rated on hours the systems are stabil
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
amount of hours paid by the customer
rated on hours the systems are stabil
fixed income - bonus based on Change Request
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
roadmap driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
roadmap driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
Kanban
customer driven
roadmap driven
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
32
@SvenRuppertThe way of working
SCRUM
Kanban
32
@SvenRuppertThe way of working
SCRUM
Kanban
LTS - Developers LTS - Developers LTS - Developers
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
time based planning
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning
version based
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning fixed size time slots
version based
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning fixed size time slots
version based dynamic size time slots
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
35
@SvenRuppertTechnical Migrations
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL Akka / Scala
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
Reactive
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
Reactive
Functional
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
Reactive
Functional
maybe ;-)
36
@SvenRuppertTechnical Transformation
36
@SvenRuppertTechnical Transformation
JDBC - ResultSet
36
@SvenRuppertTechnical Transformation
JDBC - ResultSet
36
@SvenRuppertTechnical Transformation
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap Hazelcast - Map
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap Hazelcast - Map
JDBC - ResultSet Speedment - Streams
what is the right technology for your team?
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap Hazelcast - Map
JDBC - ResultSet Speedment - Streams
what is the right technology for your team?
what is the right order?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
the team could work with
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
start with the oldest one ?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
start with the oldest one ?
most komplex one?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
start with the oldest one ?
most komplex one?
… or ….
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
v2
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
v2
stabilize
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
v2
stabilize
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v2
stabilize
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v2
stabilize
delta t compared
to project lifetime
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v2
stabilize
delta t compared
to project lifetime
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
no
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
since years
you are
working hard
on this….
no
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
since years
you are
working hard
on this….
no
41
@SvenRuppertQM / QS - TDD
Codebase is > 13 years old
remember….
how to start?
what is the right point to start?
how to increase the quality of the tests?
41
@SvenRuppertQM / QS - TDD
Codebase is > 13 years old
no test coverage
remember….
how to start?
what is the right point to start?
how to increase the quality of the tests?
41
@SvenRuppertQM / QS - TDD
Codebase is > 13 years old
no test coverage
how to decrease complexity?
remember….
how to start?
what is the right point to start?
how to increase the quality of the tests?
42
TDD with jUnit @SvenRuppert
42
TDD with jUnit @SvenRuppert
are you using jUnit?
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
but will this be enough?
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
but will this be enough? maybe ;-)
44
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? maybe ;-)
it depends ;-)
44
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? maybe ;-)
how to find out, what will be enough?
it depends ;-)
44
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? maybe ;-)
how to find out, what will be enough?
how to find the right tests?
it depends ;-)
45
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
45
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
45
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
@Test

public void testAdd002() throws Exception {

final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);

}
46
Mutation Testing @SvenRuppert
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
let the machine find the targets
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
let the machine find the targets
let´s mutate it... but how?
47
Mutation Testing - the Idea @SvenRuppert
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
P will be the program
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
P will be the program
T will be the collection of all tests / Test Suite
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
.. at leased one test from T will fail
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
.. at leased one test from T will fail
red: if all tests are green
49
Mutation Testing - the Idea @SvenRuppert
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
.. the good thing..
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
.. the good thing..
we could almost generate/
automate everything
50
Mutation Testing @SvenRuppert
practical TDD with Mutation Testing
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
check the reports
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
check the reports
write more / better tests
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
check the reports
write more / better tests
loop until quality target reached
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and…
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and… to be save ?
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and… to be save ?
2 for Line Coverage
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and… to be save ?
2 for Line Coverage we will see ;-)
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
we have one if statement
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
we have one if statement with an else branch
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
we have one if statement with an else branch
this will lead to 2 jUnit Tests to get 100 %
53
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; } 

else { return a+b; }

}

} 100% Line Coverage… and…
53
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; } 

else { return a+b; }

}

} 100% Line Coverage… and…
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
53
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; } 

else { return a+b; }

}

} 100% Line Coverage… and…
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
@Test

public void testAdd002() throws Exception {

final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);

}
54
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);
54
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);
54
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);
55
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
55
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
55
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
56
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
56
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
56
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
Killed 3
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
Killed 3
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
Killed 5
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
Killed 5
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
Killed 5
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
Killed 5
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
killed 11:1
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
killed 11:1
Killed 6
60
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
Killed 6
60
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
61
Mutation Testing - in short words @SvenRuppert
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
but most important
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
but most important
will effect your project structure
62
Mutation Testing - Lesson Learned @SvenRuppert
62
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
62
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
…cleaner code compared to jUnit only
63
Mutation Testing - Lesson Learned @SvenRuppert
public static final String[] discardCommonPrefix(String a, String b) {
String[] ret = { a, b };
int l = a.length() < b.length() ? a.length() : b.length();
for (int i = 0; i < l; i++) {
if (a.charAt(i) == b.charAt(i)) {
if (i + 1 < l) { ret[0] = a.substring(i + 1); ret[1] = b.substring(i + 1); }
else {
if (a.length() < b.length()) { ret[0] = ""; ret[1] = b.substring(i + 1); }
if (a.length() == b.length()) { ret[0] = ""; ret[1] = „"; }
if (a.length() > b.length()) { ret[0] = a.substring(i + 1); ret[1] = „"; }
}
} else break;
}
return ret;
}
64
Mutation Testing - Lesson Learned @SvenRuppert
public String[] discardCommonPrefix(String a, String b) {
final String[] ret = new String[2];
int l;
if (a.length() < b.length()) { l = a.length(); }
else { l = b.length(); }
int position = 0;
for (; position < l; position++) {
final char charA = a.charAt(position);
final char charB = b.charAt(position);
if (charA != charB) { break; }
}
if (position >= a.length()) { ret[0] = ""; }
else { ret[0] = a.substring(position); }
if (position >= b.length()) { ret[1] = ""; }
else { ret[1] = b.substring(position); }
return ret;
}
65
Mutation Testing - Lesson Learned @SvenRuppert
Version 1 Version 2
65
Mutation Testing - Lesson Learned @SvenRuppert
Version 1 Version 2
for {
if {
if
else {
if
if
if
}
} else
}
65
Mutation Testing - Lesson Learned @SvenRuppert
Version 1 Version 2
for {
if {
if
else {
if
if
if
}
} else
}
if else
for {
if
}
if else
if else
66
Example of useless Code @SvenRuppert
66
Example of useless Code @SvenRuppert
66
Example of useless Code @SvenRuppert
Summary
67
@SvenRuppert
Now it is time to relax again ;-)
Summary
68
@SvenRuppert
If you are interested…
have a look at GITHUB
ProxyBuilder
Dynamic-Dependency-Injection
Java-Microservice
or contact me ;-) @SvenRuppert
Summary
68
@SvenRuppert
If you are interested…
have a look at GITHUB
ProxyBuilder
Dynamic-Dependency-Injection
Java-Microservice
or contact me ;-) @SvenRuppert
Thank You !!!

Weitere ähnliche Inhalte

Ähnlich wie From Jurassic Park to Microservices

"The Cutting Edge" - Palletways Business Club Presentation
"The Cutting Edge" - Palletways Business Club Presentation"The Cutting Edge" - Palletways Business Club Presentation
"The Cutting Edge" - Palletways Business Club Presentation
george_edwards
 

Ähnlich wie From Jurassic Park to Microservices (20)

Growing with the Open-Source Community
Growing with the Open-Source CommunityGrowing with the Open-Source Community
Growing with the Open-Source Community
 
"The Cutting Edge" - Palletways Business Club Presentation
"The Cutting Edge" - Palletways Business Club Presentation"The Cutting Edge" - Palletways Business Club Presentation
"The Cutting Edge" - Palletways Business Club Presentation
 
Skyscanner Design System. One year in.
Skyscanner Design System. One year in.Skyscanner Design System. One year in.
Skyscanner Design System. One year in.
 
TwiSent: A Multi-Stage System for Analyzing Sentiment in Twitter
TwiSent: A Multi-Stage System for Analyzing Sentiment in TwitterTwiSent: A Multi-Stage System for Analyzing Sentiment in Twitter
TwiSent: A Multi-Stage System for Analyzing Sentiment in Twitter
 
Of innovation and impatience - Future Decoded 2015
Of innovation and impatience - Future Decoded 2015Of innovation and impatience - Future Decoded 2015
Of innovation and impatience - Future Decoded 2015
 
Designing at Scale: Creating a Global User Experience
Designing at Scale: Creating a Global User ExperienceDesigning at Scale: Creating a Global User Experience
Designing at Scale: Creating a Global User Experience
 
Designers shouldn't code - The wrong answer to the right question
Designers shouldn't code - The wrong answer to the right questionDesigners shouldn't code - The wrong answer to the right question
Designers shouldn't code - The wrong answer to the right question
 
® Opportunity Potential Score (OPS) ™
® Opportunity Potential Score (OPS) ™® Opportunity Potential Score (OPS) ™
® Opportunity Potential Score (OPS) ™
 
Finding sensitive information in text data
Finding sensitive information in text dataFinding sensitive information in text data
Finding sensitive information in text data
 
LeadDev NYC 2022: Calling Out a Terrible On-call System
LeadDev NYC 2022: Calling Out a Terrible On-call SystemLeadDev NYC 2022: Calling Out a Terrible On-call System
LeadDev NYC 2022: Calling Out a Terrible On-call System
 
Predictive Analytics for Everyone! Building CART Models using R - Chantal D....
Predictive Analytics for Everyone!  Building CART Models using R - Chantal D....Predictive Analytics for Everyone!  Building CART Models using R - Chantal D....
Predictive Analytics for Everyone! Building CART Models using R - Chantal D....
 
So You've Got a Seat at the Table. Now What?
So You've Got a Seat at the Table. Now What?So You've Got a Seat at the Table. Now What?
So You've Got a Seat at the Table. Now What?
 
Remote braga
Remote bragaRemote braga
Remote braga
 
Functional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed MelbourneFunctional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed Melbourne
 
User stories: from good intentions to bad advice - Lean Agile Scotland 2019
User stories: from good intentions to bad advice - Lean Agile Scotland 2019User stories: from good intentions to bad advice - Lean Agile Scotland 2019
User stories: from good intentions to bad advice - Lean Agile Scotland 2019
 
Metasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCUMetasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCU
 
Combine workshops to boost business understanding.pdf
Combine workshops to boost business understanding.pdfCombine workshops to boost business understanding.pdf
Combine workshops to boost business understanding.pdf
 
Five Whys - Devoxx UK 2014
Five Whys - Devoxx UK 2014Five Whys - Devoxx UK 2014
Five Whys - Devoxx UK 2014
 
Big Data and Hadoop in the Cloud
Big Data and Hadoop in the CloudBig Data and Hadoop in the Cloud
Big Data and Hadoop in the Cloud
 
Transform a web team into a Sitecore dream-team
Transform a web team into a Sitecore dream-teamTransform a web team into a Sitecore dream-team
Transform a web team into a Sitecore dream-team
 

Mehr von Sven Ruppert

Mehr von Sven Ruppert (12)

JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
 
Vaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java DevsVaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java Devs
 
Functional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - SlidesFunctional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - Slides
 
Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001
 
Warum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheWarum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi stehe
 
Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001
 
Java8 ready for the future
Java8 ready for the futureJava8 ready for the future
Java8 ready for the future
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDI
 
Java FX8 JumpStart - JUG ch - zürich
Java FX8   JumpStart - JUG ch - zürichJava FX8   JumpStart - JUG ch - zürich
Java FX8 JumpStart - JUG ch - zürich
 
Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02
 
Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015
 

Kürzlich hochgeladen

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Kürzlich hochgeladen (20)

8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

From Jurassic Park to Microservices

  • 1. prepare for… From Jurassic Park… ..to Microservices….
  • 2. @SvenRuppert has been coding java since 1996 Fellow / Head of R&D reply Group Germany - Munich 2
  • 3. @SvenRuppert has been coding java since 1996 3
  • 4. @SvenRuppert has been coding java since 1996 Projects in the field of: •Automobile-industry •Energy •Finance / Leasing •Space- Satellit- •Government / UN / World-bank Where? •Europe •Asia - from India up to Malaysia 3
  • 6. 4 Save harbor statement The following is intended for information purposes only. I can not be held responsible for the overuse of effects and animations in this presentation. If any person in this room has a medical condition that is triggered by fast moving objects on the screen and/or explosions, he/she should probably better leave now… (I got carried away by the topic.)
  • 7. 5 @SvenRuppertAt the time I started - 3 yrs ago
  • 8. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old
  • 9. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old no test coverage
  • 10. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords
  • 11. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon
  • 12. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company
  • 13. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company hiring only students
  • 14. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company the developers learned Java at this project hiring only students
  • 15. 5 @SvenRuppertAt the time I started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company the developers learned Java at this project hiring only students the first feeling was like ……
  • 16. 6 @SvenRuppertAt the time I started - 3 yrs ago
  • 17. 7 @SvenRuppertOverview The Team The Knowledge - Sharing The way of working The way of leading the Team QM / QS - How to increase quality Technical Migration?
  • 23. 12 @SvenRuppertThe way of working 20% Time have time to play or try start learning how to practice it ? Closed Source versus Open Source work from everywhere at your time we started step by step
  • 27. 14 @SvenRuppertwork from everywhere change your environment use Messenger like Slack
  • 28. 14 @SvenRuppertwork from everywhere change your environment use Messenger like Slack avoid mails
  • 29. 14 @SvenRuppertwork from everywhere change your environment use Messenger like Slack avoid mails remote meetings with zoom
  • 30. 14 @SvenRuppertwork from everywhere change your environment use Messenger like Slack avoid mails remote meetings with zoom remote Pair-Programming
  • 31. 14 @SvenRuppertwork from everywhere change your environment use Messenger like Slack avoid mails remote meetings with zoom remote Pair-Programming work async.
  • 32. 14 @SvenRuppertwork from everywhere change your environment use Messenger like Slack avoid mails remote meetings with zoom remote Pair-Programming work async. work at your time that is the best for you
  • 33. 15 @SvenRuppertwork from everywhere work at your time that is the best for you
  • 34. 15 @SvenRuppertwork from everywhere work at your time that is the best for you
  • 35. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day…
  • 36. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM
  • 37. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM
  • 38. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM
  • 39. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM
  • 40. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM playing with my wife07PM to 09PM
  • 41. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM playing with my wife07PM to 09PM working09PM to 11PM
  • 42. 15 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM playing with my wife07PM to 09PM working09PM to 11PM and yes… I need only 6h sleep ;-)
  • 43. 16 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM
  • 44. 16 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM working with Asia
  • 45. 16 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM working with Asia working with Europe
  • 46. 16 @SvenRuppertwork from everywhere work at your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM working with Asia working with Europe working with US
  • 48. 17 @SvenRuppertThe way of working 20% Time
  • 49. 17 @SvenRuppertThe way of working why you should do it?20% Time
  • 50. 17 @SvenRuppertThe way of working why you should do it?20% Time lost in daily business
  • 51. 17 @SvenRuppertThe way of working why you should do it?20% Time
  • 52. 18 @SvenRuppertThe way of working 20% Time
  • 53. 18 @SvenRuppertThe way of working how to make it useful ?20% Time
  • 54. 18 @SvenRuppertThe way of working how to make it useful ?20% Time
  • 55. 18 @SvenRuppertThe way of working how to make it useful ? for the developer 20% Time
  • 56. 18 @SvenRuppertThe way of working how to make it useful ? for the developer 20% Time
  • 57. 18 @SvenRuppertThe way of working how to make it useful ? for the developer for the company 20% Time
  • 58. 18 @SvenRuppertThe way of working how to make it useful ? example : POC in the Mountains for the developer for the company 20% Time
  • 60. 19 @SvenRuppertClosed- versus Open Source Analyzing the existing Code
  • 61. 19 @SvenRuppertClosed- versus Open Source Analyzing the existing Code in our case : a lot of infrastructure…
  • 62. 19 @SvenRuppertClosed- versus Open Source Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money
  • 63. 19 @SvenRuppertClosed- versus Open Source Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money we divided the
  • 64. 19 @SvenRuppertClosed- versus Open Source Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money we divided the code base
  • 65. 19 @SvenRuppertClosed- versus Open Source Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money we divided the code base dev. environment
  • 66. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment
  • 67. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment
  • 68. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment discuss at conferences
  • 69. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences
  • 70. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences
  • 71. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation
  • 72. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation
  • 73. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules
  • 74. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules free choice of tools
  • 75. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules free choice of tools
  • 76. 20 @SvenRuppertClosed- versus Open Source we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules free choice of tools higher motivation
  • 78. 21 @SvenRuppertThe way of working Start Learning again
  • 79. 21 @SvenRuppertThe way of working Start Learning again for example:
  • 80. 21 @SvenRuppertThe way of working Start Learning again for example: focus on a new paradigm
  • 81. 21 @SvenRuppertThe way of working Start Learning again for example: functionalfocus on a new paradigm
  • 82. 21 @SvenRuppertThe way of working Start Learning again for example: functionalfocus on a new paradigm reactive
  • 83. 21 @SvenRuppertThe way of working Start Learning again for example: functional add a new Language focus on a new paradigm reactive
  • 84. 21 @SvenRuppertThe way of working Start Learning again for example: functional add a new Language focus on a new paradigm but not everyone want to learn reactive
  • 85. 21 @SvenRuppertThe way of working Start Learning again for example: functional add a new Language focus on a new paradigm but not everyone want to learn or better…. some are learning faster reactive
  • 86. 21 @SvenRuppertThe way of working Start Learning again for example: functional add a new Language focus on a new paradigm but not everyone want to learn or better…. some are learning faster reactive this sometimes leads to ….. reactions….
  • 87. 22 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions….
  • 88. 22 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions….
  • 89. 22 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. running away
  • 90. 23 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions….
  • 91. 23 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions….
  • 92. 23 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. expecting something
  • 93. 24 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions….
  • 94. 24 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. feeling the near end
  • 95. 24 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. feeling the near end
  • 96. 25 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions….
  • 97. 25 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. or only feeling to old
  • 98. 25 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. or only feeling to old
  • 99. 26 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions….
  • 100. 26 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. if you don´t want to loose them
  • 101. 26 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them
  • 102. 26 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them make them happy again
  • 103. 26 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them make them happy again
  • 104. 26 @SvenRuppertThe way of working Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them make them happy again How we solved this?
  • 106. 27 @SvenRuppertThe way of working we are a product company
  • 107. 27 @SvenRuppertThe way of working we are a product company with a lot of LTS contracts
  • 108. 27 @SvenRuppertThe way of working we are a product company with a lot of LTS contracts we created three streams
  • 109. 27 @SvenRuppertThe way of working we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away
  • 110. 27 @SvenRuppertThe way of working we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away Core Developers - collect and clean
  • 111. 27 @SvenRuppertThe way of working we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away Core Developers - collect and clean LTS Developers - keep alive
  • 112. 27 @SvenRuppertThe way of working we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away Core Developers - collect and clean LTS Developers - keep alive Why ?
  • 113. 28 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ?
  • 114. 28 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment
  • 115. 28 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments
  • 116. 28 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something
  • 117. 29 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something
  • 118. 29 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something amount of hours paid by the customer
  • 119. 29 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something amount of hours paid by the customer rated on hours the systems are stabil
  • 120. 29 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something amount of hours paid by the customer rated on hours the systems are stabil fixed income - bonus based on Change Request
  • 121. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive
  • 122. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive
  • 123. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive
  • 124. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive customer driven
  • 125. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive customer driven
  • 126. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven
  • 127. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven
  • 128. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven roadmap driven
  • 129. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven roadmap driven
  • 130. 30 @SvenRuppertThe way of working Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM Kanban customer driven roadmap driven
  • 131. 31 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Consultants
  • 132. 31 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Consultants
  • 133. 31 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 134. 31 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 135. 31 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 136. 31 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 137. 32 @SvenRuppertThe way of working SCRUM Kanban
  • 138. 32 @SvenRuppertThe way of working SCRUM Kanban LTS - Developers LTS - Developers LTS - Developers
  • 139. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers
  • 140. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers
  • 141. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers time based planning
  • 142. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning
  • 143. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning
  • 144. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning version based
  • 145. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning fixed size time slots version based
  • 146. 32 @SvenRuppertThe way of working SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning fixed size time slots version based dynamic size time slots
  • 147. 33 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers
  • 148. 33 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers build a source of knowledge
  • 149. 33 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers build a source of knowledge
  • 150. 33 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers build a source of knowledge
  • 151. 33 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers build a source of knowledge
  • 152. 34 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 153. 34 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 154. 34 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 155. 34 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 156. 34 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 157. 34 @SvenRuppertKnowledge Sharing Consultants LTS - Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 160. 35 @SvenRuppertTechnical Migrations if you ask the consultants… to scale or change you need at least … ;-)
  • 161. 35 @SvenRuppertTechnical Migrations if you ask the consultants… to scale or change you need at least … ;-) NoSQL
  • 162. 35 @SvenRuppertTechnical Migrations if you ask the consultants… to scale or change you need at least … ;-) NoSQL Akka / Scala
  • 163. 35 @SvenRuppertTechnical Migrations if you ask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala
  • 164. 35 @SvenRuppertTechnical Migrations if you ask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala Reactive
  • 165. 35 @SvenRuppertTechnical Migrations if you ask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala Reactive Functional
  • 166. 35 @SvenRuppertTechnical Migrations if you ask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala Reactive Functional maybe ;-)
  • 170. 36 @SvenRuppertTechnical Transformation JDBC - ResultSet Speedment - Streams
  • 176. 36 @SvenRuppertTechnical Transformation Swing Vaadin HashMap Hazelcast - Map JDBC - ResultSet Speedment - Streams
  • 177. 36 @SvenRuppertTechnical Transformation Swing Vaadin HashMap Hazelcast - Map JDBC - ResultSet Speedment - Streams what is the right technology for your team?
  • 178. 36 @SvenRuppertTechnical Transformation Swing Vaadin HashMap Hazelcast - Map JDBC - ResultSet Speedment - Streams what is the right technology for your team? what is the right order?
  • 179. 37 @SvenRuppertTechnical Transformation what is the right technology for your team?
  • 180. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order?
  • 181. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity
  • 182. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity the team could work with
  • 183. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity scale the team could work with
  • 184. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more….
  • 185. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ?
  • 186. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ? start with the oldest one ?
  • 187. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ? start with the oldest one ? most komplex one?
  • 188. 37 @SvenRuppertTechnical Transformation what is the right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ? start with the oldest one ? most komplex one? … or ….
  • 189. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed…
  • 190. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time
  • 191. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions
  • 192. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v1
  • 193. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v1
  • 194. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v1
  • 195. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v1 v2
  • 196. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v1 v2 stabilize
  • 197. 38 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v1 v2 stabilize
  • 198. 39 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v2 stabilize
  • 199. 39 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v2 stabilize delta t compared to project lifetime
  • 200. 39 @SvenRuppertTechnical Transformation on thing that would limit your speed… time number of versions v2 stabilize delta t compared to project lifetime
  • 201. 40 @SvenRuppertQM / QS - TDD Do you have bugs in your code ?
  • 202. 40 @SvenRuppertQM / QS - TDD Do you have bugs in your code ? no
  • 203. 40 @SvenRuppertQM / QS - TDD Do you have bugs in your code ? since years you are working hard on this…. no
  • 204. 40 @SvenRuppertQM / QS - TDD Do you have bugs in your code ? since years you are working hard on this…. no
  • 205. 41 @SvenRuppertQM / QS - TDD Codebase is > 13 years old remember…. how to start? what is the right point to start? how to increase the quality of the tests?
  • 206. 41 @SvenRuppertQM / QS - TDD Codebase is > 13 years old no test coverage remember…. how to start? what is the right point to start? how to increase the quality of the tests?
  • 207. 41 @SvenRuppertQM / QS - TDD Codebase is > 13 years old no test coverage how to decrease complexity? remember…. how to start? what is the right point to start? how to increase the quality of the tests?
  • 208. 42 TDD with jUnit @SvenRuppert
  • 209. 42 TDD with jUnit @SvenRuppert are you using jUnit?
  • 210. 42 TDD with jUnit @SvenRuppert are you using jUnit? assume that the following would make sense.. ;-)
  • 211. 42 TDD with jUnit @SvenRuppert are you using jUnit? assume that the following would make sense.. ;-) public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 }
  • 212. 42 TDD with jUnit @SvenRuppert are you using jUnit? assume that the following would make sense.. ;-) public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ?
  • 213. 42 TDD with jUnit @SvenRuppert are you using jUnit? assume that the following would make sense.. ;-) public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-)
  • 214. 43 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-)
  • 215. 43 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage
  • 216. 43 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage 2
  • 217. 43 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage 2 but will this be enough?
  • 218. 43 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage 2 but will this be enough? maybe ;-)
  • 219. 44 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? for line 100% coverage 2 but will this be enough? maybe ;-) it depends ;-)
  • 220. 44 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? for line 100% coverage 2 but will this be enough? maybe ;-) how to find out, what will be enough? it depends ;-)
  • 221. 44 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? for line 100% coverage 2 but will this be enough? maybe ;-) how to find out, what will be enough? how to find the right tests? it depends ;-)
  • 222. 45 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ?
  • 223. 45 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 }
  • 224. 45 TDD with jUnit @SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 } @Test
 public void testAdd002() throws Exception {
 final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
 }
  • 226. 46 Mutation Testing @SvenRuppert Mutation Testing is a structural testing method
  • 227. 46 Mutation Testing @SvenRuppert Mutation Testing is a structural testing method we want to find a way to write "good" tests
  • 228. 46 Mutation Testing @SvenRuppert Mutation Testing is a structural testing method we want to find a way to write "good" tests how to find "good" tests?
  • 229. 46 Mutation Testing @SvenRuppert Mutation Testing is a structural testing method we want to find a way to write "good" tests how to find "good" tests? let the machine find the targets
  • 230. 46 Mutation Testing @SvenRuppert Mutation Testing is a structural testing method we want to find a way to write "good" tests how to find "good" tests? let the machine find the targets let´s mutate it... but how?
  • 231. 47 Mutation Testing - the Idea @SvenRuppert
  • 232. 47 Mutation Testing - the Idea @SvenRuppert a mutation is a small change in the code
  • 233. 47 Mutation Testing - the Idea @SvenRuppert a mutation is a small change in the code .. small enough to be a small defect
  • 234. 47 Mutation Testing - the Idea @SvenRuppert a mutation is a small change in the code .. small enough to be a small defect P will be the program
  • 235. 47 Mutation Testing - the Idea @SvenRuppert a mutation is a small change in the code .. small enough to be a small defect P will be the program T will be the collection of all tests / Test Suite
  • 236. 48 Mutation Testing - the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite
  • 237. 48 Mutation Testing - the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3...
  • 238. 48 Mutation Testing - the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P
  • 239. 48 Mutation Testing - the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px
  • 240. 48 Mutation Testing - the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px green: T will kill the mutation
  • 241. 48 Mutation Testing - the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px green: T will kill the mutation .. at leased one test from T will fail
  • 242. 48 Mutation Testing - the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px green: T will kill the mutation .. at leased one test from T will fail red: if all tests are green
  • 243. 49 Mutation Testing - the Idea @SvenRuppert
  • 244. 49 Mutation Testing - the Idea @SvenRuppert if we kill k out of n mutants
  • 245. 49 Mutation Testing - the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-)
  • 246. 49 Mutation Testing - the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n
  • 247. 49 Mutation Testing - the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n how to create all versions of Px ?
  • 248. 49 Mutation Testing - the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n how to create all versions of Px ? .. the good thing..
  • 249. 49 Mutation Testing - the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n how to create all versions of Px ? .. the good thing.. we could almost generate/ automate everything
  • 250. 50 Mutation Testing @SvenRuppert practical TDD with Mutation Testing
  • 251. 50 Mutation Testing @SvenRuppert generating the mutants and practical TDD with Mutation Testing
  • 252. 50 Mutation Testing @SvenRuppert generating the mutants and practical TDD with Mutation Testing running all junit tests
  • 253. 50 Mutation Testing @SvenRuppert generating the mutants and practical TDD with Mutation Testing running all junit tests check the reports
  • 254. 50 Mutation Testing @SvenRuppert generating the mutants and practical TDD with Mutation Testing running all junit tests check the reports write more / better tests
  • 255. 50 Mutation Testing @SvenRuppert generating the mutants and practical TDD with Mutation Testing running all junit tests check the reports write more / better tests loop until quality target reached
  • 256. 51 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 }
  • 257. 51 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for..
  • 258. 51 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and…
  • 259. 51 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and… to be save ?
  • 260. 51 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and… to be save ? 2 for Line Coverage
  • 261. 51 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and… to be save ? 2 for Line Coverage we will see ;-)
  • 262. 52 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and…
  • 263. 52 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and… we have one if statement
  • 264. 52 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and… we have one if statement with an else branch
  • 265. 52 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and… we have one if statement with an else branch this will lead to 2 jUnit Tests to get 100 %
  • 266. 53 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } 
 else { return a+b; }
 }
 } 100% Line Coverage… and…
  • 267. 53 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } 
 else { return a+b; }
 }
 } 100% Line Coverage… and… @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 }
  • 268. 53 Mutation Testing - Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } 
 else { return a+b; }
 }
 } 100% Line Coverage… and… @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 } @Test
 public void testAdd002() throws Exception {
 final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
 }
  • 269. 54 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0); final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
  • 270. 54 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0); final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
  • 271. 54 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0); final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
  • 272. 55 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 273. 55 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 274. 55 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 275. 56 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 276. 56 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 277. 56 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 278. Killed 3 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations
  • 279. Killed 3 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 280. 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 281. Killed 4 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 282. Killed 4 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 283. Killed 4 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 284. Killed 4 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 285. Killed 4 57 Mutation Testing - Hello World @SvenRuppert final int add = new Service().add(0, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 286. Killed 4 57 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 287. Killed 4 58 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 288. Killed 4 58 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1);
  • 289. 58 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1);
  • 290. Killed 5 58 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1);
  • 291. Killed 5 58 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1
  • 292. Killed 5 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1
  • 293. Killed 5 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 294. 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 295. Killed 6 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 296. Killed 6 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 297. Killed 6 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 298. Killed 6 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); final int add = new Service().add(2, 2); killed 11:1
  • 299. Killed 6 59 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(1, 1); final int add = new Service().add(2, 2); killed 11:1
  • 300. Killed 6 60 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(1, 1); final int add = new Service().add(2, 2);
  • 301. Killed 6 60 Mutation Testing - Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(1, 1); final int add = new Service().add(2, 2);
  • 302. 61 Mutation Testing - in short words @SvenRuppert
  • 303. 61 Mutation Testing - in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD
  • 304. 61 Mutation Testing - in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well
  • 305. 61 Mutation Testing - in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well generating and running all tests are time consuming
  • 306. 61 Mutation Testing - in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well generating and running all tests are time consuming but most important
  • 307. 61 Mutation Testing - in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well generating and running all tests are time consuming but most important will effect your project structure
  • 308. 62 Mutation Testing - Lesson Learned @SvenRuppert
  • 309. 62 Mutation Testing - Lesson Learned @SvenRuppert mutation tests are often leading to
  • 310. 62 Mutation Testing - Lesson Learned @SvenRuppert mutation tests are often leading to …cleaner code compared to jUnit only
  • 311. 63 Mutation Testing - Lesson Learned @SvenRuppert public static final String[] discardCommonPrefix(String a, String b) { String[] ret = { a, b }; int l = a.length() < b.length() ? a.length() : b.length(); for (int i = 0; i < l; i++) { if (a.charAt(i) == b.charAt(i)) { if (i + 1 < l) { ret[0] = a.substring(i + 1); ret[1] = b.substring(i + 1); } else { if (a.length() < b.length()) { ret[0] = ""; ret[1] = b.substring(i + 1); } if (a.length() == b.length()) { ret[0] = ""; ret[1] = „"; } if (a.length() > b.length()) { ret[0] = a.substring(i + 1); ret[1] = „"; } } } else break; } return ret; }
  • 312. 64 Mutation Testing - Lesson Learned @SvenRuppert public String[] discardCommonPrefix(String a, String b) { final String[] ret = new String[2]; int l; if (a.length() < b.length()) { l = a.length(); } else { l = b.length(); } int position = 0; for (; position < l; position++) { final char charA = a.charAt(position); final char charB = b.charAt(position); if (charA != charB) { break; } } if (position >= a.length()) { ret[0] = ""; } else { ret[0] = a.substring(position); } if (position >= b.length()) { ret[1] = ""; } else { ret[1] = b.substring(position); } return ret; }
  • 313. 65 Mutation Testing - Lesson Learned @SvenRuppert Version 1 Version 2
  • 314. 65 Mutation Testing - Lesson Learned @SvenRuppert Version 1 Version 2 for { if { if else { if if if } } else }
  • 315. 65 Mutation Testing - Lesson Learned @SvenRuppert Version 1 Version 2 for { if { if else { if if if } } else } if else for { if } if else if else
  • 316. 66 Example of useless Code @SvenRuppert
  • 317. 66 Example of useless Code @SvenRuppert
  • 318. 66 Example of useless Code @SvenRuppert
  • 319. Summary 67 @SvenRuppert Now it is time to relax again ;-)
  • 320. Summary 68 @SvenRuppert If you are interested… have a look at GITHUB ProxyBuilder Dynamic-Dependency-Injection Java-Microservice or contact me ;-) @SvenRuppert
  • 321. Summary 68 @SvenRuppert If you are interested… have a look at GITHUB ProxyBuilder Dynamic-Dependency-Injection Java-Microservice or contact me ;-) @SvenRuppert Thank You !!!