Archive

Archives pour 01/2010

Kanban et Scrum – tirer le meilleur des deux

InfoQ nous offre le téléchargement gratuit de la toute récente traduction française du dernier livre de Henrik Kniberg & Mattias Skarin : « Kanban et Scrum – tirer le meilleur des deux » .

La traduction est l’œuvre de Claude Aubry, Frédéric Faure, Antoine Vernois & Fabrice Aimetti tous spécialistes et promoteurs des méthodes agiles.

Profitez-en, c’est un « must-read » !

Categories: Méthodes Agiles Tags: , ,

Le JUG de Lyon est agile !

JUG AgilityAprès avoir rappelé les défauts d’une gestion avec un cycle en V, une courte introduction théorique à l’agilité nous a été dispensée par Agnès Crépet (Laboratoires Boiron), Laurent Caron (Interfaces Solutions) et Cyril Lacôte (Objet Direct.)

La soirée était basée sur le retour d’expérience de près de deux ans de travail avec le mélange des différentes déclinaisons de l’agilité : UP, XP, Kanban et Scrum, en particulier au sein des Laboratoires Boiron.

Je ne vais pas me lancer dans les descriptions détaillées des principes de l’agilité, de ses 12 piliers, de ses avantages,… mais plutôt détailler les ressentis de chacun autour des différents sujets qui nous ont été présentés.

La présentation commence par la description des grandes étapes de la conduite de projet agile.

Toute conduite du changement doit passer par la formation, l’adaptation à la nouvelle vision.

Avec l’exemple détaillé au cours de la soirée, les meilleures pratiques, les plus adaptées, ont été extraites des méthodes précédemment citées.

Un projet se découpe en 4 étapes :

  1. le référencement des requirements,
  2. leur découpage en cas d’utilisation,
  3. leur réalisation,
  4. leur livraison.

L’agilité peut donc être appliquée au forfait.

Les requirements et les uses cases sont alors mappés dans une matrice de traçabilité qui permet de s’assurer que tous les requirements seront couverts.

Ceci ressemble beaucoup à un cycle en V, non ! La différence réside dans les niveaux de détails des requirements, et dans la gestion de leur implémentation. En effet, l’agilité s’exprime à cette étape.

L’étape focus de la soirée, l’étape de réalisation, va être découpée en itérations.

Une itération commence par la constitution du backlog. Il s’agit d’une liste de cas d’utilisation qui seront implémentés au cours de l’itération. Ces cas d’utilisation sont choisis en collaboration avec le client (en particulier avec leur représentant).

Une itération doit être la plus courte possible. Scrum préconise des itérations à durée fixe mais on s’autorise chez Boiron des variations de quelques jours, suivant les nécessités du projet.

Autre écart chez Boiron avec le strict respect de Scrum, le backlog peut évoluer au cours du lancement même de l’itération dans la mesure où juste un macro chiffrage a été réalisé à cette étape. Introduire un use case au backlog consiste à l’analyser, à mesurer les impacts sur l’existant, en faire une macro-conception, et le découper en tâches. Ces tâches peuvent alors être référencées dans l’outil de bug tracking (et de gestion de la planification) et être affectées.

La vélocité réelle de l’équipe (tenant compte des absences) est calculée à chaque itération, et chaque développeur est considéré opérationnel à 80%. Les 20% restant permettent de planifier les stands up quotidien (15min) et surtout le refactoring du code produit.

Chaque développeur est responsabilisé. Il peut intervenir dans le chiffrage, revoir le reste à faire de ses tâches, éventuellement redistribuer ses propres tâches. L’équipe agile est pratiquement en auto gestion.

Une fois le backlog construit, le périmètre de l’itération est fixé et les développements peuvent commencer.

Les développements sont sécurisés grâce à l’approche TDD (Test Driven Development). Elle consiste à écrire les tests avant d’écrire la moindre ligne de code. La mise en place de ces tests peut se faire en collaboration avec le métier; cette étape permet de bien valider que le fonctionnement de l’application est en adéquation avec les requirements client. Ceci évite des livraisons mal ou peu testées et améliorent la relation client.

L’approche TDD aide également le refactoring de sources qui peut être réalisé de manière sécurisée. Le refactoring contribue à l’amélioration des performances de l’application, à la lisibilité du code et surtout à sa maintenance.

Ces tests font partie intégrante du projet, ils sont unitaires, automatisées et un environnement d’exécution leur est dédié. Beaucoup de frameworks sont disponibles pour faciliter la réalisation de ces tests (EasyMock en particulier, qui a été mis en œuvre au cours d’une démonstration, est très intéressant pour bouchonner toutes les dépendances d’une classe.)

L’utilisation de l’outil de construction Maven a également été décrite. Maven récupère les sources du gestionnaire de configuration SVN, télécharge les dépendances, compile, peut déployer sur des environnements différents, et exécute régulièrement les tests unitaires de manière automatisée. Il peut être couplé à des outils d’audit de code (PMD, CheckStyle, FindBugs) et d’audit de couverture de test (Cobertura,…). Il communique également sur le résultat de l’exécution des tests suites.

Avec l’approche TDD, une fois le test en échec, l’implémentation peut commencer. Le test passe alors au vert et la phase de refactoring peut commencer.

L’itération se termine, lorsqu’il ne reste plus de cas d’utilisation à implémenter. L’application est alors recettée par un groupe d’utilisateurs finaux. Des bugs remontent, sont saisis et entrent dans le workflow de l’outil de bug tracking. Leur correction peut être chiffrée et intégrée au planning de la prochaine itération.

L’utilisateur s’approprie au fur et à mesure la nouvelle version de l’application, il peut adapter ses méthodes de travail avec ce nouvel outil qui répond au mieux à ses besoins. En étant intégré à l’étape de réalisation, on ne l’enferme pas dans un tunnel pour ensuite le débarquer sur une application qui correspond mal à ces besoins.L’agilité permet de fournir ni plus ni moins que les besoins exprimés par l’utilisateur. De nouveaux besoins peuvent apparaitre, ils sont alors pondérés (par les utilisateurs) par rapport au reste des uses cases à réaliser. Le changement est assuré en douceur et dans le respect. Une fois la recette validée, l’itération se termine. La prochaine peut être lancée.

La présentation s’est terminé par des interviews filmées des différents intervenants d’un projet informatique: la DSI, les architectes, les représentants métier, les chefs de projet, les développeurs autour de l’agilité.

Chacun est pleinement satisfait de la mise en œuvre de ces méthodes pour la refonte d’une partie des applications Boiron et ne souhaite pas retourner au cycle en V.

Avec l’agilité et quelques outils on améliore grandement la satisfaction client, le travail des différentes équipes informatiques (et ainsi leur motivation), on maitrise mieux le planning et les risques.

Le DSI Boiron conclue le film, sur la réponse à la question « Êtes vous satisfait de l’agilité ? » par « Avez-vous encore mieux à nous présenter ? »

Et vous ? Qu’attendez-vous ?

Charger une association dans WCF RIA Services

Je l’avais annoncé ici : .NET RIA services est devenu WCF RIA Services.

Rappels

L’objectif de ce projet est de simplifier le développement d’applications RIA.

Le principe général est assez simple :
Je développe des services de domaine (CRUD + Queries) en utilisant des conventions de nommage côté serveur.

Par exemple, la méthode Sprint LoadSprint(int sprintId) renvoie un sprint d’une application Scrum à partir de son identifiant.

WCF RIA Services projette ce code côté client dans des classes de type DomainContext.

Dans notre exemple, j’obtiens une classe ScrumDomainContext avec une méthode EntityQuery<Sprint> LoadSprintQuery(int sprintId)

Projection de code

Projection de code

Les associations

La version beta est disponible depuis le mois de Novembre. On trouve sur le Web quelques introductions, notamment celles de Brad Abrams. En revanche, on trouve très peu de choses sur comment charger une association dans notre application cliente Silverlight.

Dans mon exemple, je veux afficher une vue Master/Details qui présente un sprint et la liste de ses tâches.

Le modèle

Sprint association

Sprint association

La déclaration de l’association

Je dois ensuite décrire à WCF Ria services les associations entre mes entités. Pour cela, je décore les propriétés Tasks de la classe Sprint, et Sprint de la classe Task avec l’annotation AssociationAttribute. Il faut indiquer un nom pour cette association, par exemple Sprint_Tasks et préciser les clés étrangères de chacune de ses relations. Dans le sens Sprint -> Task, la clé c’est le champ Id de la classe Sprint et la clé étrangère c’est le champ SprintId de la classe Task.


public class Sprint{
[Key]
public virtual int Id { get; set; }

[Association("Sprint_Task", "Id", "SprintId")]
public virtual ICollection Tasks { get; set; }
}

Quelques remarques :

  1. Les habitués de NHibernate vont déplorer le fait d’avoir à décrire l’association à l’aide des clés étrangères. Cela nécessite par ailleurs d’avoir une propriété SprintId dans la classe Task en plus de la propriété Sprint :(
  2. La décoration est automatique avec l’utilisation de LinqToSql ou d’Entities Framework

Le chargement explicite

Il reste enfin à indiquer explicitement que l’on souhaite sérialiser les tâches avec le sprint. Pour cela, nous devons définir une classe de méta données relative à la classe métier. Dans notre exemple, ce sera une classe SprintMetaData définissant un champ Tasks que l’on décore avec l’annotation IncludeAttribute.


public class SprintMetaData {
[Include]
public EntitySet Tasks;
}

Je vous laisse regarder le blog de Brad Adams ou un ancien billet pour les détails de la classe de méta données.

Personnellement je trouve dommage d’avoir à définir une stratégie de chargement dans un fichier de méta données. L’idée générale n’est pas mauvaise, mais présente un inconvénient majeur : la stratégie est valable pour tous les cas d’utilisation. Or il est probable que l’application ne nécessite à la fois le sprint et ses tâches que dans certains écrans …

Outils de mapping objet/relationnel

Si vous utilisez un ORM, n’oubliez pas de récupérer la collection de tâches dans votre requête.

Avec LinqToEntities, ça donne :


public Sprint LoadSprint(int sprintId){
return this.Context.Sprints
.Include("Tasks")
.Where(sprint=>sprint.Id == sprintId);
}

Avec LinqToNhibernate, ça donne:


public Sprint LoadSprint(int sprintId)
{
var result = this.Session.Linq().Expand("Tasks")
.Where(x => x.Id == sprintId)
.ToList().First();
return result;
}

Conclusion

Nous avons vu en détail comment charger une association entre deux entités dans une application WCF Ria Services. Une partie de ces détails est masquée par l’outillage fourni par Microsoft et nous ferait presque oublier la complexité qui ne manquera pas de ressortir si vous souhaitez utiliser cette pile en association avec des outils tel que NHibernate

Blog Business Intelligence

La lecture d’un article sur l’installation d’une machine virtuelle 64 bits VMware sur le blog d’Homsys me fait penser que nous n’avons pas encore parlé ici de ce blog édité par nos confrères au sein du groupe Homsys.

Si la Business Intelligence vous intéresse, consultez ou abonnez-vous à ce blog dédié au décisionnel : solutions de BI et retours d’expérience projets, roadmaps et nouveautés éditeurs, trucs & astuces, analyses et commentaires sur l’actualité du décisionnel.

Bonne lecture !

Categories: Divers Tags: ,

Roadmap Enterprise Architect 8.0

J’ai pu assister, avant-hier, à une des deux sessions de présentation à destination des partenaires de Sparx, des nouvelles fonctionnalités de la version 8.0 d’Enterprise Architect qui devrait sortir d’ici quelques semaines.

Il ne s’agit pas d’une révolution mais plutôt d’une version apportant des améliorations ponctuelles mais importantes.

Je ne vous ferai pas une présentation exhaustive mais plutôt un survol de quelques points marquants selon moi.

Saisie structurée des scénarios

La nouveauté la plus importante pour les utilisateurs de l’outil dans les phases de recueil de besoin : les scénarios associés à un Use Case sont maintenant structurés (auparavant, ils étaient saisis sous forme de texte libre) et peuvent être associés à des diagrammes. Mieux, ces diagrammes (séquence, communication ou activité) peuvent être générés à partir du contenu textuel structuré.

clip_image001

Chaque étape d’un scénario apparait dans une ligne, une icône en en-tête caractérisant l’étape courante (sollicitation par l’acteur ou réponse du système). La numérotation des étapes est automatique et est maintenue dans les scénarios alternatifs qui y font référence.

Le descriptif de l’étape est textuel mais intègre éventuellement des renvois (sous forme de lien hypertexte) vers les termes définis dans le glossaire.

Cette fonctionnalité est d’ailleurs aussi disponible dans le texte des Notes :

clip_image001[8]

Workflow de projet

On peut créer un Workflow décrivant un enchainement de tâches à réaliser par les utilisateurs de EA en fonction de leur rôle (défini par la notion de “groupe” d’utilisateurs). Une tâche peut-être associée à un script (une requête). Cela permet, par exemple, d’affecter au “Project Manager” une tâche de validation des « exigences approuvées » ou de contrôle des « classes non implémentées ».

La présentation (très rapide !) de cette fonctionnalité n’a pas permis de comprendre toutes les conséquences de ces nouvelles fonctionnalités mais il semble qu’il s’agisse d’un premier pas vers la possibilité d’instrumenter une démarche projet.

Environnement de travail

Les “Visual Layouts” personnalisés (sauvegardes de l’environnement de travail avec position des fenêtres, toolbars customisées…) sont maintenant nommés et en nombre illimité.

image

Duplication de package

Il est maintenant très simple de dupliquer un package entier. Les fonctions “Copy package / Paste package” sont maintenant disponibles. Le résultat est le même que lorsqu’on fait un export XMI suivi d’un réimport.

Sortie de Visual Studio 2010

La date de sortie de Visual Studio 2010 est maintenant officielle : ce sera le 12 Avril 2010. C’est Rob Caron qui l’annonce.

Rappelons que la sortie avait été repoussée suite à des problèmes de performance. Une version Release Candidate devrait être disponible en Février avec une licence « Go Live ». Espérons que les problèmes de performance soient résolus dans cette version.

Le blog d’Aurélien Norie

Microsoft fournit un toolkit pour le référencement de sites Web

Voici un outil qui parait fort intéressant : SEO Toolkit

Au-delà de la « simple » validation HTML/CSS, cet outil simule un moteur d’indexation et fournit différents rapports : liens cassés, taille des pages et temps de chargement, répétitions de titre …

L’annonce de Henry Hahn.

Categories: Outillage Tags: , , ,

Lyon JUG : soirée Méthodes Agiles

Le Lyon JUG (Java User Group de Lyon) consacre une soirée aux Méthodes Agiles, et Objet Direct sera de la partie.
Cela se déroulera le mardi 19/01/2010, 19H, à l’Epitech. Lire la suite…

SAP Web 2.0

Il y a encore très peu d’information disponible sur ce futur produit de SAP, mais il semblerait que sa sortie soit imminente désormais.

Certains le présentent comme un Google Wave Killer, SAP parle lui plutôt de BI collaborative (Business Intelligence).

Le projet est connu depuis quelques temps sous le nom de Constellation,  et est testable par quelques privilégiés sous le nom de 12sprints.

Quelques liens qui en parlent :

A suivre…

Categories: Cloud, Outillage Tags: , ,

Formations en soirée Objet Direct

Lu dans le magazine Programmez! de Janvier 2010 (p 48) : « Formations en soirée » : une expérience originale et motivante.

« Depuis 2 ans, la SSII Objet Direct, spécialisée dans les nouvelles technologies, a mis en place un dispositif original de formations internes, éligibles au DIF, et donc rémunéré à hauteur de 50% du salaire. »

Categories: Divers Tags: ,