10 Tests de Performance pour une qualité logicielle optimisée

3 Octobre 2019
test de performance
Faisons ensemble un tour des divers tests de performance existants...

 

Test Unitaire
Test Unitaire

Ce test consiste à simuler plusieurs itérations successives d’un scénario utilisateur avec un seul utilisateur.

L’objectif est d’obtenir un point de comparaison critique à travers l’évaluation de la latence applicative, c’est-à-dire le temps nécessaire à l'application pour traiter la requête et renvoyer les données de la réponse.

 

 

 

test nominal
Test Nominal

Ce test consiste à simuler un ou plusieurs scenarios utilisateurs en parallèle avec le nombre d’utilisateurs concurrents attendu en production.

L’objectif est d’évaluer l’impact de la charge actuelle ou prévue sur la plateforme, de dimensionner la plateforme cible (nombre de serveurs, taille disque/mémoire) et de déterminer le ressenti utilisateur (temps de réponse).

 

 

Test Destructif

Test destructif ou test aux limites

Le test consiste à simuler un ou plusieurs scenarios utilisateurs en parallèle en augmentant progressivement le nombre d’utilisateurs concurrents.

L’objectif est de déterminer à partir de quand le système se dégrade et d’identifier les goulots d’étranglement (=quel(s) élément(s) est(sont) responsable(s) de la limite applicative).

Dans cet exemple la limite est atteinte pour 100% de consommation CPU du serveur applicatif. S’il est nécessaire d’aller plus loin, il faudra augmenter la capacité physique du serveur ou rajouter d’autres serveurs applicatifs.

 

Test d'Endurance
Test d’endurance

Ce test consiste à simuler un ou plusieurs scenarios utilisateurs en parallèle avec un nombre nominal d’utilisateurs concurrents sur une longue période (24/48H).

L’objectif est de déterminer la stabilité du système sur le long terme et d’évaluer les défauts des ressources (fuite mémoire).

Pour ce test, il est important de vérifier que toutes les métriques enregistrées (consommation CPU, mémoire, temps de réponse) sont stables tout au long du test, c’est-à-dire qu’ils ne présentent aucune augmentation ni diminution sur la durée.

 

Test de Scalabilité
Test de scalabilité ou test par paliers

Ce test consiste à simuler un ou plusieurs scenarios utilisateurs en parallèle avec plusieurs paliers d’utilisateurs concurrents.

L’objectif est de déterminer si la consommation des ressources de l’application suit bien la montée en charge et libère les ressources si la charge diminue.

Il est important de vérifier que la consommation des ressources est proportionnelle à la charge ajoutée ou réduite. Les temps de réponse sont censés rester stables sur ce test (pas de palier).

 

Test de non Regression
Test de Non-Régression

Ce test consiste à simuler un ou plusieurs scenarios utilisateurs en parallèle avec un nombre nominal d’utilisateurs concurrents avec différents niveaux de code.

L’objectif est de comparer les ressources et temps de réponse entre deux livraisons.

Dans cet exemple, nous pouvons observer une dégradation de la consommation CPU du serveur sur la version N+1 au niveau du 3e palier du test de scalabilité (60 utilisateurs).

 

Test de diagnostic - Script par Script
Test de Diagnostic – Script par Script

Ce test consiste à simuler chaque script séparément avec un nombre nominal d’utilisateurs concurrents.

L’objectif est d’identifier le script responsable d’une dégradation parmi un jeu de scripts.

Dans cet exemple, nous pouvons observer que le script responsable de la dégradation observée au niveau de la consommation CPU est le script 2.

 

Test de diagnostic - Transaction par transaction
Test de Diagnostic – Transaction par Transaction

Ce test consiste à simuler chaque transaction d’un script séparément avec un nombre nominal d’utilisateurs concurrents.

L’objectif est d’identifier la transaction responsable d’une dégradation parmi une séquence de transactions d’un script.

Dans cet exemple, nous pouvons observer que la transaction responsable de la dégradation observée au niveau de la                consommation CPU est la transaction C.

 

Test Opérationnel
Test opérationnel

Ce test consiste à simuler un ou plusieurs scenarios utilisateurs en parallèle avec un nombre nominal d’utilisateurs concurrents et de simuler un évènement perturbateur (panne, redémarrage, exécution de batch).

L’objectif est de déterminer l’impact d’une défaillance provoquée sur le système ou de sécuriser les opérations de maintenance en production.

Test de Performance
Dans cet exemple, nous avons simulé l’arrêt du serveur applicatif 2 après 20 minutes de test. Nous pouvons observer que le serveur applicatif 1 récupère la charge du serveur 2 le temps de son arrêt, entraînant une augmentation de sa consommation CPU comme attendu et ce sans que le nombre de transactions par seconde ne soit impacté. Une fois le serveur 2 redémarré, nous retrouvons une activité normale.

 

Test de montée en charge
Test de montée en charge

Ce test consiste à simuler une arrivée massive de requêtes (ex. connexions) avec de nombreux utilisateurs concurrents.

L’objectif est d’évaluer la rapidité du système à accepter de nouvelles connexions.

Dans cet exemple, nous pouvons observer un pic de consommation CPU du serveur applicatif lors de l’arrivée massive d’utilisateurs concurrents. Cela se stabilise une fois le pic d’utilisateurs passé.

 

Description des outils

L’outillage du test de performance se décompose en trois parties : le scripting, l’injection et l’investigation.

Scripting

Il convient de choisir un générateur de script qui va permettre d’enregistrer les actions utilisateurs correspondant à un processus métier (c’est-à-dire la séquence d’actions utilisateur, appels de services) et de les transcrire dans un langage de programmation. A la charge du testeur ensuite de rajouter des contrôles de pages/des temps de pause ou de rendre variable certains paramètres.

Injection

Le test de performance requière un ou plusieurs outils permettant de créer des scénarios de tests, d’injecter un nombre conséquent d’utilisateurs, de monitorer les informations business (temps de réponse, transaction par seconde, débit) et les ressources de l’environnement de test et enfin d’analyser et de stocker les résultats des tests.

Investigation

Certains outils de diagnostic peuvent permettre de faciliter la détection de l’origine des problèmes rencontrés (fuite mémoire, threads bloqués, boucle dans le code, problème de cache).

Plusieurs outils permettent de réaliser des tests de performances. Ils se différencient suivant :

  • le type d'application testée (web, SAP, Oracle, RDP, Citrix, Mainframe, Windows Sockets…),
  • le prix des licences,
  • le coût de la mise en œuvre,
  • la maturité et l'efficacité du produit,
  • l’intégration aux autres outils.

Le leader du marché est Hewlett Packard qui propose une suite complète d’outils :

  • HP Loadrunner : injecteur qui comprend aussi un générateur de script (Virtual User Generator),
  • HP ALM Performance Center : gestion des exigences, planification des injections, monitoring, stockage des résultats,
  • HP Analysis : analyseur de résultats et générateur de rapport.

Il existe également des outils open source pour le scripting/injection comme Apache Jmeter ou Gatling.

Pour les outils de profiling, Dynatrace est un outil de diagnostic très performant pour analyser en profondeur le code testé. A noter également des outils comme Yourkit ou Eclipse MAT pour l’analyse des fuites mémoire ou Visual Studio SQL Profiler pour le profiling base de données.

Le test de performance est une activité qui vise avant tout l’optimisation de la qualité du logiciel. Elle est primordiale pour la conduite et le succès d’un projet informatique.

 

Aussi n’hésitez pas à visiter notre page web dédiée aux Tests Logiciels.

Parlons ensemble de vos projets. 

contact