53
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

Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

Page 2: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

2 / 56 Tests et intégration continue avec Eclipse

Page 3: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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 ?

3 / 56 Tests et intégration continue avec Eclipse

Page 4: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

5 / 56 Tests et intégration continue avec Eclipse

Page 5: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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 »

7 / 56 Tests et intégration continue avec Eclipse

Page 6: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

1. Mise en place du projet

Page 7: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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…)

9 / 56 Tests et intégration continue avec Eclipse

Page 8: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Les outils Eclipse pour PHP : PDT

10 / 56 Tests et intégration continue avec Eclipse

Page 9: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Création d’un projet PHP

11 / 56 Tests et intégration continue avec Eclipse

Page 10: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Réglages du débogueur

12 / 56 Tests et intégration continue avec Eclipse

Page 11: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Débogueur en fonctionnement

13 / 56 Tests et intégration continue avec Eclipse

Page 12: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Installation de PEAR et PHPUnit

PHP Extension and Application Repository

Equivalent d’un gestionnaire de paquets PHP

Plusieurs incantations obligatoires

14 / 56

Page 13: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Ajout des libs PEAR dans Eclipse

15 / 56 Tests et intégration continue avec Eclipse

Page 14: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Installation de Makegood pour PHPUnit

16 / 56 Tests et intégration continue avec Eclipse

Page 15: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Configuration de Makegood

17 / 56 Tests et intégration continue avec Eclipse

Page 16: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Installation d’autres outils

18 / 56 Tests et intégration continue avec Eclipse

Page 17: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Configuration des outils

19 / 56 Tests et intégration continue avec Eclipse

Page 18: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

2. Ecriture des tests

Page 19: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

22 / 56 Tests et intégration continue avec Eclipse

Page 20: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

23 / 56 Tests et intégration continue avec Eclipse

Page 21: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Du code !

Un exemple de test unitaire

24 / 56 Tests et intégration continue avec Eclipse

Page 22: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

25 / 56 Tests et intégration continue avec Eclipse

Page 23: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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)

26 / 56 Tests et intégration continue avec Eclipse

Page 24: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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 !

27 / 56 Tests et intégration continue avec Eclipse

Page 25: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Résultat

~1000 lignes de code pour les tests unitaires

Plusieurs jours de développement

50 fonctions de test, 567 assertions

28 / 56

Page 26: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Malheureusement…

Couplage tests + debugger = Code coverage

… Mais pas avec Eclipse + PDT

29 / 56

Page 27: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

30 / 56 Tests et intégration continue avec Eclipse

Page 28: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

3. Automatisation

Page 29: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

32 / 56 Tests et intégration continue avec Eclipse

Page 30: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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…

33 / 56 Tests et intégration continue avec Eclipse

Page 31: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

build.xml pour Phing

34 / 56 Tests et intégration continue avec Eclipse

Page 32: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Exécution des tests

Tests et intégration continue avec Eclipse 35 / 56

Page 33: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

4. Intégration continue

Page 34: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

37 / 56 Tests et intégration continue avec Eclipse

Page 35: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

L’outil d’IC Hudson, pour Stratuslab

38 / 56 Tests et intégration continue avec Eclipse

Page 36: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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é !

39 / 56 Tests et intégration continue avec Eclipse

Page 37: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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…

40 / 56 Tests et intégration continue avec Eclipse

Page 38: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Installer Jenkins

sudo apt-get install jenkins

OU

Télécharger fichier JAR

Java –jar jenkins.jar

Cliquer « install as a service »

41 / 56 Tests et intégration continue avec Eclipse

Page 39: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

42 / 56 Tests et intégration continue avec Eclipse

Page 40: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

43 / 56 Tests et intégration continue avec Eclipse

Page 41: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

L’interface une fois le projet configuré

44 / 56 Tests et intégration continue avec Eclipse

Page 42: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Un peu plus tard… vue du projet

45 / 56

Page 43: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

46 / 56 Tests et intégration continue avec Eclipse

Page 44: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Au final, ça donne quoi ?

47 / 56 Tests et intégration continue avec Eclipse

Page 45: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Au final, ça donne quoi ?

48 / 56 Tests et intégration continue avec Eclipse

Page 46: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Jenkins dans Eclipse

Tests et intégration continue avec Eclipse 49 / 56

Page 47: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Jenkins dans Eclipse

Tests et intégration continue avec Eclipse 50 / 56

Page 48: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

Jenkins dans Eclipse

Tests et intégration continue avec Eclipse 51 / 54

Page 49: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

52 / 56 Tests et intégration continue avec Eclipse

Page 50: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

53 / 56 Tests et intégration continue avec Eclipse

Page 51: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

5. Présentation de l’atelier

Tests + Intégration continue

Page 52: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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 !

55 / 56 Tests et intégration continue avec Eclipse

Page 53: Tests et intégration continue avec Eclipse · Phing, checkstyle, PMD, … 2. Installation des esclaves 3. Configuration des esclaves Apache, PHP, mySQL, PEAR, Phing, … 4. Lien

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

56 / 56 Tests et intégration continue avec Eclipse