Transparents

Transcription

Transparents
Tests et intégration continue
avec Eclipse
Julien Nauroy
Ingénieur Confirmé CDD INRIA – équipe TAO
Laboratoire de Recherche en Informatique
Université Paris Sud
23/05/2013
Quelques mots sur cette présentation
 Contenu à tiers-chemin entre :
 La présentation générale
 Le retour d’expérience
 Le tutoriel (pour référence)
 Plusieurs ambitions




Vous faire découvrir les tests et l’IC dans Eclipse
Vous encourager à les utiliser
Vous fournir un support réutilisable
Vous proposer un retour d’expérience
Tests et intégration continue avec Eclipse
2 / 56
Journée LoOPS de décembre 2012
 Tests de programme par Frédéric Voisin
 Jenkins (intégration continue) par Charles Loomis
 De belles promesses !
 Mais est-ce réellement utile ?
 Est-ce « rentable » quand on développe seul ?
 Quelle intégration dans Eclipse ?
Tests et intégration continue avec Eclipse
3 / 56
Le projet : un Framework/CMS web PHP
 ~ 7500 lignes, dont 4000 lignes « de code »
 Langage interprété
 Erreurs de syntaxe détectées à l’exécution du code
 Utilisé pour produire des sites web
 Producteur et utilisateur du Framework
 Outil de développement : Eclipse
 Originellement, Netbeans
Tests et intégration continue avec Eclipse
5 / 56
Plan
1. Mise en place du projet PHP dans Eclipse
2. Ecriture des tests
3. Automatisation des tests
4. Mise en place de l’intégration continue
5. Présentation de l’atelier « tests + IC »
Tests et intégration continue avec Eclipse
7 / 56
1. Mise en place du projet
Etapes de mise en place d’Eclipse
1. Installation de PDT pour Eclipse
2. Création du projet dans Eclipse
3. Mise en place du débogueur
4. Installation des modules PEAR
5. Installation de Makegood pour tests unitaires
6. Installation des autres outils (checkstyle…)
Tests et intégration continue avec Eclipse
9 / 56
Les outils Eclipse pour PHP : PDT
Tests et intégration continue avec Eclipse
10 / 56
Création d’un projet PHP
Tests et intégration continue avec Eclipse
11 / 56
Réglages du débogueur
Tests et intégration continue avec Eclipse
12 / 56
Débogueur en fonctionnement
Tests et intégration continue avec Eclipse
13 / 56
Installation de PEAR et PHPUnit
 PHP Extension and Application Repository
 Equivalent d’un gestionnaire de paquets PHP
 Plusieurs incantations obligatoires
14 / 56
Ajout des libs PEAR dans Eclipse
Tests et intégration continue avec Eclipse
15 / 56
Installation de Makegood pour PHPUnit
Tests et intégration continue avec Eclipse
16 / 56
Configuration de Makegood
Tests et intégration continue avec Eclipse
17 / 56
Installation d’autres outils
Tests et intégration continue avec Eclipse
18 / 56
Configuration des outils
Tests et intégration continue avec Eclipse
19 / 56
2. Ecriture des tests
Motivation
 Qu’est-ce qu’un test ?
 « Procédure de vérification partielle d’un système »
 De multiples méthodologies, de multiples objectifs
 Tests unitaires, d’intégration, de performance, de non
régression, de robustesse, de vulnérabilité…
 Ici je ne parlerai que des tests unitaires
 Plus d’infos => voir présentation de Frédéric Voisin
 Pourquoi tester ?
 Besoin de s’assurer de la qualité du programme
 L’impact d’une faille peut être important (web)
 Utilisateurs potentiellement nombreux et anonymes
Tests et intégration continue avec Eclipse
22 / 56
Cas d’un Framework web
 Tester un Framework web : pas toujours facile !
 Partie « Contrôleur » orientée vers l’extérieur
 Comment la tester ?
 Selon le Framework, la majorité du code peut être
dans le « contrôleur »
 pattern ActiveRecord
 On doit tester la partie serveur (PHP + SQL) mais
également la partie client (HTML + Javascript)
 De nombreuses fonctionnalités => de nombreux
tests à écrire
Tests et intégration continue avec Eclipse
23 / 56
Du code !
 Un exemple de test unitaire
Tests et intégration continue avec Eclipse
24 / 56
Faire des tests unitaires, c’est facile !
 Principe : chaque « unité » doit être testée
 Classes, méthodes…
 un standard de facto : xUnit (ici PHPUnit)
 Très grande facilité de prise en main
 Beaucoup de tutoriels disponibles
 xUnit fonctionne par assertions





assertTrue :
l’expression est vraie
assertFalse :
devinez !
assertEquals : deux expressions sont égales
assertCount : une liste a la taille voulue
assertContains : un élément est contenu dans la liste
Tests et intégration continue avec Eclipse
25 / 56
Bien tester, c’est difficile !
 Il faut penser à tout
 Ajout d’un utilisateur






Le nom de l’utilisateur est valide (nombre de caractères)
Le nom de l’utilisateur n’est pas déjà pris
L’email est valide
L’email n’est pas déjà pris
Pas de syntaxe SQL dans le nom (Injection SQL)
Pas de symboles HTML dans un champ (faille XSS)
Tests et intégration continue avec Eclipse
26 / 56
Bien tester, c’est difficile !
 Il n’y a pas que les tests unitaires
 Tout l’environnement devrait être testé (base
de données, affichage dans le navigateur,
intégration avec serveur web…)
 Environnement de dev. à mettre en place
 Cela prend beaucoup de temps !
Tests et intégration continue avec Eclipse
27 / 56
Résultat
 ~1000 lignes de code pour les tests unitaires
 Plusieurs jours de développement
 50 fonctions de test, 567 assertions
28 / 56
Malheureusement…
 Couplage tests + debugger = Code coverage
… Mais pas avec Eclipse + PDT 
29 / 56
Bilan
 Tests unitaires : un peu rébarbatif mais pratique






Force à penser aux cas d’erreur
Permet la non-régression
Plusieurs bugs trouvés en écrivant les tests
Grande aide lors du remaniement du programme
Particulièrement pratique pour du code interprété
Utile et rentable même quand on développe seul
 « Test Continu » : insupportable par défaut !
 Couverture de code : un bel atout
 Aide à cibler les tests
 Ne fonctionne pas dans Eclipse + PDT 
Tests et intégration continue avec Eclipse
30 / 56
3. Automatisation
Automatiser, kesako ?
 Permet d’exécuter des tâches prédéfinies
 Equivalent d’un fichier « make »
 Actions type « make all » et « make test »
 Aide à la mise en place de l’intégration continue
 Ici, Phing, équivalent PHP de Ant
 Installé via PEAR
Tests et intégration continue avec Eclipse
32 / 56
Automatiser les outils, pas si facile !
 Phing propose de configurer :






Tests unitaires
Couverture de code
Comptage des lignes de code
Détecteur de copier/coller
Calcul de complexité du code
…
 Du moment que les outils sont présents !
 PHPUnit, Xdebug, PHPLoc, PHPCPD, PHPMD, pear
etc…
Tests et intégration continue avec Eclipse
33 / 56
build.xml pour Phing
Tests et intégration continue avec Eclipse
34 / 56
Exécution des tests
Tests et intégration continue avec Eclipse
35 / 56
4. Intégration continue
Qu’est-ce que l’intégration continue ?
 « L'intégration continue est un ensemble de
pratiques utilisées en génie logiciel consistant à
vérifier à chaque modification de code
source que le résultat des modifications ne
produit pas de régression dans l'application
développée. »
Wikipedia
Tests et intégration continue avec Eclipse
37 / 56
L’outil d’IC Hudson, pour Stratuslab
Tests et intégration continue avec Eclipse
38 / 56
Comment ça marche ?
 Un gestionnaire de version héberge le programme
 CVS, SVN, Git, Hg…
 L’outil de gestion de version suit les changements
 Chaque jour, chaque minute, selon un déclencheur…
 A chaque nouvelle version, des actions sont
déclenchées
 Compilation, tests, génération de documentation…
 Exécution possible sur des « esclaves »
 Recommandé !
Tests et intégration continue avec Eclipse
39 / 56
Quels avantages de l’IC ?
 Les tests sont automatisés
 Un commit SVN => une série de tests
 Historique des tests
 Eventuellement des alertes automatiques si échec
 Le portail peut servir à d’autres fins
 Publication d’un « nightly build »
 Génération de documentation
 Autres tests : compatibilité, performance…
Tests et intégration continue avec Eclipse
40 / 56
Installer Jenkins
 sudo apt-get install jenkins
OU
 Télécharger fichier JAR
 Java –jar jenkins.jar
 Cliquer « install as a service »
Tests et intégration continue avec Eclipse
41 / 56
Configurer l’intégration continue
 Configurer une (des) machines(s) + services
 Fastidieux 
1. Configuration de Jenkins
 Installation d’une série de plugins
 Phing, checkstyle, PMD, …
2. Installation des esclaves
3. Configuration des esclaves
 Apache, PHP, mySQL, PEAR, Phing, …
4. Lien entre serveur Jenkins et esclaves
Tests et intégration continue avec Eclipse
42 / 56
Création d’un nouveau projet
 Choix du nom du projet
 Réglage des paramètres SVN
 Configuration du « build »
 exécution de Phing
 Configuration des étapes post-build
 Graphe tests unitaires
 Graphe couverture de code
 etc
Tests et intégration continue avec Eclipse
43 / 56
L’interface une fois le projet configuré
Tests et intégration continue avec Eclipse
44 / 56
Un peu plus tard… vue du projet
45 / 56
Configurer l’outil d’Intégration Continue
 Configurer l’outil, c’est (relativement) facile
 Encore faut-il en maîtriser les arcanes !
 MAIS l’outil ne fait que tracer des graphes
 Il faut générer ces données, automatiquement
 Besoin de la phase d’automatisation
Tests et intégration continue avec Eclipse
46 / 56
Au final, ça donne quoi ?
Tests et intégration continue avec Eclipse
47 / 56
Au final, ça donne quoi ?
Tests et intégration continue avec Eclipse
48 / 56
Jenkins dans Eclipse
Tests et intégration continue avec Eclipse
49 / 56
Jenkins dans Eclipse
Tests et intégration continue avec Eclipse
50 / 56
Jenkins dans Eclipse
Tests et intégration continue avec Eclipse
51 / 54
Bilan
 Jenkins est complet et peut être complexe
 Mais reste simple pour un petit projet
 Intégration continue pas vitale MAIS :
 Pratique réaliser des actions automatiquement
 build, test, génération de doc…
 Utile pour visualiser les métriques et leur historique
 Encourage à améliorer la qualité du code
 Même pour cette présentation !
 Intérêt de l’intégration de Jenkins dans Eclipse ?
 Visualisations limitées
Tests et intégration continue avec Eclipse
52 / 56
Les limites
 Adaptation au projet « Grid Observatory » ?
• Acquisition de fichiers à distance
• Traitement des données
• Mise en ligne des données traitées
 Test difficile, beaucoup d’effets de bord
 Le traitement des données est plus facile à tester
 Mais il faut imaginer tous les cas
Tests et intégration continue avec Eclipse
53 / 56
5. Présentation de l’atelier
Tests + Intégration continue
Qu’allons-nous voir ?
 Création d’un projet simple en Java
 Rédaction de tests avec JUnit
 Couverture de code (pour de vrai)
 Intégration continue
 Le tout en 2h !
Tests et intégration continue avec Eclipse
55 / 56
Prérequis
 Installer Java 1.6 – 1.7
 Installer Eclipse Juno 4.2
 Installer un client SVN
 Télécharger Jenkins (http://jenkins-ci.org/)
 Si possible, installer Ant
 surtout pour les utilisateurs de Windows
Tests et intégration continue avec Eclipse
56 / 56

Documents pareils