Chapitre 79 minIntermédiaire
Phase 2 : réaliser la solution en une heure
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- découper l'heure de réalisation en blocs ;
- livrer le vital avant le confort ;
- avancer par petits pas testés et sauvegardés avec Git ;
- rédiger la documentation demandée.
1 exercice corrigé1 schéma
La phase 2 de l'E6 SLAM commence par une heure de préparation pendant laquelle tu réalises, seul et en autonomie, la solution que tu as présentée à la commission, ajustement compris. Tu travailles sur ton environnement, sous ta responsabilité, « dans le respect des consignes de sécurité, de sauvegarde des données et des ressources utilisées ». Ce chapitre organise cette heure pour qu'à la fin, quelque chose fonctionne, soit testé et puisse être prouvé pendant la recette.
L'heure en cinq blocs
Ces durées sont un repère. L'ordre, lui, ne se discute pas : le vital avant le confort, et du temps gardé pour les tests et la documentation.
Les cinq premières minutes
Ne code pas tout de suite. Ces gestes t'évitent les pires surprises de l'heure.
- Relis le verso de l'expression des besoins et corrige ton plan si un ajustement a été demandé.
- Lance l'application et les tests existants. Tout doit être vert avant que tu touches au code : sinon, tu ne sauras pas si c'est toi qui as cassé quelque chose.
- Sauvegarde la base si tu vas la modifier :
mysqldump -u root -p frais > avant-e6.sql. Une migration ratée se répare en une commande. - Vérifie que ton dépôt est propre avec
git status, et crée une branche pour l'évolution :git switch -c e6-renvoi.
Le vital avant le confort
Le vital, c'est le plus court chemin vers une solution qui répond au besoin de bout en bout et que la commission peut vérifier. Le confort, c'est tout ce qui l'améliore : l'écran soigné, les messages d'erreur détaillés, la pagination. Pour classer un élément, pose-toi une question : sans lui, la commission peut-elle constater que le besoin est rempli ? Si non, c'est du vital.
| Évolution demandée | Vital | Confort |
|---|---|---|
| Export CSV des notes validées d'un mois | route protégée, requête filtrée, fichier CSV avec en-tête | nom de fichier daté, ordre des colonnes, bouton dans le front |
| Renvoi d'une note avec motif | route protégée, contrôle de l'état, motif obligatoire, stockage | affichage du motif côté salarié, notification |
| Contrôle des licences à l'installation | refus quand les licences sont épuisées, message clair | écran des dépassements avec tri et couleurs |
Une règle de sécurité demandée par le sujet, comme « seul un comptable peut… », fait toujours partie du vital : sans elle, la solution ne répond pas à la demande.
Avancer par petits pas testés
Ne code pas quarante minutes avant de tester. Écris cinq à dix lignes, vérifie, puis continue. Un bug ne peut venir que de ce que tu viens d'écrire, et tu le trouves en une minute au lieu de quinze.
| Tu viens d'écrire… | Tu vérifies avec… |
|---|---|
une route vide qui renvoie { ok: true } | un appel curl ou Postman |
| une requête SQL | le client MySQL, avant de la mettre dans le code |
| une migration de base | DESCRIBE de la table et le comptage des lignes existantes |
| une règle de gestion | un test automatisé, ou un appel qui doit être refusé |
| un écran | le navigateur et sa console, ou le formulaire ouvert |
Quand une erreur apparaît, lis-la avant de chercher. La première ligne dit quoi (TypeError: Cannot read properties of undefined (reading 'motif')), la première ligne de la pile qui cite ton fichier dit où (controllers/notes.js:42:31). Les lignes qui citent node_modules ne sont pas ton code.
Git, ton filet de sécurité
Un commit après chaque étape qui marche. Si la suivante casse tout, tu reviens en arrière en quelques secondes.
git add -A
git commit -m "renvoi : table renvoi et migration"
# … une tentative qui casse tout …
git restore . # annule les modifications non commitées
git log --oneline # l'historique raconte ta démarche
git restore . jette toutes les modifications depuis le dernier commit : vérifie avec git status ce que tu vas perdre avant de la lancer. Tes messages de commit servent aussi pendant la recette : git log --oneline montre à la commission que tu as travaillé par étapes testées. Le cours Git et GitHub détaille ces commandes.
La documentation demandée
L'expression des besoins indique la documentation à présenter « en appui de la solution » : rapport de test, documentation technique, rapport d'incident ou documentation utilisateur. Elle fait partie de la production attendue. Prévois dix minutes et un modèle prêt dans ton dépôt.
| Document | Contenu minimal |
|---|---|
| Rapport de test | un tableau : cas testé, données, résultat attendu, résultat obtenu, conforme ou non ; la commande qui lance les tests automatisés |
| Documentation technique | ce qui a changé (tables, routes, fichiers), la migration à appliquer, les règles de gestion, comment tester |
| Rapport d'incident | le symptôme, comment le reproduire, la cause, la correction, le test qui empêche le retour du bug |
| Documentation utilisateur | ce que l'utilisateur peut faire de nouveau, pas à pas, avec le message qu'il verra en cas d'erreur |
Un rapport de test court, mais rempli avec de vrais résultats, vaut mieux qu'un rapport long qui décrit des tests jamais lancés. Un exemple complet figure dans l'épreuve blanche n° 1.
Quand tu bloques
Fixe-toi une règle : quinze minutes sans progrès sur un point, tu changes d'approche.
- Simplifie : la version la plus simple qui répond au besoin (un calcul en JavaScript au lieu d'un pipeline d'agrégation, une requête au lieu d'une procédure).
- Contourne : passe au point suivant du vital et reviens plus tard.
- Laisse une trace : un commentaire
// À FAIRE : …qui dit ce qui manque et comment tu le ferais. Tu t'en serviras à la recette.
Un blocage expliqué pendant la recette rapporte plus qu'un silence. La commission évalue aussi ta démarche, pas seulement le résultat.
Les cinq dernières minutes
Arrête de coder. Prépare la recette :
- les données de démonstration en base (une note clôturée à renvoyer, un compte de chaque rôle) ;
- les commandes curl ou les requêtes Postman enregistrées, dans l'ordre où tu vas les montrer ;
- les tests lancés une dernière fois, leur sortie visible dans un terminal ;
- une note de trois lignes : ce qui marche, ce qui manque, comment tu le finirais.
Le chapitre la recette et l'entretien d'explicitation montre comment présenter tout cela.
Exercice
Exercice Découper et minuter une heure Réussi À revoir
Expression des besoins, réalisation Sorbier Frais : « Les comptables veulent exporter au format CSV la liste des notes validées d'un mois donné, pour la transmettre au cabinet qui gère la paie. Documentation à présenter : rapport de test. »
- Sépare le vital du confort.
- Écris le plan minuté de l'heure, avec les commits prévus.
Voir la réponseMasquer la réponse de l'exercice
1. Vital et confort.
| Vital | Confort |
|---|---|
route GET /api/notes/export?mois=AAAA-MM réservée aux comptables | bouton « Exporter » dans le front |
| contrôle du format du mois (400 sinon) | nom de fichier daté, BOM UTF-8 pour le tableur |
requête des notes validee du mois, avec le nom du salarié | colonnes supplémentaires, tri |
CSV avec en-tête, séparateur ;, champs échappés | test de bout en bout depuis le front |
| rapport de test rempli |
2. Le plan.
| Minutes | Étape | Commit |
|---|---|---|
| 0 à 5 | relire, lancer l'API et les tests, git switch -c e6-export | |
| 5 à 12 | route vide protégée par requireRole('comptable'), testée avec curl (401, 403, 200) | « export : route protégée » |
| 12 à 22 | requête SQL testée dans le client MySQL, puis dans la route ; réponse en JSON pour vérifier | « export : notes validées du mois » |
| 22 à 35 | génération du CSV, en-têtes HTTP, contrôle du mois | « export : fichier CSV » |
| 35 à 45 | confort : bouton dans le front si le reste est vert | « export : bouton dans la liste » |
| 45 à 55 | deux tests supertest (403, 400), rapport de test | « export : tests et rapport » |
| 55 à 60 | préparer la recette |
Le code de cette route est détaillé dans le chapitre les évolutions types.
Tu avais trouvé ?