PIT : Une autre approche des tests unitaires

A l’occasion de la conférence Devoxx France édition 2014, une présentation a particulièrement retenu mon attention. Il s’agit de celle de PIT (Parallel Isolated Test), un outil de tests unitaires s’inscrivant dans les pratiques Test Driven Development (développement piloté par les tests) consistant à écrire les tests unitaires avant d’écrire le code source d’un logiciel. Ce sujet a été présenté durant la conférence sous forme d’un quickie d’une durée de quinze minutes par Alexandre Victoor, architecte technique à la Société Générale et ancien novédien.

PIT part du principe que le fait d’avoir une couverture de test des lignes ou des branches de code approchant les 100% ne garantit pas la qualité des tests. En effet, une couverture de tests nous informe uniquement sur ce qui n’est pas du tout testé mais pas sur la pertinence des tests. A l’inverse, PIT se veut qualitatif, plutôt que quantitatif, en essayant de mettre nos tests unitaires en défaut.

Lire la suite

Un nuage de solutions au JUG Summer Camp

Cette année s’est déroulée la 5ème édition du JUG Summer Camp ; encore une fois, c’est à La Rochelle que l’événement a eu lieu. Dans un espace Encan très accueillant, les javaistes et autres acteurs de la communauté se sont retrouvés pour échanger pendant une journée sur les thématiques du Big Data et du Cloud, sujets forts de l’actualité dans le monde IT.

Pour ma première participation au JUG Summer Camp, j’ai été ravi par les sujets abordés ainsi que par la qualité des interventions. Tout a très bien commencé avec la keynote d’ouverture, assurée par Tugdual Grall durant laquelle il a tenté de répondre à la question « Comment choisir la meilleure solution technologique pour un projet ? ». Cette introduction était en adéquation avec les thématiques de la journée. Devant faire un choix sur les conférences à suivre (deux présentations se déroulaient en parallèle), je me suis orienté vers des technologies que je connaissais, mais dont je n’avais pas eu l’occasion de voir en action. Je délaissais les démonstrations de nouveaux langages tels que Ceylon ou Golo et des IDE « Cloudifié » tel que Codenvy. J’ai ainsi assisté à des présentations convaincantes de Docker, MongoDB Aggregation Framework, SimpleWeb4j et ElasticSearch. J’ai également pu participer à un « lobbying » intéressant autour du Cloud et des stratégies de migration vers ce nouveau type de SI.

Lire la suite

JUG Summer Camp, 5ème acte !

logo-summercamp-277x300Ce vendredi 19 septembre a lieu la cinquième édition du JUG Summer Camp à La Rochelle.
Pour cette nouvelle édition, conférences et quickies sont au rendez-vous pour aborder les sujets en vogue tels que le Cloud, le NoSQL, et les nouveautés autour de Java et du JavaScript.
Avec le soutien de leurs sponsors, cette année encore le JUG Summer Camp est gratuit !
Le cadre est idéalement choisi pour rendre cet événement agréable et convivial : conférence à l’espace ENCAN, déjeuner sur le vieux port de La Rochelle, beau temps au programme (27ºC, vent léger).

Tout au long de la journée, se dérouleront en parallèle deux conférences (ou quickies) sur des thématiques différentes. Cela offre la possibilité d’adapter son programme afin d’assouvir sa curiosité ou d’approfondir ses connaissances.
Pour ma part, je vais m’orienter vers les thématiques liés à Docker, MongoDB et AngularJS, tout en restant attentif aux présentations autour de Java.
Vous pouvez retrouver le programme détaillé sur le site officiel du JUG Summer Camp.

J’ai hâte que cette journée commence afin de partager cette convivialité bien connue de la communauté Java et du JUG !

On aime, on partage #41

Bienvenue dans la série « On aime, on partage » de VISEO ! Chaque semaine retrouvez les meilleurs articles du web issus de notre veille technologique.

Node.JS

12 Fabulous Node.js Frameworks for Developers

Une sélection de frameworks Node.js pour vous faciliter la vie. http://thecreativeproject.co/2014/06/08/12-fabulous-node-js-frameworks-for-developers/

User Experience

Agile UX vs Lean UX, which should you choose?

Quelques explications sur ces deux buzzwords afin de mieux comprendre ce qui se cache derrière et de choisir la méthode qui convient le mieux a chaque projet.

http://www.webdesignerdepot.com/2014/05/agile-ux-vs-lean-ux-which-should-you-choose/

Outillage

Git tips from the trenches

Parce que GIT c’est que du bonheur, voici quelques tips pour mieux l’utiliser et améliorer son workflow quotidien.

https://ochronus.com/git-tips-from-the-trenches/

Java

Better Java

Une compilation riche de libs, de bonnes pratiques et d’outils pour le développement en Java.

https://github.com/cxxr/better-java

Le repo de la semaine

Une nouvelle entrée dans notre série hebdomadaire, “le repo de la semaine”. Chaque semaine retrouvez le lien vers un projet GitHub qui nous a aidé dans notre travail ou que nous avons aimé pour son originalité.

Promise Chains with AngularJS $q – Demos, source, & tutorial :

https://github.com/ThomasBurleson/angularjs-FlightDashboard

Nos contributeurs :

Un grand Merci aux contributeurs de cette semaine : Jean-François FOURMOND et Nicolas ROCHE

On aime, on partage #40

Bienvenue dans la série « On aime, on partage » de VISEO !
Chaque semaine retrouvez les meilleurs articles du web issus de notre veille technologique.

Java 8

8 super nouveautés de Java 8 dont personne ne parle

Lorsque l’on parle Java 8, on pense de suite au streams et lambdas. Cet article se concentre sur d’autres apports du langage donc nous n’avons eu que très peu de communication telles que les Stamped Locks, la nouvelle API Date ou encore l’entrée dans la programmation système avec le contrôle des processus de l’OS.

http://www.infoq.com/articles/Java-8-Quiet-Features

Diversité

Interview diversité avec Agnes Crepet et Maxime Tiran

Dans l’univers informatique tout le monde se ressemble, dans la trentaine, homme, … Quelques idées sur comment faire évoluer les choses dans le bon sens.

http://lescastcodeurs.com/2014/06/16/lcc-104-interview-diversite-avec-agnes-crepet-et-maxime-tiran/

Merci aux contributeurs de cette semaine : Frédéric BOUQUET

On aime, on partage #37

Bienvenue dans la série « On aime, on partage » de Viseo !
Chaque semaine retrouvez les meilleurs articles du web issus de notre veille technologique.

Gestion de projet

Formation MOOC en gestion de projet

Je souhaite partager une formation en ligne que j’ai apprécié faire. Il s’agit d’un MOOC (​Massive Online Open Course) en gestion de projet.

Le but de ce MOOC est d’apprendre (ou revoir) les bases de la gestion de projet ​(Notions fondamentales, Outils, infos et évaluation financière, Organisation des projets, Pilotage et plannification, …).

Il se déroule sur 5 semaines et la charge de travail par semaine est entre 2 à 7 heures en fonctions de la formation choisie (basique, avancée)

Chaque cours est divisé en chapitres composés d’une vidéo de 10 minutes environ, suivie d’un quiz.

Pour plus d’informations, rendez-vous sur http://mooc-francophone.com/mooc-abc-gestion-de-projet/

Tests

The little mocker

Un rappel utile sous la forme d’une discussion mentor/élève sur ce que sont les dummy, doubles, spys, mocks, fakes et dans quel cas les utiliser. Illustre aussi pourquoi l’utilisation de framework de mocks n’est peut être pas toujours adaptée.

http://blog.8thlight.com/uncle-bob/2014/05/14/TheLittleMocker.html

When to Mock

Oncle Bob propose quelques idées sur quand et où mocker. L’article se base sur un fond de TDD originel et revient aux origines de ce que sont les tests, ce qu’on attend d’eux, pour arriver à un argumentaire intéressant sur l’utilisation des mocks.

http://blog.8thlight.com/uncle-bob/2014/05/10/WhenToMock.html

Craftsmanship

Framework Bound

Rapide réflexion sur les framework et comment les utiliser plutôt que se faire utiliser par eux.

http://blog.8thlight.com/uncle-bob/2014/05/11/FrameworkBound.html

Java

Guava et Java 8

Voici un autre article avec des exemples d’utilisation des lambdas de Java 8.

Encore? Oui mais celui-ci montre quelques exemples de comment l’excellente librairie Guava peut aussi tirer profit.

http://blog.relateiq.com/java-8-examples/

Docker

Je vous propose de découvrir Docker à travers ce duo d’articles publiés par Nicolas Martignole a.k.a. “Le Touilleur Express”. En bref, Docker est un outil qui permet de simplifier le développement et la livraison d’applications en standardisant le packaging et l’exécution.

http://www.touilleur-express.fr/2014/05/03/docker-un-outil-simple-et-genial/

http://www.touilleur-express.fr/2014/05/05/installer-docker/

Le repo de la semaine !

Avant Java 8, il était impossible de connaitre par reflection le nom des paramètres d’une méthode au runtime.

Cette librairie propose plusieurs méthodes pour contourner le problème.

https://github.com/paul-hammant/paranamer

Merci aux contributeurs habituels : Frédéric BOUQUET,  Claude PETOT et Jean-Philippe LETARD 🙂

Merci beaucoup au nouveau contributeur : Sébastien BRUNO 😉

Sortie de Java 8

Aujourd’hui marque la sortie de la nouvelle version majeure de Java, la tant attendue N°8 !

La sortie était initialement prévue pour Septembre 2013 mais avait été repoussé au premier semestre 2014, principalement pour des corrections de sécurité mais surtout pour finaliser le “projet lambda”.

Java 8, ou plus formellement “JSR-337”, est donc livré aujourd’hui après 2 ans de développement.

Comme la version 5 en son temps, avec les énumérations, les boucles, les generics, etc; cette version va très certainement marquer les esprits des développeurs par les nouveautés apportées au langage.

Lire la suite

On aime, on partage #28

 

Bienvenue dans la série « On aime, on partage » d’Objet Direct !
Chaque semaine retrouvez les meilleurs articles du web issus de notre veille technologique.

 

 

Java web

How hard is it to start a web server?

Java 8 apporte la possibilité de démarrer un serveur web “out of the box” à l’instar d’autres langages comme python. Cet article montre comment sur l’exemple de code story.

http://blog.javabien.net/2014/02/17/how-hard-is-it-to-start-a-web-server/

 

Le repo de la semaine !

THE livre maven enfin disponible sur Github, et ouvert à contributions.

https://github.com/ndeloof/apache-maven-book

 

Merci à notre contributeur de la semaine : Frédéric BOUQUET

Soirée du WSUG sur l’injection de dépendances

Mercredi 18 Décembre, la seconde soirée du WSUG (Wider Spring User Group) qui est un fork du Spring User Group (inactif) sur le thème de “L’injection de dépendance”  (en dehors de Spring et/ou en dehors de Java).
Ce User Group se revendique pluriel, indépendant, communautaire et technique.

Les sujets peuvent être proposés par les membres du groupe et porteront sur les technologies de l’écosystème Pivotal (telles que Spring Roo, Spring Boot …) dont font aussi partie Cloud Foundry et les solutions Big Data (Pivotal HD).

Lire la suite

Ecrire un client WebService avec CXF

Cet article, proposé par Henri Darmet, présente une méthode presque générique pour écrire la partie cliente d’un Web Service en utilisant CXF.

On peut légitimement se demander en quoi cet article est légitime, vu qu’il existe de multiples tutoriels proposant un exercice de ce genre. Certes, mais tous se concentrent sur les premiers pas pour newbies. Et aucun ne vous propose la démarche complète qui intègre la transmission de pièces jointes au format binaire (en utilisant MTOM) et la sécurisation via WS-Security. C’est donc d’un client « professionnel » qu’il est question ici.

Je laisse à d’autres (ou à un autre article) le soin d’expliquer comment implémenter le service lui-même. Il s’avère que ce second exercice est en général bien mieux maîtrisé et mieux documenté.

Première étape : écrire un client simple

La première idée, celle qui nous vient tout de suite à l’esprit est de faire générer ce client par Eclipse. Mauvaise idée : celle-ci se basera sur le WSDL de votre Web Service, et l’exploitera ensuite dynamiquement. Conséquence : des appels frénétiques pour lire et exploiter ce WSDL, d’où

–          une grande difficulté pour les tester,

–          des performances dégradées,

–          pas de souplesse d’emploi.

En particulier, il est très difficile de préciser dynamiquement, sans venir altérer le code généré, l’URL  permettant d’atteindre le Web Service. Si bien que lorsqu’on doit changer d’environnement, le Web Service lui-même (pour passer d’une machine de développement pour aller en recette puis en production), il faut modifier le WSDL et régénérer le client : absurde.

Seconde solution : utiliser l’API CXF et là tout devient facile, ou presque. A titre d’exemple, je propose ici un Web Service d’envoi de mail (pour une application qui, par exemple, permet de s’adresser au SMTP de l’entreprise afin d’envoyer un mail au nom de l’entreprise). L’intérêt de cet exemple sera, bien sûr, qu’on peut y ajouter des pièces jointes et qu’il faudra le sécuriser (afin que n’importe qui, sur internet ne puisse spammer au nom de votre entreprise).

Voici le premier jet de l’interface de notre service :

package com.objetdirect.mailer;

import javax.jws.WebService;

@WebService

public interface Mailer {

 void send(Mail mail);

}

L’objet Mail contient toutes les informations qui doivent être contenues dans le mail, à savoir : une adresse d’origine (from), une série de déstinataires (to), un sujet (topic) et un contenu (message). Je vous propose l’implémentation triviale suivante :

package com.objetdirect.mailer;

 

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlRootElement;

 

@XmlRootElement

@XmlAccessorType(XmlAccessType.FIELD)

publicclass Mail {

String from;

String to;

String topic;

String message;

public Mail(String from, String to, String topic, String message) {

super();

this.from = from;

this.to = to;

this.topic = topic;

this.message = message;

}

public String getFrom() {

return from;

}

public String getTo() {

return to;

}

public String getTopic() {

return topic;

}

public String getMessage() {

returnmessage;

}

}

Passons à ce qui est le vrai sujet de cet exercice, l’écriture du bout de code qui nous permet d’accéder à un client de ce service :

package com.objetdirect.mailer;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;

import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;

 

publicclass MailerClient {

 publicstatic Mailer getClient(String url) {

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

factory.getInInterceptors().add(new LoggingInInterceptor());

factory.getOutInterceptors().add(new LoggingOutInterceptor());

factory.setServiceClass(Mailer.class);

factory.setAddress(url);

Mailer client = (Mailer) factory.create();

return client;

}

}

Eh, oui, c’est tout. Pas besoin d’une phase de génération. Notez, qu’à part la mention de son interface (la classe d’interface elle-même), il n’y a aucune adhérence entre cette méthode et le code du service. Il est donc possible de réécrire cette méthode pour qu’elle soit entièrement générique. Je vous laisse le soin de tenter l’exercice, cela vous permettra de vous dégourdir les jambes dans l’utilisation des generics J.

La seule donnée passée en paramètre est l’URL du WebService qui est donc bien définie dynamiquement. Il devient alors possible (et facile) de changer d’environnement.

L’implémentation proposée ici incluse l’appel d’intercepteur de log afin de journaliser, à toute fins utiles, les appels et les réponses. On aurait pu, à la rigueur la simplifier donc de deux lignes. Obtenir un client nécessite donc un minimum de quatre lignes…

Pour l’appeler, c’est encore plus simple :

publicstaticvoid main(String[] argv) {

Mailer mailer = MailerClient.getClient(

« http://www.acme.com/ws/mailer »

mailer.send(new Mail(

« noanswer@acme.com »,

« bigboss@goyoo.com »,

« New Webservice »,

« The new Web Service is ready ! »));

}

Comme on peut le constater, l’aide d’éclipse – vu la complexité très, très relative de l’exercice – ne s’impose en aucune manière.

Dans le prochain article, nous verrons comment sécuriser l’accès avec WS-Security.