DevoxxFR 2012 : autour de java

Pour faire suite à mon précédent article centré sur les tests, vous trouverez dans ce post les sessions de ce DevoxxFR qui ont retenu mon attention autour du thème java et son écosystème. Les 3 A pour Java EE 6 Cet atelier est  animé par Alexis Hassler (@AlexisHassler), Antoine Sabot-Durand (@antoine_sd), Yann Blazart (@yblazart). Il permet d’avancer pas à pas dans la mise en œuvre des principales spécifications de Java EE 6. Par le biais d’instructions fournies sous forme d’un fichier PDF, chacun avance à son rythme et fait évoluer une application existante en y intégrant différents éléments de la spécification. Ainsi, JSF2.0, JAX-RS 1.0, CDI 1.0 mais aussi Arquillian sont abordés. Ce dernier ne fait pas partie de la spécification mais est très utile pour réaliser des tests d’intégration directement dans le conteneur. Au final, une session “les mains dans le cambouis” intéressante, qui permet d’aborder JEE6 concrètement. Le public en sort avec un exemple complet et  fonctionnel. Vous pouvez retrouver l’atelier à l’adresse suivante : https://github.com/antoinesd/Labs-Java-EE-6. Developing, Deploying and Scaling in the Cloud with Play par James Ward (@_JamesWard) et Nicolas Leroux (@nicolasleroux) Il existe des différences majeures entre Play 1 et Play 2 : l’accès aux données Read More

DevoxxFR 2012 : du nouveau sur les tests

Dans mon billet précédent, je relatais les sessions de ce DevoxxFR qui m’ont le plus marqué par leur originalité. Je vais maintenant revenir sur les quelques sessions qui concernaient les outils de tests. Le dernier article de cette série traitera des sessions liées à Java et à son écosystème. Selenium 2, Selenium Grid et TestNG par Mathilde Lemee (@MathildeLemee) Mathilde nous présente l’intérêt de Selenium2 pour automatiser les tests IHM. Elle déconseille l’utilisation de Selenium IDE, mais encourage à écrire directement les scénarios en Java, la syntaxe étant relativement simple. Après une présentation des avantages de TestNG comparé à Junit (groupes de tests, dépendances de tests, listeners, tests paramétrés), Mathilde met le doigt sur le point noir des tests sous Selenium : la lenteur d’exécution. Une solution pour pallier à ce problème est de mettre en place Selenium Grid. Cet outil permet de lancer les tests en parallèle, pourquoi pas sur des VM différentes, avec des OS et browser différents voir même sur le cloud avec Azamon EC2 par exemple. Une présentation de 30 minutes rondement menée, le tiercé Selenium 2, Test NG et Selenium grid semble pertinent pour maintenir une suite de tests d’intégration opérationnelle. Réaliser des tests de Read More

DevoxxFR 2012 : les sessions décalées

Les 18, 19 et 20 Avril dernier j’ai eu la chance de participer à DevoxxFR (déclinaison francophone de Devoxx). Avec plus de 1200 inscrits, 199 intervenants et 133 sessions, c’est la conférence pour développeurs de ce début d’année. Cette cuvée 2012 se décline sur 4 grands thèmes, Web, Mobile et le Cloud, Langages alternatifs sur la JVM, Entreprises et pratiques, Java, Java EE et Architectures. En quelques mots, ce cru DevoxxFR 2012 fût vraiment excellent ! Si vous avez l’occasion d’assister à ce genre d’évènement, foncez sans hésitez. A travers une série de 3 articles, je vais tenter de vous transmettre l’intérêt et le plaisir que j’ai eu à assister à cette conférence. Pour ce premier billet, je reviendrai sur les sessions qui ont attiré mon attention par leur originalité. Le second article sera centré sur le thème des tests. Pour le troisième et dernier je reviendrai sur les sessions touchant à java et son écosystème. Fier d’être développeur par Pierre Pezziardi (@ppezziardi) Je retiens de cette keynote les points suivants (pas forcément dans l’ordre) : egoless programming manifesto; un développeur n’est pas son code et un avis critique sur son code n’est pas une critique de sa propre personne; Read More

IHM et expérience utilisateur

Dans le développement des applications de gestion, de gros efforts sont axés sur la sécurité, la robustesse, et les performances. Hélas, un point essentiel est parfois délaissé : l’interface. Au quotidien, j’interviens sur le développement des différents aspects d’application n-tiers (présentation, métier, accès aux données), au moyen des technologies Java usuelles. C’est cependant la couche présentation que je prends le plus de plaisir à développer, notamment l’interface à proprement parler. Soigner l’interface, c’est offrir à l’utilisateur final la meilleure expérience possible, lui permettre de réaliser l’action qu’il souhaite rapidement et de manière quasi-instinctive. C’est aussi lui garantir qu’il pourra utiliser l’application quelque soit son navigateur, sa configuration, mais aussi sa condition physique. On parle alors d’ergonomie, de sémantique, de standards, de rétrocompatibilité, d’amélioration progressive, et d’accessibilité. Tout ceci constitue ou contribue à l’expérience utilisateur. J’aborderai ce vaste thème lors de mes prochains articles sur ce blog, en partageant avec vous mon expérience et mon enthousiasme pour les interfaces utilisateur soignées.

JavaCamp à l’ElsassJUG, le 24 Février 2011

L’Elsass JUG s’est retrouvé le 24 Février au CPPlex pour le premier JavaCamp organisé en Alsace. Vous connaissez le principe ? Sur le modèle des BarCamps, les JavaCamps sont des ‘non-conférences’, dans lesquelles les speakers sont les participants. Les thèmes de la soirée ? Ceux qui motivent les présents: l’intégration continue, les serveurs Web avec JSF, l’agilité et la lazyness avec Google Guava. La soirée JavaCamp commence par un tour de présentation: chacun est invité à se présenter en trois tags: agilité et web sont les mots clés qui reviennent. Les Jugers sont ensuite invités à écrire sur des posts-it les thèmes qui leur tiennent à coeur. JSF et l’intégration continue sont les grands vainqueurs de ce premier sondage. Session 1: Intégration continue, JSF Je ne peux vous parler que de la session à laquelle j’ai participé: l’intégration continue consiste à construire régulièrement les builds des applications développées, pour s’assurer que la chaine de compilation, tests unitaires, tests d’intégration et packaging est stable. Une implémentation légère consiste en l’utilisation de Maven, qui automatise la gestion de dépendances et l’exécution des tests. Pour des projets ambitieux, la suite Hudson permet de générer les packages pour plusieurs environnements cibles, et de tester Read More

Soirée de lancement de l’Elsass JUG le 19.11.2010

Vendredi 19 novembre a eu lieu la 1ère soirée de l’Elsass JUG à l’EPITECH Strasbourg. Près de 120 personnes de tous horizons (étudiants, enseignants, informaticiens et SSII) ont assisté à une soirée sous le signe du développement d’applications mobiles. Android était à l’honneur, comme il se doit au Java User Group, mais l’IPhone a été aussi dignement représenté. Au programme : un retour d’expérience de mise à disposition d’une application sur la boutique Android Software, par Didier Girard ; des développements live d’applications Android ; puis une démonstration de l’étendue des possibilités d’Android face à IPhone, par le biais d’un jeu de rôles parfaitement exécuté par les membres de la jeune société Wakeapps. Ce qu’on peut en retenir: une application qui vit est une application qui permet à sa communauté de s’épanouir – et qui permet aux développeurs de corriger les bugs avant que les forums publics type marketplace soit informés. Nous avons d’ailleurs eu une démonstration grandeur nature des effets de la communauté sur la qualité des applications: Didier a enfin pu emprunter le HTC Desire dont il avait besoin pour corriger un bug spécifique sur ce téléphone. A qui l’a-t-il emprunté ? A Wakeapps bien sûr … Les participants entre Read More

Visualiser en temps réel la santé de votre application Java avec JStat, LiveGraph et les outils de manipulation de flux Unix

En ce moment, je réalise des tests de montée en charge du serveur de reporting JasperServer. Je souhaite pouvoir corréler le niveau de stress (nombre de tirs simultanés) appliqué au SUT, le System Under Test, avec des métriques internes du serveur, à la fois système comme la charge CPU du process Java et la quantité de HEAP utilisée mais je souhaite aussi pouvoir mesurer des métriques propres à la librairie JasperReports comme le nombre de rapports en cours de calcul ou la vitesse de remplissage des rapports. J’utilise JMeter pour effectuer les tirs. Cet outil permet de simuler plusieurs clients simultanés et de visualiser l’évolution des temps de réponse en fonction du temps et du nombre de clients qui tirent. C’est une vision boite noire, externe au SUT. JMeter ne permet pas de visualiser des métriques propres au SUT comme la charge CPU, le nombre de transactions en cours, le nombre de requêtes SQL en cours ou dans le cas qui m’intéresse le nombre de rapports en cours de calcul. Il existe plusieurs outils qui permettent de monitorer en temps différé ces informations comme par exemple HypericHQ ou l’une de ses nombreuses variantes, ils sont conçus pour du monitoring de Read More

Promouvoir les tests 5/5. Le TDD est il incontournable ?

1) Introduction 2) Développement “piloté par les tests” vs “assisté par les tests” 3) Tests unitaires “en isolation” ou “contextuels” ? 4) Gestion des données de tests et choix des outils 5) Conclusion Il va de soit que les tests représentent un gage de qualité pour un projet. Leur adoption dépend à mon avis de deux aspects : une bonne méthodologie ; une infrastructure adaptée. Si les méthodes agiles et le TDD représentent un facteur de motivation, il serait dommage de ne pas les mettre en œuvre. Si ce n’est pas le cas, ou que le projet ne s’y prête pas, l’important à mon sens est de créer un besoin. L’un des aspects essentiels du développement assisté par les tests est de fournir un maximum de confort et de possibilités aux développeurs, afin de faire du test unitaire un outil de développement apprécié et indispensable. Quelque soit la solution choisie, sa pérennité dépend fortement de la mise en place de l’infrastructure et de l’outillage nécessaires. L’intégration continue, notamment, est capitale. Enfin, une solution de tests fonctionnels complètera efficacement l’une ou l’autre des méthodes citées.

Promouvoir les tests 4/5. Gestion des données de tests et choix des outils

1) Introduction 2) Développement “piloté par les tests” vs “assisté par les tests” 3) Tests unitaires “en isolation” ou “contextuels” ? 4) Gestion des données de tests et choix des outils 5) Conclusion Gestion des données Pour résumer, l’objectif est ici de placer la BDD dans un état prédéfini avant le test, de façon automatique, afin d’assurer sa reproductibilité. De plus, cette initialisation doit se faire : de façon suffisamment rapide pour que la durée d’exécution des tests ne devienne pas une contrainte ; de façon suffisamment souple pour injecter facilement toutes sortes de données. En outre, une méthode d’insertion dynamique permettra par exemple de créer des listes volumineuses pour tester un composant de pagination ou de tri. Les tests contextuels nécessitent des jeux de données plus conséquents que les tests en isolation. Malgré tout, il est important que ceux-ci restent suffisamment légers pour conserver des performances acceptables. Pour organiser ces jeux de données de façon optimale, nous distinguerons : La structure de la BDD ; Les données de référence, qui se trouvent dans des tables qui ne sont jamais modifiées lors de l’utilisation habituelle de l’application. Exemples: Table “CIVILITE” (Mr, Mme, Mlle), table des départements, etc. Les données d’initialisation, Read More

Promouvoir les tests 3/5. Tests unitaires “en isolation” ou “contextuels” ?

1) Introduction 2) Développement “piloté par les tests” vs “assisté par les tests” 3) Tests unitaires “en isolation” ou “contextuels” ? 4) Gestion des données de tests et choix des outils 5) Conclusion En pratique, que l’on choisisse le TDD ou une autre méthodologie, la complexité majeure de mise en œuvre réside dans la gestion des données de tests. La problématique consiste à placer la base de données dans un état prédéfini, avant l’exécution de chaque test, de façon automatique. Par ailleurs, la politique de gestion des données est déterminante pour choisir les outils appropriés. En TDD, les tests unitaires sont réalisés en pure isolation. C’est-à-dire que chaque fonction est testée en l’isolant de son contexte d’exécution afin d’éviter toute interférence externe qui risquerait de compromettre le résultat du test. C’est pour cela que les implémentations “mock” comme EasyMock ou Mockito (Mockito in six easy examples) sont très utilisées en TDD. L’isolation réduit aussi considérablement le volume de données de tests à gérer. Des outils comme DBUnit et SpringUnit, qui permettent de spécifier en XML les données attendues en entrée et en sortie de chaque test, sont alors adaptés. En dehors d’un contexte TDD, cette technique d’isolation peut bien sûr Read More