TypeMock Isolator, Mock-Framework für Brownfield und mehr

May 19th, 2010

Ich habe das Vergnügen, am 28. Mai auf der diesjährigen dotnet-cologne hier in Köln einen Vortrag zu Brownfield Projekten zu halten. Wer mich kennt imageweiß, dass ich nicht für Marketingvorträge zur Verfügung stehe. Wenn ein Produkt gut ist, sage ich es. Und wenn es nix taugt, sage ich das  auch ;-) Der Vortrag dreht sich zwar um ein konkretes Produkt, nämlich den TypeMock Isolator, aber in der Hauptsache wird es darum gehen, wie man Brownfield Projekte saniert. Darüber schreibe ich auch gerade mit Ralf Westphal bei Heise Developer eine Artikelserie, die ersten drei Artikel sind bereits online.

Der Schwerpunkt des Vortrags liegt auf der Einführung von automatisierten Tests in Brownfield Projekten. Diese Projekte zeichnen sich dadurch aus, dass praktisch keine Architektur vorhanden ist, von automatisierten Tests ganz zu schweigen. In einem solchen undurchschaubaren Klumpen automatisierte Tests einzuführen, ist eine große Herausforderung. Ohne leistungsfähige Testwerkzeuge wie den Isolator ist da praktisch nichts zu machen. Denken Sie allein an Code in Formularen: wenn der zu testende Code gespickt ist mit MessageBox.Show Aufrufen oder Dialoge wie der FileOpenDialog verwendet werden, ist automatisiertes Testen schwierig.

Im Vortrag zeige ich an einigen kleinen Demos, wie man mit TypeMock Isolator Tests in Brownfield Projekten ergänzen kann. Diese sind die Basis für Refaktorisierungen.

Wer einen der begehrten Plätze zur dotnet-cologne ergattern konnte ist eingeladen, meinen Vortrag zu hören. Da ich mit dem Mittagessen konkurrieren muss (Lunch Session), bin ich gespannt wieviele Zuhörer sich einfinden werden…

Kick it on dotnet-kicks.de

Automatisiertes Testen und Silverlight

May 11th, 2010

Silverlight ist inzwischen bei Version 4 angekommen und Microsoft bietet immer noch keine vernünftige Unterstützung für automatisierte Tests. Ja, ich weiß, es gibt das Silverlight Unit Test Framework aus dem Toolkit. Aber das ist, mit Verlaub, nicht praxistauglich. Dass Silverlight Code in der CoreCLR laufen muss und damit Unit Tests etwas aufwändiger zu realisieren sind, ist mir technisch völlig klar. Aber wieso drückt sich Microsoft davor, auf dem Gebiet seine Hausaufgaben zu machen? Wieso gibt es vom Hersteller selbst keine Unterstützung für Tests, die innerhalb von Visual Studio laufen? Wieso kann ich nicht per Knopfdruck einen einzelnen Test starten?

Die Arbeit mit Microsofts Silverlight Unit Test Framework ist lästig. Denn ich muss den Testrunner, der im Web-Browser läuft, mit Ctrl-F5 starten. Wenn ich mal Tests, mal die Silverlight Anwendung starten möchte, muss ich andauernd das Startproimagejekt ändern. Testgetriebene Entwicklung ist nur möglich, wenn ich einzelne Tests per Shortcut starten kann: einen Test schreiben, laufen lassen, rot. Implementieren, Test erneut laufen lassen, grün. Nächsten Test schreiben… Das alles geht nicht, solange der Testrunner im Browser läuft. Und wenn sich dann beim Start des Testrunners erst noch ein Popup öffnet, welches 5 Sekunden darauf wartet, ob ich möglicherweise nur Tests mit einem bestimmten Tag starten möchte, weiß ich, dass dieses Werkzeug definitiv nicht für die testgetriebene Entwicklung entworfen wurde. Schade.

Weiterhin halte ich es für sehr bedenklich, dass die Community sich nicht rührt. Wie testet ihr euer Silverlight Zeugs denn automatisiert? Garnicht?

Sorry für mein Lamentieren… aber ich verfolge das Thema nun schon seit Silverlight 1.1. Und seitdem hat sich nichts nennenswert verändert. Oder habe ich was übersehen?

Kick it on dotnet-kicks.de

O/R Mapper powerday

May 7th, 2010

Am 22. Juni 2010 findet in München der O/R Mapper powerday statt. Veranstalter ist die NMG, Herausgeber der Zeitschriften dotnetpro und databasepro.

An diesem Tag dreht sich alles um die Frage, wie datengetriebene powerday banner juni 200x120 speaker 3Anwendungen entwickelt werden. Dabei liegt der Schwerpunkt der  Vorträge darauf, jeweils Ende-zu-Ende Szenarien zu zeigen. Neben einer Einführung über Herausforderungen und Lösungsansätze heutiger O/R-Mapper werden folgende Szenarien beleuchet:

  • ASP.NET-Anwendungen mit NHibernate
    Gregor Binswanger
  • Anwendungen mit dem Entity Framework 4 erstellen
    Dariusz Parys
  • OpenAccess in Silverlight-Anwendungen
    Jan Blessenohl

Interessenten sollten sich beeilen, bis zum 11. Mai gilt noch der Frühbucherrabatt.

Kick it on dotnet-kicks.de

Brownfield 3. Teil erschienen

March 19th, 2010

Bei heise.de ist der dritte Teil der Brownfield Serie erschienen. Diesmal hat es leider etwas länger gedauert,  der 4. Teil sollte aber wieder “pünktlich” in 4 Wochen erscheinen.

Kick it on dotnet-kicks.de

TDD Workshop

January 8th, 2010

Im Rahmen der VSone Konferenz in München halte ich am 26. Februar 2010 einen Tagesworkshop zum Thema testgetriebene Entwicklung.

Der Workshop richtet sich an Entwickler, die einen leichten Einstieg in die testgetriebene Entwicklung suchen. Anhand zahlreicher Beispiele und Übungen wird die Vorgehensweise dargestellt und geübt. Dabei verwende ich Konzepte und Lernmethoden die sich in den Clean Code Developer Seminaren bewährt haben: die Teilnehmer sind intensiv in den Lernprozess eingebunden. Jemandem beim TDD zuschauen ist eine Sache; Ziel ist es, es selbst zu tun. Die Inhalte werden daher in Übungen vermittelt. Alle Übungen werden anschließend besprochen und mit den Teilnehmern diskutiert.

Details zu den Inhalten

Jetzt anmelden!

Kick it on dotnet-kicks.de

Jahresrückblick eines Clean Code Developers

December 22nd, 2009

Ziemlich genau vor einem Jahr ist die Clean Code Developer Initiative online gegangen. Ralf Westphal und ich hatten ursprünglich den 1.1.2009 angepeilt, sind dann aber schon ein paar Tage früher fertig geworden. Was sich dann so alles ereignet hat, hat uns wirklich überrascht. Angenehm glücklicherweise ;-)

Zunächst wurde nämlich schon das erste Clean Code Developer Camp in Hamburg gebucht, bevor wir mit den CCD Inhalten im Wiki komplett fertig waren. Das Camp lief über insgesamt 10 Tage, aufgeteilt auf 2 Wochen, die von einer kurzen Pause unterbrochen waren. Ein voller Erfolg! Dennoch beschlich uns das Gefühl, dass es zur “Druckbetankung” möglicherweise eine Ergänzung geben sollte. So haben wir die Idee der School of .NET diskutiert, durchaus auch öffentlich (siehe z.B. hier und hier und hier).

Bei der School of .NET geht es uns vor allem darum, zwischen den einzelnen Einheiten immer wieder Pausen einzulegen, in denen die Teilnehmer sich in ihrem Alltag mit dem gelernten auseinandersetzen können. Dies bietet dann auch gleich noch die Möglichkeit, zur Vertiefung des Stoffes Hausaufgaben lösen zu lassen. So wurde das Camp mit seinen 2 x 5 Tagen ergänzt durch die School mit 7 x 2 Tagen (die ersten Kurse waren etwas unregelmäßiger, da waren auch mal Einzeltage dabei). Im kommenden Jahr bieten wir sowohl das Camp als auch die School wieder an. In München sind noch ein paar Plätze frei, Details siehe hier.

Eine Konstante hat sich in beiden Formen bewährt: das Team-Teaching. Beim Camp sind Ralf Westphal und ich beide über die komplette Seminardauer anwesend, bei der School of .NET haben wir auch ab und zu Tage mit nur einem Trainer eingeschoben. Von Teilnehmern haben wir immer wieder das Feedback gehört, dass das Team-Teaching sehr zum Erfolg beiträgt. So wirkt die Tatsache, dass Ralf und ich inhaltlich auch schon mal unterschiedliche Standpunkte vertreten authentisch und bereichert das Seminar um nützliche Diskussionen. Schließlich ist im Bereich der Softwareentwicklung nach wie vor vieles im Fluss und auch wir als Trainer entwickeln uns weiter. Ferner haben die Teilnehmer es als hilfreich empfunden, Inhalte ab und zu in unterschiedlichen Nuancen erklärt zu kriegen. Manchmal hilft schon eine etwas andere Formulierung. Die Teilnehmer solcher Seminare haben ja schließlich einen unterschiedlichen Background, nicht jeder lernt genau so wie sein Kollege, mancher mag es lieber etwas abstrakter, der andere sehr konkret.

Im Jahr 2009 habe ich auch wieder einige Gelegenheiten für Vorträge gehabt. Dabei waren sowohl .NET Usergroups als auch Konferenzen wie die prio oder die XPdays. Eine Übersicht dazu gibt’s hier.

Neben Team-Teaching hatten Ralf und ich auch die Gelegenheit zur Team-Beratung. Wir haben mehrfach den ersten Beratungstermin bei einem neuen Kunden zu zweit bestritten. Vier Augen sehen bekanntlich mehr als zwei, gerade bei der Bestandsaufnahme und der Frage, welche Schritte zur Verbesserung wir empfehlen, erwies sich dies als vorteilhaft.

Bei Heise Developer haben wir die Gelegenheit erhalten, eine kleine Serie zu Brownfield Projekten zu schreiben. Der erste Teil und der zweite Teil sind bereits erschienen, fünf weitere werden noch folgen.

Rückblickend betrachtet war das Jahr 2009 wirklich sehr spannend. Die Resonanz auf die Clean Code Developer Initiative ist durchweg sehr positiv. So hat z.B. die Xing Gruppe inzwischen mehr als 1000 Mitglieder. Und wir haben noch einige Ideen…

Ausblick auf 2010

Im nächsten Jahr stehen natürlich auch schon einige Termine fest. Da ist zum einen die OOP zu nennen, bei der Ralf und ich die Clean Code Developer Initiative vorstellen werden. Im Rahmen der VSone halte ich neben einem Vortrag zu Domain Driven Design einen Tagesworkshop zur Testgetriebenen Entwicklung (test-driven development, TDD).

Unter dem Titel priodotnetpro.powerday bieten Ralf und ich CCD Inhalte an insgesamt 3 Tagen. Der erste Tag, der powerday, ist ein eher klassischer Konferenztag, bei dem den Teilnehmern zahlreiche Vorträge geboten werden. Etwas anders als üblich ist die Tatsache, dass die Teilnehmer vorher eine Publikumsaufgabe lösen können. Damit nehmen sie zum einen an einer Verlosung wertvoller Preise teil. Zum anderen wird genau diese Problemstellung über den Tag hinweg unter verschiedenen Aspekten beleuchtet. Hat man die Aufgabe selber gelöst, erhält man so Rückmeldung zur eigenen Vorgehensweise.

Am zweiten Tag, dem powerworkshop, bieten wir die Möglichkeit, einen Tag lang an den CCD Bausteinen zu schnuppern. In kleinen Gruppen werden an dem Tag einige Prinzipien und Praktiken vermittelt und anhand von Beispielen und Übungen gelernt.

Der dann folgende dritte Tag bietet powercoaching: mehrere Teams kommen mit ihren ProblemenHerausforderungen zu uns und präsentieren ihre Fragen anhand eines konkreten Projektes. Wohlgemerkt geht es dabei um ein echtes Projekt, nicht um Beispiele oder Übungen. Jedes Team erhält Zeit sein Problem darzulegen, wir geben anschließend Hinweise zu Lösungen. Der Clou daran: die Teams präsentieren sich mit ihren Fragen vor den anderen Teams. Das bedeutet, jedes teilnehmende Team erhält nicht nur Input zu seinen eigenen Fragen, sondern kann auch an den Fragen und Antworten der anderen Teams teilhaben.

Die drei Tage können einzeln gebucht werden, so kann sich jeder das heraussuchen was für ihn am besten passt.

Ich bin jedenfalls schon sehr gespannt, was das Jahr 2010 bringen wird. Allen Lesern wünsche ich frohe Feiertage und einen guten Start in das neue Jahr.

Kick it on dotnet-kicks.de

Clean Code Developer auf der OOP 2010

December 11th, 2009

Vom 25. – 29. Januar 2010 findet in München wieder die OOP statt. Diesmal sind Ralf Westphal und ich dort mit einem Vortrag über die Clean Code Developer Initiative vertreten.

Abstract

Durch lückenhafte Anforderungen und Termindruck ist schlechte Softwarequalität oft nicht begründbar. Zu diagnostizieren ist vielmehr die breite Abwesenheit eines unverbrüchlichen Fundaments an Prinzipien und Praktiken für die Softwareentwicklung. Die Clean Code Developer (CCD) Initiative möchte das ändern. Der Vortrag stellt das CCD-Wertesystem mit seinen Bausteinen, Prinzipien und Praktiken vor, erklärt die schrittweise Arbeit an seinen Modulen und diskutiert mit den Zuschauern über Nutzen, Chancen und Grenzen eines solchen Wertesystems.

Kick it on dotnet-kicks.de

.NET Open Space 2009 in Leipzig

October 20th, 2009

Ein intensives und anstrengendes Wochenende liegt hinter mir. Nachdem wir am Freitag die Räume im MedienCampus vorbereitet hatten, konnte am Samstag morgen der 2. .NET Open Space in Leipzig starten. Mit deutlich mehr Teilnehmern als im letzten Jahr war meine größte Sorge, ob die Sessionplanung reibungslos funktionieren würde. Nicht dass ich Zweifel am Open Space Format hätte, aber je mehr Teilnehmer Sessions vorschlagen können, desto größer ist die Gefahr, dass sich der Prozess zu lange hinzieht.

Anders als im letzten Jahr haben wir die Vorschläge dieses Jahr direkt in ein Zeit- und Raumraster einsortiert. Dadurch stand der Sessionplan bereits fest, nachdem alle Vorschläge genannt wurden. Erfreulicherweise kam es dabei zu keinen zeitlichen Überschneidungen, so dass alle Sessions auch tatsächlich stattgefunden haben.

Zwei Themen die mir schon in vorangegangenen Open Spaces wichtig waren haben auch dieses Jahr wieder eine Rolle gespielt: Command/Query Separation und Service Bus. Bei der Command/Query Separation liegt leider eine doppelte Verwendung des Begriffes vor: neben dem Prinzip, dass eine Methode entweder ein Command oder eine Query sein sollte, wird damit auch ein Architekturpattern bezeichnet. Es wird in Systemen mit sehr hohen Anforderungen an Durchsatz verwendet. Wie auch schon bei anderen Veranstaltungen fehlten Teilnehmer, die bereits ein System mit diesem Pattern gebaut haben, so dass die Diskussion eher theoretisch war. Beim nächsten Open Space sollte sich das langsam ändern ;-)

Beim Thema Service Bus stand vor allem die Frage im Vordergrund, wann sich der Aufwand lohnt, einen Service Bus einzusetzen. Schließlich geht es dabei nicht nur um die korrekte Anwendung neuer Funktionalität, sondern auch um Installation und Betrieb der entsprechenden Infrastruktur. Meine klare Empfehlung, diese Infrastruktur erst einzusetzen, wenn mehrere Bounded Contexts zu verbinden sind, wurde prinzipiell geteilt. Wir haben auch einfachere Publish/Subscribe Ansätze diskutiert, die beispielweise in Frameworks wie Prism oder Caliburn zum Einsatz kommen. Da der Einsatz von Publish/Subscribe dort der besseren Entkopplung dient, ist der Einsatz in jedem Fall empfehlenswert.

Auch beim Thema Service Bus habe ich den Eindruck, dass zu einem nächsten Open Space eine exemplarische Implementierung vorliegen sollte, damit die Diskussion konkreter wird. Vielleicht finden sich ja ein paar Leute die Lust haben, eine Beispielanwendung zu bauen?

Der 2. NET Open Space war aus meiner Sicht wieder ein voller Erfolg. Vielen vielen Dank an Torsten Weber, Alexander Groß und Marcel Hoyer, die den Hauptteil der Organisation übernommen haben. Ein weiteres Dankeschön an Maik den Hausmeister für seine tatkräftige Unterstützung.

Nach dem Open Space ist vor dem Open Space ;-)

Kick it on dotnet-kicks.de

Neues Design jetzt online

October 9th, 2009

Ich habe das Design meiner Website http://lieser-online.de überarbeiten lassen. Nun sind zwar noch ein paar Wiederholungen in den Dateien, das Menü steht beispielsweise in allen HTML Files, aber das macht erstmal nichts. Agile Entwicklung heißt schließlich, in Iterationen arbeiten.

Kick it on dotnet-kicks.de

FullTrust auf Netzwerk Share

October 7th, 2009

Weil ich immer wieder danach suche: wie lautet der Befehl, um FullTrust auf eine Netzwerk Share einzurichten?

caspol -q -machine -addgroup 1 -url file://z:/* FullTrust
Kick it on dotnet-kicks.de