📘

Les tests

Objectif —> Ă©viter les bugs

Mais comment faire ? MaĂźtriser les processus d’ingĂ©nierie du logiciel :

La rĂšgle 40-20-40 identifie qu’en moyenne, 40% de l’effort est requis pour spĂ©cifier et concevoir, 20% va Ă  la programmation et 40% va aux tests de vĂ©rification (”le systĂšme fait-il correctement son travail ?”) et de validation (”le systĂšme rĂ©alisĂ© correspond-il aux besoins du client ?”).
â„č
La norme ISO 9126 sur la Qualité Logicielle définit 6 groupes de facteurs de qualité des logiciels ~FURPSE - Functionality - Usability - Reliability - Performance - System maintainability - Evolutivity
📌
Pour aller plus loin : https://sites.lesia.obspm.fr/emmanuel-grolleau/files/2016/07/Master_OSAE_Cours_Tests_Grolleau.pdf —> Nombre d’informations dans cette note sont tirĂ©es de ce pdf.

Définition

Un test est un ensemble de cas à tester (état de l'objet à tester avant exécution du test, actions ou données en entrée, valeurs ou observations attendues, et état de l'objet aprÚs exécution), éventuellement accompagné d'une procédure d'exécution (séquence d'actions à exécuter). Il est lié à un objectif.

On distingue deux scĂ©narios : positif (ça marche) et nĂ©gatif (ça ne marche pas mais ce n’est pas un bug).
â„č
En pratique : on choisit un traitement Ă  tester, on dĂ©finit en amont le rĂ©sultat attendu, on compare le rĂ©sultat obtenu Ă  celui-ci. Si les deux sont identiques, alors c’est bon, sinon il y a un bug qu’il faut corriger.

Grands principes de test

  1. Indépendance ~ un développeur ne teste pas ses propres programmes
  1. Paranoïa ~ ne pas faire de tests avec l’hypothùse qu’il n’y a pas d’erreur
  1. PrĂ©diction ~ dĂ©finir les rĂ©sultats attendus avant l’exĂ©cution des tests (plan de test)
  1. VĂ©rification ~ sĂ©parer l’exĂ©cution et l’analyse : inspecter minutieusement les rĂ©sultats de chaque test
  1. Robustesse ~ écrire les jeux de tests pour des entrées invalides/incohérentes mais aussi pour des entrées valides
  1. ComplĂ©tude ~ vĂ©rifier qu’un logiciel rĂ©alise ce qu’il est supposĂ© faire mais aussi ce qu’il fait en dehors de ce qu’il est supposĂ© faire

Classification des tests


Exemple de représenation des différents types de tests (schéma issu de https://www.slideshare.net/bilelabed/test-de-logiciels-i)
📌
Pour aller plus loin : https://www.slideshare.net/bilelabed/test-de-logiciels-i —> DĂ©finition de chaque test.

Selon le cycle de vie

📌
Pour aller plus loin : https://www.cftl.fr/ —> Le ComitĂ© Français du Test Logiciel identifie 4 niveaux de tests.

Selon la nature de la connaissance

Selon la qualité

Autres classifications

â„č
Les tests peuvent Ă©galement ĂȘtre reliĂ©s aux facteurs de qualitĂ© de logiciel FURPSE : - Functionality test fonctionnel, test de vulnĂ©rabilitĂ© (sĂ©curitĂ© du logiciel) - Usability test utilisateur - Reliability test de robustesse - Performance test de performance - System maintainability test de non-rĂ©gression - Evolutivity test sur diffĂ©rents OS
⚠
On peut voir le processud de test comme un projet Ă  part entiĂšre.

Intégration continue


L'intégration continue est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l'application développée.

Elle nécessite une automatisation de la compilation et des tests ainsi que certains prérequis :

Avantages : test immĂ©diat des modifications, notification rapide en cas de code incompatible ou manquant, dĂ©tection des problĂšmes d’intĂ©gration pour une rĂ©paration rapide (et pas de problĂšmes de derniĂšre minute), une version est toujours disponible pour un test, une dĂ©monstration ou une distribution.
⚙
Exemples de framework d’automatisation des tests : - Java : Junit, TestNG - C++ : CPPUnit, doctest - Python : Pytest, unittest (Pyunit), Nose
📌
Pour aller plus loin : https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
⚙
Exemples d’applications de suivi des anomalies et demandes de modification : - JIRA, Redmine, Bugzilla, Mantis, Module “issues” de GitHub

Développement piloté par les tests (TDD)


Le Test Driven Development est une technique de dĂ©veloppement de logiciel qui prĂ©conise d’écrire les tests unitaires avant d’écrire le code source d’un logiciel.

La logiques des tests poussĂ©e Ă  l’extrĂȘme.
📌
Pour aller plus loin : http://www.extremeprogramming.org/