Archive

Archives pour 06/2009

Eclipse 3.5 est sorti : Galileo

Voici enfin le train de  releases d’Eclipse nommé cette fois-ci Galileo.

Dur de s’y retrouver dans tous ces composants,

Quelques infos sur les nouveautés avec le fameux « New and noteworthy » :

http://download.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/eclipse-news.html

Rien de transcendant on dirait. Sauf, si ! Ils ont ajouté le moyen de générer des toString() en Java :)

Pascal.

Categories: Java EE, Outillage Tags: ,

Modélisation UML avec Visual Studio 2010

Comme je l’avais annoncé dans un précédent billet, j’ai installé Visual Studio 2010 sur une machine virtuelle (merci à la DSI). Mes premiers essais ont porté sur la modélisation UML. C’est un enjeu important pour Microsoft qui va pouvoir compléter son usine logicielle. Aujourd’hui en effet, la modélisation UML se fait généralement avec des outils comme Enterprise Architect.

Afin de me faire une idée objective, j’ai réalisé mes tests sans aucune lecture préalable. Je n’ai pas encore fait le tour des possibilités mais voici mes premières impressions:

  1. La prise en main facile. Il faut créer un projet de modélisation et ensuite ajouter les diagrammes souhaités.
  2. L’interface est conviviale. A titre d’exemple, voici un diagramme de classe : vsts2010-class-diagram
  3. 5 diagrammes sur 13 d’UML sont disponibles : diagrammes d’activités, de composants, de use case, de classes, de séquences. UML n’est pour l’instant pas complètement supporté dans les 5 diagrammes
  4. Je pensais trouver dans cette première version un générateur de code, mais je crois qu’il va falloir attendre (ou alors la fonctionnalité est bien cachée)

Pour terminer, voici 2 fonctionnalités que  je n’ai pas encore testées me paraissent intéressantes:

  1. Les diagrammes ou les éléments de diagrammes peuvent être liés aux work items de VSTS. J’ai utilisé une fonctionnalité équivalente avec le plug-in d’Enterprise Architect, et je trouve celà vraiment pratique.
  2. Les diagrammes peuvent être versionnés dans le gestionnaire de sources très simplement.

Les calculs en Java

Tous les développeurs le savent, ou devraient le savoir, mais un petit rappel de temps en temps ne peut pas faire de mal ;-) : en informatique, le sens commun mathématique n’est pas toujours respecté !

Voici donc un bon article de Kasper B. Graversen qui explique par exemple pourquoi en Java (mais c’est vrai aussi dans d’autres langages) 0.1 + 0.1 + 0.1 n’est pas égal à 0.3, et décrit d’autres problèmes de précisions que tout développeur a rencontré un jour ou l’autre. Il donne également les règles à respecter pour éviter les mauvaises surprises.

Bonne lecture !

Categories: Java EE Tags:

Eric Evans au Paris JUG

Merci à Mathieu qui m’a donné l’info.

Un événement à ne pas manquer à Paris : la venue en France de Eric Evans.
Recevez en direct la parole du créateur du Domain Driven Design : le paris JUG organise une soirée exceptionnelle lundi soir prochain.
A ne manquer sous aucun prétexte : en plus c’est gratuit !

Franchement, je pense que son propos est exactement dans la ligne stratégique d’Objet Direct : à mi chemin entre la MOA et le développement, il propose des solutions pour adresser  le problème le plus important dans le développement d’applications informatique : comment gérer la complexité métier.

Pour les novices, il existe un résumé de son livre sur InfoQ.

Pour les gens intéressés j’ai animé en avril, un séminaire interne AMOA sur le sujet à Paris. Je peux le réorganiser à la demande.

Pour ceux qui veulent aller plus loin :
http://www.domaindrivendesign.org
http://www.domainlanguage.com

API REST en .NET

Suite à mon dernier article sur le RIA et la formation en soirée que j’ai animée, j’ai eu quelques questions sur comment exposer un modèle relationnel dans un mode REST en .NET et plus particulièrement pour un client RIA genre Silverlight.

Je vais donc vous proposer une série d’articles sur le sujet.

Le premier présentera ADO.NET Data Services, le framework de Microsoft qui à partir d’un provider LINQ peut exposer votre modèle d’entité sur HTTP dans un mode REST.

A titre d’exemple, je vais utiliser le prototype que j’ai réalisé pour une application traitant de la traçabilité des produits sanguins au CHU de Grenoble. J’ai donc le modèle d’entités suivant:

Modèle d'entités

Modèle d'entités

Depuis Visual Studio, j’ai créé un service ADO.NET Data Services. Je lui ai indiqué mon modèle d’entités et j’ai ajusté les autorisations. La ligne suivante indique que les entités Etat sont accessibles en lecture seule.

config.SetEntitySetAccessRule(« Etat », EntitySetRights.AllRead);

Mon modèle est maintenant accessible sur HTTP. Je peux regarder sa description à l’URI suivante : http://mondomaine.com/DTI.svc/

Le modèle REST exposé par ADO.NET Data Services

Le modèle REST exposé par ADO.NET Data Services

Les connaisseurs noteront que la description de notre API utilise Atom Publishing Protocol et Atom Syndication Format.

Je peux maintenant interroger mon modèle en requêtant directement avec mon navigateur. Par exemple, pour avoir toutes les poches, je vais utiliser l’URI http://localhost:2427/DTI.svc/Poche

Personnellement, pour vérifier mes requêtes j’utilise Fiddler. Par défaut, on obtient un feed Atom contenant une collection de poches. ADO.NET Data Services supporte également le format JSON. Si dans Fiddler, vous modifiez le header HTTP Accept avec application/json vous obtiendrez un flux JSON:

Une collection de poches au format JSON

Une collection de poches au format JSON

ADO.NET Data Services ne se limite pas à récupérer une collection d’entités. On peut filtrer les entités sur certains critères. Par exemple l’URI http://localhost:2427/DTI.svc/Poche?$filter=NumDon%20%eq%20%12345678 me permet de récupérer la/les poches dont le champ NumDon vaut 12345678. On peut également récupérer les entités associées aux poches. L’URI http://localhost:2427/DTI.svc/Poche?$expand=Tracabilite récupère les poches avec leurs traçabilité sachant qu’une poche peut avoir plusieurs traçabilités.

Les principales fonctionnalités de requêtage sont disponibles: filtre, tri, pagination. Le format des URI est décrit ici

Dans les applications de gestion de données, on ne se limite pas à afficher des données. On souhaite aussi ajouter, modifier, supprimer. Dans le monde REST, on utilise pour cela le verbe HTTP. Par défaut, lorsque vous saisissez une URI dans votre navigateur, c’est le verbe GET qui est utilisé. Mais on peut aussi utiliser les verbes POST, PUT ou DELETE si les conditions d’accès que nous avons définies sur le serveur le permettent.

On peut noter que toute cette API repose sur des standards reconnus: HTTP, Atom, JSON. Elle peut donc être interrogée par n’importe quel client qui supporte ces standards.

Dans le prochain article, j’expliquerai comment interroger cette API à partir d’un client Silverlight et de LINQ For ADO.NET Data Services.

La forge Open Source Codendi 4.0 est disponible

La forge logicielle de Xerox s’offre une version 4.0 née sous le signe de l’ouverture :-)

Pour rappel, Codendi est une plate-forme collaborative de gestion de projet développée par Xerox, et permet de rassembler divers outils : gestion de code source, suivi de projet, gestion de documents, et d’autres outils de communication et de collaboration (forums, wikis, listes de diffusion, suivis de bugs).

Codendi 4

www.codendi.org

Cette nouvelle version majeure s’accompagne d’un changement de philosophie dans le mode de distribution : le code source est désormais disponible au public, et téléchargeable gratuitement sur le tout récent site communautaire de Codendi, sous forme d’une image ISO. Cet outil sous licence GPL était auparavant distribué uniquement aux entreprises sous forme d’un service payant, comprenant support technique et mises-à-jour.

Il y aura désormais deux versions : une version communautaire gratuite « Codendi Labs », et une version « Pro », plus stable, distribuée aux clients. Codendi renforce ainsi sa position sur le marché open-source, quelques mois après avoir gagné le Lutèce d’Or dans la catégorie « Meilleur projet libre réalisé par un Grand Groupe ».

Plus techniquement, cette nouvelle version offre notamment les fonctionnalités suivantes :

  • Une interface avec Hudson, la plate-forme d’intégration continue. Supervision des jobs, déclenchement des builds, résultats des tests, tout ceci est maintenant accessible depuis Codendi. Très utile pour être agile.codendi_hudson
  • Messagerie instantanée : déjà disponible en version 3.6 depuis les logiciels de messagerie instantanée compatible XMPP/Jabber, tel que Pidgin, il est maintenant possible de communiquer entre collaborateurs depuis l’interface web
  • Un tableau de bord évolué : affichage de flux RSS et Twitter, statistiques SVN/CVS, tout est personnalisable au niveau projet et utilisateur grâce une interface plus dynamique

Codendi est aussi partenaire du projet français COCLICO aux côtés de Bull, Orange Labs, Thales et l’INRIA, dont l’objectif est d’améliorer l’inter-opérabilité entre forges. Objet Direct contribuera également à ce projet en proposant notamment une application RIA pour le suivi de projet SCRUM.

Liens

Site communautaire de Codendi : http://www.codendi.org
Site professionnel de Codendi : http://www.codendi.com
Hudson, plate-forme d’intégration continue : http://hudson.dev.java.net

Premières impressions avec .NET RIA Services

Chose promise, chose due ! Je vous livre mes premières impressions sur les tests que j’ai réalisés avec .NET RIA Services, maintenant renommé WCF RIA Services. Pour l’instant j’ai beaucoup de bonnes surprises…

J’ai commencé par la validation des formulaires.
Je souhaitais vivement regarder la validation des formulaires. L’infrastructure utilisable en Silverlight 2.0 me plaisait beaucoup mais manquait d’une couche d’industrialisation. Pour rappel, cette validation nécessitait les actions suivantes:

  1. Déclarer une liaison de données en mode TwoWay avec notification d’erreurs de validation (généralement dans le XAML). Pour une TextBox liée à la propriété Commentaire d’un objet source, ça donne: textboxbindee
  2. Lever une exception dans le converter ou dans la méthode set de la propriété de l’objet source si la règle de validation n’est
  3. Récupérer l’évènement BindingValidationError. En général, on utilise alors le VisualStateManager pour passer le contrôle courant dans l’état Erreur qu’il aura fallu définir au préalable.

DataForm

Puisqu’on souhaite systématiquement passer dans l’état Erreur du contrôle, on pourrait avoir un contrôle conteneur écrit une fois pour toute qui supporte ce scénario. C’est le DataForm qui est disponible en Silverlight 3.0.

Méta données et validation

Redéfinir les méthodes set des propriétés des objets sources n’est pas forcément facile lorsqu’on travaille avec des proxies issus d’un WSDL ou d’un service ADO.NET Data Services. Par ailleurs, lorsqu’on a goûté à Hibernate Validator, on aime bien définir les règles de validation avec des annotations. Avec .NET RIA Services, c’est maintenant possible. Il faut définir une méta-classe dans laquelle on définit les règles de validation avec des annotations. En tirant avantage des classes partielles de .NET, on indique la méta classe à utiliser sans risque que le générateur écrase nos modifications. J’entends déjà les puristes se demander pourquoi les annotations ne sont pas directement placées sur les propriétés. C’est justement pour éviter d’avoir des conflits avec le générateur de code. Cette stratégie est très efficace.

La méta classe associée à la classe métier Project

La méta classe associée à la classe métier Project

Ces annotations sont définies coté serveur et projetées coté client pendant la phase de compilation du projet. WCF Ria services peut donc exploiter ces annotations coté client pour gérer la validation de surface sans avoir à réaliser un aller-retour sur le middle tier.

CRUD et méthodes complexes

Autre dilemme lorsqu’on travaille sur une application de gestion de données en RIA : les données doivent-elles être exposées en mode RESTFull ou en mode SOAP (sous-entendu contrat de service). Très clairement, lorsqu’on travaille sur du CRUD, le RESTFull est très pertinent. Inversement, lorsque les règles métiers sont importantes, le contrat de service a toute sa place. C’est notamment le cas lorsqu’il faut implémenter des règles de validation complexes qui ne dépendent pas seulement des données fournies par l’utilisateur. Il faudrait donc pouvoir passer facilement d’un mode à l’autre. Et bien c’est exactement ce que propose .NET RIA Services. Par défaut les services proposent des CRUD pour chaque entité, et on peut rajouter des opérations taggées Custom. Toutes ces opérations sont réunies dans un service de domaine.

Conclusion

Je n’ai pas encore regardé l’ensemble des possibilités, mais pour l’instant, je retrouve une productivité similaire à une architecture de type client lourd (genre WPF) et ORM (genre Hibernate).

Dans le prochain article, je vous présenterai l’intégration de l’authentification et des autorisations entre Silverlight 3, .NET RIA Services et une application ASP.NET

Vendre Scrum à une équipe qui pratique V

La revue Programmez publie ce mois-ci (n°120) un excellent article de Laurent Laslaz (consultant Objet Direct Grenoble, scrum master) issu du Wiki d’Objet Direct :

Vendre SCRUM à une équipe qui pratique V

Méthodes agiles – XP days 2009

J’ai eu la chance de participer cette année pour la première fois aux XP days les 25 et 26 mai.

Cet événement a été un beau succès : environ 250 participants et plus de 50 sessions sur 2 jours. Avec 6 sessions en parallèle, il n’était donc pas toujours facile de choisir!

Les sujets abordés ne concernaient pas seulement XP mais également l’agilité au sens large, Scrum, Lean, … d’ailleurs l’édition 2010 s’appellera « Agile Paris 2010 ».

Pratiquant Scrum en tant que Scrum master, je me suis orienté principalement vers les sessions concernant les sujets suivants:

  • Les aspects tests / critères d’acceptance : il est essentiel de pouvoir définir un besoin et de s’accorder sur la notion de terminé sans la moindre ambiguïté. J’étais particulièrement intéressé par l’ATDD (Acceptance Test Driven Development) et par le retour d’expérience sur l’utilisation d’outils à ce sujet.
  • Le Product owner : son rôle est important puisque c’est à partir de sa vision, son découpage et sa gestion des priorités que l’équipe Scrum travaille. Je souhaitais échanger sur la façon de découper les besoins et les prioritiser pour maximiser la valeur business.
  • Agilité au sens large / retour d’expérience : La résistance au changement est, de mon point de vue, une des principales difficultés pour le passage à l’agilité à tous les niveaux (et pas seulement pour l’équipe de développement). Avoir des métaphores ou encore assister à des présentations qui présentent des retours d’expérience, permet d’enrichir nos arguments, trouver les mots et exemples pour convaincre ceux qui ne le sont pas encore ;-) ou pour introduire certains concepts en douceur.

Je vous livre ci après un résumé et un avis sur les sessions que j’ai le plus appréciées.

Test / Critères d’acceptances

J’ai beaucoup apprécié la présentation Soigner sa schizophrénie projet MOA / MOE : voyage autour des exigences fonctionnelles exécutables.

Elle explique la nécessité pour des équipes MOA (maitrise d’ouvrage qui définit ce qu’il faut faire) et MOE (maitrise d’œuvre qui fait) de communiquer pour définir le besoin et s’accorder sur la notion de TERMINE. Spécifier par l’exemple c’est à dire décrire les user stories à travers des exemples permet de lever toute ambiguïté. Des outils existent pour formaliser ces tests et rendre les spécifications exécutables. Les slides de la présentation sont disponibles http://www.slideshare.net/ehsavoie/soigner-sa-schizophrnie. Je vous invite grandement à les parcourir.

Personnellement, cette présentation m’a donné envie d’évaluer et utiliser ce genre d’outils.

J’ai également participé à l’atelier Dojo TDR (Test Driven Requirement). L’objectif de cet atelier était d’utiliser les tests pour décrire des exigences et règles de gestion. Une personne à tour de rôle prenait les commandes du PC, pour une durée time boxée de 5 mn, pour décrire un test sous FitNesse.

Le formalisme utilisé était:

  • Given : Etant donné (précondition)
  • When : déclenchant.
  • Then : ce qui doit se produire.

Ou encore un tableau de décision : chaque ligne correspond à un test et les colonnes sont les données d’entrée ou de sortie associées à ce test.

Nous avons vu qu’il est nécessaire de partager une vision globale et qu’il ne faut pas hésiter à changer la règle du jeu pour utiliser, par exemple un paper board.

J’ai bien apprécié cet atelier et envisage de mettre en pratique cette approche rapidement.

Product owner

J’ai choisi de participer au retour d’expérience Rôle du Product Owner et conception produit et non pas à l’atelier en parallèle Product Owner, qui es-tu, que fais-tu ? (comme je l’ai indiqué les choix n’étaient pas toujours faciles!).

J’ai trouvé le retour d’expérience intéressant : Le rôle du product owner doit avoir à la fois un profil marketing, mais également comprendre et anticiper les contraintes de l’équipe de développement (nécessite un background technique) tout en connaissant bien les règles de Scrum. Avec un Scrum master très expérimenté, le rôle du Product owner peut se limiter à donner des directives produits. Le Product owner doit s’impliquer dans le projet pour partager les succès et échecs. Il n’est pas forcément le client de son produit : il doit donc rencontrer et impliquer les utilisateurs du produit.

Dommage que cette session ait été écourtée (en raison d’un petit problème technique au début). J’aurais souhaité échanger par la suite sur ce sujet mais je n’en ai malheureusement pas eu l’occasion. Peut être lors d’une prochaine manifestation mais c’est un sujet qui me tient particulièrement à cœur. De mon point de vue, il est important que le couple « product owner / scrum master » fonctionne correctement. La frontière précise entre les 2 (notamment sur les aspects qui ne sont pas purement fonctionnels métier) dépend des compétences et expériences de chacun.

Le “Business Value Game”, trois itérations dans la peau du Product Owner

Il y avait beaucoup de monde pour cette session et j’ai seulement pu y participer en tant qu’observateur. Cet atelier était basé sur le jeu http://www.xp.be/businessvaluegame.html qui permet de se mettre dans le peau du Product owner pour essayer de maximiser la business value en prenant en compte différents facteurs (coût, vélocité de l’équipe, satisfaction client,…).

Cet atelier a été très bien animé et était intéressant. De ce fait, j’espère trouver l’occasion de le pratiquer lors d’une prochaine manifestation.

Présentation Agilité / retour d’expérience

La parabole du trafic urbain – l’Agilité expliquée autrement

Une présentation de très bonne qualité pour nous expliquer l’agilité en utilisant la métaphore du trafic urbain : les blocages locaux, saturations, diversité de véhicules, flux changeant, … Le feu rouge est un système commande & contrôle (approche classique) alors que le rond point est plus agile puisqu’il privilégie la communication (observe les autres), la simplicité (trafic d’un seul coté), ne privilégie aucun flux, met en avant le respect du conducteur et maximise le flux.

J’ai bien aimé le résumé qui en est fait sur le blog : http://www.touilleur-express.fr/2009/05/27/xp-day-france-2009-journee-1/

J’ai trouvé cette comparaison très intéressante à la fois pour présenter l’agilité de façon simple mais également pour voir les choses d’un autre œil. Lorsque j’observerai des points de blocage, j’essayerai de faire le parallèle et trouverai peut être la solution, en rentrant en voiture, bloqué dans les bouchons ;-)

J’ai également participé à plusieurs présentations et retours d’expérience entre autre Chef, la recette et Legacy people : motivons les troupes !

L’agilité ne concerne pas que les aspects techniques. Elle concerne également la gestion de projet. Elle nécessite de procéder par étapes et de se donner des objectifs atteignables. Il est nécessaire de s’adapter aux personnes et faire les choses lorsque c’est pertinent. Il est important de mettre en avant les aspects humain, travailler sur la communication et valoriser les personnes.

J’apprécie les retours d’expériences. Il est toujours intéressant d’avoir d’autres points de vue et d’autres façons d’aborder les mêmes problématiques en fonction du contexte du projet.

Je partage avec vous quelques slides des XP days qui sont disponibles en ligne :

Conclusion :

J’ai bien apprécié de participer à ces XP days. J’espère avoir l’occasion d’y participer à nouveau l’année prochaine.

Ces manifestations sont l’occasion de suivre des présentations, de pratiquer et d’échanger avec d’autres personnes.

Je profite de ce post pour indiquer qu’il est également possible d’échanger régulièrement au sujet de l’agilité sur la région Rhône Alpes via le CARA. Vous trouverez toutes les informations sur http://www.clubagile.org