Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch Roger Boesch Technology Solution."—  Präsentation transkript:

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

2 Agenda Einführung in Unit Testing Unit Testing mit Visual Studio Team System Unit Testing Framework (Not so) Simple Unit Testing Data Driven Unit Testing Unit Testing Best Practices BICEP – Das richtige Testen CORRECT – Boundary Conditions Mock Objekte Plattform Unit Testing ASP.Net, Silverlight 2.0, Windows Mobile Einführung in Unit Testing Unit Testing mit Visual Studio Team System Unit Testing Framework (Not so) Simple Unit Testing Data Driven Unit Testing Unit Testing Best Practices BICEP – Das richtige Testen CORRECT – Boundary Conditions Mock Objekte Plattform Unit Testing ASP.Net, Silverlight 2.0, Windows Mobile

3 Unit Testing lohnt sich immer…

4 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 Werten Vergleichen des Ergebnisses Kombination von Unit Tests Bilden 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 Werten Vergleichen des Ergebnisses Kombination von Unit Tests Bilden von Szenarios

5 Die 10 besten Ausreden Einfü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!

6 Was bewirkt Unit Testing? Einführung in Unit Testing Frühes und ständiges Testen wird ermöglicht Stehen nach jeder Änderung zur Verfügung Sind in ihrer Gesamtheit aussagekräftig Unterstützen und fördern Refactoring Fördert Einfachheit der einzelnen Methoden Sorgt für einen verbesserten Software Entwicklungs Prozess Kombination von Code und Unit Tests fördert Wartbarkeit und Austauschbarkeit Frühes und ständiges Testen wird ermöglicht Stehen nach jeder Änderung zur Verfügung Sind in ihrer Gesamtheit aussagekräftig Unterstützen und fördern Refactoring Fördert Einfachheit der einzelnen Methoden Sorgt für einen verbesserten Software Entwicklungs Prozess Kombination von Code und Unit Tests fördert Wartbarkeit und Austauschbarkeit

7 Ist es wirklich so einfach? Einführung in Unit Testing Sinnhaftigkeit der Tests ( Was testet man?) Problembereiche Testen von Benutzeroberflächen schwierig MVC Design Pattern hilft ein wenig weiter Schwierige Abgrenzungen (Bsp. Datenbanken) Nebenläufigkeit (Threads) bereiten Probleme Lösungsansatz: Mock-Objekte (to mock: engl. für nachahmen) Einschränkung Testen des grossen Ganzen nicht möglich Ersetzen keine Integrations- und Akzeptanz -Tests Sinnhaftigkeit der Tests ( Was testet man?) Problembereiche Testen von Benutzeroberflächen schwierig MVC Design Pattern hilft ein wenig weiter Schwierige Abgrenzungen (Bsp. Datenbanken) Nebenläufigkeit (Threads) bereiten Probleme Lösungsansatz: Mock-Objekte (to mock: engl. für nachahmen) Einschränkung Testen des grossen Ganzen nicht möglich Ersetzen keine Integrations- und Akzeptanz -Tests

8 Test Driven Development Einführung in Unit Testing Motto: Rot Grün Refactoring Schreibe 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 Refactoring Schreibe 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.

9 Ein erstes Beispiel Unit Testing mit Visual Studio Team System using 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?

10 Zu testende Varianten Unit Testing mit Visual Studio Team System Reihenfolge unabhängig 7,8,9 9 8,7,9 9 9,8,7 9 Mehrere gleiche Einträge 7,9,8,9 9 Nur eine Nummer 1 Negative Nummern -9,-8,-7 -7 Leere Liste null ? Reihenfolge unabhängig 7,8,9 9 8,7,9 9 9,8,7 9 Mehrere gleiche Einträge 7,9,8,9 9 Nur eine Nummer 1 Negative Nummern -9,-8,-7 -7 Leere Liste null ?

11 Unit Testing mit Visual Studio Team System Unit Testing mit Visual Studio Team System Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH

12 Data Driven Unit Tests Unit Testing mit Visual Studio Team System Vorteile Schnell erweiterbar durch zusätzliche Datensätze Einfach zu implementieren Komplett ins Testing Framework von VSTS integriert Durch Nicht-Programmierer erweiterbar Aufbau der Datenbank Die notwendigen Felder Programmierung Einsatz des DataSource Properties Zugriff auf die Daten: Der TestContext Vorteile Schnell erweiterbar durch zusätzliche Datensätze Einfach zu implementieren Komplett ins Testing Framework von VSTS integriert Durch Nicht-Programmierer erweiterbar Aufbau der Datenbank Die notwendigen Felder Programmierung Einsatz des DataSource Properties Zugriff auf die Daten: Der TestContext

13 Data Driven Unit Tests mit Visual Studio Team System Data Driven Unit Tests mit Visual Studio Team System Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH

14 Das richtige Testen! Unit Testing Best Practices Right BICEP Right: 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 BICEP Right: 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?

15 Das richtige Testen! Unit Testing Best Practices CORRECT Boundaries Conformance: 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 Boundaries Conformance: 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?

16 Manchmal ist es nicht so einfach… Unit Testing Best Practices Mock Objekte Stubs Implementieren eines Interfaces und liefern von Dummy-Werten Fakes Erlaubt die Simulieren des echten Verhaltens Frage Dich immer! Ist ein Mock Objekt wirklich notwendig? Hilft ev. ein Refactoring/Redesign? Mock Objekte Stubs Implementieren eines Interfaces und liefern von Dummy-Werten Fakes Erlaubt die Simulieren des echten Verhaltens Frage Dich immer! Ist ein Mock Objekt wirklich notwendig? Hilft ev. ein Refactoring/Redesign?

17 Manchmal ist es nicht so einfach Unit Testing Best Practices Mock Objekte Stubs Implementieren eines Interfaces und liefern von Dummy-Werten Fakes Erlaubt die Simulieren des echten Verhaltens Frage Dich immer! Ist ein Mock Objekt wirklich notwendig? Hilft ev. ein Refactoring/Redesign? Mock Objekte Stubs Implementieren eines Interfaces und liefern von Dummy-Werten Fakes Erlaubt die Simulieren des echten Verhaltens Frage Dich immer! Ist ein Mock Objekt wirklich notwendig? Hilft ev. ein Refactoring/Redesign?

18 Zeit 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 ?

19 Merkmaler guter Unit Tests Unit Testing Best Practices Tests müssen schnell sein Ansonsten 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 sein Ansonsten 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?

20 Plattform Unit Testing Silverlight 2.0, Windows Mobile, ASP.Net … … solange die Zeit reicht Plattform Unit Testing Silverlight 2.0, Windows Mobile, ASP.Net … … solange die Zeit reicht Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH

21 Unit 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 aufzeigt Bereinige den Fehler Lass alle Unit Tests erneut laufen! Nach erfolgreichem Kompilieren bei jeder Code Änderung Vor 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 aufzeigt Bereinige den Fehler Lass alle Unit Tests erneut laufen! Nach erfolgreichem Kompilieren bei jeder Code Änderung Vor dem Einchecken in die Versions Kontrolle VSTS kennt Check-In Policies!

22 Weiterführende Informationen zum Thema Links Software Tester Team Center Working with Unit Tests Guidelines for Test Driven Development Unit Testing für C++ Code Bücher zum Thema Software Testing with Visual Studio Team System (ISBN ) Pragmatic Unit Testing (http://pragprog.com/starter_kit) Links Software Tester Team Center Working with Unit Tests Guidelines for Test Driven Development Unit Testing für C++ Code Bücher zum Thema Software Testing with Visual Studio Team System (ISBN ) Pragmatic Unit Testing (http://pragprog.com/starter_kit)

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


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

Ähnliche Präsentationen


Google-Anzeigen