<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.aspnetzone.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'NUnit' and 'Continous Integration'</title><link>http://www.aspnetzone.de/search/SearchResults.aspx?o=DateDescending&amp;tag=NUnit,Continous+Integration&amp;orTags=0</link><description>Search results matching tags 'NUnit' and 'Continous Integration'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Team Build – Erster Eindruck</title><link>http://www.aspnetzone.de/blogs/juergengutsch/archive/2011/03/23/team-build-erster-eindruck.aspx</link><pubDate>Wed, 23 Mar 2011 09:34:37 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:221418</guid><dc:creator>Jürgen Gutsch</dc:creator><description>&lt;p&gt;Mein erster Eindruck vom Team Build des TFS 2010 ist leider sehr negativ. &lt;/p&gt;  &lt;p&gt;Die Gründe sind zum einen die Umsetzung mit der Workflow Foundation 4.0 und die dadurch entstandene Komplexität, bzw. die verringerte Flexibilität. Selbstverständlich kann man Team Build auch weiterhin mit MSBuild nutzen, ist aber aus meiner Sicht genauso eingeschränkt wie in der Version 2008. Die Workflow Foundation hat Team Build nicht einfacher gemacht, sondern noch komplexer.&lt;/p&gt;  &lt;p&gt;Natürlich lässt sich der Workflow mit eigenen Activities ergänzen und erweitern, allerdings müssen die erst Programmiert und getestet werden. Einen vorhandenen Build auf den neuen Team Build 2010 zu migrieren, ist aufgrund des zu hohen Aufwands eher unsinnig. Der Aufwand erhöht sich, wenn Microsoft-fremde Komponenten wie z. B: NUnit genutzt und ausgewertet werden sollen.&lt;/p&gt;  &lt;p&gt;Fängt man mit einem komplett neuen Build-Prozess, einem neuen Projekt an und hat man bereits ausreichend Erfahrungen mit der Workflow Foundation 4.0 macht Team Build eventuell mehr Sinn und kann in diesem Fall auch relativ flexibel werden. Komplex bleibt es dennoch.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Die eigene Migration&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Die Migration die ich jetzt vorgenommen habe, sieht lediglich so aus, dass ich die Sourcen statt von der alten Versionsverwaltung, nun vom TFS hole:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Continous Integration&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Hudson der für die Continous Integration und die Nightly Builds zuständig ist, wurde lediglich um das TFS-Add-In erweitert. Die Sourcen werden nun vom TFS geholt, statt vom SVN. Das ist alles. Gebaut und getestet wird dann wie zuvor auch.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Release Build&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Die Migration, des rein auf MSBuild basierende Release Builds war etwas kniffliger, da es keine vernünftigen MSBuild-Tasks gibt. Hier war der Weg über die tf.exe nötig sowie die Auswertung der Konsolenausgabe.&lt;/p&gt;  &lt;p&gt;Folgende Anforderungen muss das Release Build erfüllen:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Unterscheidung zwischen Test-Build (für die Software-Tester) und Release Build.&lt;/li&gt;    &lt;li&gt;Ermitteln der aktuellen Revisionsnummer, wenn keine übergeben wir.     &lt;br /&gt;=&amp;gt; Zugriff auf die Versionsverwaltung&lt;/li&gt;    &lt;li&gt;Holen der aktuellen Sourcen     &lt;br /&gt;=&amp;gt; Zugriff auf die Versionsverwaltung&lt;/li&gt;    &lt;li&gt;Updated die Versions-, Build-, und Revisionsnummer in den AssemblyInfos&lt;/li&gt;    &lt;li&gt;Bauen der Anwendungen (4x Server; 8x Client)&lt;/li&gt;    &lt;li&gt;Kopieren der Artefakte in die Zielverzeichnisse&lt;/li&gt;    &lt;li&gt;Ermitteln der Revisionsinformationen seit dem letzten Build     &lt;br /&gt;=&amp;gt; Zugriff auf die Versionsverwaltung&lt;/li&gt;    &lt;li&gt;Kopieren der Revisionsinformationen in die Zielverzeichnisse&lt;/li&gt;    &lt;li&gt;Label im TFS setzen     &lt;br /&gt;=&amp;gt; Zugriff auf die Versionsverwaltung&lt;/li&gt;    &lt;li&gt;Versandt der Erfolgs-E-Mail an alle beteiligten&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Alle Zugriffe auf die Versionsverwaltung gehen nun über die tf.exe. Die Auswertung der Konsolenausgabe erfolgt per MSBuild-Taks (entweder mit den vorhandenen Tasks von Microsoft, den &lt;a href="http://msbuildtasks.tigris.org/"&gt;MSBuild Community Tasks&lt;/a&gt; oder dem &lt;a href="http://www.msbuildextensionpack.com/"&gt;MSBuild Extension Pack&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Den vorhandenen Build einfach umzubiegen war somit trotz einiger kleinen Hürden wesentlich einfacher als auf Team Build 2010 zu migrieren&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Team Build nutzen: &lt;strong&gt;Ja&lt;/strong&gt;, wenn man Workflow Foundation 4.0 kennt und ein neues Projekt anfängt und Microsoft Technologie zum Testen der Software nutzt.&lt;/p&gt;  &lt;p&gt;Team Build nutzen: &lt;strong&gt;Nein&lt;/strong&gt;, wenn man migriert, Workflow Foundation 4.0 nicht kennt, Test-Frameworks nutzt die nicht von Microsoft stammen und/oder den Build einfacher anders machen kann.&lt;/p&gt;  &lt;p&gt;Sehr gerne hätte ich Team Build genutzt, um auch hier den vollen Umfang vom TFS zu nutzen. Sehr gerne hätte ich die Testberichte aus den NUnit-Tests im TFS integriert gesehen. Aber der enorme Aufwand wäre einfach nicht vertretbar gewesen. &lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 4px 4px 4px;"&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2011/03/23/team-build-erster-eindruck.aspx"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2011/03/23/team-build-erster-eindruck.aspx&amp;amp;bgcolor=3169AD&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks-DE Image" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;</description></item><item><title>Developement Infrastructure</title><link>http://www.aspnetzone.de/blogs/juergengutsch/archive/2011/03/18/developement-infrastructure.aspx</link><pubDate>Fri, 18 Mar 2011 20:46:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:221342</guid><dc:creator>Jürgen Gutsch</dc:creator><description>&lt;p&gt;Meine heutigen Fragen und Anmerkungen auf Twitter, welche Team Build mit der Workflow Foundation betrafen und die problematische Migration von SVN zum TFS (die ich ebenfalls auf Twitter kommentiert habe) mag wohl den Eindruck gehabt haben, dass die von mir genutzte Developement Infrastructure nur auf Microsoft-Technologie basiert.&lt;/p&gt;  &lt;p&gt;Weit gefehlt :-)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Developement Infrastructure &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Aber fangen wir mal von ganz vorne an. Wie sieht eine Developement Infrastructure aus?&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Das wichtigste Werkzeug ist natürlich das Visual Studio 2010 mit allen seinen Plug-Ins (die bei mir mehrheitlich von JetBrains stammen)&lt;/li&gt;    &lt;li&gt;Als nächste kommt die Versionsverwaltung, wie z.. B: Git, &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;, SVN oder eben den &lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff637362"&gt;TFS&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Ebenfalls wichtig halte ich die Integration der Versionsverwaltung in das Visual Studio. Hier kommen z. B: die Tortoise-Varianten und eben der Team Explorer zum Einsatz&lt;/li&gt;    &lt;li&gt;Ebenfalls wichtig ist ein Build-Server der mit der Versionsverwaltung zurecht kommt, Änderungen mitbekommt und daraufhin einen sog. &lt;a href="http://de.wikipedia.org/wiki/Kontinuierliche_Integration"&gt;Continous Integration&lt;/a&gt; Build erzeugt und die automatisierten Tests ausführt. Optimaler weise ist der auch für den Nightly-Build zuständig, der die täglich, frische Version für die Tester oder den Kunden auswirft      &lt;br&gt;Als Buildserver wird Team City, Hudson, Cruis Control oder eben Team Build eingesetzt.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Idealerweise gibt es einen Server der für die Versionsverwaltung zuständig ist und einen der nur die Builds macht. Das gilt auch für den TFS: der TFS und Team Build sollten auf zwei verschiedenen Servern installiert werden.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Meihne Einstellungen zum TFS&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Der TFS ist klasse. Ich habe seit der ersten Version des TFS mit diesem gearbeitet, aber ich nie Team Build als Build-Server verwendet. Der TFS ist eine ideale Versionsverwaltung für Firmen, die ein bisschen mehr Kontrolle wollen, als es andere Systeme bieten. Mit dem Integrierten Bug-Tracking funktioniert auch das Projektmanagement hervorragend. Agile Softwareentwicklung ist mit dem TFS hervorragend machbar, solange man die vorgegebenen Prozesse etwas anpasst oder sich an die Prozesse des TFS anpasst. Sobald der TFS allerdings mal eingerichtet ist, ist es aus meiner Sicht im Moment das beste System auf dem Markt. Mit Team Build und Lab Management bietet es einige weitere (im Prinzip) hervorragende Features, die ich bisher leider nie selber verwendet habe.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Wie Albert Weinert allerdings ganz richtig per &lt;a href="http://twitter.com/DerAlbert/statuses/48781412291182592"&gt;Twitter&lt;/a&gt; eingewendet hat: “wenn du in der MS Welt bleibst mag es TFS ja nett sein”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Privat würde ich den TFS allerdings nie verwenden. Das liegt nicht nur an den Lizenzkosten, sondern auch am Overhead den der TFS mit sich bringt, der für einen alleine oder auch zu zweit einfach zu groß ist. Das geht nämlich auch einfacher und ohne dass man mehrere Tage damit verbringen muss, dass System anzupassen.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Private Infrastructure&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Privat nutze ich aktuell vorzugsweise &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; als Versionsverwaltung. Für meine privaten Projekte auf meinem eigenen Server und &lt;a href="http://www.fogcreek.com/kiln/"&gt;Kiln&lt;/a&gt;, für öffentliche Projekte auf &lt;a href="https://bitbucket.org/"&gt;BitBucket&lt;/a&gt;. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font&gt;Das &lt;a href="https://bitbucket.org/asstec/svn2tfs-migration-tool"&gt;Svn2Tfs Migration Tool&lt;/a&gt; wird ebenfalls auf &lt;a href="https://bitbucket.org/"&gt;BitBucket&lt;/a&gt; als Open Source zur Verfügung gestellt&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ich nutze auch &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; unter &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt; um vorhandene Projekte zu Forken, zu beobachten oder mich daran zu beteiligen.&lt;/p&gt;  &lt;p&gt;Als Buildserver kommt &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;, das ich als schnellstes, einfachstes und bequemsten zu installierenden Buildserver kennengelernt habe. &lt;a href="http://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt; hat mir von Anfang an zu viele Ressourcen benötigt, ist zwar zwar intuitiv und schnell eingerichtet, benötigt aber sehr viel Arbeitsspeicher, was allerdings auf einem privat gehosteten Server rar sein kenn. &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;CruiseControl&lt;/a&gt; ist bei mir wegen der umständlichen Konfiguration gleich ausgeschieden.&lt;/p&gt;  &lt;p&gt;Hudson dagegen kann erst mal fast nichts (aus .NET-Entwicklersicht, ist es fast nichts, wenn es nur Javaprojekte bauen kann), ist aber durch unzählige Plug-Ins erweiterbar, die direkt in der GUI aktiviert und konfiguriert werden können. Hudson belauscht alle meine Repositories und führt bei Änderungen sofort einen Continous Integration Build aus, führt alle Tests (mit NUnit) automatisiert aus und erstattet mir im Fehlerfall ausführlich Bericht.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Geschäftliche Infrastructure&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Als ich im Geschäft angefangen habe gab es einen exotisch installierten SVN-Server… und immerhin gab es einen SVN-Server :-) &lt;/p&gt;  &lt;p&gt;Hudson war schnell installiert und &lt;a href="http://de.wikipedia.org/wiki/Kontinuierliche_Integration"&gt;Continous Integration&lt;/a&gt; war somit eingerichtet. Release Builds wurden noch mit &lt;a href="http://www.finalbuilder.com/home.aspx"&gt;FinalBuilder&lt;/a&gt; gemacht, was bis dahin auch einigermaßen gut funktionierte… &lt;/p&gt;  &lt;p&gt;Bis Jürgen kam… Und den Buildprozess (auch auf den Entwicklungsrechnern) beschleunigte, indem er alle Projektreferenzen durch Assembly-Referenzen ersetzte. Dadurch wurde nicht nur der Lokale Build beschleunigt, sondern theoretisch auch der Build unter FinalBuilder. Problem nur: Durch die fehlenden Projektreferenzen mussten die Projektabhängigkeiten von Hand gesetzt werden. Was Hudson und MSBuild mitmacht, wurde von FinalBuilder ignoriert, ganz egal ob der FinalBuilder per Visual Studio baut, oder per MSBuild. FinalBuilder war also für mich, unter anderem auch deswegen, für mich gestorben. &lt;/p&gt;  &lt;p&gt;Hätte ich (wie es &lt;a href="http://www.lieser-online.de/"&gt;Stefan Lieser&lt;/a&gt; per &lt;a href="http://twitter.com/StefanLieser/statuses/48794366533316608"&gt;Twitter&lt;/a&gt; anmerkt) die Build-Reihenfolge mit mehreren einzelnen Solutions vorgenommen, statt mit einer großen Solution, hätte ich den Build-Prozess im Final Builder unter Umständen immer wieder anpassen müssen, wenn sich die Projektstruktur ändert. In der aktuellen Entwicklung konnte sich die Struktur aber laufend ändern, da auch eine ganze Menge Testprojekte durch die neu eingeführten Unit-Tests hinzukamen oder die Unit-Tests zu Refactorings zwingen konnten.&lt;/p&gt;  &lt;p&gt;Die Lösung war, den FinalBuilder-Prozess mit MSBuild sauber und generisch nachzubilden. Ein paar MSBuild-Tricks waren auch in den Projektdateien nötig und der Prozess war getan. Sehr Dankbar bin ich übrigens dem &lt;a href="http://dotnet-forum.de/blogs/thorstenhans/"&gt;Thorsten Hans&lt;/a&gt;, der mich dabei mit wertvollen Tipps unterstützt hat.&lt;/p&gt;  &lt;p&gt;Desweiteren war der Build mit MSBuild doppelt so schnell, als der mit FinalBuilder. Der Overhead der Überladenen GUI des FinalBuilder macht sich im Vergleich zur Konsole bemerkbar. Der Aufruf: “msbuild buildall.proj” erzeugt nun aus den Sourcen, in einer halben Stunde vier Server-Produktvarianten und sechs Client-Produktvarianten, inklusive WiX-Setup-Projekten.&lt;/p&gt;  &lt;p&gt;Wir haben nun also einen exotischen SVN-Server, CI mit Hudson und MSBuild und einen Build-Prozess mit MSBuild. &lt;/p&gt;  &lt;p&gt;Bleibt das Problem mit dem Bug-Tracking das irgendwie in einem Sharepoint zusammengebastelt war. Eine direkte Verknüpfung zwischen Änderungen am Code und Bug-Tracking gab es nicht. Im SVN wurde nur eine Ticket-ID mitgespeichert.&lt;/p&gt;  &lt;p&gt;Die Lösung war der TFS, indem die komplette History aus dem SVN migriert werden sollte&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font&gt;Hier kommt das oben erwähnte &lt;a href="https://bitbucket.org/asstec/svn2tfs-migration-tool"&gt;Svn2Tfs Migration Tool&lt;/a&gt; zum Einsatz, das nacheinander alle Revisionen komplett mit Kommentaren vom SVN lädt und in den TFS einspielt. &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Existierende Migrationstools funktionierten aufgrund des exotischen SVN-Servers nicht und brachen mit Fehlern ab. Woraufhin ich selber ein Migrationstool schrieb. Innerhalb von vier Tagen waren ca. 8100 Revisionen von 200.000 Dateien migriert. &lt;/p&gt;  &lt;p&gt;Die Migration der alten Tickets als neue WorkItems erfolgte dann relativ stupide per Excel&lt;/p&gt;  &lt;p&gt;Stand Heute: TFS als Versionsverwaltung, TFS als Bug-Tracking, Hudson für die CI-Builds und MSBuild für den komplett-Build.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Team Build&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Jetzt wo der TFS installiert und eingerichtet ist, war die Überlegung, die CI-Builds auch per Team Build zu machen, was im ersten Schritt aber schon daran scheiterte, dass die Build-Prozesse mit der Workflow Foundation 4 so komplex sind, dass es auf die Schnelle nicht möglich war dem Team Build beizubringen, dass wir nicht MSTest, sondern NUnit als Unit-Test Framework verwenden. &lt;/p&gt;  &lt;p&gt;Schade eigentlich, den ich verspreche mir von Team Build, dem Lab Management und den Codet-UI-Tests die Testabteilung stärker in den TFS-Prozess zu integrieren. &lt;/p&gt; &lt;p&gt;Es fehlt also eine Integration von Manuellen Tests, automatisierten Akzeptanz-Tests und UI-Tests &lt;/p&gt;Das werde ich möglicherweise nun anders lösen müssen.&amp;nbsp;&amp;nbsp; &lt;p&gt;Dafür war &lt;a href="http://fitnesse.org/"&gt;FittNesse&lt;/a&gt; eine Idee. Für weitere Ideen bin ich absolut offen. :-)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Somit entwickle ich zwar auf Microsoft Plattformen, nutze aber nicht nur Microsoft Technologien. &lt;/p&gt;  &lt;p&gt;Stichwort: ALT.NET (unter anderem das Motto der letztjährigen &lt;a href="http://www.seesharpparty.de/"&gt;See# Party&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Microsoft entwickelt immer bessere Developement Infrastructure. Mit jeder Version wird der TFS besser. Mit jeder Version wird das Visual Studio und seine Tools besser. Aber im Moment ist man stellenweise immenroch besser mit alternativen Tools und Frameworks dran ;-)&lt;/p&gt;&lt;div style="margin:0px;padding:4px;text-align:left;" class="wlWriterHeaderFooter"&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2011/03/18/developement-infrastructure.aspx"&gt;&lt;img border="0" alt="DotNetKicks-DE Image" src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2011/03/18/developement-infrastructure.aspx&amp;amp;bgcolor=3169AD&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000"&gt;&lt;/a&gt;&lt;/div&gt;</description></item></channel></rss>