Conduite du projetDans le dialogue d’impression, choisissez « Enregistrer au format PDF » comme destination.
Retour

Génie logiciel · C6 Projet intégrateur · Chapitre 1 · 4 h

Conduite du projet

Constitution des équipes ; découpage en tâches et planification simple ; points d'avancement ; rédaction de la documentation ; soutenance et démonstration.

Nous voici au terme du cours, et à l'endroit qui, en réalité, l'a traversé de bout en bout. Le projet n'est pas un dernier chapitre ajouté aux autres : le projet est l'UE. Depuis la première semaine, en équipe de trois ou quatre, vous avez conduit un logiciel modeste — gestion de bibliothèque, de scolarité, de tournoi — et chaque bloc du cours y a ajouté une couche : le cahier des charges après le bloc III, la conception au bloc IV, les tests au bloc V, Git dès le début.

Ce chapitre traite la conduite de ce projet : ce qui fait qu'un ensemble de techniques devient un logiciel livré, à plusieurs, dans le temps. Car un projet n'est pas la somme de ses techniques — c'est leur orchestration.

Constituer l'équipe

Un projet à plusieurs commence par une évidence souvent négligée : se répartir clairement rôles et responsabilités. Le chapitre 1 a nommé les rôles — client, analyste, concepteur, développeur, testeur, chef de projet ; dans une équipe de trois ou quatre, chacun en cumule plusieurs, et ils tournent au fil du projet.

Deux écueils à éviter, aux extrêmes opposés :

Le rappel du chapitre 1 vaut plus que jamais : la plupart des difficultés d'un projet sont humaines et organisationnelles avant d'être techniques. Une équipe qui communique bat une équipe plus compétente qui ne se parle pas.

Découper en tâches et planifier

On ne pilote pas « faire la bibliothèque » : c'est trop gros pour être estimé, réparti, ou suivi. On le découpe en tâches petites, nommées, dont on peut dire quand elles sont finies. Ce découpage rend le projet à la fois estimable (combien de temps pour chaque tâche ?) et répartissable (qui prend quoi ?).

Les tâches ne sont pas indépendantes : certaines ont des pré-requis. On ne teste pas l'emprunt avant de l'avoir codé, on ne code pas avant d'avoir le diagramme, ni le diagramme avant le cahier des charges — c'est le cycle de vie (chapitre 2) à la maille de la tâche. En ordonnant les tâches selon leurs dépendances, on obtient un ordre de réalisation valide, et surtout on repère ce qui peut se faire en parallèle : deux membres écrivant « classe Livre » et « classe Abonné » en même temps. C'est ce parallélisme, une fois le travail découpé et ordonné, qui permet à une équipe d'aller plus vite qu'une personne seule. L'exercice vous fait construire cet ordonnancement.

La planification, à votre niveau, reste simple : la liste des tâches, leur ordre, qui fait quoi, et une estimation grossière. Un tableau partagé (le suivi des tâches du chapitre 9) suffit. L'important n'est pas la précision du plan — elle est illusoire — mais d'avoir un cap commun et de savoir où l'on en est.

Quiz · 1 question

Pourquoi découpe-t-on un projet en petites tâches avec leurs dépendances, plutôt que de le traiter d'un bloc ?

  • Pour faire plaisir au chef de projet ; en pratique on peut coder d'un blocformalité
  • Pour rendre le projet estimable et répartissable, respecter l'ordre imposé par les dépendances (on ne teste pas avant de coder), et repérer les tâches parallélisables entre membresestimer, répartir, paralléliser
  • Pour multiplier les réunions et ralentir le travailralentir

Réponse : Un « faire la bibliothèque » monolithique n'est ni estimable, ni répartissable, ni suivable. Le découpage en petites tâches nommées rend chacune estimable (combien de temps ?) et attribuable (qui la prend ?). Les dépendances imposent un ordre logique (le cycle de vie à la maille de la tâche : diagramme avant code, code avant test). Et repérer les tâches SANS dépendance mutuelle permet de les mener en parallèle — c'est ce qui fait qu'une équipe va plus vite qu'une personne seule.

Les points d'avancement

Un plan ne survit jamais intact au contact de la réalité. Les points d'avancement — réguliers et courts — servent à confronter le plan à ce qui s'est réellement passé : qu'est-ce qui est fini, qu'est-ce qui est en retard, qu'est-ce qui bloque quelqu'un ? C'est la mêlée de Scrum (chapitre 3), ramenée à l'échelle de votre projet.

Leur vertu principale est de rendre les problèmes visibles tôt, quand ils sont encore petits — même logique que « détecter au plus tôt » (chapitre 2). Un membre bloqué depuis trois jours qui n'ose pas le dire, une tâche sous-estimée, une intégration qui ne se fait pas : autant de dérives qu'un point hebdomadaire attrape avant qu'elles ne compromettent la soutenance. Ce qui tue les projets étudiants, ce n'est pas la difficulté technique, c'est le silence — chacun avance dans son coin et l'on découvre à la fin que rien ne s'assemble.

Documenter le projet

La documentation n'est pas une corvée de fin de projet : c'est un outil de travail continu. Deux niveaux, déjà croisés au chapitre 6 :

À votre niveau, l'essentiel tient dans un bon README, un cahier des charges tenu à jour, et les diagrammes UML utiles (chapitre 5). La règle du chapitre 6 s'applique : une documentation qui ment (parce qu'elle n'a pas suivi le code) est pire que pas de documentation. Mieux vaut peu, mais juste et à jour.

Soutenance et démonstration

Le projet se clôt par une soutenance : présenter le travail, et surtout le démontrer en fonctionnement. C'est un exercice à part entière, et il se prépare.

Quelques principes :

La soutenance n'est pas qu'une évaluation : c'est l'occasion de prendre du recul sur ce qu'on a appris — techniquement, mais aussi sur la conduite d'un projet à plusieurs, qui est la vraie compétence de cette UE.

Quiz · 1 question

À quoi servent avant tout les points d'avancement réguliers dans un projet d'équipe ?

  • À justifier le temps passé auprès de l'enseignantjustification administrative
  • À rendre les problèmes visibles tôt (retards, blocages, tâches sous-estimées) quand ils sont encore petits, en confrontant le plan à la réalitédétecter les dérives tôt
  • À réécrire entièrement le plan à chaque réuniontout replanifier

Réponse : Un plan ne survit pas intact à la réalité ; les points d'avancement servent à le confronter à ce qui s'est réellement passé — qu'est-ce qui est fini, en retard, bloqué. Leur vertu est de rendre les problèmes visibles TÔT, quand ils sont petits (même logique que « détecter au plus tôt », chapitre 2) : un membre bloqué qui n'ose pas le dire, une tâche sous-estimée, une intégration qui ne se fait pas. Ce qui tue les projets étudiants, c'est le silence, pas la difficulté technique.

À vous

Le dernier exercice du cours est celui du chef de projet : découper le projet en tâches, respecter leurs dépendances, et en tirer un ordre de réalisation valide — tout en repérant ce qui peut se faire en parallèle entre coéquipiers.

C'est exactement le raisonnement que votre équipe a tenu, consciemment ou non, tout au long du semestre : transformer un « faire la bibliothèque » insaisissable en une suite de tâches réalisables, réparties et ordonnées.

Le graphe ci-dessous montre ces dépendances : chaque flèche signifie « doit être fini avant ». Les tâches d'une même colonne — « Classe Livre » et « Classe Abonné », ou « Tests » et « Interface » — ne dépendent pas l'une de l'autre et peuvent donc être menées en parallèle par deux membres.

Diagramme · Graphe de dépendances des tâches

  • Cahier des charges
  • Diagramme UML
  • Classe Livre
  • Classe Abonné
  • Emprunt (logique)
  • Tests de l'emprunt
  • Interface
  • Démonstration

Relations

  • Cahier des charges Diagramme UML
  • Diagramme UML Classe Livre
  • Diagramme UML Classe Abonné
  • Classe Livre Emprunt (logique)
  • Classe Abonné Emprunt (logique)
  • Emprunt (logique) Tests de l'emprunt
  • Emprunt (logique) Interface
  • Tests de l'emprunt Démonstration
  • Interface Démonstration

Exercice de code

Découpez le projet en tâches, respectez leurs dépendances (on ne teste pas avant d'avoir codé), et produisez un ordre de réalisation valide. Repérez les tâches parallélisables — celles qui permettent à l'équipe d'aller plus vite qu'une personne seule.

Point de départ

// Le projet « gestion de bibliothèque », découpé en tâches. Chaque tâche a
// des PRÉ-REQUIS : des tâches qui doivent être finies avant de la commencer.
const TACHES = {
  "cahier des charges":   { deps: [] },
  "diagramme UML":        { deps: ["cahier des charges"] },
  "classe Livre":         { deps: ["diagramme UML"] },
  "classe Abonné":        { deps: ["diagramme UML"] },
  "emprunt (logique)":    { deps: ["classe Livre", "classe Abonné"] },
  "tests de l'emprunt":   { deps: ["emprunt (logique)"] },
  "interface":            { deps: ["emprunt (logique)"] },
  "démonstration":        { deps: ["tests de l'emprunt", "interface"] },
};

// ── À VOUS : ordonnancer les tâches ─────────────────────────────────────────
// Produire un ORDRE de réalisation où chaque tâche vient APRÈS ses pré-requis.
// Méthode : tant qu'il reste des tâches, prendre celles dont TOUS les
// pré-requis sont déjà faits, les ajouter à l'ordre, recommencer.
function ordonnancer(taches) {
  const faites = [];
  const restantes = new Set(Object.keys(taches));
  // à compléter :
  //   tant que restantes n'est pas vide :
  //     trouver une tâche dont tous les deps sont dans 'faites'
  //     l'ajouter à 'faites', la retirer de 'restantes'
  //   (si aucune n'est trouvable -> dépendance circulaire)
  return faites;
}

// ── Vérification ────────────────────────────────────────────────────────────
const ordre = ordonnancer(TACHES);
console.log("Ordre de réalisation :");
ordre.forEach((t, i) => console.log("   " + (i + 1) + ". " + t));

let valide = true;
const rang = Object.fromEntries(ordre.map((t, i) => [t, i]));
for (const [t, { deps }] of Object.entries(TACHES))
  for (const d of deps)
    if (!(rang[d] < rang[t])) { valide = false; console.log("   ✗ " + t + " avant son pré-requis " + d); }
console.log(valide && ordre.length === Object.keys(TACHES).length
  ? "Ordre valide : chaque tâche vient après ses pré-requis."
  : "Ordre invalide.");

Solution

function ordonnancer(taches) {
  const faites = [];
  const restantes = new Set(Object.keys(taches));
  while (restantes.size > 0) {
    // une tâche est « prête » si tous ses pré-requis sont déjà faits
    const prete = [...restantes].find((t) =>
      taches[t].deps.every((d) => faites.includes(d)));
    if (!prete) throw new Error("dépendance circulaire : projet impossible à planifier");
    faites.push(prete);
    restantes.delete(prete);
  }
  return faites;
}
// Un ordre valide, par exemple :
//   cahier des charges → diagramme UML → classe Livre → classe Abonné →
//   emprunt → tests de l'emprunt → interface → démonstration
// (Livre/Abonné et tests/interface peuvent être menés EN PARALLÈLE par deux
//  membres : ils ne dépendent pas l'un de l'autre.)
//
// ── Ce que l'exercice enseigne ──────────────────────────────────────────────
//
// 1. DÉCOUPER EN TÂCHES rend le projet planifiable et RÉPARTISSABLE : un gros
//    « faire la bibliothèque » n'est ni estimable ni partageable ; huit
//    petites tâches, si.
//
// 2. Les DÉPENDANCES imposent un ordre : on ne teste pas l'emprunt avant de
//    l'avoir codé, on ne code pas avant d'avoir le diagramme, ni le diagramme
//    avant le cahier des charges. C'est le cycle de vie (chapitre 2) appliqué
//    à la maille de la tâche.
//
// 3. Les tâches SANS dépendance mutuelle se font EN PARALLÈLE : « classe
//    Livre » et « classe Abonné » par deux personnes en même temps. Repérer
//    ce qui peut être parallélisé, c'est ce qui permet à une équipe d'aller
//    plus vite qu'une personne seule — à condition d'avoir découpé et
//    ordonnancé.
//
// 4. Cet ordonnancement est un TRI TOPOLOGIQUE (le nom savant), le même
//    principe qu'un graphe de dépendances. En L1, on ne retient pas le nom
//    mais le geste : lister les tâches, leurs pré-requis, en tirer un ordre
//    réalisable, repérer le parallélisable.
//
// 5. Le reste de la conduite de projet vit autour de ce découpage : les
//    POINTS D'AVANCEMENT vérifient où en est chaque tâche, la
//    DOCUMENTATION et la SOUTENANCE présentent le résultat. Mais tout part de
//    ce découpage en tâches ordonnées.

Ce que ce cours vous laisse

Vous avez parcouru la vie d'un projet logiciel, et surtout vous l'avez vécue — un projet collectif tenu tout le semestre, chaque bloc du cours y ajoutant sa couche. Trois idées survivent à l'oubli des détails :

Les grands sujets que ce cours n'a fait qu'effleurer — architecture logicielle, intégration continue, méthodes agiles avancées, tests automatisés à grande échelle — vous attendent en L2, L3 et au-delà. Mais le réflexe fondateur, lui, est acquis : on ne bâtit pas un logiciel comme on écrit un programme. Et la meilleure façon de l'apprendre restera toujours celle de cette UE — en le faisant, à plusieurs, sur un vrai projet.

À retenir

Flashcards · 4 cartes

Pourquoi dit-on que « le projet est l'UE » en génie logiciel ?
Parce qu'un cours de génie logiciel sans projet collectif enseigne du vocabulaire, pas une pratique. Le projet — un logiciel modeste mené en équipe tout le semestre — est le fil conducteur : chaque bloc du cours y ajoute une couche (cahier des charges après le bloc III, tests après le bloc V, Git dès la première semaine). Les notions se comprennent en les faisant vivre sur un vrai projet, pas en les énonçant.
Comment découpe-t-on et ordonnance-t-on les tâches d'un projet ?
On découpe en petites tâches nommées et finissables (estimables, répartissables). On note les DÉPENDANCES (pré-requis : diagramme avant code, code avant test — le cycle de vie à la maille de la tâche), d'où un ordre de réalisation valide. On repère les tâches SANS dépendance mutuelle pour les mener EN PARALLÈLE entre membres — ce qui fait qu'une équipe va plus vite qu'une personne seule.
À quoi servent les points d'avancement, et quels écueils d'équipe éviter ?
Les points d'avancement (réguliers, courts — la mêlée de Scrum) confrontent le plan à la réalité et rendent les problèmes visibles TÔT (retards, blocages, tâches sous-estimées), quand ils sont petits. Écueils : le passager clandestin (qui ne contribue pas) et le héros solitaire (seul à connaître le code). Ce qui tue les projets étudiants, c'est le SILENCE — pas la difficulté technique.
Comment réussit-on une soutenance et une démonstration de projet ?
La DÉMONSTRATION prime : montrer le logiciel qui marche vaut mille diapositives — avec un scénario répété d'avance (une démo qui plante faute d'avoir été testée est le pire écueil). Raconter une histoire : le besoin, les choix et leurs raisons, ce qui marche, ce qui reste — un jury préfère la lucidité au camouflage. Chacun présente sa part : la soutenance reflète le travail d'équipe.