Date post: | 13-Apr-2017 |
Category: |
Software |
Upload: | sven-ruppert |
View: | 58 times |
Download: | 2 times |
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. Ican not be held responsible for the overuse of effects andanimations in this presentation. If any person in this roomhas a medical condition that is triggered by fast movingobjects on the screen and/or explosions, he/she shouldprobably 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 Lordsnearly 15% are retired soon
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old no test coverage
Code Lordsnearly 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 Lordsnearly 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 Lordsnearly 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 Lordsnearly 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 - SharingThe way of working
The way of leading the Team
QM / QS - How to increase qualityTechnical 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 mailsremote meetings with zoom
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mailsremote meetings with zoom
remote Pair-Programming
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mailsremote meetings with zoom
remote Pair-Programmingwork async.
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mailsremote meetings with zoom
remote Pair-Programmingwork 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 youmy „normal“ day…
15
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMbreakfast with the family07AM to 09AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMbreakfast with the family07AM to 09AMworking09AM to 12AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMbreakfast with the family07AM to 09AMworking09AM to 12AMplaying with my son12AM to 07PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMbreakfast with the family07AM to 09AMworking09AM to 12AMplaying with my son12AM to 07PMplaying with my wife 07PM to 09PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMbreakfast with the family07AM to 09AMworking09AM to 12AMplaying with my son12AM to 07PMplaying with my wife 07PM to 09PMworking09PM to 11PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMbreakfast with the family07AM to 09AMworking09AM to 12AMplaying with my son12AM to 07PMplaying with my wife 07PM to 09PMworking09PM to 11PM
and yes… I need only 6h sleep ;-)
16
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMworking09AM to 12AMworking09PM to 11PM
16
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMworking09AM to 12AMworking09PM to 11PM
working with Asia
16
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMworking09AM to 12AMworking09PM to 11PM
working with Asiaworking with Europe
16
@SvenRuppertwork from everywhere
work at your time that is the best for youmy „normal“ day…
working05AM to 07AMworking09AM to 12AMworking09PM to 11PM
working with Asiaworking with Europeworking 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 basedev. 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 itdiscuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about itdiscuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about itdiscuss at conferences
will lead to better documentation
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about itdiscuss at conferences
will lead to better documentation
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about itdiscuss 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 itdiscuss at conferences
will lead to better documentation
out of company rulesfree choice of tools
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about itdiscuss at conferences
will lead to better documentation
out of company rulesfree choice of tools
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about itdiscuss at conferences
will lead to better documentation
out of company rulesfree 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 againfor example:
21
@SvenRuppertThe way of working
Start Learning againfor example: focus on a new paradigm
21
@SvenRuppertThe way of working
Start Learning againfor example:
functionalfocus on a new paradigm
21
@SvenRuppertThe way of working
Start Learning againfor example:
functionalfocus on a new paradigm reactive
21
@SvenRuppertThe way of working
Start Learning againfor example:
functionaladd a new Languagefocus on a new paradigm reactive
21
@SvenRuppertThe way of working
Start Learning againfor example:
functionaladd a new Languagefocus on a new paradigm
but not everyone want to learn
reactive
21
@SvenRuppertThe way of working
Start Learning againfor example:
functionaladd a new Languagefocus on a new paradigm
but not everyone want to learn or better…. some are learning faster
reactive
21
@SvenRuppertThe way of working
Start Learning againfor example:
functionaladd a new Languagefocus 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 againthis sometimes leads to ….. reactions….
22
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
22
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
running away
23
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
23
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
23
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
expecting something
24
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
24
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
feeling the near end
24
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
feeling the near end
25
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
25
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
or only feeling to old
25
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
or only feeling to old
26
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
26
@SvenRuppertThe way of working
Start Learning againthis sometimes leads to ….. reactions….
if you don´t want to loose them
26
@SvenRuppertThe way of working
Start Learning againthis 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 againthis 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 againthis 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 againthis 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 awayCore 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 awayCore 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 awayCore Developers - collect and clean
LTS Developers - keep alive
Why ?
28
@SvenRuppertThe way of working
Consultants - play and throw awayCore Developer - collect and cleanLTS Developer - keep alive Why ?
28
@SvenRuppertThe way of working
Consultants - play and throw awayCore Developer - collect and cleanLTS Developer - keep alive Why ?some want to learn and experiment
28
@SvenRuppertThe way of working
Consultants - play and throw awayCore Developer - collect and cleanLTS Developer - keep alive Why ?some want to learn and experimentsome need more stabil environments
28
@SvenRuppertThe way of working
Consultants - play and throw awayCore Developer - collect and cleanLTS Developer - keep alive Why ?some want to learn and experimentsome need more stabil environmentssome 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 aliveSCRUM
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep aliveSCRUM
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep aliveSCRUM
customer driven
roadmap driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep aliveSCRUM
customer driven
roadmap driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep aliveSCRUM
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 SessionsPOC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts Refactoring SessionsPOC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts Refactoring SessionsPOC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts Refactoring SessionsPOC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts Refactoring SessionsPOC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts Refactoring SessionsPOC
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
ReactiveFunctional
35
@SvenRuppertTechnical Migrations
if you ask the consultants…to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
ReactiveFunctional
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 VaadinJDBC - 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 complexityscale
the team could work with
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexityscale
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 complexityscale
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 complexityscale
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 complexityscale
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 complexityscale
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
v2stabilize
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
v2stabilize
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versionsv2
stabilize
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versionsv2
stabilizedelta t compared to project lifetime
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versionsv2
stabilizedelta 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" testshow to find "good" tests?
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" testshow 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" testshow 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 programT will be the collection of all tests / Test Suite
48
Mutation Testing - the Idea @SvenRuppert
P will be the programT will be the collection of all tests / Test Suite
48
Mutation Testing - the Idea @SvenRuppert
P will be the programT 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 programT 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 programT 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 programT 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 programT 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 programT 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 testscheck the reports
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit testscheck the reports
write more / better tests
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit testscheck 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…@Testpublic 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…@Testpublic 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 mutationsfinal 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 mutationsfinal 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 mutationsfinal 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 mutationsfinal 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 mutationsfinal 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 mutationsfinal 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 mutationsfinal int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutationsfinal 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 !!!