Il s'agit d'une initiation a l'utilisation des tests unitaires
La formation présentera les éléments suivants :
•Qu’est ce qu’un test ?
•Définition
•Quelques règles
•Avantage et intérêt
•Outil de test
•Cas à tester
•Les résultats
•Test Driven Development
•Mock
•Convention nommage
•Utilisation Junit
•Conclusion
Cette formation est proposée par ISEN Dev, un projet associatif étudiant de l'association Isen Engineering.
Elle est réalisé en 2013 par SAEZ Jonathan
Aujourd’hui, les tests sont devenu un élément crucial au cycle de développement logiciel, des sociétés ont investi dans la création d’un service interne de tests, rien ne peut être mis en production sans être validé par ce service.
Pour cela, cette présentation va mettre en évidence les fondamentaux de test logiciel à savoir: définitions, types, processus, méthodes, outils, principes, stratégies, jeux de test, etc.
Aujourd’hui, les tests sont devenu un élément crucial au cycle de développement logiciel, des sociétés ont investi dans la création d’un service interne de tests, rien ne peut être mis en production sans être validé par ce service.
Pour cela, cette présentation va mettre en évidence les fondamentaux de test logiciel à savoir: définitions, types, processus, méthodes, outils, principes, stratégies, jeux de test, etc.
Rédigé en Mars 2013
Comment automatiser les tests ?
Les différents types de tests automatisés : TU, BDD/TDD, GUI, TDC, Test de vie …
Méthodes d’automatisation
Capture/replay
Projet de développement
Techniques d’automatisation
Data driven
Keyword driven
DSTL
Composants technique pour l’automatisation
Oracle
Bouchon
Techniques de comparaison
Reporting
Objectif général : Prendre en main l’une des bibliothèques JavaScript les plus utilisés pour créer des interfaces utilisateurs
Objectifs spécifiques :
Découper l’interface utilisateur avec les composants;
Configurer les composants avec « props »;
Gérer l’état local d’un composant avec « state »;
Afficher une listes de composants avec map();
Afficher un composant en fonction de l’état de l’application;
Interagir avec un utilisateur grâce à la gestion des événements;
Interagir avec un utilisateur par le biais des formulaires;
Communiquer avec un serveur HTTP avec AJAX;
Afficher des vues en fonction de l’URL avec le routage;
Mettre en forme un composant;
Découvrez le framework web Spring Boot qui a la cote !
Apprenez comment son système d'auto-configuration fonctionne.
Live coding et exemple de migration vers Spring Boot sont de la partie.
Un cours d'initiation en Visual Basic.
Merci de me faire part de vos remarques et suggestions pour le parfaire et le perfectionner via mon email:
pr.azizdarouichi@gmail.com
Rédigé en Mars 2013
Introduction : ce que l’on va couvrir (et ne pas couvrir)
Définition : Qu’est-ce que l’automatisation des tests ?
Objectifs : Pourquoi automatiser ?
Couverture :
Qu’est-ce qu’on automatise ?
Pre et Post Process
Comment déterminer ce qu’on automatise ?
Responsabilité : Qui fait quoi?
ROI : Combien ça coute ?
Infrastructure de test
Processus d’automatisation
Conclusion
Le monde de l'informatique est divisé depuis toujours en deux univers : les personnes qui créent (Dev) et celles qui exploitent en production (Ops). Cette séparation peut générer stress et frustration. Les équipes n'ont pas l'impression d'aller dans le même sens et cela nuit à la productivité. Pour les réconcilier, un ensemble de pratiques et d'outils ont été imaginées: elles se cachent derrière le terme DevOps. Qu'est-ce que c'est exactement ? Quels problèmes est-ce que cela résout ? Quelle est la bonne approche pour le mettre en place? Nous vous proposons de découvrir notre vision sur ce sujet lors de cette session d'introduction.
Rédigé en Mars 2013
Comment automatiser les tests ?
Les différents types de tests automatisés : TU, BDD/TDD, GUI, TDC, Test de vie …
Méthodes d’automatisation
Capture/replay
Projet de développement
Techniques d’automatisation
Data driven
Keyword driven
DSTL
Composants technique pour l’automatisation
Oracle
Bouchon
Techniques de comparaison
Reporting
Objectif général : Prendre en main l’une des bibliothèques JavaScript les plus utilisés pour créer des interfaces utilisateurs
Objectifs spécifiques :
Découper l’interface utilisateur avec les composants;
Configurer les composants avec « props »;
Gérer l’état local d’un composant avec « state »;
Afficher une listes de composants avec map();
Afficher un composant en fonction de l’état de l’application;
Interagir avec un utilisateur grâce à la gestion des événements;
Interagir avec un utilisateur par le biais des formulaires;
Communiquer avec un serveur HTTP avec AJAX;
Afficher des vues en fonction de l’URL avec le routage;
Mettre en forme un composant;
Découvrez le framework web Spring Boot qui a la cote !
Apprenez comment son système d'auto-configuration fonctionne.
Live coding et exemple de migration vers Spring Boot sont de la partie.
Un cours d'initiation en Visual Basic.
Merci de me faire part de vos remarques et suggestions pour le parfaire et le perfectionner via mon email:
pr.azizdarouichi@gmail.com
Rédigé en Mars 2013
Introduction : ce que l’on va couvrir (et ne pas couvrir)
Définition : Qu’est-ce que l’automatisation des tests ?
Objectifs : Pourquoi automatiser ?
Couverture :
Qu’est-ce qu’on automatise ?
Pre et Post Process
Comment déterminer ce qu’on automatise ?
Responsabilité : Qui fait quoi?
ROI : Combien ça coute ?
Infrastructure de test
Processus d’automatisation
Conclusion
Le monde de l'informatique est divisé depuis toujours en deux univers : les personnes qui créent (Dev) et celles qui exploitent en production (Ops). Cette séparation peut générer stress et frustration. Les équipes n'ont pas l'impression d'aller dans le même sens et cela nuit à la productivité. Pour les réconcilier, un ensemble de pratiques et d'outils ont été imaginées: elles se cachent derrière le terme DevOps. Qu'est-ce que c'est exactement ? Quels problèmes est-ce que cela résout ? Quelle est la bonne approche pour le mettre en place? Nous vous proposons de découvrir notre vision sur ce sujet lors de cette session d'introduction.
Trop souvent tester son code se fait soit en fin de projet, soit pas du tout ; et correspond à une contrainte pour les développeurs. C’est pourtant à la fois un confort et une assurance dans la qualité et de son travail. A travers cette présentation, “tester c’est douter”, j’ai voulu provoquer l’envie de s’y mettre. Expliquer comment les tests amènent à remettre correctement son travail en cause.
Pour ce faire j’ai choisi une approche agnostique, n’évoquant ni les technos ni la manière de les utiliser.
J’ai privilégié de présenter plutôt la logique des tests :
Expliquer ce qu’est un test, les différents types et quand les utiliser.
Evoquer le pattern des tests doubles et différencier un mock d’un stub. Présenter une série de bonnes pratiques pour coder correctement ses tests et éviter les tests smells
Présentation d’un cas pratique pour appuyer la théorie
Présentation des patterns TDD et BDD pour introduire les tests au coeur de ces développements.
Le test, qu'il soit unitaire ou fonctionnel, est à la mode dans le monde du développement logiciel, suite entre autre à la mise en œuvre croissante des méthodes agiles et notamment de l'intégration continue ou des méthodes de développement telles que le TDD, le BDD ou la programmation par contrat. Récemment, ce phénomène a encore été amplifié au sein de la communauté PHP par l'apparition aux côtés de l'incontournable PHPUnit d'outils plus originaux tels que Behat, Praspel ou atoum qui permettent au développeur de rédiger des tests plus simplement. Pourtant, nous constatons tous les jours que le test conserve une grande part de mystère pour la plupart des développeurs, Bien souvent, ces derniers ne savent pas quoi tester, et encore moins comment écrire un test efficace ou mettre en place une politique de test pertinente. Certains s'interrogent par exemple sur la pertinence de leurs tests, se demandent s'il faut absolument tout tester, d'autres s'il est possible de tester la création d'un fichier, voir même s'il est intéressant de le faire, tandis que d'autres se demandent où se situe la frontière entre le test unitaire et le test fonctionnel ou s'il est nécessaire de tester toutes les méthodes d'une classe, alors que d'autres encore ne savent tout simplement pas par où commencer. Durant cette conférence, nous allons tenter, à l'aide de nos expériences respectives de créateur de framework de tests et de doctorat en informatique spécialisé dans le test, de répondre aux questions récurrentes que se pose une personne confrontée à la mise en place d'une politique de qualité logicielle en général et à l'écriture d'un test logiciel en particulier. À l'issue de cette foire aux questions didactique et interactive, vous devriez être capable d'aborder le test, indépendamment de sa nature, de manière plus sereine et efficace et produire ainsi un logiciel de la qualité que vous désirez.
S'il est facile de comprendre l'intérêt d'un code bien testé, la mise en œuvre de tests se heurte souvent au problème des dépendances du code testé : comment s'abstraire de ces dépendances ?
A travers une présentation pratique, où Stéphane Malbéqui, Yannick Ameur et Anthony Dahanne rencontreront et résoudrons plusieurs obstacles à la mise en oeuvre de tests untiataires, vous découvrirez à travers un cas concret la mise en œuvre de TDD !
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileDenis Voituron
Les projets Agiles imposent leurs propres défis aux équipes de test. Un projet Agile est souvent basé sur de multiples itérations, exploite un périmètre de développement incertain, travaille avec une documentation minimaliste. Rapidement, les Tests Unitaires se font sentir pour garantir des évolutions logicielles en douceur.
Lors de cette session, nous présenterons les concepts de base des tests unitaires, quelles en sont les implications et quels sont les sujets applicatifs à tester. Dans la seconde partie de cette session, nous présenterons, par des démonstrations en direct dans Microsoft Visual Studio, les 5 bonnes pratiques des Tests Unitaires intégrés dans un cycle de vie Agile.
Exemples sur https://github.com/dvoituron/SampleUnitTests
Talk présenté à BDX.IO
Alice rêve de tests à ajouter dans son application quand elle aperçoit le Lapin blanc soucieux de qualité. Partie à sa poursuite, elle se trouve propulsée dans un monde ressemblant étrangement à son code, et commence à faire apparaître de nombreux tests unitaires. Pourtant, le Lapin blanc est encore insatisfait ; lesdits tests se rebellent, deviennent incontrôlables et ne veulent plus vérifier ce qu'elle veut. Comment Alice va-t-elle réussir à reprendre la main sur les tests et les faire fonctionner correctement ?
À travers les aventures d'Alice, je vais vous présenter les pièges courants du testing qui découragent souvent les débutants, mais également les bonnes pratiques et des outils pour obtenir des tests fonctionnels et efficaces.
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
De nos jours de plus en plus d'entreprises ne jurent que par les tests unitaires. Faire du test, faire du test, faire du test ! “Une application n'est pérenne que si elle est testée et elle est testée si plus de 80% du code est couvert.”
Cela devient même un élément décisif du recruteur en entretien :
- Votre collaborateur a l'air vraiment bien mais... Il a déjà fait des tests unitaires ? Il a plus de deux ans d'expérience là dessus ?
- Juste sur deux projets, par contre il possède la bonne philosophie.
- Ah oui mais non il faut qu'il en ait fait 2 ans, c'est un minimum. On cherche des experts nous !
Problématique : "Je veux minimum 80% de couverture de code !!!" Qui n'a pas entendu cette phrase dans la bouche d'un chef de projet ou d'un lead dev trop consciencieux sans doute.
Dans certains projets un test unitaire est bon si il couvre au moins 80% de la fonctionnalité à tester, c'est tout ce qui est demandé et c'est cela qu'il faut avoir. Il est avant tout essentiel de s'interroger sur la notion de couverture de code dans un test unitaire : La couverture de code est-elle un but ? un facteur qualité ? une représentation visuelle d'un test ? Ou est-ce cet horrible fantôme qui vient hanter une application ?
Pour faire simple : un test qui couvre 100% du code à tester est-il forcement fiable ?
Conférence PHPTour Lyon 2014 - Tests unitaires - Je veux mes 80% de couverture de code !!!! http://afup.org/pages/phptourlyon2014/sessions.php#1094
2. SOMMAIRE
•
•
•
•
•
•
•
•
•
•
•
•
Qu’est ce qu’un test ?
Définition
Quelques règles
Avantage et intérêt
Outil de test
Cas à tester
Les résultats
Test Driven Development
Mock
Convention nommage
Utilisation Junit
Conclusion
1
3. QU’EST CE QU’UN TEST ?
Un test est un ensemble de cas à tester
éventuellement accompagné d'une procédure
d'exécution. Il est lié à un objectif.
Source : IEE
2
4. QU’EST CE QU’UN TEST ?
Il existe différents niveaux de test :
Test unitaire
Test d’intégration
Test de charge
Test fonctionnel
Test sécurité
….
3
5. TEST UNITAIRE : DÉFINITION
Un test unitaire est une procédure permettant de
vérifier le bon fonctionnement d'une partie
précise d'un logiciel. Il s’agit d’un code.
En POO on teste au niveau des classes
Pour chaque classe on a une classe de test.
4
6. TEST UNITAIRE : QUELQUES RÈGLES
Doit être isolé : il doit être indépendant
N’est pas un test de bout en bout : il agit que sur
une portion de code
Doit être déterministe : le résultat doit être le
même pour les mêmes entrées
Est le plus petit et simple possible
5
7. TEST UNITAIRE : QUELQUES RÈGLES
Ne teste pas d'enchainement d’action
Etre lancé le plus souvent possible : intégration
continue
Etre lancé le plus tôt possible : détection des bug
plus rapide
Couvrir le plus de code possible
Etre lancé a chaque modification
6
8. TEST UNITAIRE : AVANTAGE ET
INTÉRÊT
Garantie la non régression
Détection de bug plus facile
Aide a isoler les fonctions
Aide a voir l’avancement d’un projet (TDD)
7
9. TEST UNITAIRE : OUTIL DE TEST
PHP
JS
SQL
JAVA
PHPUnit
SimpleTest1
JSUnit
SQLUnit
JUnit
1 : Fonctionnement similaire a JUnit
8
10. TEST UNITAIRE : CAS A TESTER
Lors de l’utilisation de test unitaire on se doit de
tester différents cas.
Cas en succès : fonctionnement normal
Cas d’erreur : test sur la gestion d’erreur
Cas aux limites : test de la robustesse
9
11. TEST UNITAIRE : LES RÉSULTATS
Un test unitaire peux renvoyer 4 résultats
différents :
Success : test réussi
Error : erreur inattendue a l’exécution
Failure : au moins une assertion est fausse
Incomplete / skipped ( à éviter)
10
12. TEST UNITAIRE : TDD
On peut piloter un projet par les test (Test Driven
Development). On voit l’avancement du projet par
l’avancement des test validés.
Pour cela on réalise les test avant le code.
A ce moment le test échoue, on implémente le code
et pour qu’il se valide.
Rédaction des
tests 1 et 2
Code pour faire
valider le test 2
Code pour faire
valider le test 1
11
13. TEST UNITAIRE : MOCK
Quelques fois un test a besoin d’un composant pour
s’exécuter.
Par exemple pour tester le parseur XML il faut du
XML et dans l’application le XML provient
d’internet. Il est alors utile d’utiliser des bouchons
(MOCK) pour isoler le test.
De plus un bouchon permet de tester tout les cas
(valeur correcte, erroné etc.)
12
14. TEST UNITAIRE : CONVENTION NOMMAGE
Il est recommandé d’utiliser une même convention
de nommage pour tout les test unitaire. Par
exemple
test[nomMethode][cas][resultat/comportementAttendu]();
Préfixe
souvent imposé
13
15. TEST UNITAIRE : UTILISATION DE JUNIT
Il n'y a pas de limite au nombre de tests au sein de notre classe
de test.
On écris au moins un test par méthode de la classe testée.
Pour désigner une méthode comme un test, il suffit d’utiliser
l'annotation @Test (a partir de JUnit4).
14
16. TEST UNITAIRE : UTILISATION DE JUNIT
Au sein des tests on utilise des assertions pour valider ou non un
test. Quelques assertions indispensable :
Assertion
Action
assertEquals()
Vérifie l’egalité entre deux entités
assertNotEquals()
Vérifie l’inégalité entre deux entités
assertFalse()
Vérifie que la valeur fourni en
paramètre est fausse
assertTrue()
Vérifie que la valeur fourni en
paramètre est vrai
assertNull()
Vérifie que la valeur fourni en
paramètre est l’objet NULL
assertNotNull()
Vérifie que la valeur fourni en
paramètre n’est pas l’objet NULL
15
17. TEST UNITAIRE : UTILISATION DE JUNIT
Nous allons écrire un classe de test très simple.
1 : import pour les assertions
2 : import de Junit
7 : test 1 portant sur la somme
10 : assertion ok si les deux
parties sont égales
14 : test 2 portant sur le début
d’une chaine
16 : assertion ok la méthode
renvoie la valeur vrai
16
18. TEST UNITAIRE : CONCLUSION
Il est donc fortement conseillé d’utiliser les test unitaire
au sein de vos projets :
• Pour éviter les régressions
• Valider son code
• Voir l’avancement d’un projet
17