{"id":691,"date":"2018-06-27T16:37:31","date_gmt":"2018-06-27T14:37:31","guid":{"rendered":"https:\/\/www.tests-performance.fr\/?page_id=691"},"modified":"2020-12-11T15:10:05","modified_gmt":"2020-12-11T14:10:05","slug":"presentation-2","status":"publish","type":"page","link":"https:\/\/www.tests-performance.fr\/?page_id=691","title":{"rendered":"Pr\u00e9sentation"},"content":{"rendered":"<div id=\"pl-691\"  class=\"panel-layout\" ><div id=\"pg-691-0\"  class=\"panel-grid panel-has-style\" ><div data-overlay-color=\"#000000\" class=\"panel-row-style panel-row-style-for-691-0\" ><div id=\"pgc-691-0-0\"  class=\"panel-grid-cell\" ><div id=\"panel-691-0-0-0\" class=\"so-panel widget widget_black-studio-tinymce widget_black_studio_tinymce panel-first-child panel-last-child\" data-index=\"0\" ><div data-widget-overlay-color=\"#000000\" class=\"panel-widget-style panel-widget-style-for-691-0-0-0\" ><div class=\"textwidget\"><h1 style=\"text-align: center;\">Pr\u00e9sentation des tests de performance<\/h1>\n<p style=\"text-align: center;\"><a href=\"#Avant-propos\">Avant-propos<\/a><br \/>\n<a href=\"#generalites\">G\u00e9n\u00e9ralit\u00e9s<\/a><br \/>\n<a href=\"#risques\">Les risques<\/a><br \/>\n<a href=\"#enjeux\">Les enjeux des tests de performance<\/a><br \/>\n<a href=\"#types\">Les diff\u00e9rents types de tests de performance<\/a><br \/>\n<a href=\"#comprendre\">Bien comprendre les tests de performance<\/a><br \/>\n<a href=\"#strategie\">Strat\u00e9gie<\/a><br \/>\n<a href=\"#identifier\">Identifier les sc\u00e9narios critiques<\/a><br \/>\n<a href=\"#processus\">Processus de campagne de performance<\/a><br \/>\n<a href=\"#methodologie\">M\u00e9thodologie<\/a><br \/>\n<a href=\"#scripting\">Scripting<\/a><br \/>\n<a href=\"#modelisation\">Mod\u00e9lisation<\/a><br \/>\n<a href=\"#tirs_analyses\">Tirs et analyses<\/a><br \/>\n<a href=\"#restitution\">Restitution<\/a><\/p>\n<hr \/>\n<h2><a name=\"Avant-propos\"><\/a><br \/>\nAvant-propos<\/h2>\n<p>A l'aube de l'informatique populaire et accessible \u00e0 tous, l'explosion des applications a provoqu\u00e9 une prise de conscience par les responsables informatiques du co\u00fbt de maintenance \"\u00e0 chaud\" \u00e9lev\u00e9 des syst\u00e8mes lorsque des erreurs graves apparaissaient en production.<\/p>\n<p>Cette prise de conscience a permis de mettre en lumi\u00e8re la n\u00e9cessit\u00e9 de r\u00e9aliser des tests dans les phases amonts de la production pour r\u00e9duire ce co\u00fbt. Il existe diff\u00e9rents types de tests : tests agile par sprint, tests d'int\u00e9gration par brique ou de bout-en-bout, tests semi-automatis\u00e9s ou automatis\u00e9s, tests de recette fonctionnels par brique, tests m\u00e9tier par brique ou de bout-en bout, tests de charge et tests de performance.<\/p>\n<p>Si chaque type de test permet de participer \u00e0 l'effort collectif pour am\u00e9liorer progressivement la qualit\u00e9 applicative et ainsi \u00e9viter les probl\u00e8mes graves en production, seuls les tests de charge apportent une dimension multi-utilisateurs qui est aussi une des r\u00e9alit\u00e9s de production.<\/p>\n<p>En r\u00e9sum\u00e9, il ne suffit pas qu'une application soit exempt d'erreur pour dire qu'elle aura un v\u00e9ritable succ\u00e8s aupr\u00e8s des utilisateurs finaux, il faut aussi compter sur la patience de ces utilisateurs (qui est de plus en plus limit\u00e9e) et donc se concentrer sur les temps de r\u00e9ponse vus de l\u2019utilisateur final.<\/p>\n<p dir=\"ltr\">En conclusion, il n\u2019y a pas de r\u00e9sultats complets ni probants si les tests de performance de sont pas accompagn\u00e9s de tests de charge.<\/p>\n<h2><a name=\"generalites\"><\/a><br \/>\nG\u00e9n\u00e9ralit\u00e9s<\/h2>\n<p dir=\"ltr\">Les tests de performance (et de charge) ont pour principal objectif la validation d'une solution logicielle et de son architecture sous-jacente li\u00e9es \u00e0 une utilisation simultan\u00e9e multi-utilisateurs, permettant ainsi d'\u00e9viter certains probl\u00e8mes en production. Ils permettent de garantir une qualit\u00e9 de service applicative dans des conditions r\u00e9elles d'utilisation.<\/p>\n<p dir=\"ltr\">L'objectif des tests de performance n'est pas de couvrir 90% des cas de tests possibles et imaginables (comme les tests fonctionnels unitaires), mais de couvrir les aspects applicatifs pr\u00e9sentant des risques syst\u00e8mes en charge, des risques d'interactions avec d'autres briques applicatifs, des risques strat\u00e9giques ou financiers sur des fonctionnalit\u00e9s cibl\u00e9es.<\/p>\n<p dir=\"ltr\">Les tests de performance devraient th\u00e9oriquement \u00eatre r\u00e9alis\u00e9s au plus t\u00f4t dans le cycle de d\u00e9veloppement applicatif afin de minimiser les modifications applicatives engendr\u00e9es par la d\u00e9couverte des anomalies de performance. Ainsi, il est possible de pr\u00e9voir des tests de performance en amont, dans un environnement stable (hors environnement de d\u00e9veloppement) et dans le cadre d'une d\u00e9marche Agile. Dans ce cadre, les objectifs de ces tests seront alors limit\u00e9s : temps de r\u00e9ponses unitaires et\/ou \u00e0 faible charge, capacit\u00e9 de l'application \u00e0 maintenir un acc\u00e8s concurrent multi-utilisateurs \u00e0 faible charge.<\/p>\n<p dir=\"ltr\">Classiquement, les tests de performance sont r\u00e9alis\u00e9s dans un environnement de pr\u00e9production afin d'\u00eatre au plus proche de la r\u00e9alit\u00e9 techniques de production (iso architecture serveurs, cha\u00eenes de liaisons compl\u00e8tes, volum\u00e9trie bdd). Les r\u00e9sultats seront alors r\u00e9ellement complets et probants.<\/p>\n<p dir=\"ltr\">Les tests de performance permettent de d\u00e9terminer des points de contention de l'architecture technique s'ils existent et de les \u00e9liminer par modifications de param\u00e9trages techniques \/ tirs de charge it\u00e9ratifs. Ces probl\u00e8mes de performance proviennent souvent, soit de l'architecture (probl\u00e8me de dimensionnement des machines, param\u00e8tres limites des serveurs inadapt\u00e9s,...), soit d'un probl\u00e8me applicatif (bonnes pratiques de programmation non respect\u00e9s ou inexistantes, ...). Ils permettent \u00e9galement de d\u00e9terminer des seuils limites de bon fonctionnement (nombre d'utilisateurs, fr\u00e9quence d'utilisation applicative maximum garanti,\u2026).<\/p>\n<h2><a name=\"risques\"><\/a><br \/>\nLes risques<\/h2>\n<p><u><b>Si une application n\u2019est pas performante, les cons\u00e9quences pourraient \u00eatre :<\/b><\/u><\/p>\n<ul>\n<li>La qualit\u00e9 d\u2019accueil des clients qui se d\u00e9grade<\/li>\n<li>La perte de productivit\u00e9 (Traitement de dossier tr\u00e8s long, impossibilit\u00e9 de d\u00e9clarer des sinistres, \u2026)<\/li>\n<li>La perte de clients<\/li>\n<li>La perte de revenu<\/li>\n<li>L\u2019attention des m\u00e9dias avec, par cons\u00e9quent, une perte de popularit\u00e9 et image de marque d\u00e9grad\u00e9e<\/li>\n<li>Etc.<\/li>\n<\/ul>\n<p><u><b>Exemples :<\/b><\/u><\/p>\n<ul>\n<li>Dans une banque de finance : une anomalie de production co\u00fbte en moyenne 300 000 \u20ac.<\/li>\n<li>Chez un voyagiste : une indisponibilit\u00e9 d'1 minute du site web co\u00fbte 20 000 \u20ac.<\/li>\n<\/ul>\n<h2><a name=\"enjeux\"><\/a><br \/>\nLes enjeux des tests de performance<\/h2>\n<p>La strat\u00e9gie de test d\u00e9pendra en grande partie des enjeux (objectifs) des tests de performance et du contexte m\u00e9tier client<\/p>\n<p><u><b>Exemples d\u2019enjeux :<\/b><\/u><\/p>\n<ul>\n<li>Dimensionner une infrastructure de production pour un d\u00e9ploiement national<\/li>\n<li>Rassurer la DSI sur la mont\u00e9e en charge d'une application<\/li>\n<li>Valider les performances\/l'endurance\/la robustesse d'une application<\/li>\n<li>Comparer des solutions<\/li>\n<li>Valider que les performances ne se d\u00e9gradent pas suite \u00e0 une migration du socle technique et \/ ou applicatif<\/li>\n<li>V\u00e9rifier et\/ou optimiser les performances d\u2019une application et au besoin r\u00e9soudre les probl\u00e8mes de performances de cette application<\/li>\n<li>Etc.<\/li>\n<\/ul>\n<p><u><b>Strat\u00e9gie de tests :<\/b><\/u><\/p>\n<p>La strat\u00e9gie de test est la r\u00e9ponse au besoin de tests de performance exprim\u00e9e par le client. Elle doit \u00eatre adapt\u00e9e au contexte d'architecture, \u00e0 la r\u00e9alit\u00e9 des flux applicatifs, au rythme et \u00e0 la logique applicative (sc\u00e9narios), \u00e0 la volum\u00e9trie des donn\u00e9es applicatives, \u00e0 la charge applicative, au planning de campagne, \u00e0 la capacit\u00e9 technique \u00e0 faire, etc .<\/p>\n<p>Pour r\u00e9pondre de fa\u00e7on appropri\u00e9e aux objectifs de la campagne de performance, la strat\u00e9gie s'appuie notamment sur la r\u00e9alisation de certains types de tests de performance.<\/p>\n<h2><a name=\"types\"><\/a><br \/>\nLes diff\u00e9rents types de tests de performance<\/h2>\n<p><u><b>Test de <\/b><\/u><u><b>faisabilit\u00e9 technique : <\/b><\/u><\/p>\n<ul>\n<li><b><i>Objectif<\/i><\/b> : V\u00e9rifier l\u2019\u00e9ligibilit\u00e9 d\u2019une application vis-\u00e0-vis de l\u2019outillage de performance (est-ce que l\u2019application \u00e0 tester est compatible avec les outils de performance disponibles ?)<\/li>\n<li><b><i>Particularit\u00e9s<\/i><\/b> : Ne correspond pas \u00e0 un objectif client, peut \u00eatre effectu\u00e9 en dehors de l\u2019environnement de performance, utilisation de VM possible, v\u00e9rification acc\u00e8s applicatif multi-utilisateurs \u00e0 faible charge<\/li>\n<\/ul>\n<p><u><b>Test de performance en charge nominale (pics de <\/b><\/u><u><b>charge) :<\/b><\/u><\/p>\n<ul>\n<li><b><i>Objectif<\/i><\/b> : V\u00e9rifier l'aptitude de l\u2019application (observation technique de l'application, consommation syst\u00e8me des serveurs applicatifs) \u00e0 fonctionner dans des conditions d\u2019utilisation \u00ab normales \u00bb (R\u00e9f\u00e9rence : Heure la plus charg\u00e9e de la journ\u00e9e la plus charg\u00e9e de la semaine) et en \u00ab pics de charge \u00bb (Saisonnalit\u00e9, exemple : attestation scolaire) par rapport aux indicateurs de production ou aux hypoth\u00e8ses MOE.<\/li>\n<li><b><i>Particularit\u00e9s<\/i><\/b> : Exigences pr\u00e9cises, v\u00e9rification de la tenue en charge, peut \u00eatre utilis\u00e9 pour des tests de non r\u00e9gression ou donner des orientations de scalabilit\u00e9 pour les architectes, mont\u00e9e en charge lente.<\/li>\n<\/ul>\n<p><u><b>Test de charge aux limites <\/b><\/u><u><b>:<\/b><\/u><\/p>\n<ul>\n<li><b><i>Objectif<\/i><\/b> : D\u00e9terminer les limites applicatives garanties avant une d\u00e9gradation applicative importante. Cette limite est obtenue par une augmentation exponentielle de la charge bien au del\u00e0 ce la charge maximum observ\u00e9e en production. La limite (exemple X10 la charge nominale) doit \u00eatre d\u00e9finie pas la MOE avec l'hypoth\u00e8se que les limites applicatives garanties obtenus seront inf\u00e9rieures \u00e0 la charge de X10.<\/li>\n<li><b><i>Particularit\u00e9s<\/i><\/b> : Exigences pr\u00e9cises, utilisation de serveurs de m\u00eame type et\/ou de m\u00eame dimensionnement que la cible, v\u00e9rification de la tenue en charge, recherche de valeurs limites support\u00e9es par l\u2019architecture applicative, mont\u00e9e en charge lente<\/li>\n<\/ul>\n<p><u><b>Test de surcharge (ou de stress<\/b><\/u><u><b>) :<\/b><\/u><\/p>\n<ul>\n<li><b><i>Objectif<\/i><\/b> : V\u00e9rifier le comportement de l\u2019application \u00e0 subir une surcharge (Coefficient multiplicateur de la charge nominale doit \u00eatre d\u00e9fini par le projet : X2 ou X4)<\/li>\n<li><b><i>Particularit\u00e9<\/i><\/b> : Exigences pr\u00e9cises, utilisation de serveurs de m\u00eame type et\/ou de m\u00eame dimensionnement que la cible, identification des \u00e9l\u00e9ments de la cha\u00eene de liaison pr\u00e9sentant des erreurs ou des temps de r\u00e9ponse au del\u00e0 des exigences, mont\u00e9e en charge rapide<\/li>\n<\/ul>\n<p><u><b>Test d\u2019endurance<\/b><\/u><u><b>\u00a0:<\/b><\/u><\/p>\n<ul>\n<li><b><i>Objectif<\/i><\/b> : V\u00e9rifier l'aptitude de l\u2019application \u00e0 fonctionner dans des conditions d\u2019endurance (charge nominale sur une longue p\u00e9riode, minimum 4 heures)<\/li>\n<li><b><i>Particularit\u00e9s<\/i><\/b> : Exigences pr\u00e9cises, utilisation de serveurs de m\u00eame type et\/ou de m\u00eame dimensionnement que la cible, v\u00e9rification de la tenue en charge et recherche de fuites m\u00e9moires, mont\u00e9e en charge lente<\/li>\n<\/ul>\n<p><u><b>Test de <\/b><\/u><u><b>robustesse :<\/b><\/u><\/p>\n<ul>\n<li><b><i>Objectif<\/i><\/b> : V\u00e9rifier la tenue en charge d'un \u00e9l\u00e9ment du syst\u00e8me lorsque qu'il est soumis \u00e0 une surcharge issue d'une d\u00e9faillance d'un autre \u00e9l\u00e9ment syst\u00e8me (en mode d\u00e9grad\u00e9, ex : arr\u00eat d\u20191 serveur sur une architecture avec 2 serveurs applicatifs en Load Balancing)<\/li>\n<li><b><i>Particularit\u00e9s<\/i><\/b> : Ces tests sont g\u00e9n\u00e9ralement pilot\u00e9s par l\u2019expertise et la production (DES), ils n\u00e9cessitent des exigences pr\u00e9cises, recherche de fuites m\u00e9moires, mont\u00e9e en charge lente<\/li>\n<\/ul>\n<h2><a name=\"comprendre\"><\/a><br \/>\nBien comprendre les tests de performance<\/h2>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/06\/comprendre-1.jpg\" alt=\"Comprendre\" width=\"910\" height=\"583\" \/><\/p>\n<h2><a name=\"strategie\"><\/a><br \/>\nStrat\u00e9gie<\/h2>\n<p dir=\"ltr\">Tester en charge une application c'est r\u00e9aliser une succession de campagnes de test de charge. Il convient de r\u00e9fl\u00e9chir aux objectifs de chaque campagne, de d\u00e9terminer le p\u00e9rim\u00e8tre des tests afin d'identifier les risques applicatifs \u00e0 couvrir et de d\u00e9terminer et valider les hypoth\u00e8ses de d\u00e9part.<\/p>\n<p dir=\"ltr\">Les r\u00e9sultats de la campagne de tests ne sont probants que dans un contexte optimal dans un environnement mat\u00e9riel repr\u00e9sentatif de celle de production ; s'il existe des serveurs physique ou virtuels en production, il convient de choisir le m\u00eame type de serveur en environnement de test. Cependant, dans un souci d'\u00e9conomie et compte tenu d'une rapidit\u00e9 de mise en \u0153uvre, une machine virtuelle peut \u00eatre utilis\u00e9e m\u00eame si en production des serveurs physiques existent. Dans ce cas de figure, seuls les tests en charge nominaux seront probants et on v\u00e9rifiera seulement les temps de r\u00e9ponse et si l'application fonctionne en mode multi-utilisateurs. Il ne sera pas question, par exemple, de r\u00e9aliser des tests en pics de charge ou tests aux limites compte tenu des capacit\u00e9s de performances moindres des VM : probl\u00e8me de repr\u00e9sentativit\u00e9.<\/p>\n<p dir=\"ltr\">Outre cette n\u00e9cessit\u00e9 de contexte iso-production, la validation applicative n'est effective que si l'ensemble des exigences de performance (en termes d'utilisateurs en charge, \u00ab\u00a0fr\u00e9quence\u00a0\u00bb d'utilisation applicative\u00a0constat\u00e9e en production ou imagin\u00e9e par exp\u00e9rience (d\u00e9marche par hypoth\u00e8ses\u00a0lorsque l'application n'existe pas en production), volum\u00e9trie en base de donn\u00e9es, temps de r\u00e9ponse utilisateurs, ..) sont respect\u00e9es.<\/p>\n<p dir=\"ltr\">Les tests de performance doivent \u00eatre r\u00e9alis\u00e9s de fa\u00e7on \u00e0 prendre connaissance des r\u00e9sultats dans leurs globalit\u00e9s. Si certains r\u00e9sultats ne sont pas conformes \u00e0 ce qui est attendu, il convient de s'interroger sur la v\u00e9racit\u00e9 de ceux-ci. S'ils se r\u00e9v\u00e8lent exacts, il est n\u00e9cessaire de mettre en place un outil d'introspection permettant d'investiguer plus pr\u00e9cis\u00e9ment les \u00e9l\u00e9ments de la chaine de liaison responsables de ces mauvais r\u00e9sultats (Ex d'outils APM : Dynatrace, AppDynamics, New Relics).<\/p>\n<p dir=\"ltr\">Dans le contexte d'un SI, l'application peut acc\u00e9der \u00e0 des services d'un prestataire externe (Cloud). Si l'objectif n'est pas de tester ces ces partenaires, il convient de mettre en place des bouchons applicatifs (virtualisation de services) qui permet de simuler de fa\u00e7on plus ou moins intelligente les r\u00e9ponses applicatives et de disposer de r\u00e9sultats de r\u00e9f\u00e9rence sans solliciter ce prestataire et sans attendre que ces services soient op\u00e9rationnels.<\/p>\n<h2><a name=\"identifier\"><\/a><br \/>\nIdentifier les sc\u00e9narios critiques<\/h2>\n<p>Il est tr\u00e8s important d'identifier les sc\u00e9narios pertinents.<\/p>\n<p><u><b>Pour d\u00e9finir ces sc\u00e9narios, on peut :<\/b><\/u><\/p>\n<ul>\n<li>R\u00e9cup\u00e9rer les statistiques de l'utilisation de l'application si elles existent (par exemple le nombre quotidien ou mensuel de transactions \u00ab m\u00e9tier \u00bb, l'analyse des statistiques Web (access_log), etc.)<\/li>\n<li>Si l'application n'est pas encore en production, le projet doit \u00e9mettre des hypoth\u00e8ses qui permettra de d\u00e9finir une charge applicative nominale<\/li>\n<li>D\u00e9finir avec le projet les sc\u00e9narios majeurs d'utilisation (les fonctions les plus utilis\u00e9es, les plus avanc\u00e9es ou les plus consommatrices) de leur application (suites d'\u00e9crans et nombre d'utilisateurs).<\/li>\n<\/ul>\n<p><u><b>Ces sc\u00e9narios devront \u00eatre :<\/b><\/u><\/p>\n<ul>\n<li>R\u00e9alistes au niveau des tests de performance (\u00e9crans consult\u00e9s, champs saisis dans les formulaires, temps entre chaque action, etc...)<\/li>\n<\/ul>\n<p><u>Il y a trois types de sc\u00e9narios \u00e0 prendre en compte :<\/u><\/p>\n<ul>\n<li><strong>Fr\u00e9quents<\/strong> :\u00a0 Les sc\u00e9narios du quotidien (Exemple : les recherches, les consultations d\u2019un soci\u00e9taire)<\/li>\n<\/ul>\n<ul>\n<li><strong>Vitaux<\/strong> :\u00a0 Les sc\u00e9narios qui sont vitaux (Exemple : l\u2019affectation des t\u00e2ches aux gestionnaires, le d\u00e9clenchement de la paye)<\/li>\n<\/ul>\n<ul>\n<li><strong>Risqu\u00e9s<\/strong> : Les sc\u00e9narios risqu\u00e9s d\u2019un point de vue performance pour l\u2019application (Exemple : l\u2019acc\u00e8s \u00e0 la GED, une recherche complexe, la g\u00e9n\u00e9ration de document)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><a name=\"processus\"><\/a><br \/>\nProcessus de campagne de performance<\/h2>\n<p>Le processus de campagne de performance se d\u00e9fini par la r\u00e9alisation des 4 phases ci-dessous.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2020\/12\/Processus-de-Performance.png\" alt=\"Processus\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2><a name=\"methodologie\"><\/a><br \/>\nM\u00e9thodologie<\/h2>\n<p dir=\"ltr\">La m\u00e9thodologie repose sur un ensemble de documents permettant de d\u00e9finir l'ensemble des \u00e9l\u00e9ments n\u00e9cessaires \u00e0 sa r\u00e9alisation, d'exposer les r\u00e9sultats d'analyses et de donner le bilan de la campagne.<\/p>\n<p dir=\"ltr\">Les documents sont\u00a0: Besoins de tests, Plan de tests, Rapports de tests, Retour d'exp\u00e9rience, Bilan de campagne, \u2026<\/p>\n<p><b><u>Etape 1\u00a0: D\u00e9finition du Besoin de tests\u00a0:<\/u><\/b><\/p>\n<ul>\n<li>D\u00e9finir les objectifs de la campagne,<\/li>\n<li>D\u00e9finir le planning de la campagne,<\/li>\n<li dir=\"ltr\">D\u00e9finir le p\u00e9rim\u00e8tre fonctionnel,<\/li>\n<li dir=\"ltr\">D\u00e9finir l'architecture technique,<\/li>\n<li dir=\"ltr\">D\u00e9finir les exigences,<\/li>\n<li dir=\"ltr\">D\u00e9finir le jeu de donn\u00e9es,<\/li>\n<li dir=\"ltr\">D\u00e9finir les sc\u00e9narios fonctionnels,<\/li>\n<li dir=\"ltr\">D\u00e9finir les types de tests de performance,<\/li>\n<li dir=\"ltr\">D\u00e9finir les mod\u00e9lisations de charge,<\/li>\n<li dir=\"ltr\">D\u00e9finir les actions pr\u00e9 et post tests de charge<\/li>\n<li dir=\"ltr\">D\u00e9finir la volum\u00e9trie<\/li>\n<li dir=\"ltr\">\u00a0 \u2026<\/li>\n<\/ul>\n<p><b><u>Etape 2\u00a0: R\u00e9alisation\u00a0:<\/u><\/b><\/p>\n<ul>\n<li dir=\"ltr\">Enregistrer une cin\u00e9matique fonctionnelle \u00e0 l'aide d'un outil de scripting (cf \u00a7 Scripting),<\/li>\n<li dir=\"ltr\">D\u00e9terminer plusieurs mod\u00e9lisations de charge de cette cin\u00e9matique fonctionnelle (cf \u00a7 Mod\u00e9lisation),<\/li>\n<li dir=\"ltr\">Ex\u00e9cuter un test de charge pr\u00e9liminaire (de validation script \/ sc\u00e9nario de charge),<\/li>\n<li dir=\"ltr\">Ex\u00e9cuter les tirs de charge,<\/li>\n<li dir=\"ltr\">Analyser les r\u00e9sultats,<\/li>\n<li dir=\"ltr\">Relancer les tirs de charge apr\u00e8s ajustement,<\/li>\n<li dir=\"ltr\">R\u00e9diger des rapports Flash et Point de situation<\/li>\n<\/ul>\n<p><b><u>Etape 3 : Restitution :<\/u><\/b><\/p>\n<ul>\n<li dir=\"ltr\">R\u00e9diger le Rapport de Tests de la campagne<\/li>\n<li dir=\"ltr\">R\u00e9diger le Bilan des tests de charge<\/li>\n<li dir=\"ltr\">R\u00e9diger un retour d'exp\u00e9rience (le cas \u00e9ch\u00e9ant)<\/li>\n<\/ul>\n<h2><a name=\"scripting\"><\/a><br \/>\nScripting<\/h2>\n<p dir=\"ltr\">Les tests de performance sont r\u00e9alis\u00e9s \u00e0 l'aide d'outils capables de simuler des utilisateurs virtuels. L'op\u00e9ration de scripting est une op\u00e9ration permettant la transformation d'une capture de l'application en un script (en langage de programmation ou dans des IHM).<\/p>\n<p dir=\"ltr\">Au pr\u00e9alable, le document besoin des tests de performance contient l'ensemble des sc\u00e9narios fonctionnels (sous forme de captures d'\u00e9cran de l'application) qu'il faut scripter. Pour \u00eatre valables, ces sc\u00e9narios fonctionnels doivent respecter des conditions de rejouabilit\u00e9 (ex : cr\u00e9ation de contrats en masse donc n\u00e9cessit\u00e9 d'une restauration des bases pour revenir \u00e0 \u00e9tat initial), de coh\u00e9rence (connexion suivi d'une d\u00e9connexion), de r\u00e9alisme (certaines fonctionnalit\u00e9s ne sont jamais utilis\u00e9es d'une certaine fa\u00e7on mais toujours d'une autre) mais aussi de compatibilit\u00e9 avec les outils de scripting (toutes les applications ne sont scriptables). Pour ce dernier point, il convient donc de r\u00e9aliser d\u00e8s le d\u00e9but du projet un test de faisabilit\u00e9 technique lorsqu'un doute d'adh\u00e9rence technique est \u00e9mis entre les outils de scripting et la technique utilis\u00e9e dans l'application.<\/p>\n<p dir=\"ltr\">Suite \u00e0 la phase d'enregistrement, le script cr\u00e9\u00e9 avec un utilisateur applicatif n'est pas rejouable en l'\u00e9tat. Il faut r\u00e9aliser une corr\u00e9lation qui consiste \u00e0 assurer la coh\u00e9rence des encha\u00eenements d'appels des pages applicatives (Id de sessions entre pages web, param\u00e8tres d'entr\u00e9e issus des param\u00e8tres de sortie des pages pr\u00e9c\u00e9dentes, \u2026). Il faut ensuite variabiliser le script avec le jeu de donn\u00e9es (liste des users, cas de tests applicatifs).<\/p>\n<p dir=\"ltr\">La derni\u00e8re phase consiste \u00e0 encapsuler chaque appel applicatif par des transactions. Ce sont les r\u00e9sultats de ces transactions qui seront visibles dans les analyses et dans les r\u00e9sultats. Il faut aussi consid\u00e9rer les temps de r\u00e9flexion des utilisateurs entre deux actions utilisateurs (un temps nul entre deux appels applicatifs n'est pas r\u00e9aliste dans la majorit\u00e9 des cas).<\/p>\n<h2><a name=\"modelisation\"><\/a><br \/>\nMod\u00e9lisation<\/h2>\n<p dir=\"ltr\">Il existe plusieurs types de mod\u00e9lisation de charge qui repr\u00e9sente graphiquement et temporellement tous les type de tests de performance dont nous avons parl\u00e9 pr\u00e9c\u00e9demment.<\/p>\n<p dir=\"ltr\">La mod\u00e9lisation repose souvent sur une connaissance de l'activit\u00e9 r\u00e9elle en production. Le mod\u00e8le de charge pour le type \"charge nominale\" est la repr\u00e9sentation de la charge maximum constat\u00e9e en production. Le mod\u00e8le le plus commun est le mod\u00e8le dit en \u00ab M \u00bb. Ce mod\u00e8le pr\u00e9sente la particularit\u00e9 de dessiner un M sur une activit\u00e9 d'une journ\u00e9e o\u00f9 les deux pointes du M sont les deux maximums de la journ\u00e9e (souvent entre 10 heures et 12 heures et entre 14 heures et 16 heures). Cependant, il est courant d'utiliser une repr\u00e9sentation th\u00e9orique et simple de ce mod\u00e8le avec une mont\u00e9e en charge (\u00e0 la charge maximum), un plateau de charge (d'une charge constante) et une descente de charge rapide.<\/p>\n<h2><a name=\"tirs_analyses\"><br \/>\n<\/a>Tirs et analyses<\/h2>\n<p>Les tirs repr\u00e9sentent l'ex\u00e9cution de de tous les \u00e9l\u00e9ments con\u00e7us pr\u00e9alablement : Scripting, mod\u00e9lisation, Jdd, monitoring. Pendant ces tirs, il s'agit d'observer le comportement de l'application : erreurs dans les logs applicatifs, erreurs dans les outils de performance, consommation des serveurs, temps de r\u00e9ponse. Post tir, des outils d'APM vont permettre d'observer le comportement de l'application, de son architecture, des points de contention, etc... . D'autres outils permettent d'observer les m\u00e9triques syst\u00e8mes de fa\u00e7on pr\u00e9cise et le comportement au c\u0153ur de l'application (JVM pour Java ou Framework .NET) tels que Grafana.<\/p>\n<h2><a name=\"restitution\"><br \/>\n<\/a>Restitution<\/h2>\n<p dir=\"ltr\">Lorsque la campagne de tests est r\u00e9put\u00e9e termin\u00e9e, il est n\u00e9cessaire de r\u00e9diger un rapport pour la campagne de tests de performance.<\/p>\n<p dir=\"ltr\">Dans ce rapport, il faut consigner les \u00e9l\u00e9ments suivants (dans l'ordre) :<\/p>\n<ul>\n<li dir=\"ltr\">Rappel du contexte applicatif<\/li>\n<li dir=\"ltr\">Conclusion de la campagne<\/li>\n<li dir=\"ltr\">Rappel des exigences<\/li>\n<li dir=\"ltr\">Pr\u00e9conisations pour la mise en production<\/li>\n<li dir=\"ltr\">R\u00e9serves vis \u00e0 vis des \u00e9l\u00e9ments en erreurs ou des \u00e9l\u00e9ments non test\u00e9s (couverture de tests non optimale)<\/li>\n<li dir=\"ltr\">Analyses d\u00e9taill\u00e9es de tous les tirs probants avec conclusion pour chaque tirs et graphes d\u00e9taill\u00e9es<\/li>\n<li dir=\"ltr\">Annexes avec des \u00e9l\u00e9ments compl\u00e9mentaires (graphes, \u00e9l\u00e9ments d'architecture applicative, etc...)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Co-r\u00e9dig\u00e9 par <a href=\"https:\/\/www.tests-performance.fr\/?team=philippe-naveau\" target=\"_blank\" rel=\"noopener\">Philippe Naveau<\/a> et <a href=\"https:\/\/www.tests-performance.fr\/?team=marc-tuffreau\" target=\"_blank\" rel=\"noopener\">Marc Tuffreau<\/a><\/p>\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Pr\u00e9sentation des tests de performance Avant-propos G\u00e9n\u00e9ralit\u00e9s Les risques Les enjeux des tests de performance Les diff\u00e9rents types de tests de performance Bien comprendre les tests de performance Strat\u00e9gie Identifier les sc\u00e9narios critiques Processus de campagne de performance M\u00e9thodologie Scripting Mod\u00e9lisation Tirs et analyses Restitution Avant-propos A l&#8217;aube de l&#8217;informatique populaire et accessible \u00e0 tous, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-691","page","type-page","status-publish","hentry"],"acf":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/pages\/691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=691"}],"version-history":[{"count":108,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/pages\/691\/revisions"}],"predecessor-version":[{"id":1781,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/pages\/691\/revisions\/1781"}],"wp:attachment":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}