<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://batswirl.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Batswirl</title><subtitle type="html">Blog de Mathieu Szablowski
Au croisement de l'agilité et de l'outillage</subtitle><id>http://batswirl.com/blogs/batswirl_fr/atom.aspx</id><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/default.aspx" /><link rel="self" type="application/atom+xml" href="http://batswirl.com/blogs/batswirl_fr/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61129.2">Community Server</generator><updated>2007-12-07T21:29:48Z</updated><entry><title>Rhino Mock / MSTest : Isolation</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2010/02/08/rhino-mock-mstest-isolation.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2010/02/08/rhino-mock-mstest-isolation.aspx</id><published>2010-02-07T21:23:00Z</published><updated>2010-02-07T21:23:00Z</updated><content type="html">
&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author><category term="Agile" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Agile/default.aspx" /><category term="Mock DDD" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Mock+DDD/default.aspx" /><category term="TDD" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/TDD/default.aspx" /><category term="MSTest" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/MSTest/default.aspx" /><category term="Rhino" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Rhino/default.aspx" /></entry><entry><title>Mise sur étagère : ou comment revoir un flux de développement TDD avec TFS</title><link rel="alternate" type="text/html" href="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" /><id>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</id><published>2010-02-04T10:38:00Z</published><updated>2010-02-04T10:38:00Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author><category term="Team Foundation Server" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Foundation+Server/default.aspx" /><category term="Team System" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+System/default.aspx" /><category term="Tests unitaires" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Tests+unitaires/default.aspx" /><category term="TFVC" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/TFVC/default.aspx" /><category term="Agile" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Agile/default.aspx" /></entry><entry><title>La fonctionnalité : Lier à un élément de travail</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2009/07/20/la-fonctionnalit-lier-un-l-ment-de-travail.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2009/07/20/la-fonctionnalit-lier-un-l-ment-de-travail.aspx</id><published>2009-07-20T03:25:21Z</published><updated>2009-07-20T03:25:21Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Contourner l’intégration continue</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2009/05/16/contourner-l-int-gration-continue.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2009/05/16/contourner-l-int-gration-continue.aspx</id><published>2009-05-16T08:49:34Z</published><updated>2009-05-16T08:49:34Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author><category term="Team Foundation Server" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Foundation+Server/default.aspx" /><category term="Team System" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+System/default.aspx" /><category term="Team Build" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Build/default.aspx" /></entry><entry><title>Mon équipe ne me quitte plus!!!</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2009/04/22/mon-quipe-ne-me-quitte-plus.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2009/04/22/mon-quipe-ne-me-quitte-plus.aspx</id><published>2009-04-22T08:42:45Z</published><updated>2009-04-22T08:42:45Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Surveiller un serveur TFS</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/10/09/surveiller-un-serveur-tfs.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/10/09/surveiller-un-serveur-tfs.aspx</id><published>2008-10-09T05:39:14Z</published><updated>2008-10-09T05:39:14Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>KB947455 - Actions "Delete" répétées durant les fusions</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/07/21/kb947455-actions-delete-r-p-t-es-durant-les-fusions.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/07/21/kb947455-actions-delete-r-p-t-es-durant-les-fusions.aspx</id><published>2008-07-21T12:00:25Z</published><updated>2008-07-21T12:00:25Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Get Lastest on Check-out</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/04/29/get-lastest-on-check-out.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/29/get-lastest-on-check-out.aspx</id><published>2008-04-29T19:41:00Z</published><updated>2008-04-29T19:41:00Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Erreur 32000 lors de la migration de TFS 2008</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/04/29/erreur-32000-lors-de-la-migration-de-tfs-2008.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/29/erreur-32000-lors-de-la-migration-de-tfs-2008.aspx</id><published>2008-04-28T20:25:04Z</published><updated>2008-04-28T20:25:04Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author><category term="Team Foundation Server" scheme="http://batswirl.com/blogs/batswirl_fr/archive/tags/Team+Foundation+Server/default.aspx" /></entry><entry><title>Étendre les attributs des méthode de tests dans MsTest</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/04/28/tendre-les-attributs-des-m-thode-de-tests-dans-mstest.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/28/tendre-les-attributs-des-m-thode-de-tests-dans-mstest.aspx</id><published>2008-04-27T22:30:23Z</published><updated>2008-04-27T22:30:23Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Team Foundation Version Control : les bonnes surprises de la version 2008</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/04/27/team-foundation-version-control-les-bonnes-surprises-de-la-version-2008.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/27/team-foundation-version-control-les-bonnes-surprises-de-la-version-2008.aspx</id><published>2008-04-27T19:46:50Z</published><updated>2008-04-27T19:46:50Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Images VPC de test de Visual Studio Team System</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/04/24/images-vpc-de-test-de-visual-studio-team-system.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/04/24/images-vpc-de-test-de-visual-studio-team-system.aspx</id><published>2008-04-24T13:34:00Z</published><updated>2008-04-24T13:34:00Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Techdays 2008 - C'est fini pour moi</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2008/02/13/techdays-2008-c-est-fini-pour-moi.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2008/02/13/techdays-2008-c-est-fini-pour-moi.aspx</id><published>2008-02-13T09:15:11Z</published><updated>2008-02-13T09:15:11Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Gauntlet passera sur TFS</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2007/12/13/gauntlet-passera-sur-tfs.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2007/12/13/gauntlet-passera-sur-tfs.aspx</id><published>2007-12-13T11:33:06Z</published><updated>2007-12-13T11:33:06Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry><entry><title>Fin de semaine de formation</title><link rel="alternate" type="text/html" href="http://batswirl.com/blogs/batswirl_fr/archive/2007/12/07/fin-de-semaine-de-formation.aspx" /><id>http://batswirl.com/blogs/batswirl_fr/archive/2007/12/07/fin-de-semaine-de-formation.aspx</id><published>2007-12-07T18:29:48Z</published><updated>2007-12-07T18:29:48Z</updated><content type="html">&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;</content><author><name>batswirl</name><uri>http://batswirl.com/members/batswirl.aspx</uri></author></entry></feed>