Inleiding
Met de komst van Visual Studio 2010 zal ook de nieuwste versie van Team Foundation Server 2010 (TFS) het licht zien. Naast een aantal vernieuwingen zal er ook een eenvoudiger versie te installeren zijn. De kale ‘Basic’ variant stelt minder eisen aan hardware en software en wordt als vervanger van Visual SourceSafe (VSS) gepositioneerd. De standaard ondersteuning van VSS door Microsoft zal namelijk midden 2011 stoppen. Maar zal TFS daarmee terugvallen tot een eenvoudig versiebeheersysteem?
Hoe eenvoudig is TFS Basic?
Sinds 2005 hebben wij de beschikking over Team Foundation Server. De basis is een versiebeheersysteem waarbij de opslag in databases plaatsvindt. Dit maakt het minder kwetsbaar voor verlies van data bij storingen. Aan TFS is WorkItem tracking gekoppeld voor project-, requirement- en testcase-management. TFS ondersteunt verder een koppeling richting buildservers, er zijn uitgebreide rapportages en er zijn teamportalen met overzichten van de projectvoortgang (Figuur 1).
Figuur 1: Visual Studio Stadium
Tijdens de installatie moet een keuze gemaakt worden voor de Standaard Single Server, Advanced, Application-Tier only, Upgrade of voor de Basic installatie. Out-of-the-box beschikt TFS Basic niet over rapportages via Sql Server Reporting Services en geen teamportalen via SharePoint. Maar de overige features van TFS zijn gewoon aanwezig. De installatie van TFS Basic neemt nog geen dertig minuten in beslag. Hiervoor is de eenvoudige configuratie wizard (Figuur 2) beschikbaar. In dit voorbeeld is alleen voor TFS Basic en een Build Service gekozen.
Figuur 2: Team Foundation Server Configuration wizard
Een reeds geïnstalleerde SQL Server 2008 Express kan bij TFS Basic gewoon gekozen worden. De installatie van SharePoint teamportalen of Reporting Services rapporten blijft achterwege.
Met de Team Foundation Server Administration Console (Figuur 3) kan TFS vervolgens verder geconfigureerd worden. In het voorbeeld is zichtbaar dat voor de opslag inderdaad de gratis te downloaden Sql Server 2008 Express gekozen is. In de Administration Console kunnen ook meerdere Team Project collections in één of meerdere databases aangemaakt of gekoppeld worden. En hier kunnen ook de build agents aan de build controllers toegewezen worden.
Figuur 3: Team Foundation Server Administration Console
Minimale vereisten en randvoorwaarden
Door de komst van TFS Basic zijn ook de vereisten en afhankelijkheden vereenvoudigd:
• Minimaal Vista of Windows 7
• Minimaal 1Gb intern geheugen
• Minimaal SQL Server 2008 Express
Hiermee komt TFS Basic eenvoudiger beschikbaar voor kleinere teams maar er zijn wel enkele beperkingen. SQL Server Express heeft een limiet van vier Gb voor opslag van gegevens. De TFS licentie zal slechts vijf gebruikers ondersteunen. Voor meer gebruikers moet een Client Access License (CAL) aangeschaft worden.
Let bij de keuze voor het besturingssysteem op het aantal concurrent connections. Vista kent slechts vijf tot tien ‘Device Connections’. Positief is dat TFS Basic ook geïnstalleerd kan worden op een server die als domain controller is ingericht. Dit is goed nieuws voor kleinere teams met slechts één server. Mocht in een later stadium de gekozen configuratie niet meer voldoen dan kan TFS Basic opgeschaald worden naar een zwaardere versie.
WorkItem tracking
Naast versiebeheer gebruiken ontwikkelteams ook een administratie voor bv. wensen, bevindingen, openstaande punten en bugs. Bij TFS is hiervoor WorkItem tracking geïntegreerd. Standaard worden hiervoor twee ‘templates’ uitgeleverd: Agile en CMMI. De twee process templates verschillen vooral in het aantal en type WorkItems en de bijbehorende workflows om een bepaald item af te werken.
Development process template Aanwezige WorkItem types
MSF for Agile Software Bug, Issue, Shared Steps, Task, Test case, User story
MSF for CMMI Process Bug, Change Request, Issue, Requirement, Review, Risk, Shared Steps, Task, Test Case
Met TFS Basic is het ook mogelijk om process templates aan te passen of zelfs een andere variant toe te passen. Het TFS ontwikkelteam bij Microsoft levert via de TFS Power tools een Process Template Editor.
De WorkItems in WorkItem tracking kunnen tegenwoordig ook genest worden. Waar in de vorige versies van TFS WorkItems alleen op gelijk niveau gekoppeld (linking) werden, kan nu een Vader/Zoon relatie aangegeven worden (Figuur 4).
Figuur 4: Twee WorkItems met een vader/zoon relatie
Ook is het mogelijk om bij WorkItems op gelijke hoogte (broers) aan te geven wie een voorganger of opvolger is. Hiermee kan Microsoft Project eindelijk op een correcte manier de TFS WorkItems inlezen voor een Gantt chart.
Hiermee kan Microsoft Project eindelijk op een correcte manier de TFS WorkItems inlezen…
Voor teamleden zonder Visual Studio (projectleiders, analisten, etc.) is het mogelijk om toegang te krijgen tot TFS via browser functionaliteit.
In Visual Studio kan TFS ook via de geïntegreerde Team Explorer worden beheerd. Voor Visual Studio 2008 gebruikers is een update beschikbaar zodat ook zij TFS 2010 kunnen aanroepen. Hierdoor kan TFS al opgewaardeerd worden terwijl gebruikers van Visual Studio 2008 nog met hun bestaande ontwikkelomgeving blijven werken.
In TFS 2010 kan eindelijk Rich Text Formatting in een aantal WorkItem velden toegepast worden. Hierdoor kunnen History, Steps to Reproduce en System Info nu geformatteerd (vet, cursief, onderstreept) worden en opsommingen krijgen.
TFS 2010 Team Web Access
Tijdens de TFS Basic installatie wordt ook Team System Web Access (TWA) op http://Servernaam:8080/TFS aangemaakt. Deze ASP.Net website maakt builds, broncode en WorkItems inzichtelijk.
Builds kunnen gestart worden en build logs kunnen bekeken worden.
Het is mogelijk om WorkItems aan te maken en te manipuleren in de browser.
Tevens kan door de ingecheckte broncode genavigeerd worden en is deze te vergelijken met historische versies. Broncode kan gedownload worden. Uit- en inchecken is niet mogelijk met de TWA cliënt. Hiervoor kunnen de Windows Shell Extensions uit de TFS Power Tools gebruikt worden.
WorkItems beheer in TWA
Als projectportaal is de TWA niet volledig. Zo kan de projectvoortgang b.v. niet grafisch in tabellen en grafieken afgebeeld worden. Ik verwacht dat er zeker initiatieven zullen komen om een alternatieve projectportaal te verzorgen. Eén zo’n initiatief is de Scrum dashboard op Codeplex.
Wel kunnen lijsten met WorkItems via queries gerapporteerd worden (Figuur 5).
Figuur 5: Lijst met geneste WorkItems
Deze queries zijn uit te breiden. Dit zijn overigens dezelfde lijstjes als in de Team Explorer. In beide omgevingen kunnen de lijsten gemaild worden. Alleen kunnen in Team Explorer de rapportages ook naar Excel geëxporteerd worden.
Een handige optie is om een selectie van WorkItems in één actie te manipuleren via de Bulk Edit Selected Items optie (Figuur 6). In TFS 2010 is deze optie flink uitgebreid.
Figuur 6: WorkItem Bulk Edit
In dit voorbeeld worden drie geselecteerde User Stories in één keer op status Design gezet. Voorheen waren maar een paar velden wijzigbaar. De state viel hier niet onder. Nu zijn er geen beperkingen meer. Mocht tijdens het uitvoeren van de Bulk Edit een wijziging tegengehouden worden door bv. verplichte velden of Workflow regels dan kunnen de falende WorkItems alsnog individueel gecorrigeerd worden.
TFS Build
Als ontwikkelaar ben ik ook geïnteresseerd in de meegeleverde build service. Ook hier wordt geen enkele beperking opgelegd in de TFS Basic variant. TFS Build 2010 is ten opzichte van de vorige versie wel anders opgezet. Tijdens de definitie van een build wordt deze gekoppeld aan een build controller welke vervolgens één of meerdere build agents aanstuurt. Hierdoor kan efficiënter en verfijnder gebuild worden. Via tags is namelijk op te geven wat de specialiteit van een bepaalde build agent is (een specifiek OS, mogelijk tot UnitTests, Processor keuze, etc.) om zo een specifieke build te kunnen uitvoeren.
Ook is het Build rapport overzichtelijker opgezet. Zo is er een eenvoudige samenvatting (Figuur 7) naast de uitgebreide log. Het ’orgeltje’ linksboven geeft het eindresultaat van vorige builds weer (groen, geel, rood) en de lengte staat voor de relatieve duur van de builds. Je kunt er op klikken om die log naar voren te halen. Zo kan snel naar oudere build logs genavigeerd worden om te vergelijken.

Figuur 7: TFS Build summary
In de summary zijn ook links aanwezig naar de build log en test results.
TFS Build 2010 ondersteunt standaard al static code analysis en dit zal afhankelijk van de toegepaste regels in de afzonderlijke projecten tot een gefaalde build kunnen leiden.
Instellen van code coverage
Omdat het aantal unittests nog niets zegt over de hoeveelheid code die gecontroleerd is, kan een code coverage een nuttige aanvulling op die rapportage zijn. Dit geeft het percentage uitgevoerde broncode weer tijdens het uitvoeren van de unittests.
Ik heb in Figuur 7 een aantal (falende) unittests opgenomen. Tevens wordt een code coverage samenvatting getoond (van welgeteld één regel). Waar de unittest samenvatting standaard getoond wordt, moest ik voor de code coverage twee stappen doorlopen.
De eerste stap is om binnen een solution (met unittests) aan te geven welke gerefereerde assemblies voor code coverage bemonsterd moeten worden. Open hiervoor het bestand Local.TestSettings (Figuur 8). Deze is gegenereerd toen het unittestproject aan de solution werd toegevoegd. Kies daarbinnen voor Data and Diagnostics, vink Code Coverage aan en kies uiteindelijk voor configureren.
Figuur 8: Configuratie van code coverage in de solution
In het daarop geopende dialoog kunnen de projecten (artifacten) geselecteerd worden die voor code coverage geïnstrumenteerd moeten worden.
Sla het Local.TestSettings bestand op en check het in. Zie dat tijdens de build nog steeds geen code coverage uitgevoerd wordt, terwijl dit wel ‘met de hand’ is uit te voeren.
De tweede stap is om de gewenste build definition bij te werken. Open Team Explorer en selecteer die build definition. Kies met een rechter muis klik voor ‘Edit Build Definition’ (Figuur 9). Plaats de naam van het Local.TestSettings bestand in eigenschap ‘Process | Automated Tests | Test Assembly | Testsettings file’.
Figuur 9: Activeer code coverage in de build definition
Code coverage is pas mogelijk met de aanschaf van minimaal Visual Studio 2010 Premium
Pas na deze twee stappen zal de code coverage tijdens de build uitgevoerd worden. Er is wel een keerzijde aan dit prachtige verhaal... Code coverage is pas mogelijk met de aanschaf van minimaal Visual Studio 2010 Premium. Op de build server moet namelijk naast de build agent een test agent geïnstalleerd worden. En deze is pas meegeleverd vanaf VS2010 Premium…
Aanpassen van het buildscript
Een build bestaat uit meer stappen dan alleen unittesten en code coverage. We hebben het dan over het inrichten van een build omgeving, code copieren, compileren, testen, etc. Al deze acties zijn vanaf TFS Build 2010 samengevat in een build template. Hierdoor kunnen meerdere build definities op een hoger niveau gedefinieerd gaan worden. Zij ondersteunen alleen dezelfde build template maar verschillen bv. bij het afdwingen van een andere build agent keuze.
Er worden meerdere standaard templates meegeleverd maar het aanpassen daarvan wordt afgeraden. Beter is het om een kopie in te checken en die dan aan te passen. Hoewel de Build tegenwoordig op Workflow Foundation 4 (WF4) gebaseerd is, is er ook een template beschikbaar voor het blijven ondersteunen van MSBuild.
Microsoft levert out-of-the-box 40+ Workflow activiteiten mee om je eigen WF4 build template te bouwen. In Figuur 10 stuur ik gekleurde amBX ledverlichting aan om naar de collega’s toe duidelijk te maken of de laatste build (partially) succeeded is.
Figuur 10: Build template workflow aanpassingen
Gated check-in
Als eenmaal de build template gekozen of aangepast is, kan nagedacht worden over de build trigger. Naast de dagelijkse build en de continuous build is het nu ook mogelijk om te kiezen voor een gated check-in. Hierbij wordt bij het inchecken aan de ontwikkelaar eerst verteld dat zijn wijzigingen geshelved gaan worden (Figuur 11). Daarna wordt de meeste recente versie in TFS samen met die shelveset gebuild. Pas als de build van deze combinatie gelukt is, zal het inchecken ook daadwerkelijk doorgevoerd worden.
Gated check-in voorkomt dat volwassen mannen buiten de carnavalsperiode in roze konijnenpakken rondlopen

Figuur 11: Gated check-in dialoog voor de ontwikkelaar
Dit voorkomt dat de build bij grotere teams continue gaat falen en voortdurend gerepareerd moet worden. Tevens voorkomt dit dat volwassen mannen buiten de carnavalsperiode in roze konijnenpakken rondlopen. Ook onvrijwillige bijdrages aan de VRIJMIBO pot behoren zo tot het verleden.
Ook onvrijwillige bijdrages aan de VRIJMIBO pot behoren zo tot het verleden
Buddy build
Dit betekent wel dat ontwikkelaars de discipline moeten opbrengen om hun fire-and-forget procedure tijdens het inchecken los laten. Broncode wordt alleen ingechecked als die aan allerlei eisen voldoet en dit kan flexibiliteit of deadlines in de weg staan. Het alternatief is het aftrappen van een buddy build. Hierbij moet de gebruiker zelf eerst de broncode wijzigingen shelven. Daarna moet ook zelf een build gestart (Figuur 12) worden waarbij gekozen wordt voor het controleren van een combinatie van de Latest Version en Shelveset.

Figuur 12: Buddy build dialoog
De broncode zal nu gecontroleerd worden maar er zal geen check-in plaatsvinden. Dit is ook de perfecte manier om te controleren of jouw code op een andere machine draait anders dan jouw eigen machine (vandaar het ‘buddy’).
Dit is ook de perfecte manier om te controleren of jouw code op een andere machine draait
Overigens is voor TFS 2008 al een vergelijkbare Buddy build oplossing aanwezig op CodePlex.
Conclusie
Met de komst van TFS is het bouwen van software weer een stukje volwassener geworden. Met de 2010 versie is de integratie van verschillende disciplines alleen maar uitgebreid. In dit artikel heb ik een groot aantal vernieuwingen de revue laten passeren maar dit is uiteraard nog maar een gedeelte. Zo zijn bv. Coded UI Tests, SharePoint teamportalen of Team Lab Management buiten beschouwing gelaten.
TFS Basic mist alleen team portalen en rapportages maar zal zeker voor kleinere teams de stabiliteit en betrouwbaarheid van de ontwikkelde software sterk vergroten en hiermee de kosten en risico’s verlagen. En migreren van VSS naar TFS (Basic) is dus aan te raden. Microsoft gaat daarbij de migratie van SourceSafe 2005 naar TFS actief ondersteunen met tooling en procedures. Verwacht wordt dat de prijsstelling van TFS Basic vergelijkbaar met die van VSS zal zijn.
TFS Team blog http://blogs.msdn.com/team_foundation/
TFS installatie http://blogs.msdn.com/bharry/archive/2009/10/01/tfs-2010-for-sourcesafe-users.aspx
TFS Power tools 2010 http://visualstudiogallery.msdn.microsoft.com/en-us/0e69a28f-020c-488b-80b3-f4c89a20621d
Buddybuild op CodePlex http://www.codeplex.com/BuddyBuild
Scrum dashboard op CodePlex http://www.codeplex.com/scrumdashboard
VSSconverter GUI http://www.codeplex.com/VssConverterGui
amBX led verlichting voor TFS http://adi.atosoriginblog.nl/2009/12/24/team-foundation-server-controlled-ehhm-ambx-lights/