SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
La qualité logicielle et
l'intégration continue
Cas concret du projet Cytomine
Loïc Rollus (lrollus@ulg.ac.be), 11/09/2013
Présentation
Parcourir 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
Au commencement...
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?
Logiciel de gestion de versions
Ou 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
Logiciel de gestion de versions
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?
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
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 composantes
Ex: 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
Tests automatisés
Pour 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, …)
Tests automatisés
Schéma classique d’un test
1.
2.
3.
4.

Préparation des données
Requête HTTP vers Cytomine
Analyse de la réponse HTTP
Vérification
Tests automatisés
Schéma classique d’un test
Exemple: Ajout d’une annotation (zone sur l’image)

1. Préparation des données
a.
b.

Création d’un projet et d’une image
Création du JSON de l’annotation

2. Requête HTTP vers Cytomine
a.

POST HTTP sur l’URL /api/annotation avec le JSON de l’annotation

3. Analyse de la réponse HTTP
a.

Vérification du code HTTP (200)

4. Vérification
a.

Vérifier directement dans la DB si l’annotation est bien là
Tests automatisés
Exemple:
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,...).
Tests automatisés
Trè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. Critique
2. 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é
Tests automatisés
Tests automatisés
Comment
●

●

exécuter plusieurs
centaines de tests avant
chaque commit?
éviter d’oublier de les
exécuter?
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
OK
○ Compile+Run Test
Envoyer un mail aux
○ Close Cytomine
“responsables”
Système d'intégration Continue
Système d'intégration Continue
Système d'intégration Continue
s

Comment
●

évaluer la quantité de code
testé?
Couverture de code
● Cobertura
● Calcul la couverture des tests
Couverture de code
Couverture de code

Comment
●

évaluer la qualité du code (redondance, règles,...)?
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
...
Système de gestion qualité du code source
Système de gestion qualité du code source

Click
Système de gestion qualité du code source
Système de gestion qualité du code source
Système de gestion qualité du code source

Comment
● répertorier les bugs (test échoué,
plainte utilisateur,...)?
● assurer le suivi de la qualité?
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
Système de suivi de bugs
Environnement complet
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 :-)...)
Tips
● Commencer dès le début du projet
● Test Driven Development
● Ne pas se focaliser (trop) sur les chiffres
Amélioration
● Améliorer la couverture des tests du serveur
● Tester l’interface web
● Tester les performances automatiquement
(charge, stress, big data...)
Fin

?
S

I
T

N
O

U
Q

S
E

Contenu connexe

En vedette

Différence entre paludisme présumé et cas confirmés
Différence entre paludisme présumé et cas confirmésDifférence entre paludisme présumé et cas confirmés
Différence entre paludisme présumé et cas confirmésInstitut Pasteur de Madagascar
 
les ribosomes et la synthèse proteique
les ribosomes et la synthèse proteiqueles ribosomes et la synthèse proteique
les ribosomes et la synthèse proteiqueHachem Ben Salah
 
Couverture en Moustiquaires Imprégnées d’Insecticides (MII) en Afrique
Couverture en Moustiquaires Imprégnées d’Insecticides (MII) en AfriqueCouverture en Moustiquaires Imprégnées d’Insecticides (MII) en Afrique
Couverture en Moustiquaires Imprégnées d’Insecticides (MII) en AfriqueInstitut Pasteur de Madagascar
 
40 44 loup drome mise en page 1
40 44 loup drome mise en page 140 44 loup drome mise en page 1
40 44 loup drome mise en page 1leshaies
 
Click to-chat-quel-impact-dans-le-tourisme
Click to-chat-quel-impact-dans-le-tourismeClick to-chat-quel-impact-dans-le-tourisme
Click to-chat-quel-impact-dans-le-tourismeChafik YAHOU
 
Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...
Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...
Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...Institut Pasteur de Madagascar
 
Les effets de l’ acquisition des territoires
Les effets de l’ acquisition des territoiresLes effets de l’ acquisition des territoires
Les effets de l’ acquisition des territoiresMaurice Kande
 
Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...
Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...
Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...Institut Pasteur de Madagascar
 
Effets des dérivés de l’artémisinine sur la transmission
Effets des dérivés de l’artémisinine sur la transmissionEffets des dérivés de l’artémisinine sur la transmission
Effets des dérivés de l’artémisinine sur la transmissionInstitut Pasteur de Madagascar
 
Si vous n'aviez pas de limites en ressources financières et humaines, quelles...
Si vous n'aviez pas de limites en ressources financières et humaines, quelles...Si vous n'aviez pas de limites en ressources financières et humaines, quelles...
Si vous n'aviez pas de limites en ressources financières et humaines, quelles...Institut Pasteur de Madagascar
 

En vedette (20)

Méthode de diagnostic biologique du paludisme
Méthode de diagnostic biologique du paludismeMéthode de diagnostic biologique du paludisme
Méthode de diagnostic biologique du paludisme
 
Différence entre paludisme présumé et cas confirmés
Différence entre paludisme présumé et cas confirmésDifférence entre paludisme présumé et cas confirmés
Différence entre paludisme présumé et cas confirmés
 
les ribosomes et la synthèse proteique
les ribosomes et la synthèse proteiqueles ribosomes et la synthèse proteique
les ribosomes et la synthèse proteique
 
Le Complexe Gambiae
Le Complexe GambiaeLe Complexe Gambiae
Le Complexe Gambiae
 
Couverture en Moustiquaires Imprégnées d’Insecticides (MII) en Afrique
Couverture en Moustiquaires Imprégnées d’Insecticides (MII) en AfriqueCouverture en Moustiquaires Imprégnées d’Insecticides (MII) en Afrique
Couverture en Moustiquaires Imprégnées d’Insecticides (MII) en Afrique
 
40 44 loup drome mise en page 1
40 44 loup drome mise en page 140 44 loup drome mise en page 1
40 44 loup drome mise en page 1
 
Click to-chat-quel-impact-dans-le-tourisme
Click to-chat-quel-impact-dans-le-tourismeClick to-chat-quel-impact-dans-le-tourisme
Click to-chat-quel-impact-dans-le-tourisme
 
L'infection asymptomatique
L'infection asymptomatiqueL'infection asymptomatique
L'infection asymptomatique
 
Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...
Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...
Protection conférée par l'hémoglobine C contre les formes neurologiques du pa...
 
Les effets de l’ acquisition des territoires
Les effets de l’ acquisition des territoiresLes effets de l’ acquisition des territoires
Les effets de l’ acquisition des territoires
 
Programmation automne 2014
Programmation automne 2014Programmation automne 2014
Programmation automne 2014
 
Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...
Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...
Fièvre de la Vallée du Rift: Comment considérer un moustique vecteur potentie...
 
Le devenir d’un accès palustre
Le devenir d’un accès palustreLe devenir d’un accès palustre
Le devenir d’un accès palustre
 
diagnostic
diagnosticdiagnostic
diagnostic
 
Slides timeline
Slides timelineSlides timeline
Slides timeline
 
Spreecast3 20 mai 2014
Spreecast3 20 mai 2014Spreecast3 20 mai 2014
Spreecast3 20 mai 2014
 
Effets des dérivés de l’artémisinine sur la transmission
Effets des dérivés de l’artémisinine sur la transmissionEffets des dérivés de l’artémisinine sur la transmission
Effets des dérivés de l’artémisinine sur la transmission
 
La chimioprophylaxie et groupes-cibles
La chimioprophylaxie et groupes-ciblesLa chimioprophylaxie et groupes-cibles
La chimioprophylaxie et groupes-cibles
 
ACS88_7222
ACS88_7222ACS88_7222
ACS88_7222
 
Si vous n'aviez pas de limites en ressources financières et humaines, quelles...
Si vous n'aviez pas de limites en ressources financières et humaines, quelles...Si vous n'aviez pas de limites en ressources financières et humaines, quelles...
Si vous n'aviez pas de limites en ressources financières et humaines, quelles...
 

Similaire à La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine

La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet CytomineLa qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet CytomineInterface ULg, LIEGE science park
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logicielsSylvain Leroy
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange LabsEmmanuel Hugonnet
 
Deux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsDeux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsAgile Tour 2009 Québec
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads France
 
2-Cours de Géniel Logiciel
2-Cours de Géniel Logiciel2-Cours de Géniel Logiciel
2-Cours de Géniel Logiciellauraty3204
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueXavier Callens
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php ALTER WAY
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwthkairi
 
Liferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferayLiferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferaySébastien Le Marchand
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
Suivi de qualité PIC afup2010
Suivi de qualité PIC afup2010Suivi de qualité PIC afup2010
Suivi de qualité PIC afup2010Gabriele Santini
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...PimpMySharePoint
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv PsGregory Renard
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 
Développement d'un composant win rt
Développement d'un composant win rtDéveloppement d'un composant win rt
Développement d'un composant win rtArnaud Auroux
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 

Similaire à La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine (20)

La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet CytomineLa qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
 
Deux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsDeux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succès
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - Epitez
 
2-Cours de Géniel Logiciel
2-Cours de Géniel Logiciel2-Cours de Géniel Logiciel
2-Cours de Géniel Logiciel
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwt
 
Liferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferayLiferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferay
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
Suivi de qualité PIC afup2010
Suivi de qualité PIC afup2010Suivi de qualité PIC afup2010
Suivi de qualité PIC afup2010
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv Ps
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
Développement d'un composant win rt
Développement d'un composant win rtDéveloppement d'un composant win rt
Développement d'un composant win rt
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 

Plus de Geeks Anonymes

Programmer sous Unreal Engine
Programmer sous Unreal EngineProgrammer sous Unreal Engine
Programmer sous Unreal EngineGeeks Anonymes
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesGeeks Anonymes
 
Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)Geeks Anonymes
 
Reprendre le contrôle de ses données
Reprendre le contrôle de ses donnéesReprendre le contrôle de ses données
Reprendre le contrôle de ses donnéesGeeks Anonymes
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingGeeks Anonymes
 
Vulnérabilités au cœur des applications Web, menaces et contre-mesures
 Vulnérabilités au cœur des applications Web, menaces et contre-mesures Vulnérabilités au cœur des applications Web, menaces et contre-mesures
Vulnérabilités au cœur des applications Web, menaces et contre-mesuresGeeks Anonymes
 
191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materiellesGeeks Anonymes
 
"Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité "Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité Geeks Anonymes
 
Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...Geeks Anonymes
 
Intelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelleIntelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelleGeeks Anonymes
 
Pour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu videoPour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu videoGeeks Anonymes
 
Become Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open SourceBecome Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open SourceGeeks Anonymes
 
Reconnaissance vocale et création artistique
Reconnaissance vocale et création artistiqueReconnaissance vocale et création artistique
Reconnaissance vocale et création artistiqueGeeks Anonymes
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language ProcessingGeeks Anonymes
 
Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur Geeks Anonymes
 

Plus de Geeks Anonymes (20)

Programmer sous Unreal Engine
Programmer sous Unreal EngineProgrammer sous Unreal Engine
Programmer sous Unreal Engine
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexes
 
Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)
 
Reprendre le contrôle de ses données
Reprendre le contrôle de ses donnéesReprendre le contrôle de ses données
Reprendre le contrôle de ses données
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage Go
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testing
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Vulnérabilités au cœur des applications Web, menaces et contre-mesures
 Vulnérabilités au cœur des applications Web, menaces et contre-mesures Vulnérabilités au cœur des applications Web, menaces et contre-mesures
Vulnérabilités au cœur des applications Web, menaces et contre-mesures
 
191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles
 
"Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité "Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité
 
Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...
 
Le langage rust
Le langage rustLe langage rust
Le langage rust
 
Test your code
Test your codeTest your code
Test your code
 
Intelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelleIntelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelle
 
Pour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu videoPour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu video
 
Become Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open SourceBecome Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open Source
 
Reconnaissance vocale et création artistique
Reconnaissance vocale et création artistiqueReconnaissance vocale et création artistique
Reconnaissance vocale et création artistique
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language Processing
 
Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur
 
Modern sql
Modern sqlModern sql
Modern sql
 

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

  • 1. La qualité logicielle et l'intégration continue Cas concret du projet Cytomine Loïc Rollus (lrollus@ulg.ac.be), 11/09/2013
  • 2. Présentation Parcourir 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
  • 4. 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?
  • 5. Logiciel de gestion de versions Ou 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
  • 6. Logiciel de gestion de versions
  • 7. 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?
  • 8. 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
  • 9. 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 composantes Ex: 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
  • 10. Tests automatisés Pour 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, …)
  • 11. Tests automatisés Schéma classique d’un test 1. 2. 3. 4. Préparation des données Requête HTTP vers Cytomine Analyse de la réponse HTTP Vérification
  • 12. Tests automatisés Schéma classique d’un test Exemple: Ajout d’une annotation (zone sur l’image) 1. Préparation des données a. b. Création d’un projet et d’une image Création du JSON de l’annotation 2. Requête HTTP vers Cytomine a. POST HTTP sur l’URL /api/annotation avec le JSON de l’annotation 3. Analyse de la réponse HTTP a. Vérification du code HTTP (200) 4. Vérification a. Vérifier directement dans la DB si l’annotation est bien là
  • 13. Tests automatisés Exemple: 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,...).
  • 14. Tests automatisés Trè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. Critique 2. 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é
  • 16. Tests automatisés Comment ● ● exécuter plusieurs centaines de tests avant chaque commit? éviter d’oublier de les exécuter?
  • 17. 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 OK ○ Compile+Run Test Envoyer un mail aux ○ Close Cytomine “responsables”
  • 21. Couverture de code ● Cobertura ● Calcul la couverture des tests
  • 23. Couverture de code Comment ● évaluer la qualité du code (redondance, règles,...)?
  • 24. 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 ...
  • 25. Système de gestion qualité du code source
  • 26. Système de gestion qualité du code source Click
  • 27. Système de gestion qualité du code source
  • 28. Système de gestion qualité du code source
  • 29. Système de gestion qualité du code source Comment ● répertorier les bugs (test échoué, plainte utilisateur,...)? ● assurer le suivi de la qualité?
  • 30. 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
  • 31. Système de suivi de bugs
  • 33. 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 :-)...)
  • 34. Tips ● Commencer dès le début du projet ● Test Driven Development ● Ne pas se focaliser (trop) sur les chiffres
  • 35. Amélioration ● Améliorer la couverture des tests du serveur ● Tester l’interface web ● Tester les performances automatiquement (charge, stress, big data...)