Les différents types de test
Ci-dessous la liste des types de tests pouvant être mis en œuvre par une équipe de recette. J’aborderai cet article par le biais des fameuses « boites blanches et noires ».
1.1- Boite blanche
Quelques exemples de tests « boite blanche » : tous les chemins ont été parcourus au moins une fois, les conditions vrai / faux ont été validées, les boucles sont exécutées correctement. Mais aussi les valeurs limites sont correctement définies, les structures de données internes sont valides et s’il n’y a pas de fuite de mémoire, etc.
1.1.1- Revue de code
Il s’agit donc de relire le code, ce qui implique de passer en revue des milliers de lignes en Java ou en C par exemple. Pour ce faire il existe de nombreux outils permettant de le faire de manière quasi automatisée.
Ainsi, on insère dans l’outil les normes de codages et leurs gestions. Puis, l’outil parse, (langage métiers décrivant l’activité de passer en revue des lignes de code par exemple), les applications pour afficher un rapport mettant en évidence les anomalies.
La revue de code devient de plus en plus une étape à part entière dans tout processus de développement logiciel et y compris dans les méthodes dites agiles comme l’Extreme programming.
Des exemples type d’activités lors d’une revue de code peuvent être la vérification des règles de programmation ou bien la vérification de la conformité du code par rapport au document de conception technique détaillée.
1.1.2- Tests Unitaires
Ils sont mis en œuvre pour démontrer que chaque module (classe, boucle, etc.) effectue toute la fonction prévue et seulement cette fonction. On peut distinguer dans ces tests unitaires les tests de logique (recherche d’erreur, vérification de l’enchaînement correct des branches parcourues). Ainsi que les tests de calcul (vérification des résultats des calculs, des performances, de l’exactitude des algorithmes).
L’outil le plus répandu pour exécuter les tests unitaires est Junit (en contexte Java).
1.1.3- Tests d’intégration – avec “vision développeur”
Ils sont mis en œuvre pour démontrer que chaque module (classe, boucle, etc.) effectue toute la fonction prévue et seulement cette fonction.
1.1.4- Tests de charges
Lors des tests de performance (temps de réponse, durée de traitement) il faut vérifier que les performances du logiciel sont conformes aux exigences dans différentes conditions (mode normal ou dégradé) :
Exemple : s’il est prévu qu’un site Web soit consulté simultanément par 500 utilisateurs, les pages doivent s’afficher en moins de 2 secondes.
Lors des tests de charge il s’agit de mesurer le comportement du système et de ses limites face à un environnement d’exploitation limite en simulant plusieurs sessions simultanées et / ou une volumétrie de données pour contrôler le maintien des performances.
Les tests de surcharge on pour but d’appréhender le fonctionnement et les défaillances du système en cas de surcharge (au-delà des limites de charge).
Les tests avec un système en mode dégradé vérifie la stabilité du système : réaction en dehors des cas normaux d’utilisation (doublons, fichier vide, sélection vide, format de saisie erronée…).
Mes retours d’expériences montrent que 100% du temps les tests de charge sont assimilés à des tests de performances. Ceux-ci sont décrits ci-dessous.
D’une façon générale les tests de performances et de charges permettent de répondre à un certain nombre de questions comme « quels sont les risques de problèmes de performances en production ? », « est-ce que les applications et l’infrastructure supportent le nombre d’utilisateurs attendus ? », « comment mesurer la charge/qualité de service rendu en rapport avec les moyens et les objectifs ? », ou bien « les temps de réponse de l’application pour les n utilisateurs simultanés sont-ils conformes au cahier des charges ? ».
Les tests de charges peuvent s’effectuer à plusieurs moments du cycle de vie des projets comme :
au début du projet pour analyser le comportement d’une solution envisagée : progiciel à intégrer, prototype, afin d’identifier les limites de la solution, les problèmes potentiels de charge et de dimensionner les architectures matérielles en fonction de la charge évaluée dans le temps (capacity planning), en cours de projet pour tester le comportement dynamique de la solution en fabrication sur les problèmes d’inter-blocage, de consommation de ressources et de gestion mémoire, en fin de projet pour valider la solution définitive, pour vérifier ses caractéristiques de performance et identifier la capacité réelle et les comportements face à la montée en charge et aux pics d’utilisation. Ces tests permettent aussi d’optimiser l’architecture finale en ajustant les paramètres systèmes, en enfin en phase de maintenance, pour vérifier la non-régression des caractéristiques de performance de la solution et identifier sa capacité et ses comportements face à l’évolution des montées en charge et des pics d’utilisation.
Un processus typique de tests de charge comporte quatre à cinq phases avec des pré-requis à vérifier.
Les pré-requis à vérifier concerne la campagne de test de charge, qui n’est réalisable que sur la base d’une application stable et validée lors d’une phase de recette fonctionnelle et technique préliminaire.
Avant d’effectuer les tests de performance de l’application, les opérations suivantes doivent être effectuées et validées : la machine doit être disponible avec fourniture d’un accès (utilisateur / mot de passe), générique ou pas, sur l’environnement applicatif et logiciels (NT, Oracle, autorisations réseaux, etc.), l’application installée et disponible (techniquement, fonctionnellement et sur le plan de l’intégration et recette) avec fourniture d’un accès (utilisateur / mot de passe) et de jeu de données. Mais il faut également avoir une application en état de marche et stable, dans une configuration iso-production de préférence et/ou proche de la réalité et les liens avec les autres applications en état de marche et disponibles.
La nature et le volume de données présentes en base doivent être identiques et/ou proche de la production. De plus l’application doit être accessible depuis la plate-forme de test de charge.
Les quatre phases classiques lors des tests sont :
1- Pré-étude et lancement :
2- Préparation des tests et développement des Scénarios :
Cette étape porte sur les éléments à installer afin de constituer l’environnement de test.
La phase de développement concerne la construction des scripts de tests et des scénarios spécifiés lors de la phase précédente. Cette phase se décompose de la façon suivante :
- enregistrement des scripts,
- paramétrage des scripts,
- validation des scripts par les MOE / MOA (parfois),
- rodage des scripts,
- étalonnage des scripts.
3- Campagne de tests : Exécution – Analyse, Rapport – Synthèse, Correction, Test de confirmation :
4- Bilan :
Au final, les résultats décrivent les tests, l’analyse, les améliorations de l’application et le statut des objectifs. Ce rapport est généré après l’exécution de l’ensemble des tests.
Le cycle de test peut être itéré plusieurs fois pour prendre en compte les évolutions du système.
1.1.5- Tests de sécurité
1.1.6- Tests d’exploitabilité
On comprend dans le schéma ci-dessous que les scénarios de test d’exploitabilité débutent au téléphone mobile d’un client pour finir à l’entrée du S.I. du fournisseur d’accès. En passant par toutes les couches réseaux, supervisions, etc.
Il y a également parfois des tests de performance qui sont exécutés.

1- Types de test
Figure : Périmètre des tests d’exploitabilité chez un opérateur telecom français
Figure (illustration à venir) : Activités de test de type exploitabilité chez un opérateur telecom français.
Quelques autres exemples de test faisant partie de ceux d’exploitabilité :
- analyse du dossier d’exploitation,
- mise en place de la configuration plate forme, configuration ordonnancement JCL,
- vérifier le respect des normes d’exploitation,
- la mise en place de l’ordonnancement des Job et flux de données,
- la supervision (Unix Tivoli, MVS Autosys),
- scénario de chronologie,
- jeu de donnée batch, cas d’alerte,
- simulation des dossiers d’exploitation, message d’alerte, log,
- vérification des logs,
- tests de sauvegarde, restauration, chaud, froid, incrémentale, hebdo, etc.
Ce type de test aborde de très nombreuses particularités et sera le sujet d’un prochain article.
1.2- Boite noires
Les tests boîte noire sont liés aux spécifications fonctionnelles. Indépendamment de la structure interne de l’application (contrairement aux tests boîte blanche), ils valident les fonctionnalités de l’application. Comme le fonctionnement interne de l’application n’est pas connu, le concepteur de jeux de test doit définir le comportement attendu (Résultat Attendu – RA) et vérifier si l’application est conforme à ce comportement (Résultat Obtenu – RO).
Les tests de type boîte noire sont des tests fonctionnels mis en œuvre dans la phase de recette, ils ont pour objectifs de rechercher ou de valider le respect des exigences, les fonctions incorrectes ou manquantes. Mais aussi les incohérences au niveau de l’interface, les erreurs d’accès aux données et enfin les conditions initiales ou finales d’une fonction.
1.2.1- Tests fonctionnels
Les tests de recette fonctionnelle vérifient que le logiciel fonctionne de manière adéquate dans le cadre des activités-métier des utilisateurs pendant la recette fonctionnelle, on n’examine pas la programmation du logiciel, mais son comportement fonctionnel et son ergonomie (IHM et navigation) ainsi que le ou les cahiers des charges (et le cas échéant d’autres supports tels que manuels utilisateur, modélisation des données…).
Les tests conduisent à simuler le fonctionnement du logiciel au travers de cas d’utilisation. Il est nécessaire de disposer de cas concrets du domaine d’application et de données pour simuler un contexte réel d’utilisation (jeux de données, environnement de test).
Les tests vérifient les aspects du métier (fonction métier) avec les fonctionnalités non conformes ou manquantes et le fonctionnement des règles de gestion.
Les tests fonctionnels prennent aussi en compte l’ergonomie. Il s’agit des comportements utilisateurs (valeurs limites, valeurs non autorisées…), de la réalisation et la présentation des écrans ou des règles de navigation, etc.
1.2.2- Tests de non régression
Tout re-tester serait trop coûteux et ne tester que les modifications du composant impliquerai de nombreux risques.
Il faut donc trouver un compromis et définir une stratégie de non régression (ou TNR). Ces tests de non régressions doivent être prévus après toute modification d’un logiciel afin de vérifier que les fonctionnalités existantes n’ont pas été altérées par les modifications apportées. Il est en effet indispensable que l’existant continue à fonctionner avec le même niveau de qualité que sur la version précédente.
Pratiquer un test de non régression signifie que le reste de l’application n’a pas perdu en fonctionnalité ou en fiabilité du fait de l’ajout de nouvelles fonctions ou de modification des fonctions existantes. Ils consistent à déterminer si des défauts ont été introduits dans l’application lors de l’implémentation de la nouvelle fonctionnalité. Ils peuvent également être employés lors de changements survenus dans l’environnement de l’application.
Les tests de non régression sont applicables à toutes les phases de test. En effet, la prédiction des erreurs permet de déterminer la portée et l’étendue des tests et de s’assurer de l’état du système modifié.
Si les tests de non régression accompagnent les différentes étapes du cycle en V, ils conviennent particulièrement aux dernières étapes. Ainsi, ils sont habituellement effectués dans le cadre de tests système de recette ou d’intégration.

Figure : Illustration de ce que sont les Tests de Non Régression
Exemple – ARIANE 501
Le 4 juin 1996 lancement d’ARIANE 501 et quelques secondes après le lancement l’auto destruction est prononcée. Fin d’ARIANE 501 (environ 500 M€).
Pourquoi ?
Après analyse il s’avère que des mauvais choix ont été effectués lors de la définition de la stratégie des tests de non régressions. En effet, des composants d’ARIANE 4 ont été réutilisés mais non testés car « Ils fonctionnaient parfaitement avant ! ».
(Source IEEE Computer 01/97)
Exemple – MOE E_F projet xxx
1.2.3- Etude de cas pour illustration :
Enjeux stratégiques : Ouverture du marché en 2007 – assurer la montée en compétence de l’équipe – définir la méthodologie et outil dédié aux activités de recette
Réalisation : Audit des activités de recette de la MOE (fondamentaux projet, processus et moyens de recette sur VABF) > Préconisations > plan d’actions > Formations > Accompagnements chef de projet et analystes.
Gain client : Formation et accompagnement de ses équipes – professionnalisation des activités de recette – maîtrise accrue de la qualité – pilotage dédié à la recette – respect des engagements intégrateurs
Technologies : Portail – Progiciel L_r – Batch – Flux – Business Intelligence (B.O.)
Exposition du cas : Plus près de nous, en 2007, lors d’une mission de conseils chez E_F j’ai mis en place la stratégie de tests de non régression suivante.

Figure : Se situer dans les étapes de tests
Non régression manuelle :
Il a fallu recueillir les plans de tests des autres acteurs comme le groupement (intégrateur type TMA) et de la MOA. Puis de rédiger ceux de la MOE collectant les informations :
- des tests de non régression du groupement,
- des tests de non régression de la MOA.
Il a fallu rédiger la synthèse et l’analyse des informations sur les conceptions des tests de non régressions MOE via des :
- tests des fonctionnalités et flux primordiaux,
- tests de l’IHM L_R (menu…),
- tests des courbes de charge, graphiques, rapports.
Non régression automatisée :

Figure : Automatisation des tests de non régression – « Voie royale »
Ensuite, (après choix des automates et validation du client), un projet dit « pilote » utilisant les plans de tests de non régressions rédigés en amont peuvent être défini et joué.
Puis, après la lecture et l’analyse des rapports de test cette phase d’automatisation a été validée.
Etat des lieux :
- cellule MOE : aucun cahier de recette prévu pour les TNR – TNR joué « à la volée »,
- cellule MOA : un cahier de recette avec 3 scénarios mais très incomplet,
- équipe Métiers : aucun d’existant – TNR joué « à la volée ».
En collaboration avec la cellule MOE nous avons dressé un tableau listant les avantages à mettre en place cette stratégie de TNR. Avantages pour les 3 équipes. Cette liste nous a aussi servi à communiquer / « vendre » les TNR aux diverses acteurs.
1.2.4- Tests d’intégration avec une logique « recetteurs »
Du point de vue de la méthode, la réalisation d’une recette d’intégration appelle des précisions sur chaque application modifiée qui doit faire au préalable l’objet d’une recette fonctionnelle : on parle alors couramment de recette fonctionnelle « unitaire » et les concepts de base exposés dans le guide sont applicables à ce cas particulier.
Puis il faut préciser la relation entre les applications, effectuée dans un second temps, introduit un niveau de complexité supplémentaire qui nécessite une organisation et une stratégie spécifiques (coordination, pilotage le cas échéant, plate-forme adaptée, …), voire la mise en place d’un outil de cadrage dédié, le « dossier de stratégie d’intégration ». Ce dernier permet de partager entre les différents acteurs de la recette les éléments clés du projet : contraintes (planning, ressources, objectifs), description de la plate-forme, cadencement des travaux, etc.
Enfin, le dossier de stratégie d’intégration doit contenir les scénarios et fiches de tests “partagés”, nécessaires à la vérification de l’intégration, ainsi que le calendrier précis de leur passage. Les jeux d’essai communs doivent être constitués pour permettre la vérification de la chaîne.
Ils consistent à assembler plusieurs unités et à tester les erreurs liées aux interactions entre ces unités (et éventuellement à détecter les erreurs rémanentes non détectés au niveau unitaire).
1.2.5- Particularité des tests de progiciel
Mais complexe également car il y a de nombreux développement spécifique, des migrations / reprise des données du SI historique vers le progiciel, des problématiques de volumétrie, des plates-formes propriétaire plus ou moins ouverte.
La complexité est également due à la richesse fonctionnelle poussée (processus métier prédéfinis et adaptés au métier), un paramétrage spécifique ou bien des développements complémentaires pour chaque société, un processus de développement hors norme.
Parfois même, la complexité provient des différenciations à faire entre le standard et le spécifique. Ceci au niveau des développements et des tests. En effet, les développements standards font souvent partie d’une enveloppe déjà définie avec le client, alors que les développements et tests spécifiques sont sujets à des avenants au contrat.
Enfin, la complexité des tests de progiciel est due aux problématiques de gestion des flux inter-applicatifs, aux problématiques de gestion de configuration et des difficultés de la maîtrise des jeux de données.
Hormis les problèmes évoqués ci-dessus il y a également ceux liés à la conception des scénarios et de leurs exhaustivités. Ci-dessous un exemple de scénario suivant la logique d’un « utilisateur final ».

Figure : Exemple d’un scénario de test d’un module R/3
Les tests de progiciel sont donc complexes et ils demandent aux équipes une première expérience sur un des modules de l’ERP cible.
Ensuite il a fallu spécifier les scénarios de tests et les fiches de tests, rapprocher les scénarios SAP fournis en standard avec la méthodologie ASAP (méthodologie de test light propre à SAP), définir les scénarios retenus et spécifier les cas de test.
Enfin, il a fallu analyser la couverture des tests via la matrice des cas de test et analyser et spécifier les jeux de données nécessaires.
Je développerai dans un prochain article la stratégie à adopter pour mener à bien des tests sur de l’ERP.

Bonjour et merci pour vos remarques,
Pour répondre à votre question et synthétiser au maximum je dirais que : les tests de non régression (TNR) sont les mêmes que les types de tests que vous allez jouer lors de vos campagnes de tests.
Exemple :
1. 1ère livraison des sources / applications à votre équipe : vous jouez les tests fonctionnels (par exemple) prévus.
2. A partir de la 2ème livraison : vous jouez une partie des mêmes tests mais on les appels « tests de non régression ». Ceci afin de déterminer si ce qui vous a été livré une 2ème fois n’a pas provoqué d’anomalie de la V1
Pour déterminer les TNR à dérouler je vous conseil lors de la conception de vos tests et quand vous rédiger votre stratégie de tests de définir des priorités sur chaque scénario de tests (A, B et C par exemple). Ainsi, vous pourrez décider par la suite de n’exécuter que les scénarios de type A pour vos tests de non régressions (A étant des scénarios ne testant que les fonctionnalités les plus critiques).
Vous dites « Comparer les résultats que renvoi une nouvelle version du logiciel avec une plus ancienne sont-ils aussi considérés comme tels ? » ==> effectivement c’est une excellente idée si vous avez gardé les résultats de l’ancienne campagne de tests.
Pour finir je dirai qu’il vous faut aussi étudier la possibilité d’automatiser vos tests de non régressions afin de gagner du temps, de l’énergie et de l’argent.
Rappel de la définition de ce type de tests :
Pratiquer un test de non régression signifie que le reste de l’application n’a pas perdu en fonctionnalité ou en fiabilité du fait de l’ajout de nouvelles fonctions ou de modification des fonctions existantes. Ils consistent à déterminer si des défauts ont été introduits dans l’application lors de l’implémentation de la nouvelle fonctionnalité. Ils peuvent également être employés lors de changements survenus dans l’environnement de l’application.
P.S : je suis désolé pour le retard de ma réponse mais j’étais en mission à l’étranger et n’ai pu vous répondre rapidement.
Bonne journée ;-)