riduidel’s posterous

 
Filed under

test

 

Flex, c'est quand même moins bien

Pour mon nouveau boulot, je suis amené à faire du Flex. Je ne le prends pas trop mal, dans la mesure où ça me permet (en théorie) d'implémenter un point essentiel des méthodes pour rester un développeur "on the edge".
Là où c'est moins bien, c'est que tant qu'à faire, j'aurais préféré travailler sur un langage qui ne fasse pas semblant.
Prenez l'IDE, par exemple. La toute dernière version de Flash Builder est en fait un packaging d'Eclipse dédié aux développeurs Flash (comme peut l'être, je ne sais pas moi, Eclipse for C, Pulsar, ...). En un sens, c'est très bien, parce qu'en tant que développeur Java, je ne suis pas vraiment surpris. Sauf quand ils décident de me livrer sans mon consentement une version française. Ou que le seul refactoring disponible soit le renommage de fichiers (alors que faire des refactorings dans un langage dynamique, même si c'est plus difficile, c'est possible). Ou que les erreurs de compilation me font revenir quinze ans en arrière, avec des codes aabscons suivis de messages encore moins clairs (pour l'anecdote, il m'a fallu hier à peu près l'après-midi pour trouver qu'un test ne fonctionnait pas à cause d'un simple problème de déclaration de constructeur). Ou qu'une application mxml contenant les tests doive se trouver dans le dossier src (ce qui est super pratique pour séparer les tests et le code source de ma bibliothèque, tiens, imaginez comme maven est content).
Et si l'IDE infâme ne vous suffit pas, prenez les bibliothèques de test unitaire. En Java, je connais bien jUnit, et un peu TestNG. Elles sont plutôt documentées et facilement intégrées dans l'IDE. Bon, en Flex, il y a quoi ? flexunit ? funit ? asUnit ? bon, eh bien je vous mets au défi de trouver une doc claire et complète pour ces différentes bibliothèques; Attention, je ne parle pas d'un tutorial écrit pour faire comme tout le monde et présentant un exemple bidon même pas intégré à l'IDE, mais bien de l'exemple complet qui me permet à la fin de lancer mes tests dans l'IDE. Cherchez pas, vous ne trouverez rien. Parce que ces trucs sont codés à la va-vite et que leurs auteurs ne semblent pas se soucier de l'industrialsiation de ces tests unitaires.
Et pour finir avec l'industrialisation, parlons un peu des flexmojos. C'est une super-idée de vouloir intégrer la compilation Flex à maven pour montrer comme l'outil est extensible. Mais c'est aussi une terriblement moins bonne idée que de fournir une dépendance flexmojos-unittest-support qui contienne les trois bibliothèques sus-mentionnées (dont les classes de bases de test unitaire s'appellent toutes ... TestCase ... merci pour les problèmes d'import) sans jamais expliquer comment éviter cette dépendance (mis à part, quand on connait maven, en allanrt faire un tour dans le pom de cette dépendance pour trouver les dépendances initiales et leurs versions respectives).
Bref, Flex, c'est quand même vachement moins bien que Java. Et c'est là que je comprend les éternels regrets des vrais développeurs Java, qui voient Sun lancer des idées du bout du petit doigt et ne pas les soutenir (au hasard, JavaFX) alors qu'avec un bon soutien, cette techno a les moyens de botter cent fois les fesses à ce Flex, qui n'est rien d'autre qu'un javascript vaguement rabhillé.

Loading mentions Retweet
Filed under  //   flex   humeur   java   test  

Comments [0]

préconditions en Java

Quand on développe en Java et qu'on écrit des méthodes, on a souvent le cas de paramètres ayant des valeurs incorrectes (genre un paramètre nul).

Ce qu'on fait d'ahbitude, c'est une vérification simple :

if(toto==null) {

    toto = "toto";

}

C'est laid, hein ?

Et en plus, ça pollue le code.

En me baladant sur internet à la recherche de la solution à un problème compliqué de collection basée sur le hash contenant des éléments mutables, je suis tombé sur cet article : mutable entries in a collection qui m'a mené à celui-ci (beaucoup plus intéressant) : RuntimeExceptions and Gurus failing to meditate bon, j'aime bien la GuruFailedToMeditateException, mais ce que j'aime surtout beaucoup, c'est les vérifications de préconditions avec la classe Preconditions. J'aime même tellement ça que je me demande comment je pourrais inclure ça dans mon projet à grands coups d'annotations (pour que ça marche bien et que ça puisse aussi générer de la doc).

Du coup, j'ai commencé à re-jeter un coup d'oeil aux frameworks de programmation par contrat en Java.

  • modern-jass a l'air très bien
  • Je me demande si on ne peut pas bâtir quelque chose pour ça en utilisant jUnit et son désormais fameux assertThat.
  • Et cet article m'explique ce dont je me doutais déja : les assertions sont un premier pas déja satisfaisant, et hamcrest et FEST-assert sont de très bonnes solutions, grâce essentiellement à leurs interfaces "fluentes".

Bref, c'est un sujet assez intéressant, sur lequel je vais essayer de creuser un peu.

Loading mentions Retweet
Filed under  //   concepts   développement   java   préconditions   test  

Comments [0]

Tester l'utilisation de la mémoire

Dans majick-properties, je suspecte le code que j'ai écrit d'être potentiellement à l'origine de fuites de mémoire. Et ça, c'est plus qu'embêtant quand on fait une bibliothèque dont le but est de faciliter la vie.

Surtout que, traditionnellement, la chasse aux fuites mémoires en Java est compliquée : il faut un profiler (en Java, le meilleur rapport qualité/prix est obtenu avec le profiler de NetBeans), trouver le truc qui foire, le corriger, et espérer que ça tienne 


Heureusement, la communauté Java dispose maintenant de méthodes permettant de vérifier que ces fuites de mémoire ne reviennent pas. La première que j'ai trouvé utilise une librairie dont le nom seul est un hommage au bont goût : insane. Et la deuxième utilise jUnit pour parvenir au même résultat, ce qui fait que je vais pouvoir utiliser les concepts dans mes tests. Je me demande quand même s'il ne va pas falloir que je regarde insane de près pour améliorer ça, parce qu'en fait, cette deuxième solution ne semble pratique que quand on sait précisément ce qu'on cherche, alors que la première est plus efficace en terme d'exploration.

Tiens, au fait puisqu'on parle de mémoire en Java, il semble que cet article : understanding weak references, soit une mine d'infos sur les distinctions subtiles entre weak, soft et phantom references.

Loading mentions Retweet
Filed under  //   code   java   majick-properties   memory   test  

Comments [0]

sacrénom d'un bug !

C'est le genre de trucs qui m'énervent, ça.

J'ai voulu être sérieux, j'ai fait une tonne de tests unitaires, et sans même avoir de rapports de couverture de test dans maven, je suis déja certain d'avoir au moins 75 % du code testé.

Enfin, testé ... dans Eclipse.

Parce que dans Maven, c'est une autre histoire. J'ai une espèce de sale foutu bug qui fait que mon premier test unitaire Swing (qui utilise bien sûr FEST-Swing) ne s'arrête pas.

Ah, si mon fan était là ! Il me dirait bien sûr que c'est un sale problème d'utilisation de l'EDT. Ouais, enfin bon, quand je regarde le code de mon test, il n'y a pas grand chose qui me choque.

Et encore moins quand j'utilise les méthodes de FEST-Swing pour m'assurer que je fais tout dans l'EDT.

Bref, je vais être bon pour fouiller.

Ce que ça a de particulièrement agaçant, c'est que comme le test ne se termine pas, je n'arrive pas à faire de

mvn deploy

Et ça, ça m'agaçce avec une force !

Bah ! Je trouverai la solution demain.

Loading mentions Retweet
Filed under  //   build   java   majick-properties   maven   test  

Comments [2]

il m'avait prévenu, le bougre

Cette semaine, j'ai vécu une espèce de montagne russe un peu bizarre ...

En effet, Jeudi, j'ai découvert blueMarine, une tentative en java de copie d'Adobe Lightroom, je pense. En tout cas, c'est la proximité que montrent le site de blueMarine ainsi que les screenshots de Lightroom.

Bref, ça avait l'air prometteur.

Ce matin, n'écoutant que mon courage, je télécharge blueMarine (ouch, 30 Mo, j'y reviendrai ...), et je le lance.

Bon, c'est sans doute une bonne copie de Lightroom, mais qui souffre d'un gros problème : lorsqu'un logiciel se présente comme étant orienté workflow de traitement d'image, on s'attend à être largement guidé dans ses activités, un peu comme, par exemple, Eclipse guide le développeur Java dans ses activités grâce aux différentes perspectives. Là, rien de tout ça ! On a une fenêtre avec un bon paquet de panneaux différents, et dans tout ça, je n'ai pas su quoi faire. Et le pire, dans tout ça, c'est que blueMarine propose un support de l'IPTC digne d'iPhoto '06, que je viens de mettre à jour ...

Bref, ça relance (oui oui, une fois de plus) mon projet de me faire mon propre logiciel de gestion de phototèque avec les fonctions qui collent à ma méthode de travail.

N'empêche, un truc m'a perturbé.

Vous autres, mes lecteurs chéris, ne le savez peut-être pas (sauf évidement mon fan), mais je bosse dans une boîte qui édite des logiciels en java. Et franchement, nous, pour faire un équivalent de ce blueMarine, il ne nous faudrait pas 30 Mo, mais 4 ou 5 (à cause des images). Et cette réflexion est le signe de deux choses :

  1. D'abord, j'intègre complètement la philosophie de ma boîte qui est de dire que, pour un logiciel, la taille du téléchargement compte
  2. Ensuite, pour utiliser ce logiciel, un utilisateur sans JRE doit télécharger un truc chez Sun (avec le JDK6 update 10, ça va vite) et après se manger les 30 Mo supplémentaires dont je ne veux même pas connaître l'intérêt, mis à part peut-être montrer que l'auteur du logiciel connaît la plateforme Netbeans, ce qui n'est pas forcément une bonne chose, puisque ça lui a ôté l'envie de faire des choses propres tout seul.

Bon, bref, assez râlé, revenons à des solutions qui marchent, en l'occurence iPhoto '08. Cette mise à jour apporte une nouveauté graphique inutile : les événements et, surtout, surtout, l'export des champs IPTC. Et ça, ça rend encore une fois iPhoto indispensable à ma gestion de phototèque. grmbl.

Au moins, ça marche bien et simplement 

Loading mentions Retweet
Filed under  //   iptc   java   ma vie   photo   test  

Comments [0]