Tester son code

Le but 


Ici, nous allons essayer de comprendre l'intérêt d'effectuer des tests sur ces codes ainsi que la meilleur façon de mettre en oeuvre ces derniers.

Le Test Driven Development, TDD


Le Test Driven Devlopment vient de l'anglais et signifie developement piloté par les tests. Concretement, cela revient à effectuer ces tests avant et/ou pendant le developement de son logiciel. 
Ecrire les tests en premiers à plusieurs avantages : 
- Trouver directement la source du problème
- Etre sur que le code fonctionne correctement et est testé à son maximum. 
- Permet d'eviter des modifications de codes inutiles
Pour effectuer ces tests en TDD, voici la "marche à suivre" :

Cependant, il ne faut pas user et abuser de ces dernieres car des tests de maivaises qualité et/ou effectuer trop rapidement n'aiderons pas le bon développement de son logiciel. De plus, il ne faut pas ce laisser aveugler par le TDD sinon il se pourrait qu'à trop se concentrer sur des tests, on ne remarque pas des points importants.
Comme tout autre méthodes, il faut utiliser les TDD de manière saine et ne pas en appliquer partout en croyant que cela est une solution miracle !

  • Nous allons dans ce point essayer de comprendre l'intérêt et la mise en place de tests unitaire dans nos codes.

    Les tests unitaires c'est quoi ?

    Les tests unitaires sont des tests du plus bas niveau, c'est à dire que ces derniers s’effectuent exclusivement sur une classe et chaque test va tester une méthode de notre classe. La construction de ce dernier est importante car si ce test réussi, un développeur n'ayant pas codé ce test fera confiance au travail de son collègue et se dira par conséquence que la méthode est correcte. Donc dans le cas où la méthode n'est pas correcte, le développeur cherchera à comprendre pourquoi la méthode ne fonctionne pas alors que le problème se situe dans le test. 

    Comment concevoir un test unitaire

    Pour concevoir un test, il faut remplacer son programme. Ce que je veux dire par la c'est qu'il va falloir exécuter les différentes actions que le programme exécute comme ce que ce dernier devrait faire pour pouvoir ensuite savoir la valeur de retour du programme. Il nous suffit alors de tester si le programme trouve la même valeur de retour que nous et si ce n'est pas le cas, alors il y a un problème dans le code. Il faudra donc corriger le code.

    La mise en place du test unitaire

    unitaire

     

    Pour la mise en place des tests unitaire, nous allons utiliser un exemple commenté. Normalement la seul lecture de cette exemple devraint vous faire comprendre comment fonctionne les tests unitaires. 
    Pour vérifier que la valeur de retour correspond ou non à la valeur attendu, on utilise des assert. Il existe différents type d'assert : 

    • assertEquals("negation", valeur1, valeur2); compare si valeur1 et valeur2 sont égaux
    • assertNotEquals("negation, valeur1, valeur2); compare si valeur1 et valeur2 ne sont pas égaux
    • assertTrue("negation", boolean); si le boolean est faux le test renvoie "negation"

    Il existe d'autre type d'assert mais nous nous arretons la, pour plus d'informations vous pouvez consulter ce lien : http://junit.sourceforge.net/javadoc/org/junit/Assert.html

     

  • Nous allons dans ce point essayer de comprendre l'intérêt et la mise en place de tests d'intégration dans nos codes. 

    Les tests d'intégration c'est quoi ?

    Les tests intégration sont des tests qui permettent de tester l'intégration de nos différentes parties de notre programme. Ces derniers sont complémentaire aux test unitaires et vont vérifier que les liens entre les classes se font correctement.
    Il extiste 4 différents type de tests d'intégration :

    • Top-Down / Descendente
    • Bottom-Up / Ascendente
    • Big-Bang
    • Mixte 

    Les avantages et incovénients des différents type de tests

    Pour étudier les avantages et inconvénients des différents type, nous l'appliquerons aux cas ci-dessous.

    Le Top-Down

    L'approche Top-Down permet de détecter directement des défauts majeurs d'architecture mais cela implique certains problèmes comme la création de bouchons ainsi qu'un effort de simulation des composants absents. Il y a aussi un autre problème, les couches de basse sont testé tardivement.

    Le Bottom-Up

    L'approche Bottom-Up permet d'avoir directement les composants de plus bas niveau le mieux testé. C'est aussi une démarche qui nous vient naturellement et qui peut être construite en parallèle de l'avancé du projet. Mais de ces avantages découlent aussi ces inconvénients comme la détection tardive d'erreurs majeurs et une dépendance des composants.

    Le Big-Bang

    L'approche Big-Bang consiste à intégrer tous les composants en une seule étape. On parle alors d'intégration massive. Une telle intégration amène diverse problème comme une difficulté de repère la cause d'erreur, des oublies de tests du fait d'une intégration massive ainsi que devoir attendre la fin de l'ensemble des codes avant de pouvoir commencer l'intégration.

    Mixte

    L'approche mixte est un mélange de l’approche Bottom-Up et Top-Down. Cela permet d'avoir les avantages du Bottom-Up ainsi que de permettre de tester les classes les plus critiques en premier. Cependant, cette approche est complexe car il faut concilier les deux approches Bottom-Up et Top-Down.

    Mise en place des tests d'intégrations

    Tout comme les tests unitaires, nous allons utilisé un exemple commenté pour approché la logique des tests d'intégration. intégration

  • En ce qui concerne la couverture de tests, cela représente si nos tests couvrent la globalité de nos codes ou non. Ici nous parlerons de la couverture des tests d'intégration. Voici une capture d'écran montrant la couverture des tests d'un programme. 

    TestCouverture

     

     

    On peut voir que les tests de ce programme couvrent 71.1 % de ce dernier. Cela est un très bon taux de couverture de test, pourquoi ? Car lorsque l'on test nos différentes classes, il faut passer dans chaque cas pour pouvoir tester une méthode à 100%. Cela signifie que pour tester une seule méthode à 100%, il faut que l'on doivent passer dans toutes les boucles de if, else, les case des switch...

S'évaluer 


Quiz

Un test unitaire permet de tester ?

Quelle méthode n'existe pas ?

Combien y a-t-il de types de tests d'intégration ?

Quel proposition n'est pas un type de test d'intégration ?



Votre note :