legacy sins
TRANSCRIPT
![Page 1: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/1.jpg)
Legacy Sins
Eberhard Wolff Freelancer
![Page 2: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/2.jpg)
Eberhard Wolff - @ewolff
I’m a Software Architect. But I’m not doing architecture. !
![Page 3: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/3.jpg)
Eberhard Wolff - @ewolff
How important is Software
Architecture?
![Page 4: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/4.jpg)
Eberhard Wolff - @ewolff
Why would we care about Software
Architecture?
![Page 5: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/5.jpg)
Eberhard Wolff - @ewolff
Software Architecture =Structure
![Page 6: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/6.jpg)
Eberhard Wolff - @ewolff
Architecture Goals: Quality• All kinds of quality • Performance • Security • … • Focus of this presentation:
Changeability • Architects must understand
customers & priority
![Page 7: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/7.jpg)
Eberhard Wolff - @ewolff
Architects must understand customer
![Page 8: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/8.jpg)
Eberhard Wolff - @ewolff
Software ArchitectureSet of
structures comprise
software elements, relations among them, and
properties of both.
![Page 9: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/9.jpg)
Eberhard Wolff - @ewolff
Why? • Can work on modules in isolation • Can work on collaboration of
modules
• Fits in my head • Dan North
![Page 10: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/10.jpg)
Eberhard Wolff - @ewolff
Does He Care?
![Page 11: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/11.jpg)
Eberhard Wolff - @ewolff
Why?Great
Architecture
Software Easy to change
High productivity
Low Cost
![Page 12: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/12.jpg)
Eberhard Wolff - @ewolff
He Cares
€
![Page 13: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/13.jpg)
Eberhard Wolff - @ewolff
Why?Great
Architecture
Software Easy to change
High productivity
Low Cost
![Page 14: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/14.jpg)
Eberhard Wolff - @ewolff
What He Cares AboutGreat
Architecture
Software Easy to change
High productivity
Low Cost
![Page 15: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/15.jpg)
Eberhard Wolff - @ewolff
Is architecture the only factor
for changeability?
![Page 16: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/16.jpg)
Eberhard Wolff - @ewolff
What is the worst thing
we can have in a legacy code?
![Page 17: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/17.jpg)
Eberhard Wolff - @ewolff
Great architecture
orautomated
tests?
![Page 18: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/18.jpg)
Eberhard Wolff - @ewolff
No Automated Tests Worse• No way to find bugs • Changes almost impossible
• Legacy code = code without tests • Michael Feathers
Working Effectively with Legacy Code
![Page 19: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/19.jpg)
Eberhard Wolff - @ewolff
Let’s add some
automated GUI tests
![Page 20: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/20.jpg)
Eberhard Wolff - @ewolff
Automated GUI Tests• Easy to implement • Exactly what testers do manually • Easy to understand for customers • Test business processes • Safety net
![Page 21: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/21.jpg)
Eberhard Wolff - @ewolff
Unit Tests
or automated GUI tests?
![Page 22: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/22.jpg)
Eberhard Wolff - @ewolff
Many GUI Tests Worse • Fragile: Changes to GUI break test
• Business meaning of tests easily lost
• Takes long
• Often not reproducible
![Page 23: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/23.jpg)
Eberhard Wolff - @ewolff
Automated GUI Tests
Automated Integration
Tests
Unit Tests
Manual Tests
![Page 24: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/24.jpg)
Eberhard Wolff - @ewolff
Automated GUI Tests
Automated Integration
Tests
Unit Tests
Manual Tests
![Page 25: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/25.jpg)
Eberhard Wolff - @ewolff
SlowUnreliableExpensive
![Page 26: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/26.jpg)
Eberhard Wolff - @ewolff
Alternatives to automated GUI tests?
![Page 27: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/27.jpg)
Eberhard Wolff - @ewolff
Textueller Akzeptanztest
![Page 28: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/28.jpg)
Eberhard Wolff - @ewolff
Szenario• Möglicher Ablauf in einer Story
• Standardisierte Bestandteile: • Gegeben... (Kontext) • Wenn... (Ereignis) • Dann... (erwartetes Ergebnis)
![Page 29: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/29.jpg)
Eberhard Wolff - @ewolff
Szenario: BeispielSzenario: Kunde registriert sich erfolgreich Gegeben ein neuer Kunde mit EMail [email protected] Vorname Eberhard Name Wolff Wenn der Kunde sich registriert Dann sollte ein Kunde mit der EMail [email protected] existieren Und es sollte kein Fehler gemeldet werden
Kontext
Ereignis
Erwartetes Ergebnis
Erwartetes Ergebnis
![Page 30: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/30.jpg)
Eberhard Wolff - @ewolff
public class UserRegistrationSteps { private RegistrationService registrationService; private User kunde; private boolean fehler = false; // Initialisierung des RegistrationService ausgelassen @Given( "ein neuer Kunde mit EMail $email Vorname $vorname“ + "Name $name") public void gegebenKunde(String email, String vorname, String name) { kunde = new User(vorname, name, email); }
![Page 31: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/31.jpg)
Eberhard Wolff - @ewolff
@When("der Kunde sich registriert") public void registerKunde() { try { registrationService.register(kunde); } catch (IllegalArgumentException ex) { fehler = true; } } @Then("sollte ein Kunde mit der EMail $email existieren") public void existiert(String email) { assertNotNull(registrationService.getByEMail(email)); } @Then("es sollte kein Fehler gemeldet werden") public void keinFehler() { assertFalse(fehler); } }
![Page 32: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/32.jpg)
Eberhard Wolff - @ewolff
Test is about handling risk
![Page 33: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/33.jpg)
Eberhard Wolff - @ewolff
Tests for Risks• Algorithm / calculation wrong:
Unit test • System failures: Unit tests • Wiring / collaboration:
Integration tests • Business process: Integration test • GUI: GUI test
![Page 34: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/34.jpg)
Eberhard Wolff - @ewolff
Example: User Registration• Unit test Validations Database failure • Integration test Process • GUI test Everything displayed?
![Page 35: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/35.jpg)
Eberhard Wolff - @ewolff
Not Tested• GUI won’t test validation • …or algorithms • …or the process
• Risks handled elsewhere
![Page 36: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/36.jpg)
Eberhard Wolff - @ewolff
Automated GUI Tests
Automated Integration
Tests
Unit Tests
Manual Tests
![Page 37: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/37.jpg)
Eberhard Wolff - @ewolff
Automated GUI Tests.
Automated Integration
Tests
Unit Tests
Manual Tests
Test Pyramid
![Page 38: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/38.jpg)
Eberhard Wolff - @ewolff
Test Pyramid instead of Automated GUI tests
![Page 39: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/39.jpg)
Eberhard Wolff - @ewolff
Great architecture
or fast & easy deployment?
![Page 40: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/40.jpg)
Eberhard Wolff - @ewolff
Deployment• Manual deployment is error prone • Slow deployment Lots of code developed but not deployed i.e. more lean waste Slow feedback Slow time to recovery
![Page 41: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/41.jpg)
Eberhard Wolff - @ewolff
Leseprobe: http://bit.ly/CD-Buch
![Page 42: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/42.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery: Build Pipeline
Commit Stage
Automated Acceptance
Testing
Automated Capacity Testing
Manual Explorative
Testing
Release
![Page 43: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/43.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery• Testing • + automated deployment
• Testing: reduce probability of errors • Automated deployment: better
mean time to repair
![Page 44: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/44.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery• Make software easier to change • & deploy
• Reliable and reproducible tests • Automated deployed • Fast & reliable
![Page 45: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/45.jpg)
Eberhard Wolff - @ewolff
What is a great architecture?
![Page 46: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/46.jpg)
Eberhard Wolff - @ewolff
GUI
Logic
Database
![Page 47: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/47.jpg)
Eberhard Wolff - @ewolff
Is 3 Tier a great
architecture?
![Page 48: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/48.jpg)
Eberhard Wolff - @ewolff
3 Tier• Actually layer: no distribution • By technology
• Layers can be replaced
• Layers can be developed independently
![Page 49: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/49.jpg)
Eberhard Wolff - @ewolff
Do you replace e.g. the
persistence layer?
![Page 50: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/50.jpg)
Eberhard Wolff - @ewolff
Is it really simple to add e.g. mobile
clients?
![Page 51: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/51.jpg)
Eberhard Wolff - @ewolff
A better reason:
Fits in my head.
![Page 52: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/52.jpg)
Eberhard Wolff - @ewolff
Redo the order
processing!
![Page 53: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/53.jpg)
Eberhard Wolff - @ewolff
Add this to the
registration!
![Page 54: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/54.jpg)
Eberhard Wolff - @ewolff
Can we change the
persistence technology
instead?
![Page 55: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/55.jpg)
Eberhard Wolff - @ewolff
Please
![Page 56: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/56.jpg)
Eberhard Wolff - @ewolff
What is a persistence
technology??
![Page 57: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/57.jpg)
Eberhard Wolff - @ewolff
Registration Order Billing
GUI
Logic
![Page 58: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/58.jpg)
Eberhard Wolff - @ewolff
Architecture• Should support changes • …with business value • Needs to model the domain • Hard to get right • Architect needs to understand the
domain
![Page 59: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/59.jpg)
Eberhard Wolff - @ewolff
Is a great architecture free of cyclic
dependencies?
![Page 60: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/60.jpg)
Eberhard Wolff - @ewolff
A B
A depends on B
Changes to B influence A
![Page 61: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/61.jpg)
Eberhard Wolff - @ewolff
A B
A depends on B
Changes to B influence A B depends on A
Changes to A influence B
In fact one component Should be two components
![Page 62: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/62.jpg)
Eberhard Wolff - @ewolff
Is a great architecture free of cyclic
dependencies?
![Page 63: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/63.jpg)
Eberhard Wolff - @ewolff
Cyclic dependencies:
architects’ mortal sin
![Page 64: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/64.jpg)
Eberhard Wolff - @ewolff
A B
A B
42
2
200
![Page 65: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/65.jpg)
Eberhard Wolff - @ewolff
Other Architecture Metrics• High cohesion Elements of a module should belong together • Low coupling Modules should not depend on each other
![Page 66: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/66.jpg)
Eberhard Wolff - @ewolff
Great Architecture• Don’t overrate cyclic dependencies!
• Consider other metrics
• Architecture by domain
![Page 67: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/67.jpg)
Eberhard Wolff - @ewolff
The worst legacy
problems?
![Page 68: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/68.jpg)
Eberhard Wolff - @ewolff
The project has a lot of cyclic dependencies!
I know. …but that doesn’t cause a lot of trouble
![Page 69: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/69.jpg)
Eberhard Wolff - @ewolff
Architects must understand
customer & his quality demands
![Page 70: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/70.jpg)
Eberhard Wolff - @ewolff
Quality• Changeability • Performance • Security • …
![Page 71: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/71.jpg)
Eberhard Wolff - @ewolff
No two projects are
alike.
![Page 72: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/72.jpg)
Eberhard Wolff - @ewolff
No general rules.
![Page 73: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/73.jpg)
Eberhard Wolff - @ewolff
Sorry!
![Page 74: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/74.jpg)
Eberhard Wolff - @ewolff
Software Easy to change
Automated tests
Test pyramid
Fast & easy deployment
Great Architecture
No cyclic dependencies
Low coupling
High cohesion
![Page 75: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/75.jpg)
Eberhard Wolff - @ewolff
I’m a Software Architect. But I’m not doing architecture.
There is more to changeable software than architecture.
![Page 76: Legacy Sins](https://reader038.vdocuments.site/reader038/viewer/2022102808/55d75f67bb61eb80278b463d/html5/thumbnails/76.jpg)
Eberhard Wolff - @ewolff
Thank You!