SlideShare a Scribd company logo
1 of 24
Download to read offline
qaware.de
Methoden und Tools für eine nachhaltig
saubere Architektur in agilen Projekten
Mario-Leander Reimer
mario-leander.reimer@qaware.de
@LeanderReimer
2
QAware
3
QAware
4
Mario-Leander Reimer
Geschäftsführer | CTO
@LeanderReimer
#cloudnativenerd #qaware
#gernperDude
5
QAware
Features Features
Release
Features
Release
Features
Release
Features
Release
Release
Code wächst
Abhängigkeiten
nehmen zu
Strukturen &
Boundaries
erodieren
Testbarkeit
leidet
Änderungen
werden
aufwändiger
Transitive
Fehler
entstehen
Deadlines
Komplexität
steigt
Was sind die Gründe für eine
Architektur Erosion in agilen Projekten?
ⓘ Start presenting to display the poll results on this slide.
QAware | 7
Decisions
The Last Possible Moment != The Last Responsible Moment
QAware | 8
■ Welche Fragen sind für verantwortungsvolle Entscheidungen relevant?
– Muss ich die Entscheidung jetzt treffen?
– Kann ich es noch aufschieben?
– Was passiert, wenn ich es nicht mache?
– Wann wird die Komplexität zu hoch?
– Welche Alternativen gibt es?
– Was sind die Trade-Offs der Entscheidung?
– Kann die Entscheidung rückgängig gemacht werden?
■ The Last Responsible Moment ist die bessere Wahl!
■ Keine Angst vor suboptimalen Entscheidungen.
■ Iterative Entwicklung, Tests, Refactoring, Continuous Integration und Architecture Fitness Functions
helfen das Risiko beherrschbar zu machen
QAware | 9
https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
Architecture Decision Records (ADR)
QAware | 10
https://www.thoughtworks.com/radar/techniques/lightweight-architecture-decision-records
The Anatomy of an Architecture Decision Records (ADR)
QAware | 11
# Title
## Context
## Decision
## Status
## Consequences
■ Short text file; 1-2 pages long, one file per decision
■ Simple format like Markdown, Asciidoc, TXT, etc.
Short noun phrase and number,
e.g. ADR 5: AWS as preferred cloud provider
Proposed, Accepted, Deprecated, Superseded
Describes the forces at play: technology, political,
project local. Value neutral, simple facts.
Response to the forces with justification. Stated in
full sentences, with active voice. "We will …"
Describe context, after applying the decision.
All consequences should be listed here, not just
the "positive" ones.
QAware | 12
Controlling
Nicht nur Maintainability ist wichtig. Clean Architecture ist
Enabler für ganzheitliche Qualität!
QAware | 13
Software Product
Quality
(ISO 25010)
● Modularity
● Reusability
● Analysability
● Modifiability
● Testability
Maintainability
● Confidentiality
● Integrity
● Non-repudiation
● Authenticity
● Accountability
Security
● Adaptability
● Installability
● Replaceability
● Evolvability
Portability
● Co-existence
● Interoperability
Compatibility
● Maturity
● Availability
● Fault Tolerance
● Recoverability
Reliability
● Time Behaviour
● Resource Utilization
● Capacity
Efficiency
● Completeness
● Correctness
● Appropriateness
Functional Suitability
● Operability
● Learnability
● UI Aesthetics
● Accessibility
Usability
Die Clean Architecture Konzepte müssen auf allen Ebenen
einer Software-Architektur angewendet werden.
QAware | 14
Architecture Fitness Functions validieren die geforderten
(nicht)-funktionalen System-Eigenschaften kontinuierlich.
QAware | 15
https://www.thoughtworks.com/de/radar/techniques/architectural-fitness-function
Fitness-function Driven Development
QAware | 16
■ Architektur ist wie ein Produkt mit User Journeys
■ Anforderungen werden von den Stakeholdern eingesammelt
– Business
– Compliance
– Operations
– Security
– Infrastructure
■ Das sind häufig unsere „-illities“ und Qualitätsmerkmale
■ Die Akzeptanz-Kriterien werden mit einem BDD Test
Framework formuliert.
■ Tests werden als Teil der CI/CD Pipeline ausgeführt, und
anschließend verifiziert
https://www.thoughtworks.com/de/insights/articles/fitness-function-driven-development
Beispiele für Architectural Fitness Functions
QAware | 17
describe "Performance" do
it "completes a transaction in under 2 seconds" do
expect(k6.check_transaction_round_trip_time()).to < 2
end
it "has less than 10% error rate for 10000 transactions" do
expect(k6.check_error_rate_for_transactions(10000)).to < .1
end
end
describe "Security" do
describe “Static Analysis” do
it "should not have plaintext secrets in codebase" do
expect(code.has_secrets_in_codebase()).to_not be(true)
end
end
describe “Dynamic Analysis” do
it "should not have any of the OWASP Top 10" do
expect(zap.has_owasp_top_10_vulnerabilities()).to be(false)
end
end
end
QAware | 18
Automation
Menschen machen Fehler. Von der Clean Architecture zum Big
Ball of Mud geht’s schneller als man glaubt!
QAware | 19
ArchUnit ermöglicht die einfache automatisierte Prüfung
einer Software-Architektur in Form von Unit Tests.
■ https://www.archunit.org/
■ Freie (Apache v2), einfache und erweiterbare Bibliothek zur Prüfung der Architektur von Java
Code. Gibt es auch für .NET/C#.
■ Alle gängigen Build Tools und Unit Test Frameworks werden unterstützt
■ Das ArchUnit Library API bietet eine Sammlung an vordefinierten Regeln für wiederkehrende
Architektur-Prüfungen
– Architectures: Regeln zur Überprüfung von Layered und Onion Architectures
– Slices: Erkennung von “Cycles” auf unterschiedlichen Ebenen
– General: Sammlung von Regeln für Good Coding Practices (z.B: Logging, Exceptions, …)
– PlantUML: Regeln zum Abgleich der Codebase mit einem PlantUML Modell
– Freezing Arch Rules: Erlaubt die Definition einer Baseline für Violations, besonders nützlich um
Technische Schulden in Altprojekten zu managen
QAware | 20
Nur wenige Zeilen Code validieren unsere Clean Architecture
kontinuierlich und wiederholbar bei jedem Build.
QAware | 21
@AnalyzeClasses(packages = {"de.qaware.archunit.example.onion"})
public class OnionArchitectureFitnessTest {
@ArchTest
static final ArchRule onion_architecture_is_respected = onionArchitecture()
.domainModels("..domain.model..")
.domainServices("..domain.service..")
.applicationServices("..application..")
.adapter("cli", "..adapter.cli..")
.adapter("persistence", "..adapter.persistence..")
.adapter("rest", "..adapter.rest..");
}
Beyond Clean Architecture.
Persönliche Leseliste für eine nachhaltig saubere Architektur.
22
QAware
Jfokus 2023
Quality in a Square.
K8s-native Quality Assurance of
Microservices with Testkube
Stockholm | 6.2.2022
OOP 2023
Your APIs on Steroids:
Retrofitting GraphQL by Code,
Cloud-native or Serverless.
Online | 6.2.2022 | 11.00
JavaLand 2023
Talks, Schulung & Aussteller in
der Expo
Brühl | 21.-23.3.2023
Meetup | Cloud Native Night
Couchbase @ CNN
München | 2.2.
Meetup | Shevelopers 3/23
SAVE THE DATE!
München | 29.3.2023
Upcoming Events
Messen &
Konferenzen
Cloud Native
Night Meetups
Weitere
Meetups
Details noch nicht
bekannt
Meetup | Cloud Native Night
Terraform is not enough!
#pluginFramework #k8s
#operator
München | 30.3.
Meetup | Codineers Rosenheim
Themenabend: Moderne APIs
Rosenheim | 9.3.
Meetup | Clean Infrastructure
as Code (IaC)
IaC without tests is like a broken
window…
Online | 2.2.2023
qaware.de
QAware GmbH
Aschauer Straße 32
81549 München
Tel. +49 89 232315-0
info@qaware.de
twitter.com/qaware
linkedin.com/company/qaware-gmbh
xing.com/companies/qawaregmbh
slideshare.net/qaware
github.com/qaware
Meine Kontaktdaten ...

More Related Content

What's hot

What's hot (20)

Performance Engineering Masterclass: Efficient Automation with the Help of SR...
Performance Engineering Masterclass: Efficient Automation with the Help of SR...Performance Engineering Masterclass: Efficient Automation with the Help of SR...
Performance Engineering Masterclass: Efficient Automation with the Help of SR...
 
Resilience testing! Why should you
Resilience testing! Why should youResilience testing! Why should you
Resilience testing! Why should you
 
REST in Peace. Long live gRPC!
REST in Peace. Long live gRPC!REST in Peace. Long live gRPC!
REST in Peace. Long live gRPC!
 
Scaling DevSecOps Culture for Enterprise
Scaling DevSecOps Culture for EnterpriseScaling DevSecOps Culture for Enterprise
Scaling DevSecOps Culture for Enterprise
 
Continuous Inspection of Code Quality: SonarQube
Continuous Inspection of Code Quality: SonarQubeContinuous Inspection of Code Quality: SonarQube
Continuous Inspection of Code Quality: SonarQube
 
Platform engineering
Platform engineeringPlatform engineering
Platform engineering
 
Introduction of kubernetes rancher
Introduction of kubernetes rancherIntroduction of kubernetes rancher
Introduction of kubernetes rancher
 
Infrastructure as Code (IaC)
Infrastructure as Code (IaC)Infrastructure as Code (IaC)
Infrastructure as Code (IaC)
 
Kubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanKubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with Podman
 
CQRS in 4 steps
CQRS in 4 stepsCQRS in 4 steps
CQRS in 4 steps
 
Chaos Engineering for Docker
Chaos Engineering for DockerChaos Engineering for Docker
Chaos Engineering for Docker
 
Devops Maturity Assessment Model - Ágiles 2019
Devops Maturity Assessment Model - Ágiles 2019Devops Maturity Assessment Model - Ágiles 2019
Devops Maturity Assessment Model - Ágiles 2019
 
SRE-iously! Reliability!
SRE-iously! Reliability!SRE-iously! Reliability!
SRE-iously! Reliability!
 
Quarkus k8s
Quarkus   k8sQuarkus   k8s
Quarkus k8s
 
Platform Engineering - a 360 degree view
Platform Engineering - a 360 degree viewPlatform Engineering - a 360 degree view
Platform Engineering - a 360 degree view
 
Clean Infrastructure as Code
Clean Infrastructure as Code Clean Infrastructure as Code
Clean Infrastructure as Code
 
Docker multi-stage build
Docker multi-stage buildDocker multi-stage build
Docker multi-stage build
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
Multitenancy on EKS
Multitenancy on EKSMultitenancy on EKS
Multitenancy on EKS
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 

Similar to ROSIK Stammtisch „Clean Architecture“

2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
FotiosKaramitsos
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
Christian Baranowski
 
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteAgil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
QAware GmbH
 
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
Aberla
 

Similar to ROSIK Stammtisch „Clean Architecture“ (20)

Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8sKontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
Wir erledigen alles sofort - Warum Qualität, Risikomanagement, Usability und...
Wir erledigen alles sofort - Warum Qualität, Risikomanagement, Usability und...Wir erledigen alles sofort - Warum Qualität, Risikomanagement, Usability und...
Wir erledigen alles sofort - Warum Qualität, Risikomanagement, Usability und...
 
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
 
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
 
Xidra 2016 DevOps
Xidra 2016 DevOpsXidra 2016 DevOps
Xidra 2016 DevOps
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes
 
Continous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnContinous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickeln
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
ASQF Dresden: Benötigen wir mit SCRUM noch einen Testmanager?
ASQF Dresden: Benötigen wir mit SCRUM noch einen Testmanager?ASQF Dresden: Benötigen wir mit SCRUM noch einen Testmanager?
ASQF Dresden: Benötigen wir mit SCRUM noch einen Testmanager?
 
Architektur und Automation als Enabler für DevOps
Architektur und Automation als Enabler für DevOpsArchitektur und Automation als Enabler für DevOps
Architektur und Automation als Enabler für DevOps
 
Whitepaper QF-Test: GUI Testautomatisierung macht Spaß
Whitepaper QF-Test: GUI Testautomatisierung macht SpaßWhitepaper QF-Test: GUI Testautomatisierung macht Spaß
Whitepaper QF-Test: GUI Testautomatisierung macht Spaß
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteAgil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
 
Agiles Testen - Überblick
Agiles Testen - ÜberblickAgiles Testen - Überblick
Agiles Testen - Überblick
 
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteAgil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
 
Roadshow 2018 - Camunda in der Praxis: So geht's
Roadshow 2018 - Camunda in der Praxis: So geht'sRoadshow 2018 - Camunda in der Praxis: So geht's
Roadshow 2018 - Camunda in der Praxis: So geht's
 
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
 
Best Practices für Last- und Performancetests von Enterprise Applikationen au...
Best Practices für Last- und Performancetests von Enterprise Applikationen au...Best Practices für Last- und Performancetests von Enterprise Applikationen au...
Best Practices für Last- und Performancetests von Enterprise Applikationen au...
 
Softwarequalität - Architektur
Softwarequalität - ArchitekturSoftwarequalität - Architektur
Softwarequalität - Architektur
 

More from QAware GmbH

"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
QAware GmbH
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
QAware GmbH
 

More from QAware GmbH (20)

50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
 
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN MainzFully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
 
Down the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile ArchitectureDown the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile Architecture
 
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
 
Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
 
Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAPKontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
 
Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.
 
Per Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API GatewaysPer Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API Gateways
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 
How to speed up Spring Integration Tests
How to speed up Spring Integration TestsHow to speed up Spring Integration Tests
How to speed up Spring Integration Tests
 

ROSIK Stammtisch „Clean Architecture“

  • 1. qaware.de Methoden und Tools für eine nachhaltig saubere Architektur in agilen Projekten Mario-Leander Reimer mario-leander.reimer@qaware.de @LeanderReimer
  • 4. 4 Mario-Leander Reimer Geschäftsführer | CTO @LeanderReimer #cloudnativenerd #qaware #gernperDude
  • 5. 5 QAware Features Features Release Features Release Features Release Features Release Release Code wächst Abhängigkeiten nehmen zu Strukturen & Boundaries erodieren Testbarkeit leidet Änderungen werden aufwändiger Transitive Fehler entstehen Deadlines Komplexität steigt
  • 6. Was sind die Gründe für eine Architektur Erosion in agilen Projekten? ⓘ Start presenting to display the poll results on this slide.
  • 8. The Last Possible Moment != The Last Responsible Moment QAware | 8 ■ Welche Fragen sind für verantwortungsvolle Entscheidungen relevant? – Muss ich die Entscheidung jetzt treffen? – Kann ich es noch aufschieben? – Was passiert, wenn ich es nicht mache? – Wann wird die Komplexität zu hoch? – Welche Alternativen gibt es? – Was sind die Trade-Offs der Entscheidung? – Kann die Entscheidung rückgängig gemacht werden? ■ The Last Responsible Moment ist die bessere Wahl! ■ Keine Angst vor suboptimalen Entscheidungen. ■ Iterative Entwicklung, Tests, Refactoring, Continuous Integration und Architecture Fitness Functions helfen das Risiko beherrschbar zu machen
  • 10. Architecture Decision Records (ADR) QAware | 10 https://www.thoughtworks.com/radar/techniques/lightweight-architecture-decision-records
  • 11. The Anatomy of an Architecture Decision Records (ADR) QAware | 11 # Title ## Context ## Decision ## Status ## Consequences ■ Short text file; 1-2 pages long, one file per decision ■ Simple format like Markdown, Asciidoc, TXT, etc. Short noun phrase and number, e.g. ADR 5: AWS as preferred cloud provider Proposed, Accepted, Deprecated, Superseded Describes the forces at play: technology, political, project local. Value neutral, simple facts. Response to the forces with justification. Stated in full sentences, with active voice. "We will …" Describe context, after applying the decision. All consequences should be listed here, not just the "positive" ones.
  • 13. Nicht nur Maintainability ist wichtig. Clean Architecture ist Enabler für ganzheitliche Qualität! QAware | 13 Software Product Quality (ISO 25010) ● Modularity ● Reusability ● Analysability ● Modifiability ● Testability Maintainability ● Confidentiality ● Integrity ● Non-repudiation ● Authenticity ● Accountability Security ● Adaptability ● Installability ● Replaceability ● Evolvability Portability ● Co-existence ● Interoperability Compatibility ● Maturity ● Availability ● Fault Tolerance ● Recoverability Reliability ● Time Behaviour ● Resource Utilization ● Capacity Efficiency ● Completeness ● Correctness ● Appropriateness Functional Suitability ● Operability ● Learnability ● UI Aesthetics ● Accessibility Usability
  • 14. Die Clean Architecture Konzepte müssen auf allen Ebenen einer Software-Architektur angewendet werden. QAware | 14
  • 15. Architecture Fitness Functions validieren die geforderten (nicht)-funktionalen System-Eigenschaften kontinuierlich. QAware | 15 https://www.thoughtworks.com/de/radar/techniques/architectural-fitness-function
  • 16. Fitness-function Driven Development QAware | 16 ■ Architektur ist wie ein Produkt mit User Journeys ■ Anforderungen werden von den Stakeholdern eingesammelt – Business – Compliance – Operations – Security – Infrastructure ■ Das sind häufig unsere „-illities“ und Qualitätsmerkmale ■ Die Akzeptanz-Kriterien werden mit einem BDD Test Framework formuliert. ■ Tests werden als Teil der CI/CD Pipeline ausgeführt, und anschließend verifiziert https://www.thoughtworks.com/de/insights/articles/fitness-function-driven-development
  • 17. Beispiele für Architectural Fitness Functions QAware | 17 describe "Performance" do it "completes a transaction in under 2 seconds" do expect(k6.check_transaction_round_trip_time()).to < 2 end it "has less than 10% error rate for 10000 transactions" do expect(k6.check_error_rate_for_transactions(10000)).to < .1 end end describe "Security" do describe “Static Analysis” do it "should not have plaintext secrets in codebase" do expect(code.has_secrets_in_codebase()).to_not be(true) end end describe “Dynamic Analysis” do it "should not have any of the OWASP Top 10" do expect(zap.has_owasp_top_10_vulnerabilities()).to be(false) end end end
  • 19. Menschen machen Fehler. Von der Clean Architecture zum Big Ball of Mud geht’s schneller als man glaubt! QAware | 19
  • 20. ArchUnit ermöglicht die einfache automatisierte Prüfung einer Software-Architektur in Form von Unit Tests. ■ https://www.archunit.org/ ■ Freie (Apache v2), einfache und erweiterbare Bibliothek zur Prüfung der Architektur von Java Code. Gibt es auch für .NET/C#. ■ Alle gängigen Build Tools und Unit Test Frameworks werden unterstützt ■ Das ArchUnit Library API bietet eine Sammlung an vordefinierten Regeln für wiederkehrende Architektur-Prüfungen – Architectures: Regeln zur Überprüfung von Layered und Onion Architectures – Slices: Erkennung von “Cycles” auf unterschiedlichen Ebenen – General: Sammlung von Regeln für Good Coding Practices (z.B: Logging, Exceptions, …) – PlantUML: Regeln zum Abgleich der Codebase mit einem PlantUML Modell – Freezing Arch Rules: Erlaubt die Definition einer Baseline für Violations, besonders nützlich um Technische Schulden in Altprojekten zu managen QAware | 20
  • 21. Nur wenige Zeilen Code validieren unsere Clean Architecture kontinuierlich und wiederholbar bei jedem Build. QAware | 21 @AnalyzeClasses(packages = {"de.qaware.archunit.example.onion"}) public class OnionArchitectureFitnessTest { @ArchTest static final ArchRule onion_architecture_is_respected = onionArchitecture() .domainModels("..domain.model..") .domainServices("..domain.service..") .applicationServices("..application..") .adapter("cli", "..adapter.cli..") .adapter("persistence", "..adapter.persistence..") .adapter("rest", "..adapter.rest.."); }
  • 22. Beyond Clean Architecture. Persönliche Leseliste für eine nachhaltig saubere Architektur. 22 QAware
  • 23. Jfokus 2023 Quality in a Square. K8s-native Quality Assurance of Microservices with Testkube Stockholm | 6.2.2022 OOP 2023 Your APIs on Steroids: Retrofitting GraphQL by Code, Cloud-native or Serverless. Online | 6.2.2022 | 11.00 JavaLand 2023 Talks, Schulung & Aussteller in der Expo Brühl | 21.-23.3.2023 Meetup | Cloud Native Night Couchbase @ CNN München | 2.2. Meetup | Shevelopers 3/23 SAVE THE DATE! München | 29.3.2023 Upcoming Events Messen & Konferenzen Cloud Native Night Meetups Weitere Meetups Details noch nicht bekannt Meetup | Cloud Native Night Terraform is not enough! #pluginFramework #k8s #operator München | 30.3. Meetup | Codineers Rosenheim Themenabend: Moderne APIs Rosenheim | 9.3. Meetup | Clean Infrastructure as Code (IaC) IaC without tests is like a broken window… Online | 2.2.2023
  • 24. qaware.de QAware GmbH Aschauer Straße 32 81549 München Tel. +49 89 232315-0 info@qaware.de twitter.com/qaware linkedin.com/company/qaware-gmbh xing.com/companies/qawaregmbh slideshare.net/qaware github.com/qaware Meine Kontaktdaten ...