Quiz 5 — Expert & carrière
1. De quelle classe héritent les tests unitaires, et pourquoi rapides ?
Réponse
TestCase (sans kernel Symfony) → pas de bootstrap, on isole avec des doubles.
2. Comment authentifier un utilisateur dans un test fonctionnel ?
Réponse
$client->loginUser($user).
3. Cause des tests « qui passent seuls mais échouent ensemble » ?
Réponse
Défaut d’isolation ; solution : DAMADoctrineTestBundle (rollback par test) + fixtures.
4. Qu’est PHPStan pour un dev TypeScript ?
Réponse
L’équivalent de tsc --strict : analyse statique de types, avant le runtime.
5. Différence CS Fixer / Rector ?
Réponse
CS Fixer = style (mise en forme) ; Rector = sémantique (transformations, migrations).
6. Que faut-il pour qu’une CI soit vraiment bloquante ?
Réponse
La protection de branche GitHub (exiger que les checks passent avant merge).
7. Quel niveau de cache est le plus rentable ?
Réponse
Le cache HTTP (proxy/CDN) : réponse servie sans exécuter PHP.
8. Comment invalide-t-on précisément un cache applicatif ?
Réponse
Par tags (tag() + invalidateTags()), avec un TTL en filet.
9. Règle d’or de la performance ?
Réponse
Mesurer avant d’optimiser (profiler/Blackfire), corriger, re-mesurer.
10. Différence FPM vs FrankenPHP worker mode ?
Réponse
FPM bootstrappe à chaque requête ; worker bootstrappe une fois et réutilise l’app.
11. Piège principal du worker mode ?
Réponse
Les fuites d’état entre requêtes → services sans état / ResetInterface.
12. Pourquoi une migration doit-elle être rétrocompatible en déploiement rolling ?
Réponse
Ancien et nouveau code coexistent un instant ; pattern expand/contract (ajouter puis retirer).
13. Les trois piliers de l’observabilité ?
Réponse
Logs, métriques, traces.
14. Que fait Sentry de plus qu’un log d’erreur ?
Réponse
Capture, regroupe, enrichit (contexte, release) et alerte — avant les utilisateurs.
15. Principe de l’architecture hexagonale ?
Réponse
Domaine au centre (pur), infra aux bords, reliés par des ports (interfaces).
16. Quand NE PAS appliquer DDD/CQRS/hexagonal ?
Réponse
Sur un CRUD simple (sur-ingénierie) ; l’architecture doit correspondre à la complexité du domaine.
17. Comment publie-t-on un bundle ?
Réponse
Tag SemVer + soumission sur Packagist (type: symfony-bundle).
18. Comment garantir l’isolation en multi-tenant (base partagée) ?
Réponse
Un SQLFilter Doctrine automatique (tenant_id = X sur toutes les requêtes) + tests d’isolation.
19. Pourquoi le combo Symfony+Next.js est-il un positionnement premium ?
Réponse
Peu de devs maîtrisent les deux et le pont headless (× Moodle/WordPress/LTI) — rare et bien payé.
20. Statut le plus simple pour démarrer en freelance (France), et une précaution en cumul emploi ?
Réponse
La micro-entreprise ; précaution : vérifier la clause d’exclusivité et l’obligation de loyauté (ce sont des repères, pas un conseil juridique).
Fin des quiz — et fin du cours. Si vous répondez juste à ~80 %, vous êtes prêt à construire (et vendre) des applications Symfony × Next.js professionnelles.
🎉 Félicitations : vous avez parcouru l’intégralité du cours, de la découverte de Symfony au capstone BookLab. À vous de jouer — construisez BookLab, et monétisez votre double compétence.