@crochefolle
CVS (Concurrent Versions System) est un système de contrôle de versions client-serveur permettant à plusieurs
personnes de travailler simultanément sur un même ensemble de fichiers. Les gros projets de développement (en
particulier les projets Open Source) s'appuient généralement sur ce type de système afin de permettre à un grand
nombre de développeurs de travailler sur un même projet. CVS permet, comme son nom l'indique, de gérer les
accès concurrents, c'est-à-dire qu'il est capable de détecter les conflits de version lorsque deux personnes
travaillent simultanément sur le même fichier.
Le fonctionnement de CVS s'appuie sur une base centralisée appelée « repository », hébergée sur un serveur,
contenant l'historique de l'ensemble des versions successives de chaque fichier. Le repository stocke les
différences entre les versions successives, les dates de mise à jour, le nom de l'auteur de la mise à jour et un
commentaire éventuel, ce qui permet un réel suivi des modifications, tout en optimisant l'espace de stockage
dédié au projet.
Chaque personne travaillant sur le projet possède un « répertoire de travail » (en anglais « working copy » ou
« sandbox », traduisez « bac à sable »), c'est-à-dire un répertoire contenant une copie de la base CVS
(repository).
CVS
4
@crochefolle
Subversion (en abrégé svn) est un système de gestion de versions, distribué sous licence Apache et BSD. Il a été
conçu pour remplacer CVS. Ses auteurs s'appuient volontairement sur les mêmes concepts (notamment sur le
principe du dépôt centralisé et unique) et considèrent que le modèle de CVS est le bon, et que seule son
implémentation est en cause. Le projet a été lancé en février 2000 par CollabNet, avec l'embauche par Jim Blandy
de Karl Fogel, qui travaillait déjà sur un nouveau gestionnaire de version.
Les apports de Subversion
Subversion a été écrit afin de combler certains manques de CVS. Voici les principaux apports :
Les commits, ou publications des modifications sont atomiques. Un serveur Subversion utilise de façon sous-
jacente une base de données capable de gérer les transactions atomiques (le plus souvent Berkeley DB) ;
Subversion permet le renommage et le déplacement de fichiers ou de répertoires sans en perdre
l'historique. ;
les métadonnées sont versionnées : on peut attacher des propriétés, comme les permissions, à un fichier,
par exemple.
Du point de vue du simple utilisateur, les principaux changements lors du passage à Subversion, sont :
Les numéros de révision sont désormais globaux (pour l'ensemble du dépôt) et non plus par fichier : chaque
patch a un numéro de révision unique, quels que soient les fichiers touchés. Il devient simple de se souvenir
d'une version particulière d'un projet, en ne retenant qu'un seul numéro ;
svn rename (ou svn move) permet de renommer (ou déplacer) un fichier ;
Les répertoires et méta-données sont versionnés.
Une des particularités de Subversion est qu'il ne fait aucune distinction entre un label, une branche et un
répertoire. C'est une simple convention de nommage pour ses utilisateurs. Il devient ainsi très facile de
comparer un label et une branche ou autre croisement.
Subversion
5
@crochefolle
Scmbug permet d’intégrer les outils de
gestion de configuration et de gestion
d’anomalie.
Il permet notamment de relier des outils
comme CVS/CVSNT, Subversion, et Git…
avec des outils comme Bugzilla, Mantis,
Request Tracker, Test Director.
http://freshmeat.net/projects/scmbug/
SCMbug : intégration avec
BugZilla/Mantis
6
@crochefolle
Maven est un outil « open source » de Apache Jakarta. Il permet de faciliter et d'automatiser la gestion et la
construction d'un projet java. Le site officiel est : http://maven.apache.org.
Le premier but de Maven est de permettre aux développeurs de connaitre rapidement l'état global du
développement du projet. C'est dans ce but que Maven :
Facilite le processus de construction;
Fournit un système de construction uniforme;
Fournit des informations utiles sur le projet;
Fournit clairement les grandes lignes directrices de développement;
Fournit les éléments nécessaires pour faire des tests complets;
Fournit une vision cohérente et globale du projet;
Permet d'ajouter de nouvelles fonctionnalités de façon transparente.
Il permet notamment :
d'automatiser la compilation, les tests unitaires et le déploiement des applications du projet (jar, war)
de gérer les dépendances des bibliothèques nécessaires au projet
de générer des documentations du projet : rapport de compilation et des tests unitaires, javadoc
de générer un site web complet du projet
Maven
7
@crochefolle
Le cycle de vie par défaut
8
Goal Description
validate Valide que le projet est syntaxiquement correct et que toutes les informations nécessaires sont présentes
generate-sources Génère le code source à inclure dans la compilation
process-sources Pré-traitement du code source, par exemple pour filtrage de valeurs ou instrumentation
generate-resources Génère les ressources à inclure dans l'artefact
process-resources Copie et traite les ressources dans le répertoire de destination avant empaquetage
compile Compile le code source
process-classes Post-traitement du bytecode compilé
generate-test-sources Génère le code source des tests
process-test-sources Pré-traitement des sourecs de test avant compilation
generate-test-resources Génère les les ressources pour le test
process-test-resources Copie et traite les ressources pour le test
test-compile Compile les sources de test
test Exécute les tests unitaires
package Empaquette le code compilé (et les ressources) pour distribution
pre-integration-test
Exécute des actions nécessaires à laréalisation des tests d'intégration (eg. instancier l'environnement
d'exécution)
integration-test Traite et déploie le paquet si nécessaire pour exécution des tests d'intégration
post-integration-test Exécute les actions requises après la findes tests d'intégration (eg. nettoyage)
verify Vérifie l'intégrité et la qualité du paquet
deploy Déploie le paquet final pour intégration ou production
@crochefolle
Utiliser Maven avec CVS/SVN et SCMBug ainsi qu’une politique de GC claire et définit permet de
se rapprocher d’un outil complet de GC.
Par ailleurs, la communauté Maven propose de nombreux plugins :
de suivi de la qualité :
Surefire
Cobertura
CheckStyle
PMD/CPD
Findbugs
Jdepend
Tableaux de bord
QALab
XRadar
Sonar
Maven Dashboard
SonarJ
Maven, un bon compromis et plus encore…
9
@crochefolle
Surefire permet d'avoir les rapports d'exécution de tests unitaires.
Il est compatible avec un certain nombre de frameworks de tests unitaires comme JUnit (3.8 et 4.x), TestNG.
Vous trouverez plus d'informations sur http://maven.apache.org/plugins/maven-surefire-plugin/
Surefire
10
@crochefolle
Cobertura permet de connaître la couverture du code par les tests unitaires.
Cette information est importante car, même avec un nombre élevé de test unitaire, on n'a pas forcement une
bonne couverture et certaines parties importantes peuvent se retrouver peu ou pas testées.
Vous trouverez plus d'informations sur http://cobertura.sourceforge.net/
Cobertura
11
@crochefolle
CheckStyle permet de contrôler le respect des conventions de codage et d'avoir quelques métriques.
Ce contrôle est fait avec 126 règles et cela va du plus simple comme la longueur d'une ligne à des choses plus compliquées
comme la complexité cyclomatique d'une classe.
Le plugin Maven met à disposition 4 fichiers de règles :
config/sun_checks.xml
Convention Sun Microsystems (par défaut),
config/maven_checks.xml
Convention de l'équipe Maven,
config/turbine_checks.xml
Convention du projet Apache Turbine,
config/avalon_checks.xml
Convention du projet Apache Avalon.
Ce projet n'existe plus.
De nombreux fichiers de règles peuvent se trouver sur Internet permettant d'être plus ou moins souple avec le standard de
codage.
Et si ces règles ne vous conviennent pas, vous pouvez créer les vôtres et/ou paramétrer celles qui existent déjà.
Vous trouverez plus d'informations sur http://checkstyle.sourceforge.net/
Et la description des règles sur http://checkstyle.sourceforge.net/availablechecks.html
CheckStyle
12
@crochefolle
Règle Définition
Basic JSF rules Règles pour JSF.
Basic JSP rules Règles pour JSP.
Basic Rules Règles basiques listant un certain nombre de bonnes pratiques.
Braces Rules Règles sur l'utilisation des parenthèses.
Clone Implementation Rules Règles sur l'utilisation de la méthode clone().
Code Size Rules Règles concernant la taille du code.
Controversial Rules Règles considérées controversées.
Coupling Rules Règles sur le couplage.
Design Rules Règles sur l'architecture.
Finalizer Rules Règles sur l'utilisation des finalizers.
Import Statement Rules Règles sur la partie "import" du code.
J2EE Rules Règles pour J2EE
JavaBean Rules Règles sur l'utilisation des JavaBeans.
JUnit Rules Règles sur l'utilisation de JUnit.
Jakarta Commons Logging Rules Règles pour les Commons Logging.
Java Logging Rules Règles pour l'utilisation des Logging.
Migration Rules Règles pour la migration d'un JDK à une autre version.
Naming Rules Règles sur la nomenclature des objets/packages/...
Optimization Rules Règles pour la performance du code.
Strict Exception Rules Règles sur l'utilisation des Exceptions.
String and StringBuffer Rules Règles sur l'utilisation de String et StringBuffer.
Security Code Guidelines Règles sur la sécurité http://java.sun.com/security/seccodeguide.html#gcg
Unused Code Rules Règles pour la détection du code mort.
PMD/CPD
13
PMD va analyser le code afin de trouver des problèmes potentiels tel que :
•Expressions trop compliquées,
•Problèmes de sécurité,
•Problèmes de couplage entre objet/package,
•Bugs possibles,
•Code mort,
•Code non optimal,
•...
CPD va analyser le code
afin de trouver les
morceaux de code
dupliqué.
Vous trouverez plus
d'informations sur
http://pmd.sourceforge.n
et/
@crochefolle
Findbugs va trouver les bugs potentiels en analysant le bytecode Java. Pour cela il s'appuie sur une notion de
'bug patterns'.
Ces bugs sont classés en plusieurs catégories :
Correctness
Regroupe les bugs généraux. Par exemple les boucles infinies, mauvaises utilisations de equals(), ...
Bad practice
Regroupe les mauvaises pratiques. Par exemple les problèmes d'Exception, de ressources non fermées,
mauvaises utilisations de comparaison de chaîne de caractères, ...
Performance
Regroupe les problèmes de performance. Par exemple la création d'objets inutiles.
Multithreaded correctness
Regroupe les problèmes liés au code multithread.
Internationalization
Regroupe les problèmes liés à l'internationalisation d'une application.
Malicious code vulnerability
Regroupe les problèmes de vulnérabilité. Par exemple du code qui pourrait être détourné de son utilisation,
..
Security
Regroupe les problèmes de sécurité. Par exemple les problèmes liés au protocole http, les SQL injections,
...
Dodgy
Regroupe le "smell code". Par exemple les comparaisons redondantes avec null, variables non utilisées, ...
Il existe un autre paquet de règles.
On peut le trouver au format jar sur http://fb-contrib.sourceforge.net/
Vous trouverez plus d'informations sur http://findbugs.sourceforge.net/factSheet.html
Findbugs
15
@crochefolle
JDepend analyse le code pour en calculer des métriques (l'extensibilité, la réutilisabilité et la maintenabilité des
sources) sur la qualité du design pour les packages du projet.
Ces métriques sont :
Nombre de classes et d'interfaces (TC = CC + AC)
Le nombre de classes concrètes et abstraites (incluant les interfaces) dans un package est un indicateur de l'extensibilité d'un package.
-> Plus ce nombre est important, plus les entités qu'elles implémentent peuvent être étendues indépendamment les unes des autres.
Couplage par dépendance ascendante (Ca ou Afferent Coupling)
Le nombre de packages tiers utilisant un package donné est un indicateur de la responsabilité d'un package. Cela permet de mettre en évidence qu'un package
est au centre de l'application ou une mauvaise gestion des packages.
-> Ce nombre doit être le plus petit possible.
Couplage par dépendance descendante (Ce ou Efferent Coupling)
Le nombre de packages tiers utilisés par un package donné est un indicateur d'indépendance du code.
-> Ce nombre doit être le plus petit possible.
Degré d'abstraction (A ou Abstractness)
Le degré d'abstraction correspond au pourcentage entre le nombre de classes abstraites (plus les interfaces) dans le package analysé par rapport au nombre total
de classes de ce package.
Cette métrique peut varier de 0 à 1. 0 indique qu'un package est concret, tandis que 1 indique un package abstrait.
-> Ce nombre doit être proche d'une des 2 bornes.
Instabilité (I ou Instability)
C'est le ratio I = Ce / (Ce + Ca). Cette métrique est un indicateur de stabilité par rapport à la mise jour d'autres packages.
Cette métrique peut varier de 0 à 1. 0 indique qu'un package est complètement stable, tandis que 1 indique un package complètement instable.
Distance normale (D ou Distance from the main sequence)
Cette métrique correspond à la distance de la droite perpendiculaire à la droite idéale A+I=1. C'est un indicateur d'équilibre d'un package entre l'abstraction et
l'instabilité.
Les packages supposés idéaux sont soit complètement abstraits et stables (A=0,I=1) soit complètement concrets et instables(A=0,I=1).
-> Ce nombre doit être proche de 0.
Volatility (V)
La volatilité d'un package est sa tendance à évoluer au fil du temps.
-> 0 indique que le package est le centre de l'application.
Vous trouverez plus d'informations sur http://clarkware.com/software/JDepend.html
JDepend
17
@crochefolle
A moins de vouloir décourager toute l'équipe (y compris vous), n'activez pas toutes les règles d'un coup.
Il vaut mieux choisir certaines règles à activer au début. Une fois ces règles validées (ou du moins un certain
pourcentage atteint), ajouter d'autres règles et ainsi de suite.
Je préconise d'activer les règles sur les Exceptions et de la gestion des traces (log) dès le début.
Pour sélectionner les règles à utiliser pour chaque plugin, voir les parties en gras dans la partie précédente afin de
bien configurer chaque plugin.
Sur http://wiki.netbeans.org/ActionPMD vous trouverez un exemple de règles que le projet Netbeans exclu lors de
son utilisation de PMD.
Ces plugins Maven2 existent aussi au format plugin pour la majorité des IDE.
Il est utile d'installer ces plugins sur chaque IDE des postes de développement.
Cela a plusieurs avantages :
Intégration aux IDE et donc une utilisation plus simple,
Responsabilisation des développeurs aux problèmes de qualité,
Les développeurs vérifient leur code avant de faire un commit.
Attention à ne pas activer toutes les
règles
19
@crochefolle
Une fois Maven2 mis en place avec tout ses plugins, il
est judicieux d'avoir un tableau de bord regroupant le
maximum d'informations utiles en une seule page.
Pour cela il existe un certain nombre de plugins Maven2
qui permettent de créer ce tableau de bord.
QALab
Outil intéressant mais semble ne plus être maintenu.
Pour plus d'informations :
http://qalab.sourceforge.net/index.html
XRadar
Outil intéressant mais on attend qu'il prenne en charge
FindBugs.
Pour plus d'informations : http://xradar.sourceforge.net/
Sonar
Semble prometteur, vivement que la version 1.5 sorte
afin qu'il prenne en compte plus de métriques et le
support de plugins externes comme FindBugs,
JDepend.
Site officiel : http://sonar.codehaus.org/
Pour plus d'informations :
http://linsolas.developpez.com/articles/java/qualite/sonar
/
Maven Dashboard
Maven Dashboard permet de centraliser un certain
nombre de rapports crées par Maven. De plus il y a une
option pour historiser les statistiques.
Pour plus d'informations :
http://mojo.codehaus.org/dashboard-maven-plugin/
SonarJ
Permet d'avoir un contrôle plus poussé sur l'architecture
du projet en définissant les droits de communication
entre chaque couche.
Pour plus d'informations :
http://www.hello2morrow.com/products/sonarj
Les tableaux de bord
20
@crochefolle
Cruise Control
CruiseControl est un projet open-source offrant de multiples fonctionnalités pour l’intégration, que ce soit pour des développements Java ou
.Net. Il est courant sur un projet d’être plusieurs développeurs avec des tâches de développement réparties. Dans le cycle de développement, la
partie cruciale est l’intégration. C’est l’intégration qui permet de révéler les éventuelles erreurs et incompatibilités des différentes parties réalisées
par chaque développeur de l’équipe.
CruiseControl permet d’automatiser cette phase d’intégration selon la succession des tâches suivantes :
Récupération des fichiers sur le SCM (Source Code Management)
Compilation du code source
Création de l’archive de l’application (Ear, Jar, War, …)
Déploiement de l’archive
Exécution d’une suite de tests (Junit)
Notification du résultat (Mail, rss, …)
Continuum
Continuum est un serveur d’intégration continue dédié
aux projets basés sur Java.
Il supporte une large gamme de projets tels que :
Maven 1
Maven 2
Ant
Shell Scripts
Hudson
Hudson fait partie des petits derniers dans cette gamme d’outils et semble assez prometteur.
C’est un outil gratuit (dans les javatools de java.net). Il est très simple à installer, en version standalone ou comme webapp dans un container tel
que tomcat (ce qui est le cas d’un grand nombre d’outils d’intégration continue).
L’interface web est simple à utiliser et assez intuitive, la prise en main est très rapide. On peut réellement configurer l’intégration continue d’un
projet existant en quelques minutes sans connaître l’outil.
Toutes les tâches d’administration ou de configuration se font via la console web. Il n’est pas nécessaire d’accéder à la machine serveur
d’intégration pour rajouter un projet ou changer une configuration.
Ce point différentie assez Hudson de Cruise Control et facilite l’utilisation de Hudson de façon transverse à plusieurs projets (on gère une seule
machine serveur mutualisée). Avec Cruise control, on a plutôt tendance à avoir une installation de Cruise Control pour chaque projet et les
membres d’équipe accèdent directement à leur machine d’intégration continue.
Intégration continue
22
@crochefolle
La gestion de tests est une activité à part entière qui requiert un cadre organisationnel et l'utilisation d'outils
spécifiques. Pour encadrer cette phase de test, il existe principalement sur le marché l’offre commerciale
TestDirector de Mercury Interactive mais, peu de solutions libres. Salomé-TMF vise donc à combler ce vide.
Salomé-TMF est un outil de gestion de tests simple et puissant dont l'utilisation offre des gains immédiats en
temps et en qualité grâce à la création d'un unique référentiel de tests pour le projet et à l'automatisation de
l'exécution des tests.
Salomé-TMF : Référentiel de test
24
Une solution "OpenSource" alternative à
QualityCenter & TestDirector
Réduction des coûts de licence
Multi-OS (100% Pure Java)
Une solution simplifié
Gestion du plan de test, des campagnes
(simplifiée par rapport à QC)
Gestion des exigences/anomalies
intégrées
Production de documents (HTML, PDF,
…)
Une solution ouverte
Intégration avec des plates-formes/outils
existants :
Mantis, Codex, Gforge, …
Import/Export XML : format ouvert
Import/Export vers QC (8&9)
Architecture à plug-ins
Une solution adaptée à l’automatisation des
tests
IHM Web (Selenium) , …
Test scripté Java (Beanshell)
API ouverte (remote Ant, ligne de
commande, …)
@crochefolle
Import/export, production de documents
Fondée sur XML + XSL, permet d’échanger les données entre
projets, et de produire des documents (Plan de tests, cahier
d’exigences, résultats de campagne) aux formats HTML et PDF
Principaux Plug-ins : DocXML
27
@crochefolle
Gestion des anomalies
Fondée sur Mantis :
Permet de centraliser les anomalies de développement, de qualification
et de mise en production (via l’accès à Mantis) et de gérer leur cycle en
relation avec les tests et les exigences
Principaux Plug-ins : Mantis
28
@crochefolle
Gestion des exigences
Permet de gérer et de suivre la couverture (tests) et la satisfaction (anomalies)
des exigences
Principaux Plug-ins : Requirements
29
@crochefolle
Orange HomeScreen (Couplage Java CLDC)
Tests de conformité du « HomeScreen » sur les différents device mobile
d’Orange
Orange Partner (Couplage Selenium)
Tests fonctionnels : scénarios d'utilisation du service
authentification, navigation, upload, …
Tests d’intégration : scénarios de conformité de bout-en-bout
Interface web <-> Outils de vérification des midlets <-> base de données <->
interface web
Next Service Broker (Couplage CruiseControl/RemoteAnt)
Référencement des tests unitaires, lien exigences, automatisation des recettes de
livraison
Success stories
30
@crochefolle
TestLink est une solution web open source qui permet de gérer les tests et leurs exécutions sous
la licence GPL (gratuit !). Cette solution vous permet de créer et gérer vos cas de test et de les
organiser en plans de tests.
Ces plans de tests permettent d‘exécuter les cas de test et de suivre dynamiquement les
résultats, de générer des rapports, de suivre les "requirements", de créer des priorités et même
d'assigner les tests à un testeur.
La solution est basé sur PHP, MySQL, et de nombreux outils open source. Il existe même une
possibilité pour une intégration dans Bugzilla ou Mantis.
TestLink est disponible en plusieurs langues et peut être configurer pour une langue différente
par utilisateur. Nos tests on été effectué en anglais car la version française n'a pas l'air
entièrement traduite pour l'instant.
L'installation est facile, car il suffit de copier les fichiers sur un serveur web correctement
configuré, un script d'installation fait le boulot pour vous.
Ce projet est maintenu par une communauté de testeurs. Et de nombreux développeurs ont des
responsabilités dans des services de QA. Et ca se voit, ce produit est conçu avec bon sens et est
prometteur.
TestLink peut donc convenir pour les équipes qui aurait besoin d'un outil peu couteux et facile à
implémenter.
Une alternative plus moderne voit le
jour : TestLink
31
@crochefolle
Imaginé et développé en Java par Kent Beck et Erich Gamma, JUnit désigne un framework de
rédaction et d'exécutions de tests unitaires. Rappelons que ces deux personnes sont
respectivement auteurs des ouvrages "SmallTalk Best Pratice Patterns" et "Design Patterns :
Catalogue de modèles de conception réutilisables", le fameux ouvrage du Gang Of Four.
Le but principal de JUnit est d'offrir au développeur un environnement de développement simple,
le plus familier possible, et ne nécessitant qu'un travail minimal pour rédiger de nouveaux tests.
Leur écriture ne représente pas le seul intérêt d'un tel framework. Une fois ces tests mis en place,
il est très important de pouvoir les exécuter et d'en vérifier les résultats très rapidement. Comme
nous l'avons dit, savoir qu'un test marche à un instant donné n'est pas suffisant. Nous devons
pouvoir l'exécuter plus tard.
L'idée principale de JUnit est de représenter chaque test par un objet à part. Un test correspond
souvent à une classe de votre programme. En d'autres termes, un test pourra être composé de
plusieurs tests unitaires dont le rôle sera de valider les différentes méthodes de vos classes. La
question primordiale est donc de savoir comment JUnit représente un test.
JUnit
34
@crochefolle
Ce Schéma présente le coeur de l'architecture du framework. Nous pouvons remarquer que la plus fine granularité
correspond à un test, c'est-à-dire à un agrégat de tests unitaires. L'interface Test matérialise ceci. Néanmoins, le
développeur n'aura jamais à s'en servir mais devra s'intéresser aux classes TestCase et TestSuite. La première désigne
une concrétisation de nos tests tandis que la seconde permet de les composer.
Nous pourrons donc créer une arborescence de tests pour représenter toute l'application. Cette architecture propose
quelques autres points intéressants sur lesquels nous nous pencherons plus tard. Bien qu'incomplet, nous ne voyons par
exemple aucune indication sur l'exécution automatique des tests, ce schéma présente la plus grande partie des
fonctionnalités de JUnit que vous serez amenés à employer dans votre travail. Nous constatons ici que la caractéristique
première des frameworks est respectés : le résultat doit être simple mais subvenir aux besoins vitaux de l'utilisateur.
JUnit
35
@crochefolle
Outil libre(licence MIT, il s’agit d’une licence simpliste très courte de
quelques lignes)
Dernière version 1.6.2 du 26/03/2006
projet démarré en 2000, 2 développeurs actifs ?
En fait le site sourceforge ne montre aucune activité au niveau du CVS.
Site web en anglais : http://httpunit.sourceforge.net/
Il s’agit d’une API de simulation d’un navigateur web pour un programme
Java. Il est le projet le plus ancien. Il travaille plutôt au niveau des requêtes
et des réponses http.
Le site manque de documentation sur le projet. Le forum est peu actif. La
dernière version commence à dater.
HttpUnit
36
@crochefolle
Outil libre(licence de type Apache)
Dernière version 1.12 du 10/08/2007
projet démarré en 2002, 8 développeurs actifs.
Site web en anglais : http://htmlunit.sourceforge.net/
Autres sites
Forum en anglais : http://www.nabble.com/HtmlUnit-f2597.html
Blog en anglais : http://mguillem.wordpress.com/
http://htmlunit.sourceforge.net/cgi-bin/browserVersion
script cgi pour créer des browseVersion dans htmlUnit. Instruction permettant de simuler un navigateur donné.
site de la société à l’origine de l’outil : http://www.gargoylesoftware.com
HtmlUnit est selon les explications du site officiel « un navigateur pour les programmes java ». Ce n’est pas au
départ un outil de tests, mais un ensemble API de « bas niveau » de simulation des navigateurs web. On peut
imaginer de nombreuses utilisations. Utilisé avec le Framework de test java JUnit, il devient un outil de test
unitaire côtés présentation.
HtmlUnit a un support correct du JavaScript (dépendant de Rhino). Cependant le support n’est pas total pour les
utilisations avancées (AJAX, GWT et librairie prototype), même si certaines simulations sont possibles.
HtmlUnit est utilisé par des outils de tests pour simuler les navigateurs web : JWebUnit, WebTest.
Le site du projet montre la qualité du développement : avec des métriques de code (JDepend Checkstyle), des
tests unitaires. L’historique des versions est précise et indique clairement les modifications. Par contre la
documentation manque un peu, il existe un des exemples simples mais il manque une documentation ou tutoriel
complet.
Les statistiques de téléchargement sont relativement faibles (4702 téléchargements du binaire sur 5 mois).
HtmlUnit
37
@crochefolle
HtmlUnit et HttpUnit sont assez similaires au niveau de l’objectif mais ont des
implémentations différentes. HtmlUnit travaille plus au niveau de la page Html (classe
HtmlPage) tandis que HttpUnit se place plus au niveau de la requête http (classe
WebResponse).
Une classe correspondant à la page Html n’existe pas dans le cas HttpUnit.
A priori HtmlUnit est donc plus proche du comportement d’un navigateur web.
Par contre, il est moins à l’aise avec des documents html mal écrits.
Autre point assez secondaire, pour gérer les collections d’objets HttpUnit retourne
souvent des tableaux d’objets tandis que HtmlUnit retourne des listes. La seconde
solution est préférable, plus propre même si en java il s’agit de listes d’objets et il faut
connaître précisément le type d’objet utilisé.
HttpUnit vs HtmlUnit
38
@crochefolle
Outil libre (licence GPL)
Dernière version 1.4.1 du 05/05/2007
projet démarré en 2002, 1 développeur actif.
site web http://jwebunit.sourceforge.net/
JWebUnit est un outil de tests unitaires pour les applications web, côtés présentation. C’est une extension de
JUnit.
Il s’agit d’une approche différente du htmlUnit plus proche d’un utilisateur web avec une API de plus haut niveau.
L’exemple du test du site de Google montre que le code avec JWebUnit est deux fois plus concis qu’avec
HtmlUnit.
L’architecture interne de JWebUnit montre que cet outil dépend HtmlUnit et de JUnit. JWebUnit utilise la possibilité
« naturelle » d’extension de JUnit. Il étend la classe TestCase en fournissant une classe WebTestCase. JWebUnit
fournit de nombreuses assertions supplémentaires adaptées au besoin des tests des applications web.
JWebUnit version stable (1.*) s’appuie sur HtmlUnit (version 1.11). Potentiellement, JWebUnit pourrait utiliser
d’autres outils qu’HtmlUnit. C’est l’objectif de la version 2 de JWebUnit en cours de développement avec projet
d’utilisation des outils HttpUnit, HtmlUnit Jacobie et Selenium RC (http://jwebunit.sourceforge.net/2.x/index.html).
Pour l’instant, seule l’utilisation de selenium et de htmlUnit est possible. L’objectif de selenium est la possibilité
d’exécuter le test directement dans un navigateur web.
jWebUnit
39
@crochefolle
ABBOT est un robot de test de GUI Java qui peut faire
du recording et playback d’événements, aussi bien pour des tests unitaires que
fonctionnels.
Points Forts :
Scripts simples à écrire et à mettre en œuvre.
Outils performant et complet pour tester les interfaces graphiques. Il prend en compte les saisies claviers, les
déplacements souris, les clics droits et gauches…
Rapport des tests avec JUnit.
Possibilité de créer des scripts par le recording, avec le Framework Costello.
Enregistrement des scripts sous le format XML.
Playback des scripts possible.
Points Faibles
Documentation difficile à trouver sur Internet (sources principalement en anglais).
Savoir utiliser JUnit (ABBOT en est une extension).
Il faut placer les .jar de test dans un dossier spécifique (pas de possibilité d’aller chercher la classe dans un
autre dossier).
Documentation d’utilisation succincte.
Performance sur des gros projets ?
Abbot : Outil de tests fonctionnels
libre pour le Web
41
@crochefolle
Selenium est constitué d’une suite d’outils destinée à automatiser des tests d’application web exclusivement (Internet,
Extranet, intranet).
Selenium ne permet en effet de tester que les applications accessibles depuis un navigateur, sans prise en compte des
clients riches (Ajax, ExtJS, GWT…).
Ces outils sont tous des logiciels développés par la communauté Open Source. Loin des tarifs exercés par les différents
éditeurs de ce genre de solution, Selenium est proposé gratuitement puisque libre et dispose de mises à jour régulières
mises en ligne sur le site web de la communauté grâce à une participation active autour de cet outil. Le premier outil
proposé fut Selenium Remote Control en mars 2006.
Il en découla d’autres outils venant compléter l’offre, notamment Selenium IDE en juin 2008, Selenium GRID, Selenium
Core, CubicTest. La communauté s’étant élargie tout au long de ces années, ces outils disposent aujourd’hui d’un support
adéquat grâce à l’élaboration de documentation diffusée sur le site, mais aussi grâce aux nombreux forums de discussions
traitant sur les divers problèmes rencontrés par les utilisateurs. Les débuts sont donc fortement facilités pour appréhender
au mieux ces outils.
Selenium s’exécute sur tous systèmes d’exploitation mais certaines fonctionnalités de l’offre se limitent à Firefox. Ces outils
permettent de travailler sur les langages les plus répandus, tels que C#, JAVA, Perl, PHP, Python, Ruby. Pour des tests
fonctionnels, la suite propose les outils suivants :
Selenium IDE
Selenium RC
Selenium Grid
CubicTest
Selenium : Outil de tests
fonctionnels libre pour le Web
42
@crochefolle
Cet outil est la base de la suite.
Il se présente sous forme d’extension
à installer sous Firefox et permet
l’enregistrement des scenarii de tests
d’applications web à partir de ce
navigateur ainsi que l’exécution de
ces tests.
C’est un environnement de
développement qui permet
d’enregistrer son test, de le rejouer
pour vérification et enfin de l’exporter
en le générant sous différents
langages.
Ainsi, ce code généré peut s’exécuter
sous Selenium RC, permettant alors
de mettre par exemple en place des
conditions.
Attention, toute modification manuelle
du code entraîne l’impossibilité de
réutiliser l’outil Selenium IDE par la
suite.
Selenium IDE
43
01/09/2018
@crochefolle
Selenium RC :
Selenium RC se comporte comme un serveur qui permet de contrôler le
navigateur web (IE7, Firefox, Safari, Opéra…) en local ou sur un autre ordinateur.
Pour cela, Il exécute le code généré au préalable par Selenium IDE.
Selenium Grid :
Selenium Grid permet de lancer plusieurs instances de Selenium RC afin
d’exécuter les tests sur différents systèmes d’exploitation et différents
navigateurs.
Selenium RC & Selenium GRID
44
@crochefolle
Cet outil intègre les mêmes fonctions que Selenium IDE mais se détache de Firefox et opère sous Eclipse. De
plus, son principal avantage est de proposer une vision graphique sous Eclipse des tests enregistrés afin d’en
avoir une meilleure visibilité. Il permet ainsi de rester sous un même IDE, Eclipse en l'occurrence, tout au long de
l’élaboration d’un test.
CubicTest
45
@crochefolle
Points Forts :
Simplicité pour l’enregistrement de test
Nombreux langages supportés
Gratuité
Points Faibles :
Edition du code final difficile (si le test intègre des conditions)
Utilisation d’un autre IDE souvent essentiel (ex : Eclipse)
Multiplicité des outils : obligation de faire un choix entre la
simplicité et la puissance.
Points forts et Points faibles
46
@crochefolle
OpenSTA est une application distribuée, basée autour de CORBA. Ce logiciel fût à l’origine développé par
l’éditeur Cyrano pour être commercialisé.
Cet outil permet de réaliser des tests de charge avec des scripts HTTP/S et de mesurer leurs performances. Mais
étant un logiciel libre on peut supposer qu’il permet bien plus grâce à la communauté qui s’est formée autour de
ce logiciel.
Il a été développé en C++ sous windows 2000 et NT4. Le but initial était de faire d’OpenSTA une plate forme
totalement indépendante avec un code de base, mais ce n’était pas une bonne idée à cause de l’évolution des
langages. La solution aurait peut être été de développer un code inter opérable pour arriver à cette indépendance
recherchée.
Objectifs
OpenSTA met à rude épreuve l'infrastructure d'un site en simulant des centaines d'utilisateurs virtuels, il permet
ensuite de recueillir des mesures de performance et des analyses fines du système testé.
L'application offre ainsi aux équipes informatiques les moyens d'étudier et d'anticiper le comportement de leur site
face à des montées en charge aussi subites qu'espérées.
Il permet de définir des scénarios sous forme de scripts simulant le parcours d’un utilisateur sur le site. Plusieurs
scénarios différents peuvent être exécutés simultanément et chacun d’eux plusieurs fois. Ainsi en définissant
quelques scénarios pertinemment choisis, il est possible de simuler une utilisation de l’application proche de la
réalité.
OpenSTA
48
@crochefolle
CLIF est un canevas logiciel à base de composants pour l'injection de charge et la mesure de performance
ouvert, adaptable et extensible :
systèmes sous test variés (protocoles, sondes...)
modes de définition des scénarios de charge
interfaces utilisateurs et intégrations diverses (Eclipse, Java/Swing, ligne de commande...)
multi-système d'exploitation (basé sur Java)
logiciel libre du consortium OW2 (ex ObjectWeb)
grande puissance de charge
injection de charge répartie
jusqu'à plusieurs millions d'utilisateurs virtuels
Lutèce d'Or 2007 du meilleur projet libre réalisé par
un grand groupe
Sondes
Sondes système disponibles pour Linux, Windows et MacOSX:
cpu / utilisation des processeurs
memory / utilisation mémoire et swap
network / réception, émission
disk / lectures, écritures disques
Sondes JVM pour suivre l'utilisation de la mémoire et le
Garbage Collector des machines virtuelles Java
Cadre pour définir ses propres sondes
sondes SNMP, JMX, ...
CLIF
49
@crochefolle
Bugzilla est une application de suivi des bogues. De telles applications permettent à des individus
ou à des groupes de développeurs de suivre les bogues en cours et les demandes d'amélioration
du logiciel. Ecrit en langage Perl, Bugzilla est maintenant le standard de facto en terme de
système de suivi des bogues et sert de référence aux autres applications. De plus, Bugzilla est
utilisé par beaucoup d'entreprises pour suivre le développement en interne de leurs logiciels.
Bugzilla offre de nombreuses fonctionnalités avancées, parmis lesquelles :
Schéma de sécurité granulaire intégré par produit
Dépendances entre les incidents et graphique de dépendance
Production avancée de rapports
Structure de données robuste et stable
Nombreuses possibilités de configuration
Protocole très évolué et longuement testé de résolution de bogues
Interfaces programmatiques via e-mail, XML, console, et HTTP
Possibilité d'interfacer Bugzilla avec des outils automatisés de gestion des logiciels, tels que
Perforce et CVS (via l'interface e-mail et des scripts de checkin/checkout)
Bugzilla
51
@crochefolle
Mantis est un logiciel de sécurité d'application Web (bug tracking system) écrit en PHP. Il stocke tous les bugs trouvés dans
une base de données.
Mantis est gratuit et open source sous licence GPL. Il peut utiliser MySQL, MS SQL Server et comme une base de données
PostgreSQL pour le stockage des bugs. Il peut être installé sur Windows, Linux, Mac OS et OS / 2. Last but not least,
comme il est basé sur le Web demande - il est évident qu'il a besoin de serveur web. Il peut être soit IIS ou Apache.
Mantis est très riche en fonctionnalités, et c'est ce qui le rend populaire auprès des entreprises. Il existe de nombreuses
fonctionnalités :
Pour les utilisateurs
Interface très simple et facile à utiliser
Prise en charge des flux RSS
Possibilité d'envoyer des messages aux utilisateurs
Possibilité d'intégrer le Chat
Capacité d'intégration avec le fameux code source repository (SVN & CVS)
Possibilité de télécharger des fichiers avec des bugs (ce qui est très utile en tant que journaliste peut télécharger des
copies d'écran du bug)
Possibilité de définir le rôle basé sur le projet.
Caractéristiques de Top Management
Capacité de rapports pour les gestionnaires et la haute gestion
Aptitude à l'exportation rapport au format CSV, Microsoft Excel et Microsoft Word
Caractéristiques de l'administrateur
Très facile à l'administration. Création d'un nouveau projet ou l'utilisateur est seulement quelques clics.
Donnez de la flexibilité de choisir OS, serveur Web et serveur de base de données
Capacité d'intégration avec l'authentification LDAP et Active directory
Pas d'installation au client final (il est basé sur le Web afin que le navigateur est nécessaire du côté client)
Facile à personnaliser selon les besoins des entreprises
Mantis BugTracker
52
@crochefolle
Scmbug permet d’intégrer les outils de
gestion de configuration et de gestion
d’anomalie.
Il permet notamment de relier des outils
comme CVS/CVSNT, Subversion, et Git…
avec des outils comme Bugzilla, Mantis,
Request Tracker, Test Director.
http://freshmeat.net/projects/scmbug/
SCMbug : intégration avec
CVS/SVN
53
@crochefolle
Alfresco est un projet de gestion de contenu d'entreprise (Donc aussi bien orienté Gestion Electronique de
Documents que Gestion de Contenu Web) créé en juin 2005 par John Newton, co-fondateur de Documentum et
John Powell, ancien cadre de Business Objects, apportant ainsi une grande expérience des besoins (15 ans
d'expertise dans le domaine).
La mission d’Alfresco est d’ouvrir le monde de la Gestion Documentaire à travers l’open source afin d’augmenter
les innovations grâce à la participation de la communauté et le libre accès au code source, et vise à fournir une
application complète à moindre coût, et avec plus d'agilité.
Présentation
Alfresco est un projet open-source, multi plateforme, utilisant des standards ouverts, et massivement basé
sur la technologie JEE.
Alfresco a développé une architecture moderne qui utilise les derniers outils open-source pour optimiser les
performances, et la Programmation Orienté Aspect (AOP) facilitant ainsi la modularité et l’adaptabilité de
l’application.
Alfresco implémente la norme JSR-168 pour le déploiement dans des portails open-source tel que JBOSS
Portal ou Liferay
Alfresco permet de gérer les documents électroniques au sein d’une entreprise et fournit des services de
recherche et de catégorisation du contenu.
Fonctionnalités
Alfresco fournit une interface d’accès aux données stockées sur des lecteurs réseaux partagés avec des
règles automatiques afin de simplifier la catégorisation et l’organisation, la recherche, et le partage pour
augmenter la conformité des process à travers un véritable contrôle documentaire.
Alfresco
55