SlideShare ist ein Scribd-Unternehmen logo
1 von 31
FIO® SYSTEMS AG




      Unit Tests und
Test Driven Development
       in der Praxis
       – alles grün?
FIO® SYSTEMS AG
Die Herausforderung
FIO® SYSTEMS AG
                      Unit Tests

• Testen automatisiert kleine, isolierte Einheiten (Units)
  eines Programms
• Stellen sicher, dass diese Units bestimmte Erwartungen
  erfüllen
FIO® SYSTEMS AG
                                           Ein Unit Test
[TestFixture]
public class AccountTest
{
    private Account firstAccount = new Account();
    private Account secondAccount = new Account();


    [TestFixtureSetUp]
    public void SetUp()
    {
        firstAccount.Transfer(secondAccount, 100);
    }


    [Test]
    public void TransferTest()
    {
        Assert.AreEqual(100, secondAccount.Balance);
    }
}
FIO® SYSTEMS AG
Funktionen von Unit Test Frameworks
• Annotationen zum Kennzeichnen der Testklasse (NUnit:
  [TestFixture], JUnit / TestNG: keine erforderlich)
• Annotationen zum Kennzeichnen von SetUp / TearDown
  (NUnit: [TestFixtureSetUp] / [SetUp],
  [TestFixtureTearDown] / [TearDown], JUnit / TestNG:
  @Before, @After, @BeforeClass, @BeforeMethod, …)
• Kennzeichnung der eigentlichen Tests (NUnit: [Test],
  JUnit / TestNG: @Test)
FIO® SYSTEMS AG
Funktionen von Unit Test Frameworks
• Assert Statements zum Definieren von Bedingungen
  (NUnit: Assert.AreEqual, JUnit / TestNG: assertsEquals)
• Annotationen zum Kennzeichnen von erwarteten
  Exceptions: NUnit:
  [Test][ExpectedException(typeof(ArithmeticException))],
  JUnit / TestNG: @Test(expected(Exceptions) =
  ArithmeticException.class)
FIO® SYSTEMS AG
            Bedingungen an Unit Tests
from „Working effectively with legacy code“ by Michael Feathers:

„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 to run
   it.“

Weitere: schnell, wiederholbar, verständlich, unabhängig
FIO® SYSTEMS AG
          Was bringen Unit Tests?

• Sicherheit
• Dokumentation
• Automatische Tests / Continuous Integration
• Geschwindigkeit (mittel- / langfristig)


• Aber: hohe Einarbeitungszeit, Zeitaufwand für Tests
FIO® SYSTEMS AG
         Unit Test nach dem Code
• …werden oft nicht geschrieben
• …testen nur das, was der Code hergibt
• …prüfen meist nur einen Teil der Funktionalität
• …sind oft schwer zu schreiben, da der Code schlecht
  testbar ist

Die Lösung: Test Driven Development
FIO® SYSTEMS AG
   Test Driven Development (TDD)
• RED: fehlschlagenden Test schreiben
• GREEN: nur soviel Code schreiben, um den Test grün zu
  machen
• REFACTOR: den Code aufräumen
FIO® SYSTEMS AG
   Test Driven Development (TDD)
• Praxis
FIO® SYSTEMS AG
              Kriterien für gute Tests
Gute Tests:
• Stellen sicher, dass erwartete Ergebnisse geliefert
  werden
• Testen Extrembedingungen / Fehlerzustände
• Testen Performance bei kritischen Funktionen
• Decken möglichst 100% des Codes ab
FIO® SYSTEMS AG
Codeabdeckung
FIO® SYSTEMS AG
          Weitere Schwierigkeiten
• Wie lässt sich eine solche Methode sinnvoll testen:

public class AccountController
{
    ...
    public void Save()
    {
        Account account = accountService.GetById(accountId);
        // ToDo: fill account with values from mask
        accountService.Save(account);
    }
}
FIO® SYSTEMS AG
 Die Lösung: Dependency-Injection
• Interface statt konkreter Implementierung verwenden
• Implementierung zugänglich machen durch z.B.:
  • Übergabe im Konstruktor
  • Übergabe im Funktionsaufruf
  • Setter
  • Service-Locator
  • DI-Framework
FIO® SYSTEMS AG
    Verwendung eines DI-Frameworks
ObjectFactory.Initialize(...);

public class AccountController
{
    private IAccountService service =
                   ObjectFactory.GetInstance<IAccountService>();

     public void Save()
     {
         Account account = service.GetById(accountId);
         // ToDo: fill account with values from mask
         service.Save(account);
     }
}
FIO® SYSTEMS AG
                    Und dann?
• Der getesteten Methode / Klasse etwas vorgauckeln mit:
• Fakes (Implementierung nur für den Test)
• Stubs (Geben die Werte zurück, die für den Test
  gebraucht werden)
• Mocks (Objekte mit Erwartungen bzgl. übergebener
  Werte und aufgerufener Funktionen)
FIO® SYSTEMS AG
           Stub, Fake, Mock
• Praxis
FIO® SYSTEMS AG
Behaviour Driven Development (BDD)
FIO® SYSTEMS AG
Behaviour Driven Development (BDD)
• Ausgangspunkt der Tests ist ein Akzeptanzkriterium
• Daraus wird eine Spezifikation der Form „Name, When,
  Then“ oder „Given, When, Then“ erstellt
• Die Ausgabe der Testläufe soll menschenlesbar und für
  Tester, Fachanwender oder Kunden verständlich sein
• Der Testcode selbst soll leicht verständlich sein, um als
  „lebendige Dokumentation“ zu dienen
FIO® SYSTEMS AG
Behaviour Driven Development (BDD)
FIO® SYSTEMS AG
Behaviour Driven Development (BDD)
• Praxis
FIO® SYSTEMS AG
       Continuous Integration (CI)
• Der beste Tests nutzt nichts, wenn er nicht nach jeder
  Änderung ausgeführt wird
• Der beste Code nutzt nichts, wenn er nicht integrierbar ist
• Bei 2 oder mehr Entwicklern lässt sich beides nur
  automatisiert sicherstellen
• Des Weiteren muss es im Team eine Quelle der
  ultimativen Wahrheit geben
FIO® SYSTEMS AG
       Continuous Integration (CI)
• Zentrales Code Repository
• Zentraler automatisierter Build nach jedem Commit
• Zentrale automatisierte Tests (evtl. nach Schedule)
• Info an das ganze Team bei Fehlern in Build oder in Tests
FIO® SYSTEMS AG
Continuous Integration (CI)
FIO® SYSTEMS AG
                          Die Aufgabe
Als praktisches Beispiel soll im Rahmen dieser Aufgabe eine Funktion zum
Berechnen von Zinsen nach der Methode 30/360 erarbeitet werden.

Voraussetzungen:

   Technisch: Die eingesetzte Programmiersprache sowie das verwendete Test-
   Framework können frei gewählt werden.

   Fachlich: Es soll die für Spareinlagen übliche Zinsmethode 30/360
   angewendet werden, wobei der letzte Tag (Auszahlungstag) als zinsfrei zu
   behandeln ist.
FIO® SYSTEMS AG
                     Aufgabenstellung
• Erstellung Programm zur Zinsberechnung in Einzelarbeit, Zinsmethode 30/360

• Nutzer soll Anzahl von Buchungen eingeben können (Buchungsdatum, Betrag,
  Buchungstext) und zur Zinsberechnung Start- sowie Enddatum und Zinssatz
  festlegen

• Programm soll Zinstage und berechnete Zinsen ausgeben

• Die Funktion zur Zinsberechnung mit den oben beschriebenen
  Eingabeparametern ist testgetrieben zu entwickeln. Es ist dabei immer zuerst
  der Test zu schreiben, ehe weitere Funktionalität hinzugefügt wird.
FIO® SYSTEMS AG
                 Ergebnispräsentation
Bei der Präsentation des Arbeitsergebnisses soll auch auf folgende Aspekte
eingegangen werden:

 aus welchem Grund die verwendeten Technologien und Tools zum Einsatz
  kamen
 welche Tests erstellt wurden und welches Schema zur Benennung der Tests
  verwendet wurde
 welche Probleme das testgetriebene Vorgehen aufgeworfen hat und wie sie
  ggf. gelöst werden konnten
FIO® SYSTEMS AG




Fragen?
FIO® SYSTEMS AG




Vielen Dank und viel Erfolg!
FIO® SYSTEMS AG



  Spätere Fragen bitte einfach
           per E-Mail
  (siehe Veranstaltungswebsite)
            stellen!


www.fio.de

Weitere ähnliche Inhalte

Andere mochten auch

Mi primera vez con wear
Mi primera vez con wearMi primera vez con wear
Mi primera vez con wearJose Berna
 
Parque explora
Parque exploraParque explora
Parque exploraamaya-2910
 
Pionierbasis Konferenz 17.11.2013: Softwareentwicklung mit Verstand
Pionierbasis Konferenz 17.11.2013: Softwareentwicklung mit VerstandPionierbasis Konferenz 17.11.2013: Softwareentwicklung mit Verstand
Pionierbasis Konferenz 17.11.2013: Softwareentwicklung mit VerstandJörg Dirbach
 
La mujer sexy y fuerte del siglo xxi
La mujer sexy y fuerte del siglo xxiLa mujer sexy y fuerte del siglo xxi
La mujer sexy y fuerte del siglo xxiStefany Cohen
 
Congreso Educativo INACAP 2014 - Nicolás Palacios
Congreso Educativo INACAP 2014 - Nicolás PalaciosCongreso Educativo INACAP 2014 - Nicolás Palacios
Congreso Educativo INACAP 2014 - Nicolás PalaciosINACAP
 
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)We4IT Group
 
Edutags oer-koeln-190921-cloud
Edutags oer-koeln-190921-cloudEdutags oer-koeln-190921-cloud
Edutags oer-koeln-190921-cloudRichard Heinen
 
BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25
BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25
BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25Richard Heinen
 
Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...
Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...
Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...INACAP
 
4 Kattia Henriquez / Vrap
4 Kattia Henriquez / Vrap4 Kattia Henriquez / Vrap
4 Kattia Henriquez / VrapINACAP
 
3 Inés Barassi / Pta. Arenas
3 Inés Barassi / Pta. Arenas3 Inés Barassi / Pta. Arenas
3 Inés Barassi / Pta. ArenasINACAP
 

Andere mochten auch (16)

Mi primera vez con wear
Mi primera vez con wearMi primera vez con wear
Mi primera vez con wear
 
Parque explora
Parque exploraParque explora
Parque explora
 
Pionierbasis Konferenz 17.11.2013: Softwareentwicklung mit Verstand
Pionierbasis Konferenz 17.11.2013: Softwareentwicklung mit VerstandPionierbasis Konferenz 17.11.2013: Softwareentwicklung mit Verstand
Pionierbasis Konferenz 17.11.2013: Softwareentwicklung mit Verstand
 
La mujer sexy y fuerte del siglo xxi
La mujer sexy y fuerte del siglo xxiLa mujer sexy y fuerte del siglo xxi
La mujer sexy y fuerte del siglo xxi
 
66 ftp
66 ftp66 ftp
66 ftp
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Jeff bezos
Jeff bezosJeff bezos
Jeff bezos
 
Congreso Educativo INACAP 2014 - Nicolás Palacios
Congreso Educativo INACAP 2014 - Nicolás PalaciosCongreso Educativo INACAP 2014 - Nicolás Palacios
Congreso Educativo INACAP 2014 - Nicolás Palacios
 
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
 
Edutags oer-koeln-190921-cloud
Edutags oer-koeln-190921-cloudEdutags oer-koeln-190921-cloud
Edutags oer-koeln-190921-cloud
 
Pdf 111111
Pdf 111111Pdf 111111
Pdf 111111
 
BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25
BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25
BYO(D) - in Duisburg - Erfahrungen aus dem Projekt Lernen 25
 
Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...
Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...
Sra. Karin Quiroga, "Formación en TIC, un proceso de desarrollo continuo" - C...
 
4 Kattia Henriquez / Vrap
4 Kattia Henriquez / Vrap4 Kattia Henriquez / Vrap
4 Kattia Henriquez / Vrap
 
EMBARAZO ETAPA FINAL
EMBARAZO ETAPA FINAL EMBARAZO ETAPA FINAL
EMBARAZO ETAPA FINAL
 
3 Inés Barassi / Pta. Arenas
3 Inés Barassi / Pta. Arenas3 Inés Barassi / Pta. Arenas
3 Inés Barassi / Pta. Arenas
 

Ähnlich wie Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD

Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Nico Orschel
 
Intersys - Integration mit Spirateam (Zurich 2017)
Intersys - Integration mit Spirateam (Zurich 2017)Intersys - Integration mit Spirateam (Zurich 2017)
Intersys - Integration mit Spirateam (Zurich 2017)Adam Sandman
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Nico Orschel
 
Windows as a Service - Herausforderungen ohne Windows Desktop Analytics
Windows as a Service - Herausforderungen ohne Windows Desktop AnalyticsWindows as a Service - Herausforderungen ohne Windows Desktop Analytics
Windows as a Service - Herausforderungen ohne Windows Desktop AnalyticsFabian Niesen
 
Testautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für FortgeschrittendeTestautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für FortgeschrittendeNico Orschel
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Florian Wolters
 
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis NachhaltigkeitUI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis NachhaltigkeitNico Orschel
 
Die nächste Generation des Unit Testing
Die nächste Generation des Unit TestingDie nächste Generation des Unit Testing
Die nächste Generation des Unit TestingDaniel Lehner
 
Test Management mit Visual Studio 2012 (Developer Week 2013)
Test Management mit Visual Studio 2012 (Developer Week 2013)Test Management mit Visual Studio 2012 (Developer Week 2013)
Test Management mit Visual Studio 2012 (Developer Week 2013)Nico Orschel
 
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 2013Nico Orschel
 
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
 
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungDevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungMarc Müller
 
DWX 2014 - Testmanagement mit Visual Studio 2013
DWX 2014 - Testmanagement mit Visual Studio 2013DWX 2014 - Testmanagement mit Visual Studio 2013
DWX 2014 - Testmanagement mit Visual Studio 2013Nico Orschel
 
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ätFotiosKaramitsos
 
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...Mayflower GmbH
 
OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...
OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...
OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...NETWAYS
 
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 JavaScriptSebastian Springer
 

Ähnlich wie Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD (20)

Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
 
Intersys - Integration mit Spirateam (Zurich 2017)
Intersys - Integration mit Spirateam (Zurich 2017)Intersys - Integration mit Spirateam (Zurich 2017)
Intersys - Integration mit Spirateam (Zurich 2017)
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013
 
Windows as a Service - Herausforderungen ohne Windows Desktop Analytics
Windows as a Service - Herausforderungen ohne Windows Desktop AnalyticsWindows as a Service - Herausforderungen ohne Windows Desktop Analytics
Windows as a Service - Herausforderungen ohne Windows Desktop Analytics
 
Testautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für FortgeschrittendeTestautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für Fortgeschrittende
 
Agiles Testen - Überblick
Agiles Testen - ÜberblickAgiles Testen - Überblick
Agiles Testen - Überblick
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
 
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis NachhaltigkeitUI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
 
Die nächste Generation des Unit Testing
Die nächste Generation des Unit TestingDie nächste Generation des Unit Testing
Die nächste Generation des Unit Testing
 
Test Management mit Visual Studio 2012 (Developer Week 2013)
Test Management mit Visual Studio 2012 (Developer Week 2013)Test Management mit Visual Studio 2012 (Developer Week 2013)
Test Management mit Visual Studio 2012 (Developer Week 2013)
 
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
 
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...
 
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungDevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
 
DWX 2014 - Testmanagement mit Visual Studio 2013
DWX 2014 - Testmanagement mit Visual Studio 2013DWX 2014 - Testmanagement mit Visual Studio 2013
DWX 2014 - Testmanagement mit Visual Studio 2013
 
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
 
CDI
CDICDI
CDI
 
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
 
Hey, wie geht es dir?
Hey, wie geht es dir?Hey, wie geht es dir?
Hey, wie geht es dir?
 
OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...
OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...
OSMC 2013 | Enterprise Platforms Monitoring at s IT Solutions AT by Johannes ...
 
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
 

Mehr von Community ITmitte.de

IT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni Leipzig
IT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni LeipzigIT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni Leipzig
IT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni LeipzigCommunity ITmitte.de
 
Silicon saxony zff führungs- und organisationskultur
Silicon saxony   zff führungs- und organisationskulturSilicon saxony   zff führungs- und organisationskultur
Silicon saxony zff führungs- und organisationskulturCommunity ITmitte.de
 
Personaltrends 2014 Mitteldeutschland Themen AK Personalentwicklung Silicon...
Personaltrends 2014 Mitteldeutschland   Themen AK Personalentwicklung Silicon...Personaltrends 2014 Mitteldeutschland   Themen AK Personalentwicklung Silicon...
Personaltrends 2014 Mitteldeutschland Themen AK Personalentwicklung Silicon...Community ITmitte.de
 
31. Community Training von ITmitte und OFFICEmitte
31. Community Training von ITmitte und OFFICEmitte31. Community Training von ITmitte und OFFICEmitte
31. Community Training von ITmitte und OFFICEmitteCommunity ITmitte.de
 
31. Community Training ITmitte und OFFICEmitte
31. Community Training ITmitte und OFFICEmitte31. Community Training ITmitte und OFFICEmitte
31. Community Training ITmitte und OFFICEmitteCommunity ITmitte.de
 
29. OpenNetwork Event, Präsentation Absolventenmesse Mitteldeutschland
29. OpenNetwork Event, Präsentation Absolventenmesse Mitteldeutschland29. OpenNetwork Event, Präsentation Absolventenmesse Mitteldeutschland
29. OpenNetwork Event, Präsentation Absolventenmesse MitteldeutschlandCommunity ITmitte.de
 
29. OpenNetwork Event, Präsentation leipzig school of media
29. OpenNetwork Event, Präsentation leipzig school of media29. OpenNetwork Event, Präsentation leipzig school of media
29. OpenNetwork Event, Präsentation leipzig school of mediaCommunity ITmitte.de
 
29. OpenNetwork Event, Initiative "Faire-Karriere"
29. OpenNetwork Event, Initiative "Faire-Karriere"29. OpenNetwork Event, Initiative "Faire-Karriere"
29. OpenNetwork Event, Initiative "Faire-Karriere"Community ITmitte.de
 
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Community ITmitte.de
 
Vorstellung der Aufgabenstellung der lpa GmbH im Rahmen der Ringvorlesung
Vorstellung der Aufgabenstellung der lpa GmbH im Rahmen der RingvorlesungVorstellung der Aufgabenstellung der lpa GmbH im Rahmen der Ringvorlesung
Vorstellung der Aufgabenstellung der lpa GmbH im Rahmen der RingvorlesungCommunity ITmitte.de
 
Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...
Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...
Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...Community ITmitte.de
 
Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...
Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...
Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...Community ITmitte.de
 
Vorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.de
Vorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.deVorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.de
Vorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.deCommunity ITmitte.de
 
9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...
9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...
9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...Community ITmitte.de
 

Mehr von Community ITmitte.de (20)

IT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni Leipzig
IT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni LeipzigIT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni Leipzig
IT-Ringvorlesung - Ein Projekt von ITmitte mit der Uni Leipzig
 
34. Open Network *mitte
34. Open Network *mitte34. Open Network *mitte
34. Open Network *mitte
 
IT-Ringvorlesung
IT-RingvorlesungIT-Ringvorlesung
IT-Ringvorlesung
 
Silicon saxony zff führungs- und organisationskultur
Silicon saxony   zff führungs- und organisationskulturSilicon saxony   zff führungs- und organisationskultur
Silicon saxony zff führungs- und organisationskultur
 
Personaltrends 2014 Mitteldeutschland Themen AK Personalentwicklung Silicon...
Personaltrends 2014 Mitteldeutschland   Themen AK Personalentwicklung Silicon...Personaltrends 2014 Mitteldeutschland   Themen AK Personalentwicklung Silicon...
Personaltrends 2014 Mitteldeutschland Themen AK Personalentwicklung Silicon...
 
33. Community Training
33. Community Training33. Community Training
33. Community Training
 
31. Community Training von ITmitte und OFFICEmitte
31. Community Training von ITmitte und OFFICEmitte31. Community Training von ITmitte und OFFICEmitte
31. Community Training von ITmitte und OFFICEmitte
 
31. Community Training ITmitte und OFFICEmitte
31. Community Training ITmitte und OFFICEmitte31. Community Training ITmitte und OFFICEmitte
31. Community Training ITmitte und OFFICEmitte
 
28. OpenNetwork Event 2013
28. OpenNetwork Event 201328. OpenNetwork Event 2013
28. OpenNetwork Event 2013
 
29. OpenNetwork Event, Präsentation Absolventenmesse Mitteldeutschland
29. OpenNetwork Event, Präsentation Absolventenmesse Mitteldeutschland29. OpenNetwork Event, Präsentation Absolventenmesse Mitteldeutschland
29. OpenNetwork Event, Präsentation Absolventenmesse Mitteldeutschland
 
29. OpenNetwork Event, Präsentation leipzig school of media
29. OpenNetwork Event, Präsentation leipzig school of media29. OpenNetwork Event, Präsentation leipzig school of media
29. OpenNetwork Event, Präsentation leipzig school of media
 
29. OpenNetwork Event, Initiative "Faire-Karriere"
29. OpenNetwork Event, Initiative "Faire-Karriere"29. OpenNetwork Event, Initiative "Faire-Karriere"
29. OpenNetwork Event, Initiative "Faire-Karriere"
 
29. OpenNetwork Event, kanaleo.de
29. OpenNetwork Event, kanaleo.de29. OpenNetwork Event, kanaleo.de
29. OpenNetwork Event, kanaleo.de
 
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
 
Vorstellung der Aufgabenstellung der lpa GmbH im Rahmen der Ringvorlesung
Vorstellung der Aufgabenstellung der lpa GmbH im Rahmen der RingvorlesungVorstellung der Aufgabenstellung der lpa GmbH im Rahmen der Ringvorlesung
Vorstellung der Aufgabenstellung der lpa GmbH im Rahmen der Ringvorlesung
 
Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...
Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...
Kickoff Präsentation Ringvorlesung ITmitte.de Sommersemester 2013 Universität...
 
Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...
Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...
Vorstellung der Aufgabenstellung der Adyton Systems AG im Rahmen der Ringvorl...
 
Vorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.de
Vorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.deVorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.de
Vorstellung der Aufgabenstellung der lpa im Rahmen der Ringvorlesung ITmitte.de
 
9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...
9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...
9. Community Training ITmitte.de - technische Weiterentwicklungen und Neuerun...
 
9.Community Training ITmitte.de
9.Community Training ITmitte.de9.Community Training ITmitte.de
9.Community Training ITmitte.de
 

Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD

  • 1. FIO® SYSTEMS AG Unit Tests und Test Driven Development in der Praxis – alles grün?
  • 2. FIO® SYSTEMS AG Die Herausforderung
  • 3. FIO® SYSTEMS AG Unit Tests • Testen automatisiert kleine, isolierte Einheiten (Units) eines Programms • Stellen sicher, dass diese Units bestimmte Erwartungen erfüllen
  • 4. FIO® SYSTEMS AG Ein Unit Test [TestFixture] public class AccountTest { private Account firstAccount = new Account(); private Account secondAccount = new Account(); [TestFixtureSetUp] public void SetUp() { firstAccount.Transfer(secondAccount, 100); } [Test] public void TransferTest() { Assert.AreEqual(100, secondAccount.Balance); } }
  • 5. FIO® SYSTEMS AG Funktionen von Unit Test Frameworks • Annotationen zum Kennzeichnen der Testklasse (NUnit: [TestFixture], JUnit / TestNG: keine erforderlich) • Annotationen zum Kennzeichnen von SetUp / TearDown (NUnit: [TestFixtureSetUp] / [SetUp], [TestFixtureTearDown] / [TearDown], JUnit / TestNG: @Before, @After, @BeforeClass, @BeforeMethod, …) • Kennzeichnung der eigentlichen Tests (NUnit: [Test], JUnit / TestNG: @Test)
  • 6. FIO® SYSTEMS AG Funktionen von Unit Test Frameworks • Assert Statements zum Definieren von Bedingungen (NUnit: Assert.AreEqual, JUnit / TestNG: assertsEquals) • Annotationen zum Kennzeichnen von erwarteten Exceptions: NUnit: [Test][ExpectedException(typeof(ArithmeticException))], JUnit / TestNG: @Test(expected(Exceptions) = ArithmeticException.class)
  • 7. FIO® SYSTEMS AG Bedingungen an Unit Tests from „Working effectively with legacy code“ by Michael Feathers: „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 to run it.“ Weitere: schnell, wiederholbar, verständlich, unabhängig
  • 8. FIO® SYSTEMS AG Was bringen Unit Tests? • Sicherheit • Dokumentation • Automatische Tests / Continuous Integration • Geschwindigkeit (mittel- / langfristig) • Aber: hohe Einarbeitungszeit, Zeitaufwand für Tests
  • 9. FIO® SYSTEMS AG Unit Test nach dem Code • …werden oft nicht geschrieben • …testen nur das, was der Code hergibt • …prüfen meist nur einen Teil der Funktionalität • …sind oft schwer zu schreiben, da der Code schlecht testbar ist Die Lösung: Test Driven Development
  • 10. FIO® SYSTEMS AG Test Driven Development (TDD) • RED: fehlschlagenden Test schreiben • GREEN: nur soviel Code schreiben, um den Test grün zu machen • REFACTOR: den Code aufräumen
  • 11. FIO® SYSTEMS AG Test Driven Development (TDD) • Praxis
  • 12. FIO® SYSTEMS AG Kriterien für gute Tests Gute Tests: • Stellen sicher, dass erwartete Ergebnisse geliefert werden • Testen Extrembedingungen / Fehlerzustände • Testen Performance bei kritischen Funktionen • Decken möglichst 100% des Codes ab
  • 14. FIO® SYSTEMS AG Weitere Schwierigkeiten • Wie lässt sich eine solche Methode sinnvoll testen: public class AccountController { ... public void Save() { Account account = accountService.GetById(accountId); // ToDo: fill account with values from mask accountService.Save(account); } }
  • 15. FIO® SYSTEMS AG Die Lösung: Dependency-Injection • Interface statt konkreter Implementierung verwenden • Implementierung zugänglich machen durch z.B.: • Übergabe im Konstruktor • Übergabe im Funktionsaufruf • Setter • Service-Locator • DI-Framework
  • 16. FIO® SYSTEMS AG Verwendung eines DI-Frameworks ObjectFactory.Initialize(...); public class AccountController { private IAccountService service = ObjectFactory.GetInstance<IAccountService>(); public void Save() { Account account = service.GetById(accountId); // ToDo: fill account with values from mask service.Save(account); } }
  • 17. FIO® SYSTEMS AG Und dann? • Der getesteten Methode / Klasse etwas vorgauckeln mit: • Fakes (Implementierung nur für den Test) • Stubs (Geben die Werte zurück, die für den Test gebraucht werden) • Mocks (Objekte mit Erwartungen bzgl. übergebener Werte und aufgerufener Funktionen)
  • 18. FIO® SYSTEMS AG Stub, Fake, Mock • Praxis
  • 19. FIO® SYSTEMS AG Behaviour Driven Development (BDD)
  • 20. FIO® SYSTEMS AG Behaviour Driven Development (BDD) • Ausgangspunkt der Tests ist ein Akzeptanzkriterium • Daraus wird eine Spezifikation der Form „Name, When, Then“ oder „Given, When, Then“ erstellt • Die Ausgabe der Testläufe soll menschenlesbar und für Tester, Fachanwender oder Kunden verständlich sein • Der Testcode selbst soll leicht verständlich sein, um als „lebendige Dokumentation“ zu dienen
  • 21. FIO® SYSTEMS AG Behaviour Driven Development (BDD)
  • 22. FIO® SYSTEMS AG Behaviour Driven Development (BDD) • Praxis
  • 23. FIO® SYSTEMS AG Continuous Integration (CI) • Der beste Tests nutzt nichts, wenn er nicht nach jeder Änderung ausgeführt wird • Der beste Code nutzt nichts, wenn er nicht integrierbar ist • Bei 2 oder mehr Entwicklern lässt sich beides nur automatisiert sicherstellen • Des Weiteren muss es im Team eine Quelle der ultimativen Wahrheit geben
  • 24. FIO® SYSTEMS AG Continuous Integration (CI) • Zentrales Code Repository • Zentraler automatisierter Build nach jedem Commit • Zentrale automatisierte Tests (evtl. nach Schedule) • Info an das ganze Team bei Fehlern in Build oder in Tests
  • 25. FIO® SYSTEMS AG Continuous Integration (CI)
  • 26. FIO® SYSTEMS AG Die Aufgabe Als praktisches Beispiel soll im Rahmen dieser Aufgabe eine Funktion zum Berechnen von Zinsen nach der Methode 30/360 erarbeitet werden. Voraussetzungen: Technisch: Die eingesetzte Programmiersprache sowie das verwendete Test- Framework können frei gewählt werden. Fachlich: Es soll die für Spareinlagen übliche Zinsmethode 30/360 angewendet werden, wobei der letzte Tag (Auszahlungstag) als zinsfrei zu behandeln ist.
  • 27. FIO® SYSTEMS AG Aufgabenstellung • Erstellung Programm zur Zinsberechnung in Einzelarbeit, Zinsmethode 30/360 • Nutzer soll Anzahl von Buchungen eingeben können (Buchungsdatum, Betrag, Buchungstext) und zur Zinsberechnung Start- sowie Enddatum und Zinssatz festlegen • Programm soll Zinstage und berechnete Zinsen ausgeben • Die Funktion zur Zinsberechnung mit den oben beschriebenen Eingabeparametern ist testgetrieben zu entwickeln. Es ist dabei immer zuerst der Test zu schreiben, ehe weitere Funktionalität hinzugefügt wird.
  • 28. FIO® SYSTEMS AG Ergebnispräsentation Bei der Präsentation des Arbeitsergebnisses soll auch auf folgende Aspekte eingegangen werden:  aus welchem Grund die verwendeten Technologien und Tools zum Einsatz kamen  welche Tests erstellt wurden und welches Schema zur Benennung der Tests verwendet wurde  welche Probleme das testgetriebene Vorgehen aufgeworfen hat und wie sie ggf. gelöst werden konnten
  • 30. FIO® SYSTEMS AG Vielen Dank und viel Erfolg!
  • 31. FIO® SYSTEMS AG Spätere Fragen bitte einfach per E-Mail (siehe Veranstaltungswebsite) stellen! www.fio.de