Definition

Test de résilience logicielle

La méthode des tests de résilience logicielle vise à assurer le bon fonctionnement applicatif en conditions réelles ou exceptionnelles. En d'autres termes, elle teste la résilience d'une application ou sa capacité à supporter des événements stressants ou difficiles. Comme les tests de conformité, d'endurance, de charge et de reprise, les tests de résilience font partie des tests logiciels non fonctionnels. Ce type de tests est parfois désigné sous le nom de résilience informatique, de tests de résilience applicative ou d'ingénierie du chaos.

Étant donné qu'il est impossible d'empêcher totalement toute défaillance, les tests de résilience s'assurent que le logiciel continue à fournir les fonctions essentielles et évite toute perte de données même en cas de stress. Les attentes toujours plus élevées des clients et le préjudice commercial d'une interruption d'activité sont là pour rappeler l'importance de réduire au maximum les dérangements et de se préparer à des scénarios indésirables. On peut considérer que les tests de résilience font partie du plan de continuité d'activité (PCA) de l'entreprise.

Utilisation des tests de résilience

Les tests de résilience font partie du cycle de développement de logiciels. Tout commence par une application à tester. On met ensuite en place un environnement dédié pour y réaliser les tests. En général, les tests de résilience comprennent les étapes suivantes : 

  1. Déterminer les indicateurs : les développeurs doivent choisir ceux à mesurer pour bien refléter les performances du logiciel, par exemple les débits en entrée et en sortie, la capacité de traitement, le délai de reprise, la latence et les liens entre les mesures.
  2. Repérer le niveau de performance de référence : il faut ensuite assembler un référentiel correspondant à la charge maximum que le logiciel peut supporter sans baisse de performances. On distingue ainsi plus facilement ce qu'est l'écart normal de performances et l'indicateur peut servir à comparer les mesures pendant les tests.
  3. Introduire et mesurer des perturbations : c'est à cette étape qu'on va chercher à faire tomber le système. Il existe de nombreuses façons de procéder : on peut perturber la communication avec les dépendances externes, injecter du code malveillant en entrée, manipuler le contrôle du trafic, restreindre la bande passante, arrêter les systèmes chargés de l'interface, supprimer des sources de données et consommer des ressources système. A chaque scénario, on mesure et on relève les indicateurs selon les effets sur les performances.
  4. Faire le bilan et traiter les résultats : enfin, les résultats servent à lancer des discussions, à rectifier le logiciel et évaluer les pratiques des équipes de développement. De plus, ces équipes doivent améliorer les scénarios de tests ultérieurs à la lumière de ces conclusions.

Importance des tests de résilience

Les tests de résilience aident à réduire les défaillances et les problèmes de sécurité en cas de difficulté, notamment dans le cadre de la protection contre les pannes d'électricité ou de système, les interruptions de service et les catastrophes naturelles. De plus, ils permettent d’évaluer le respect des normes, des bonnes pratiques et de la confidentialité, ainsi que l'évolutivité.

Ces tests revêtent une importance particulière dans les infrastructures à plusieurs niveaux et environnements. Pour réduire le risque de panne système interne, il existe une solution qui consiste à migrer le logiciel dans le cloud et donc à renforcer sa résilience : si le cloud connaît des perturbations, les prestataires ont généralement mis en place des systèmes sophistiqués de récupération.

Fiabilité ou résilience

Dans le domaine des logiciels, on confond souvent fiabilité et résilience. La résilience est la capacité à retrouver un état idéal ou à récupérer rapidement à la suite d'un problème. La fiabilité est l'objectif des développeurs, à savoir un système qui fonctionne parfaitement ou sans interruption. Dans le cadre des tests de résilience, la fiabilité est le résultat attendu. La notion de résilience est aussi connue sous le nom de récupérabilité.

Cette définition a été mise à jour en novembre 2020

Pour approfondir sur Outils de développement