v1.0 Novembre 2025
Document 8.3

Plan de Tests de Performance

La solution de cashback nouvelle génération

24 novembre 2025
Version 1.0
1

INTRODUCTION ET OBJECTIFS

1.1 Contexte

Les tests de performance sont essentiels pour garantir que REWAPP peut supporter la charge utilisateur prévue tout en maintenant une expérience utilisateur optimale. Ce document définit la stratégie, les métriques, les scénarios et les outils pour valider les performances de la plateforme.

1.2 Objectifs des Tests de Performance

  • Valider la capacité de charge : Vérifier que le système supporte le nombre d'utilisateurs simultanés prévu
  • Identifier les goulots d'étranglement : Détecter les points de contention avant la mise en production
  • Garantir les temps de réponse : Valider que les SLA de performance sont respectés (< 200ms)
  • Tester la scalabilité : Vérifier que l'auto-scaling fonctionne correctement sous charge
  • Assurer la stabilité : Confirmer que le système reste stable sous charge prolongée
  • Valider les mécanismes de protection : Tester le rate limiting et les circuit breakers

1.3 Périmètre des Tests

Périmètre des Tests

Composant Inclus Priorité
API Backend (NestJS) Oui Critique
Base de données PostgreSQL Oui Critique
Cache Redis Oui Critique
API Gateway (Kong) Oui Critique
Application Mobile (API calls) Oui Majeur
Dashboard Partenaire (API calls) Oui Majeur
Dashboard Admin (API calls) Oui Mineur
Site Vitrine (SSG) Oui Mineur
Intégrations tierces (mocks) Partiel Mineur

1.4 Projections de Charge

Projections de Charge

Indicateur Année 1 Année 2 Année 3
Utilisateurs actifs 30 000 100 000 300 000
Partenaires actifs 600 2 500 10 000
Transactions/jour estimées 5 000 20 000 60 000
Requêtes API/jour estimées 500 000 2 000 000 6 000 000
2

MÉTRIQUES ET SEUILS DE PERFORMANCE

2.1 Métriques Principales (KPIs)

KPIs de Performance

Métrique Définition Objectif Seuil Critique
P50 Médiane des temps de réponse < 100ms > 200ms
P95 95ème percentile < 200ms > 500ms
P99 99ème percentile < 500ms > 1000ms
Throughput Requêtes traitées par seconde > 500 req/s < 200 req/s
Error Rate Pourcentage d'erreurs < 0.1% > 1%
Availability Uptime du service 99.9% < 99%
TTFB Time to First Byte < 100ms > 300ms

2.2 Métriques Système

Seuils Système

Métrique Objectif Warning Critique
CPU Utilisation < 60% > 70% > 85%
Mémoire Utilisation < 70% > 80% > 90%
Connexions DB actives < 50% pool > 70% pool > 85% pool
Connexions Redis < 70% > 80% > 90%
Disk I/O < 60% > 70% > 85%
Network Bandwidth < 50% > 70% > 85%

2.3 Métriques par Endpoint Critique

SLA par Endpoint

Endpoint P95 Objectif Throughput Min Priorité
POST /auth/login < 300ms 100 req/s Critique
POST /auth/register < 500ms 50 req/s Critique
GET /points/balance < 100ms 200 req/s Critique
POST /qr-codes/generate < 150ms 100 req/s Critique
POST /qr-codes/scan < 200ms 100 req/s Critique
GET /transactions < 200ms 150 req/s Majeur
POST /banking/withdrawals < 500ms 30 req/s Majeur
GET /partners/nearby < 300ms 100 req/s Majeur
Webhooks bancaires < 1000ms 50 req/s Critique
3

PROFILS DE CHARGE

100 VUs Profil Normal (Baseline)
500 VUs Charge Standard (Année 1)
2 000 VUs Pic de Charge
5 000 VUs Année 3 (Cible)

3.1 Profil Normal (Baseline)

Ce profil représente une charge typique en période normale.

ParamètreValeur
Utilisateurs virtuels100
Durée du test30 minutes
Ramp-up5 minutes
DistributionRépartition réaliste des endpoints
Ratio lecture/écriture80% / 20%

3.2 Profil Charge Standard

Ce profil représente la charge attendue en Année 1.

ParamètreValeur
Utilisateurs virtuels500
Durée du test1 heure
Ramp-up10 minutes
Requêtes/seconde cible200 req/s
Transactions/heure500

3.3 Profil Pic de Charge

Ce profil simule un pic d'activité (promotions, événements).

ParamètreValeur
Utilisateurs virtuels2 000
Durée du test30 minutes
Ramp-up5 minutes
Requêtes/seconde cible1 000 req/s
Multiplicateur vs normalx10

3.4 Profil Année 3 (Cible)

Ce profil valide la capacité pour 300 000 utilisateurs.

ParamètreValeur
Utilisateurs virtuels5 000
Durée du test2 heures
Ramp-up15 minutes
Requêtes/seconde cible2 000 req/s
Transactions/heure2 500
4

SCÉNARIOS DE TESTS DE PERFORMANCE

4.1 SC-PERF-001 : Parcours Utilisateur Complet

PRIORITÉ CRITIQUE

Simulation du parcours complet d'un utilisateur depuis la connexion jusqu'à l'utilisation de ses points.

Pré-conditions

  • Utilisateurs de test créés en base
  • Partenaires de test configurés
  • Points crédités sur les comptes de test

Étapes

  1. 1
    Connexion

    POST /auth/login

  2. 2
    Récupération du profil

    GET /users/me

  3. 3
    Consultation du solde

    GET /points/balance

  4. 4
    Consultation de l'historique

    GET /transactions?limit=20

  5. 5
    Recherche de partenaires

    GET /partners/nearby

  6. 6
    Génération QR code

    POST /qr-codes/generate

  7. 7
    Vérification statut QR

    GET /qr-codes/{id}/status

Résultats attendus

  • Temps total du parcours < 2 secondes
  • Aucune erreur HTTP 5xx
  • Taux d'erreur < 0.1%

4.2 SC-PERF-002 : Génération QR Code sous Charge

PRIORITÉ CRITIQUE

Validation des performances de génération de QR codes avec blocage des points.

Pré-conditions

  • 1000 utilisateurs avec solde de points > 100

Étapes

  1. 1
    Génération simultanée

    500 utilisateurs génèrent un QR code simultanément

  2. 2
    Vérification blocage

    Vérification du blocage des points (Redis)

  3. 3
    Attente expiration

    60 secondes

  4. 4
    Vérification déblocage

    Vérification du déblocage automatique

Résultats attendus

  • Temps de génération < 150ms (P95)
  • Points correctement bloqués
  • Déblocage automatique fonctionnel
  • Aucune corruption de données

4.3 SC-PERF-003 : Scan QR Code Partenaire

PRIORITÉ CRITIQUE

Validation des performances du scan QR par les partenaires.

Résultats attendus

  • Temps de validation < 200ms (P95)
  • Aucun double débit
  • QR codes invalidés après scan

4.4 SC-PERF-004 : Webhooks Bancaires

PRIORITÉ CRITIQUE

Validation du traitement des webhooks de transactions bancaires.

Résultats attendus

  • Temps de traitement webhook < 1000ms
  • 100% des transactions traitées
  • Points crédités correctement
  • Notifications envoyées

4.5 SC-PERF-005 : Authentification sous Charge

PRIORITÉ CRITIQUE

Validation des performances du système d'authentification.

Résultats attendus

  • Temps de login < 300ms (P95)
  • Tokens JWT valides générés
  • Rate limiting fonctionnel

4.6 SC-PERF-006 : Demandes de Virement

PRIORITÉ MAJEUR

Validation des performances des demandes de virement bancaire.

Résultats attendus

  • Temps de création demande < 500ms
  • Points bloqués correctement
  • Aucune demande dupliquée
5

PLAN DE TESTS PAR COMPOSANT

5.1 Tests API Gateway (Kong)

Tests API Gateway

TestDescriptionSeuilPriorité
PERF-GW-001Rate limiting (100 req/min/user)Activation correcteCritique
PERF-GW-002Load balancing round-robinDistribution équitableMajeur
PERF-GW-003Circuit breaker (50% erreurs)Activation < 30sCritique
PERF-GW-004Latence ajoutée par gateway< 10ms overheadMajeur
PERF-GW-005Gestion 10 000 connexions simultanéesStableCritique

5.2 Tests Service Authentification

Tests Authentification

TestDescriptionSeuilPriorité
PERF-AUTH-001Login standard< 300ms P95Critique
PERF-AUTH-002Login avec 2FA< 500ms P95Majeur
PERF-AUTH-003Génération JWT RS256< 50msCritique
PERF-AUTH-004Refresh token< 100ms P95Critique
PERF-AUTH-005Validation JWT< 10msCritique
PERF-AUTH-006Protection brute force5 tentatives/15minCritique

5.3 Tests Service Points

Tests Service Points

TestDescriptionSeuilPriorité
PERF-PTS-001Consultation solde< 100ms P95Critique
PERF-PTS-002Historique paginé (100 items)< 200ms P95Majeur
PERF-PTS-003Crédit points (transaction)< 150ms P95Critique
PERF-PTS-004Calcul paliers fidélité< 500msMajeur
PERF-PTS-005Gestion expiration FIFO< 200msMajeur

5.4 Tests Service QR Code

Tests Service QR Code

TestDescriptionSeuilPriorité
PERF-QR-001Génération QR code< 150ms P95Critique
PERF-QR-002Signature HMAC-SHA256< 5msCritique
PERF-QR-003Validation scan< 200ms P95Critique
PERF-QR-004Blocage/déblocage Redis< 20msCritique
PERF-QR-005Expiration automatique (60s)± 1s précisionCritique

5.5 Tests Base de Données PostgreSQL

Tests PostgreSQL

TestDescriptionSeuilPriorité
PERF-DB-001Requête simple (SELECT by ID)< 5msCritique
PERF-DB-002Requête avec JOIN (transactions)< 50msMajeur
PERF-DB-003Insert transaction< 20msCritique
PERF-DB-004Update points ledger< 20msCritique
PERF-DB-005Requête géolocalisée (partenaires)< 100msMajeur
PERF-DB-006Connection pooling (100 conn)StableCritique

5.6 Tests Cache Redis

Tests Redis

TestDescriptionSeuilPriorité
PERF-REDIS-001GET/SET simple< 2msCritique
PERF-REDIS-002Session lookup< 5msCritique
PERF-REDIS-003Rate limiting counter< 3msCritique
PERF-REDIS-004QR code TTL (60s)Précis ± 1sCritique
PERF-REDIS-005Pub/Sub notifications< 10msMajeur
6

TESTS DE CHARGE (LOAD TESTING)

6.1 Objectif

Valider que le système fonctionne correctement sous la charge attendue en conditions normales d'exploitation.

6.2 Configuration

ParamètreValeur
Type de testLoad Test
Durée totale1 heure
Ramp-up10 minutes
Utilisateurs virtuels500
Steady state40 minutes
Ramp-down10 minutes

6.3 Distribution des Requêtes

Distribution Réaliste

EndpointPourcentageVUs Assignés
GET /points/balance25%125
GET /transactions20%100
GET /partners/nearby15%75
POST /auth/login10%50
POST /qr-codes/generate10%50
POST /qr-codes/scan8%40
GET /users/me7%35
Autres endpoints5%25

6.4 Critères de Succès Load Test

  • Temps de réponse P95 < 200ms
  • Taux d'erreur < 0.1%
  • CPU < 70%
  • Mémoire < 80%
  • Aucun timeout
  • Toutes les fonctionnalités opérationnelles
7

TESTS DE STRESS (STRESS TESTING)

7.1 Objectif

Identifier les limites du système et valider son comportement en cas de surcharge.

7.2 Configuration

ParamètreValeur
Type de testStress Test
ApprocheStepped load (augmentation progressive)
Utilisateurs initiaux100
Incrément+200 VUs toutes les 5 minutes
Maximum5 000 VUs ou point de rupture
Durée par palier5 minutes

7.3 Comportement Attendu par Niveau de Charge

Comportement sous Charge

ChargeComportement Attendu
Normal (100-500 VUs)Performances nominales
Élevée (500-1000 VUs)Légère dégradation acceptable
Très élevée (1000-2000 VUs)Auto-scaling activé, performances maintenues
Extrême (> 2000 VUs)Rate limiting activé, graceful degradation

7.4 Critères de Validation

  • Auto-scaling déclenché correctement
  • Circuit breakers activés si nécessaire
  • Rate limiting protège le système
  • Aucune corruption de données
  • Récupération complète après stress
8

TESTS D'ENDURANCE (SOAK TESTING)

8.1 Objectif

Valider la stabilité du système sur une période prolongée pour détecter les fuites mémoire et la dégradation progressive.

8.2 Configuration

ParamètreValeur
Type de testSoak Test
Durée totale8 heures (minimum)
Utilisateurs virtuels300
ProfilCharge stable sans variation

8.3 Points de Surveillance

  • Memory leaks : Augmentation progressive de la mémoire utilisée
  • Connection leaks : Accumulation de connexions non fermées
  • File descriptors : Épuisement des descripteurs
  • Disk space : Accumulation de logs/fichiers temporaires
  • Performance degradation : Dégradation progressive des temps de réponse

8.4 Critères de Succès

  • Mémoire stable (variation < 10% sur 8h)
  • Connexions DB stables
  • Temps de réponse constants
  • Aucun restart nécessaire
  • Logs sans erreur critique
9

TESTS DE SCALABILITÉ

9.1 Objectif

Valider que l'auto-scaling horizontal fonctionne correctement et que le système scale linéairement.

9.2 Tests Auto-Scaling ECS

Auto-Scaling Triggers

TestTriggerAction AttendueDélai
SCALE-001CPU > 70% pendant 2minScale-out (+1 task)< 5 min
SCALE-002CPU < 30% pendant 5minScale-in (-1 task)< 10 min
SCALE-003Memory > 80%Scale-out< 5 min
SCALE-004Requests > 1000/minScale-out< 5 min

9.3 Test de Scaling Linéaire

Objectif : Vérifier que doubler les ressources double la capacité.

Capacité vs Ressources

InstancesCapacité AttendueÉcart Acceptable
2 tasks400 req/sBaseline
4 tasks800 req/s± 15%
6 tasks1200 req/s± 15%
8 tasks1600 req/s± 15%
10 tasks2000 req/s± 15%

9.4 Test de Scaling Database

TestDescriptionValidation
SCALE-DB-001Read Replica activationLectures distribuées
SCALE-DB-002Connection pooling efficacePas de contention
SCALE-DB-003Query performance avec chargeStable
10

OUTILS ET INFRASTRUCTURE DE TESTS

10.1 Outils de Tests de Performance

Outils Disponibles

OutilUsageVersion
K6 (Grafana)Tests de charge principaux0.47+
JMeterTests de charge complémentaires5.6+
GatlingTests avancés (Scala)3.9+
ArtilleryTests rapides CI/CD2.0+
LocustTests Python (flexibilité)2.15+

10.2 Outil Principal : K6

RECOMMANDATION

K6 est l'outil recommandé pour REWAPP.

  • Script en JavaScript : Facile à maintenir par l'équipe
  • Performances élevées : Écrit en Go, très efficace
  • Intégration CI/CD : S'intègre facilement avec GitHub Actions
  • Métriques riches : Export vers InfluxDB/Prometheus/Grafana
  • Cloud option : K6 Cloud pour tests distribués

10.3 Infrastructure de Monitoring

Stack Monitoring

ComposantOutilUsage
Métriques systèmeCloudWatchCPU, Mémoire, Network
Métriques applicativesPrometheus + GrafanaLatence, Throughput, Erreurs
APMAWS X-Ray / DatadogTracing distribué
LogsCloudWatch LogsAnalyse des erreurs
AlertingCloudWatch AlarmsNotifications temps réel

10.4 Configuration Environnement de Test

Ressources Dédiées

ComposantConfiguration Test
Générateurs K6EC2 c5.xlarge x 2 (ou K6 Cloud)
API stagingECS Fargate (config production)
PostgreSQLRDS db.t3.medium (replica prod)
RedisElastiCache cache.t3.small
MonitoringGrafana + InfluxDB dédié
11

SCRIPTS K6 - EXEMPLES

11.1 Script de Test de Charge Basique

JavaScript
// k6-load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
import { Rate, Trend } from 'k6/metrics';

// Métriques personnalisées
const errorRate = new Rate('errors');
const loginDuration = new Trend('login_duration');

// Configuration du test
export const options = {
  stages: [
    { duration: '5m', target: 100 },  // Ramp-up
    { duration: '30m', target: 500 }, // Steady state
    { duration: '5m', target: 0 },    // Ramp-down
  ],
  thresholds: {
    http_req_duration: ['p(95)<200'],
    errors: ['rate<0.01'],
  },
};

const BASE_URL = 'https://staging.api.rewapp.fr/api/v1';

export default function () {
  // Login
  const loginRes = http.post(BASE_URL + '/auth/login', 
    JSON.stringify({
      email: 'user' + __VU + '@test.rewapp.fr',
      password: 'TestPassword123!'
    }),
    { headers: { 'Content-Type': 'application/json' } }
  );
  
  loginDuration.add(loginRes.timings.duration);
  
  check(loginRes, {
    'login successful': (r) => r.status === 200,
    'has access token': (r) => r.json('data.accessToken') !== undefined,
  }) || errorRate.add(1);

  const token = loginRes.json('data.accessToken');
  
  // Get balance
  const balanceRes = http.get(BASE_URL + '/points/balance', {
    headers: { 
      'Authorization': 'Bearer ' + token,
      'Content-Type': 'application/json'
    }
  });
  
  check(balanceRes, {
    'balance retrieved': (r) => r.status === 200,
  }) || errorRate.add(1);

  sleep(1);
}

11.2 Script de Test QR Code

JavaScript
// k6-qrcode-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  vus: 100,
  duration: '10m',
  thresholds: {
    http_req_duration: ['p(95)<150'],
    'checks': ['rate>0.99'],
  },
};

export default function () {
  const token = login();
  
  // Génération QR code
  const qrRes = http.post(BASE_URL + '/qr-codes/generate',
    JSON.stringify({ pointsAmount: 50 }),
    { headers: authHeaders(token) }
  );
  
  check(qrRes, {
    'QR generated': (r) => r.status === 201,
    'has QR data': (r) => r.json('data.qrCodeData') !== undefined,
    'has expiration': (r) => r.json('data.expiresAt') !== undefined,
    'duration < 150ms': (r) => r.timings.duration < 150,
  });

  sleep(0.5);
}

11.3 Script de Test de Stress

JavaScript
// k6-stress-test.js
export const options = {
  stages: [
    { duration: '2m', target: 100 },
    { duration: '5m', target: 500 },
    { duration: '5m', target: 1000 },
    { duration: '5m', target: 2000 },
    { duration: '5m', target: 3000 },
    { duration: '5m', target: 4000 },
    { duration: '5m', target: 5000 },
    { duration: '5m', target: 0 },
  ],
  thresholds: {
    http_req_failed: ['rate<0.05'],
    http_req_duration: ['p(99)<1000'],
  },
};
12

ENVIRONNEMENT DE TESTS

12.1 Environnement Staging

ComposantConfigurationNotes
URL Basestaging.api.rewapp.frHTTPS obligatoire
Instances ECS2 tasks (comme prod minimum)Auto-scaling désactivé
PostgreSQLdb.t3.small, données anonymiséesBackup avant chaque test
Rediscache.t3.microFlush avant tests
Rate LimitingDésactivé ou augmentéPour tests de charge uniquement

12.2 Environnement Performance Dédié

Pour les tests de charge importants, un environnement dédié est recommandé :

ComposantConfiguration
URL Baseperf.api.rewapp.fr
Instances ECSConfig identique à production
PostgreSQLRéplica de production (données anonymisées)
RedisConfig identique à production
MonitoringGrafana dédié avec rétention 30 jours

12.3 Données de Test

  • 10 000 utilisateurs de test avec profils variés
  • 500 partenaires de test
  • 100 000 transactions historiques
  • Points distribués sur les comptes (0 à 10 000)
  • Paliers fidélité variés (Bronze à Diamant)
13

CRITÈRES DE SUCCÈS ET VALIDATION

13.1 Critères Globaux de Succès

Critères Globaux

CritèreObjectifBloquant
Temps réponse P95< 200msOui
Taux d'erreur< 0.1%Oui
Disponibilité> 99.9%Oui
Throughput minimum> 500 req/sOui
CPU max sous charge< 85%Non
Mémoire max sous charge< 90%Non
Aucune corruption données0 incidentOui

13.2 Validation par Type de Test

Type TestCritères SuccèsValidation
Load TestP95 < 200ms, Erreurs < 0.1%PASS si tous critères OK
Stress TestDégradation gracieuse, Récupération OKPASS si comportement prévisible
Soak TestStabilité 8h, Pas de memory leakPASS si métriques stables
ScalabilitéScaling linéaire ±15%PASS si auto-scaling OK

13.3 Critères de Blocage Release

CRITÈRES BLOQUANTS POUR LA MISE EN PRODUCTION
  • Temps de réponse P95 > 500ms sur endpoints critiques
  • Taux d'erreur > 1%
  • Memory leak détecté
  • Corruption de données
  • Auto-scaling non fonctionnel
  • Rate limiting non fonctionnel
14

RAPPORT ET ANALYSE

14.1 Contenu du Rapport de Tests

Chaque session de tests génère un rapport comprenant :

  • Résumé exécutif : Pass/Fail, métriques clés
  • Configuration du test : Profil, durée, VUs
  • Métriques détaillées : Latence par endpoint, throughput, erreurs
  • Graphiques : Évolution temporelle des métriques
  • Points de rupture : Si stress test
  • Recommandations : Optimisations identifiées
  • Anomalies : Comportements inattendus

14.2 Template de Rapport

Template
RAPPORT DE TESTS DE PERFORMANCE - [DATE]

1. RÉSUMÉ
   - Type de test : [Load/Stress/Soak/Scalabilité]
   - Résultat global : [PASS/FAIL]
   - Durée : [X heures]
   - VUs maximum : [X]

2. MÉTRIQUES CLÉS
   - P50 : [X ms]
   - P95 : [X ms]
   - P99 : [X ms]
   - Throughput : [X req/s]
   - Taux erreur : [X%]

3. ANALYSE DÉTAILLÉE
   [Graphiques et observations]

4. RECOMMANDATIONS
   [Actions correctives si nécessaire]

14.3 Fréquence des Rapports

TypeFréquenceDestinataires
Tests CI/CDÀ chaque PRÉquipe Dev
Tests hebdomadairesChaque vendrediTech Lead, DevOps
Tests pré-releaseAvant chaque releaseÉquipe complète, Product
Tests trimestrielsChaque trimestreDirection technique
15

PLANNING DES TESTS

15.1 Intégration CI/CD

Tests Automatisés

DéclencheurType TestDuréeBloquant
Pull RequestSmoke test (10 VUs, 2min)2 minOui
Merge developLoad test léger (50 VUs, 10min)10 minNon
Release stagingLoad test complet (500 VUs, 30min)30 minOui
Release productionSmoke test post-deploy5 minAlerte

15.2 Planning Tests Manuels

FréquenceType TestResponsable
HebdomadaireLoad test completDevOps
Bi-mensuelStress testDevOps + Dev
MensuelSoak test (8h)DevOps
TrimestrielTest scalabilité completÉquipe complète
Pré-release majeureSuite complèteÉquipe complète

15.3 Calendrier Année 1

Phase MVP (M1-M2)

Smoke tests, Load basique

2
Pré-lancement (M3)

Suite complète, Stress test

3
Post-lancement (M4-M6)

Monitoring continu, Soak mensuel

4
Croissance (M7-M12)

Tests scalabilité, Optimisations

16

ANNEXES

16.1 Checklist Pré-Test

Avant chaque session de tests de performance :

  • Environnement staging opérationnel
  • Données de test chargées
  • Monitoring actif (Grafana, CloudWatch)
  • Équipe informée du créneau de test
  • Backup de la base de données effectué
  • Logs vidés pour analyse propre
  • Rate limiting ajusté si nécessaire
  • Générateurs K6 configurés

16.2 Checklist Post-Test

Après chaque session de tests :

  • Collecter les métriques K6
  • Exporter les dashboards Grafana
  • Analyser les logs d'erreur
  • Vérifier l'intégrité des données
  • Restaurer la configuration normale
  • Rédiger le rapport de test
  • Partager les résultats à l'équipe
  • Créer les tickets d'optimisation si nécessaire

16.3 Contacts et Escalade

RôleResponsabilité
DevOps LeadExécution des tests, infrastructure
Tech LeadValidation des résultats, décision Go/No-Go
Dev BackendOptimisations, corrections
DBAAnalyse performance base de données
Product OwnerPriorisation des optimisations