dimanche 27 octobre 2013

Une semaine, une stack

J'ai été muté de Grenoble vers Nantes dans une autre entité de ma boite. Fini les télécoms, je vais à présent opérer dans le domaine de la banque et de l'assurance. J'étais à la recherche de nouveaux challenges techniques, au moins une mise à jour sur ces technos un peu récentes...

Pour la première fois j'ai fait une semaine d'intercontrat. J'ai travaillé avec des jeunes embauchés sur une application Java, un projet donné à but didactique. Cela m'a permis de combler un peu mon retard sur ces technos. En effet, je n'ai jamais utilisé Hibernate, GWT ni de framework d'injection de dépendances et encore moins de bibliothèques de mock ! C'était très rafraichissant ! Voici mon retour.

Hibernate : ne pas avoir à écrire de SQL permet de gagner du temps. J'ai joué avec la configuration pour pouvoir utiliser HSQLDB en mémoire pour les tests. Hibernate peut se charger de créer tout votre modèle relationnel, ce qui est cool pour pouvoir recréer une plateforme de test à volonté. Je n'ai pas regardé les aspects cache qui parait-il sont un point fort de l'outil.

Mockito : utiliser une bibliothèque de mock facilite l'implémentation d'interfaces pour le test. Elle permet notamment de vérifier que le code appelle bien les méthodes attendues. Pour des cas simples, c'est vraiment pratique. Pour des cas plus complexes, l'API se révèle vite limitée. Par exemple, j'ai utilisé Mockito pour mocker des vues GWT. Ça a plutôt bien marché. En ce qui concerne les services asynchrones, j'ai préféré implémenter manuellement les interfaces pour tester les différentes méthodes de callback parce que je n'arrivait pas à faire ce que je voulais avec Mockito.

Guice : il s'agit d'une bibliothèque développée par Google pour faire de l'injection de dépendance (un peu comme Spring). Elle facilite la création d'un contexte JPA à l'aide d'Hibernate. L'API de type fluent est plutôt sympa.

GWT : j'avais vu une présentation de GWT à l'AlpesJUG il y a 2 ans. C'était enfin l'occasion d'essayer. C'est un outil développé une fois encore par Google permettant de coder de l'interface Web en Java. Les events sont bindés à des méthodes Java et les requêtes AJAX sont codées sous forme d'appels à des services enchaînant sur un callback. Le tout est compilé ensuite en HTML et Javascript. Le truc cool, c'est qu'au runtime, les appels aux services Java par le Javascript se font directement par un protocole RPC. Le truc chiant, c'est que s'il est possible de faire des tests unitaires, ceux-ci utilisent le formalisme JUnit 3 et doivent étendre une classe de test spécifique pour pouvoir créer des objets GWT (GWTTestCase). La méthode setup n'est pas accessible est le temps d'exécution des tests est très long (30 secondes environs pour UN test). Cette capacité à réaliser des tests doit donc être limité à des tests de bout en bout et n'est pas applicable à une approche de développement dirigé par les tests.

En conclusion, je suis plutôt satisfait car j'ai pu apprendre plein de trucs même si je suis passé par une bonne migraine ! J'ai pu mettre à l'épreuve ma pratique du TDD te essayé d'aider des développeurs plus jeunes.

Si ça continue comme ça, je vais avoir plein de trucs à partager dans les mois qui viennent !