SlideShare a Scribd company logo
1 of 76
Download to read offline
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 CloudDustin Ruehle
 
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 DeliveryEberhard Wolff
 
Spring Boot
Spring BootSpring Boot
Spring Bootgedoplan
 
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 HopeEberhard 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 CloudEberhard 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 explainedJeroen 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 applicationsSunil 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 DeploymentsMatthew 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 VersionEberhard Wolff
 
Testing Alfresco extensions
Testing Alfresco extensionsTesting Alfresco extensions
Testing Alfresco extensionsITD 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: DOES15Ed 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 streamsFrank 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 JavaEberhard Wolff
 
More Productivitiy with Spring Roo
More Productivitiy with Spring RooMore Productivitiy with Spring Roo
More Productivitiy with Spring RooEberhard Wolff
 
Redis - The Universal NoSQL Tool
Redis - The Universal NoSQL ToolRedis - The Universal NoSQL Tool
Redis - The Universal NoSQL ToolEberhard Wolff
 
Operations and Monitoring with Spring
Operations and Monitoring with SpringOperations and Monitoring with Spring
Operations and Monitoring with SpringEberhard Wolff
 
Architectures For The Cloud
Architectures For The CloudArchitectures For The Cloud
Architectures For The CloudEberhard 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 EnterpriseEberhard 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 cloudVMware Tanzu
 
Continuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneContinuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneciberkleid
 
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 ControlMilind Waikul
 
Modern devOps with Docker
Modern devOps with DockerModern devOps with Docker
Modern devOps with DockerAvi Cavale
 
Pragmatic Continuous Delivery - ReaktorDevDay 2012
Pragmatic Continuous Delivery - ReaktorDevDay 2012Pragmatic Continuous Delivery - ReaktorDevDay 2012
Pragmatic Continuous Delivery - ReaktorDevDay 2012Neeme 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.pptxJosh 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.pptxTuynNguyn819213
 
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.5Ido Flatow
 
Hacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitHacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitChad Udell
 
Hacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitHacking Robots for Fun and Profit
Hacking Robots for Fun and ProfitChad 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
 
Continuous Delivery and Feature Flagging
Continuous Delivery and Feature FlaggingContinuous Delivery and Feature Flagging
Continuous Delivery and Feature FlaggingLaunchDarkly
 
Leandro Melendez - Switching Performance Left & Right
Leandro Melendez - Switching Performance Left & RightLeandro Melendez - Switching Performance Left & Right
Leandro Melendez - Switching Performance Left & RightNeotys_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 DeliveryXebiaLabs
 
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 AlternativesEberhard Wolff
 
The Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryThe Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryEberhard 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, AsyncEberhard Wolff
 
Microservices - not just with Java
Microservices - not just with JavaMicroservices - not just with Java
Microservices - not just with JavaEberhard 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 MicroservicesEberhard 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 MicroservicesEberhard 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 AgileEberhard 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 MicroservicesEberhard Wolff
 
Microservices: Redundancy=Maintainability
Microservices: Redundancy=MaintainabilityMicroservices: Redundancy=Maintainability
Microservices: Redundancy=MaintainabilityEberhard 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 MicroservicesEberhard Wolff
 
Microservices Technology Stack
Microservices Technology StackMicroservices Technology Stack
Microservices Technology StackEberhard Wolff
 
Software Architecture for Innovation
Software Architecture for InnovationSoftware Architecture for Innovation
Software Architecture for InnovationEberhard Wolff
 
Five (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous DeliveryFive (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous DeliveryEberhard Wolff
 
Nanoservices and Microservices with Java
Nanoservices and Microservices with JavaNanoservices and Microservices with Java
Nanoservices and Microservices with JavaEberhard Wolff
 
Microservices: Architecture to Support Agile
Microservices: Architecture to Support AgileMicroservices: Architecture to Support Agile
Microservices: Architecture to Support AgileEberhard Wolff
 
Microservices: Architecture to scale Agile
Microservices: Architecture to scale AgileMicroservices: Architecture to scale Agile
Microservices: Architecture to scale AgileEberhard 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 BuzzwordsEberhard 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

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 

Recently uploaded (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 

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!