# C3-S11 — Débogage méthodique

import { AssessmentGrid } from "../../src/components/AssessmentGrid";
import { Correction } from "../../src/components/Correction";
import { ExerciseCard } from "../../src/components/ExerciseCard";
import { LearningObjectives } from "../../src/components/LearningObjectives";
import { LessonHeader } from "../../src/components/LessonHeader";
import { LessonNavigation } from "../../src/components/LessonNavigation";
import { Mermaid } from "../../src/components/Mermaid";
import { TeacherTip } from "../../src/components/TeacherTip";

<LessonHeader
  id="C3-S11"
  title="Débogage méthodique : Identifier, isoler et corriger"
  cycle="3"
  levels="CM1, CM2, 6e"
  duration="45 à 55 minutes"
  tool="Scratch"
  grouping="Binômes d'experts"
  expressPrep={{
    objective:
      "Appliquer la démarche scientifique en 5 étapes pour isoler et réparer 3 anomalies complexes.",
    material: "Grille d'audit logiciel + projet de jeu défectueux.",
    trap: "Réparer un bogue tout en cassant une autre fonctionnalité (non-régression).",
    timing: "10' Méthode d'audit • 25' Enquête en binômes • 10' Bilan",
  }}
/>

<LearningObjectives
  objectives={[
    "Adopter une démarche rigoureuse en 5 étapes pour traquer un dysfonctionnement informatique.",
    "Détecter les 4 grandes catégories de bugs : oubli d'initialisation, bloc mal placé dans la boucle, nom de message erroné, condition inaccessible.",
    "Vérifier la non-régression (s'assurer que la correction n'a pas créé un nouveau problème).",
  ]}
/>

---

## 🎒 Matériel & Préparation

- Projet modèle Scratch défectueux contenant 3 bogues réalistes.
- Grille d'audit et de recette de tests.

---

## ⏱️ Les 5 étapes de la démarche de débogage

<Mermaid
  title="Protocole de Débogage Méthodique en 5 Étapes"
  caption="Démarche scientifique d'investigation pour résoudre les anomalies logicielles."
  chart={`flowchart LR
    A["1. Reproduire le bug"] --> B["2. Formuler l'hypothèse"]
    B --> C["3. Isoler le script"]
    C --> D["4. Corriger le bloc"]
    D --> E["5. Valider la non-régression"]
  `}
/>

1. **Reproduire :** Décrire exactement les actions qui déclenchent le problème.
2. **Hypothèse :** _« Je pense que le score augmente de 10 au lieu de 1 parce que... »_
3. **Isoler :** Détacher temporairement un morceau de script pour tester les autres composants.
4. **Corriger :** Ajuster le bloc ou le paramètre fautif.
5. **Non-régression :** Re-tester l'ensemble de la partie pour valider que tout fonctionne.

---

## ⏱️ Déroulé de l'atelier

<ExerciseCard title="Mission : Les 3 anomalies du jeu spatial" difficulty="Moyen">
  Un projet de jeu spatial présente 3 anomalies : 1. Le vaisseau ne revient pas au centre au
  redémarrage. 2. Les météorites continuent d'avancer quand l'écran Game Over s'affiche. 3. Le score
  augmente de 50 points en une seconde dès qu'on touche une étoile.
</ExerciseCard>

<Correction title="Analyse des résolutions de bugs">

1. **Bug 1 (Position initiale) :**
   - _Cause :_ Absence de `aller à x: 0 y: -120` sous le drapeau vert.
   - _Correction :_ Ajouter l'initialisation de position.

2. **Bug 2 (Arrêt des scripts) :**
   - _Cause :_ Le message `game_over` ne stoppe pas les lutins ennemis.
   - _Correction :_ Ajouter `[quand je reçois game_over] -> [stop autres scripts dans ce lutin]` sur les météorites.

3. **Bug 3 (Incrémentation multiple) :**
   - _Cause :_ Le vaisseau touche l'étoile pendant plusieurs images successives avant qu'elle ne disparaisse.
   - _Correction :_ Déplacer immédiatement l'étoile ou la cacher dès la détection (`ajouter 1 à score`, `cacher`, `attendre 1 sec`).

</Correction>

<TeacherTip title="Postures pédagogiques">
  Encouragez les élèves à expliquer leur raisonnement à voix haute avant de toucher au clavier : la
  verbalisation résout souvent 80% des incompréhensions.
</TeacherTip>

---

## 📊 Grille d'évaluation

<AssessmentGrid
  criteria={[
    {
      label: "Isole la source de l'erreur avec méthode",
      withHelp: "Modifie des blocs au hasard sans réfléchir",
      autonomous: "Formule une hypothèse et cible le bon script",
      transfer: "Utilise la mise en surbrillance jaune des blocs pour observer l'exécution",
    },
    {
      label: "Valide la non-régression complète",
      withHelp: "S'arrête dès que la première erreur semble résolue",
      autonomous: "Exécute un protocole de test complet",
      transfer: "Documente la solution trouvée pour aider ses pairs",
    },
  ]}
/>

<LessonNavigation
  prevUrl="/cycle-3/c3-s10-geometrie-avec-le-stylo"
  prevId="C3-S10"
  prevTitle="Géométrie avec le stylo"
  nextUrl="/cycle-3/c3-s12-projet-final"
  nextId="C3-S12"
  nextTitle="Projet final"
  cycleUrl="/cycle-3"
  cycleTitle="Vue d'ensemble du Cycle 3"
/>
