Off the record

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 7 novembre 2007

Extreme programming [republié/révisé]

cette n-ième nouvelle méthode de développement logiciel a le mérite d'apporter des réponses concrêtes à des problèmes récurrents sur les projets de taille moyenne et grande : l'intégration, le travail en groupe, les spécifications/expressions de besoins, la documentation...

Lire la suite

vendredi 11 mai 2007

Use dates with ant

Need to generate a jar file including the current date in your ant script?
Here :

<tstamp/> <!-- extract the system date to the ant environment -->
<jar destfile="${build}/${DSTAMP}-${TSTAMP}-myfile.zip" etc.


Hope that helps someone somewhere !

vendredi 9 février 2007

Spécifications...et MDA

Finalement, la frontière entre les specs fonctionnelles et techniques est souvent trop peu marquée, de même que la frontière entre les spécifications techniques et l'architecture... Voila quelques exemples tout bêtes qui m'en ont fait comprendre plus que les absconces définitions habituelles :

Les spécifications fonctionnelles (le plus facile) décrivent des comportements et aspects du systême:

  • authentification
  • navigation
  • contenu des vues

Les spécifications techniques décrivent des qualités du systême, par exemple :

  • scalabilité
  • performance
  • résistance aux pannes (exemple tolérance 99.9%)

On en vient à MDA : model driven architecture, qui est une nouvelle approche de la conception logicielle.
MDA tend à découpler au maximum la conception et l'architecture, et également à produire directement le code à partir du modèle.
La conception traite les spécifications fonctionnelles et l'architecture les specs techniques.
Ainsi, si l'on conçoit un modèle conceptuel implémentant les spécifications fonctionnelles, et que l'on a un traducteur modèle->architectureX qui va produire le code selon l'architecture X, on obtient les effets suivants :

  • chaque modification des spécifications implique une modification du modèle, et une nouvelle génération (automatique !) du systême.
  • Si finalement l'architecture X ne répond pas ou répond mal aux specs techniques, on change le traducteur et on prend modèle->architectureY, ce qui génère automatiquement une solution technique totalement diffèrente, mais implémentant exactement de la même manière les specs fonctionnelles !


C'est presque magique. Plus qu'à acheter les traducteurs...Voila le problème...Ils ne sont pas en rayon chez Monoprix ou Migros et en écrire un soi même, c'est comme pour les langues. Si on sait juste dire bonjour en chinois on fera un traducteur qui ne sait faire qu'un "hello world".
MDA reste une technologie extrêmement prometteuse, en particulier pour la création de maquettes. Lorsqu'on a construit un traducteur incluant un pan raisonnable d'une technologie, il est possible de construire une application avec des fonctionnalités basiques en quelques minutes.
Avec deux traducteurs, exemple Java EE et .Net, on pourra aller jusqu'à effectuer des comparatifs d'architecture.

Article sur wikipedia

vendredi 2 février 2007

Performance testing, load testing or stress testing?

Il est important de comprendre les différences entre ces trois types de testing. Performance, stress et charge. Selon le vocabulaire établi :

  • les tests de performance sont menés pour valider le fait que le systême va donner un temps de réponse correct à son ou ses utilisateurs dans les conditions d'utilisation normales définies. Par exemple, 400 utilisateurs effectuant des requêtes concurrentes, temps de réponse maximum 4s pour une requête donnée. Ces tests vont permettre de repérer les goulots d'étranglement à tous les niveaux et ainsi permettre de gagner en...performance.
  • le stress testing permet de valider que le systême va savoir réagir correctement en cas de disfonctionnement d'un des modules qui le constitue. L'état est-il sauvé avant clôture? L'état du systême est-il correctement restauré au redémarrage. Les cas de stress habituels sont par exemple :
    • chute du réseau / d'un ou plusieurs ports réseau
    • chute du serveur de base de données
    • forte charge en terme d'utilisateurs
  • Enfin, les tests de charge cherchent à détecter des bugs ou erreurs de conception qui n'apparaissent qu'en cas de charge réelle du systême. On recherche classiquement les fuites de mémoires...Ce type de test s'appelle aussi volume testing ou endurance testing.

Toute une batterie d'outils existe pour mener ces tests, simuler plusieurs milliers d'utilisateurs etc, je citerais le projet Apache Jmeter, parce que c'est écrit en Java et parce que c'est open source !

Mes sources d'inspiration sur ce sujet :

lundi 15 janvier 2007

Mock objects

Let's say you are a programmer.
Let's say you are aware of the traps a big IT project can fall into, and you decide to adopt a test driven approach.
On the next day, you find out that this huge (900 md) part of the code that is done by this other contractor will not be delivered until 2009, and of course you need this part to test your code...Treat yourself and build a mock object that will simulate the behaviour of the missing part of the code !

Wikipedia says you normally need this (these) mock object because this damn contractor code :

  • produces non-deterministic results like current time or current temperature
  • has states that are difficult to create or reproduce (e.g. a network error);
  • is slow (e.g. a complete database, which would have to be initialized before the test); (You don't run a test that is slo 100 times a day...especially if you have 100 tests like this one 8-O )
  • does not yet exist or may change behavior;
  • would have to include information and methods exclusively for testing purposes (and not for its actual task).

A proper conception of your mock object will be the following :
Upon a commonly agreed interface with the ... contractor :

  1. he builds his code
  2. you call the interface to interact with his object
  3. you buil a mockup implementing the interface, who will act in the same way as the other guy's code
  4. you deliver !

Ok, but a test class can do the job, why would i want a mockup?
Probably in the cases where you interact with some objects that are complex to mimic (you do not want to build them in messy test cases), when these objects are slow to build, or cost time to calculate (remember a big project usually involves a suite of hundreds of test, and the suite needs to be run fast...), when you need to test states like DB is down, but you do not want to stop the db to run your test ;-)

vendredi 3 novembre 2006

Débuter avec BEA weblogic application server

Comme je l'avais déja fait précedemment sur JBoss, je vais exposer ici les notions de bases pour commencer à développer avec BEA Weblogic application server, et plus particulièrement sur la partie "portail" (BEA Portal)...-> "Suite" ;-)

Lire la suite

vendredi 14 avril 2006

Apprendre Eclipse...

apprendre son IDE (environnement de développement intégré, par exemple Visual Studio ou Eclipse) est un investissement qui rapporte une productivité très appréciable...
Quelques raccourcis Eclipse :

  • Ctrl + O : mettre &agrave; jour les dépendances (les import)
  • Ctrl + espace : la complétion automatique : si vous devez n'en connaitre un, que ce soit celui-la
  • Ctrl + Shift + R : Recherche d'un fichier dans le workspace
  • Ctrl + O : affichage des attributs et methodes de la classe courante
  • Ctrl + O une deuxieme fois : ajoute &agrave; l'affichage les attributs et methodes hérités
  • Ctrl + T : affiche l'arborescence d'héritage de la classe courante
  • Alt + Shift + J : génére un template de javadoc pour une classe une méthode ou un attribut en fonction de la séléction
  • Ctrl + Shift + F : mise en forme du code (vous pouvez surligner une zone de code pour restreindre le formatage)
  • Ctrl + Shift + I : indentation du code (vous pouvez surligner une zone de code pour restreindre l'indentation)
  • Ctrl + D : efface la ligne courante
  • Alt + Shift + R : pour refactoriser le nom d'une fonction ou d'une variable
  • Ctrl + Shift + C : pour commenter / decommenter des lignes
  • Crtl + Shift + P : Pour se deplacer d'une accolade &agrave; l'autre
  • En tapant "sysout" puis ctrl+espace on obtient le pénible "System.out.println("");" !


Liste issue de developpez.com
Outils pour faciliter le déploiement de vos applications standalone sur les postes clients?

  • très simple, transforme un jar en éxecutable qui vérifie la présence d'une JVM avant de lancer le jar et affiche un message idoine si pas de jvm :JSmooth
  • Plus complexe, mais pour un déploiement encore plus aisé, par le web, vous avez seulement un lien &agrave; envoyer, mais un serveur &agrave; mettre en place au préalable :java web start