$30 off During Our Annual Pro Sale. View Details »

Outils et pratiques : tester une application web moderne

Outils et pratiques : tester une application web moderne

Introduction aux pratiques de testabilité logicielle : types de tests, outils. Présentation aux Rencontres Mondiales du Logiciel Libre 2014.

Vidéo : http://video.rmll.info/videos/tester-une-application-web-quels-outils-et-quelles-pratiques/

Jean-François Lépine

July 08, 2014
Tweet

More Decks by Jean-François Lépine

Other Decks in Programming

Transcript

  1. 1 / 33
    Outils et Pratiques :
    Tester une application web moderne
    par Jean-François LÉPINE

    View Slide

  2. En face de vous

    Jean-François LÉPINE

    Consultant technique chez Alter Way

    @Halleck45

    http://blog.lepine.pro

    View Slide

  3. 3 / 33
    Rappel :
    Qu'est-ce qu'un test ?

    View Slide

  4. En quête de Satisfaction

    Tester est une recherche de
    Satisfaction

    Du client

    Des équipes

    La Qualité est un gage de réussite
    Wayan Vota (www.flickr.com)

    View Slide

  5. Éliminer les Défauts

    On cherche à éliminer les états indésirables (defects)

    Les bugs ne sont qu'un type d'états indésirables parmi d'autre

    View Slide

  6. Éliminer les Défauts

    On cherche à éliminer le plus tôt possible les états indésirables (defects)
    Analyse Conception Développement Recette Maintenance
    0
    20
    40
    60
    80
    100
    120
    1 € 2 €
    7 €
    15 €
    100 €
    Coût relatif des défauts
    source : Gartner / IBM Systems Sciences Institute, 2003
    Phase du projet durant laquelle le défaut est détecté
    Coût

    View Slide

  7. 8 / 33
    Testabilité &
    Qualité

    View Slide

  8. Niveaux de qualité
    Utilité
    Pertinence
    Exactitude
    Interopérabilité
    Sécurité
    Conformité
    Fiabilité
    Tolérance aux pannes
    Facilité de récupération
    Facilité
    d'utilisation
    Facilité de compréhension
    Facilité d'apprentissage
    Facilité d'exploitation
    Pouvoir d'attraction
    Rendement
    Utilisation des ressources
    Performance
    Maintenabilité
    Facilité d'analyse
    Facilité de modification
    Stabilité
    Testabilité
    Portabilité
    Facilité d'adaptation
    Facilité d'installation
    Coexistence
    Interchangeabilité

    View Slide

  9. Comment régler le curseur ?
    Vies humaines en jeu
    Fiabilité Exactitude Testabilité
    Longue durée de vie
    Maintenabilité Évolutivité Portabilité
    Temps réel
    Efficacité Exactitude Fiabilité
    Informations sensibles
    Intégrité Fiabilité
    ...
    ... ... ...

    View Slide

  10. Tests fonctionnels

    Tests unitaires / composants

    le composant a t-il des défaillances ?

    Tests unitaires

    View Slide

  11. Tests fonctionnels

    Tests unitaires / composants

    le composant a t-il des défaillances ?

    Tests unitaires

    Tests d'intégration :

    les échanges entre composants ont-ils des défaillances ?

    Interfaçage des composants

    View Slide

  12. Tests fonctionnels

    Tests unitaires / composants

    le composant a t-il des défaillances ?

    Tests unitaires

    Tests d'intégration :

    les échanges entre composants ont-ils des défaillances ?

    Interfaçage des composants

    Tests système :

    le logiciel fait-il ce qui était attendu ?

    Tests fonctionnels, boîte noire, tests extra-fonctionnels

    View Slide

  13. Tests fonctionnels

    Tests unitaires / composants

    le composant a t-il des défaillances ?

    Tests unitaires

    Tests d'intégration :

    les échanges entre composants ont-ils des défaillances ?

    Interfaçage des composants

    Tests système :

    le logiciel fait-il ce qui était attendu ?

    Tests fonctionnels, boîte noire, tests extra-fonctionnels

    Tests d'acceptation (UAT)

    Le logiciel répond t-il au besoin ?

    View Slide

  14. 15 / 33
    Tests fonctionnels

    View Slide

  15. Tests de composants

    Vérifier que le composant, dans un contexte donné et isolé, réagit de la
    manière attendue

    Tests unitaires

    PHP : PHPUnit, atoum

    Java : Junit

    Javascript : Karma, Qunit

    View Slide

  16. Comment vérifier les tests ? 1/2

    Tests de mutation

    PHP : MutaTesting https://github.com/Halleck45/MutaTesting

    Java : PiTest http://pitest.org

    Javascript : Mutandis https://github.com/saltlab/mutandis

    On modifie des parties du code source (mutations) et on vérifie que les
    tests unitaires correspondants ont détecté ces changements

    Si je remplace « a + b » par « a - b », le test unitaire doit planter

    View Slide

  17. Comment vérifier les tests ? 2/2

    View Slide

  18. Tests systèmes

    Le logiciel fait-il ce qui était
    attendu ?

    Tests fonctionnels

    On test la conformité aux spécifications
    (contractuelles)

    PHP : PHPFit
    http://sourceforge.net/projects/phpfit.berlios

    Java : FIT, FitNesse
    http://fit.c2.com

    Fort investissement technique

    View Slide

  19. UAT1/3

    Le logiciel répond t-il au besoin ?

    Tests de comportement

    PHP :Behat http://behat.org

    Java : Jbehave http://jbehave.org

    JavaScript : Jasmine Species http://rudylattae.github.io
    Scénario : retirer de l'argent avec une carte périmée
    Etant donné que je suis client de la banque
    Et que ma carte de crédit est expirée
    Quand je tente de retirer de l'argent retirer de
    l'argent au distributeur
    Alors je ne dois pas recevoir d'argent
    Et ma carte doit être aspirée
    Scénario : retirer de l'argent avec une carte valide

    View Slide

  20. UAT 2/3

    View Slide

  21. UAT 3/3

    View Slide

  22. 23 / 33
    Tests extra-fonctionnels

    View Slide

  23. Tests de vérification

    Le logiciel est-il bien fait ?

    Tests statiques

    PHP : PhpMetrics http://github.com/Halleck45/PhpMetrics

    Java : Jhawk www.virtualmachinery.com/jhawkprod.htm

    JavaScript : JsComplexity http://jscomplexity.org

    Types de métriques :

    Nombre de bugs estimés

    LCOM

    Indice de maintenabilité

    ...

    View Slide

  24. PhpMetrics

    View Slide

  25. Tests d'interface

    Comparent des captures d'écran de vos applications

    Huxley https://github.com/facebook/huxley

    PhantomCSS https://github.com/Huddle/PhantomCSS

    Wraith https://github.com/BBC-News/wraith

    View Slide

  26. Tests de charge / stress

    Contrôlent la
    résistance de votre
    application

    Tsung

    Funkload

    Gatling...

    View Slide

  27. Tests d'exécution

    Contrôlent que votre application est optimisée

    Grunt-yslow https://github.com/andyshora/grunt-yslow

    BumbleTest http://bbltest.sourceforge.net

    WebPageTest http://www.webpagetest.org

    View Slide

  28. Tests de singe

    Réalisent des actions illogiques pour tenter de provoquer des erreurs

    Gremlins.js https://github.com/marmelab/gremlins.js

    View Slide

  29. 30 / 33
    Conclusion

    View Slide

  30. Conclusion

    Tester = rechercher les états indésirables

    Il faut bien choisir le niveau de test adapté :

    Coûts

    Besoin

    Capacité

    View Slide

  31. Conclusion

    Une très grande partie des tests peut être automatisée

    Il n'y a pas d'excuse valable pour ne pas tester.

    Il n'y a pas d'excuse valable pour ne pas tester !

    Il n'y a PAS D'EXCUSE VALABLE pour ne pas tester !

    View Slide

  32. Questions

    Jean-François Lépine

    @Halleck45

    http://blog.lepine.pro

    Merci !

    View Slide