Top Banner
1 Dozent begrüßt Sie herzlich zum Vortrag auf der VODC 2006 Testgetriebene Entwicklung mit Vulcan.NET und Visual Objects Michael Fischer Copyright © 2006 Fischer & Consultants GmbH (F&C) Martinstrasse 1 44137 Dortmund www.appfact.com Kontakt: Michael Fischer Email [email protected] Phone +49 (172) 6801489 Fax +49 (941) 599212011
28

Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

Sep 04, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

1

Dozent

begrüßt Sie herzlichzum Vortrag auf der VODC 2006

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

Michael Fischer

Copyright © 2006Fischer & Consultants GmbH (F&C)Martinstrasse 144137 Dortmundwww.appfact.com

Kontakt: Michael FischerEmail [email protected] +49 (172) 6801489Fax +49 (941) 599212011

Page 2: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

2

Folie 2 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

Inhalt

1. Grundlagen

2. Wahl der Waffen unter .NET:NUnit vs. VSTS

3. Einführung in NUnit

4. Eine Klasse im Leben eines Test Driven Developers

5. VOUnit

6. Mehr Testverfahren

7. Integration von TDD in den Software-Entwicklungsprozess

8. Fragen und Diskussion

Abstract:

Test, Test, Test ...

Unit Tests mit Visual Objects und Vulcan.NET

Test-driven Development lässt sich hübsch ins Deutsche übersetzen: Testgetriebene Entwicklung. Die im Zuge der agilen Software-Entwicklung populär gewordene Methode setzt das Schreiben von automatisierten Tests vor die eigentliche Codierung. Die Tests treiben das Design der zu schreibenden Software voran und führen so nicht nur zu soliderem Code sondern fördern auch ein verständlicheres Klassendesign.

Während also der Rest der Software-Welt mit Werkzeugen wie JUnit, NUnit oder Visual Studio Team Services eine neue Qualität in die Programmierung bringt, hängt die VO-Gemeinde mangels äquivalenter Tools zurück. Mit Vulcan.NET, der ersten Xbase-Sprache für .NET, ändert sich das Bild. Michael Fischer demonstriert live am Beispiel einer einfachen Aufgabenstellung, wie sich testgetriebene Entwicklung mit Vulcan.NET und NUnit im Alltag anfühlt, welchen Einfluss die Methode auf das Endergebnis hat und warum man süchtig danach werden kann, jeden Programmierertag mit grünen Ampeln zu beschließen.

Und unter VO? Meinhard Schnoor-Matriciani hat für sein Team VOUnit entwickelt, eine einfache Implementierung von Unit Tests für Visual Objects. Im letzten Teil seiner Session stellt Michael Fischer VOUnit vor und zeigt, dass Sie auch für VO-Programme automatische Tests schreiben können. Der Sourcecode des Tools befindet sich auf der Konferenz-CD.

Page 3: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

3

Folie 3 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

1. Grundlagen

Testgetriebene Entwicklung

Als testgetriebene Entwicklung (engl. test-driven development, Abkürzung TDD) bezeichnet man eine Agile Methode zur Softwareentwicklung, bei der die Programmierer Software-Tests vor den zu testenden Komponenten entwickeln.

à Populär geworden durch Kent Becks Buch über Extreme Programming (1999)à Design-Methode und Bestandteil eines Softwareprozesses

Modultest

Modultests (engl. unit test) sind automatisiert ausführbare Codefragmente, die die öffentliche Schnittstelle einer Komponente (Klasse) verifizieren.

à Grey-Box-Testà fokussiert auf eine Aussage (atomar), unabhängig von einander (isoliert)

Agile Methoden sind Methoden zur Umsetzung eines Agilen Software-Entwicklungsprozesses wie z.B. des Extreme Programming. Die Agile Softwareentwicklung betont Werte, Prinzipien und Methoden gegenüber einer eventuell bürokratisch definierten Softwareentwicklung. Erst die Bewegung der agilen Prozesse hat die testgetriebene Entwicklung populär gemacht. TDD sollte immer im Kontext mit anderen agilen Methoden(Paarprogrammierung, Refactoring, fortlaufende Integration) gesehen werden.

Der Grey-Box-Test besitzt sowohl Aspekte des White-Box-Tests als auch des Black-Box-Tests. Mit dem White-Box-Test hat er gemeinsam, dass er ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben wird. Mit dem Black-Box-Test teilt er sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Test vor dem zu testenden System kommt.

Integrationstests (z.B. von Anwendern postulierte Funktionstests) sind dagegen eine aufeinander abgestimmte Reihe von Einzeltests, die dazu dienen, verschiedene voneinander abhängige Komponenten eines komplexen Systems im Zusammenspiel miteinander zu testen. Die erstmals im gemeinsamen Kontext zu testenden Komponenten haben jeweils einen Unit-Test erfolgreich bestanden und sind für sich isoliert fehlerfrei funktionsfähig. Im Gegensatz zu Modultests werden Integrationstests meist manuell ausgeführt. Sie sind nicht Thema dieses Vortrages.

Page 4: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

4

Folie 4 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

1. Grundlagen

Test Framework

Framework zur Ausführung automatisierter Tests. Besteht aus

n Klassen (und Attribute) zur Programmierung der Unit Tests

n Runner zur TestdurchführungConsole und GUI

n Integration in Entwicklungsumgebung (optional)

Der Console-Runner wird i.A. in einen übergeordneten Build-Prozess integriert.

Historie

•SUnit für Smalltalk gilt als Mutter der xUnit-Systeme

•JUnit für Java (Erich Gamma und Kent Beck)

•NUnit für die .NET Welt

Bemerkenswerterweise sind alle drei Systeme Open Source und werden von SourceForge.NET gehostet.

Implementierung

Die Implementierung von xUnit Frameworks in modernen Sprachen beruht heute auf diesen Sprachmerkmalen:

•Attribute (.NET) oder Annotations (Java) zur Kennzeichnung von Testfällen

•Dynamisches Laden von Libraries mit Testfall-Klassen in den Runner

•Reflection zur Analyse der Testfälle durch den Runner

Page 5: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

5

Folie 5 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

1. Grundlagen

Zyklus der testgetriebenen Entwicklung

1. Wähle den nächsten Test.Der Test soll einfach sein.

2. Schreibe den Test.Der Test muss fehlschlagen.

3. Sorge dafür, dass der Test funktioniert.Lass es grün leuchten! Schnell!

4. Räume den Code auf.Entferne doppelten Code, ändere Implementierungen wo notwendig, achte auf Codekonventionen.

Man kann nicht alles testen. Nichts zu testen ist Selbstmord. Wie findet man die richtigen, die lohnenden Tests?

Tests sind eine Wette. Man wettet entweder darauf, dass etwas funktioniert. Zeigt der Test das Gegenteil, ist nichts wichtiger, als den Test zum Laufen zu bringen. Oder man wettet darauf, dass etwas nicht funktioniert. Läuft der Test glatt durch, ist das fast noch beunruhigender, als der erste Fall. Hier muss untersucht werden, ob der Code intelligenter ist, als man dachte, oder ob man nur noch nicht den richtigen Test geschrieben hat. Mit der Zeit lernt man, die Tests zu schreiben, die sich auszahlen.

Code Coverage Analysen (Testgradabdeckung) können dabei helfen, die richtige Menge an Tests zu finden. Sie haben jedoch nur begrenzten Aussagewert hinsichtlich der Testqualität.

Page 6: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

6

Folie 6 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

1. Grundlagen

Vorteile von TDD

n WartbarkeitAufgrund der Tests muss niemand Angst haben, durch Änderungen an einer Komponente (Refactoring) existierende Funktionalität zu brechen.

n Design QualitätDer Entwickler einer Komponente muss seine eigenen Klassen konsumieren, bevor er sie schreiben kann.

n Code Qualität Mit der Anzahl der Tests wächst die Qualität des Codes.

n Weniger NebeneffekteProgrammierer arbeiten die meiste Zeit an korrekten Systemen.

Beck nennt als zusätzlichen Vorteil das Vertrauen des Entwicklers in seinen Code.

Ein weiterer Vorteil ist die Dokumentationsfunktion, die der Testcode übernimmt. Guter, knapp kommentierter Testcode ersetzt jedes Quick Start-Handbuch einer Komponente.

Page 7: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

7

Folie 7 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

1. Grundlagen

Probleme von TDD

n Existierende Projekteà keine Tests vorhanden à ggf. fehlendes Test Frameworkà unzureichende Trennung von GUI und funktionalem Code

n Ungeeignet für Anfänger„Wie soll ich etwas testen, das noch nicht vorhanden ist?“

n Schlechte Testswerden zu rosaroten Brillen.

n Isolation fällt schwerAbhängigkeit von externen Systemen (Schnittstellen, Datenbanken, Services)

n Unzureichende Tools für Datenbank-ProjekteTests von Server-side Business Logic sind ein Stiefkind der Testgemeinde

Existierendes System ohne vorhandene Tests, fehlendes Test Framework und unzureichende Trennung zwischen GUI und funktionalem Code: so lassen sich praktisch alle Visual Objects Projekte beschreiben. Auf diese Situation geht das Kapitel zu VOUnit ein.

Auf das Problem der Anfänger (gilt nicht nur für Programmieranfänger im Allgemeinen sondern auch für Anfänger bei Unit Tests) antwortet das Extreme Programming z.B. mit der Methode der Paarprogrammierung. Eine andere Antwort ist die Schulung von Entwicklern mit Hilfe von Test Patterns, wie sie z.B. Mark Clifton in seinem Artikel auf codeproject.combeschreibt.

Externe Systeme können über Mock-Objekte simuliert werden.

Page 8: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

8

Folie 8 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

2. NUnit vs. VSTS

NUnit

n (+) Open Source, kostenlos

n (+) Ausgereiftà Angelehnt an andere xUnit Implementierungen à Erstes Release 2002 à Version 2 zugeschnitten auf .NET Framework

n (+) Offenà VS 2003 à VS 2005 à VS Express à Sharp Develop à Mono

n (+) Geschaffen für TDD

n Add-Onsz.B. NCover für Code Coverage und TestDriven.NET für VS-Integration

Dieser Vortrag beruht auf Version 2.2.5

Page 9: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

9

Folie 9 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

2. NUnit vs. VSTS

Visual Studio 2005 Team System (VSTS)

n (+) Enge Verzahnung mit anderen Funktionen des Team SystemIDE Integration, Testsgradabdeckung, Projektmanagement, etc.

n (+) Test Case Generierung

n (-) Nur Visual Studio 2005 Team Editionen, hohe LizenzkostenVS 2005 Professional: 811,21 €VS 2005 Team Developer: 5.586,21 €(Zoschke, August 2006)

Fazit

Die meisten Teams sind mit einer Version von VS Standard oder Professional je Entwickler und NUnit gut gerüstet. Die mit Vulcan.NET kommende OEM-Version von Visual Studio reicht meines Erachtens nach nicht, da sie nicht die Integration von C# und VB.NET enthält. Die vielen Beispiele zur Programmierung mit .NET, die auf den einschlägigen Internet-Portalen (z.B. codeproject.com oder gotdotnet.com) zu finden sind, können damit nicht direkt in VS geöffnet und ausgeführt werden.

Page 10: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

10

Folie 10 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

3. Einführung in NUnit

Schritte zum SimpleVulcanTest.prg

n Neue Vulcan.NET Klassenbibliothek

n Referenz zu nunit.framework hinzufügenà sollte sich nach der Installation im GAC befinden

n Testklasse schreibenà notwendige Attribute und Methoden kommen aus dem Frameworkà danach Build der Assembly

n NUnit Projekt in der NUnit GUI anlegenà Assembly dem Projekt hinzufügenà Test kann sofort laufen

n NUnit Projekt der VS Solution hinzufügenà beim ersten Aufruf die NUnit GUI als Default Program definieren

Installation

Die Installation von NUnit ist denkbar einfach: auf www.nunit.org gehen, dort auf Download und die aktuelle Production Release herunterladen, am einfachsten das Windows installer package. Darauf achten, die Version für das .NET Framework 2.0 zu nehmen, da Vulcan.NET nur unter dieser Version läuft.

Einstellen der Class Library

Bei der neuen Class Library sollte man die üblichen Schritte zur Konfiguration der Assembly gleich zu Beginn durchführen:

• AssemblyInfo definieren

• Default Namespace in den Properties setzen

• In diesem Fall Treat Warnings As Errors in den General Settingsausschalten

Page 11: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

11

Folie 11 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

3. Einführung in NUnit

Test Klasse

Using SystemUsing NUnit.Framework

[TestFixture];Class SimpleVulcanTest

Protected value1 As IntProtected value2 As Int

[Setup]; Method Init() As Void Class SimpleVulcanTest

value1 := 2value2 := 3Return

[Test];Public Method Add() As Void Class Simple…

Local result As Intresult := value1 + value2Assert.AreEqual(6, result,

"Expected Failure.")Return

Ergebnis im GUI Runner

Und jetzt?

Lass es grün leuchten! Schnell!

Übungsaufgabe: SimpleVulcanTest.prg Testmethode für Testmethode abarbeiten und nach jeder Methode die Tests erneut durchführen.

Page 12: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

12

Folie 12 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

3. Einführung in NUnit

Attribute

n TestFixtureà Kennzeichnet eine ganze Klasse als Testklasse

n Setup und TearDownà Methoden werden vor und nach jeder Testmethode aufgerufen

n TestFixtureSetup und TestFixtureTearDownà Methoden werden einmal vor und nach allen Testmethoden aufgerufen

n Testà Kennzeichnet eine Methode als Test

n ExpectedExceptionà Zum Testen von erwarteten Ausnahmen (Exceptions)

n Weitere Attribute zur Steuerung der TestläufeIgnore, Platform, Category, Explicit

Page 13: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

13

Folie 13 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

3. Einführung in NUnit

Die Klasse im Reflector

Reflection

Die NUnit Runner (GUI und Console) sind ein schönes Beispiel für die Verwendung von Reflection im .Net Framework.

Die Attribute an der Klasse und an den Methoden, die man hier sieht, steuern den NUnit Runner. Dieser durchsucht per Reflection die geladenen Assemblies nach Testfällen. So weiß der NUnit Runner, welche Klassen er instanzieren und welche Methoden er ausführen muss.

Page 14: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

14

Folie 14 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

3. Einführung in NUnit

Assertions

Die statischen Methoden der Klasse Assert sind die wichtigsten Werkzeuge beim Schreiben von Testfällen.

n Equalityà Hat etwas den erwarteten Wert?AreEqual und AreNotEqual

n Conditionà Ist ein Objekt in einem erwarteten ZustandIsTrue, IsFalse, IsNull, IsNotNull, IsNaN, IsEmpty, IsNotEmpty

n Identityà Referenzieren zwei Variablen auf dasselbe Objekt?AreSame, AreNotSame und Contains

Alle Methoden haben zahlreiche Überladungen.

Page 15: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

15

Folie 15 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

3. Einführung in NUnit

Assertions

n Typeà Ist ein Objekt von einem bestimmten Typ?IsInstanceOf, IsNotInstanceOf, IsAssignableFrom, IsNotAssignableFrom

n Comparisonà Ist ein Objekt größer/kleiner als ein anderes?Greater und Less

Neuerungen in der kommenden Version 2.4 vor allem bei den Assertions:

•CollectionAssert

•FileAssert

•Assert-Methoden

Page 16: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

16

Folie 16 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

4. TDD Beispiel

Aufgabe: Stack-Klasse test driven entwickeln

Methoden und Eigenschaften der Klasse

n Push()à Objekt von oben auf den Stack legen

n Pop()à Objekt von oben wieder vom Stack nehmen und zurückgeben

n Top()à Oberstes Objekt vom Stack zurückgeben aber auf dem Stack lassen

n IsEmptyà true, wenn sich keine Objekte auf dem Stack befinden

basiert auf Kapitel 2 des Buchs von Jim Newkirk und Alexei Vorontsov.

Hört sich einfach an, oder?

Aufgabe: Schreiben Sie eine kurze Liste der Tests, die Sie benötigen werden.

Page 17: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

17

Folie 17 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

4. TDD Beispiel

Inhalte der Beispielsession

n Trennung von Code und Testcodeà Getrennte Bibliothekenà Testbibliothek referenziert NUnit.Framework und den eigentlichen Code

n Test-driven Design à Der Code folgt dem Test, TDD ist eine agile Methode, keine nachträgliche Pflichtaufgabe!

n Das Zielà Alles ist grün

n Debugging von Bibliotheken mit Unit Tests

Download des Buchkapitels zum Beispiel

Die Session wurde von C# auf Vulcan.NET. Sie basiert auf Kapitel 2 des Buchs von

Jim Newkirk und Alexei Vorontsov. Das Kapitel kann als PDF von www.testdriven.comheruntergeladen werden.

Der Vulcan.NET Sourcecode liegt dieser Präsentation bei.

Page 18: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

18

Folie 18 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

4. TDD Beispiel

Debugging

Der GUI Runner von NUnit eignet sich auch als Prozeß für das Debuggen von Code in Bibliotheken.

n NUnit GUI starten

n In Visual Studio: Debug, Attach to Process…à NUnit Prozeß auswählen

n Breakpoints im Sourcecode setzen

n Testmethode in NUnit laufen lassen

Alternative ist das (für professionelle Entwickler) kostenpflichtige Tool TestDriven.NET

Page 19: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

19

Folie 19 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

5. VOUnit

Probleme bei der Entwicklung eines Test Frameworks für Visual Objects

Begrenzte Fähigkeiten der Sprache VO:

n Keine AttributeàWie Klassen als TestFixture kennzeichnen ?àWie Methoden als Testmethoden kennzeichnen ?àWie erwartete Exceptions signalisieren ?

n Keine Interfacesà siehe dazu den Vortrag von Meinhard Schnoor-Matriciani über Design Patterns mit VO und Vulcan.NET

n Eingeschränkte Reflectionà ClassList, MethodList etc.

Page 20: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

20

Folie 20 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

5. VOUnit

TestFixture

Alle Tests stehen in DLLs. Die DLLs müssen folgende Funktion enthalten. Anhand dieser Funktion akzeptiert der Runner eine DLL als Testsuite.

Die Testklassen müssen von BaseTest vererben.

Der Runner betrachtet alle Klassen, die von BaseTest vererben, als TestFixtures.

Page 21: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

21

Folie 21 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

5. VOUnit

Attribute

Eine Beschreibung der Testmethoden im Konstruktur der Testklasseersetzt die Attribute.

Die Parameter an den Konstruktur von TestAttribute sind:

•symMethod

•nRepeat

•lIgnore

•aExpectedExceptions

Page 22: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

22

Folie 22 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

5. VOUnit

Assertions

VO kennt keine statischen Methoden. Aber Funktionen.

Page 23: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

23

Folie 23 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

5. VOUnit

Console Runner starten

Die Test-DLLs werden als Parameter an die Kommandozeile übergeben.

Status von VOUnit

VOUnit ist eine Beta-Version. Es fehlen noch dringend:

•GUI Runner

•Mehr Assert-Funktionen

Dennoch befindet sich VOUnit in unserem Entwicklungsteam bereits im Einsatz. Nun, da wir VOUnit zu Open Source machen, würden wir uns über Beiträge anderer Entwickler sehr freuen.

Page 24: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

24

Folie 24 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

5. VOUnit

Wann schreibe ich neue Tests?

n Fehlerbehebungà Erst den Test schreiben, der den Fehler reproduziert, dann den Fix.

n Code wird überarbeitet (Refactoring)àWas kann der alte Code eigentlich alles? Das ist der größte, frustrierendste und schwierigste Teil bei der Einführung.

n Neuer Codeà Es gelten dieselben Regeln wie bei komplett neuen Systemen.

n Unklare Schnittstellenà Ich weiß nicht, wie eine Komponente, Klasse oder Methode richtig verwendet wird.

„When we get bug reports, we're trying to follow a methodology of writinga test first that fails. Then we fix the bug and make sure the test passes.“

Don Caton, 08.08.06, auf vo.vops.vulcandotnet

Page 25: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

25

Folie 25 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

6. Mehr Testverfahren

Weitere Bereiche und entsprechende Tools sind:

n GUIà NUnitForms (Tests von System.Windows.Forms Applikationen)à Mercury und andere kommerzielle Toolsà MVC-Ansatz (Trennung von zu testendem Code und Darstellung)

n Mock ObjectsMock Objects bilden das Verhalten zu testender, externer Komponenten (z.B. serielle Schnittstellen) nach, damit automatische Tests laufen können.à NMock oder DotNetMock

n Datenbank-Codeà SQLUnit oder NDBUnit

n Webseitenà NUnitASP

MVC-Ansatz

Auch hier gilt der Verweis auf die Session von Meinhard Schnoor-Matriciani zu Design Patterns.

Eine Reihe der hier genannten Tools sind Add-Ons zu NUnit.

SQLUnit

Das sicher recht leistungsfähige Tool ist in Java geschrieben und baut für Entwickler aus dem Bereich VO oder DotNet leider recht hohe Hürden hinsichtlich Installation und Definition der Tests auf. Ein gleichwertiges Pendant in der DotNet-Welt fehlt noch.

Page 26: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

26

Folie 26 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

7. Integration von TDD in den Software-Entwicklungsprozess

Ziel der Einführung von TDD muss die Integration in einen allgemeinen Qualitätsprozess (z.B. Extreme Programming) oder andere Agile Methoden sein.

Dazu gehören:

n Versionskontrollsystemà CVSNT, SubVersion, MS Team Services

n Build Toolsfür kontinuierliche Builds auf einem zentralen Integrationsrechnerà NAnt, MSBuild, CruiseControl.NET, FinalBuilder

n Qualitätssicherungà Code Coverage mit NCover und NCoverExploreà Kodierungsregeln überprüfen mit FXCopà Design Patterns

Build Tools

NAnt: Der Klassiker der Open Source Gemeinde, sehr umfangreich, viele Plugins.

MSBuild: Bestandteil des .NET SDK, kann Visual Studio Solution Files (.SLN) laden.

CruiseControl: http://sourceforge.net/projects/ccnet/

FinalBuilder: http://www.finalbuilder.com/

Page 27: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

27

Folie 27 von 27

Testgetriebene Entwicklungmit Vulcan.NET und Visual Objects

8. Fragen und Diskussion

?

Page 28: Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects · 2006. 11. 22. · Testgetriebene Entwicklung mit Vulcan.NETund Visual Objects 1. Grundlagen Testgetriebene Entwicklung

28

Vielen Dank für Ihre Aufmerksamkeit!

Gesellschaft für Softwareentwicklung und Unternehmensberatung mbH

Martinstrasse 144137 Dortmund

[email protected]

Literaturverzeichnis

Newkirk, Jim; Vorontsov, Alexei: Test-Driven Development in Microsoft .Net, Microsoft Press 2004.

Wikipediahttp://de.wikipedia.org/wiki/Agile_Methodehttp://de.wikipedia.org/wiki/Testgetriebene_Entwicklunghttp://de.wikipedia.org/wiki/Unit-Test

Homepage von NUnit: www.nunit.org

Beck, Kent: Extreme Programming. Die revolutionäre Methode für Softwareentwicklung in kleinen Teams; Addison Wesley 2000.

Fowler, Martin: Refactoring: Improving the Design of Existing Code, AddisonWesley 1999.

Clifton, Mark: Advanced Unit Test, Part V - Unit Test Patternshttp://www.codeproject.com/gen/design/autp5.asp

Ein schöner Überblick über Bücher, Software und Links hierzu findet sich in diesem Blog:

http://codebetter.com/blogs/darrell.norton/articles/50337.aspx