13.07.2015 Aufrufe

Testgetriebene Entwicklung mit Vulcan.NET und Visual Objects

Testgetriebene Entwicklung mit Vulcan.NET und Visual Objects

Testgetriebene Entwicklung mit Vulcan.NET und Visual Objects

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

egrüßt Sie herzlichzum Vortrag auf der VODC 2006<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>DozentMichael FischerCopyright © 2006Fischer & Consultants GmbH (F&C)Martinstrasse 144137 Dortm<strong>und</strong>www.appfact.comKontakt: Michael FischerEmail mifi@appfact.dePhone +49 (172) 6801489Fax +49 (941) 5992120111


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>Inhalt1.Gr<strong>und</strong>lagen2.Wahl der Waffen unter.<strong>NET</strong>:NUnit vs. VSTS3.Einführung in NUnit4.Eine Klasse im LebeneinesTest Driven Developers5.VOUnit6.Mehr Testverfahren7.Integration von TDD inden Software-<strong>Entwicklung</strong>sprozess8.Fragen <strong>und</strong> DiskussionFolie 2 von 27Abstract:Test, Test, Test ...Unit Tests <strong>mit</strong> <strong>Visual</strong> <strong>Objects</strong> <strong>und</strong> <strong>Vulcan</strong>.<strong>NET</strong>Test-driven Development lässt sich hübsch ins Deutsche übersetzen: <strong>Testgetriebene</strong><strong>Entwicklung</strong>. Die im Zuge der agilen Software-<strong>Entwicklung</strong> populär gewordeneMethode setzt das Schreiben von automatisierten Tests vor die eigentlicheCodierung. Die Tests treiben das Design der zu schreibenden Software voran <strong>und</strong>führen so nicht nur zu soliderem Code sondern fördern auch ein verständlicheresKlassendesign.Während also der Rest der Software-Welt <strong>mit</strong> Werkzeugen wie JUnit, NUnit oder<strong>Visual</strong> Studio Team Services eine neue Qualität in die Programmierung bringt, hängtdie VO-Gemeinde mangels äquivalenter Tools zurück. Mit <strong>Vulcan</strong>.<strong>NET</strong>, der erstenXbase-Sprache für .<strong>NET</strong>, ändert sich das Bild. Michael Fischer demonstriert live amBeispiel einer einfachen Aufgabenstellung, wie sich testgetriebene <strong>Entwicklung</strong> <strong>mit</strong><strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> NUnit im Alltag anfühlt, welchen Einfluss die Methode auf dasEndergebnis hat <strong>und</strong> warum man süchtig danach werden kann, jedenProgrammierertag <strong>mit</strong> 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 <strong>Visual</strong> <strong>Objects</strong>. Im letzten Teilseiner Session stellt Michael Fischer VOUnit vor <strong>und</strong> zeigt, dass Sie auch für VO-Programme automatische Tests schreiben können. Der Sourcecode des Tools befindetsich auf der Konferenz-CD.2


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>1. Gr<strong>und</strong>lagen<strong>Testgetriebene</strong> <strong>Entwicklung</strong>Als testgetriebene <strong>Entwicklung</strong> (engl. test-driven development, Abkürzung TDD)bezeichnet man eine Agile Methode zur Softwareentwicklung, bei der dieProgrammierer Software-Tests vor den zu testenden Komponenten entwickeln.Populär geworden durch Kent Becks Buch über Extreme Programming (1999)Design-Methode <strong>und</strong> Bestandteil eines SoftwareprozessesModultestModultests (engl. unit test) sind automatisiert ausführbare Codefragmente,die die öffentliche Schnittstelle einer Komponente (Klasse) verifizieren.Grey-Box-Testfokussiert auf eine Aussage (atomar), unabhängig von einander (isoliert)Folie 3 von 27Agile Methoden sind Methoden zur Umsetzung eines Agilen Software-<strong>Entwicklung</strong>sprozesses wie z.B. des Extreme Programming. Die AgileSoftwareentwicklung betont Werte, Prinzipien <strong>und</strong> Methoden gegenübereiner eventuell bürokratisch definierten Softwareentwicklung. Erst dieBewegung der agilen Prozesse hat die testgetriebene <strong>Entwicklung</strong> populärgemacht. TDD sollte immer im Kontext <strong>mit</strong> anderen agilen Methoden(Paarprogrammierung, Refactoring, fortlaufende Integration) gesehenwerden.Der Grey-Box-Test besitzt sowohl Aspekte des White-Box-Tests als auch desBlack-Box-Tests. Mit dem White-Box-Test hat er gemeinsam, dass erebenfalls von den gleichen Entwicklern wie das zu testende Systemgeschrieben wird. Mit dem Black-Box-Test teilt er sich anfänglich dieUnkenntnis über die Interna des zu testenden Systems, weil der Test vordem zu testenden System kommt.Integrationstests (z.B. von Anwendern postulierte Funktionstests) sinddagegen eine aufeinander abgestimmte Reihe von Einzeltests, die dazudienen, verschiedene voneinander abhängige Komponenten eines komplexenSystems im Zusammenspiel <strong>mit</strong>einander zu testen. Die erstmals imgemeinsamen Kontext zu testenden Komponenten haben jeweils einen Unit-Test erfolgreich bestanden <strong>und</strong> sind für sich isoliert fehlerfreifunktionsfähig. Im Gegensatz zu Modultests werden Integrationstests meistmanuell ausgeführt. Sie sind nicht Thema dieses Vortrages.3


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>1. Gr<strong>und</strong>lagenTest FrameworkFramework zur Ausführung automatisierter Tests. Besteht aus• Klassen (<strong>und</strong> Attribute) zur Programmierung der Unit Tests• Runner zur TestdurchführungConsole <strong>und</strong> GUI• Integration in <strong>Entwicklung</strong>sumgebung (optional)Der Console-Runner wird i.A. in einen übergeordneten Build-Prozess integriert.Folie 4 von 27Historie•SUnit für Smalltalk gilt als Mutter der xUnit-Systeme•JUnit für Java (Erich Gamma <strong>und</strong> Kent Beck)•NUnit für die .<strong>NET</strong> WeltBemerkenswerterweise sind alle drei Systeme Open Source <strong>und</strong> werden vonSourceForge.<strong>NET</strong> gehostet.ImplementierungDie Implementierung von xUnit Frameworks in modernen Sprachen beruhtheute auf diesen Sprachmerkmalen:•Attribute (.<strong>NET</strong>) oder Annotations (Java) zur Kennzeichnung von Testfällen•Dynamisches Laden von Libraries <strong>mit</strong> Testfall-Klassen in den Runner•Reflection zur Analyse der Testfälle durch den Runner4


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>1. Gr<strong>und</strong>lagenZyklus der testgetriebenen <strong>Entwicklung</strong>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.Folie 5 von 27Man kann nicht alles testen. Nichts zu testen ist Selbstmord. Wie findet mandie richtigen, die lohnenden Tests?Tests sind eine Wette. Man wettet entweder darauf, dass etwasfunktioniert. Zeigt der Test das Gegenteil, ist nichts wichtiger, als den Testzum Laufen zu bringen. Oder man wettet darauf, dass etwas nichtfunktioniert. Läuft der Test glatt durch, ist das fast noch beunruhigender,als der erste Fall. Hier muss untersucht werden, ob der Code intelligenterist, als man dachte, oder ob man nur noch nicht den richtigen Testgeschrieben hat. Mit der Zeit lernt man, die Tests zu schreiben, die sichauszahlen.Code Coverage Analysen (Testgradabdeckung) können dabei helfen, dierichtige Menge an Tests zu finden. Sie haben jedoch nur begrenztenAussagewert hinsichtlich der Testqualität.5


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>1. Gr<strong>und</strong>lagenVorteile von TDD• WartbarkeitAufgr<strong>und</strong> der Tests muss niemand Angst haben, durch Änderungen an einerKomponente (Refactoring) existierende Funktionalität zu brechen.• Design QualitätDer Entwickler einer Komponente muss seine eigenen Klassen konsumieren,bevor er sie schreiben kann.• Code QualitätMit der Anzahl der Tests wächst die Qualität des Codes.• Weniger NebeneffekteProgrammierer arbeiten die meiste Zeit an korrekten Systemen.Folie 6 von 27Beck nennt als zusätzlichen Vorteil das Vertrauen des Entwicklers in seinenCode.Ein weiterer Vorteil ist die Dokumentationsfunktion, die der Testcodeübernimmt. Guter, knapp kommentierter Testcode ersetzt jedes Quick Start-Handbuch einer Komponente.6


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>1. Gr<strong>und</strong>lagenProbleme von TDD• Existierende Projektekeine Tests vorhanden ggf. fehlendes Test Frameworkunzureichende Trennung von GUI <strong>und</strong> funktionalem Code• Ungeeignet für Anfänger„Wie soll ich etwas testen, das noch nicht vorhanden ist?“• Schlechte Testswerden zu rosaroten Brillen.• Isolation fällt schwerAbhängigkeit von externen Systemen(Schnittstellen, Datenbanken, Services)• Unzureichende Tools für Datenbank-ProjekteTests von Server-side Business Logic sind ein Stiefkind der TestgemeindeFolie 7 von 27Existierendes System ohne vorhandene Tests, fehlendes Test Framework <strong>und</strong>unzureichende Trennung zwischen GUI <strong>und</strong> funktionalem Code: so lassen sichpraktisch alle <strong>Visual</strong> <strong>Objects</strong> Projekte beschreiben. Auf diese Situation gehtdas Kapitel zu VOUnit ein.Auf das Problem der Anfänger (gilt nicht nur für Programmieranfänger imAllgemeinen sondern auch für Anfänger bei Unit Tests) antwortet dasExtreme Programming z.B. <strong>mit</strong> der Methode der Paarprogrammierung. Eineandere Antwort ist die Schulung von Entwicklern <strong>mit</strong> Hilfe von TestPatterns, wie sie z.B. Mark Clifton in seinem Artikel auf codeproject.combeschreibt.Externe Systeme können über Mock-Objekte simuliert werden.7


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>2. NUnit vs. VSTSNUnit• (+) Open Source, kostenlos• (+) AusgereiftAngelehnt an andere xUnit ImplementierungenErstes Release 2002Version 2 zugeschnitten auf .<strong>NET</strong> Framework• (+) OffenVS 2003 VS 2005 VS Express Sharp Develop Mono• (+) Geschaffen für TDD• Add-Onsz.B. NCover für Code Coverage <strong>und</strong> TestDriven.<strong>NET</strong> für VS-IntegrationFolie 8 von 27Dieser Vortrag beruht auf Version 2.2.58


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>2. NUnit vs. VSTS<strong>Visual</strong> Studio 2005 Team System (VSTS)• (+) Enge Verzahnung <strong>mit</strong> anderen Funktionen des Team SystemIDE Integration, Testsgradabdeckung, Projektmanagement, etc.• (+) Test Case Generierung• (-) Nur <strong>Visual</strong> Studio 2005 Team Editionen, hohe LizenzkostenVS 2005 Professional: 811,21 €VS 2005 Team Developer: 5.586,21 €(Zoschke, August 2006)Folie 9 von 27FazitDie meisten Teams sind <strong>mit</strong> einer Version von VS Standard oder Professionalje Entwickler <strong>und</strong> NUnit gut gerüstet. Die <strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> kommende OEM-Version von <strong>Visual</strong> Studio reicht meines Erachtens nach nicht, da sie nichtdie Integration von C# <strong>und</strong> VB.<strong>NET</strong> enthält. Die vielen Beispiele zurProgrammierung <strong>mit</strong> .<strong>NET</strong>, die auf den einschlägigen Internet-Portalen (z.B.codeproject.com oder gotdotnet.com) zu finden sind, können da<strong>mit</strong> nichtdirekt in VS geöffnet <strong>und</strong> ausgeführt werden.9


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>3. Einführung in NUnitSchritte zum Simple<strong>Vulcan</strong>Test.prg• Neue <strong>Vulcan</strong>.<strong>NET</strong> Klassenbibliothek• Referenz zu nunit.framework hinzufügensollte sich nach der Installation im GAC befinden• Testklasse schreibennotwendige Attribute <strong>und</strong> Methoden kommen aus dem Frameworkdanach Build der Assembly• NUnit Projekt in der NUnit GUI anlegenAssembly dem Projekt hinzufügenTest kann sofort laufen• NUnit Projekt der VS Solution hinzufügenbeim ersten Aufruf die NUnit GUI als Default Program definierenFolie 10 von 27InstallationDie Installation von NUnit ist denkbar einfach: auf www.nunit.org gehen,dort auf Download <strong>und</strong> die aktuelle Production Release herunterladen, ameinfachsten das Windows installer package. Darauf achten, die Version fürdas .<strong>NET</strong> Framework 2.0 zu nehmen, da <strong>Vulcan</strong>.<strong>NET</strong> nur unter dieser Versionläuft.Einstellen der Class LibraryBei der neuen Class Library sollte man die üblichen Schritte zurKonfiguration 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 Settingsausschalten10


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>3. Einführung in NUnitTest KlasseErgebnis im GUI RunnerUsing SystemUsing NUnit.Framework[TestFixture];Class Simple<strong>Vulcan</strong>TestProtected value1 As IntProtected value2 As Int[Setup];Method Init() As Void Class Simple<strong>Vulcan</strong>Testvalue1 := 2value2 := 3Return[Test];Public Method Add() As Void Class Simple…Local result As Intresult := value1 + value2Assert.AreEqual(6, result,"Expected Failure.")ReturnFolie 11 von 27Und jetzt?Lass es grün leuchten! Schnell!Übungsaufgabe: Simple<strong>Vulcan</strong>Test.prg Testmethode für Testmethodeabarbeiten <strong>und</strong> nach jeder Methode die Tests erneut durchführen.11


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>3. Einführung in NUnitAttribute• TestFixtureKennzeichnet eine ganze Klasse als Testklasse• Setup <strong>und</strong> TearDownMethoden werden vor <strong>und</strong> nach jeder Testmethode aufgerufen• TestFixtureSetup <strong>und</strong> TestFixtureTearDownMethoden werden einmal vor <strong>und</strong> nach allen Testmethoden aufgerufen• TestKennzeichnet eine Methode als Test• ExpectedExceptionZum Testen von erwarteten Ausnahmen (Exceptions)• Weitere Attribute zur Steuerung der TestläufeIgnore, Platform, Category, ExplicitFolie 12 von 2712


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>3. Einführung in NUnitDie Klasse im ReflectorFolie 13 von 27ReflectionDie NUnit Runner (GUI <strong>und</strong> Console) sind ein schönes Beispiel für dieVerwendung von Reflection im .Net Framework.Die Attribute an der Klasse <strong>und</strong> an den Methoden, die man hier sieht,steuern den NUnit Runner. Dieser durchsucht per Reflection die geladenenAssemblies nach Testfällen. So weiß der NUnit Runner, welche Klassen erinstanzieren <strong>und</strong> welche Methoden er ausführen muss.13


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>3. Einführung in NUnitAssertionsDie statischen Methoden der Klasse Assert sind die wichtigsten Werkzeuge beimSchreiben von Testfällen.• EqualityHat etwas den erwarteten Wert?AreEqual <strong>und</strong> AreNotEqual• ConditionIst ein Objekt in einem erwarteten ZustandIsTrue, IsFalse, IsNull, IsNotNull, IsNaN, IsEmpty, IsNotEmpty• IdentityReferenzierenzwei Variablen auf dasselbe Objekt?AreSame, AreNotSame <strong>und</strong> ContainsFolie 14 von 27Alle Methoden haben zahlreiche Überladungen.14


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>3. Einführung in NUnitAssertions• TypeIst ein Objekt von einem bestimmten Typ?IsInstanceOf, IsNotInstanceOf,IsAssignableFrom, IsNotAssignableFrom• ComparisonIst ein Objekt größer/kleiner als ein anderes?Greater <strong>und</strong> LessFolie 15 von 27Neuerungen in der kommenden Version 2.4 vor allem bei den Assertions:•CollectionAssert•FileAssert•Assert-Methoden15


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>4. TDD BeispielAufgabe: Stack-Klasse test driven entwickelnMethoden <strong>und</strong> Eigenschaften der Klasse• Push()Objekt von oben auf den Stack legen• Pop()Objekt von oben wieder vom Stack nehmen <strong>und</strong> zurückgeben• Top()Oberstes Objekt vom Stack zurückgeben aber auf dem Stack lassen• IsEmptytrue, wenn sich keine Objekte auf dem Stack befindenbasiert auf Kapitel 2 des Buchs von Jim Newkirk <strong>und</strong> Alexei Vorontsov.Folie 16 von 27Hört sich einfach an, oder?Aufgabe: Schreiben Sie eine kurze Liste der Tests, die Sie benötigen werden.16


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>4. TDD BeispielInhalte der Beispielsession• Trennung von Code <strong>und</strong> TestcodeGetrennte BibliothekenTestbibliothek referenziert NUnit.Framework <strong>und</strong> den eigentlichen Code• Test-driven DesignDer Code folgt dem Test, TDD ist eine agile Methode,keine nachträgliche Pflichtaufgabe!• Das ZielAlles ist grün• Debugging von Bibliotheken <strong>mit</strong> Unit TestsFolie 17 von 27Download des Buchkapitels zum BeispielDie Session wurde von C# auf <strong>Vulcan</strong>.<strong>NET</strong>. Sie basiert auf Kapitel 2 des Buchs vonJim Newkirk <strong>und</strong> Alexei Vorontsov. Das Kapitel kann als PDF von www.testdriven.comheruntergeladen werden.Der <strong>Vulcan</strong>.<strong>NET</strong> Sourcecode liegt dieser Präsentation bei.17


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>4. TDD BeispielDebuggingDer GUI Runner von NUnit eignet sich auch als Prozeß für das Debuggen vonCode in Bibliotheken.• NUnit GUI starten• In <strong>Visual</strong> Studio: Debug, Attach to Process…NUnit Prozeß auswählen• Breakpoints im Sourcecode setzen• Testmethode in NUnit laufen lassenAlternative ist das (für professionelle Entwickler) kostenpflichtige ToolTestDriven.<strong>NET</strong>Folie 18 von 2718


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>5. VOUnitProbleme bei der <strong>Entwicklung</strong> eines Test Frameworks für <strong>Visual</strong> <strong>Objects</strong>Begrenzte Fähigkeiten der Sprache VO:• Keine AttributeWie Klassen als TestFixture kennzeichnen ?Wie Methoden als Testmethoden kennzeichnen ?Wie erwartete Exceptions signalisieren ?• Keine Interfacessiehe dazu den Vortrag von Meinhard Schnoor-Matricianiüber Design Patterns <strong>mit</strong> VO <strong>und</strong> <strong>Vulcan</strong>.<strong>NET</strong>• Eingeschränkte ReflectionClassList, MethodList etc.Folie 19 von 2719


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>5. VOUnitTestFixtureAlle Tests stehen in DLLs. Die DLLsmü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.Folie 20 von 2720


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>5. VOUnitAttributeEine Beschreibung der Testmethoden im Konstruktur der Testklasseersetzt die Attribute.Folie 21 von 27Die Parameter an den Konstruktur von TestAttribute sind:•symMethod•nRepeat•lIgnore•aExpectedExceptions21


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>5. VOUnitAssertionsVO kennt keine statischen Methoden. Aber Funktionen.Folie 22 von 2722


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>5. VOUnitConsole Runner startenDie Test-DLLs werden als Parameter an die Kommandozeile übergeben.Folie 23 von 27Status von VOUnitVOUnit ist eine Beta-Version. Es fehlen noch dringend:•GUI Runner•Mehr Assert-FunktionenDennoch befindet sich VOUnit in unserem <strong>Entwicklung</strong>steam bereits imEinsatz. Nun, da wir VOUnit zu Open Source machen, würden wir uns überBeiträge anderer Entwickler sehr freuen.23


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>5. VOUnitWann schreibe ich neue Tests?• FehlerbehebungErst den Test schreiben, der den Fehler reproduziert, dann den Fix.• Code wird überarbeitet (Refactoring)Was kann der alte Code eigentlich alles?Das ist der größte, frustrierendste <strong>und</strong> schwierigste Teil bei der Einführung.• Neuer CodeEs gelten dieselben Regeln wie bei komplett neuen Systemen.• Unklare SchnittstellenIch weiß nicht, wie eine Komponente, Klasse oder Methoderichtig verwendet wird.Folie 24 von 27„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.vulcandotnet24


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>6. Mehr TestverfahrenWeitere Bereiche <strong>und</strong> entsprechende Tools sind:• GUINUnitForms (Tests von System.Windows.FormsApplikationen)Mercury <strong>und</strong> andere kommerzielle ToolsMVC-Ansatz (Trennung von zu testendem Code <strong>und</strong> Darstellung)• Mock <strong>Objects</strong>Mock <strong>Objects</strong> bilden das Verhalten zu testender, externer Komponenten(z.B. serielle Schnittstellen) nach, da<strong>mit</strong> automatische Tests laufen können.NMock oder DotNetMock• Datenbank-CodeSQLUnit oder NDBUnit• WebseitenNUnitASPFolie 25 von 27MVC-AnsatzAuch hier gilt der Verweis auf die Session von Meinhard Schnoor-Matricianizu Design Patterns.Eine Reihe der hier genannten Tools sind Add-Ons zu NUnit.SQLUnitDas sicher recht leistungsfähige Tool ist in Java geschrieben <strong>und</strong> baut fürEntwickler aus dem Bereich VO oder DotNet leider recht hohe Hürdenhinsichtlich Installation <strong>und</strong> Definition der Tests auf. Ein gleichwertigesPendant in der DotNet-Welt fehlt noch.25


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>7. Integration von TDD in den Software-<strong>Entwicklung</strong>sprozessZiel der Einführung von TDD muss die Integration in einen allgemeinenQualitätsprozess (z.B. Extreme Programming) oder andere Agile Methoden sein.Dazu gehören:• VersionskontrollsystemCVSNT, SubVersion, MS Team Services• Build Toolsfür kontinuierliche Builds auf einem zentralen IntegrationsrechnerNAnt, MSBuild, CruiseControl.<strong>NET</strong>, FinalBuilder• QualitätssicherungCode Coverage <strong>mit</strong> NCover <strong>und</strong> NCoverExploreKodierungsregeln überprüfen <strong>mit</strong> FXCopDesign PatternsFolie 26 von 27Build ToolsNAnt: Der Klassiker der Open Source Gemeinde, sehr umfangreich, vielePlugins.MSBuild: Bestandteil des .<strong>NET</strong> SDK, kann <strong>Visual</strong> Studio Solution Files (.SLN)laden.CruiseControl: http://sourceforge.net/projects/ccnet/FinalBuilder: http://www.finalbuilder.com/26


<strong>Testgetriebene</strong> <strong>Entwicklung</strong><strong>mit</strong> <strong>Vulcan</strong>.<strong>NET</strong> <strong>und</strong> <strong>Visual</strong> <strong>Objects</strong>8. Fragen <strong>und</strong> Diskussion?Folie 27 von 2727


Vielen Dank für Ihre Aufmerksamkeit!Gesellschaft für Softwareentwicklung<strong>und</strong> Unternehmensberatung mbHMartinstrasse 144137 Dortm<strong>und</strong>www.appfact.commifi@appfact.deLiteraturverzeichnisNewkirk, Jim; Vorontsov, Alexei: Test-Driven Development in Microsoft .Net,Microsoft Press 2004.Wikipediahttp://de.wikipedia.org/wiki/Agile_Methodehttp://de.wikipedia.org/wiki/<strong>Testgetriebene</strong>_<strong>Entwicklung</strong>http://de.wikipedia.org/wiki/Unit-TestHomepage von NUnit: www.nunit.orgBeck, Kent: Extreme Programming. Die revolutionäre Methode fürSoftwareentwicklung 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.aspEin schöner Überblick über Bücher, Software <strong>und</strong> Links hierzu findet sich indiesem Blog:http://codebetter.com/blogs/darrell.norton/articles/50337.aspx28

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!