You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
287 lines
8.3 KiB
Markdown
287 lines
8.3 KiB
Markdown
|
2 months ago
|
# Exigences Non Fonctionnelles - BricoLoc Moderne
|
||
|
|
|
||
|
|
**Version** : 1.0
|
||
|
|
**Date** : 31 Octobre 2025
|
||
|
|
**Projet** : BricoLoc - Application Moderne de Location d'Outils
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. Performance
|
||
|
|
|
||
|
|
### 1.1 Temps de Réponse
|
||
|
|
|
||
|
|
| Opération | Objectif | Maximum Acceptable |
|
||
|
|
|-----------|----------|-------------------|
|
||
|
|
| Chargement page d'accueil | < 1s | 2s |
|
||
|
|
| Recherche d'outils | < 500ms | 1s |
|
||
|
|
| Affichage catalogue | < 1s | 2s |
|
||
|
|
| Création de réservation | < 1.5s | 3s |
|
||
|
|
| Mise à jour profil utilisateur | < 800ms | 2s |
|
||
|
|
|
||
|
|
### 1.2 Capacité et Charge
|
||
|
|
|
||
|
|
- **Utilisateurs simultanés** : Support de 1000 utilisateurs actifs simultanés
|
||
|
|
- **Transactions par seconde** : Minimum 100 TPS en charge normale
|
||
|
|
- **Temps de réponse sous charge** : Dégradation maximale de 20% sous charge maximale
|
||
|
|
- **Base de données** : Support de 100,000+ outils dans le catalogue
|
||
|
|
- **Réservations** : Gestion de 50,000+ réservations actives simultanées
|
||
|
|
|
||
|
|
### 1.3 Optimisation Frontend
|
||
|
|
|
||
|
|
- **First Contentful Paint (FCP)** : < 1.5s
|
||
|
|
- **Largest Contentful Paint (LCP)** : < 2.5s
|
||
|
|
- **Time to Interactive (TTI)** : < 3.5s
|
||
|
|
- **Cumulative Layout Shift (CLS)** : < 0.1
|
||
|
|
- **First Input Delay (FID)** : < 100ms
|
||
|
|
|
||
|
|
### 1.4 Optimisation Backend
|
||
|
|
|
||
|
|
- **Query Database** : < 100ms pour les requêtes simples
|
||
|
|
- **API Response Time** : < 200ms (P95)
|
||
|
|
- **Connection Pool** : Minimum 20 connexions PostgreSQL
|
||
|
|
- **Caching** : Redis pour données fréquemment consultées (catégories, entrepôts)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. Sécurité
|
||
|
|
|
||
|
|
### 2.1 Authentification et Autorisation
|
||
|
|
|
||
|
|
- **Authentification** : OAuth 2.0 / JWT via Supabase Auth
|
||
|
|
- **Multi-facteur (MFA)** : Recommandé pour les comptes admin
|
||
|
|
- **Session Management** :
|
||
|
|
- Durée de session : 24h par défaut
|
||
|
|
- Refresh token : 30 jours
|
||
|
|
- Logout automatique après inactivité : 1h
|
||
|
|
- **Password Policy** :
|
||
|
|
- Minimum 8 caractères
|
||
|
|
- Au moins 1 majuscule, 1 minuscule, 1 chiffre
|
||
|
|
- Pas de mots de passe communs (liste OWASP)
|
||
|
|
|
||
|
|
### 2.2 Protection des Données
|
||
|
|
|
||
|
|
- **Encryption at Rest** : AES-256 pour données sensibles
|
||
|
|
- **Encryption in Transit** : TLS 1.3 obligatoire
|
||
|
|
- **Row Level Security (RLS)** : Activé sur toutes les tables Supabase
|
||
|
|
- **Données Personnelles** :
|
||
|
|
- Conformité RGPD
|
||
|
|
- Anonymisation des données après 3 ans d'inactivité
|
||
|
|
- Droit à l'oubli respecté (suppression complète en 30 jours)
|
||
|
|
|
||
|
|
### 2.3 Sécurité Applicative
|
||
|
|
|
||
|
|
- **SQL Injection** : Prévention via paramètres Supabase
|
||
|
|
- **XSS** : Protection via Content Security Policy (CSP)
|
||
|
|
- **CSRF** : Tokens CSRF sur toutes les mutations
|
||
|
|
- **Rate Limiting** :
|
||
|
|
- API : 100 requêtes/minute par IP
|
||
|
|
- Auth : 5 tentatives de login/minute
|
||
|
|
- Recherche : 30 requêtes/minute
|
||
|
|
|
||
|
|
### 2.4 Audit et Logging
|
||
|
|
|
||
|
|
- **Activity Logs** : Conservation 90 jours
|
||
|
|
- **Security Events** : Alertes temps réel
|
||
|
|
- **Access Logs** : Conservation 1 an
|
||
|
|
- **SIEM Integration** : Prêt pour intégration future
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. Fiabilité et Disponibilité
|
||
|
|
|
||
|
|
### 3.1 Disponibilité
|
||
|
|
|
||
|
|
- **Uptime** : 99.5% (SLA cible)
|
||
|
|
- **Temps d'arrêt planifié** : Maximum 4h/mois (maintenance)
|
||
|
|
- **Fenêtre de maintenance** : Dimanche 2h-6h (heure locale)
|
||
|
|
|
||
|
|
### 3.2 Récupération
|
||
|
|
|
||
|
|
- **RTO (Recovery Time Objective)** : < 4h
|
||
|
|
- **RPO (Recovery Point Objective)** : < 1h
|
||
|
|
- **Backup** :
|
||
|
|
- Base de données : Daily automatic (Supabase)
|
||
|
|
- Retention : 30 jours
|
||
|
|
- Test de restauration : Mensuel
|
||
|
|
|
||
|
|
### 3.3 Résilience
|
||
|
|
|
||
|
|
- **Error Handling** : Gestion gracieuse des erreurs
|
||
|
|
- **Circuit Breaker** : Protection contre services défaillants
|
||
|
|
- **Retry Logic** : Retry exponentiel (max 3 tentatives)
|
||
|
|
- **Fallback Strategies** : Mode dégradé fonctionnel
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. Scalabilité
|
||
|
|
|
||
|
|
### 4.1 Scalabilité Horizontale
|
||
|
|
|
||
|
|
- **Frontend** : Serverless via Vercel (auto-scaling)
|
||
|
|
- **Backend API** : Supabase auto-scale
|
||
|
|
- **Base de données** : Supabase PostgreSQL (vertical scale)
|
||
|
|
- **Storage** : Supabase Storage (illimité)
|
||
|
|
|
||
|
|
### 4.2 Scalabilité Verticale
|
||
|
|
|
||
|
|
- **Database** : Support jusqu'à 8GB RAM (plan Pro)
|
||
|
|
- **Compute** : Serverless Edge Functions illimitées
|
||
|
|
- **Bandwidth** : 250GB/mois (plan Pro)
|
||
|
|
|
||
|
|
### 4.3 CDN et Caching
|
||
|
|
|
||
|
|
- **CDN** : Vercel Edge Network (monde entier)
|
||
|
|
- **Static Assets** : Mise en cache 1 an
|
||
|
|
- **API Responses** : Cache HTTP intelligent
|
||
|
|
- **Images** : Optimisation automatique (Next.js Image)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. Maintenabilité
|
||
|
|
|
||
|
|
### 5.1 Code Quality
|
||
|
|
|
||
|
|
- **Test Coverage** : Minimum 80%
|
||
|
|
- **Code Complexity** : Cyclomatic complexity < 10
|
||
|
|
- **Documentation** : JSDoc pour toutes les fonctions publiques
|
||
|
|
- **Linting** : ESLint strict activé
|
||
|
|
- **Formatting** : Prettier configuré
|
||
|
|
|
||
|
|
### 5.2 Architecture
|
||
|
|
|
||
|
|
- **Modularity** : Architecture microservices (6 services)
|
||
|
|
- **Loose Coupling** : Event-driven communication
|
||
|
|
- **Clean Architecture** : 3 couches (Domain, Application, Infrastructure)
|
||
|
|
- **SOLID Principles** : Respect des principes SOLID
|
||
|
|
|
||
|
|
### 5.3 Versioning
|
||
|
|
|
||
|
|
- **API Versioning** : Versioning sémantique (v1, v2...)
|
||
|
|
- **Git Flow** : Main, Develop, Feature branches
|
||
|
|
- **Changelog** : Keep a Changelog format
|
||
|
|
- **Release Notes** : Pour chaque version majeure
|
||
|
|
|
||
|
|
### 5.4 Monitoring et Debugging
|
||
|
|
|
||
|
|
- **Application Monitoring** : Vercel Analytics
|
||
|
|
- **Error Tracking** : Sentry (à configurer)
|
||
|
|
- **Performance Monitoring** : Web Vitals tracking
|
||
|
|
- **Logs** : Structured logging (JSON format)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6. Utilisabilité
|
||
|
|
|
||
|
|
### 6.1 Interface Utilisateur
|
||
|
|
|
||
|
|
- **Responsive Design** : Mobile-first (breakpoints: 640px, 768px, 1024px, 1280px)
|
||
|
|
- **Accessibility** : WCAG 2.1 AA compliance
|
||
|
|
- **Browser Support** :
|
||
|
|
- Chrome 90+
|
||
|
|
- Firefox 88+
|
||
|
|
- Safari 14+
|
||
|
|
- Edge 90+
|
||
|
|
- **Progressive Enhancement** : Fonctionne sans JavaScript (pages statiques)
|
||
|
|
|
||
|
|
### 6.2 Expérience Utilisateur
|
||
|
|
|
||
|
|
- **Feedback** : Indicateurs de chargement pour actions > 500ms
|
||
|
|
- **Error Messages** : Messages clairs et actionnables
|
||
|
|
- **Help System** : Tooltips contextuels
|
||
|
|
- **Internationalisation** : Prêt pour i18n (français par défaut)
|
||
|
|
|
||
|
|
### 6.3 Accessibilité
|
||
|
|
|
||
|
|
- **Keyboard Navigation** : Support complet
|
||
|
|
- **Screen Readers** : Semantic HTML + ARIA labels
|
||
|
|
- **Color Contrast** : Ratio minimum 4.5:1
|
||
|
|
- **Focus Indicators** : Visibles et clairs
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7. Portabilité
|
||
|
|
|
||
|
|
### 7.1 Environnements
|
||
|
|
|
||
|
|
- **Development** : Local avec Docker Compose (futur)
|
||
|
|
- **Staging** : Vercel Preview Deployments
|
||
|
|
- **Production** : Vercel Production
|
||
|
|
|
||
|
|
### 7.2 Infrastructure as Code
|
||
|
|
|
||
|
|
- **Deployment** : Vercel CLI + GitHub Actions
|
||
|
|
- **Configuration** : Environment variables
|
||
|
|
- **Secrets Management** : Vercel Environment Variables
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 8. Conformité et Légal
|
||
|
|
|
||
|
|
### 8.1 RGPD
|
||
|
|
|
||
|
|
- **Consentement** : Cookie banner conforme
|
||
|
|
- **Données Personnelles** : Collecte minimale
|
||
|
|
- **Droit d'accès** : Export des données utilisateur
|
||
|
|
- **Droit à l'oubli** : Suppression complète en 30 jours
|
||
|
|
- **Portabilité** : Export JSON des données
|
||
|
|
|
||
|
|
### 8.2 Cookies
|
||
|
|
|
||
|
|
- **Cookies essentiels** : Session, auth
|
||
|
|
- **Cookies analytiques** : Opt-in requis
|
||
|
|
- **Durée de conservation** : Maximum 13 mois
|
||
|
|
|
||
|
|
### 8.3 CGU et Mentions Légales
|
||
|
|
|
||
|
|
- **CGU** : Acceptation obligatoire à l'inscription
|
||
|
|
- **Mentions Légales** : Accessibles en footer
|
||
|
|
- **Politique de Confidentialité** : Accessible et claire
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 9. Métriques de Succès
|
||
|
|
|
||
|
|
### 9.1 KPIs Techniques
|
||
|
|
|
||
|
|
| Métrique | Cible | Mesure |
|
||
|
|
|----------|-------|--------|
|
||
|
|
| Uptime | 99.5% | Mensuelle |
|
||
|
|
| Response Time (P95) | < 2s | Hebdomadaire |
|
||
|
|
| Error Rate | < 1% | Quotidienne |
|
||
|
|
| Test Coverage | > 80% | Continue (CI) |
|
||
|
|
| Core Web Vitals | Tous "Good" | Hebdomadaire |
|
||
|
|
|
||
|
|
### 9.2 KPIs Métier
|
||
|
|
|
||
|
|
| Métrique | Cible | Mesure |
|
||
|
|
|----------|-------|--------|
|
||
|
|
| Temps de réservation | < 3 min | Mensuelle |
|
||
|
|
| Taux de conversion | > 5% | Mensuelle |
|
||
|
|
| Taux d'abandon panier | < 30% | Hebdomadaire |
|
||
|
|
| Satisfaction utilisateur | > 4/5 | Trimestrielle |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 10. Contraintes et Limitations
|
||
|
|
|
||
|
|
### 10.1 Contraintes Techniques
|
||
|
|
|
||
|
|
- **Budget** : Plan gratuit Supabase (500MB DB, 1GB bandwidth/mois)
|
||
|
|
- **Vercel** : Plan hobby (100GB bandwidth/mois)
|
||
|
|
- **Pas de serveur dédié** : Architecture serverless uniquement
|
||
|
|
|
||
|
|
### 10.2 Limitations Acceptées
|
||
|
|
|
||
|
|
- **Recherche avancée** : Pas de recherche full-text complexe (phase 1)
|
||
|
|
- **Analytics** : Analytics basiques uniquement
|
||
|
|
- **Notifications push** : Web push uniquement (pas de mobile natif)
|
||
|
|
- **Paiement** : Stripe uniquement (pas d'autres providers)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Conclusion
|
||
|
|
|
||
|
|
Ces exigences non fonctionnelles définissent le cadre de qualité pour l'application BricoLoc Moderne. Elles seront revues et ajustées au fur et à mesure de l'évolution du projet.
|
||
|
|
|
||
|
|
**Prochaine révision** : Semaine 10 (après première release)
|