SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Développement d’une

application web
Ecriture des tests

de non-régression
cedric.villa@gmail.comENVOL 2014
Finalité
• Garantir le 

fonctionnement intégral d’une
application web en
production
• Eviter les régressions

lors de l’évolution de
l’application
cedric.villa@gmail.comENVOL 2014
Manifest Agile
« Notre plus haute priorité est de satisfaire le client

en livrant rapidement et régulièrement

des fonctionnalités à grande valeur ajoutée. »
http://agilemanifesto.org/iso/fr/principles.html
cedric.villa@gmail.comENVOL 2014
Anatomie d’une
web app
cedric.villa@gmail.comENVOL 2014
Fonctionnement d’une web app
cedric.villa@gmail.comENVOL 2014
Architecture d’une web app
Model
View
Controller
requêtes
réponses
cedric.villa@gmail.comENVOL 2014
Architecture d’une web app
Model
View
Controller
requêtes
réponses
tests unitaires
tests d’intégration
tests unitaires
tests d’intégration
tests d’intégration
tests fonctionnels
cedric.villa@gmail.comENVOL 2014
La quête de la couverture totale
On peut absolument TOUT tester
(et cela cache un piège sournois)
cedric.villa@gmail.comENVOL 2014
Différents types de test
Type Cible Domaine
Tests fonctionnels Utilisateurs Fonctionnalités
Test d’intégration Développeurs
Inter-connexion des
composants
Tests unitaires Développeurs
Architecture de
l’application
… … …
cedric.villa@gmail.comENVOL 2014
Test des 

spécifications
fonctionnelles
cedric.villa@gmail.comENVOL 2014
Vue complète
Model
View
Controller
requêtes
réponses
cedric.villa@gmail.comENVOL 2014
Vue en boîte noire
Model
View
Controller
requêtes
réponses
App
APPLICATION
tests fonctionnels
cedric.villa@gmail.comENVOL 2014
Test fonctionnels
•Ce que l’utilisateur fait et voit
•Test l’ensemble des couches de l’application
cedric.villa@gmail.comENVOL 2014
Exemple de scénario
# Création d’un enregistrement par utilisateur lambda
1. Un utilisateur lambda s’authentifie sur l’application
2. Il accède à la page du formulaire
3. Il rempli 2 champs et valide le formulaire
• Il doit voir un message de succès
• Il doit voir son enregistrement
cedric.villa@gmail.comENVOL 2014
Simulation des scénarios
par le navigateur
cedric.villa@gmail.comENVOL 2014
Simulation des scénarios par le navigateur
cedric.villa@gmail.comENVOL 2014
‣ Lourd à utiliser 

surtout à plusieurs et en production
‣ Attention au mode « enregistrement live »

privilégier la sélection des composant

par attributs HTML (classe, ID ou autre attribut)
Simulation des scénarios par le navigateur
cedric.villa@gmail.comENVOL 2014
Moteurs de rendu « headless »
Selenium, PhantomJS, Webkit, etc.
• Simulations complètes sans navigateur « lourd »
• En ligne de commande
• Multi-environnement
cedric.villa@gmail.comENVOL 2014
Ecriture des scénarios dans
un langage dédié (DSL)
cedric.villa@gmail.comENVOL 2014
Objectifs
• Ecrire les tests dans un format compréhensible 

par les acteurs concernés
• Inclure les tests dans le SCM
• Déployer en qualification

(pas en production -> préserver intégrité)
cedric.villa@gmail.comENVOL 2014
Ecriture des scénarios dans un DSL

(Cucumber, Gherkin, etc.)
cedric.villa@gmail.comENVOL 2014
Ecriture des scénarios dans un DSL

(Cucumber, Gherkin, etc.)
Etantdonné /^que je suis sur la page de connexion du wiki$/ do
@browser.goto('http://example.com/start?do=login')
end
Quand /^je m'identifie en tant que "([^"]*)" 
avec le mot de passe "([^"]*)"$/ do |id, password|
@browser.text_field(:name, 'u').set(id)
@browser.text_field(:name, 'p').set(password)
@browser.button(:value, 'Connexion').click
end
Alors /^je devrais voir "([^"]*)"$/ do |text|
@browser.text.include?(text).should == true
end
ENVOL 2014 - Tests d’une web app
Ecriture des scénarios dans un DSL
• On écrit :
• les scénarios (langage non technique)
• les tests associés (code)
• les jeux de données (code)
• L’outil interprète et exécute l’ensemble des tests
cedric.villa@gmail.comENVOL 2014
Ecriture des scénarios dans un DSL

(RSpec / JUnit / Jasmine / unittest / NUnit )
cedric.villa@gmail.comENVOL 2014
Execution des tests en ligne de
commande
cedric.villa@gmail.comENVOL 2014
Bonus : générer le cahier de recettes
cedric.villa@gmail.comENVOL 2014
Intégration dans IDE
cedric.villa@gmail.comENVOL 2014
Échouez tôt et
échouez souvent.
cedric.villa@gmail.comENVOL 2014
Échouez tôt, échouez souvent
• Une défaillance est plus facilement réparable

juste après son apparition
• Il vaut mieux être alerté par un indicateur,

que par un utilisateur furieux.
cedric.villa@gmail.comENVOL 2014
Faites-en un rituel
cedric.villa@gmail.comENVOL 2014
Implémentation en 3 étapes
Ecriture
d’une
spécification
Faire réussir
le test
Vérifier
le test échoue le test réussi
tous les tests

doivent passer
coder améliorer
cedric.villa@gmail.comENVOL 2014
Bilan
• Beaucoup d’aprioris
• Finalement plutôt passionnant
• Amélioration significative de la qualité globale

(code + fonctionnement)
• Plus aisé de partager

(confiance en son code)
cedric.villa@gmail.comENVOL 2014
Références
• http://betterspecs.org/fr/

(bonnes pratiques tests RSPEC)
• http://phantomjs.org/ 

(headless web rendering)
• http://shcatula.wordpress.com/2013/02/21/java-rspec-
alternative/

(alternative à RSPEC pour Java)
• http://blog.octo.com/jai-limpression-decrire-mes-tests-en-
double/

(gestion doublons dans les tests)
cedric.villa@gmail.comENVOL 2014

Contenu connexe

Tendances

Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...
Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...
Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...
Hadjer BENHADJ DJILALI
 
Cycles de vie d'un logiciel
Cycles de vie d'un logicielCycles de vie d'un logiciel
Cycles de vie d'un logiciel
Rabia AZIZA
 
Conception et réalisation d’une application web (1).pptx
Conception et réalisation d’une application web (1).pptxConception et réalisation d’une application web (1).pptx
Conception et réalisation d’une application web (1).pptx
SouadZid
 
Cours c#
Cours c#Cours c#
Cours c#
zan
 

Tendances (20)

Aql métriques logicielles
Aql métriques logiciellesAql métriques logicielles
Aql métriques logicielles
 
Test logiciel
Test logicielTest logiciel
Test logiciel
 
Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...
Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...
Mémoire Parallélisation d'algorithmes de graphes avec MapReduce sur un cluste...
 
Métriques de qualité logicielle
Métriques de qualité logicielleMétriques de qualité logicielle
Métriques de qualité logicielle
 
Introduction au génie logiciel 1.2
Introduction au génie logiciel 1.2Introduction au génie logiciel 1.2
Introduction au génie logiciel 1.2
 
Automatisation des tests
Automatisation des testsAutomatisation des tests
Automatisation des tests
 
spring-boot-fr.pdf
spring-boot-fr.pdfspring-boot-fr.pdf
spring-boot-fr.pdf
 
Cycles de vie d'un logiciel
Cycles de vie d'un logicielCycles de vie d'un logiciel
Cycles de vie d'un logiciel
 
Tests Logiciel
Tests LogicielTests Logiciel
Tests Logiciel
 
Conception et réalisation d'une plateforme éducative (LMS).
Conception et réalisation d'une plateforme éducative (LMS).Conception et réalisation d'une plateforme éducative (LMS).
Conception et réalisation d'une plateforme éducative (LMS).
 
Conception et réalisation d’une application web (1).pptx
Conception et réalisation d’une application web (1).pptxConception et réalisation d’une application web (1).pptx
Conception et réalisation d’une application web (1).pptx
 
DevOps : mission [im]possible ?
DevOps : mission [im]possible ?DevOps : mission [im]possible ?
DevOps : mission [im]possible ?
 
Qualité logiciel - Generalités
Qualité logiciel - GeneralitésQualité logiciel - Generalités
Qualité logiciel - Generalités
 
Scrum best practices
Scrum best practicesScrum best practices
Scrum best practices
 
20mn scrum
20mn scrum20mn scrum
20mn scrum
 
Cours c#
Cours c#Cours c#
Cours c#
 
Chapitre 4 Java script
Chapitre 4 Java scriptChapitre 4 Java script
Chapitre 4 Java script
 
Initiation Scrum
Initiation ScrumInitiation Scrum
Initiation Scrum
 
Sockets
SocketsSockets
Sockets
 
Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctions
 

Similaire à Non-regression testing in web app development

Ingénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdfIngénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdf
JEANCLAUDECAMARA
 
on feature interactions among web services.ppt
on feature interactions among web services.ppton feature interactions among web services.ppt
on feature interactions among web services.ppt
kusterj
 

Similaire à Non-regression testing in web app development (20)

Frameworks JavaScript en environnement MS
Frameworks JavaScript en environnement MSFrameworks JavaScript en environnement MS
Frameworks JavaScript en environnement MS
 
CV REBAI Hamida
CV REBAI HamidaCV REBAI Hamida
CV REBAI Hamida
 
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et MonacoCycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
 
AFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open APIAFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open API
 
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
 
Azure Serverless C2S
Azure Serverless C2SAzure Serverless C2S
Azure Serverless C2S
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010
 
Ingénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdfIngénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdf
 
on feature interactions among web services.ppt
on feature interactions among web services.ppton feature interactions among web services.ppt
on feature interactions among web services.ppt
 
Angular.pdf
Angular.pdfAngular.pdf
Angular.pdf
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
 
Architecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et XamarinArchitecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et Xamarin
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-end
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-end
 
Retour d'experience projet AngularJS
Retour d'experience projet AngularJSRetour d'experience projet AngularJS
Retour d'experience projet AngularJS
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
SharePoint Framework : le développement SharePoint nouvelle génération
SharePoint Framework : le développement SharePoint nouvelle générationSharePoint Framework : le développement SharePoint nouvelle génération
SharePoint Framework : le développement SharePoint nouvelle génération
 
Visual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@NoumeaVisual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@Noumea
 

Non-regression testing in web app development

  • 1. Développement d’une
 application web Ecriture des tests
 de non-régression cedric.villa@gmail.comENVOL 2014
  • 2. Finalité • Garantir le 
 fonctionnement intégral d’une application web en production • Eviter les régressions
 lors de l’évolution de l’application cedric.villa@gmail.comENVOL 2014
  • 3. Manifest Agile « Notre plus haute priorité est de satisfaire le client
 en livrant rapidement et régulièrement
 des fonctionnalités à grande valeur ajoutée. » http://agilemanifesto.org/iso/fr/principles.html cedric.villa@gmail.comENVOL 2014
  • 5.
  • 6. Fonctionnement d’une web app cedric.villa@gmail.comENVOL 2014
  • 7. Architecture d’une web app Model View Controller requêtes réponses cedric.villa@gmail.comENVOL 2014
  • 8. Architecture d’une web app Model View Controller requêtes réponses tests unitaires tests d’intégration tests unitaires tests d’intégration tests d’intégration tests fonctionnels cedric.villa@gmail.comENVOL 2014
  • 9. La quête de la couverture totale On peut absolument TOUT tester (et cela cache un piège sournois) cedric.villa@gmail.comENVOL 2014
  • 10. Différents types de test Type Cible Domaine Tests fonctionnels Utilisateurs Fonctionnalités Test d’intégration Développeurs Inter-connexion des composants Tests unitaires Développeurs Architecture de l’application … … … cedric.villa@gmail.comENVOL 2014
  • 13. Vue en boîte noire Model View Controller requêtes réponses App APPLICATION tests fonctionnels cedric.villa@gmail.comENVOL 2014
  • 14. Test fonctionnels •Ce que l’utilisateur fait et voit •Test l’ensemble des couches de l’application cedric.villa@gmail.comENVOL 2014
  • 15. Exemple de scénario # Création d’un enregistrement par utilisateur lambda 1. Un utilisateur lambda s’authentifie sur l’application 2. Il accède à la page du formulaire 3. Il rempli 2 champs et valide le formulaire • Il doit voir un message de succès • Il doit voir son enregistrement cedric.villa@gmail.comENVOL 2014
  • 16. Simulation des scénarios par le navigateur cedric.villa@gmail.comENVOL 2014
  • 17. Simulation des scénarios par le navigateur cedric.villa@gmail.comENVOL 2014
  • 18. ‣ Lourd à utiliser 
 surtout à plusieurs et en production ‣ Attention au mode « enregistrement live »
 privilégier la sélection des composant
 par attributs HTML (classe, ID ou autre attribut) Simulation des scénarios par le navigateur cedric.villa@gmail.comENVOL 2014
  • 19. Moteurs de rendu « headless » Selenium, PhantomJS, Webkit, etc. • Simulations complètes sans navigateur « lourd » • En ligne de commande • Multi-environnement cedric.villa@gmail.comENVOL 2014
  • 20. Ecriture des scénarios dans un langage dédié (DSL) cedric.villa@gmail.comENVOL 2014
  • 21. Objectifs • Ecrire les tests dans un format compréhensible 
 par les acteurs concernés • Inclure les tests dans le SCM • Déployer en qualification
 (pas en production -> préserver intégrité) cedric.villa@gmail.comENVOL 2014
  • 22. Ecriture des scénarios dans un DSL
 (Cucumber, Gherkin, etc.) cedric.villa@gmail.comENVOL 2014
  • 23. Ecriture des scénarios dans un DSL
 (Cucumber, Gherkin, etc.) Etantdonné /^que je suis sur la page de connexion du wiki$/ do @browser.goto('http://example.com/start?do=login') end Quand /^je m'identifie en tant que "([^"]*)" avec le mot de passe "([^"]*)"$/ do |id, password| @browser.text_field(:name, 'u').set(id) @browser.text_field(:name, 'p').set(password) @browser.button(:value, 'Connexion').click end Alors /^je devrais voir "([^"]*)"$/ do |text| @browser.text.include?(text).should == true end ENVOL 2014 - Tests d’une web app
  • 24. Ecriture des scénarios dans un DSL • On écrit : • les scénarios (langage non technique) • les tests associés (code) • les jeux de données (code) • L’outil interprète et exécute l’ensemble des tests cedric.villa@gmail.comENVOL 2014
  • 25. Ecriture des scénarios dans un DSL
 (RSpec / JUnit / Jasmine / unittest / NUnit ) cedric.villa@gmail.comENVOL 2014
  • 26. Execution des tests en ligne de commande cedric.villa@gmail.comENVOL 2014
  • 27. Bonus : générer le cahier de recettes cedric.villa@gmail.comENVOL 2014
  • 29. Échouez tôt et échouez souvent. cedric.villa@gmail.comENVOL 2014
  • 30. Échouez tôt, échouez souvent • Une défaillance est plus facilement réparable
 juste après son apparition • Il vaut mieux être alerté par un indicateur,
 que par un utilisateur furieux. cedric.villa@gmail.comENVOL 2014
  • 32. Implémentation en 3 étapes Ecriture d’une spécification Faire réussir le test Vérifier le test échoue le test réussi tous les tests
 doivent passer coder améliorer cedric.villa@gmail.comENVOL 2014
  • 33. Bilan • Beaucoup d’aprioris • Finalement plutôt passionnant • Amélioration significative de la qualité globale
 (code + fonctionnement) • Plus aisé de partager
 (confiance en son code) cedric.villa@gmail.comENVOL 2014
  • 34. Références • http://betterspecs.org/fr/
 (bonnes pratiques tests RSPEC) • http://phantomjs.org/ 
 (headless web rendering) • http://shcatula.wordpress.com/2013/02/21/java-rspec- alternative/
 (alternative à RSPEC pour Java) • http://blog.octo.com/jai-limpression-decrire-mes-tests-en- double/
 (gestion doublons dans les tests) cedric.villa@gmail.comENVOL 2014