jeudi 12 avril 2012

De l'intérêt de l' ALM avec Visual Studio / TFS 2010

Une analyse rapide de ce graphique permet de dégager 2 informations clés :

· La tendance reste stable au cours du temps malgré les progrès technologiques

· Une équipe projet qui démarre un projet aujourd’hui a 1 chance sur 3 de voir son projet se dérouler dans les meilleures conditions et 2 chances sur 3 pour que ça ne soit pas le cas, à savoir des tensions sur les délais, le budget, le scope ou la qualité, voire pire un arrêt du projet par le client.

Dans un premier temps, nous allons identifier les problématiques à résoudre, puis nous revisiteront les solutions potentielles avant de définir ce qu’est l’ALM et comment Microsoft a outillé avec succès une solution ALM de premier rang comme facteur clé de succès des projets informatiques.

1.2 Les principales causes d'échecs projets

Les raisons majeures qui sont à l’origine des échecs projets sont de deux ordres : Génériques et opérationnelles.

Les causes génériques sont :

Le Facteur « Time to Market » toujours plus agressif entrainant des rythmes projets difficilement soutenables et des dérapages dans les délais qui statistiquement constituent une des premières cause de conflit sur projet

Des besoins métiers toujours plus complexes coté client pour assurer la compétitivité, induisant de la complexité coté implémentation technique

Une évolution incessante et très rapide des technologies et des méthodes de développement apportant une surcouche de complexité supplémentaire dont tout le monde se serait bien passé.

Ceci étant dit, l’exercice qu’il est intéressant de mener est ce que l’on appelle une « Root Cause Analysis ». L’idée ici étant de déterminer quels sont les facteurs qui vont contribuer le plus fortement au fait que les projets, au plan opérationnel, soient en difficulté.

Tout le monde connait ces principales causes d’échecs, simplement, la difficulté va consister à les prioriser, nous allons donc proposer cette liste, qui bien évidemment n’est pas exhaustive:

Gestion de Projet Lacunaire

Manque de Réactivité Face au Changement

Manque de communication / collaboration, information disséminée

Spécification incomplètes ou surréalistes

Mauvaise gestion des risques

Gestion de projet lacunaire

La gestion de projet reste un élément clé dans la réussite d’un projet. Cette activité va permettre de s’assurer de la satisfaction du client qui est un des objectifs majeur de tout projet par la capacité à communiquer au travers d’un certain nombre de rapports sur l’état d’avancement, la qualité, le budget et le planning en vue de détecter tout écart et enclencher si nécessaire des actions correctives au plus vite afin de réaligner le projet avec les attentes du client et les objectifs stratégiques de l’entreprise.

Manque de réactivité face au changement

Entre le moment ou un projet démarre et sa livraison, beaucoup de changements vont intervenir, c’est inévitable. Cet état de fait est particulièrement impactant dans des contrats de type forfait dans lesquels les intégrateurs s’engagent à délivrer un périmètre en s’appuyant sur le fameux cycle en V voire Waterfall (Cascade) qui rendent encore plus compliqué tout changement du fait de la lourdeur des processus. Tout changement doit au contraire être accueilli favorablement comme avantage compétitif pour le client.

Manque de communication, information disséminée

Pour faire simple, la communication est la clé de voute d’un projet informatique, pour comprendre comment ce point est fondamental en projet, on parle souvent du syndrome de la Tour de Babel. La tour de Babel a été un le premier grand projet de l’’humanité ayant subi un échec, il y a près de 5000 ans.

Ce projet, surréaliste en terme d’exigences au demeurant, a échoué à partir du moment où les bâtisseurs se mirent à parler des langues différentes et donc ne plus communiquer efficacement, la leçon de cette histoire nous a démontré la nécessité qu'ont les parties prenantes de se parler, de se comprendre pour réaliser de grands projets avec succès.

Spécification incomplètes ou surréalistes

La gestion des spécifications constitue indéniablement une des principales sources de problèmes sur les projets lorsque l’on interroge des parties prenantes. Tout le monde le sait et pourtant la situation continue. Démarrer un projet avec un périmètre insuffisamment défini ou surréaliste est une ineptie qui va précipiter l’équipe en charge du projet dans des difficultés de tout instant.

Mauvaise Gestion des risques

Qui gère ses risques sur un projet ? A cette question suit inéluctablement une réponse évasive. Ceci est pourtant une erreur stratégique. Chaque membre de l’équipe projet est conscient des risques potentiels et pourtant, ils ne sont pas gérés et s’imposent comme une fatalité.

L'ALM : La Solution et les Outils

Malgré la multiplication des outils, des méthodologies et des technologies, la situation semble inébranlable, et pourtant des solutions existent, des solutions capables d’adresser l’ensemble des problématiques abordées dans le cadre d’un projet informatique, ce panel de solutions porte un nom : ALM (Application Lifecycle Management) L’ALM serait-elle la clé à tous ces problèmes ? De nombreux retours d’expérience semblent attester ce fait, et nous allons dans le cadre de cet article ouvrir des pistes apportant des solutions à la plupart des problèmes et difficultés rencontrés sur les projets aujourd’hui.

Qu’est ce que l’ALM

La problématique des projets IT est récurrente : gérer toujours plus de complexité, tant métier que technique, rester aligné avec le métier et réactifs au changement pour respecter les priorités sans cesse changeantes avec une demande rémanente : faire toujours plus avec moins de moyens.

Pour faire face à ces challenges, une solution de type ALM est incontournable afin de suivre piloter et communiquer sur le statut d’une solution IT en cours d’élaboration afin de s’assurer à tout instant que la solution développée sera en mesure de répondre au besoin métier cible. Cela reposera sur de l’industrialisation, de l’automatisation, de l’intégration continue, de la traçabilité et surtout du pilotage et du Reporting temps réel sur l’ensemble des artefacts produits par le projet et le produit du projet.

Les bénéfices de l’ALM sont globalement :

· Une amélioration du ROI sur les investissements IT

· Une amélioration du Time To Market

· Une amélioration de la qualité

· Un meilleur alignement avec le métier

· Un taux de réussite de projet en progression

Les trois piliers fondamentaux de l’ALM sont :

Traçabilité et liaisons entre les artefacts : Ceci est traditionnellement un processus manuel extrêmement lourd, dont l’effort varie selon la taille d’un projet et les variétés d’artefacts à relier. La conformité aux exigences fait de la traçabilité une nécessité.

L’automatisation des processus : Les solutions ALM optimisent l’efficacité en fournissant tout une gamme de pistes pour l’automatisation de processus journaliers soit sur des aspects méthodologiques, gestion de projet, et permettant également une communication fluidifiée avec aussi tout une batterie d’outils permettant d’automatiser des processus liés à l’activité de développement ou de tests alliant productivité et qualité.

Le Reporting pour augmenter la visibilité : La plupart des chefs de projet ont une visibilité limitée de la progression des développements, la visibilité qu’ils ont est généralement issue de données déclaratives donc subjectives. Le Reporting à partir d’une plate-forme ALM profite de l’intégration de l’ensemble des artefacts pour fournir des informations temps réel sur l’état du projet à tout instant.

La Solution ALM de Microsoft : Visual Studio 2010 / Team Foundation Server 2010

La plateforme ALM Microsoft TFS 2010 fournit un ensemble d’outil très riche fonctionnellement permettant d’adresser l’ensemble des activités liées au cycle de vie du développement d’une application de la définition des exigences jusqu’aux phases de Test et Déploiement avec un support riche pour la méthodologie et la gestion de projet. Ci-dessous la Roadmap fonctionnelle de l’ALM

La plate-forme ALM TFS 2010 apporte un grand nombre de fonctionnalités à haute valeur pour la réalisation de projets dont :

Un support hiérarchique pour les Work Items : Cette fonctionnalité permet une véritable activité de Gestion de projet avec le support d’un WBS Projet (Work Breakdown Structure qui représente l’ arborescence hiérarchique des livrables d’un projet), ceci permet par exemple de gérer une arborescence de type Projet / Phase / Module / Exigence / Tache en mode CMMI ou bien User Story / Task pour un Carnet de produit en mode Agile ou SCRUM, et de se synchroniser avec un fichier MS Project ou encore avec Project Server. TFS 2010 intègre de plus un mécanisme de Roll up permettant la consolidation hiérarchique de données horaires ou financières.

Une Plate-forme de Test : Avec Test & Lab Center, Microsoft propose une offre complète pour des équipes de test professionnelles, la plate-forme est entièrement intégrée à TFS 2010 et propose un client dédié aux testeurs fonctionnels avec des outils de planification de campagnes de test, un outil d’exécution des tests incluant des possibilités d’automatisation et de gestion de paramètres de tests pour améliorer la productivité et la fiabilité lors de la phase d’exécution. Avec cette plate-forme, Microsoft adresse le syndrome bien connu de la non reproductibilité des bugs en fournissant un mécanisme de collecte d’artefacts contextuels au test qui sont téléchargés automatiquement dans les données lors de la création d’un bug dont : les étapes détaillées du test avec les résultats, le Recording Video de la session de test, les données Intellitrace (débogueur intelligent Microsoft) permettant au développeur de connaitre le code fautif avec les données source de l’exception, la pile d’appel (Mini dump mémoire) et également des données de type Event Log et Informations Système. De plus avec Lab Center, Microsoft fournit une plate-forme de Provisioning d’environnement pour les tests avec des capacités de déploiement des binaires applicatifs et d’exécution de tests de manière automatisés unitaires ou fonctionnels. Cette dernière fonctionnalité améliore considérablement la productivité et la qualité sur les projets car il est bien connu que le Provisioning et la maintenance d’environnements d’exécution pour les tests est couteuse en temps et répétitive, tout ce que l’on veut éviter sur projet.

Le Support de l’UML: Des cas d’utilisation ou tout type de diagramme UML peuvent être créés avec ce module et surtout on notera la possibilité de les relier à n’importe quel autre artefact projet.

Une Plate forme de Build : Une nouvelle version de Team Build basée sur le moteur dernière génération Microsoft Workflow Foundation 4.0 s’impose comme un outil exceptionnel pour l’ensemble des concepts d’intégration continue pour une usine logicielle. Cette nouvelle version permet en plus des options standards d’Analyse de qualité du code, d’exécution de listes de tests unitaires avec le calcul de la couverture de code, de personnaliser simplement un processus de Build avec par exemple le rajout d’activités de déploiement en fin de Build ou encore la génération de release note automatique.

Program and Portfolio Management : Le produit vient en standard avec une intégration avec l’EPM Project Server 2010 ou 2007 offrant des fonctionnalités de consolidation niveau entreprise pour la gestion des ressources, de Programmes et ou Portfolio au-dessus de TFS 2010 qui représente le suivi opérationnel projet par projet.

Ci-dessous une vue de la RoadMap technique mettant en exergue l’évolution de la plate-forme depuis la version précédente.

Un des facteurs clé de TFS est un ensemble très complet de rapports fournis en standard qui correspondent à plus de 80% des besoins de Reporting. Par exemple, le rapport ci-dessous nommé « Requirement Overview » qui donne un vue complète du statut d’un projet avec les exigences du projet à gauche, et en regard, l’avancement, le reste à faire, le nombre de tests écrit par exigences, l’état et le résultat de l’exécution des tests et les bugs ouverts et résolus. On notera la notion de roll up des données du niveau exigence jusqu’au niveau projet.

Un autre exemple de rapport est le Build Success Over Time montrant la stabilité du processus de Build avec une légende pour le niveau de qualité de chaque Build en fonction du résultat de la compilation mais également des tests et de la couverture de code jour après jour.

En terme de gestion de configuration, TFS 2010 permet l’implémentation de scénario simples ou avancés avec la prise en compte de version majeures et mineures pour la gestion de version, mais également de riche scénario de parallélisation et isolation pour maintenance, test, mise en production etc…
Exemple de Structure de Contrôle de Code Source

Exemple de Modèle de Branche

La plate-forme ALM TFS est également extensible, La Feuille de saisie des Temps développée par Avanade est un excellent exemple d’extensibilité, apportant la possibilité d’un suivi très précis des heures sous la forme d’un CRA conventionnel, cet outil développé en Silverlight permet une saisie des temps multi projets avec également des fonctionnalités intégrées de Reporting et une synchronisation temps réel avec TFS.

En conclusion, la mise en œuvre d’une plate-forme ALM adresse réellement l’ensemble des besoins du cycle de vie projet avec un support fort d’activités en mode Collaboratif, un socle pour la méthodologie de type Agile, Scrum ou CMMI, des fonctions de Contrôle de version, la Gestion des Builds, des rapports et tableaux de bord, un centre de qualité logicielle et un ensemble d’outils connectés adapté aux différents rôle présent sur le projet leur permettant de mieux collaborer et communiquer en partageant la même information avec leurs outils du quotidien. Des fonctions de gouvernance niveau entreprise peuvent également appuyer une gestion de portefeuilles projets de l’identification d’une opportunité jusqu’au déploiement en production. Enfin, au plan technique, la plate-forme ALM de Microsoft est interopérable avec différents type de langages et technologies permettant d’élargir son périmètre d’adoption et surtout répondre aux exigences d’entreprise exploitant un large panel de technologies Microsoft et non Microsoft.

mercredi 4 avril 2012

TFS Event Worfklow Events : Un Must Have


TFS Event Workflow permet en toute simplicité d'être abonné à des évènements TFS tel que l'enregistrement d'un Work Item ou encore un évènement de checkin pour déclencher le traitement de notre choix. Cette technique permet d'apporter des possibilités de programmation évènementielle dans notre monde TFS pour tout un tas de bonnes raisons dont par exemple :
  • Le calcul de champs de Work Items à la volée dans le cadre d'un SLA ou de calcul de Earned Value Management
  • La modification de l'état de wok items dynamiquemnet, par exemple, lorsque tous les work items de type tache sont en resolved, il est possible automatiquement de passer en resolved le requirement ou la User Story Parent
  • Et bien d'autres scénarios bien sur
Pour activer cette fonctionnalité. Tout simplement télécharger sur CodePlex l'asset publié par Artiso TFSEventWorkflow à l'adresse Suivante : TFS Event Workflow
Cet asset exploite le système Bisubscribe d'abonnement aux évènements de Team Foundation Server pour la partie déclenchement et pour la partie logique d'exécution, Workflow Foundation 4.0 avec un set d'activités Custom qui ont été développées dans le cadre de ce projet, mais qui bien entendu peut être étendu à volonté.
On reste pleinement dans la logique des workflows de Build sauf que le host du workflow n'est pas le Build Service mais le serveur TFS lui même et que le déclenchement de l'exécution des Workflows est arbitré par les évènements déclenchés sur la plate forme TFS.
Dans le cadre de cet article, nous allons démontré un cas d'utilisation très simple et utile, la création automatique d'une Tache enfant lors de la création d'une User Story, cet exemple est intéressant car il permet d'apporter de la productivité dans le méthode Agile pour ce qui concerne la génération des taches pour les développeurs.
Nous allons démontrer cette fonctionnalité en réalisant étape par étape le projet complet jusqu'à son déploiement
Etape 1 : Installer les prérequis : Télécharger TFS Event Workflow sur CodePlex et installer les librairies sur le poste de développement. Idéalement, le développement doit être réalisé sur une serveur TFS de développement, sinon, installer le SDK TFS 2010 ou installer les Dlls nécéssaires au développement qui sont :
  • Microsoft.TeamFoundation.Framework.Server
  • Microsoft.TeamFoundation.WorkItemTracking.Client
  • Microsoft.TeamFoundation.WorkItemTracking.Server.Dataaccesslayer
Etape 2 : Création du projet, lancer Visual Studio 2010 et Créer un projet et choisir dans la rubrique Workflow, le template "Activity Designer Library" et nommer le projet TFSEventWorkflowSample par exemple puis valider

Etape 3 : Ajouter les références nécessaires au projet en utilisant le bouton Browse si les dlls n'ont pas été inscrites dans le GAC :
  • artiso.TFSEventWorkflows.TFSActivitiesLib
  • Microsoft.TeamFoundation.Framework.Server
  • Microsoft.TeamFoundation.WorkItemTracking.Client
  • Microsoft.TeamFoundation.WorkItemTracking.Server.Dataaccesslayer
puis valider
Ci dessous les références
Etape 3 : Ajouter au projet une activité nommée AddTaskToNewUserStory
Etape 4 : Mettre à jour la boite à outils pour afficher les activités customs livrées avec TFS Event Workflow. Pour cela afficher la boite à outil (Ctrl Alt X) puis à l'aide du menu contextuel lancer la commande New Tab et entrer le nom TFS Event Workflow

Puis le nouvel onglet TFSEventWorkflow étant actif, à l'aide du menu contextuel, lancer la commande Choose Items pour peupler la boite à outil

Cliquer sur Browse, localiser la dll artiso.TFSEventWorkflows.TFSActivitiesLib.dll, la liste des activités customs apparait, valider simplement
La boite à outil est mise à jour avec les activités fournies avec TFS Event Workflow
Etape 5 : Construction du workflow, A partir de la boite à outils Glisser une Sequence sur la surface de Design
L'étape suivant va consister à mettre en place les arguments et variables nécessaires au workflow, pour cela activer le bloc Sequence puis l'onglet variable et entrer les trois variables suivantes :
  • SavedWorkitem de type WorkItem
  • NewWorkitem de type WorkItem
  • TfsUrl de type String
activer ensuite l'onglet Arguments et entrer les deux arguments suivants :
  • TFSEvent Direction In et Type WorkItemChangedEvent
  • TeamFoundationRequestContext Direction In et de Type : TeamFoundationRequestContext

A noter, pour récupérer les bons types facilement, utiliser le bouton Browse for Types dans la liste et taper une partie du nom pour activer l'auto filtrage comme montré ci dessous
et également
Pour la suite nous allons simplement implémenter la logique du worklow et paramétrer les différentes activités.
Pour commencer glisser l'activité GetWorkItemChangedEventData à l'intérieur de la séquence


Appuyer sur F4 pour afficher la fenêtre de propriétés et complèter comme suit
  • TeamFoundationRequestContext ==>TeamFoundationRequestContext
  • TFSCollectionUrl ==>TFSUrl
  • WorkItem ==> SavedWorkitem
  • WorkItemChangedEvent ==> TFSEvent

Glisser un bloc If au dessous de l'activité précédente,

appuyer sur F4 pour afficher la fenêtre de propriété et entrer la condition suivante :
SavedWorkitem.Type.Name.Equals("User Story") And SavedWorkitem.Links.Count.Equals(1) And SavedWorkitem.Revision.Equals(1)

Puis glisser un bloc Sequence dans le bloc Then du If
Glisser une activité CreateNewWorkItem dans le nouveau bloc Séquence
Afficher la fenêtre de propriété et compléter comme suit :
  • NewWorkItem ==> NewWorkItem
  • TeamProjectName ==> SavedWorkitem.Project.Name
  • TfsCollectionUrl ==> TFSUrl
  • WorkItemType ==> "Task"

Glisser ensuite une activité ChangeWorkItemField au dessous de la précédente
Afficher les propriétés et compléter comme suit :
  • FieldReferenceName ==> "System.Title"
  • NewValue ==> "Task for User Story: " + SavedWorkitem.Title
  • WorkItem ==> NewWorkItem
Vous pouvez modifier New Value qui sera le titre de la tache créée dynamiquement en fonction de vos besoins
Glisser ensuite au dessous une activité SaveWorkItem qui permettra de sauvegarder la tache précédemment créée
Afficher la fenêtre de propriété et configurer comme suit :
WorkItem ==> NewWorkItem
Glisser enfin l'activité CreateLink qui va permettre de créer un lien child entre la User Story sauvegardée et la tache dynamiquement créée par notre workflow
Afficher la fenêtre de propriétés et configurer comme suit :
  • ChildWorkItem ==> NewWorkItem
  • LinkType ==> "System.LinkTypes.Hierarchy"
  • ParentWorkItem ==> SavedWorkitem
Le Workflow est terminé, il ne reste plus qu'à déployer le tout sur le serveur TFS puis Tester
Pour cela, il reste 3 étapes
1 - Installer TFS Event Workflow sur le serveur TFS en utilisant l'installer au format msi
2 - Copier le fichier de workflow créé ci dessous dans le dossier Plugins de TFS, le dossier ou a été installé d'ailleurs Tfs Event Workflow : c:\Program Files\Microsoft Team Foundation Server 2010\Application Tier\Web Services\bin\Plugins

3 - Procéder à la configuration du Plugin pour exécuter notre workflow :
Pour cela éditer le fichier de configuration "artiso.TFSEventWorkflows.TFSEventWorkflowsServerPlugin.dll"
Se placer dans la balise tfsEvents et complèter comme ci dessous. A noter que comme le fichier de workflow a été déposé dans le dossier de plug in, le nom du workflow suffit sans donner le chemin complet

<tfsEventConfig>

<tfsEvents>

<add eventName="Microsoft.TeamFoundation.WorkItemTracking.Server.WorkItemChangedEvent"

eventAssemblyName="Microsoft.TeamFoundation.WorkItemTracking.Server.Dataaccesslayer"

workflowFileName="AddTaskToNewUserStory.xaml" />

tfsEvents>

tfsEventConfig>

Pour tester, simplement créer une User Story sur le serveur TFS et constater la création de la tache fille automatiquement
Cet outil publié par l'équipe de Thomas Schlisser - Artiso, simplifie considérablement le branchement logique métier sur les évènements TFS, attention toutefois à rester cohérent dans les implémentations pour ne pas surcharger la plate forme par une exécution excessive de Workflows.
Bon développement évènementiel sur TFS!