SlideShare a Scribd company logo
Legacy Sins
Eberhard Wolff
Freelancer
Eberhard Wolff - @ewolff
I’m a Software
Architect.
But I’m not doing
architecture. !
Eberhard Wolff - @ewolff
How important is
Software
Architecture?
Eberhard Wolff - @ewolff
Why would we
care about
Software
Architecture?
Eberhard Wolff - @ewolff
Software
Architecture
=Structure
Eberhard Wolff - @ewolff
Architecture Goals: Quality
•  All kinds of quality
•  Performance
•  Security
•  …
•  Focus of this presentation:
Changeability
•  Architects must understand
customers & priority
Eberhard Wolff - @ewolff
Architects must
understand
customer
Eberhard Wolff - @ewolff
Software Architecture
Set of
structures
comprise
software elements,
relations among them, and
properties of both.
Eberhard Wolff - @ewolff
Why?
•  Can work on modules in isolation
•  Can work on collaboration of
modules
•  Fits in my head
•  Dan North
Eberhard Wolff - @ewolff
Does He Care?
Eberhard Wolff - @ewolff
Why?
Great
Architecture
Software
Easy to change
High
productivity
Low
Cost
Eberhard Wolff - @ewolff
He Cares
€
Eberhard Wolff - @ewolff
Why?
Great
Architecture
Software
Easy to change
High
productivity
Low
Cost
Eberhard Wolff - @ewolff
What He Cares About
Great
Architecture
Software
Easy to change
High
productivity
Low
Cost
Eberhard Wolff - @ewolff
Is architecture
the only factor
for
changeability?
Eberhard Wolff - @ewolff
What is the
worst thing
we can have in
a legacy code?
Eberhard Wolff - @ewolff
Great
architecture
or
automated
tests?
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
Eberhard Wolff - @ewolff
Let’s add
some
automated
GUI tests
Eberhard Wolff - @ewolff
Automated GUI Tests
•  Easy to implement
•  Exactly what testers do manually
•  Easy to understand for customers
•  Test business processes
•  Safety net
Eberhard Wolff - @ewolff
Unit Tests
or automated
GUI tests?
Eberhard Wolff - @ewolff
Many GUI Tests Worse
•  Fragile: Changes to GUI break test
•  Business meaning of tests easily lost
•  Takes long
•  Often not reproducible
Eberhard Wolff - @ewolff
Automated
GUI Tests
Automated
Integration
Tests
Unit
Tests
Manual Tests
Eberhard Wolff - @ewolff
Automated
GUI Tests
Automated
Integration
Tests
Unit
Tests
Manual Tests
Eberhard Wolff - @ewolff
Slow
Unreliable
Expensive
Eberhard Wolff - @ewolff
Alternatives to
automated
GUI tests?
Eberhard Wolff - @ewolff
Textueller
Akzeptanztest
Eberhard Wolff - @ewolff
Szenario
•  Möglicher Ablauf in einer Story
•  Standardisierte Bestandteile:
•  Gegeben... (Kontext)
•  Wenn... (Ereignis)
•  Dann... (erwartetes Ergebnis)
Eberhard Wolff - @ewolff
Szenario: Beispiel
Szenario: Kunde registriert sich erfolgreich
Gegeben ein neuer Kunde mit EMail
eberhard.wolff@gmail.com Vorname Eberhard Name
Wolff
Wenn der Kunde sich registriert
Dann sollte ein Kunde mit der EMail
eberhard.wolff@gmail.com existieren
Und es sollte kein Fehler gemeldet werden
Kontext
Ereignis
Erwartetes
Ergebnis
Erwartetes
Ergebnis
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);
}
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);
} }
Eberhard Wolff - @ewolff
Test is about
handling risk
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
Eberhard Wolff - @ewolff
Example: User Registration
•  Unit test
Validations
Database failure
•  Integration test
Process
•  GUI test
Everything displayed?
Eberhard Wolff - @ewolff
Not Tested
•  GUI won’t test validation
•  …or algorithms
•  …or the process
•  Risks handled elsewhere
Eberhard Wolff - @ewolff
Automated
GUI Tests
Automated
Integration
Tests
Unit
Tests
Manual Tests
Eberhard Wolff - @ewolff
Automated
GUI Tests.
Automated
Integration
Tests
Unit
Tests
Manual
Tests
Test Pyramid
Eberhard Wolff - @ewolff
Test Pyramid
instead of
Automated
GUI tests
Eberhard Wolff - @ewolff
Great
architecture
or fast & easy
deployment?
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
Eberhard Wolff - @ewolff
Leseprobe:
http://bit.ly/CD-Buch
Eberhard Wolff - @ewolff
Continuous Delivery:

Build Pipeline
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release
Eberhard Wolff - @ewolff
Continuous Delivery
•  Testing
•  + automated deployment
•  Testing: reduce probability of errors
•  Automated deployment: better
mean time to repair
Eberhard Wolff - @ewolff
Continuous Delivery
•  Make software easier to change
•  & deploy
•  Reliable and reproducible tests
•  Automated deployed
•  Fast & reliable
Eberhard Wolff - @ewolff
What is a great
architecture?
Eberhard Wolff - @ewolff
GUI
Logic
Database
Eberhard Wolff - @ewolff
Is 3 Tier a
great
architecture?
Eberhard Wolff - @ewolff
3 Tier
•  Actually layer: no distribution
•  By technology
•  Layers can be replaced
•  Layers can be developed
independently
Eberhard Wolff - @ewolff
Do you replace
e.g. the
persistence
layer?
Eberhard Wolff - @ewolff
Is it really
simple to add
e.g. mobile
clients?
Eberhard Wolff - @ewolff
A better
reason:

Fits in my
head.
Eberhard Wolff - @ewolff
Redo the
order
processing!
Eberhard Wolff - @ewolff
Add this to
the
registration!
Eberhard Wolff - @ewolff
Can we change
the
persistence
technology
instead?
Eberhard Wolff - @ewolff
Please
Eberhard Wolff - @ewolff
What is a
persistence
technology??
Eberhard Wolff - @ewolff
Registration Order Billing
GUI
Logic
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
Eberhard Wolff - @ewolff
Is a great
architecture
free of cyclic
dependencies?
Eberhard Wolff - @ewolff
A B
A depends on B
Changes to B influence A
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
Eberhard Wolff - @ewolff
Is a great
architecture
free of cyclic
dependencies?
Eberhard Wolff - @ewolff
Cyclic
dependencies:
architects’
mortal sin
Eberhard Wolff - @ewolff
A B
A B
42
2
200
Eberhard Wolff - @ewolff
Other Architecture Metrics
•  High cohesion
Elements of a module should belong
together
•  Low coupling
Modules should not depend on each
other
Eberhard Wolff - @ewolff
Great Architecture
•  Don’t overrate cyclic dependencies!
•  Consider other metrics
•  Architecture by domain
Eberhard Wolff - @ewolff
The worst
legacy
problems?
Eberhard Wolff - @ewolff
The project has a
lot of cyclic
dependencies!
I know.
…but that doesn’t
cause a lot of trouble
Eberhard Wolff - @ewolff
Architects must
understand
customer & his
quality demands
Eberhard Wolff - @ewolff
Quality
•  Changeability
•  Performance
•  Security
•  …
Eberhard Wolff - @ewolff
No two
projects are
alike.
Eberhard Wolff - @ewolff
No general
rules.
Eberhard Wolff - @ewolff
Sorry!
Eberhard Wolff - @ewolff
Software
Easy to change
Automated
tests
Test
pyramid
Fast & easy
deployment
Great
Architecture
No cyclic
dependencies
Low
coupling
High
cohesion
Eberhard Wolff - @ewolff
I’m a Software
Architect.
But I’m not doing
architecture.
There is more
to changeable
software than
architecture.
Eberhard Wolff - @ewolff
Thank You!

More Related Content

What's hot

Developing Resilient Cloud Native Apps with Spring Cloud
Developing Resilient Cloud Native Apps with Spring CloudDeveloping Resilient Cloud Native Apps with Spring Cloud
Developing Resilient Cloud Native Apps with Spring Cloud
Dustin Ruehle
 
ELK Stack
ELK StackELK Stack
ELK Stack
Eberhard Wolff
 
Software Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous DeliverySoftware Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous Delivery
Eberhard Wolff
 
Spring Boot
Spring BootSpring Boot
Spring Boot
gedoplan
 
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
Tin Linn Soe
 
Java Architectures - a New Hope
Java Architectures - a New HopeJava Architectures - a New Hope
Java Architectures - a New Hope
Eberhard Wolff
 
Java Application Servers Are Dead!
Java Application Servers Are Dead!Java Application Servers Are Dead!
Java Application Servers Are Dead!
Eberhard Wolff
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
Eberhard Wolff
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explained
Jeroen Niesen
 
Continous integration and delivery for single page applications
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applications
Sunil Dalal
 
Understanding the CloudStack Release Process
Understanding the CloudStack Release ProcessUnderstanding the CloudStack Release Process
Understanding the CloudStack Release Processke4qqq
 
External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...
External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...
External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...
ITD Systems
 
Developer day - AWS: Fast Environments = Fast Deployments
Developer day - AWS: Fast Environments = Fast DeploymentsDeveloper day - AWS: Fast Environments = Fast Deployments
Developer day - AWS: Fast Environments = Fast Deployments
Matthew Cwalinski
 
Java Application Servers Are Dead! - Short Version
Java Application Servers Are Dead! - Short VersionJava Application Servers Are Dead! - Short Version
Java Application Servers Are Dead! - Short Version
Eberhard Wolff
 
Testing Alfresco extensions
Testing Alfresco extensionsTesting Alfresco extensions
Testing Alfresco extensions
ITD Systems
 
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
Frank van der Linden
 
Signal r azurepresentation
Signal r azurepresentationSignal r azurepresentation
Signal r azurepresentationJustin Wendlandt
 
I Don't Test Often ...
I Don't Test Often ...I Don't Test Often ...
I Don't Test Often ...
Gareth Bowles
 
Security as Code: DOES15
Security as Code: DOES15Security as Code: DOES15
Security as Code: DOES15
Ed Bellis
 
NCUG 2019: Super charge your API’s with Reactive streams
NCUG 2019: Super charge your API’s with Reactive streamsNCUG 2019: Super charge your API’s with Reactive streams
NCUG 2019: Super charge your API’s with Reactive streams
Frank van der Linden
 

What's hot (20)

Developing Resilient Cloud Native Apps with Spring Cloud
Developing Resilient Cloud Native Apps with Spring CloudDeveloping Resilient Cloud Native Apps with Spring Cloud
Developing Resilient Cloud Native Apps with Spring Cloud
 
ELK Stack
ELK StackELK Stack
ELK Stack
 
Software Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous DeliverySoftware Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous Delivery
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
 
Java Architectures - a New Hope
Java Architectures - a New HopeJava Architectures - a New Hope
Java Architectures - a New Hope
 
Java Application Servers Are Dead!
Java Application Servers Are Dead!Java Application Servers Are Dead!
Java Application Servers Are Dead!
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explained
 
Continous integration and delivery for single page applications
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applications
 
Understanding the CloudStack Release Process
Understanding the CloudStack Release ProcessUnderstanding the CloudStack Release Process
Understanding the CloudStack Release Process
 
External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...
External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...
External Master Data in Alfresco: Integrating and Keeping Metadata Consistent...
 
Developer day - AWS: Fast Environments = Fast Deployments
Developer day - AWS: Fast Environments = Fast DeploymentsDeveloper day - AWS: Fast Environments = Fast Deployments
Developer day - AWS: Fast Environments = Fast Deployments
 
Java Application Servers Are Dead! - Short Version
Java Application Servers Are Dead! - Short VersionJava Application Servers Are Dead! - Short Version
Java Application Servers Are Dead! - Short Version
 
Testing Alfresco extensions
Testing Alfresco extensionsTesting Alfresco extensions
Testing Alfresco extensions
 
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
 
Signal r azurepresentation
Signal r azurepresentationSignal r azurepresentation
Signal r azurepresentation
 
I Don't Test Often ...
I Don't Test Often ...I Don't Test Often ...
I Don't Test Often ...
 
Security as Code: DOES15
Security as Code: DOES15Security as Code: DOES15
Security as Code: DOES15
 
NCUG 2019: Super charge your API’s with Reactive streams
NCUG 2019: Super charge your API’s with Reactive streamsNCUG 2019: Super charge your API’s with Reactive streams
NCUG 2019: Super charge your API’s with Reactive streams
 

Viewers also liked

JAXonf 2012 New Challenges and Approaches for Enterprise Java
JAXonf 2012 New Challenges and Approaches for Enterprise JavaJAXonf 2012 New Challenges and Approaches for Enterprise Java
JAXonf 2012 New Challenges and Approaches for Enterprise Java
Eberhard Wolff
 
More Productivitiy with Spring Roo
More Productivitiy with Spring RooMore Productivitiy with Spring Roo
More Productivitiy with Spring Roo
Eberhard Wolff
 
Redis - The Universal NoSQL Tool
Redis - The Universal NoSQL ToolRedis - The Universal NoSQL Tool
Redis - The Universal NoSQL Tool
Eberhard Wolff
 
Operations and Monitoring with Spring
Operations and Monitoring with SpringOperations and Monitoring with Spring
Operations and Monitoring with Spring
Eberhard Wolff
 
Architectures For The Cloud
Architectures For The CloudArchitectures For The Cloud
Architectures For The Cloud
Eberhard Wolff
 
Continuous Delivery and DevOps in the Enterprise
Continuous Delivery and DevOps in the EnterpriseContinuous Delivery and DevOps in the Enterprise
Continuous Delivery and DevOps in the EnterpriseEberhard Wolff
 

Viewers also liked (6)

JAXonf 2012 New Challenges and Approaches for Enterprise Java
JAXonf 2012 New Challenges and Approaches for Enterprise JavaJAXonf 2012 New Challenges and Approaches for Enterprise Java
JAXonf 2012 New Challenges and Approaches for Enterprise Java
 
More Productivitiy with Spring Roo
More Productivitiy with Spring RooMore Productivitiy with Spring Roo
More Productivitiy with Spring Roo
 
Redis - The Universal NoSQL Tool
Redis - The Universal NoSQL ToolRedis - The Universal NoSQL Tool
Redis - The Universal NoSQL Tool
 
Operations and Monitoring with Spring
Operations and Monitoring with SpringOperations and Monitoring with Spring
Operations and Monitoring with Spring
 
Architectures For The Cloud
Architectures For The CloudArchitectures For The Cloud
Architectures For The Cloud
 
Continuous Delivery and DevOps in the Enterprise
Continuous Delivery and DevOps in the EnterpriseContinuous Delivery and DevOps in the Enterprise
Continuous Delivery and DevOps in the Enterprise
 

Similar to Legacy Sins

Continuous Delivery & DevOps in the Enterprise
Continuous Delivery & DevOps in the EnterpriseContinuous Delivery & DevOps in the Enterprise
Continuous Delivery & DevOps in the Enterprise
Eberhard Wolff
 
High Availability and Scalability: Too Expensive! Architectures for Future E...
High Availability and Scalability: Too Expensive! Architectures for Future E...High Availability and Scalability: Too Expensive! Architectures for Future E...
High Availability and Scalability: Too Expensive! Architectures for Future E...
Eberhard Wolff
 
NoSQL Riak MongoDB Elasticsearch - All The Same?
NoSQL Riak MongoDB Elasticsearch - All The Same?NoSQL Riak MongoDB Elasticsearch - All The Same?
NoSQL Riak MongoDB Elasticsearch - All The Same?
Eberhard Wolff
 
Continuous Deployment to the cloud
Continuous Deployment to the cloudContinuous Deployment to the cloud
Continuous Deployment to the cloud
VMware Tanzu
 
Continuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneContinuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOne
ciberkleid
 
Enterprise Beacon Object Hive - Siebel Version Control
Enterprise Beacon Object Hive - Siebel Version ControlEnterprise Beacon Object Hive - Siebel Version Control
Enterprise Beacon Object Hive - Siebel Version Control
Milind Waikul
 
Modern devOps with Docker
Modern devOps with DockerModern devOps with Docker
Modern devOps with Docker
Avi Cavale
 
Pragmatic Continuous Delivery - ReaktorDevDay 2012
Pragmatic Continuous Delivery - ReaktorDevDay 2012Pragmatic Continuous Delivery - ReaktorDevDay 2012
Pragmatic Continuous Delivery - ReaktorDevDay 2012
Neeme Praks
 
AppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptxAppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptx
Josh Grossman
 
AppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptxAppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptx
TuynNguyn819213
 
What's New in WCF 4.5
What's New in WCF 4.5What's New in WCF 4.5
What's New in WCF 4.5
Ido Flatow
 
Hacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitHacking Robots for Fun and Profit
Hacking Robots for Fun and Profit
Chad Udell
 
Hacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitHacking Robots for Fun and Profit
Hacking Robots for Fun and Profit
Chad Udell
 
Amazon Elastic Beanstalk
Amazon Elastic BeanstalkAmazon Elastic Beanstalk
Amazon Elastic BeanstalkEberhard Wolff
 
The vSphere Web Client video project: a case study in coordinated content str...
The vSphere Web Client video project: a case study in coordinated content str...The vSphere Web Client video project: a case study in coordinated content str...
The vSphere Web Client video project: a case study in coordinated content str...
Wendy Shaffer
 
Vagrant to-aws-flow
Vagrant to-aws-flowVagrant to-aws-flow
Vagrant to-aws-flow
Kimberly Macias
 
Continuous Delivery and Feature Flagging
Continuous Delivery and Feature FlaggingContinuous Delivery and Feature Flagging
Continuous Delivery and Feature Flagging
LaunchDarkly
 
Leandro Melendez - Switching Performance Left & Right
Leandro Melendez - Switching Performance Left & RightLeandro Melendez - Switching Performance Left & Right
Leandro Melendez - Switching Performance Left & Right
Neotys_Partner
 
5 Steps on the Way to Continuous Delivery
5 Steps on the Way to Continuous Delivery5 Steps on the Way to Continuous Delivery
5 Steps on the Way to Continuous Delivery
XebiaLabs
 
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
Simplilearn
 

Similar to Legacy Sins (20)

Continuous Delivery & DevOps in the Enterprise
Continuous Delivery & DevOps in the EnterpriseContinuous Delivery & DevOps in the Enterprise
Continuous Delivery & DevOps in the Enterprise
 
High Availability and Scalability: Too Expensive! Architectures for Future E...
High Availability and Scalability: Too Expensive! Architectures for Future E...High Availability and Scalability: Too Expensive! Architectures for Future E...
High Availability and Scalability: Too Expensive! Architectures for Future E...
 
NoSQL Riak MongoDB Elasticsearch - All The Same?
NoSQL Riak MongoDB Elasticsearch - All The Same?NoSQL Riak MongoDB Elasticsearch - All The Same?
NoSQL Riak MongoDB Elasticsearch - All The Same?
 
Continuous Deployment to the cloud
Continuous Deployment to the cloudContinuous Deployment to the cloud
Continuous Deployment to the cloud
 
Continuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneContinuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOne
 
Enterprise Beacon Object Hive - Siebel Version Control
Enterprise Beacon Object Hive - Siebel Version ControlEnterprise Beacon Object Hive - Siebel Version Control
Enterprise Beacon Object Hive - Siebel Version Control
 
Modern devOps with Docker
Modern devOps with DockerModern devOps with Docker
Modern devOps with Docker
 
Pragmatic Continuous Delivery - ReaktorDevDay 2012
Pragmatic Continuous Delivery - ReaktorDevDay 2012Pragmatic Continuous Delivery - ReaktorDevDay 2012
Pragmatic Continuous Delivery - ReaktorDevDay 2012
 
AppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptxAppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptx
 
AppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptxAppSec DC 2019 ASVS 4.0 Final.pptx
AppSec DC 2019 ASVS 4.0 Final.pptx
 
What's New in WCF 4.5
What's New in WCF 4.5What's New in WCF 4.5
What's New in WCF 4.5
 
Hacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitHacking Robots for Fun and Profit
Hacking Robots for Fun and Profit
 
Hacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitHacking Robots for Fun and Profit
Hacking Robots for Fun and Profit
 
Amazon Elastic Beanstalk
Amazon Elastic BeanstalkAmazon Elastic Beanstalk
Amazon Elastic Beanstalk
 
The vSphere Web Client video project: a case study in coordinated content str...
The vSphere Web Client video project: a case study in coordinated content str...The vSphere Web Client video project: a case study in coordinated content str...
The vSphere Web Client video project: a case study in coordinated content str...
 
Vagrant to-aws-flow
Vagrant to-aws-flowVagrant to-aws-flow
Vagrant to-aws-flow
 
Continuous Delivery and Feature Flagging
Continuous Delivery and Feature FlaggingContinuous Delivery and Feature Flagging
Continuous Delivery and Feature Flagging
 
Leandro Melendez - Switching Performance Left & Right
Leandro Melendez - Switching Performance Left & RightLeandro Melendez - Switching Performance Left & Right
Leandro Melendez - Switching Performance Left & Right
 
5 Steps on the Way to Continuous Delivery
5 Steps on the Way to Continuous Delivery5 Steps on the Way to Continuous Delivery
5 Steps on the Way to Continuous Delivery
 
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
 

More from Eberhard Wolff

Architectures and Alternatives
Architectures and AlternativesArchitectures and Alternatives
Architectures and Alternatives
Eberhard Wolff
 
Beyond Microservices
Beyond MicroservicesBeyond Microservices
Beyond Microservices
Eberhard Wolff
 
The Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryThe Frontiers of Continuous Delivery
The Frontiers of Continuous Delivery
Eberhard Wolff
 
Four Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, AsyncFour Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, Async
Eberhard Wolff
 
Microservices - not just with Java
Microservices - not just with JavaMicroservices - not just with Java
Microservices - not just with Java
Eberhard Wolff
 
Deployment - Done Right!
Deployment - Done Right!Deployment - Done Right!
Deployment - Done Right!
Eberhard Wolff
 
Data Architecture not Just for Microservices
Data Architecture not Just for MicroservicesData Architecture not Just for Microservices
Data Architecture not Just for Microservices
Eberhard Wolff
 
How to Split Your System into Microservices
How to Split Your System into MicroservicesHow to Split Your System into Microservices
How to Split Your System into Microservices
Eberhard Wolff
 
Microservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileMicroservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale Agile
Eberhard Wolff
 
How Small Can Java Microservices Be?
How Small Can Java Microservices Be?How Small Can Java Microservices Be?
How Small Can Java Microservices Be?
Eberhard Wolff
 
Data Architecturen Not Just for Microservices
Data Architecturen Not Just for MicroservicesData Architecturen Not Just for Microservices
Data Architecturen Not Just for Microservices
Eberhard Wolff
 
Microservices: Redundancy=Maintainability
Microservices: Redundancy=MaintainabilityMicroservices: Redundancy=Maintainability
Microservices: Redundancy=Maintainability
Eberhard Wolff
 
Self-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesSelf-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to Microservices
Eberhard Wolff
 
Microservices Technology Stack
Microservices Technology StackMicroservices Technology Stack
Microservices Technology Stack
Eberhard Wolff
 
Software Architecture for Innovation
Software Architecture for InnovationSoftware Architecture for Innovation
Software Architecture for Innovation
Eberhard Wolff
 
Five (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous DeliveryFive (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous Delivery
Eberhard Wolff
 
Nanoservices and Microservices with Java
Nanoservices and Microservices with JavaNanoservices and Microservices with Java
Nanoservices and Microservices with Java
Eberhard Wolff
 
Microservices: Architecture to Support Agile
Microservices: Architecture to Support AgileMicroservices: Architecture to Support Agile
Microservices: Architecture to Support Agile
Eberhard Wolff
 
Microservices: Architecture to scale Agile
Microservices: Architecture to scale AgileMicroservices: Architecture to scale Agile
Microservices: Architecture to scale Agile
Eberhard Wolff
 
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three BuzzwordsMicroservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Eberhard Wolff
 

More from Eberhard Wolff (20)

Architectures and Alternatives
Architectures and AlternativesArchitectures and Alternatives
Architectures and Alternatives
 
Beyond Microservices
Beyond MicroservicesBeyond Microservices
Beyond Microservices
 
The Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryThe Frontiers of Continuous Delivery
The Frontiers of Continuous Delivery
 
Four Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, AsyncFour Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, Async
 
Microservices - not just with Java
Microservices - not just with JavaMicroservices - not just with Java
Microservices - not just with Java
 
Deployment - Done Right!
Deployment - Done Right!Deployment - Done Right!
Deployment - Done Right!
 
Data Architecture not Just for Microservices
Data Architecture not Just for MicroservicesData Architecture not Just for Microservices
Data Architecture not Just for Microservices
 
How to Split Your System into Microservices
How to Split Your System into MicroservicesHow to Split Your System into Microservices
How to Split Your System into Microservices
 
Microservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileMicroservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale Agile
 
How Small Can Java Microservices Be?
How Small Can Java Microservices Be?How Small Can Java Microservices Be?
How Small Can Java Microservices Be?
 
Data Architecturen Not Just for Microservices
Data Architecturen Not Just for MicroservicesData Architecturen Not Just for Microservices
Data Architecturen Not Just for Microservices
 
Microservices: Redundancy=Maintainability
Microservices: Redundancy=MaintainabilityMicroservices: Redundancy=Maintainability
Microservices: Redundancy=Maintainability
 
Self-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesSelf-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to Microservices
 
Microservices Technology Stack
Microservices Technology StackMicroservices Technology Stack
Microservices Technology Stack
 
Software Architecture for Innovation
Software Architecture for InnovationSoftware Architecture for Innovation
Software Architecture for Innovation
 
Five (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous DeliveryFive (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous Delivery
 
Nanoservices and Microservices with Java
Nanoservices and Microservices with JavaNanoservices and Microservices with Java
Nanoservices and Microservices with Java
 
Microservices: Architecture to Support Agile
Microservices: Architecture to Support AgileMicroservices: Architecture to Support Agile
Microservices: Architecture to Support Agile
 
Microservices: Architecture to scale Agile
Microservices: Architecture to scale AgileMicroservices: Architecture to scale Agile
Microservices: Architecture to scale Agile
 
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three BuzzwordsMicroservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
 

Recently uploaded

Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 

Recently uploaded (20)

Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 

Legacy Sins

  • 2. Eberhard Wolff - @ewolff I’m a Software Architect. But I’m not doing architecture. !
  • 3. Eberhard Wolff - @ewolff How important is Software Architecture?
  • 4. Eberhard Wolff - @ewolff Why would we care about Software Architecture?
  • 5. Eberhard Wolff - @ewolff Software Architecture =Structure
  • 6. Eberhard Wolff - @ewolff Architecture Goals: Quality •  All kinds of quality •  Performance •  Security •  … •  Focus of this presentation: Changeability •  Architects must understand customers & priority
  • 7. Eberhard Wolff - @ewolff Architects must understand customer
  • 8. Eberhard Wolff - @ewolff Software Architecture Set of structures comprise software elements, relations among them, and properties of both.
  • 9. Eberhard Wolff - @ewolff Why? •  Can work on modules in isolation •  Can work on collaboration of modules •  Fits in my head •  Dan North
  • 10. Eberhard Wolff - @ewolff Does He Care?
  • 11. Eberhard Wolff - @ewolff Why? Great Architecture Software Easy to change High productivity Low Cost
  • 12. Eberhard Wolff - @ewolff He Cares €
  • 13. Eberhard Wolff - @ewolff Why? Great Architecture Software Easy to change High productivity Low Cost
  • 14. Eberhard Wolff - @ewolff What He Cares About Great Architecture Software Easy to change High productivity Low Cost
  • 15. Eberhard Wolff - @ewolff Is architecture the only factor for changeability?
  • 16. Eberhard Wolff - @ewolff What is the worst thing we can have in a legacy code?
  • 17. Eberhard Wolff - @ewolff Great architecture or automated tests?
  • 18. 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
  • 19. Eberhard Wolff - @ewolff Let’s add some automated GUI tests
  • 20. Eberhard Wolff - @ewolff Automated GUI Tests •  Easy to implement •  Exactly what testers do manually •  Easy to understand for customers •  Test business processes •  Safety net
  • 21. Eberhard Wolff - @ewolff Unit Tests or automated GUI tests?
  • 22. Eberhard Wolff - @ewolff Many GUI Tests Worse •  Fragile: Changes to GUI break test •  Business meaning of tests easily lost •  Takes long •  Often not reproducible
  • 23. Eberhard Wolff - @ewolff Automated GUI Tests Automated Integration Tests Unit Tests Manual Tests
  • 24. Eberhard Wolff - @ewolff Automated GUI Tests Automated Integration Tests Unit Tests Manual Tests
  • 25. Eberhard Wolff - @ewolff Slow Unreliable Expensive
  • 26. Eberhard Wolff - @ewolff Alternatives to automated GUI tests?
  • 27. Eberhard Wolff - @ewolff Textueller Akzeptanztest
  • 28. Eberhard Wolff - @ewolff Szenario •  Möglicher Ablauf in einer Story •  Standardisierte Bestandteile: •  Gegeben... (Kontext) •  Wenn... (Ereignis) •  Dann... (erwartetes Ergebnis)
  • 29. Eberhard Wolff - @ewolff Szenario: Beispiel Szenario: Kunde registriert sich erfolgreich Gegeben ein neuer Kunde mit EMail eberhard.wolff@gmail.com Vorname Eberhard Name Wolff Wenn der Kunde sich registriert Dann sollte ein Kunde mit der EMail eberhard.wolff@gmail.com existieren Und es sollte kein Fehler gemeldet werden Kontext Ereignis Erwartetes Ergebnis Erwartetes Ergebnis
  • 30. 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); }
  • 31. 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); } }
  • 32. Eberhard Wolff - @ewolff Test is about handling risk
  • 33. 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
  • 34. Eberhard Wolff - @ewolff Example: User Registration •  Unit test Validations Database failure •  Integration test Process •  GUI test Everything displayed?
  • 35. Eberhard Wolff - @ewolff Not Tested •  GUI won’t test validation •  …or algorithms •  …or the process •  Risks handled elsewhere
  • 36. Eberhard Wolff - @ewolff Automated GUI Tests Automated Integration Tests Unit Tests Manual Tests
  • 37. Eberhard Wolff - @ewolff Automated GUI Tests. Automated Integration Tests Unit Tests Manual Tests Test Pyramid
  • 38. Eberhard Wolff - @ewolff Test Pyramid instead of Automated GUI tests
  • 39. Eberhard Wolff - @ewolff Great architecture or fast & easy deployment?
  • 40. 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
  • 41. Eberhard Wolff - @ewolff Leseprobe: http://bit.ly/CD-Buch
  • 42. Eberhard Wolff - @ewolff Continuous Delivery:
 Build Pipeline Commit Stage Automated Acceptance Testing Automated Capacity Testing Manual Explorative Testing Release
  • 43. Eberhard Wolff - @ewolff Continuous Delivery •  Testing •  + automated deployment •  Testing: reduce probability of errors •  Automated deployment: better mean time to repair
  • 44. Eberhard Wolff - @ewolff Continuous Delivery •  Make software easier to change •  & deploy •  Reliable and reproducible tests •  Automated deployed •  Fast & reliable
  • 45. Eberhard Wolff - @ewolff What is a great architecture?
  • 46. Eberhard Wolff - @ewolff GUI Logic Database
  • 47. Eberhard Wolff - @ewolff Is 3 Tier a great architecture?
  • 48. Eberhard Wolff - @ewolff 3 Tier •  Actually layer: no distribution •  By technology •  Layers can be replaced •  Layers can be developed independently
  • 49. Eberhard Wolff - @ewolff Do you replace e.g. the persistence layer?
  • 50. Eberhard Wolff - @ewolff Is it really simple to add e.g. mobile clients?
  • 51. Eberhard Wolff - @ewolff A better reason:
 Fits in my head.
  • 52. Eberhard Wolff - @ewolff Redo the order processing!
  • 53. Eberhard Wolff - @ewolff Add this to the registration!
  • 54. Eberhard Wolff - @ewolff Can we change the persistence technology instead?
  • 55. Eberhard Wolff - @ewolff Please
  • 56. Eberhard Wolff - @ewolff What is a persistence technology??
  • 57. Eberhard Wolff - @ewolff Registration Order Billing GUI Logic
  • 58. 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
  • 59. Eberhard Wolff - @ewolff Is a great architecture free of cyclic dependencies?
  • 60. Eberhard Wolff - @ewolff A B A depends on B Changes to B influence A
  • 61. 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
  • 62. Eberhard Wolff - @ewolff Is a great architecture free of cyclic dependencies?
  • 63. Eberhard Wolff - @ewolff Cyclic dependencies: architects’ mortal sin
  • 64. Eberhard Wolff - @ewolff A B A B 42 2 200
  • 65. Eberhard Wolff - @ewolff Other Architecture Metrics •  High cohesion Elements of a module should belong together •  Low coupling Modules should not depend on each other
  • 66. Eberhard Wolff - @ewolff Great Architecture •  Don’t overrate cyclic dependencies! •  Consider other metrics •  Architecture by domain
  • 67. Eberhard Wolff - @ewolff The worst legacy problems?
  • 68. Eberhard Wolff - @ewolff The project has a lot of cyclic dependencies! I know. …but that doesn’t cause a lot of trouble
  • 69. Eberhard Wolff - @ewolff Architects must understand customer & his quality demands
  • 70. Eberhard Wolff - @ewolff Quality •  Changeability •  Performance •  Security •  …
  • 71. Eberhard Wolff - @ewolff No two projects are alike.
  • 72. Eberhard Wolff - @ewolff No general rules.
  • 73. Eberhard Wolff - @ewolff Sorry!
  • 74. Eberhard Wolff - @ewolff Software Easy to change Automated tests Test pyramid Fast & easy deployment Great Architecture No cyclic dependencies Low coupling High cohesion
  • 75. Eberhard Wolff - @ewolff I’m a Software Architect. But I’m not doing architecture. There is more to changeable software than architecture.
  • 76. Eberhard Wolff - @ewolff Thank You!