Recueil des exigences¶
Distinguer ce que le système fait de comment il le fait — et rendre chaque exigence mesurable.
Exigences fonctionnelles et non-fonctionnelles¶
Distinguer ce que le système fait de comment il le fait est le premier travail de cadrage. Les exigences fonctionnelles décrivent les comportements observables par l'utilisateur. Les exigences non-fonctionnelles (NFR) décrivent les qualites du système — performance, disponibilité, scalabilité, sécurité.
| Type | Exemple | Mesurable |
|---|---|---|
| Fonctionnelle | Gérer des commandes | Oui — critères d'acceptance defines |
| Fonctionnelle | Authentifier les utilisateurs | Oui — flux de connexion et cas d'erreur spécifiés |
| Fonctionnelle | Générer des rapports PDF | Oui — format, contenu et déclencheur spécifiés |
| Non-fonctionnelle | Performance | Latence p99 < 200ms sur l'API de commande |
| Non-fonctionnelle | Disponibilité | 99.9% uptime (< 8h d'arrêt par an) |
| Non-fonctionnelle | Reprise sur incident | RPO < 1h, RTO < 4h |
| Non-fonctionnelle | Scalabilité | Tenir 10 000 req/s sans dégradation de latence |
| Non-fonctionnelle | Sécurité | Accès aux données PII restreint, audit log de toutes les consultations |
Rendre les NFR mesurables
Chaque exigence non-fonctionnelle doit être mesurable. "Le système doit être rapide" n'est pas une exigence — "latence p99 < 200ms" en est une. Sans seuil chiffre, il est impossible de valider en recette ou de déclencher une alerte en production.
Catégories de NFR et leur impact architectural¶
Les NFR se regroupent en catégories qui correspondent directement a des choix d'architecture :
Performance et latence¶
- Latence p99 < 200ms → exclut les architectures avec de nombreux sauts synchrones
- Throughput > 10 000 req/s → impose un load balancer et une conception stateless des services
- Temps de génération de rapport < 5s → impose du pre-calcul ou du caching agressif
Disponibilité et résilience¶
- 99.9% (8h/an) → déploiement sans interruption, health checks, restart automatique
- 99.95% (4h/an) → multi-zone, circuit breakers, graceful dégradation
- 99.99% (52min/an) → multi-region, réplication synchrone, runbooks testés
Reprise sur incident¶
- RPO (Recovery Point Objective) : combien de données peut-on perdre en cas de panne ?
- RTO (Recovery Time Objective) : combien de temps peut-on rester indisponible ?
- RPO < 1h impose des backups fréquents ou une réplication synchrone
- RTO < 15min impose une bascule automatique, pas manuelle
Sécurité et conformité¶
- RGPD : localisation des données, droit à l'effacement, audit log
- PCI-DSS : isolation des composants manipulant des données de carte, chiffrement at-rest
- SOC 2 : traçabilité de tous les accès aux données sensibles
Identifier les NFR tôt evite de découvrir en phase de tests que l'architecture choisie ne peut pas les satisfaire. Un système conçu sans SLA de disponibilité sera probablement déployé avec un seul point de défaillance.
Documents formels de cadrage¶
Le cadrage des exigences s'appuie sur des documents formalisés dont la structure varie selon le contexte — projet interne, appel d'offres, prestation externe. Trois documents principaux couvrent le spectre du besoin à la solution.
Cahier des charges (CDC)¶
Le cahier des charges exprime le besoin du commanditaire. Il décrit quoi sans prescrire comment. Sa structure type :
| Section | Contenu |
|---|---|
| Contexte et objectifs | Pourquoi le projet existe, quel problème il résout |
| Périmètre fonctionnel | Grandes fonctionnalités attendues, hors-périmètre explicite |
| Exigences non-fonctionnelles | Performance, disponibilité, sécurité, accessibilite |
| Contraintes | Budget, délai, équipe, reglementation, existant technique |
| Critères d'acceptance | Comment on valide que le système répond au besoin |
| Planning previsionnel | Jalons, livrables intermédiaires, date de mise en production |
Le CDC ne prescrit pas la solution
Un cahier des charges qui impose "utiliser Java Spring Boot avec PostgreSQL" n'est pas un cahier des charges — c'est une spécification technique deguisee. Le CDC décrit le problème. La solution vient après, dans la spécification technique.
Spécification fonctionnelle détaillée (SFD)¶
La SFD traduit le CDC en comportements précis du système. Elle décrit les règles métier, les parcours utilisateur, les cas d'erreur, les interfaces. C'est le document de référence pour les développeurs et les testeurs.
Contenu typique :
- Diagrammes de cas d'utilisation ou user story maps
- Règles de gestion détaillées
- Maquettes ou wireframes
- Matrice des droits et rôles
- Scenarios nominaux et alternatifs pour chaque fonctionnalité
Spécification technique détaillée (STD)¶
La STD décrit comment le système sera construit. Elle traduit les exigences fonctionnelles et non-fonctionnelles en choix techniques concrets :
- Architecture retenue (avec référence aux ADR)
- Schémas de données
- Contrats d'API
- Infrastructure cible
- Plan de déploiement
- Stratégie de tests
La STD est le pont entre le cadrage et la construction. Elle est validee par le comite d'architecture avant le début du développement.
Articulation entre les documents¶
graph LR
CDC[Cahier des charges] --"traduit en"--> SFD[Specification fonctionnelle]
CDC --"contraint"--> STD[Specification technique]
SFD --"alimente"--> STD
STD --"reference"--> ADR[ADR]
SFD --"valide par"--> TEST[Plan de tests]
STD --"valide par"--> TEST Dans un contexte agile, ces documents ne sont pas produits en sequence monolithique. Le CDC existe souvent sous forme de product vision et de backlog priorise. La SFD se materialise dans les user stories et les critères d'acceptance. La STD vit dans les ADR et le wiki technique. La forme change, pas le besoin.
Techniques de recueil des exigences¶
Les exigences ne tombent pas du ciel. Elles s'extraient par des techniques adaptées au contexte et aux interlocuteurs.
Interviews individuelles¶
L'interview est la technique la plus directe. On rencontre chaque partie prenante pour comprendre ses attentes, ses craintes et ses priorités.
Bonnes pratiques :
- Préparer les questions à l'avance — questions ouvertes, pas des validations
- Interviewer les parties prenantes séparément pour éviter l'influence du groupe
- Distinguer les besoins réels des solutions déjà imaginees ("j'ai besoin d'un export Excel" cache souvent "j'ai besoin de suivre mes commandes")
- Prendre des notes structurées et les faire valider par l'interviewe
Ateliers collaboratifs¶
Les ateliers reunissent plusieurs parties prenantes pour co-construire les exigences. Ils sont utiles pour révéler les conflits et les zones d'ombre.
| Type d'atelier | Objectif | Durée typique |
|---|---|---|
| Event Storming | Cartographier les processus métier | 2-4h |
| User Story Mapping | Prioriser les fonctionnalités par parcours utilisateur | 2-3h |
| Atelier de contraintes | Identifier les contraintes techniques et reglementaires | 1-2h |
| Spécification by Example | Définir les critères d'acceptance par l'exemple | 1-2h |
Prototypage exploratoire¶
Quand les parties prenantes ne savent pas ce qu'elles veulent (situation plus courante qu'on ne le croit), un prototype exploratoire révélé les exigences par l'usage.
Le prototype n'est pas un MVP. C'est un outil jetable dont la seule valeur est le feedback qu'il généré. Il doit être suffisamment realiste pour provoquer des réactions utiles, mais suffisamment léger pour être modifie en heures, pas en semaines.
Analyse de l'existant¶
Pour un système qui remplacé ou évolue un système existant, l'analyse de l'existant est incontournable. On y decouvre les exigences implicites — celles que personne ne mentionne parce qu'elles sont évidentes pour les utilisateurs actuels.
Techniques : observation directe, analyse des logs, interviews des utilisateurs, étude des tickets de support. Les bugs recurrents révèlent souvent des exigences non-fonctionnelles non documentees.
Choisir la technique selon le contexte¶
| Contexte | Technique recommandee | Justification |
|---|---|---|
| Parties prenantes multiples | Atelier collaboratif | Révélé les conflits en temps réel |
| Domaine métier complexe | Event Storming + interviews | Cartographie les processus avant les exigences |
| Remplacement de système existant | Analyse de l'existant + interviews | Capture les exigences implicites |
| Besoin flou ou innovant | Prototypage exploratoire | Materialise le besoin par l'usage |
| Projet reglemente | Interviews + documentation formelle | Traçabilité exigee par les auditeurs |
Priorisation MoSCoW¶
Toutes les exigences ne se valent pas. La méthode MoSCoW classe chaque exigence en quatre catégories qui structurent les arbitrages :
| Catégorie | Signification | Conséquence |
|---|---|---|
| Must have | Indispensable. Sans cette exigence, le système n'a pas de valeur. | Non-negociable. Présenté dans la première release. |
| Should have | Importante mais pas bloquante pour le lancement. | Prévue, mais peut glisser si nécessaire. |
| Could have | Souhaitable, apporte de la valeur si le temps le permet. | Incluse si le budget et le planning le permettent. |
| Won't have | Hors-périmètre pour cette version. Explicitement exclue. | Documentee pour les versions futures. |
Le W est aussi important que le M
Documenter ce qu'on ne fait pas est aussi important que documenter ce qu'on fait. Le W empêche le scope creep — quand une partie prenante demande une fonctionnalité exclue, la référence au W coupe court au debat.
Exemple de priorisation¶
| Exigence | MoSCoW | Justification |
|---|---|---|
| Authentification des utilisateurs | M | Pas de système sans authentification |
| Gestion des commandes | M | Fonction métier principale |
| Export PDF des factures | S | Important pour la comptabilité, pas bloquant au lancement |
| Tableau de bord analytique | C | Valeur ajoutee, pas critique pour le lancement |
| Application mobile native | W | Phase 2, responsive web suffit pour le lancement |
| Intégration ERP temps réel | S | Batch quotidien acceptable en phase 1 |
Règles de répartition¶
Une répartition saine suit approximativement cette distribution :
- Must : 30-40% des exigences. Si tout est M, rien n'est priorise.
- Should : 20-30%. Ce sont les fonctionnalités qui font la différence.
- Could : 15-25%. Le confort, pas la nécessité.
- Won't : 10-20%. La discipline du périmètre.
Si plus de 50% des exigences sont classees M, le travail de priorisation n'a pas été fait. Retourner en atelier avec les parties prenantes pour forcer les arbitrages.
Matrice de traçabilité¶
La matrice de traçabilité lie chaque exigence aux composants qui l'implementent, aux tests qui la valident et aux décisions qui l'impactent. Elle répond à la question : "si cette exigence change, qu'est-ce qui est impacte ?"
| Exigence ID | Description | Composant(s) | Test(s) | ADR associe |
|---|---|---|---|---|
| EF-001 | Gérer des commandes | OrderService, OrderAPI | E2E-001, INT-003 | — |
| EF-002 | Authentifier les utilisateurs | AuthService, AuthMiddleware | E2E-010, SEC-001 | ADR-003 |
| ENF-001 | Latence p99 < 200ms | API Gateway, Cache | PERF-001 | ADR-005 |
| ENF-002 | 99.9% disponibilité | Load Balancer, Health Check | CHAOS-001 | ADR-002 |
| ENF-003 | RGPD conformité | DataService, AuditLog | RGPD-001 | ADR-004 |
graph LR
EX[Exigence] --"implemente par"--> COMP[Composant]
EX --"validee par"--> TEST[Test]
EX --"decidee dans"--> ADR[Decision ADR]
COMP --"materialise dans"--> CODE[Code source]
TEST --"execute par"--> CI[Pipeline CI] La traçabilité n'est pas un exercice bureaucratique. Elle est utile dans trois situations concrètes :
- Impact analysis : quand une exigence change, on identifié immédiatement les composants et tests impactes.
- Couverture : on détecté les exigences sans test et les composants sans exigence associee.
- Audit : on démontré que chaque exigence reglementaire est implémentée et testée.
Outillage de la traçabilité¶
La matrice peut vivre dans un tableur pour les petits projets, mais les projets plus importants beneficient d'outils dédiés :
- Jira + liens : lier les epics (exigences) aux stories (composants) et aux test plans
- Azure DevOps : traçabilité native entre requirements, work items et test cases
- Notion / Confluence : bases de données relationnelles entre exigences et composants
- Code : tags dans les tests (
@requirement("ENF-001")) pour la traçabilité automatique
L'outil importe moins que la discipline. Une matrice non maintenue est pire que pas de matrice — elle donne une fausse impression de contrôle.
Anti-patterns du recueil d'exigences¶
| Anti-pattern | Symptome | Correction |
|---|---|---|
| Exigences-solutions | "Utiliser Redis pour le cache" | Reformuler en besoin : "latence < 50ms en lecture" |
| NFR génériques | "Le système doit être performant" | Exiger un seuil mesurable : p99 < 200ms |
| Absence de hors-périmètre | Le scope croit à chaque réunion | Documenter le W de MoSCoW des le début |
| Consensus mou | Tout est "must have" | Forcer le classement : maximum 30% de M |
| Exigences figees | Les exigences ne changent jamais | Réviser à chaque iteration, les besoins evoluent |
| Gold plating | Des NFR sur-dimensionnees "au cas où" | Chaque NFR doit être justifiee par un besoin réel |
Chapitre suivant : Contraintes et contexte — les faits qui eliminent des options avant même d'ouvrir un outil de modélisation.