Étapes d'un projetDans le dialogue d’impression, choisissez « Enregistrer au format PDF » comme destination.
Retour

Génie logiciel · C2 Cycle de vie · 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 :

ÉtapeCe qu'on y faitCe qu'elle produit
Analyse des besoinscomprendre ce que le client veut vraimentun cahier des charges (bloc III)
Conceptiondécider de l'architecture, découper en modulesdes modèles, une structure (bloc IV)
Implémentationécrire le codele logiciel
Testsvérifier qu'il fait ce qui est demandéun logiciel vérifié (bloc V)
Déploiementle mettre en service chez l'utilisateurun logiciel en production
Maintenancecorriger et faire évoluer après livraisonle 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èstradition
  • 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 paschaque étape nourrit la suivante
  • Parce que l'analyse des besoins est la partie la plus longue du projetduré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.