SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Hendrik Lösch
Hendrik.Loesch@saxsys.de
just-about.net
@HerrLoesch
Qualität.
Aber bitte agil!!!
Speichern

Benutzersicht

Gespeichert
Speichern

Benutzersicht

Anbindung UI

Architektursicht

Anbindung
Datenbank

Fehlerbehandlung
Validator

Datenvalidierung

Benutzersicht

Button

Entwicklersicht

Fehlerbehandlung

Fehlerausschrift

Datenbankanbindung

Speichern

Validierungsregeln

Speichervorgang

Zurücksetzen
bei Fehler
Systemtests
Unit-Tests
Validator

Datenvalidierung

Benutzersicht

Button

Entwicklersicht

Fehlerbehandlung

Fehlerausschrift

Datenbankanbindung

Speichern

Validierungsregeln

Speichervorgang

Zurücksetzen
bei Fehler

DS

DB

Extern
„Nichts ist so beständig wie die Veränderung.“
Bob Dylan
„Wer als einziges Werkzeug einen Hammer hat,
sieht in jedem Problem einen Nagel.“
Paul Watzlawick
Manuelle
Tests

Systemtests

Integrationstests

UnitTests
Vertrauen

Feedback

Aufwand
Tue nur Dinge
die einen
Mehrwert
bedeuten!
Tue nur Dinge
die einen
Mehrwert ???
bedeuten.
Tue nur Dinge
die einen
Feedback !!!
bedeuten.
Implementierung

Test

Refaktorisierung
Die Regeln
•
•
•
•

Schreibe nur Code, der verlangt wird.
Entwickle schrittweise Deinen Code.
Wähle möglichst kleine Schritte.
Je allgemeingültiger der Code desto spezifischer der
Test.
Implementierung

Test

Refaktorisierung
System-Tests
Unit-Tests
Validator

Datenvalidierung

Benutzersicht

Button

Entwicklersicht

Fehlerbehandlung

Fehlerausschrift

Datenbankanbindung

Speichern

Validierungsregeln

Speichervorgang

Zurücksetzen
bei Fehler

DS

DB

Extern
Validator

Datenvalidierung

Entwicklersicht

Fehlerbehandlung

Fehlerausschrift

Datenbankanbindung

Button

Validierungsregeln

Speichervorgang

Zurücksetzen
bei Fehler
Qualität ist wichtiger als Quantität
Hump of Pain
“New teams are often expected to adopt practices such as TDD
and refactoring, which are difficult to learn. Without good
coaching, plenty of time to master new skills, and string
management support, they're easily discouraged.”

Quelle: Agile Testing: A Practical Guide for Testers and Agile Teams
Pragmatisch
Eher Test First als Test Driven
Eher Komponententests als Unit-Tests
Eher interaktionsbasierend als
statusbasierend

public void Push(int value)
{
Count++;
content[Count] = value;
}

Klassisch
Eher Test Driven als Test First
Eher Unit-Tests als Komponententests
Eher statusbasierend als
interaktionsbasierend

public void Push(int value)
public void Push(int value)
{{
public void Push(int value)
{ Count++;= value;
content
}
} content[Count] = value;
}
Systemtest

Integrationstest

Unit-Test

Quelle: Succeeding with Agile, Mike Cohn
Implementierung

Systemtest

Test

Refaktorisierung
System-Tests
Unit-Tests
Validator

Datenvalidierung

Benutzersicht

Button

Entwicklersicht

Fehlerbehandlung

Fehlerausschrift

Datenbankanbindung

Speichern

Validierungsregeln

Speichervorgang

Zurücksetzen
bei Fehler

DS

DB

Extern
System-Test

Speichern

DB

Benutzersicht

Extern
System-Test

Unit-Tests

Speichern

Button

Datenbankanbindung

Speichervorgang

DB

Zurücksetzen
bei Fehler

Benutzersicht

Entwicklersicht

Extern
Problem
verstehen

Grobdesign
(„Architektur“)

Automatisierung
•
Build
•
Deployment
•
End-To-End
Tests

Produktinkrement

Produkt
Release
Inside-Out TDD
Implementierung geschieht vor allem im BL.
Anbindung externer Ressourcen nachträglich
über System Tests.

Outside-In TDD
Interaktoren kommunizieren über
Schnittstellen.
Schnittstellen werden gemockt.
Architektur wird über Spikes getrieben.

UI

UI

BL

BL

DA

DA
Inside-Out TDD

Outside-In TDD

Mehr statusbasierende Tests.
Vor allem in „weniger“ agilen Teams zu finden.

Mehr interaktionsbasierende Tests.
Zwingt zu featurebasierender
Implementierung.
Mach global Code Ownership notwendig.

UI

UI

BL

BL

DA

DA
Gherkin
Funktionalität: Nächster Arbeitsschritt nach der Bilderauswahl
Damit die ausgewählten Bilder weiter verarbeitet werden können
soll der nächste Arbeitsschritt in der Bilderauswahl immer
erreichbar sein.
Szenario: Nächster Arbeitsschritt aus der Bilderauswahl verfügbar
Angenommen die Bilderauswahl ist geöffnet
Wenn ein Bild ausgewählt wird
Dann soll man zum nächsten Arbeitsschritt navigieren können
Gherkin
Funktionalität: Nächster Arbeitsschritt nach der Bilderauswahl
Damit die ausgewählten Bilder weiter verarbeitet werden können
soll der nächste Arbeitsschritt in der Bilderauswahl immer
erreichbar sein.
Szenario: Nächster Arbeitsschritt aus der Bilderauswahl verfügbar
Angenommen die Bilderauswahl ist geöffnet
Wenn ein Bild ausgewählt wird
Dann soll man zum nächsten Arbeitsschritt navigieren können
Szenario: Navigieren nicht möglich wenn kein Bild ausgewählt ist
Angenommen die Bilderauswahl ist geöffnet
Wenn kein Bild ausgewählt wird
Dann soll man nicht zum nächsten Arbeitsschritt navigieren können
Happy Path!!!
Quelle: Growing Object oriented Software guided by Tests
Vertrauen

Feedback
Aufwand
Hendrik Lösch
Hendrik.Loesch@saxsys.de
just-about.net
@HerrLoesch
Transformation Priority Premise
({} → nil)
(nil → constant)
(constant → constant+)
(constant → scalar)
(statement → statements)
(unconditional → if)
(scalar → array)
(array → container)
(statement → recursion)
(if → while)
(expression → function)
(variable → assignment)

→ Keinen Code in Code umwandeln, der nichts implementiert.
→ Einführen einer Konstanten.
→ Einfache Konstante in komplexere Konstante überführen.
→ Konstante durch Variable oder Argument ersetzen.
→ Anweisung durch zusätzliche Anweisungen erweitern.
→ Bedingungslose Codepfade in bedingte Codepfade ändern.
→ Zahlenwert in Array wandeln.
→ Array in eine Liste oder komplexeren Container überführen.
→ Anweisung rekursiv umsetzen.
→ Fallunterscheidungen in Schleifen ändern.
→ Ausdruck durch Funktion ersetzen.
→ Variablen mit Zuweisungen erweitern.
Fast
Isolated
Independent
Repeatable
Self-Verifying
Timely
“

The SOLID principles are not rules. They are not laws. They are not
perfect truths. They are statements on the order of “An apple a day
keeps the doctor away.”

”

Quelle: https://sites.google.com/site/unclebobconsultingllc/getting-a-solid-start

Robert C. Martin
(Uncle Bob)
S
O
L
I
D

ingle Responsibility Principle
pen Closed Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
S
O
L
I
D

ingle Responsibility Principle
pen Closed Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle

Quelle: http://www.clean-code-developer.de/

Eine Klasse sollte nur eine
Verantwortlichkeit haben.
S
O
L
I
D

ingle Responsibility Principle
pen Closed Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle

Quelle: http://www.clean-code-developer.de/

Eine Klasse sollte offen für Erweiterungen,
jedoch geschlossen für Modifikationen sein.
S
O
L
I
D

ingle Responsibility Principle
pen Closed Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle

Quelle: http://www.clean-code-developer.de/

Abgeleitete Klassen sollten sich so verhalten
wie es von ihren Basistypen erwartet wird.
S
O
L
I
D

ingle Responsibility Principle
pen Closed Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle

Quelle: http://www.clean-code-developer.de/

Interfaces sollten nur die Funktionalität
wiederspiegeln die ihre Klienten erwarten.
S
O
L
I
D

ingle Responsibility Principle
pen Closed Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle

Quelle: http://www.clean-code-developer.de/

High-Level Klassen sollen nicht von Low-Level
Klassen abhängig sein, sondern beide von
Interfaces.
Interfaces sollen nicht von Details abhängig
sein, sondern Details von Interfaces.

Weitere ähnliche Inhalte

Andere mochten auch

Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit  Ideen zur Unterstützung der Textanalyse mit i deskModul 4 mit  Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i desk
Ingo15
 
Seiem val.
Seiem val. Seiem val.
Seiem val.
bagul161
 
PROTECTOR DE PANTALLA
PROTECTOR DE PANTALLAPROTECTOR DE PANTALLA
PROTECTOR DE PANTALLA
JULIETA-0404
 
Online-moderierte, crossmediale Beteiligungsverfahren
Online-moderierte, crossmediale BeteiligungsverfahrenOnline-moderierte, crossmediale Beteiligungsverfahren
Online-moderierte, crossmediale Beteiligungsverfahren
Zebralog
 
Kürzere Testvorbereitungsphasen durch integrierte Testlabore
Kürzere Testvorbereitungsphasen durch integrierte TestlaboreKürzere Testvorbereitungsphasen durch integrierte Testlabore
Kürzere Testvorbereitungsphasen durch integrierte Testlabore
Nico Orschel
 

Andere mochten auch (20)

Was bedeutet "Neues Lernen" für die Supervision?
Was bedeutet "Neues Lernen" für die Supervision?Was bedeutet "Neues Lernen" für die Supervision?
Was bedeutet "Neues Lernen" für die Supervision?
 
Vortrag "Energiewende - Aktuelle Entwicklungen und Auswirkungen auf die chemi...
Vortrag "Energiewende - Aktuelle Entwicklungen und Auswirkungen auf die chemi...Vortrag "Energiewende - Aktuelle Entwicklungen und Auswirkungen auf die chemi...
Vortrag "Energiewende - Aktuelle Entwicklungen und Auswirkungen auf die chemi...
 
Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit  Ideen zur Unterstützung der Textanalyse mit i deskModul 4 mit  Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i desk
 
mEiMu-LAB - Hass - Pascal
mEiMu-LAB - Hass - PascalmEiMu-LAB - Hass - Pascal
mEiMu-LAB - Hass - Pascal
 
Muro de berlim
Muro de berlimMuro de berlim
Muro de berlim
 
Seiem val.
Seiem val. Seiem val.
Seiem val.
 
Tips & tricks voor intranet vs 140725
Tips & tricks voor intranet vs 140725Tips & tricks voor intranet vs 140725
Tips & tricks voor intranet vs 140725
 
Menschenhandel
Menschenhandel Menschenhandel
Menschenhandel
 
PROTECTOR DE PANTALLA
PROTECTOR DE PANTALLAPROTECTOR DE PANTALLA
PROTECTOR DE PANTALLA
 
Online-moderierte, crossmediale Beteiligungsverfahren
Online-moderierte, crossmediale BeteiligungsverfahrenOnline-moderierte, crossmediale Beteiligungsverfahren
Online-moderierte, crossmediale Beteiligungsverfahren
 
Desigugo31
Desigugo31Desigugo31
Desigugo31
 
ActiveBrain PowerDrink
ActiveBrain PowerDrinkActiveBrain PowerDrink
ActiveBrain PowerDrink
 
Pptdesigual20
Pptdesigual20Pptdesigual20
Pptdesigual20
 
Potenzialbeurteilung: Alles nur Spitzenleute, und jetzt?
Potenzialbeurteilung: Alles nur Spitzenleute, und jetzt?Potenzialbeurteilung: Alles nur Spitzenleute, und jetzt?
Potenzialbeurteilung: Alles nur Spitzenleute, und jetzt?
 
Ringvorlesung zu "Open Participation" an der Universität Bonn
Ringvorlesung zu "Open Participation" an der Universität BonnRingvorlesung zu "Open Participation" an der Universität Bonn
Ringvorlesung zu "Open Participation" an der Universität Bonn
 
Wie evaluiert man einen Bürgerhaushalt?
Wie evaluiert man einen Bürgerhaushalt?Wie evaluiert man einen Bürgerhaushalt?
Wie evaluiert man einen Bürgerhaushalt?
 
Fort Bragg Off Limits List
Fort Bragg Off Limits ListFort Bragg Off Limits List
Fort Bragg Off Limits List
 
Hoe Hot is jouw Event?
Hoe Hot is jouw Event?Hoe Hot is jouw Event?
Hoe Hot is jouw Event?
 
Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013
 
Kürzere Testvorbereitungsphasen durch integrierte Testlabore
Kürzere Testvorbereitungsphasen durch integrierte TestlaboreKürzere Testvorbereitungsphasen durch integrierte Testlabore
Kürzere Testvorbereitungsphasen durch integrierte Testlabore
 

Ähnlich wie Qualität, aber bitte agil.

Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11
Stephan Hochdörfer
 
iOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsiOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click Deployments
Sven Günther
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
inovex GmbH
 
Das funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPagesDas funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPages
Christian Güdemann
 

Ähnlich wie Qualität, aber bitte agil. (20)

Codeception VisualCeption
Codeception VisualCeptionCodeception VisualCeption
Codeception VisualCeption
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
 
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
 
Lose gekoppelt wie nie: DI vs. IoC
Lose gekoppelt wie nie: DI vs. IoCLose gekoppelt wie nie: DI vs. IoC
Lose gekoppelt wie nie: DI vs. IoC
 
JavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerJavaScript und trotzdem Softwerker
JavaScript und trotzdem Softwerker
 
PHP mit Paul Bocuse
PHP mit Paul BocusePHP mit Paul Bocuse
PHP mit Paul Bocuse
 
Crowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performanceCrowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performance
 
Mit agilen Praktiken SOLIDe Systeme bauen
Mit agilen Praktiken SOLIDe Systeme bauenMit agilen Praktiken SOLIDe Systeme bauen
Mit agilen Praktiken SOLIDe Systeme bauen
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisieren
 
DevDay 2016: Hendrik Lösch - Lose gekoppelt wie nie: DI vs. IoC
DevDay 2016: Hendrik Lösch - Lose gekoppelt wie nie: DI vs. IoCDevDay 2016: Hendrik Lösch - Lose gekoppelt wie nie: DI vs. IoC
DevDay 2016: Hendrik Lösch - Lose gekoppelt wie nie: DI vs. IoC
 
Hightway to Hell - Responsive Webdesign Testen
Hightway to Hell - Responsive Webdesign TestenHightway to Hell - Responsive Webdesign Testen
Hightway to Hell - Responsive Webdesign Testen
 
Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11
 
RoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaRoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für China
 
iOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsiOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click Deployments
 
2012-01-31 NoSQL in .NET
2012-01-31 NoSQL in .NET2012-01-31 NoSQL in .NET
2012-01-31 NoSQL in .NET
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
 
iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag
iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltagiks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag
iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag
 
Das funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPagesDas funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPages
 

Qualität, aber bitte agil.