Chapitre 1 · 4 h
Étapes d'un projet
Analyse des besoins, conception, implémentation, tests, déploiement, maintenance ; pourquoi chaque étape existe ; ce que coûte une erreur détectée tard.
Un projet logiciel ne va pas directement de l'idée au code. Entre les deux, une suite d'étapes, chacune préparant la suivante. Ce chapitre les nomme, explique pourquoi chacune existe, et établit le fait qui gouverne tout le cycle de vie : plus une erreur est détectée tard, plus elle coûte cher à corriger. C'est ce fait qui donne un sens à l'ordre des étapes, et qui expliquera, au chapitre suivant, pourquoi les modèles de développement diffèrent.
Les étapes d'un projet
Un projet logiciel traverse, sous une forme ou une autre, six grandes étapes :
| Étape | Ce qu'on y fait | Ce qu'elle produit |
|---|---|---|
| Analyse des besoins | comprendre ce que le client veut vraiment | un cahier des charges (bloc III) |
| Conception | décider de l'architecture, découper en modules | des modèles, une structure (bloc IV) |
| Implémentation | écrire le code | le logiciel |
| Tests | vérifier qu'il fait ce qui est demandé | un logiciel vérifié (bloc V) |
| Déploiement | le mettre en service chez l'utilisateur | un logiciel en production |
| Maintenance | corriger et faire évoluer après livraison | le logiciel, qui continue de vivre |
Chaque étape consomme le produit de la précédente : la conception s'appuie sur les besoins, le code sur la conception, les tests sur le code. C'est la même logique de cascade que les phases d'un compilateur — chaque maillon a besoin du précédent.
Pourquoi chaque étape existe
L'erreur du débutant est de vouloir « sauter » directement au code. Chaque étape omise se paie plus tard, et plus cher.
Coder sans avoir analysé les besoins, c'est construire vite quelque chose que le client ne voulait pas : le logiciel « marche » et ne sert à rien. Coder sans conception, c'est empiler des morceaux qui finissent par ne plus tenir ensemble. Déployer sans tests, c'est laisser l'utilisateur découvrir les bugs à votre place — au pire moment. Ignorer la maintenance dès la conception, c'est livrer un logiciel qu'on ne pourra pas faire évoluer.
Aucune de ces étapes n'est une formalité administrative : chacune répond à une question que le projet devra de toute façon affronter. Les nommer, c'est décider quand on y répond — tôt et à froid, ou tard et dans l'urgence.
Quiz · 1 question
Pourquoi l'analyse des besoins précède-t-elle l'implémentation, et que risque-t-on à l'inverser ?
- Par tradition administrative ; en pratique on peut coder d'abord et documenter après — tradition
- Parce que la conception et le code s'appuient sur les besoins : coder sans les avoir compris produit vite un logiciel qui « marche » mais que le client ne voulait pas — chaque étape nourrit la suivante
- Parce que l'analyse des besoins est la partie la plus longue du projet — durée
Réponse : Chaque étape consomme le produit de la précédente : la conception, puis le code, s'appuient sur les besoins. Coder d'abord revient à bâtir sur du vide — on produit efficacement quelque chose que le client n'a pas demandé, et il faut tout refaire une fois le malentendu découvert. Ce n'est ni une formalité ni une question de durée : c'est l'ordre logique de construction. Documenter après ne rattrape pas un besoin mal compris au départ.
Ce que coûte une erreur détectée tard
Voici le principe central du chapitre, et l'un des plus robustes du génie logiciel : le coût de correction d'un défaut croît très vite avec le retard de sa détection.
Un malentendu sur le besoin qui aurait coûté 1 à clarifier au départ coûte bien plus cher une fois qu'on a construit dessus. Les ordres de grandeur observés sur de nombreux projets :
trouvé à l'étape « besoins » → 1×trouvé à la conception → 5×trouvé à l'implémentation → 10×trouvé aux tests → 20×trouvé après déploiement → 50×trouvé en maintenance → 100×Pourquoi cette explosion ? Parce qu'un défaut découvert tard oblige à défaire tout ce qui a été bâti par-dessus : re-spécifier, re-concevoir, re-coder, re-tester, redéployer — et parfois réparer les dégâts déjà causés chez l'utilisateur. C'est exactement le scénario d'Ariane 5 (chapitre 1) : une hypothèse fausse, détectée à l'allumage plutôt qu'à la spécification.
La leçon pratique en découle directement : on déplace l'effort vers l'amont. Une heure passée à bien comprendre le besoin ou à concevoir en économise dix plus tard. C'est le principe « détecter au plus tôt », et la raison d'être des revues et des tests — qui rapprochent la détection du moment où l'erreur a été commise. L'exercice vous fait chiffrer cette explosion.
À vous
L'exercice ancre les deux idées du chapitre. Vous ordonnez les étapes d'un projet — pour vérifier que chacune prépare la suivante — puis vous chiffrez le coût d'une erreur de besoins selon la phase où on la détecte.
Le facteur passe de 1 à 100 entre la spécification et la maintenance. C'est ce chiffre, plus que tout discours, qui justifie de prendre le temps de spécifier, de concevoir et de tester — au lieu de courir au code.
Exercice de code
Ordonnez les étapes d'un projet, puis chiffrez le coût d'une erreur de besoins selon la phase où on la détecte. Constatez l'explosion — un défaut coûtant 1 au départ en coûte 100 en maintenance — et pourquoi il faut déplacer l'effort vers l'amont.
Point de départ
// Les étapes d'un projet, dans le DÉSORDRE. Chacune produit de quoi nourrir
// la suivante ; les sauter, c'est bâtir sur du vide.
const ETAPES = {
implementation: "écrire le code",
besoins: "comprendre ce que le client veut vraiment",
maintenance: "corriger et faire évoluer après la livraison",
conception: "décider de l'architecture, découper en modules",
tests: "vérifier que le logiciel fait ce qui est demandé",
deploiement: "mettre en service chez l'utilisateur",
};
// ── À VOUS (1) : ordonner les étapes ────────────────────────────────────────
const ordre = []; // à compléter : la suite des clés, du début à la fin
// ── À VOUS (2) : le coût d'une erreur selon QUAND on la trouve ──────────────
// Un défaut introduit à l'étape « besoins » coûte de plus en plus cher à
// corriger à mesure qu'il est découvert tard (facteur multiplicatif observé
// sur de nombreux projets). Compléter coutCorrection().
const FACTEUR = { besoins: 1, conception: 5, implementation: 10, tests: 20, deploiement: 50, maintenance: 100 };
function coutCorrection(phaseDecouverte) {
// à compléter : renvoyer le facteur associé à la phase de découverte
return 0;
}
// ── Vérification ────────────────────────────────────────────────────────────
const CORRECT = ["besoins", "conception", "implementation", "tests", "deploiement", "maintenance"];
console.log("Votre ordre :", ordre.join(" → "));
console.log("ordre correct ?", JSON.stringify(ordre) === JSON.stringify(CORRECT));
console.log("");
console.log("Une erreur de BESOINS coûte, selon quand on la trouve :");
for (const p of CORRECT) {
console.log(" trouvée en " + p.padEnd(15) + " → " + coutCorrection(p) + "×");
}
Solution
const ordre = ["besoins", "conception", "implementation", "tests", "deploiement", "maintenance"];
function coutCorrection(phaseDecouverte) {
return FACTEUR[phaseDecouverte];
}
// ── Ce que l'exercice enseigne ──────────────────────────────────────────────
//
// 1. Chaque étape PRODUIT ce dont la suivante a besoin : les besoins guident
// la conception, qui guide le code, qu'on teste, qu'on déploie, qu'on
// maintient. Sauter une étape — coder sans avoir compris le besoin,
// déployer sans tester — revient à bâtir sur du vide. C'est pourquoi
// l'ordre n'est pas décoratif.
//
// 2. Le coût d'une erreur EXPLOSE avec le retard de détection. Un malentendu
// sur le besoin qui aurait coûté 1 à clarifier au départ coûte 10 à
// corriger une fois codé, 50 après déploiement, 100 en maintenance : il
// faut re-spécifier, re-concevoir, re-coder, re-tester, redéployer, et
// parfois réparer les dégâts déjà causés chez l'utilisateur.
//
// 3. La leçon pratique : on DÉPLACE l'effort vers l'AMONT. Une heure passée à
// bien comprendre le besoin (bloc III) ou à concevoir (bloc IV) en
// économise dix plus tard. C'est le principe « détecter au plus tôt » —
// et la raison d'être des revues et des tests (bloc V), qui rapprochent la
// détection du moment où l'erreur a été commise.
//
// 4. Ce chiffrage explique aussi POURQUOI les modèles de développement
// diffèrent (chapitre 3) : la cascade parie sur un amont parfait,
// l'itératif accepte de se tromper mais raccourcit la boucle pour détecter
// vite. Tous cherchent à réduire le coût des erreurs tardives.
Ce que la suite en fait
Vous connaissez les étapes et savez pourquoi les respecter. Reste une question : dans quel ordre et à quel rythme les enchaîner ? Faut-il tout spécifier avant de coder une seule ligne, ou avancer par petits pas ?
C'est l'objet du chapitre 3 : les modèles de développement — cascade, V, itératif, agile —, qui sont autant de façons d'organiser ces mêmes étapes. Chacun fait un pari différent sur le coût des erreurs tardives que vous venez de mesurer : la cascade parie sur un amont parfait, l'itératif accepte de se tromper mais raccourcit la boucle pour détecter vite.
À retenir
Flashcards · 4 cartes
- Quelles sont les six grandes étapes d'un projet logiciel, et quel lien les relie ?
- Analyse des besoins, conception, implémentation, tests, déploiement, maintenance. Chaque étape CONSOMME le produit de la précédente : la conception s'appuie sur les besoins, le code sur la conception, les tests sur le code. Sauter une étape revient à bâtir sur du vide — l'ordre est logique, pas administratif.
- Comment évolue le coût de correction d'un défaut selon le moment où on le détecte ?
- Il EXPLOSE avec le retard : ~1× s'il est trouvé à la spécification, ~10× à l'implémentation, ~50× après déploiement, ~100× en maintenance. Un défaut découvert tard oblige à défaire tout ce qui a été bâti dessus (re-spécifier, re-concevoir, re-coder, re-tester, redéployer, réparer les dégâts). C'est le fait qui gouverne tout le cycle de vie.
- Quelle stratégie découle du coût croissant des erreurs tardives ?
- Déplacer l'effort vers l'AMONT et « détecter au plus tôt » : une heure passée à bien comprendre le besoin ou à concevoir en économise dix plus tard. C'est la raison d'être des revues (relecture entre pairs) et des tests, qui rapprochent la détection du moment où l'erreur a été commise, quand elle est encore bon marché à corriger.
- Pourquoi ne peut-on pas « sauter directement au code » ?
- Parce que chaque étape omise se paie plus tard et plus cher : coder sans besoins produit un logiciel que le client ne voulait pas ; coder sans conception empile des morceaux qui ne tiennent plus ensemble ; déployer sans tests fait découvrir les bugs par l'utilisateur. Nommer les étapes, c'est décider QUAND on répond aux questions — tôt et à froid, ou tard et dans l'urgence.