SlideShare ist ein Scribd-Unternehmen logo
https://github.com/HerrLoesch/DDC2016
Zeit
Produktivität
Entwicklung
Weiter-
entwicklung
Weiter-
entwicklung
Weiter-
entwicklung
Stabilisierung
Optimierung
Sanierung
Stabilisierung
Stabilisierung
Optimierung
t in Jahren
Speichern Gespeichert
Benutzersicht
Benutzersicht Architektursicht
Speichern Anbindung UI
Anbindung
Persistenz
Geschäftslogik DB
Extern
System-Tests
Benutzersicht Architektursicht
Speichern Anbindung UI
Anbindung
Persistenz
Geschäftslogik DB
Extern
System-Tests
Systemtest
Integrationstest
Unit Test
Benutzersicht Architektursicht
Speichern Anbindung UI
Anbindung
Persistenz
Geschäftslogik DB
Extern
System-Tests
Unit-Tests
Benutzersicht Entwicklersicht
Speichern
Datenvali-
dierung
Fehlerbe-
handlung
Validierungs-
regeln
Speichervor-
gang
Zurücksetzen
bei Fehler
Fehler-
ausschrift
Validator
Unit-Tests
System-Tests
Eventhandler
DB
Datenbank-
anbindung
DS
Extern
Test
Implementierung
Refaktorisierung
DEMO
Systemtest
Integrationstest
Unit Test
Ausführungsgeschwindigkeit
Granularität
Systemtest
Integrationstest
Unit Test
Ausführungsgeschwindigkeit
Granularität
Änderungstoleranz
Abstraktion
UI
Business Layer
Data/Service Layer
O/R Mapper
UI
Business Layer
Data/Service Layer
UI
F
r
a
m
e
w
o
r
k
s
UI
Business Layer
Data/Service Layer
O/R Mapper
Unit tests run fast. If they don't run fast, they aren't unit tests. Other kinds
of tests offen masquerade as unit tests. A test is not a unit test if:
1. It talks to a database.
2. It communicates across a network.
3. It touches the file system.
4. You have to do special things to your environment (such as editing
configuration files) to run it.
Tests that do these things aren't bad. Often they are worth writing, and you
generally will write them in unit test harnesses. However, it is important to
be able to separate them from true unit tests so that you can keep a set of
tests that you can runfast whenever you make changes.
Benutzersicht Entwicklersicht
Speichern
Datenvali-
dierung
Fehlerbe-
handlung
Validierungs-
regeln
Speichervor-
gang
Zurücksetzen
bei Fehler
Fehler-
ausschrift
Validator
Unit-Tests
System-Tests
Eventhandler
DB
Datenbank-
anbindung
DS
Extern
Benutzersicht Entwicklersicht
Speichern
Datenvali-
dierung
Fehlerbe-
handlung
Validierungs-
regeln
Speichervor-
gang
Zurücksetzen
bei Fehler
Fehler-
ausschrift
Validator
Unit-Tests
System-Tests
Eventhandler
DB
Datenbank-
anbindung
DS
Extern
hohe Ergebnisgenauigkeit
Geringe Geschwindigkeit
je Test
Hohe Testanzahl
Geringer (Anfangs)aufwand
Hohe Ausführungsgeschwindigkeit
je Test
Geringe Testanzahl
Hoher (Anfangs)aufwand
Geringe Ergebnisgenauigkeit
Quelle: http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/
A B Xb
UI ViewModel
User-
Manager
Repository
Settings-
Manager
XIViewModel
UI ViewModel
User-
Manager
Repository
Settings-
Manager
Hashing
Logik
Value
Converter
IViewModel
Klassentest
Klassentest
Komponententest
ViewModel Repository
Data
Mapping
Data
Validation
Database
Context
Mapper
Value
Converter
IRepository
ViewModel Repository
Data
Mapping
Data
Validation
Database
Context
Mapper
Value
Converter
IRepository
Klassentest
Klassentest
Komponententest
System
Integrations-
test
Komponententest
Klassentests
Unit-Tests
Systemtest Test
Implementierung
Refaktorisierung
UIUI
BLBL
DADA
UI
BL Testdouble
Testdouble
BL BL
DADA
UI
BL BL
DA DA
DEMO
Problem
verstehen
Grobdesign
(„Architektur
Vision“)
Automatisierung
• Build
• Deployment
• End-To-End Tests
Produkt-
inkrement
Produkt
Release
System
Integrations-
test
Komponententest
Klassentests
Unit-Tests
Systemtest
Integrationstest
Komponententests
Klassentests
Systemtest
Integrationstest
Komponententests
Klassentests
Systemtest
Integrationstest
Komponententests
Klassentests
NUnit
xUnit.Net
MBUnit
MS Test
Smart Unit Tests
Systemtest
Integrationstest
Komponententests
Klassentests
NUnit
xUnit.Net
MBUnit
MS Test
MSpec
NSpec
SpecsFor
DynamicSpecs
public class When_no_data_is_entered_for_person
{
static Person sut;
Establish context = () => sut = new Person();
Because of = () => { /* nothing todo because we simply don't set any data */ };
It should_provide_an_error_text_for_BirthDate = () => sut["BirthDate"].ShouldNotBeEmpty();
It should_provide_an_error_text_for_FirstName = () => sut["FirstName"].ShouldNotBeEmpty();
It should_provide_an_error_text_for_LastName = () => sut["LastName"].ShouldNotBeEmpty();
}
Systemtest
Integrationstest
Komponententests
Klassentests
MSpec
NSpec
SpecsFor
DynamicSpecs
Specflow
Specflow
Gherkin
MS Test
XUnit.Net
NUnit
Mspec
… XUnit
UI Testing
Framework
Silenium
WatiN
Coded UI Tests
White
…
Given
When
Then
C#
Systemtest
Integrationstest
Komponententests
Klassentests
MSpec
NSpec
SpecsFor
DynamicSpecs
Specflow
Vertrauen
Aufwand
Feedback
Quelle: Dr. Elmar Jürgens, CQSE
4
3
2
1
Keine Defizite
Keine Defizite in geändertem Code
Keine neuen Defizite
Egal
Pragmatismus Overengineering
CI Umgebung für .Net Projekte.
+ Sehr einfach und übersichtlich.
+ Für Opensource kostenlos.
+ Gute Übersicht über die Ergebnisse und den
Verlauf.
+ Gute Zusammenarbeit mit Github.
o Geringe Anpassungmöglichkeiten.
- Ausführung und Dokumentation
automatisierter Tests eher rudimentär.
Beliebtester Hostingdienst für Opensource
Projekte auf Basis von Git.
+ Sehr große Community.
+ Für Opensource kostenlos.
+ Wird von vielen Diensten unterstützt.
o Private Repositories kostenpflichtig.
- UI ist bedingt nutzerfreundlich.
Vergleichsweise neue GUI für Git die versucht
andere Wege der Darstellung zu gehen.
+ Plattformunabhängig
+ Gute Abbildung der gängigen Arbeitsabläufe.
+ Auch komplexe Aufgaben können über die UI
gelöst werden.
+ kostenlos.
+ Gute Darstellung der Dateihistorie und
Versionsvergleiche.
o Wird bei größeren oder vielen Projekten träge.
o Benötigt etwas Einarbeitungszeit.
Framework zur Erstellung modularer Applikationen
auf Basis diverser Xaml UI Technologien. Eignet sich
besonders für komplexe Großanwendungen.
+ Bootstrapping der Anwendung.
+ Regionhandling & Navigation.
+ ViewModel Locator.
+ Integration von DI Frameworks.
+ Modulehandling / Plugins.
+ Infrastruktur für Behaviours.
+ DelegateCommands.
+ Messagebus aka EventAggregator.
+ Verschiedene Basisklassen für ViewModels.
o Bei Kleinstanwendungen eher schwergewichtig.
IoC Container der sehr gut in Kombination mit Prism
zusammen arbeitet.
+ Es gibt nur einen Typen bei dem Typen registriert
und aufgelöst werden.
+ Diverse Möglichkeiten um Einfluss auf die Lebenszeit von
Instanzen zu nehmen.
+ XML Konfiguration möglich.
+ Automatische Registrierung bestimmter Typen
einer Assembly möglich.
+ Einsatz aspektorientierter Programmierung
möglich.
o Es gibt weitaus schnellere IoC Container.
o AOP wird zur Laufzeit vorgenommen und ist
dadurch vergleichsweise langsam.
- Wird aktuell nicht sehr aktiv gepflegt.
Umfangreicher IoC Container der sehr gut mit
anderen Frameworks kombiniert werden kann.
+ Vergleichsweise schnelle Auflösung von Typen.
+ Sehr umfangreiche Möglichkeiten um Einfluss auf
die Lebenszeit von Instanzen zu nehmen.
+ Automatische Registrierung bestimmter Typen
einer Assembly möglich.
+ Für diverse .Net Plattformen verfügbar.
+ Konfiguration per XML und Json möglich.
+ Eigene Modulinfrastruktur.
+ Hervorragende Dokumentation und Pflege.
o Etwas aufwändig mit Prism zu verwenden.
o Registrierung und Auflösung von Typen geschieht
über unterschiedliche Klassen.
public IQueryable<Place> GetPlaces(int categoryId)
{
var places = this.dataBase.CategoryPlace
.Where(x => x.CategoryId == categoryId);
return this.dataBase.Place.Where(x => places
.Any(p => p.PlaceId == x.Id));
}
public Language GetLanguage(int languageId)
{
return this.dataBase.Language.Find(languageId);
}
Sehr umfangreicher objektrelationaler Mapper für
diverse .Net Plattformen.
+ Sehr einfach und intuitiv zu nutzen.
+ Gute Konfigurationsmöglichkeiten.
+ Sowohl für kleine als auch große Projekte geeignet.
+ Sehr aktive Community.
o Einsatz mit Nicht Microsoft Datenbanken
gelegentlich schwierig.
o Einfachheit täuscht darüber hinweg wie schnell
man Performanceschwachstellen entwickeln kann.
- Verwirrende Releasestrategie der
unterschiedlichen Versionen.
Werkzeug mit dem automatisierte Tests kontinuierlich
während der Programmierung ausgeführt werden.
+ Sehr schnelle Feedbackzyklen.
+ Volle Integration ins Visual Studio.
+ Sehr klare Darstellung der Testabdeckung und möglicher
Fehlerstellen.
+ Out-of-the-box Unterstützung für MS Test, NUnit, XUnit.net
+ Umfangreiche Konfigurationsmöglichkeiten.
o Nicht für Integrationstests geeignet.
o Funktionale UI
- Zugriffe auf das Dateisystem aus Tests heraus führen
häufig zu Fehlern.
Plugin für Visual Studio um XAML Code automatisch zu
formatieren.
+ Sehr einfach und leichtgewichtig.
+ Xaml Dateien sind besser lesbar.
o Reformatierung des Codes kann zu Problemen bei
Code-Reviews führen.
- Sehr große Dateien (>10k Zeilen) können das VS zum
Absturz bringen.
[TestFixture]
public class PersonValidationTests
{
[Test]
public void Error_text_shall_be_provided()
{
var sut = new Person();
Assert.That(sut["FirstName"], Is.Not.Null);
Assert.That(sut["LastName"], Is.Not.Null);
Assert.That(sut["BirthDate"], Is.Not.Null);
}
}
Sehr leistungsfähiges XUnit Testing Framework.
+ Gut geeignet für Unit und Integrationstests.
+ Wird von vielen gängigen Tools unterstützt.
+ Bietet die meisten Feautres der gängigen
XUnit Frameworks.
+ Ist sehr gut erweiterbar
+ Kann für alle gängigen .Net Plattformen eingesetzt
werden.
o Es wird ein Adapter benötigt um Tests in TFS und
VS ausführen zu können (per NuGet installierbar)
public class WhenPersonSelectionIsShown : Specifies<PersonSelectionViewModel>
{
public override void Given()
{
this.AvailablePersons = new List<Person>(){new Person()};
var repository = this.GetInstance<IRepository>();
A.CallTo(() => repository.GetPersons()).Returns(this.AvailablePersons);
}
public override void When()
{
this.SUT.OnShow();
}
[Test]
public void ThenAllAvailablePersonsAreShown()
{
Assert.AreEqual(this.AvailablePersons.Count(), this.SUT.Persons.Count());
}
public IEnumerable<Person> AvailablePersons { get; set; }
}
Leichtgewichtige Erweiterung von NUnit und MS Test
um Tests in BDD Stil zu verfassen.
+ Bietet Automocking.
+ Sehr umfangreich und leicht erweiterbar.
+ Erlaubt lesbarere Tests.
+ Ist gut erweiterbar
+ Leichtgewichtig.
o bietet vergleichsweise wenige Features moderner
BDD Frameworks.
Sehr einfaches und leicht verständliches Mocking
Framework welches einen umfassenden Einsatz von
Interfaces verlangt.
+ Sehr einfach nutz und erlernbar.
+ Tests mit FakeItEasy sind sehr gut lesbar.
+ Sehr aktive Community.
+ Weitreichend von anderen Frameworks unterstützt.
+ Sehr gute Dokumentation.
- Kann keine konkreten Typen mocken.
- Kann keine statischen Typen mocken.
public class Person
{
public string Name { get; set; }
public string LastName { get; set; }
}
public class HelloFiller
{
public void FillPerson()
{
var pFiller = new Filler<Person>();
pFiller.Setup()
.OnProperty(p => p.Name).Use("John")
.OnProperty(p => p.LastName).Use(new
RealNames(NameStyle.LastName));
var filledPerson = pFiller.Create();
}
}
Framework zur automatisierten Generierung von Daten.
+ Sehr einfach verständlich.
+ Sehr umfangreich.
+ Bietet Implementierungen für viele Standardfälle.
+ Gute Plugin-Infrastruktur um selbst Erweiterungen
vorzunehmen.
+ Gute Dokumentation
+ Aktive Community
o Aufwändige Konfiguration führen zu repetitivem Code.
- Keine direkte Integration in Testingframeworks.
Bietet verschiedenste Möglichkeiten um Quellcode zu analysieren, refaktorisieren und zu verbessern.

Weitere ähnliche Inhalte

Was ist angesagt?

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
 
Das Kung Fu des Code Reviews
Das Kung Fu des Code ReviewsDas Kung Fu des Code Reviews
Das Kung Fu des Code Reviews
Christian Erhardt
 
Build Automation for Mobile
Build Automation for MobileBuild Automation for Mobile
Build Automation for Mobile
inovex GmbH
 
Agile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenAgile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more often
pingworks
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with Behat
Markus Goldbeck
 
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Timo Stollenwerk
 
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar TippsMagento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Christian Münch
 
XPages From Zero To Hero
XPages From Zero To HeroXPages From Zero To Hero
XPages From Zero To Hero
Christian Güdemann
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes
QAware GmbH
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
Peter Kraume
 
Von Test nach live mit Rex
Von Test nach live mit RexVon Test nach live mit Rex
Von Test nach live mit Rex
inovex GmbH
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
Hendrik Lösch
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
Hendrik Lösch
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
Sebastian Springer
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
QAware GmbH
 
Kaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment RoadmapKaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment Roadmap
Stephan Kaps
 
Zuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible sessionZuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible session
Torben Knerr
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
Stephan Kaps
 
DevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der SchieneDevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der Schiene
Vorname Nachname
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
Tobias Trelle
 

Was ist angesagt? (20)

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
 
Das Kung Fu des Code Reviews
Das Kung Fu des Code ReviewsDas Kung Fu des Code Reviews
Das Kung Fu des Code Reviews
 
Build Automation for Mobile
Build Automation for MobileBuild Automation for Mobile
Build Automation for Mobile
 
Agile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenAgile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more often
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with Behat
 
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
 
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar TippsMagento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
 
XPages From Zero To Hero
XPages From Zero To HeroXPages From Zero To Hero
XPages From Zero To Hero
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
 
Von Test nach live mit Rex
Von Test nach live mit RexVon Test nach live mit Rex
Von Test nach live mit Rex
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
 
Kaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment RoadmapKaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment Roadmap
 
Zuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible sessionZuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible session
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
 
DevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der SchieneDevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der Schiene
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 

Ähnlich wie TDD für Testmuffel

Werkzeugkasten
WerkzeugkastenWerkzeugkasten
Werkzeugkasten
Hendrik Lösch
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
Marc Müller
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
Marc Müller
 
Groupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 CbGroupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 Cb
bofh42
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
Thorsten Kamann
 
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionDnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
Oliver Busse
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Andreas Schreiber
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
GFU Cyrus AG
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und Raumfahrt
Andreas Schreiber
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
OPITZ CONSULTING Deutschland
 
Templates, Code & Tools
Templates, Code & ToolsTemplates, Code & Tools
Templates, Code & Tools
Ulrich Krause
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
Cenarion Information Systems GmbH
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
Tobias Kraft
 
Drupal Austria Roadshow in Klagenfurt
Drupal Austria Roadshow in KlagenfurtDrupal Austria Roadshow in Klagenfurt
Drupal Austria Roadshow in Klagenfurt
dasjo
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
DNUG e.V.
 
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
Michael Kurz
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
Jens Binfet
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Kai Donato
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
Joachim Baumann
 

Ähnlich wie TDD für Testmuffel (20)

Werkzeugkasten
WerkzeugkastenWerkzeugkasten
Werkzeugkasten
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Groupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 CbGroupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 Cb
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionDnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und Raumfahrt
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Templates, Code & Tools
Templates, Code & ToolsTemplates, Code & Tools
Templates, Code & Tools
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
 
Drupal Austria Roadshow in Klagenfurt
Drupal Austria Roadshow in KlagenfurtDrupal Austria Roadshow in Klagenfurt
Drupal Austria Roadshow in Klagenfurt
 
GWT
GWTGWT
GWT
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
 
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 

Mehr von Hendrik Lösch

Why (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyWhy (most) softwareprojects fail silently
Why (most) softwareprojects fail silently
Hendrik Lösch
 
We (don't) need a software architect!?!
We (don't) need a software architect!?!We (don't) need a software architect!?!
We (don't) need a software architect!?!
Hendrik Lösch
 
Restrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationRestrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen Großapplikation
Hendrik Lösch
 
Vom Monolith zum Modulith
Vom Monolith zum ModulithVom Monolith zum Modulith
Vom Monolith zum Modulith
Hendrik Lösch
 
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungDer Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Hendrik Lösch
 
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
Hendrik Lösch
 
Software ist was du draus machst!
Software ist was du draus machst!Software ist was du draus machst!
Software ist was du draus machst!
Hendrik Lösch
 
Modular mit .NET
Modular mit .NETModular mit .NET
Modular mit .NET
Hendrik Lösch
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
Hendrik Lösch
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
Hendrik Lösch
 
Migrationsstrategien
MigrationsstrategienMigrationsstrategien
Migrationsstrategien
Hendrik Lösch
 
Einstieg in das Vueniverse
Einstieg in das VueniverseEinstieg in das Vueniverse
Einstieg in das Vueniverse
Hendrik Lösch
 
Survivalkit für Codehausmeister
Survivalkit für CodehausmeisterSurvivalkit für Codehausmeister
Survivalkit für Codehausmeister
Hendrik Lösch
 
Confessions of a Codehausmeister
Confessions of a CodehausmeisterConfessions of a Codehausmeister
Confessions of a Codehausmeister
Hendrik Lösch
 
Hey, wie geht es dir?
Hey, wie geht es dir?Hey, wie geht es dir?
Hey, wie geht es dir?
Hendrik Lösch
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
Hendrik Lösch
 
Clean mit visual studio
Clean mit visual studioClean mit visual studio
Clean mit visual studio
Hendrik Lösch
 
Codesmells
CodesmellsCodesmells
Codesmells
Hendrik Lösch
 
Der Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteDer Healthcheck für Softwareprojekte
Der Healthcheck für Softwareprojekte
Hendrik Lösch
 
MVVM mit WPF
MVVM mit WPFMVVM mit WPF
MVVM mit WPF
Hendrik Lösch
 

Mehr von Hendrik Lösch (20)

Why (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyWhy (most) softwareprojects fail silently
Why (most) softwareprojects fail silently
 
We (don't) need a software architect!?!
We (don't) need a software architect!?!We (don't) need a software architect!?!
We (don't) need a software architect!?!
 
Restrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationRestrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen Großapplikation
 
Vom Monolith zum Modulith
Vom Monolith zum ModulithVom Monolith zum Modulith
Vom Monolith zum Modulith
 
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungDer Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
 
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
 
Software ist was du draus machst!
Software ist was du draus machst!Software ist was du draus machst!
Software ist was du draus machst!
 
Modular mit .NET
Modular mit .NETModular mit .NET
Modular mit .NET
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
Migrationsstrategien
MigrationsstrategienMigrationsstrategien
Migrationsstrategien
 
Einstieg in das Vueniverse
Einstieg in das VueniverseEinstieg in das Vueniverse
Einstieg in das Vueniverse
 
Survivalkit für Codehausmeister
Survivalkit für CodehausmeisterSurvivalkit für Codehausmeister
Survivalkit für Codehausmeister
 
Confessions of a Codehausmeister
Confessions of a CodehausmeisterConfessions of a Codehausmeister
Confessions of a Codehausmeister
 
Hey, wie geht es dir?
Hey, wie geht es dir?Hey, wie geht es dir?
Hey, wie geht es dir?
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
 
Clean mit visual studio
Clean mit visual studioClean mit visual studio
Clean mit visual studio
 
Codesmells
CodesmellsCodesmells
Codesmells
 
Der Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteDer Healthcheck für Softwareprojekte
Der Healthcheck für Softwareprojekte
 
MVVM mit WPF
MVVM mit WPFMVVM mit WPF
MVVM mit WPF
 

TDD für Testmuffel