unit testing roger boesch technology solution professional developer tools microsoft schweiz gmbh...

23
Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch

Upload: rupert-kempel

Post on 05-Apr-2015

105 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Unit TestingUnit Testing

Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

blogs.msdn.com/rogerboesch

Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

blogs.msdn.com/rogerboesch

Page 2: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

AgendaAgendaEinführung in Unit TestingUnit Testing mit Visual Studio Team System

Unit Testing Framework(Not so) Simple Unit TestingData Driven Unit Testing

Unit Testing Best PracticesBICEP – Das richtige TestenCORRECT – Boundary ConditionsMock Objekte

Plattform Unit TestingASP.Net, Silverlight 2.0, Windows Mobile

Einführung in Unit TestingUnit Testing mit Visual Studio Team System

Unit Testing Framework(Not so) Simple Unit TestingData Driven Unit Testing

Unit Testing Best PracticesBICEP – Das richtige TestenCORRECT – Boundary ConditionsMock Objekte

Plattform Unit TestingASP.Net, Silverlight 2.0, Windows Mobile

Page 3: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Unit Testinglohnt sich immer…Unit Testinglohnt sich immer…

Series1

0

20

40

60

80

100

120

Programmierer I: Ohne Unit TestsTester: Gefundene FehlerFazitProgrammierer II: Mit Unit Tests

Zeit

Pro

du

kti

vit

ät

Page 4: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Was sind eigentlich Unit Tests?Einführung in Unit Testing

Was sind eigentlich Unit Tests?Einführung in Unit Testing

Prüfen von Units (Modulen)Autarke Code Einheiten (Bsp. Methode)Nur sinnvolle Tests (Bsp. Keine Getter/Setter)Automatisierbar und wiederholbar

Whitebox Testing (Einblick in Code)Einspeisen von verschiedenen WertenVergleichen des Ergebnisses

Kombination von Unit TestsBilden von Szenarios

Prüfen von Units (Modulen)Autarke Code Einheiten (Bsp. Methode)Nur sinnvolle Tests (Bsp. Keine Getter/Setter)Automatisierbar und wiederholbar

Whitebox Testing (Einblick in Code)Einspeisen von verschiedenen WertenVergleichen des Ergebnisses

Kombination von Unit TestsBilden von Szenarios

Page 5: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Die 10 besten AusredenEinführung in Unit TestingDie 10 besten AusredenEinführung in Unit Testing

Es braucht viel zu viel Zeit um die Tests zu schreiben!Die Tests laufen zu lassen dauert zu lange!Wir verwenden viel Legacy Code, der nicht getestet werden kann!Es ist nicht meine Aufgabe meinen Code zu testen!Ich weiss nicht, was der Code genau tun muss, wie soll ich da Tests schreiben?Der Code lässt sich doch compilieren!Ich werde bezahlt um Code zu schreiben, nicht Tests!Unsere Tester müssen ja auch noch Arbeit haben!Meine Firma erlaubt keine Unit Test auf Live-Systemen!Ja ja, ich schreibe doch bereits Unit Tests!

Es braucht viel zu viel Zeit um die Tests zu schreiben!Die Tests laufen zu lassen dauert zu lange!Wir verwenden viel Legacy Code, der nicht getestet werden kann!Es ist nicht meine Aufgabe meinen Code zu testen!Ich weiss nicht, was der Code genau tun muss, wie soll ich da Tests schreiben?Der Code lässt sich doch compilieren!Ich werde bezahlt um Code zu schreiben, nicht Tests!Unsere Tester müssen ja auch noch Arbeit haben!Meine Firma erlaubt keine Unit Test auf Live-Systemen!Ja ja, ich schreibe doch bereits Unit Tests!

Page 6: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Was bewirkt Unit Testing?Einführung in Unit TestingWas bewirkt Unit Testing?Einführung in Unit Testing

Frühes und ständiges Testen wird ermöglichtStehen nach jeder Änderung zur VerfügungSind in ihrer Gesamtheit aussagekräftigUnterstützen und fördern RefactoringFördert Einfachheit der einzelnen MethodenSorgt für einen verbesserten Software Entwicklungs ProzessKombination von Code und Unit Tests fördert Wartbarkeit und Austauschbarkeit

Frühes und ständiges Testen wird ermöglichtStehen nach jeder Änderung zur VerfügungSind in ihrer Gesamtheit aussagekräftigUnterstützen und fördern RefactoringFördert Einfachheit der einzelnen MethodenSorgt für einen verbesserten Software Entwicklungs ProzessKombination von Code und Unit Tests fördert Wartbarkeit und Austauschbarkeit

Page 7: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Ist es wirklich so einfach?Einführung in Unit TestingIst es wirklich so einfach?Einführung in Unit Testing

Sinnhaftigkeit der Tests ( Was testet man?)

ProblembereicheTesten von Benutzeroberflächen schwierig

MVC Design Pattern hilft ein wenig weiter

Schwierige Abgrenzungen (Bsp. Datenbanken)Nebenläufigkeit (Threads) bereiten ProblemeLösungsansatz: Mock-Objekte (to mock: engl. für nachahmen)

EinschränkungTesten des “grossen Ganzen” nicht möglichErsetzen keine Integrations- und Akzeptanz -Tests

Sinnhaftigkeit der Tests ( Was testet man?)

ProblembereicheTesten von Benutzeroberflächen schwierig

MVC Design Pattern hilft ein wenig weiter

Schwierige Abgrenzungen (Bsp. Datenbanken)Nebenläufigkeit (Threads) bereiten ProblemeLösungsansatz: Mock-Objekte (to mock: engl. für nachahmen)

EinschränkungTesten des “grossen Ganzen” nicht möglichErsetzen keine Integrations- und Akzeptanz -Tests

Page 8: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Test Driven DevelopmentEinführung in Unit TestingTest Driven DevelopmentEinführung in Unit Testing

Motto: Rot Grün RefactoringSchreibe einen kleinen Test für den nächsten zu implementierenden Funktionalitätshappen. Dieser Test sollte nicht funktionieren. Erfülle den Test mit möglichst wenig Code, um schnell wieder zum "grünen Balken" (alle Tests laufen) zurückzukehren. Räume den Code auf! Dazu gehört das Entfernen von Duplikaten, Einführung von notwendigen Abstraktionen und Umsetzen der Code Konventionen. Ziel dieses Aufräumens ist die einfache Form des Codes.

Motto: Rot Grün RefactoringSchreibe einen kleinen Test für den nächsten zu implementierenden Funktionalitätshappen. Dieser Test sollte nicht funktionieren. Erfülle den Test mit möglichst wenig Code, um schnell wieder zum "grünen Balken" (alle Tests laufen) zurückzukehren. Räume den Code auf! Dazu gehört das Entfernen von Duplikaten, Einführung von notwendigen Abstraktionen und Umsetzen der Code Konventionen. Ziel dieses Aufräumens ist die einfache Form des Codes.

Page 9: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Ein erstes BeispielUnit Testing mit Visual Studio Team System

Ein erstes BeispielUnit Testing mit Visual Studio Team Systemusing System;

public class Cmp{

public static int Largest(int[] list){

…}

}

using System;

public class Cmp{

public static int Largest(int[] list){

…}

}

Welche Tests sind notwendig/sinnvoll?Welche Tests sind notwendig/sinnvoll?

Page 10: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Zu testende VariantenUnit Testing mit Visual Studio Team System

Zu testende VariantenUnit Testing mit Visual Studio Team System

Reihenfolge unabhängig7,8,9 9 8,7,9 9 9,8,7 9

Mehrere gleiche Einträge7,9,8,9 9

Nur eine Nummer1 1

Negative Nummern-9,-8,-7 -7

Leere Listenull ?

Reihenfolge unabhängig7,8,9 9 8,7,9 9 9,8,7 9

Mehrere gleiche Einträge7,9,8,9 9

Nur eine Nummer1 1

Negative Nummern-9,-8,-7 -7

Leere Listenull ?

Page 11: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Unit Testing mitVisual Studio Team System

Unit Testing mitVisual Studio Team System

Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

Page 12: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Data Driven Unit TestsUnit Testing mit Visual Studio Team System

Data Driven Unit TestsUnit Testing mit Visual Studio Team System

VorteileSchnell erweiterbar durch zusätzliche DatensätzeEinfach zu implementierenKomplett ins Testing Framework von VSTS integriertDurch „Nicht“-Programmierer erweiterbar

Aufbau der DatenbankDie notwendigen Felder

ProgrammierungEinsatz des DataSource PropertiesZugriff auf die Daten: Der TestContext

VorteileSchnell erweiterbar durch zusätzliche DatensätzeEinfach zu implementierenKomplett ins Testing Framework von VSTS integriertDurch „Nicht“-Programmierer erweiterbar

Aufbau der DatenbankDie notwendigen Felder

ProgrammierungEinsatz des DataSource PropertiesZugriff auf die Daten: Der TestContext

Page 13: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Data Driven Unit Tests mitVisual Studio Team System

Data Driven Unit Tests mitVisual Studio Team SystemRoger Boesch

Technology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

Page 14: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Das richtige Testen!Unit Testing Best PracticesDas richtige Testen!Unit Testing Best Practices

Right BICEPRight: Sind die Testergebnisse korrekt?B: Sind die Boundary Conditions korrekt?I: Kann invers getestet werden?C: Kann Cross-Check getestet werden?E: Können Fehler (Errors) erzeugt werden?P: Liegt die Performance in der Toleranz?

Right BICEPRight: Sind die Testergebnisse korrekt?B: Sind die Boundary Conditions korrekt?I: Kann invers getestet werden?C: Kann Cross-Check getestet werden?E: Können Fehler (Errors) erzeugt werden?P: Liegt die Performance in der Toleranz?

Page 15: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Das richtige Testen!Unit Testing Best PracticesDas richtige Testen!Unit Testing Best Practices

CORRECT BoundariesConformance: Stimmt das Format?Ordering: Spielt die Reihenfolge eine Rolle?Range: Liegt der Wert in einem definierten Bereich?Reference: Nutzt der Code externe Ressourcen?Existence: Existiert ein bestimmter Wert?Cardinality: Stimmt die Anzahl?Time: Geschieht alles in der Zeit, zur Zeit?

CORRECT BoundariesConformance: Stimmt das Format?Ordering: Spielt die Reihenfolge eine Rolle?Range: Liegt der Wert in einem definierten Bereich?Reference: Nutzt der Code externe Ressourcen?Existence: Existiert ein bestimmter Wert?Cardinality: Stimmt die Anzahl?Time: Geschieht alles in der Zeit, zur Zeit?

Page 16: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Manchmal ist es nicht so einfach…Unit Testing Best Practices

Manchmal ist es nicht so einfach…Unit Testing Best PracticesMock Objekte

StubsImplementieren eines Interfaces und liefern von Dummy-Werten

FakesErlaubt die Simulieren des echten Verhaltens

Frage Dich immer!• Ist ein Mock Objekt wirklich notwendig?• Hilft ev. ein Refactoring/Redesign?

Mock ObjekteStubs

Implementieren eines Interfaces und liefern von Dummy-Werten

FakesErlaubt die Simulieren des echten Verhaltens

Frage Dich immer!• Ist ein Mock Objekt wirklich notwendig?• Hilft ev. ein Refactoring/Redesign?

Page 17: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Manchmal ist es nicht so einfachUnit Testing Best Practices

Manchmal ist es nicht so einfachUnit Testing Best PracticesMock Objekte

StubsImplementieren eines Interfaces und liefern von Dummy-Werten

FakesErlaubt die Simulieren des echten Verhaltens

Frage Dich immer!• Ist ein Mock Objekt wirklich notwendig?• Hilft ev. ein Refactoring/Redesign?

Mock ObjekteStubs

Implementieren eines Interfaces und liefern von Dummy-Werten

FakesErlaubt die Simulieren des echten Verhaltens

Frage Dich immer!• Ist ein Mock Objekt wirklich notwendig?• Hilft ev. ein Refactoring/Redesign?

Page 18: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Zeit ist nicht gleich Zeit…Unit Testing Best PracticesZeit ist nicht gleich Zeit…Unit Testing Best Practices public static string DaysFromNow(DateTime last) {

TimeSpan span = DateTime.Now - last;switch (span.Days){

case 0:return "Heute";

case 1: return "Gestern";

default:return span.Days + " Tage

vorher";}

}

public static string DaysFromNow(DateTime last) {

TimeSpan span = DateTime.Now - last;switch (span.Days){

case 0:return "Heute";

case 1: return "Gestern";

default:return span.Days + " Tage

vorher";}

}

Was ist hier am Sinnvollsten ?Was ist hier am Sinnvollsten ?

Page 19: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Merkmaler guter Unit TestsUnit Testing Best PracticesMerkmaler guter Unit TestsUnit Testing Best Practices

Tests müssen schnell seinAnsonsten werden sie nicht so oft gestartet

Separieren oder simulieren von Abhängikeiten Immer Mock-Objekte oder Stubs einsetzen

Limitieren des Scopes Ein Test testet jeweils nur einen Fall

Tests müssen isoliert ablaufen können Die Reihenfolge der Tests darf keine Rolle

spielen

Tests sollten selbsterklärend sein Erkenne ich sofort was getestet wird?

Tests müssen schnell seinAnsonsten werden sie nicht so oft gestartet

Separieren oder simulieren von Abhängikeiten Immer Mock-Objekte oder Stubs einsetzen

Limitieren des Scopes Ein Test testet jeweils nur einen Fall

Tests müssen isoliert ablaufen können Die Reihenfolge der Tests darf keine Rolle

spielen

Tests sollten selbsterklärend sein Erkenne ich sofort was getestet wird?

Page 20: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Plattform Unit TestingSilverlight 2.0, Windows Mobile, ASP.Net …… solange die Zeit reicht

Plattform Unit TestingSilverlight 2.0, Windows Mobile, ASP.Net …… solange die Zeit reicht

Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH

Page 21: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Unit Tests: Was bleibt noch?Unit Testing Best PracticesUnit Tests: Was bleibt noch?Unit Testing Best Practices

Wie oft soll ich meine Tests laufen lassen?Nach dem Schreiben einer neuen Methode (TDD)Bei einem Fehler

Schreibe einen Test der den Fehler aufzeigtBereinige den FehlerLass alle Unit Tests erneut laufen!

Nach erfolgreichem Kompilieren bei jeder Code ÄnderungVor dem Einchecken in die Versions Kontrolle

VSTS kennt Check-In Policies!

Wie oft soll ich meine Tests laufen lassen?Nach dem Schreiben einer neuen Methode (TDD)Bei einem Fehler

Schreibe einen Test der den Fehler aufzeigtBereinige den FehlerLass alle Unit Tests erneut laufen!

Nach erfolgreichem Kompilieren bei jeder Code ÄnderungVor dem Einchecken in die Versions Kontrolle

VSTS kennt Check-In Policies!

Page 22: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

Weiterführende Informationen zum ThemaWeiterführende Informationen zum ThemaLinks

Software Tester Team Centerhttp://msdn2.microsoft.com/en-us/teamsystem/aa718941.aspx

Working with Unit Testshttp://msdn2.microsoft.com/en-us/library/ms182515(VS.80).aspx

Guidelines for Test Driven Developmenthttp://msdn2.microsoft.com/en-us/library/aa730844(VS.80).aspx

Unit Testing für C++ Codehttp://www.codeguru.com/columns/kate/article.php/c11893/

Bücher zum ThemaSoftware Testing with Visual Studio Team System (ISBN 0470149787 )

Pragmatic Unit Testing (http://pragprog.com/starter_kit)

LinksSoftware Tester Team Center

http://msdn2.microsoft.com/en-us/teamsystem/aa718941.aspx

Working with Unit Testshttp://msdn2.microsoft.com/en-us/library/ms182515(VS.80).aspx

Guidelines for Test Driven Developmenthttp://msdn2.microsoft.com/en-us/library/aa730844(VS.80).aspx

Unit Testing für C++ Codehttp://www.codeguru.com/columns/kate/article.php/c11893/

Bücher zum ThemaSoftware Testing with Visual Studio Team System (ISBN 0470149787 )

Pragmatic Unit Testing (http://pragprog.com/starter_kit)

Page 23: Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution

© Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.