la qualité logicielle et l'intégration continue - cas concret du projet cytomine

36
La qualité logicielle et l'intégration continue Cas concret du projet Cytomine Loïc Rollus ([email protected] ), 11/09/2013

Upload: jfays

Post on 24-May-2015

417 views

Category:

Technology


0 download

DESCRIPTION

par Loïc Rollus et Benjamin Stevens, 11 septembre 2013

TRANSCRIPT

Page 1: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

La qualité logicielle et l'intégration continueCas concret du projet Cytomine

Loïc Rollus ([email protected]), 11/09/2013

Page 2: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

PrésentationParcourir les outils d’aide au développement utilisé pour Cytomine

● Logiciel de gestion de versions● Tests automatisés● Framework d’intégration continue● Système de gestion qualité du code source● Système de suivi de bugs● Wiki

Page 3: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Au commencement...

Page 4: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Au commencement...

Comment● synchroniser nos sources?● gérer les conflits entre fichiers?● faciliter et automatiser les

backups?● restaurer facilement une version

précédente d’un ou plusieurs fichiers?

Page 5: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Logiciel de gestion de versionsOu VCS (Version Control System)● Synchroniser le code source● Résoudre les conflits● Gérer les versions du logiciel

● Subversion (serveur, client web, …)● Git (clients, scripts,...)

Sujet de la précédente réunion des Geek Anonymes:http://geeksanonymes.argenco.ulg.ac.be/sites/default/files/slides%20subversion%20and%20GIT.pdf

Page 6: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Logiciel de gestion de versions

Page 7: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Logiciel de gestion de versions

Comment● améliorer la robustesse du

code source?● détecter rapidement les

bugs?● éviter de tester

manuellement?● avoir une idée de la qualité

du logiciel?

Page 8: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisés● Code destiné à tester des méthodes, classes ou des

fonctionnalités complètes

● Détecter automatiquement et rapidement les bugs en les exécutant régulièrement

● Test Driven Development: écrire les tests puis implémenter les fonctionnalités

Page 9: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisés● Test unitaire: unité isolée (méthodes, classes,..)

Ex: tester la méthode qui vérifie l’adresse email d’un utilisateur

● Test intégration: plusieurs composantesEx: tester l’ajout d’un utilisateur dans la base de données

● Test fonctionnel: fonctionnalités complètes Ex: lancer le serveur et tester une fonctionnalité via un client

Page 10: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisésPour Cytomine (Junit)● Test unitaire: pour des librairies, dépendances,...

● Test “hybride” intégration et fonctionnel● Test fonctionnalités complètes

● Debug “facile”: même application donc 1 log, exceptions du serveur récupéré dans les tests, …

● Accès aux classes et fonctionnalités du serveur (DB, …)

Page 11: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisésSchéma classique d’un test1. Préparation des données2. Requête HTTP vers Cytomine3. Analyse de la réponse HTTP4. Vérification

Page 12: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisésSchéma classique d’un testExemple: Ajout d’une annotation (zone sur l’image)

1. Préparation des donnéesa. Création d’un projet et d’une imageb. Création du JSON de l’annotation

2. Requête HTTP vers Cytominea. POST HTTP sur l’URL /api/annotation avec le JSON de l’annotation

3. Analyse de la réponse HTTPa. Vérification du code HTTP (200)

4. Vérificationa. Vérifier directement dans la DB si l’annotation est bien là

Page 13: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisésExemple:

void testAddAnnotationCorrect() { Annotation annotation = buildAnnotation()

HTTPClient client = initCytomineConnection() def result = client.post(“/api/annotation”,annotation.toJSON()) assert 200 == result.code int idAnnotation = result.data.id

assert Annotation.read(idAnnotation)!=null }● Tester aussi les listings, les modifications et suppressions.● Tester aussi les “cas d’échec” (forme non valide, mauvais projet,...).

Page 14: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisésTrès utile pour les ACL (sécurité)Exemple : ● Un utilisateur ne peut ajouter ou lire des annotations que dans ses projets.● Il ne peut modifier ou supprimer que ses annotations.● L’admin cytomine peut tout faire

1. Critique2. Difficile à tester manuellement

a. Nombreuses fonctions : add, update, delete, read pour chaque type de domaine (Annotation, Projet,...)

b. Nombreux rôles : Admin, utilisateur d'un projet, utilisateur du projet qui a créé l’annotation, utilisateur qui n'a pas accès au projet, anonyme

=> Effectuer la requête et vérifier le code HTTP 200 = succès, 401 = non authentifié et 403 = non autorisé

Page 15: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisés

Page 16: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tests automatisés

Comment● exécuter plusieurs

centaines de tests avant chaque commit?

● éviter d’oublier de les exécuter?

Page 17: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système d'intégration Continue● Bamboo (alternatives: Hudson, Jenkins,...)

● Vérifie tous les x temps (ex : 3min) si le dépôt a été mis à jour● En cas de mise à jour, Bamboo récupère les dernières sources● Etapes :

○ Compile+Build+Run Cytomine○ Compile+Run Test○ Close Cytomine

OK

Envoyer un mail aux “responsables”

Page 18: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système d'intégration Continue

Page 19: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système d'intégration Continue

Page 20: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système d'intégration Continue

s

Comment● évaluer la quantité de code

testé?

Page 21: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Couverture de code● Cobertura● Calcul la couverture des tests

Page 22: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Couverture de code

Page 23: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Couverture de code

Comment● évaluer la qualité du code (redondance, règles,...)?

Page 24: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de gestion qualité du code source

● Sonar (SonarQube)● Application web● Mesurer la qualité du code source en continu

○ Duplications de code○ Couverture de code par les tests unitaires○ Mesure le niveau de doc○ Règles du langage○ ...

Page 25: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de gestion qualité du code source

Page 26: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de gestion qualité du code source

Click

Page 27: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de gestion qualité du code source

Page 28: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de gestion qualité du code source

Page 29: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de gestion qualité du code source

Comment● répertorier les bugs (test échoué,

plainte utilisateur,...)?● assurer le suivi de la qualité?

Page 30: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de suivi de bugs● Jira● Gestion par tickets (bug, feature, task,...)

○ Ouvrir, Assigner, Résoudre, Clôturer, ...○ Organisation et gestion du temps○ Discussions sur un ticket

Page 31: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Système de suivi de bugs

Page 32: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Environnement complet

Page 33: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Résumé● Logiciel de gestion de versions: Subversion et Git● Tests automatisés: JUnit● Framework d’intégration continue: Bamboo● Système de gestion qualité du code source: Sonar

(Qube)● Système de suivi de bugs: Jira● Wiki: Confluence

● Subversion, Git, Junit et Sonar: gratuit● Bamboo, Jira et Confluence: 10$/an par logiciel si projet

non open-source (self-host, max 10 users, charity :-)...)

Page 34: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Tips● Commencer dès le début du projet

● Test Driven Development

● Ne pas se focaliser (trop) sur les chiffres

Page 35: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Amélioration● Améliorer la couverture des tests du serveur

● Tester l’interface web

● Tester les performances automatiquement (charge, stress, big data...)

Page 36: La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

Fin

QUESTIONS?