Une application offrant des performances médiocres peut ralentir la productivité des collaborateurs et entrainer frustrations et stress jusqu’au rejet total de l’application par les utilisateurs. Un projet informatique est réussi uniquement lorsque l’application qui en découle est réellement utilisée par les équipes et permet de répondre aux enjeux métiers.
video: https://www.youtube.com/embed/dvkYfoTjGJU
Au niveau d’un système informatique la performance ne se définit pas uniquement par les temps de réponse résultants des applications aux utilisateurs, cette notion est plus vaste et comprend les aspects suivants :
Un temps de réponse désigne la durée d’exécution d’une opération sur le système informatique. Cette opération, par exemple l’affichage d’une page Web de présentation d’un article, peut recouvrir l’invocation de plusieurs composants logiciels (serveur web, serveur d’application, serveur de base de données etc…).
Des temps de réponse non conformes aux attentes impliquant des ralentissements visibles par les utilisateurs peuvent entrainer une mauvaise acceptation voire un rejet dans certains cas de l’application ou du site Web.
La disponibilité d’un composant du système informatique désigne le ratio de temps pendant lequel il est en état de fonctionner correctement sur une période de temps donnée (figure ci-dessous). La disponibilité s’exprime en pourcentage, elle est notée A ou HA en Anglais (pour Availability ou High Availability).
Les applications d’entreprise ont généralement une disponibilité de 90% à 95%. A partir de 99% on parle d’architecture à « haute disponibilité ».
La disponibilité peut concerner :
On parle de « tolérance aux pannes » (fail over) pour un système qui peut fonctionner lorsqu’un de ses composants est défaillant et peut être remplacé à chaud, c’est-à-dire sans arrêt du service.
La robustesse désigne la capacité d’un système à ne pas « planter » et « perdre ou corrompre » des données ou des messages lorsqu’il est soumis à des sollicitations inhabituelles. Il s’agit donc d’une mesure de la disponibilité des systèmes et de l’intégrité des informations en situation de stress.
L’intégrité peut se porter sur :
La robustesse s’exprime par une grandeur scalaire sans unité, par exemple :
La capacité à monter en charge désigne l’aptitude d’une application ou d’un service à offrir des temps de réponse « raisonnables » quand la quantité d’utilisateurs simultanés augmente.
La capacité à monter en charge s’exprime par « une durée maximum de traitements pour un niveau de charge donné ». C’est-à-dire un temps de réponse pour un volume de charge. On parle aussi de débit ou throughput, mesuré en nombre de tâches simultanées par unité de temps.
Par exemple :
La capacité à monter en charge est une caractéristique tout aussi importante que les temps de réponse car elle précise le contexte dans lequel ceux-ci doivent être atteints.
Pour connaître l’état de votre application, réalisez un audit de performance !
Un test de performance est un test dont l’objectif est de mesurer la performance d’un système informatique par rapport aux contraintes et exigences identifiées au début du projet (temps de réponse maximum admissible par page, nombre d’utilisateurs simultanés…).
Pour mesurer les performances des applications constituant un SILe SI désigne le système d'informations d'une organisation., il est possible d’effectuer les tests suivants :
Test de dégradations des transactions : il s’agit d’un test technique primordial au cours duquel on ne va simuler que l’activité transactionnelle d’un seul scénario fonctionnel parmi tous les scénarios du périmètre des tests, de manière à déterminer quelle charge limite simultanée le système est capable de supporter pour chaque scénario fonctionnel et d’isoler éventuellement les transactions qui dégradent le plus l’ensemble du système.
Test de stress : il s’agit d’un test au cours duquel on va simuler l’activité maximale attendue tous scénarios fonctionnels confondus en heures de pointe de l’application, pour voir comment le système réagit au maximum de l’activité attendue des utilisateurs.
Test de robustesse, d’endurance et de fiabilité : il s’agit de tests au cours duquel on va simuler une charge importante d’utilisateurs sur une durée relativement longue, pour voir si le système testé est capable de supporter une activité intense sur une longue période sans dégradations des performances et des ressources applicatives ou système.
Test de capacité, test de montée en charge : il s’agit d’un test au cours duquel on va simuler un nombre d’utilisateurs sans cesse croissant de manière à déterminer quelle charge limite le système est capable de supporter.
Test aux limites : il s’agit d’un test au cours duquel on va simuler en général une activité bien supérieure à l’activité normale, pour voir comment le système réagit aux limites du modèle d’usage de l’application.
Il existe d’autres types de tests, plus ciblés en fonction des objectifs à atteindre dans la campagne de test.
Pour pouvoir calculer la disponibilité d’un système, il est nécessaire d’utiliser les notions suivantes :
L’uptime désigne le temps de bon fonctionnement d’un système ou temps écoulé depuis le dernier démarrage ou le dernier « plantage ».
Le MTBF (Mean Time Between Failure) est le temps moyen entre deux « plantages » pour un composant d’architecture.
L’AFR (Annualized Failure Rate) est l’inverse du MTBF rapporté à une année, c’est-à-dire qu’il représente la proportion de composants à changer chaque année.
Le downtime désigne le temps d’arrêt lié à un dysfonctionnement.
Le MTTR (Mean Time To Repair) désigne le temps moyen nécessaire au rétablissement du service.
L’AST (Agreed Service Time) désigne l’exigence de continuité de service convenue avec les utilisateurs du système.
Sur la base de ces définitions, on peut calculer la disponibilité de trois manières :
Quand à la robustesse d’un système, elle est constatée en production en réalisant un ratio entre le nombre de sollicitations traitées par un composant (requêtes) et le nombre d’erreurs obtenues.
Plus l’on souhaite obtenir un système informatique performant, plus le coût engendré par cette exigence devient important. On estime en informatique que le coût de la performance d’un système répond à une fonction exponentielle.
Il est donc primordial avant tout de déterminer quel est le niveau d’exigence d’une application en terme de performance avant de démarrer tout projet informatique, et d’autant plus, toute campagne de test de performance.
Sur le plan de la disponibilité des systèmes, l’atteinte d’un très haut niveau de disponibilité est très coûteuse en termes de matériel, de logiciels et de surveillance humaine. Le surcoût engendré par cette recherche du meilleur taux de disponibilité doit être mise en relation avec les coûts engendrés par une indisponibilité du système (cf. tableau ci-dessous).
Secteur d’activité | Coût moyen par heure |
---|---|
Banque d’investissement | 6,48 M$ |
Télécom | 2,00 M$ |
Web marchand | 1,1 M$ |
Pharmacie | 1,0 M$ |
Chimie | 0,7 M$ |
Réservation aérienne | 90 k$ |
Pourquoi et comment écrire des tests unitaires ? Définition et implémentation dans une application Java Springboot
Scalabilité des applications : les conseils d’AXOPEN, agence de développement web, pour rendre son appli web scalable
Initialisation d’une API web avec le framework Spring Boot !