<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://batswirl.com/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>Batswirl's home</title><link>http://batswirl.com/blogs/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Urban Turtle : Des graphiques d’avancement dans vos projets</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/08/09/urban-turtle-des-graphiques-d-avancement-dans-vos-projets.aspx</link><pubDate>Mon, 09 Aug 2010 14:29:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:66</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;Aujourd ***, l’équipe &lt;A href="http://www.urbanturtle.com/" target=_blank&gt;Urban Turtle&lt;/A&gt; est fière de proposer une nouvelle version de son outil de gestion agile avec Team Foundation Server.&lt;/P&gt;
&lt;P&gt;Cette dernière version propose aux équipes travaillant avec le dernier modèle de processus &lt;A href="http://visualstudiogallery.msdn.microsoft.com/en-us/59ac03e3-df99-4776-be39-1917cbfc5d8e" target=_blank&gt;Visual Studio Scrum 1.0&lt;/A&gt; un graphique d’avancement temps réel (donc pas de warehouse, d’analysis services etc…).&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:600px;HEIGHT:400px;" src="http://urbanturtle.com/blog/wp-content/uploads/2010/08/blog-burndown-e1281105206365.png" width=600 height=400&gt;&lt;/P&gt;
&lt;P&gt;La dernière version est téléchargeable à l’endroit habituel : &lt;A href="http://urbanturtle.com/?item=download" target=_blank&gt;Download URBAN TURTLE&lt;/A&gt;&lt;/P&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=66" width="1" height="1"&gt;</description></item><item><title>Une tortue flashée a 240!!!</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/07/19/une-tortue-flash-e-a-240.aspx</link><pubDate>Mon, 19 Jul 2010 18:11:05 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:64</guid><dc:creator>batswirl</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm5.static.flickr.com/4081/4809291546_c8ea0e1242_o.png" /&gt;&lt;/p&gt;  &lt;p&gt;Prise sur l’autoroute de la livraison, à la poursuite d’un modèle de processus qui venait de sortir. La tortue est désormais recherchée. Elle risque des années de travaux d’intérêts généraux, notamment dans le rôle d’accélératrice de solution pour les projets Scrum avec Team Foundation Server.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Source : &lt;a href="http://urbanturtle.com/ourstory/" target="_blank"&gt;Urban Turtle delivers a kick-ass experience for Scrum in Visual Studio Team Foundation Server&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pour télécharger la version compatible avec le tout chaud modèle de processus &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/59ac03e3-df99-4776-be39-1917cbfc5d8e" target="_blank"&gt;Microsoft Visual Studio Scrum&lt;/a&gt; : &lt;a href="http://www.urbanturtle.com" target="_blank"&gt;Urban Turtle&lt;/a&gt;&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=64" width="1" height="1"&gt;</description></item><item><title>Scrum.org la révolution des développeurs</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/04/26/scrum-org-la-r-volution-des-d-veloppeurs.aspx</link><pubDate>Mon, 26 Apr 2010 14:44:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:60</guid><dc:creator>batswirl</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;a target="_blank" href="http://scrum.org/"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="scrumdotorg" border="0" alt="scrumdotorg" width="244" height="50" src="http://batswirl.com/blogs/batswirl_fr/scrumdotorg_12D81F5F.jpg"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Si vous ne connaissez pas encore &lt;a target="_blank" href="http://www.scrum.org"&gt;Scrum.org&lt;/a&gt; et que vous travaillez actuellement dans un contexte agile, je vous conseille fortement de faire une petite visite sur le site.&lt;/p&gt;  &lt;p&gt;   &lt;br&gt;Il s'agit d'une nouvelle initiative visant à promouvoir Scrum et l'agilité et à former les acteurs d'un projet à ces nouveaux contextes.&lt;/p&gt;  &lt;p&gt;   &lt;br&gt;&lt;a target="_blank" href="http://www.controlchaos.com/"&gt;Ken Schwaber&lt;/a&gt;, le papa de Scrum, est à l'origine du projet et a établi un programme spécifique pour les développeurs. Le programme comble ainsi un manque terrible dans bon nombres de cursus agiles : la formation des développeurs.    &lt;br&gt;L'objectif est ici de fournir la connaissance des outils et des pratiques qui permettront à un développeur de répondre aux différentes contraintes des projets agiles :    &lt;br&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;réactivité&lt;/li&gt;    &lt;li&gt;Développement empirique&lt;/li&gt;    &lt;li&gt;gestion du changement&lt;/li&gt;    &lt;li&gt;collaboration&lt;/li&gt;    &lt;li&gt;...&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;nbsp; &lt;br&gt;A l'heure actuelle, deux cursus sont disponibles pour les deux plate-formes majeures de l'industrie .Net et Java.    &lt;br&gt;A &lt;a target="_blank" href="http://www.pyxis-tech.ca"&gt;Pyxis technologies&lt;/a&gt;, nous comptons parmi nous les 2 seuls formateurs francophones (&lt;a target="_blank" href="http://courses.scrum.org/about/eric-mignot"&gt;Eric Mignot&lt;/a&gt; et &lt;a target="_blank" href="http://courses.scrum.org/about/ernst-perpignand"&gt;Ernst Perpignand&lt;/a&gt;) et j'aurais l'occasion de binômer avec eux sur ces formations et ainsi apporter mes connaissances et mon expérience sur Team System et Team Foundation Server.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Les dates : &lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://courses.scrum.org/classes/show/20"&gt;du 7 au 11 juin à Montréal&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://courses.scrum.org/classes/show/19"&gt;du 21 au 25 juin à Paris&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En espérant vous rencontrer devant un VS10 pour parler architecture agile, TDD, scripts de build…&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=60" width="1" height="1"&gt;</description><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Agile/default.aspx">Agile</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/TDD/default.aspx">TDD</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Scrum.org/default.aspx">Scrum.org</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Scrum/default.aspx">Scrum</category></item><item><title>Le modèle de Kano, une force dans vos projets agiles</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/04/14/le-mod-le-de-kano-une-force-dans-vos-projets-agiles.aspx</link><pubDate>Wed, 14 Apr 2010 14:38:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:59</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Le modèle de Kano est un&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;&amp;nbsp;outil permettant la priorisation des éléments d’un projet en projetant la disponibilité d’une fonctionnalité sur la satisfaction que celle ci apporte. La grande force de ce modèle tient dans son postulat de base : La satisfaction ou l’insatisfaction d’un utilisateur pour un même point n’est pas une notion diamétralement opposée : «Ce n’est pas parce qu’une fonctionnalité livrée augmente la satisfaction de l’utilisateur que l’absence de cette même fonctionnalité aurait eu un impact négatif vis à vis de la satisfaction utilisateur».&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;De ce postulat, le modèle propose de sonder les utilisateurs en mesurant leur satisfaction du produit final dans le cas de la mise à disposition et dans le cas de l’absence de chacune des fonctionnalités.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Je vous laisse faire quelques recherches pour explorer plus en avant ce modèle car dans ce billet, j’aimerais m’attarder sur un point particulier, à savoir le recensement et la livraison des &lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;fonctionnalités de base.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Les fonctionnalités de base (basic needs) sont des points cruciaux pour la réussite de votre projet mais celles ci sont fourbes, elles ne sont pas clairement exprimées, on dit qu’elles sont implicites. Obligatoires et implicites, vous voyez ou je veux en venir...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Dans nos processus de développement agiles, la sollicitation des utilisateurs dans la définition des fonctionnalités est point essentiel. On tente ainsi de remédier à la dérive fonctionnelle des projets dont les spécifications ont été rédigés par des informaticiens.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Chaque fonctionnalité apportera un service, de la valeur ajoutée à l’utilisateur.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;GOOD ENOUGH SOFTWARE&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Dans un extrême caricatural, des équipes se laissent ainsi guider par des carnets de produits entièrement rédigé par un utilisateur. Ils vont forcement atteindre le GOOD ENOUGH SOFTWARE, pas de fioritures, pas de gadgets, jusque ce qu’il lui faut. Prétextant une volonté de ne pas vouloir influencer leur gestionnaire de produit, certaines équipes se refusent même à évoquer certaines fonctionnalités qu’elle trouve intéressantes.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Il faut pourtant se rendre à l’évidence, nos gestionnaires de produits ont rarement l’expérience ou les connaissances techniques qui leur permettent de déduire des fonctionnalités de base ou de mesurer l’impact de l’absence de certains points fonctionnels.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Comme toujours la solution réside dans la collaboration entre les membres de l’équipe et son gestionnaire de produit et le modèle de Kano offre ici un cadre de collaboration explicite :&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;L’équipe détecte une fonctionnalité basique, décrit la valeur ajoutée.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;Le gestionnaire de produit mesure la satisfaction apportée par la livraison ou l’absence de cette fonctionnalité dans le produit final.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;La fonctionnalité rentre dans le carnet de produit, ou pas!&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;min-height:14.0px;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;span style="letter-spacing:0.0px;"&gt;C’est simple et ça devrait facilement pouvoir s’intégrer dans une maintenance de carnet (backlog maintenance).&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Helvetica, Helvetica, sans-serif" size="3"&gt;&lt;span class="Apple-style-span" style="font-size:12px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=59" width="1" height="1"&gt;</description></item><item><title>Je mocke, tu mockes, il mocke... nous loupons un refactoring</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/03/19/je-mocke-tu-mocks-il-mock-nous-loupons-un-refactoring.aspx</link><pubDate>Fri, 19 Mar 2010 00:14:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:58</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Avant de mocker un composant, assurez vous que les difficultés que vous rencontrez à le tester ne proviennent pas du composant lui même.&lt;/p&gt;&lt;p&gt;&amp;nbsp;PS : Je sais c'est court mais je crois que c'est pertinent et que le message passera mieux. D'autant que je m'en fait un pense bête à lire 10x ou 15x par jour tellement c'est évident et qu'on arrive à passer à côté.&amp;nbsp;&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=58" width="1" height="1"&gt;</description></item><item><title>Test d'intégrataire ou test d'unigration</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/03/19/test-d-int-grataire-ou-test-d-unigration.aspx</link><pubDate>Thu, 18 Mar 2010 23:49:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:57</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Ces dernières semaines durant mon développement ou autour d'un autre binôme à Pyxis, j'ai été confronté à cette discussion qui trainait et qui au final ralentissait le développement :&lt;/p&gt;&lt;p&gt;Membre de l'équipe 1 :&amp;nbsp;A ton avis, c'est un test d'intégration ou un test unitaire?&lt;/p&gt;&lt;p&gt;Membre de l'équipe 2 : ouf, y'a un fichier XML à utiliser, je vois pas comment s'en passer sans perdre le sens du test, çà doit forcement être un test d'intégration.&lt;/p&gt;&lt;p&gt;Membre de l'équipe 1 : Oui mais, il y a pleins de traitement différents que j'aimerais tester unitairement alors faire un test d'intégration avec le fichier...&lt;/p&gt;&lt;p&gt;Membre de l'équipe 2 : bon bah on va faire deux tests alors. Mais on fait quoi en premier?&lt;/p&gt;&lt;p&gt;Membre de l'équipe 1 : Bah c'est évident, on commence par l'unitaire.&lt;/p&gt;&lt;p&gt;Membre de l'équipe 2 : Et on fait comment pour le fichier?&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Constat&amp;nbsp;&lt;/p&gt;&lt;p&gt;A partir de ce point, on tourne en rond. On cherche à tester unitairement pour se rendre compte que l'on n'arrive pas à isoler ce maudit fichier.&lt;/p&gt;&lt;p&gt;Pattern&lt;/p&gt;&lt;p&gt;De ce que j'ai pu observé dans les différentes situations auxquelles j'ai été confrontées, le problème était le même. La question ne venait pas de la façon d'aborder les tests du composant mais bien le composant en lui même. Celui-ci dépendait d'une ressource (fichier XML, base de données, Service distant) lui fournissant des services de données. Ce même composant proposait un certain nombres de routines de traitement de ces mêmes données.&lt;/p&gt;&lt;p&gt;Logique + données, pourquoi ne pas séparer?&lt;/p&gt;&lt;p&gt;Au final, la résolution passait par une séparation de ces deux aspects du comportement. On extrait la partie accès aux données et la partie traitement. Rien de novateur, là dedans, ce qui l'est davantage pour moi (et je pense que vous en conviendrez), c'est que les tests ont facilité de détecter ce pattern et par expérience désormais si j'entend un développeur se posait la question : Test d'intégration ou test unitaire? je lui suggérerais en tout premier lieu de revoir le code ciblé par le test( ou l'idée qu'il s'en faisait en TDD).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=57" width="1" height="1"&gt;</description></item><item><title>Rhino Mock / MSTest : Isolation</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/02/08/rhino-mock-mstest-isolation.aspx</link><pubDate>Sun, 07 Feb 2010 21:23:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:56</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>
&lt;DIV class=csharpcode&gt;
&lt;P&gt;&lt;SPAN class=lnum&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=lnum&gt;Dans ce post, j’aimerais vous présenter diverses méthodes permettant d’effectuer des tests de comportements sur vos composants. On ne teste pas le contexte, les données retournées mais bien le comportement de la routine avec l’appelant et les dépendances.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;Contexte&lt;/H4&gt;
&lt;P&gt;On souhaite tester une méthode d’un dépôt(notion de &lt;A href="http://dddstepbystep.com/wikis/ddd/repository.aspx"&gt;repository&lt;/A&gt; en DDD). La routine en question est un service permettant d’envoyer des entités (&lt;STRONG&gt;Demande&lt;/STRONG&gt;) à un service Web pour centraliser ces demandes. Les différentes actions effectuées sont les suivantes :&lt;/P&gt;
&lt;P&gt;L’appelant appelle la méthode &lt;STRONG&gt;EnvoyerTout&lt;/STRONG&gt; prenant en paramètre une liste de &lt;STRONG&gt;Demande&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Le dépôt reçoit la liste et vérifie les informations de synchronisation dans une base de données locale.&lt;/P&gt;
&lt;P&gt;Le dépôt envoie la liste des demandes et les informations de synchronisation au service.&lt;/P&gt;
&lt;P&gt;Le service répond et fournit des informations permettant d’enregistrer en local que les demandes ont déjà été envoyé au serveur.&lt;/P&gt;
&lt;P&gt;Afin de limiter le trafic réseau, on souhaite vérifier que les demandes réellement envoyées au serveur n’avait jamais été envoyées. Cette information est disponible dans la base de données de locale.&lt;/P&gt;
&lt;P&gt;On souhaite isoler le comportement de cette routine car nous détectons rapidement les différentes dépendances :&lt;/P&gt;
&lt;P&gt;Un service Web qui doit répondre aux différentes requêtes du proxy.&lt;/P&gt;
&lt;P&gt;Une base de données contenant des informations de synchronisation.&lt;/P&gt;
&lt;P&gt;Une utilisation d’une dépôt permettant de récupérer les informations de l’utilisateur.&lt;/P&gt;
&lt;H4&gt;Explication du test&lt;/H4&gt;
&lt;P&gt;Voici donc le test en question :&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   1:          &lt;/SPAN&gt;[TestMethod]&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; EnvoyerToutNAjouteQueLesDemandesJamaisSynchronisees()&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;        {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;            utilisateurDepot = mockRepository.Stub&amp;lt;IUtilisateurDepot&amp;gt;();&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;            demandeDeControleService = mockRepository.StrictMock&amp;lt;DemandeDeControleService&amp;gt;();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;            demandeDeControleServeurDepot = mockRepository.Stub&amp;lt;DemandeDeControleServeurDepot&amp;gt;(demandeDeControleService, utilisateurDepot);&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;            Expect.Call(demandeDeControleServeurDepot.GetReplicaId()).Return(Guid.NewGuid());&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;            demandeDeControleServeurDepot.MettreAJourTousLesWatermark(&lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;, 0);&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;            LastCall.IgnoreArguments();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  10:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;  11:  &lt;/SPAN&gt;            Expect.Call(demandeDeControleService.EnvoyerTout(&lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)).IgnoreArguments().Return(0).Repeat.Once();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  12:  &lt;/SPAN&gt;            mockRepository.ReplayAll();&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;  13:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  14:  &lt;/SPAN&gt;            demandeDeControleServeurDepot.EnvoyerTout(CreerUneListeDeDemandes(5, 2));&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;  15:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  16:  &lt;/SPAN&gt;            ServiceDomain.DemandeDeControle[] demandeDeControleEnvoyees =&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;  17:  &lt;/SPAN&gt;                (ServiceDomain.DemandeDeControle[])demandeDeControleService.GetArgumentsForCallsMadeOn(x =&amp;gt; x.EnvoyerTout(&lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)).First().First();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  18:  &lt;/SPAN&gt;            Assert.AreEqual(2, demandeDeControleEnvoyees.Length);&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;  19:  &lt;/SPAN&gt;        }&lt;/PRE&gt;
&lt;P&gt;Pour décrire ce test commençons par le commencement d’un test à savoir son assertion :&lt;/P&gt;
&lt;P&gt;Ligne 18 :&amp;nbsp; Assert.AreEqual(2, demandeDeControleEnvoyees.Length); On vérifie ici que le nombre de demandes envoyés au serveur est bien égale à 2.&lt;/P&gt;
&lt;P&gt;On pourrait donc traduire cette assertion de la sorte : &lt;FONT size=3&gt;&lt;EM&gt;Si l'application fournit une liste de 5 demandes au dépôt mais que seuls 2 demandes de cette liste doivent être envoyées au serveur, vérifie que le dépôt n'a envoyé que ces 2 éléments au service&lt;/EM&gt;&lt;/FONT&gt;. &lt;/P&gt;
&lt;P&gt;Pourquoi?&lt;/P&gt;
&lt;P&gt;Ligne 14 : &lt;STRONG&gt;demandeDeControleServeurDepot.EnvoyerTout(CreerUneListeDeDemandes(5, 2));&lt;/STRONG&gt; C’est la routine que nous souhaitons tester. Dans le test, le paramètre (la liste de demandes suceptibles d’être envoyées) est fourni par une méthode du test &lt;STRONG&gt;CreerUneListeDeDemandes(5, 2)&lt;/STRONG&gt; prenant en paramètre le nombre total de demande à créer et le nombre de demandes à synchroniser (et qui doivent donc réellement être envoyées au serveur).&lt;/P&gt;
&lt;P&gt;Et la rapport avec l’assertion?&lt;/P&gt;
&lt;P&gt;Ligne 16 et 17 : On récupère le premier paramètre du premier appel (il n’y en a qu’un) de l’exécution de la méthode &lt;STRONG&gt;EnvoyerTout&lt;/STRONG&gt; d’un mock (&lt;STRONG&gt;demandeDeControleService&lt;/STRONG&gt;) .C’est le cœur même du test et l’objet de l’assertion. Ces paramètres proviennet directement du mock, le service n’est jamais instancié.&lt;/P&gt;
&lt;P&gt;Et comment c’est possible?&lt;/P&gt;
&lt;P&gt;De la ligne 4 à la ligne 9 : on prépare l’exécution du test en isolant, à l’aide de diverses techniques et fonctionnalités de RhinoMock, les dépendances détectées.&lt;/P&gt;
&lt;P&gt;Ligne 4 : on crée un stub du dépot utilisateur, aucun comportement ou données ne nous&amp;nbsp;sont nécessaires. Nous avons juste besoin d’une instance de ce dépot pour l’instanciation ligne 6. Le fait de le “stuber” permet de ne pas exécuter le code de ce dépôt.&lt;/P&gt;
&lt;P&gt;Ligne 5 : On crée un mock strict. Toutes les fonctionnalités du service seront recrées et tous les appels vers le service seront redirigés vers ce mock.&lt;/P&gt;
&lt;P&gt;Ligne 6 à 12 : Création du mock partiel du composant testé. Toutes les routines réclamant un contexte (ligne 7 et 8, la récupération des informations de synchronisation nécessite une base de données locale) sont redirigés vers le mock. On peut configurer le résultat de l’exécution de la méthode du mock (ligne6 : &lt;STRONG&gt;demandeDeControleServeurDepot.GetReplicaId()).Return(Guid.NewGuid())&lt;/STRONG&gt; ) ou l’on peut déclarer d’ignorer l’appel et les paramètres (ligne 7).&lt;/P&gt;
&lt;P&gt;Sur ce mock partiel, on appelle la méthode testée (ligne 11).&lt;/P&gt;
&lt;P&gt;Tous les comportement d’isolation ne seront disponibles qu’après la ligne 12. Celle-ci permet d’informer RhinoMock des différentes instructions d’isolation.&lt;/P&gt;
&lt;H4&gt;Conclusion&lt;/H4&gt;
&lt;P&gt;Pas de base de données à construire et de données à générer. Pas de service sur un serveur de test. Mais le comportement attendu est vérifié et le sera même en cas de changement de source de données, de modification du contrat de service…&lt;/P&gt;
&lt;P&gt;Cool non?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=56" width="1" height="1"&gt;</description><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Agile/default.aspx">Agile</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Mock+DDD/default.aspx">Mock DDD</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/TDD/default.aspx">TDD</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/MSTest/default.aspx">MSTest</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Rhino/default.aspx">Rhino</category></item><item><title>Mise sur étagère : ou comment revoir un flux de développement TDD avec TFS</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2010/02/04/mise-sur-tag-re-ou-comment-revoir-un-flux-de-d-veloppement-tdd-avec-tfs.aspx</link><pubDate>Thu, 04 Feb 2010 10:38:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:55</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;La mise sur étagère dans Team Foundation Version Control est l’une des fonctionnalités qui m’a le plus rapidement séduit.&lt;/P&gt;
&lt;P&gt;Classiquement, on s’en sert pour enregistrer une modification du source non achevée ( not done) mais que l’on souhaite conserver sur un serveur sauvegardé pour le récupérer en cas d’incident sur notre propre poste. &lt;A href="http://www.woodwardweb.com/vsts/000408.html"&gt;Martin &lt;/A&gt;avait écrit un excellent billet à ce sujet.&lt;/P&gt;
&lt;P&gt;On peut également l’utiliser pour communiquer nos modifications sur notre espace de travail avec d’autres développeurs, pour fusionner le travail, lors d’un binômage etc…&lt;/P&gt;
&lt;P&gt;Récemment, j’ai surtout pris l’habitude de mettre sur étagère dans mon flux de développement en TDD (ou plutôt en Test First Programming, certains connaissent mon attachement à cette différenciation).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Voici donc ce nouveau flux :&lt;/P&gt;
&lt;H5&gt;Définir le test&lt;/H5&gt;
&lt;H4&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;Définir le test, en particulier son nom &lt;/LI&gt;
&lt;LI&gt;Ecrire les assertions (ce que je vérifie) &lt;/LI&gt;
&lt;LI&gt;Définir mes besoins (contexte, instanciation des composants testés) &lt;/LI&gt;
&lt;LI&gt;Appel de la routine à tester &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;Obtenir le résultat du test (Red bar)&lt;/H5&gt;
&lt;P&gt;A ce stade, le projet ne compile pas en général, puisque rien n’est implémenté. L’objectif suivant est de faire compiler ce projet.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Je déclare les différentes variables &lt;/LI&gt;
&lt;LI&gt;j’implémente au minimum l’objet du test (création du type, de la routine)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Ici, j’en arrive au point ou je compile et il ne me reste qu’à implémenter la fonctionnalité avec l’assurance de tester automatiquement celle-ci. C’est pour moi le moment idéal d’effectuer une mise sur étagère des modifications de mon espace de travail. Celui-ci me permet d’être plus à l’aise dans l’implémentation, en cas de problème, je peux revenir en arrière par l’ensemble d’actions :&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Undo : annulation des modifications en attentes&lt;/LI&gt;
&lt;LI&gt;Get : Récupération de la dernière version (facultatif)&lt;/LI&gt;
&lt;LI&gt;Unshelve : Récupération du cadre de développement de la fonctionnalité à savoir mon test&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Essayez ce flux, c’est l’adopter.&lt;/P&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=55" width="1" height="1"&gt;</description><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Tests+unitaires/default.aspx">Tests unitaires</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/TFVC/default.aspx">TFVC</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Agile/default.aspx">Agile</category></item><item><title>La fonctionnalité : Lier à un élément de travail</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2009/07/20/la-fonctionnalit-lier-un-l-ment-de-travail.aspx</link><pubDate>Mon, 20 Jul 2009 03:25:21 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:52</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;em&gt;Etant actuellement impliqué dans un projet agile autour de Team Foundation Server (un peu plus à ce sujet très prochainement), j’ai décidé de faire partager mon expérience du produit lors de chacune des &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)#Meetings"&gt;&lt;em&gt;Daily Meetings&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. C’est donc l’occasion pour moi de revenir sur mes basiques et surtout de faire un point sur ce qu’on attend des fonctionnalités de Team Foundation Server et ce qu’elles apportent réellement à l’équipe.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Lier à un élément de travail&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Description : Lors de l’archivage d’une modification du projet, le développeur a l’opportunité de lier cette modification à un ou plusieurs éléments de travail. Un lien est alors créé entre son jeu de modifications (changeset) et l’élément de travail.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/image_20214194.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://batswirl.com/blogs/batswirl_fr/image_thumb_4B0909CC.png" width="534" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;1 : Lors de l’archivage, le 2° bouton dans le menu de gauche permet de lier la modification à un élément de travail&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/image_749CD4FF.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://batswirl.com/blogs/batswirl_fr/image_thumb_3D92D0F9.png" width="566" height="105" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2 : une requête permet de sélectionner l’élément de travail (par défaut les éléments de travail qui me sont assignés : “My Work Items”)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/image_0E60E562.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://batswirl.com/blogs/batswirl_fr/image_thumb_748CAF32.png" width="100" height="54" /&gt;&lt;/a&gt; &lt;a href="http://batswirl.com/blogs/batswirl_fr/image_54056F80.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://batswirl.com/blogs/batswirl_fr/image_thumb_73B44948.png" width="88" height="54" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3 : Le développeur peut agir directement sur l’élément de travail en sélectionnant l’action (associer l’élément de travail ou le résoudre)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/image_12F6F01C.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://batswirl.com/blogs/batswirl_fr/image_thumb_5FBAB6B2.png" width="376" height="264" /&gt;&lt;/a&gt; &lt;a href="http://batswirl.com/blogs/batswirl_fr/image_4918686B.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://batswirl.com/blogs/batswirl_fr/image_thumb_3301D70C.png" width="459" height="264" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Une fois l’archivage effectué, le lien est présent dans l’historique du contrôleur de code source à l’aide dans le détail de l’archivage et depuis la base de l’élément de travail à l’aide d’un lien vers le contrôleur de code souce.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Les apports&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En deux clics de la part du développeur on obtient une traçabilité “technico fonctionnelle”. J’entends par là que chacune des actions des développeurs, des testeurs et des architectes sont réliées à la demande ou au besoin initial. N’oublions pas que l’ensemble des ses informations vont persistées dans la base (SQL Server) pour des années et permettront de naviguer dans l’historique du projet et ainsi de :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Définir quelle était la cause d’une modification du contrôleur de code source&lt;/li&gt;    &lt;li&gt;Déterminer l’impact de l’implémentation d’une fonctionnalité ou d’un correctif&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Mise en place et Risques&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pas de mise en place particulière, il suffit d’avoir des éléments de travail à lier à vos modifications. Il s’agit donc de préparer les développements et les différentes tâches de l’équipe. Au niveau des risques, il est important de lier chaque modification du code source à &lt;u&gt;un et un seul élément de travail&lt;/u&gt;. Rappelons que lors d’un archivage, tous les fichiers modifiés dans l’espace de travail sont sélectionnées mais qu’il est possible de construire son jeu de modifications en sélectionnant les seuls fichiers qui ont permis d’implémenter la fonctionnalité ou de résoudre un bug.&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=52" width="1" height="1"&gt;</description></item><item><title>Contourner l’intégration continue</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2009/05/16/contourner-l-int-gration-continue.aspx</link><pubDate>Sat, 16 May 2009 08:49:34 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:49</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;De plus en d’équipes pratiquent l’intégration continue. Team Build et Team Foundation Server sont particulièrement bien dotés pour cela :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Démarrage des builds basé sur les évènements du contrôleur de source&lt;/li&gt;    &lt;li&gt;la configuration est facile et permet d’empiler des compilations et de définir le nombre de builds à conserver afin de limiter l’espace disque utilisé par exemple&lt;/li&gt;    &lt;li&gt;…&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cependant, il peut être utile de contourner le lancement de la compilation lors d’un archivage ( édtion d’un script de build, création d’une branche…).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Lors de l’archivage de votre changeset, placez en tête de votre commentaire le texte suivant : &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;***NO_CI***&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Cette commande indiquera au moteur de build que vous ne souhaitez pas déclencher l’intégration continue.&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=49" width="1" height="1"&gt;</description><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Build/default.aspx">Team Build</category></item><item><title>Mon équipe ne me quitte plus!!!</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2009/04/22/mon-quipe-ne-me-quitte-plus.aspx</link><pubDate>Wed, 22 Apr 2009 08:42:45 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:48</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Les r&amp;#233;sultats des Builds de vos projets sur votre iPhone, c'est possible avec &lt;a href="http://www.tfstogo.com/index.html" target="_blank"&gt;TFSToGo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;La partie configuration&amp;#160; :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img src="http://www.tfstogo.com/images/config.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;La liste des builds et le r&amp;#233;sultat&amp;#160; :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.tfstogo.com/images/builds.jpg" /&gt;&amp;#160;&amp;#160; &lt;img src="http://www.tfstogo.com/images/builddetails.png" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Vais peut &amp;#234;tre changer de mobile moi...&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=48" width="1" height="1"&gt;</description></item><item><title>Surveiller un serveur TFS</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/10/09/surveiller-un-serveur-tfs.aspx</link><pubDate>Thu, 09 Oct 2008 05:39:14 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:47</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/SurveillerunserveurTFS_14F44/images_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="69" alt="images" src="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/SurveillerunserveurTFS_14F44/images_thumb.jpg" width="154" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bas&amp;#233;es sur mon exp&amp;#233;rience et les diff&amp;#233;rentes installations que j'ai pu rencontr&amp;#233;, voici mes recommandations concernant la supervision d'un serveur TFS.&amp;#160; Celles ci ne sont pas exhaustives et doivent &amp;#234;tre major&amp;#233;es suivant votre topologie et les ressources mat&amp;#233;rielles de votre serveur. J'attends vos &amp;#233;ventuels retours afin de pr&amp;#233;ciser ce billet.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Quelque soit l'outil de supervision ou les proc&amp;#233;dures que vous voici une liste non-exhaustive des points que vous devez surveiller sur votre serveur TFS.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Configuration mat&amp;#233;rielle&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Consommation CPU : d&amp;#233;pend du nombre d'utilisateurs actuellement connect&amp;#233;s. Une forte consommation CPU peut survenir lors de la g&amp;#233;n&amp;#233;ration du Warehouse et/ou de la consultation des rapports et de Sharepoint. Sur une heure, une consommation inf&amp;#233;rieure &amp;#224; 30% du CPU devrait repr&amp;#233;senter un comportement normal.&lt;/p&gt;  &lt;p&gt;Consommation m&amp;#233;moire : Une forte consommation m&amp;#233;moire peut &amp;#234;tre observ&amp;#233; sur une instance unique (AT + DT), cela est caus&amp;#233; par SQL Server 2005 qui prend ses aises.&lt;/p&gt;  &lt;p&gt;Espace disque : D&amp;#233;pend fortement de la volum&amp;#233;trie (nombres de projets d'&amp;#233;quipe). Une partition syst&amp;#232;me doit disposer d'au moins 4Go de libre afin d'accueillir les MSI de mise &amp;#224; jour, la partition de donn&amp;#233;es ne devrait pas exc&amp;#233;der 50% d'espace occup&amp;#233;.&lt;/p&gt;  &lt;p&gt;Connectivit&amp;#233; : les adresses IP de la machine sont elles celles attribu&amp;#233;es lors de l'installation. Le nom de la machine est il celui d'origine. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;IIS&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Les sites Web suivants sont ils d&amp;#233;marr&amp;#233;s?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Default Web Site&lt;/p&gt;  &lt;p&gt;Sharepoint Central Administration v3&lt;/p&gt;  &lt;p&gt;Team Foundation Server&lt;/p&gt;  &lt;p&gt;Team System Web Access&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Les pools d'applications suivants sont ils d&amp;#233;marr&amp;#233;s?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Microsoft Team Foundation Server Application Pool&lt;/p&gt;  &lt;p&gt;ReportServer&lt;/p&gt;  &lt;p&gt;TFS WSS&lt;/p&gt;  &lt;p&gt;DefaultAppPool&lt;/p&gt;  &lt;p&gt;Sharepoint Central Administation V3&lt;/p&gt;  &lt;p&gt;TswaPool&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;V&amp;#233;rifier les en-t&amp;#234;tes d'h&amp;#244;te et les &amp;#233;ventuels certificats .&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Services Windows&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Les services suivants sont ils d&amp;#233;marr&amp;#233;s?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;TFSServerScheduler&lt;/p&gt;  &lt;p&gt;SharePoint Timer Service&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Journaux d' &amp;#233;v&amp;#233;nements&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Surveiller toutes les entr&amp;#233;es concernant Team Foundation Server bien s&amp;#251;r (Erreur TFXXXXXX) mais &amp;#233;galement celles li&amp;#233;s &amp;#224; SQL Server et surtout &amp;#224; son agent (Sauvegardes), &amp;#224; Sharepoint et &amp;#224; Reporting Services. Vous pouvez &amp;#233;galement consid&amp;#233;rer tous les erreurs provoqu&amp;#233;s lors de l'ex&amp;#233;cution d'une application par les diff&amp;#233;rentes comptes de services de TFS.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Les alertes concernant Team Foundation Version Control et Team Foundation WorkItem Tracking sont consid&amp;#233;r&amp;#233;es comme critiques. Les alertes concernant&amp;#160; TfsWarehouse et Reporting Services sont s&amp;#233;rieuses.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;SQL Server&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Les services suivants sont ils d&amp;#233;marr&amp;#233;s?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Database Services&lt;/p&gt;  &lt;p&gt;Analysis Services&lt;/p&gt;  &lt;p&gt;Reporting Services&lt;/p&gt;  &lt;p&gt;SQL Server Browser&lt;/p&gt;  &lt;p&gt;SQL Server Agent&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Les derni&amp;#232;res ex&amp;#233;cutions des sauvegardes se sont elles bien d&amp;#233;roul&amp;#233;s?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;V&amp;#233;rifiez la pr&amp;#233;sence des fichiers et l'historique des jobs SQL Server.&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=47" width="1" height="1"&gt;</description></item><item><title>KB947455 - Actions "Delete" répétées durant les fusions</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/07/21/kb947455-actions-delete-r-p-t-es-durant-les-fusions.aspx</link><pubDate>Mon, 21 Jul 2008 12:00:25 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:46</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Petit rappel : Une fusion dans Team Foundation Version Control est constitu&amp;#233;e d'une liste de &amp;quot;jeux de modifications&amp;quot; (ChangeSets en anglais) que l'on souhaite reporter d'une branche &amp;#224; l'autre. Les jeux de modifications comporte des actions (ajout, renommage, &amp;#233;dition...) appliqu&amp;#233;es &amp;#224; des Items(les fichiers et les dossiers). La fusion consiste donc &amp;#224; r&amp;#233;p&amp;#233;ter les diff&amp;#233;rentes actions sur les items d'un jeu de modifications sur les items communs entre les branches.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Probl&amp;#232;me : Les actions de suppression des fichiers ne sont pas r&amp;#233;p&amp;#233;t&amp;#233;s durant les fusions dans TFVC 2005 et TFVC 2008. Les fichiers qui ont &amp;#233;t&amp;#233; supprim&amp;#233;s dans la branche de destination seront donc toujours pr&amp;#233;sents malgr&amp;#233; le report de l'ensemble des modifications dans la branche Cible. Le probl&amp;#232;me est connu et une KB est disponible ici : &lt;a title="http://support.microsoft.com/default.aspx/kb/947455/en-us" href="http://support.microsoft.com/default.aspx/kb/947455/en-us"&gt;http://support.microsoft.com/default.aspx/kb/947455/en-us&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;R&amp;#233;solution : &lt;strong&gt;Microsoft&lt;/strong&gt; vient de publier un correctif visant &amp;#224; permettre de reporter les op&amp;#233;rations de suppression &amp;#224; l'aide d'une op&amp;#233;ration de fusion. Ce correctif est disponible ici : &lt;a title="http://code.msdn.microsoft.com/KB947455/Release/ProjectReleases.aspx?ReleaseId=1127" href="http://code.msdn.microsoft.com/KB947455/Release/ProjectReleases.aspx?ReleaseId=1127"&gt;http://code.msdn.microsoft.com/KB947455/Release/ProjectReleases.aspx?ReleaseId=1127&lt;/a&gt; .&lt;/p&gt;  &lt;p&gt;Il permet donc de voir appara&amp;#238;tre des actions de suppression lors de la fusion entre deux branches. &lt;/p&gt;  &lt;p&gt;Dans l'exemple ci-dessous, il s'agit du fichier web.config qui devra &amp;#234;tre supprim&amp;#233; apr&amp;#232;s la fusion.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="310" alt="image" src="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_thumb.png" width="460" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nous avons bien l'effet attendu en v&amp;#233;rifiant apr&amp;#232;s la fusion les modifications en attentes sur l'espace de travail :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="251" alt="image" src="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_thumb_1.png" width="652" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A noter toutefois que ce correctif ne permet pas de reporter des suppressions entre deux dossiers &amp;#224; l'aide de l'option &lt;strong&gt;&lt;em&gt;/Baseless &lt;/em&gt;&lt;/strong&gt;disponible &amp;#224; l'aide de l'outil en ligne de commande &lt;strong&gt;&lt;em&gt;tf.exe,&lt;/em&gt;&lt;/strong&gt; comme en t&amp;#233;moigne le r&amp;#233;sultat des modifications en attentes ci-dessous.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Apr&amp;#232;s ex&amp;#233;cution de la commande : &lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_6.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="33" alt="image" src="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_thumb_2.png" width="784" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_8.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="487" alt="image" src="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/KB947455ActionsDeleterptesdurantlesfusio_C552/image_thumb_3.png" width="513" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;On constate donc que le fichier qui a &amp;#233;t&amp;#233; supprim&amp;#233; dans la branche source a donc &amp;#233;t&amp;#233; ignor&amp;#233; lors de la fusion.&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=46" width="1" height="1"&gt;</description></item><item><title>Get Lastest on Check-out</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/29/get-lastest-on-check-out.aspx</link><pubDate>Tue, 29 Apr 2008 19:41:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:44</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;H3&gt;Ou pourquoi je ne recommande pas une nouvelle fonctionnalité de Microsoft Visual Studio Team Foundation Server 2008.&lt;/H3&gt;
&lt;P&gt;&lt;EM&gt;Rappel : la fonctionnalité permet d'extraire la dernière version du fichier lorsque vous demandez son extraction pour modificaiton. Il s'agit du comportement par défaut de Visual Source Safe et a été largement demandé par un certain nombre d' utilisateurs de TFVC 2005 qui n'en disposait pas&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Il est désormais connu de tous qu'au cours de la planification d'un projet il est indispensable de fixer des jalons, des points de repère qui nous permettront de vérifier que nous ne nous sommes pas écartés du droit chemin, de notre objectif initial. Si tel est le cas, nous corrigerons notre route, nos tâches à faire afin de reprendre la bonne direction.&lt;/P&gt;
&lt;P&gt;Cette technique, bien connue des adeptes de la navigation aérienne, nous l'utilisons tous les jours, à tout moment, dans chacune de nos actions. Nous établissons un plan de route que nous nous efforçons de tenir. Les imprévus font que nous devons nous positionner puis nous réorienter avant de pouvoir reprendre notre route.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.freemap.co.il/images/common/roadmap4.gif"&gt; &lt;/P&gt;
&lt;P&gt;Et en quoi cela concerne-t-il un contrôleur de code source ou un développeur me direz-vous?&lt;/P&gt;
&lt;H4&gt;Les développeurs n'échappent pas à la règle.&lt;/H4&gt;
&lt;P&gt;Je me place rarement derrière une machine, dans un environnement de travail sans savoir ce que je vais réaliser. A partir d'un objectif, je vais placer mes jalons, les sous-modules, les types, les routines qui me permettront de mener à bien ma tâche et faire progresser mon produit.&lt;/P&gt;
&lt;P&gt;Je commence donc mon travail, je crée des classes, des interfaces,bref... Je crée des fichiers. Tout irait pour le mieux jusqu'à ce que j'aie à&amp;nbsp;travailler en équipe et que j'utilise un contrôleur de code source et/ou que je doive prendre en compte l'existant.&lt;/P&gt;
&lt;P&gt;Je m'apprête à modiifer cette classe abstraite dont je dérive afin que cette dernière me fournisse un service bien sympathique et là... c'est le drame.&lt;/P&gt;
&lt;P&gt;Un développeur a mis à jour cette classe depuis ma dernière extraction du fichier et j'ai activé l'option &lt;STRONG&gt;Get lastest on Check-out. &lt;/STRONG&gt;Je dois désormais prendre en compte dans mon plan, cette nouvelle méthode à implémenter, les modifications du contexte etc...&lt;/P&gt;
&lt;P&gt;Qu'à cela ne tienne, les obstacles ne m'effraient guère et je consens à implémenter cette méthode et à modifier les paramètres d'appel des différentes méthodes.&lt;/P&gt;
&lt;P&gt;Pourtant,&amp;nbsp; au cours de la journée, l'incident se répète sans cesse et je commence à ne plus trop cerner mon plan d'action initial. J'en arrive même à faire des concessions dans ma conception initiale afin de me plier aux apports des autres développeurs. Soit.&lt;/P&gt;
&lt;H4&gt;Le constat&lt;/H4&gt;
&lt;P&gt;Le constat que nous pouvons tirer de cette journée de travail type est que le report des modifications d'un référentiel commun dans notre espace de travail et sans intervention de notre part nous force à intégrer ces modifications dans notre travail en cours.&lt;/P&gt;
&lt;P&gt;Pourtant, je l'avoue, je ne suis pas thread safe et l'accumulation de paramètres à prendre en compte réduit ma capacité à prendre les bonnes décisions sur le sous système que je suis en train de concevoir.&lt;/P&gt;
&lt;P&gt;Les différentes déviations que me font prendre ces modifications, m'eloignent petit à petit de ma route que je distingue de moins en moins. Imaginez qu'au cours de ces déviations, un golf s'offre à moi et vous comprendrez le retard que je pourrais prendre (les personnes me connaissant feront le rapprochement).&lt;/P&gt;
&lt;P&gt;En bref, si les méthodes agiles préconisent une réactivité face au changement, elles permettent également d'organiser ce changement. Après tout, durant mon développement si je pressens&amp;nbsp;devoir prendre en compte des modifications présentes sur le serveur, rien ne m'empêche de les récupérer. Cependant, je ne vois aucun intérêt à subir les affres d'un quelconque automatisme dans cette opération.&lt;/P&gt;
&lt;H4&gt;Une des valeurs agiles : Le courage&lt;/H4&gt;
&lt;P&gt;N'ayez crainte, il ne s'agit pas d'un article uniquement réservé aux adeptes des méthodes agiles, certains frileux des termes itérations et incrémentales ont déjà approuvé mes propos concernant mon point de vue sur cette option de TFS.&lt;/P&gt;
&lt;P&gt;Le courage, c'est aussi être honnête et reconnaître ses fautes. Ainsi, il m'arrive, parfois, durant mon développement, d'être lassé de cette "intégration" continue (notez bien les guillemets et ne me faites pas dire ce que je n'ai pas dit).&lt;/P&gt;
&lt;P&gt;Lassé, au point de tout faire pour en arriver à ce que je veux : Compiler, tester.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Alors que fait le développeur dans ce cas?&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Il intègre me direz vous. Non monsieur, il corrige, atténue, prend en compte pour palier son besoin primaire : Compiler et voir si ce qu'il a écrit marche.&lt;/P&gt;
&lt;P&gt;Certains appellent cela une intégration, pour ma part, j'appellerais ça une rustine.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://images.mec.ca/media/Images/Products/Cycling/4013173s_v1_m56577569830497995.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Ne nous y trompons pas, le changement et l'intégration non organisés sont des virus qui peuvent mettre à mal votre volonté de bien faire.&lt;/P&gt;
&lt;H4&gt;Et l'intégration alors?&lt;/H4&gt;
&lt;P&gt;J'entends alors au loin les discours moqueurs me signalant que je n'ai toujours pas intégré mon code avec le référentiel et que je vais en mettre du temps. Ma réponse est Oui, je vais mettre du temps pour intégrer, mais aussi prendre le temps d'intégrer.&lt;/P&gt;
&lt;P&gt;L'intégration consiste à confronter vos réalisations face aux modifications apportées par vos coéquipiers. Une partie de mon planning quotidien ou hebdomadaire devra être réservée à cela. Si, en plus, ces créneaux horaires sont communs à l'ensemble de l'équipe, je disposerais de collègue entièrement disponibles pour parler de telle abstraction à revoir ou de telle librairie que j'ai utilisée et qui leur permettrait d'archiver et donc d'intégrer plus rapidement. Encore une fois, déranger un développeur par vos propres soucis durant son développement ne provoquera que deux choses :&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Vous parlerez dans le vide ou presque&lt;/LI&gt;
&lt;LI&gt;Il ne vous invitera pas à son mariage se rappellant de ce petit bug que vous l'avez aidé à glisser dans sa fonctionnalité et qui a coûté si cher en production&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Voilà pourquoi je ne recommande pas et je n'active pas l'option &lt;STRONG&gt;Get lastest on Check Out&lt;/STRONG&gt; dans Team Foundation Version Control 2008.&lt;/P&gt;
&lt;P&gt;Dans une prochaine publication, je confronterai mes résultats de test de QI à ceux de Visual Studio afin d'expliquer pourquoi je ne laisse jamais l'IDE s'occuper de mon espace de travail.&lt;/P&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=44" width="1" height="1"&gt;</description></item><item><title>Erreur 32000 lors de la migration de TFS 2008</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/29/erreur-32000-lors-de-la-migration-de-tfs-2008.aspx</link><pubDate>Mon, 28 Apr 2008 20:25:04 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:43</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Voici une entr&amp;#233;e dans laquelle je vais pr&amp;#233;senter un probl&amp;#232;me que vous pourriez rencontrer lors d'une migration de votre serveur Team Foundation.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm1.static.flickr.com/34/123323729_a730bb761b.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bien que dans la majorit&amp;#233; des migrations que nous effectuons, la proc&amp;#233;dure se r&amp;#233;sume &amp;#224; la simple ex&amp;#233;cution du programme d'installation, certaines petites manipulations ou configurations peuvent vous posait probl&amp;#232;mes durant cette op&amp;#233;ration. Il semblerait que ce soit le cas pour la migration que j'ai op&amp;#233;r&amp;#233; aujourd'***. Il s'agit d'une instance install&amp;#233;e il y a de cela deux ans, qui n'a jamais pos&amp;#233; de probl&amp;#232;me particulier hormis peut &amp;#234;tre avec Analysis Services. La remise en &amp;#233;tat du Warehouse se r&amp;#233;sumait &amp;#224; une reconstruction de l'entrep&amp;#244;t de donn&amp;#233;es.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Voici donc l'erreur rencontr&amp;#233;e durant la phase d'installation / migration:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Erreur 32000 : The Commandline '&amp;quot;C:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Tools\TfsDb.exe&amp;quot; upgrade /server:&amp;quot;SERVER&amp;quot; /property:&amp;quot;TFS_SERVICE_ACCOUNT=SERVER\TFSSERVICE;TFS_REPORTING_ACCOUNT=SERVER\TFSREPORTS;LCID=1033;VSTF_AS_INSTANCE=SERVER;VSTF_AS_DATABASE=TFSWarehouse&amp;quot; /showui:196682' returned non-zero value: 100.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Cette erreur appara&amp;#238;t lors de la mise &amp;#224; jour de l'entrep&amp;#244;t de donn&amp;#233;es, tiens, tiens...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;La consultation des logs de l'installation pr&amp;#233;sents dans les fichiers temporaires de l'utilisateur proc&amp;#233;dant &amp;#224; la migration nous r&amp;#233;v&amp;#232;le un premier indice :&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Erreurs dans le gestionnaire de m&amp;#233;tadonn&amp;#233;es. Une erreur s'est produite lors de l'instanciation d'un objet de m&amp;#233;tadonn&amp;#233;es du fichier, &amp;#171; \\?\E:\Program Files\Microsoft SQL Server\MSSQL.2\OLAP\Data\TFSWarehouse.0.db\Today.1452.dim.xml &amp;#187;.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En allant consulter le fichier indiqu&amp;#233; dans le journal d'installation, j'ai pu constater qu'il s'agissait des informations de construction de la dimension Today du cube de Team Foundation Server. Dans ce fichier, qui semble &amp;#234;tre le fruit d'une s&amp;#233;rialisation XML, l'erreur se comprend enfin : le fichier n'est pas valide, plus encore, il ne poss&amp;#232;de pas de balise de fin et n'est donc pas bien form&amp;#233;.&lt;/p&gt;  &lt;p&gt;Apr&amp;#232;s avoir pris conseil aupr&amp;#232;s de certains coll&amp;#232;gues plus au fait que moi dans les affaires de cubes et d'entrep&amp;#244;ts, je prends mon courage &amp;#224; deux mains et renomme la dizaine de fichiers *.dim.xml qui semblent poser probl&amp;#232;mes pour constater :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Que l'installation s'ach&amp;#232;ve sans autre avertissemnet&lt;/li&gt;    &lt;li&gt;Que les fichiers *.dim.xml ont &amp;#233;t&amp;#233; reg&amp;#233;n&amp;#233;r&amp;#233;s&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;L'architecture de Team Foundation est venue &amp;#224; notre rescousse car l'entrep&amp;#244;t de donn&amp;#233;es et le cube peuvent &amp;#234;tre reg&amp;#233;n&amp;#233;r&amp;#233;s uniquement &amp;#224; l'aide des donn&amp;#233;es pr&amp;#233;sentes dans les diff&amp;#233;rentes bases relationnelles (les donn&amp;#233;es op&amp;#233;rationnelles de TFS). Le fichier WareHouseSchema.xml, pr&amp;#233;sent dans le r&amp;#233;pertoire d'installation de TFS, contient l'int&amp;#233;gralit&amp;#233; des d&amp;#233;finitions n&amp;#233;cessaires &amp;#224; sa reconstruction et bien entendu , nous n'aurions pas pu supprimer la d&amp;#233;finition des dimensions dans une d&amp;#233;finition standard d'un entrep&amp;#244;t.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En esp&amp;#233;rant que vous n'ayez pas &amp;#224; vous servir de ce post...&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=43" width="1" height="1"&gt;</description><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category></item><item><title>Étendre les attributs des méthode de tests dans MsTest</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/28/tendre-les-attributs-des-m-thode-de-tests-dans-mstest.aspx</link><pubDate>Sun, 27 Apr 2008 22:30:23 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:38</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Un article tr&amp;#232;s sympa de &lt;a href="http://jburtch.spaces.live.com/default.aspx" target="_blank"&gt;Justin Burtch&lt;/a&gt;&amp;#160; est disponible &lt;a href="http://jburtch.spaces.live.com/blog/cns!F1960C7173E954EA!285.entry" target="_blank"&gt;ici&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Ce dernier a en effet d&amp;#233;velopp&amp;#233; quelques bouts de code permettant d'&amp;#233;tendre les fonctionnalit&amp;#233;s de MsTest et permettre certaines configurations possibles avec mbUnit par exemple. Le code source est disponible en version Visual Studio 2005 mais la conversion ne m'a pos&amp;#233; aucun probl&amp;#232;me. &lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=38" width="1" height="1"&gt;</description></item><item><title>Team Foundation Version Control : les bonnes surprises de la version 2008</title><link>http://batswirl.com/blogs/batswirl/archive/2008/04/27/team-foundation-version-control-les-bonnes-surprises-de-la-version-2008.aspx</link><pubDate>Sun, 27 Apr 2008 19:46:50 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:35</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Complètement passée inaperçue lors de mon analyse des nouvelles fonctionalités de Visual Studio 2008, une limitation de la version 2005 du produit a disparu. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Rappel des faits&lt;/h4&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Les espaces de travail permettent de définir la liaison entre votre système de fichiers et votre contrôleur de source. Les liaisons multiples permettent de construire une vue de votre contrôleur, éventuellement composée d' éléments de différents projets d' équipe.&lt;/p&gt; &lt;p&gt;Revenons sur un cas d' utilisation, le &lt;em&gt;&lt;strong&gt;Shared Source&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;Imaginons un plateau de développement composé de deux équipes distinctes, une équipe "Framework" et une équipe "Applicatif". L'équipe "Framework" met à disposition des développeurs de l'équipe "Applicatif" un certain nombre de composants, facitlitant l'implémentation des applications et favorisant un développement homogène pour l'ensemble du plateau de développement.&lt;/p&gt; &lt;p&gt;Chaque équipe travaille dans son propre projet d'équipe.&lt;/p&gt; &lt;p&gt;Afin de faire partager leurs expériences de l'utilisation des composants, il a été décidé de mettre à disposition de l'équipe "Applicatif" les différents sources des composants qu'ils utilisent. Ils peuvent ainsi à tout moment effectuer des corrections qui seront potentiellement intégrées au code du framework après acceptation de l'équipe "Framework".&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Une solution est de créer une branche du code source disponible du "Framework" dans le projet d'équipe "Applicatif". Cependant, cela impose aux développeurs de l'équipe "Applicatif" de mettre à jour le source à partir de la branche mère à chaque modification du framework et la gestion devient difficile si les équipes consommant le framework viennent à se multiplier.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Une autre solution consiste à créer une branche du code principal (branche Main) du framework directement dans le projet d'équipe "Framework" et à utiliser cette branche afin de permettre la diffusion et l'édition du source dans un référentiel partagé par toutes les équipes de développement. On utilise alors les liaisons multiples pour que les développeurs possèdent dans leur espace de travail :&lt;/p&gt; &lt;p&gt;le code de l'application en cours de réalisation&lt;/p&gt; &lt;p&gt;le code du framework utilisé&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h5&gt;Problème avec TFS 2005&lt;/h5&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Le problème survient lorsque le code du framework doit faire partie de la solution de l' application afin de pouvoir travailler en mode projet sur les références du framework. &lt;u&gt;En effet, il n'est pas possible de définir qu'une entrée du contrôleur de code source soit liée à votre système dans un sous dossier d' un dossier déjà utilisé dans un espace de travail.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Et pourtant, les développeurs ont l'habitude de retrouver dans une solution : 1 ou plusiers fichiers Sln à la racine et les dossiers contenant les projets.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h5&gt;Résolution TFS 2008&lt;/h5&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Cette limitation n'existe donc plus et nous pouvons donc allègrement définir ce genre de choses :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Soit le projet applicatif &lt;strong&gt;SmallBusiness&lt;/strong&gt; dont voici la structure :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img src="http://batswirl.com/photos/screenshots/images/31/original.aspx"&gt; &lt;/p&gt; &lt;p&gt;et un projet &lt;strong&gt;Framework&lt;/strong&gt; dont la structure vous est ici présentée :&lt;/p&gt; &lt;p&gt;&lt;img src="http://batswirl.com/photos/screenshots/images/32/original.aspx"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Nous pouvons maintenant définir un espace de travail permettant à l'équipe &lt;strong&gt;SmallBusiness&lt;/strong&gt; de travailler avec le dossier &lt;strong&gt;LogTool&lt;/strong&gt; directement dans le dossier &lt;strong&gt;Main&lt;/strong&gt; :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img height="413" src="http://batswirl.com/photos/screenshots/images/33/original.aspx" width="596"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Le résultat sur le système de fichier parle de lui même, le développeur pourra attacher très facilement le projet LogTool dans la solution SmallBusiness.sln.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl/WindowsLiveWriter/TeamFoundationVersionControllesbonnessur_C9F3/FileSystem_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="196" alt="FileSystem" src="http://batswirl.com/blogs/batswirl/WindowsLiveWriter/TeamFoundationVersionControllesbonnessur_C9F3/FileSystem_thumb.jpg" width="474" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h5&gt;Et la concurrence dans tout çà&lt;/h5&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Cette nouvelle fonctionnalité fait voler en éclats l'un des arguments de la concurrence. Certes il ne s'agissait pas d'une grosse limitation mais comme elle était âprement critiquée par certaines comparaisons entre TFS et plus particulièrement TFVC avec d'autres contrôleurs de source, certains clients me posaient la question.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Pour preuve, voilà un extrait d'un comparatif disponible ici : &lt;a title="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf" href="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf"&gt;http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf&lt;/a&gt;&lt;a title="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf" href="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf"&gt;http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;TFS does not support sparse branching.&lt;br&gt;A user can individually “cloak” or “uncloak”&lt;br&gt;project folders. However, the same set of&lt;br&gt;files from two different repository folders&lt;br&gt;(for example, main and branch_x) cannot&lt;br&gt;be mapped to the same local folder in a&lt;br&gt;workspace.&lt;/em&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Je connais quelques personnes ayant un document à mettre à jour...&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=35" width="1" height="1"&gt;</description><category domain="http://batswirl.com/blogs/batswirl/archive/tags/Team+Source+Control/default.aspx">Team Source Control</category></item><item><title>Team Foundation Version Control : les bonnes surprises de la version 2008</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/27/team-foundation-version-control-les-bonnes-surprises-de-la-version-2008.aspx</link><pubDate>Sun, 27 Apr 2008 19:46:50 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:36</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Compl&amp;#232;tement pass&amp;#233;e inaper&amp;#231;ue lors de mon analyse des nouvelles fonctionalit&amp;#233;s de Visual Studio 2008, une limitation de la version 2005 du produit a disparu. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Rappel des faits&lt;/h4&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Les espaces de travail permettent de d&amp;#233;finir la liaison entre votre syst&amp;#232;me de fichiers et votre contr&amp;#244;leur de source. Les liaisons multiples permettent de construire une vue de votre contr&amp;#244;leur, &amp;#233;ventuellement compos&amp;#233;e d' &amp;#233;l&amp;#233;ments de diff&amp;#233;rents projets d' &amp;#233;quipe.&lt;/p&gt;  &lt;p&gt;Revenons sur un cas d' utilisation, le &lt;em&gt;&lt;strong&gt;Shared Source&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Imaginons un plateau de d&amp;#233;veloppement compos&amp;#233; de deux &amp;#233;quipes distinctes, une &amp;#233;quipe &amp;quot;Framework&amp;quot; et une &amp;#233;quipe &amp;quot;Applicatif&amp;quot;. L'&amp;#233;quipe &amp;quot;Framework&amp;quot; met &amp;#224; disposition des d&amp;#233;veloppeurs de l'&amp;#233;quipe &amp;quot;Applicatif&amp;quot; un certain nombre de composants, facitlitant l'impl&amp;#233;mentation des applications et favorisant un d&amp;#233;veloppement homog&amp;#232;ne pour l'ensemble du plateau de d&amp;#233;veloppement.&lt;/p&gt;  &lt;p&gt;Chaque &amp;#233;quipe travaille dans son propre projet d'&amp;#233;quipe.&lt;/p&gt;  &lt;p&gt;Afin de faire partager leurs exp&amp;#233;riences de l'utilisation des composants, il a &amp;#233;t&amp;#233; d&amp;#233;cid&amp;#233; de mettre &amp;#224; disposition de l'&amp;#233;quipe &amp;quot;Applicatif&amp;quot; les diff&amp;#233;rents sources des composants qu'ils utilisent. Ils peuvent ainsi &amp;#224; tout moment effectuer des corrections qui seront potentiellement int&amp;#233;gr&amp;#233;es au code du framework apr&amp;#232;s acceptation de l'&amp;#233;quipe &amp;quot;Framework&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Une solution est de cr&amp;#233;er une branche du code source disponible du &amp;quot;Framework&amp;quot; dans le projet d'&amp;#233;quipe &amp;quot;Applicatif&amp;quot;. Cependant, cela impose aux d&amp;#233;veloppeurs de l'&amp;#233;quipe &amp;quot;Applicatif&amp;quot; de mettre &amp;#224; jour le source &amp;#224; partir de la branche m&amp;#232;re &amp;#224; chaque modification du framework et la gestion devient difficile si les &amp;#233;quipes consommant le framework viennent &amp;#224; se multiplier.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Une autre solution consiste &amp;#224; cr&amp;#233;er une branche du code principal (branche Main) du framework directement dans le projet d'&amp;#233;quipe &amp;quot;Framework&amp;quot; et &amp;#224; utiliser cette branche afin de permettre la diffusion et l'&amp;#233;dition du source dans un r&amp;#233;f&amp;#233;rentiel partag&amp;#233; par toutes les &amp;#233;quipes de d&amp;#233;veloppement. On utilise alors les liaisons multiples pour que les d&amp;#233;veloppeurs poss&amp;#232;dent dans leur espace de travail :&lt;/p&gt;  &lt;p&gt;le code de l'application en cours de r&amp;#233;alisation&lt;/p&gt;  &lt;p&gt;le code du framework utilis&amp;#233;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Probl&amp;#232;me avec TFS 2005&lt;/h5&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Le probl&amp;#232;me survient lorsque le code du framework doit faire partie de la solution de l' application afin de pouvoir travailler en mode projet sur les r&amp;#233;f&amp;#233;rences du framework. &lt;u&gt;En effet, il n'est pas possible de d&amp;#233;finir qu'une entr&amp;#233;e du contr&amp;#244;leur de code source soit li&amp;#233;e &amp;#224; votre syst&amp;#232;me dans un sous dossier d' un dossier d&amp;#233;j&amp;#224; utilis&amp;#233; dans un espace de travail.&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Et pourtant, les d&amp;#233;veloppeurs ont l'habitude de retrouver dans une solution : 1 ou plusiers fichiers Sln &amp;#224; la racine et les dossiers contenant les projets.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;R&amp;#233;solution TFS 2008&lt;/h5&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Cette limitation n'existe donc plus et nous pouvons donc all&amp;#232;grement d&amp;#233;finir ce genre de choses :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Soit le projet applicatif &lt;strong&gt;SmallBusiness&lt;/strong&gt; dont voici la structure :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://batswirl.com/photos/screenshots/images/31/original.aspx" /&gt; &lt;/p&gt;  &lt;p&gt;et un projet &lt;strong&gt;Framework&lt;/strong&gt; dont la structure vous est ici pr&amp;#233;sent&amp;#233;e :&lt;/p&gt;  &lt;p&gt;&lt;img src="http://batswirl.com/photos/screenshots/images/32/original.aspx" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nous pouvons maintenant d&amp;#233;finir un espace de travail permettant &amp;#224; l'&amp;#233;quipe &lt;strong&gt;SmallBusiness&lt;/strong&gt; de travailler avec le dossier &lt;strong&gt;LogTool&lt;/strong&gt; directement dans le dossier &lt;strong&gt;Main&lt;/strong&gt; :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img height="413" src="http://batswirl.com/photos/screenshots/images/33/original.aspx" width="596" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Le r&amp;#233;sultat sur le syst&amp;#232;me de fichier parle de lui m&amp;#234;me, le d&amp;#233;veloppeur pourra attacher tr&amp;#232;s facilement le projet LogTool dans la solution SmallBusiness.sln.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/TeamFoundationVersionControllesbonnessur_C9F3/FileSystem_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="196" alt="FileSystem" src="http://batswirl.com/blogs/batswirl_fr/WindowsLiveWriter/TeamFoundationVersionControllesbonnessur_C9F3/FileSystem_thumb.jpg" width="474" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Et la concurrence dans tout &amp;#231;&amp;#224;&lt;/h5&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Cette nouvelle fonctionnalit&amp;#233; fait voler en &amp;#233;clats l'un des arguments de la concurrence. Certes il ne s'agissait pas d'une grosse limitation mais comme elle &amp;#233;tait &amp;#226;prement critiqu&amp;#233;e par certaines comparaisons entre TFS et plus particuli&amp;#232;rement TFVC avec d'autres contr&amp;#244;leurs de source, certains clients me posaient la question.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pour preuve, voil&amp;#224; un extrait d'un comparatif disponible ici : &lt;a title="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf" href="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf"&gt;http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf&lt;/a&gt;&lt;a title="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf" href="http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf"&gt;http://www.perforce.com/perforce/comparisons/perforce_mstfs.pdf&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;TFS does not support sparse branching.      &lt;br /&gt;A user can individually &amp;#8220;cloak&amp;#8221; or &amp;#8220;uncloak&amp;#8221;       &lt;br /&gt;project folders. However, the same set of       &lt;br /&gt;files from two different repository folders       &lt;br /&gt;(for example, main and branch_x) cannot       &lt;br /&gt;be mapped to the same local folder in a       &lt;br /&gt;workspace.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Je connais quelques personnes ayant un document &amp;#224; mettre &amp;#224; jour...&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=36" width="1" height="1"&gt;</description></item><item><title>Images VPC de test de Visual Studio Team System</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/24/images-vpc-de-test-de-visual-studio-team-system.aspx</link><pubDate>Thu, 24 Apr 2008 13:34:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:26</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;Ces images fournies par Microsoft permettent de tester l'intégralité des fonctionnalités de la plate-forme (clients et serveurs). Elles disposent également d'un ensemble d'ateliers permettant de prendre en main le produit.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;L'image est disponible ici : &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c7a809d8-8c9f-439f-8147-948bc6957812&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c7a809d8-8c9f-439f-8147-948bc6957812&amp;amp;displaylang=en&lt;/A&gt;&amp;nbsp;et la dernière version expirera en décembre 2008.&lt;/P&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=26" width="1" height="1"&gt;</description></item><item><title>Techdays 2008 - C'est fini pour moi</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2008/02/13/techdays-2008-c-est-fini-pour-moi.aspx</link><pubDate>Wed, 13 Feb 2008 09:15:11 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:22</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;L'&amp;#233;dition 2008 s'ach&amp;#232;ve d&amp;#232;s ce matin pour moi. Apr&amp;#232;s avoir donner deux sessions concernant Team System, je suis d&amp;#232;s &amp;#224; pr&amp;#233;sent de retour chez nos clients.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;J'aimerais remercier tout le monde de l'accueil, l'engouement et la bonne humeur qui marqua cette &amp;#233;dition et plus particuli&amp;#232;rement les personnes qui m'ont accompagn&amp;#233; durant les sessions, Vianney Lemaire d'Artegos et Florent Santin de Winwise.&lt;/p&gt;  &lt;p&gt;Les sessions seront probablement disponibles d'ici un &amp;#224; deux mois sur le site &lt;a href="http://www.microsoft.com/france/vision/List.aspx?Qry=&amp;amp;S=x&amp;amp;Did=&amp;amp;Pid=&amp;amp;Nid=&amp;amp;Cid=&amp;amp;Tid=&amp;amp;x=36&amp;amp;y=15" target="_blank"&gt;m&amp;#233;dia Microsoft&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Bien entendu, l'aventure ne s'arr&amp;#234;te pas l&amp;#224; et l'on pourra tr&amp;#232;s prochainement se rencontrer, tr&amp;#232;s prochainement...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mais on y reviendra :D&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=22" width="1" height="1"&gt;</description></item><item><title>Gauntlet passera sur TFS</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2007/12/13/gauntlet-passera-sur-tfs.aspx</link><pubDate>Thu, 13 Dec 2007 11:33:06 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:21</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Si cela vous interesse bien entendu...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.whatisthe2gs.apple2.org.za/the_fairway/game_pages/game_boxes_small/gauntlet.gif"&gt; &lt;/p&gt; &lt;p&gt;Construire ses versions à la hache?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/bharry/archive/2007/12/12/a-new-community-project-based-on-tfs.aspx"&gt;Brian Harry&lt;/a&gt; vient d'annoncer la bonne nouvelle sur son blog. Le projet &lt;strong&gt;Gauntlet&lt;/strong&gt; trouvera son implémentation dans &lt;strong&gt;Rosario&lt;/strong&gt;, la future version de &lt;strong&gt;TFS&lt;/strong&gt;.&lt;/p&gt; &lt;h3&gt;Gauntlet&lt;/h3&gt; &lt;p&gt;L'idée de &lt;strong&gt;Gauntlet&lt;/strong&gt; vient modifier le processus de validation des builds dans le cadre de l'intégration (en particulier dans les grosses équipes). &lt;/p&gt; &lt;p&gt;En effet, comme on peut le constater dans TFS 2008 (avec la règle d'archivage "Builds") lorqu'une build qui n'a pas passé les critéres du processus automatisé (échec de compilation, de l'analyse statique, de l'exécution des tests unitaires ou&amp;nbsp;le nom respect des QoS...&amp;nbsp;) on peut décider de bloquer la chaîne de production en interdisant tous les archivages sur le contrôleur de code source (sauf les tentatives de réparation de la build).&lt;/p&gt; &lt;p&gt;Cette technique trouve son origine dans les processus de Toyota qui stoppe la chaîne de production dès qu'une alerte est émise. Cependant et plus particulièrement dans les grosses équipes de développement ou dans les équipes réparties géographiquement, cette option perd de son sens et est très risquée.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Exemple :&amp;nbsp;Pourquoi retarder la mise à disposition d'une fonctionnalité de l'équipe de Paris parce qu'un archivage de l'équipe de New York a provoqué l'échec de l'intégration continue? D'autant que les développeurs de Paris n'auront pas forcement les moyens d'y remedier pour pousser leurs modifications sur le référentiel.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;Un projet communautaire permet dores et déjà tester cette politique : &lt;a href="http://www.opengauntlet.org/"&gt;Open Gauntlet&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;les avantages&lt;/h3&gt; &lt;p&gt;La démarche de Gauntlet est tout autre, quasiment l'inverse puisqu'elle revient à dire que si les modifications apportées n'ont pas&amp;nbsp;respecté les critères de sortie d'une version, ces modifications doivent tout simplement être supprimées de la liste des modifications à constuire. On exclut donc le code défectueux pour donner la possibilité aux autres équipes&amp;nbsp;ou autres développeurs de voir leur code être intégré.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Deuxième effet pertinent, l'intégration en tant que telle.&amp;nbsp;Si l'équipe&amp;nbsp;A a fournit un&amp;nbsp;code défectueux&amp;nbsp;et que l'équipe B doit attendre la résolution de ce&amp;nbsp;code pour archiver,&amp;nbsp;l'effort d'intégration reviendra à l'équipe B (qui n'a pour l'instant pas commi d'erreur). En revanche, dans la&amp;nbsp;démarche de &lt;strong&gt;Gauntlet&lt;/strong&gt; et de &lt;strong&gt;Gated Checkin&lt;/strong&gt; de &lt;strong&gt;Rosario&lt;/strong&gt;, l'effort d'intégration sera réalisé&amp;nbsp;par l'équipe A, fautive dans le scénario présent, et avouons que cela&amp;nbsp;semble plus juste.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Entre les lignes&lt;/h3&gt; &lt;p&gt;Ce que l'on peut deviner également à la lecture de ce post de Mr Hary, c'est qu'une telle fonctionnalité réclame l'implémentation d'un mécanisme de comparaison des versions de notre projet afin d'exclure l'archive fautive. Cela nous laisse présager de grands changements dans l'avenir de TFVC (Team Foundaiton Version Control)&amp;nbsp;et de Team Build et pourquoi pas les prémisses d'une approche de construction par composant de notre projet. Alléchant...&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=21" width="1" height="1"&gt;</description></item><item><title>Fin de semaine de formation</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2007/12/07/fin-de-semaine-de-formation.aspx</link><pubDate>Fri, 07 Dec 2007 18:29:48 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:20</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Cette semaine avait lieu, à l'initiative de Microsoft et plus particulièrement &lt;a href="http://blogs.msdn.com/ericleloch/" target="_blank"&gt;d'Eric Le Loc'h&lt;/a&gt;, 2 ateliers à destination des consultants des centres de compétences Team System.&lt;/p&gt; &lt;p&gt;Le premier avait pour objectif d'ouvrir de nouvelles possibilités de personnalisation et d'extension des projets d'équipes TFS en introduisant les concepts BI d'Analysis Services et de Reporting Services et leur fonctionnement autour des produits Team System.&lt;/p&gt; &lt;p&gt;Le second avait pour but de préparer au passage de la certification 70-510, concernant l'administration d'un serveur TFS.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Ayant co-animé la première et animé la seconde, j'aimerais remercier les participants pour le partage et l'ouverture d'esprit dont ils ont su faire preuve durant ce stage. Les questions posées étaient toutes pertinentes,&amp;nbsp;la passion et le sérieux&amp;nbsp;au rendez vous, et je dois avouer que donner des formations dans ce contexte&amp;nbsp;fût un réel plaisir. &lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=20" width="1" height="1"&gt;</description></item><item><title>Un nouveau compagnon Outlook pour Team Foundation Server</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2007/10/16/un-nouveau-compagnon-outlook-pour-team-foundation-server.aspx</link><pubDate>Tue, 16 Oct 2007 10:18:26 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:19</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Annonce officielle de la sortie de &lt;a href="http://www.ekobit.com/ProductsDetailView.aspx?id=1"&gt;Team Companion&lt;/a&gt; par la société &lt;a href="http://www.ekobit.com/"&gt;Ekobit&lt;/a&gt;, plugin Outlook permettant la connexion à votre&amp;nbsp;base de données d'éléments de travail à partir de Microsoft Outlook.&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=19" width="1" height="1"&gt;</description></item><item><title>Références Team System</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2007/10/04/r-f-rences-team-system.aspx</link><pubDate>Thu, 04 Oct 2007 12:33:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:18</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Afin de parfaire votre apprentissage de Team System, voici quelques liens et recommandations de lectures :&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Sites&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://msdn2.microsoft.com/fr-fr/teamsystem/default.aspx"&gt;MSDN Team System&lt;/a&gt; : le site MSDN France des produits Team System&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.teamsystemrocks.com/"&gt;Team System Rocks&lt;/a&gt; : regroupe les posts de blogs les plus interessants concernat Team System&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/bharry/default.aspx"&gt;Brian Harry&lt;/a&gt; : Le blog du Program Manager le plus actif de Team System qui publie notamment les comptes rendus sur l'utilisation en interne (chez Microsoft) de Team System&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/ShowForum.aspx?ForumID=14&amp;amp;TagID=7"&gt;Channel 9 - Visual Studio&lt;/a&gt; : D&amp;#233;couvrez les nouveaut&amp;#233;s et le futur de la gamme &amp;#224; l'aide des reportages vid&amp;#233;os de Channel 9&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Articles&lt;/h2&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.sei.cmu.edu/str/descriptions/cyclomatic_body.html" target="_blank"&gt;Cyclomatic complexity&lt;/a&gt; : La d&amp;#233;finition du SEI de la complexit&amp;#233; cyclomatique que nous retrouvons maintenant dans Visual Studio Team System For Software Developper avec les Code Metrics.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sei.cmu.edu/str/descriptions/mitmpm.html" target="_blank"&gt;Index maintainability&lt;/a&gt; : La d&amp;#233;finition officielle d'une autre m&amp;#233;trique interessante des Code Metrics.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Outils&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa718351.aspx"&gt;Power tools&lt;/a&gt; : le site des extensions propos&amp;#233;es par Microsoft pour Team Foundation Server&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.attrice.info/cm/tfs/"&gt;Attrice Corporation&lt;/a&gt; : auteur des outils Team Foundation SideKicks et Team Build SideKicks&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/TFSAdmin"&gt;TFS Admin&lt;/a&gt; : outil d'administration de TFS&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/tfseventsubscription"&gt;TFS Event Subscription Tool&lt;/a&gt; : outil d'abonnement aux &amp;#233;v&amp;#232;nements TFS&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=automation"&gt;Automaton&lt;/a&gt; : outil d'int&amp;#233;gration continue&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn2.microsoft.com/fr-fr/library/ms364045(VS.80).aspx"&gt;CI par Microsoft&lt;/a&gt; : le tutorial et le code associ&amp;#233; &amp;#224; la mise en place d'une build continu&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Team Build&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://msbuildtasks.tigris.org/"&gt;Community Tasks&lt;/a&gt; : Librairie de t&amp;#226;ches MSBuild&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/sdctasks"&gt;SDC Tasks&lt;/a&gt; : Librairie de t&amp;#226;ches MSBuild&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Livres&lt;/h2&gt;  &lt;h3&gt;Gestion de configuration&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/s/ref=nb_ss_eb/403-6726101-8984407?__mk_fr_FR=%C5M%C5Z%D5%D1&amp;amp;initialSearch=1&amp;amp;url=search-alias%3Denglish-books&amp;amp;field-keywords=Configuration+Management+Principles+and+Practice&amp;amp;Go.x=11&amp;amp;Go.y=17"&gt;Configuration Management Principles and Practice&lt;/a&gt; par Anne Mette Hass et Glenn Hass&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/Build-Master-Microsofts-Configuration-Management/dp/0321332059/ref=sr_1_1/403-6726101-8984407?ie=UTF8&amp;amp;s=english-books&amp;amp;qid=1191232256&amp;amp;sr=1-1"&gt;The Build Master: Microsoft's Software Configuration Management Best Practices&lt;/a&gt; par Vincent Maraia&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/s/ref=nb_ss_eb/402-3617738-4390538?__mk_fr_FR=%C5M%C5Z%D5%D1&amp;amp;initialSearch=1&amp;amp;url=search-alias%3Denglish-books&amp;amp;field-keywords=Software+Configuration+Management+Patterns%3A+Effective+Teamwork%2C+Practical+Integration&amp;amp;Go.x=9&amp;amp;Go.y=18"&gt;Software Configuration Management Patterns: Effective Teamwork, Practical Integration&lt;/a&gt; par Stephen P. Berczuk, Steve Berczuk, et Brad Appleton &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Team System&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/Visual-Studio-Team-System-Development/dp/0321418506/ref=sr_1_1/403-6726101-8984407?ie=UTF8&amp;amp;s=english-books&amp;amp;qid=1191232443&amp;amp;sr=1-1"&gt;Visual Studio Team System: Better Software Development for Agile Teams&lt;/a&gt; par Will Stott et James W. Newkirk&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/Software-Engineering-Microsoft-Visual-Studio/dp/0321278720/ref=sr_1_6/403-6726101-8984407?ie=UTF8&amp;amp;s=english-books&amp;amp;qid=1191232443&amp;amp;sr=1-6"&gt;Software Engineering With Microsoft Visual Studio Team System&lt;/a&gt; par Sam Guckenheimer et Juan J. Perez&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/Professional-Visual-Studio-2005-System/dp/0764584367/ref=sr_1_10/403-6726101-8984407?ie=UTF8&amp;amp;s=english-books&amp;amp;qid=1191232443&amp;amp;sr=1-10"&gt;Professional Visual Studio 2005 Team System&lt;/a&gt; par Jean-Luc David, Tony Loton, et Erik Gunvaldson&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Tests&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/Test-Driven-Development-Example-Kent-Beck/dp/0321146530/ref=sr_1_1/403-6726101-8984407?ie=UTF8&amp;amp;s=english-books&amp;amp;qid=1191232731&amp;amp;sr=1-1"&gt;Test-Driven Development: By Example&lt;/a&gt; par Kent Beck&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.fr/Test-Driven-Development-Microsoft-James-Newkirk/dp/0735619484/ref=sr_1_1/403-6726101-8984407?ie=UTF8&amp;amp;s=english-books&amp;amp;qid=1191232680&amp;amp;sr=1-1"&gt;Test-Driven Development in Microsoft .Net&lt;/a&gt; par James W. Newkirk et Alexei A. Vorontsov&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=18" width="1" height="1"&gt;</description></item><item><title>Builder une solution à partir d'un Label</title><link>http://batswirl.com/blogs/batswirl_fr/archive/2007/08/16/builder-une-solution-partir-d-un-label.aspx</link><pubDate>Wed, 15 Aug 2007 20:47:00 GMT</pubDate><guid isPermaLink="false">bf5799a0-ebdd-4960-adab-bab5df34bb7d:17</guid><dc:creator>batswirl</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;Un petit truc dont de nombreux clients ayant fait appel à Team Build pour la construction de leur solution s'étonnent, à savoir la possibilité de modifier le comportement par défaut lors de la récupération des sources. En effet, par défaut, Team Build récupère la dernière version des fichiers composants la solution. Or vous voudriez peut être récupéèer la version correspondant à un label flottant (ex : Production).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Si tel est le cas, il vous faudra effectuer deux choses :&lt;/P&gt;
&lt;OL&gt;
&lt;OL&gt;
&lt;LI&gt;Surcharger la&amp;nbsp;tâche &lt;STRONG&gt;Get&lt;/STRONG&gt; de Team Build afin de lui&amp;nbsp;préciser&amp;nbsp;que vous allez vous occuper de la récupération des sources&lt;/LI&gt;
&lt;LI&gt;Appeler la tâche &lt;STRONG&gt;Get&lt;/STRONG&gt;&amp;nbsp;en précisant la version souhaitée&amp;nbsp;&lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Pour surcharger l'étape de récupération des sources, tout est prévu dans Team Build, il suffit d'ajouter un propriété &lt;STRONG&gt;SkipGet&lt;/STRONG&gt; dans votre projet de Build :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#0080ff&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0080ff&gt;&amp;lt;PropertyGroup&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SkipGet&amp;gt;true&amp;lt;/SkipGet&amp;gt;&lt;BR&gt;...&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Ensuite, il ne vous reste plus qu'à récupèrer le code correspondant à votre projet en spécifiant la verison spécifique, ici, je le fais avant la création du label&amp;nbsp;fixe&amp;nbsp;créé par Team Build&amp;nbsp;:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#0080ff&gt;&amp;lt;Target Name="BeforeLabel" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Get Condition="" Workspace="$(WorkspaceName)" Recursive="$(RecursiveGet)" Force="$(ForceGet)" Version="LClean@"/&amp;gt;&lt;BR&gt;&amp;lt;/Target&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Toutes les propriétés sont celles par défaut sauf pour l'attribut &lt;STRONG&gt;Version&lt;/STRONG&gt;. &lt;STRONG&gt;Clean&lt;/STRONG&gt; est le nom de mon label flottant permettant de définir les versions à compiler pour la clean build (build intégrale de la solution et exécution de l'ensembles des tests, configurations, automatisations etc...).&lt;/P&gt;
&lt;P&gt;Cette propriété prend donc en paramètre : &lt;U&gt;"L" + "&amp;lt;Nom du label&amp;gt;" + "@" + "&amp;lt;Scope&amp;gt;"&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Le "L" définit que nous souhaitons récupérer les sources à partir d'un label dont le nom est indiqué. Vous pouvez également récupére le source à partir d'une date ("D"), d'un change set ("C") etc...&lt;/P&gt;
&lt;P&gt;Le scope est optionnel et permet de restreindre la récupération des sources (on aurait pu fournir une url du contrôleur de code source, ex : $/mon projet/Main/DAL).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;/H4&gt;
&lt;H4&gt;&lt;EM&gt;Label Flottant et Label Fixe :&lt;/EM&gt;&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;De nombreux contrôleur de code source fournissent un mécanisme permettant de rassembler un ensemble de fichier d'une version particulière sous un nom commun. Les étiquettes de Visual Source Safe sont reprises dans Team Foundation Version Control. Un Label (étiquette) se construit en sélectionnant les fichiers qui le compose mais vous pourez par la suite modifier ces fichiers. &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Ainsi, il apparaît que les équipes de développement ou les administrateurs du contrôleur définissent deux types de label :&lt;/EM&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Label fixe&lt;/STRONG&gt; : Définit un fois pour toute, permet de gérer les différentes versions livrées. L'objectif étant de permettre une récupération rapide de la version d'un environnement, actuellement chez un client ou qui&amp;nbsp;a vu une modificaiton notoire. Exemples de noms de&amp;nbsp;labels fixes ( Livraison Mars 2007,&amp;nbsp;Correctif Client Dupond, Publication Site Avril 2006, Main 2.1.0..., Modification provider). Les labels fixes étant par définition, non modifié, sont les seuls garants de récupérer une version stable après un régression.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Label flottant&lt;/STRONG&gt; : Définit au fur et à mesure des itérations et de la progression du projet. Le label flottant est une référence pour l'équipe de développement qui lui permet de récupérer une version des sources en rapport à un contexte. Le nom du label flottant n'a en général aucune information temporelle et son contenu évolue en quasi permanence. Exemples de noms de labels flottants (Production, DAL Oracle, Mobile Web Design, Recette...)&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://batswirl.com/aggbug.aspx?PostID=17" width="1" height="1"&gt;</description><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Build/default.aspx">Team Build</category></item></channel></rss>