MONOREPO TESTS Flashcards
Pourquoi est-il important de tester une application web ?
Tester une application web permet de confirmer son comportement attendu, d’identifier les cas limites, d’améliorer la qualité du code, d’éviter les bugs et d’empêcher la régression lors de l’ajout de nouvelles fonctionnalités. Des tests bien conçus garantissent la fiabilité de l’application et facilitent sa maintenance.
Quels sont les principaux types de tests pour une application web et quelles sont leurs particularités ?
Les principaux types sont :
* Tests unitaires : testent une fonction ou méthode isolée, sans dépendances externes
* Tests d’intégration : vérifient le bon fonctionnement des composants ensemble
* Tests fonctionnels (E2E) : simulent le comportement de l’utilisateur dans l’environnement réel
* Tests de sécurité : évaluent les vulnérabilités
* Tests de performance : mesurent les temps de réponse et l’efficacité
Expliquez le concept de Test Driven Development (TDD) et ses avantages.
Le TDD est une approche où l’on écrit d’abord le test avant le code. Le cycle comprend trois étapes : 1) Écrire un test qui échoue, 2) Écrire le code minimum pour que le test réussisse, 3) Refactoriser le code. Les avantages sont une meilleure conception du code, une documentation automatique via les tests, et une détection précoce des bugs.
Qu’est-ce que l’intégration continue et quel est son rôle dans le cycle de développement ?
L’intégration continue est un ensemble de pratiques qui consistent à automatiser certaines actions (tests, compilation, déploiement) à chaque modification du code source. Elle permet de détecter rapidement les problèmes d’intégration, d’assurer une qualité constante et de faciliter les déploiements. Des outils comme GitHub Actions, Jenkins ou GitLab CI permettent de mettre en place cette pratique.
Comment mettriez-vous en place des tests unitaires pour une fonction dans un projet web ?
Pour mettre en place des tests unitaires :
1. Choisir un framework de test adapté (Jest pour JavaScript, PHPUnit pour PHP)
2. Isoler la fonction des dépendances externes (utiliser des mocks si nécessaire)
3. Écrire des tests pour les cas nominaux et les cas limites
4. Vérifier les résultats attendus avec des assertions
5. Exécuter les tests automatiquement à chaque modification de code
6. Analyser la couverture de code pour s’assurer que tous les chemins sont testés
Comment gérer les dépendances externes (API, base de données) dans les tests unitaires ?
Pour les tests unitaires, on simule les dépendances externes avec des mocks ou des stubs. Ces objets simulés remplacent les vraies dépendances et permettent de contrôler leur comportement pendant les tests. Par exemple, au lieu d’appeler une vraie API ou une base de données, on crée un mock qui renvoie des données prédéfinies, ce qui rend les tests plus rapides, prévisibles et indépendants de l’environnement externe.
Qu’est-ce qu’un mock et dans quel contexte l’utiliseriez-vous pour les tests ?
Un mock est un objet simulé qui imite le comportement d’objets réels de manière contrôlée. On l’utilise dans les tests pour remplacer des dépendances externes comme des API, des bases de données ou des services. Les mocks sont particulièrement utiles pour les tests unitaires où l’on souhaite isoler la fonction testée et contrôler précisément les entrées/sorties des dépendances, sans subir les contraintes des systèmes réels (lenteur, indisponibilité, effets de bord).
Comment mettre en place une démarche de résolution de problème face à un bug dans une application ?
Face à un bug, je suivrais cette démarche structurée :
1. Reproduire le bug de manière fiable
2. Isoler le problème (identifier les conditions précises du bug)
3. Analyser les causes possibles avec des outils de débogage
4. Écrire un test qui échoue et reproduit le bug
5. Corriger le code pour faire passer le test
6. Vérifier que la correction n’introduit pas d’autres problèmes
7. Documenter le bug et sa résolution pour l’équipe
Quels outils d’intégration continue connaissez-vous et comment les utiliseriez-vous dans un projet web ?
Les principaux outils sont GitHub Actions, GitLab CI/CD, Jenkins, Travis CI et CircleCI. Pour les utiliser :
1. Configurer un pipeline avec des étapes de build, test et déploiement
2. Automatiser l’exécution des tests à chaque commit ou pull request
3. Définir des conditions pour valider le code (tous les tests doivent passer)
4. Générer des rapports de couverture de tests
5. Automatiser le déploiement dans différents environnements selon les branches
Comment documenteriez-vous le déploiement d’une application web ?
Je documenterais le déploiement en créant :
1. Un fichier README détaillant les prérequis et étapes d’installation
2. Des scripts automatisés de déploiement avec commentaires
3. Un schéma d’architecture montrant les composants et leurs interactions
4. Une documentation des variables d’environnement nécessaires
5. Une procédure de résolution des problèmes courants
6. Un journal des versions avec les changements importants
7. Des instructions pour les retours en arrière en cas de problème
Comment assurer la sécurité d’une application web lors de son déploiement ?
Pour assurer la sécurité lors du déploiement :
1. Utiliser HTTPS pour toutes les communications
2. Mettre en place des tests de sécurité automatisés
3. Suivre les recommandations de l’OWASP pour prévenir les vulnérabilités courantes
4. Configurer correctement les en-têtes de sécurité HTTP
5. Gérer sécuritairement les secrets (clés API, mots de passe) via des variables d’environnement
6. Appliquer le principe du moindre privilège pour les accès
7. Mettre en place une surveillance continue des incidents de sécurité
Que sont les tests de smoke testing et pourquoi sont-ils importants ?
Les tests de smoke testing (ou tests de fumée) sont des tests rapides et basiques qui vérifient les fonctionnalités principales d’une application après un déploiement. Ils sont importants car ils permettent de détecter rapidement les problèmes critiques avant d’exécuter des tests plus approfondis. Par exemple, vérifier que toutes les pages principales sont accessibles et que les fonctionnalités essentielles comme l’authentification fonctionnent correctement. Ils constituent un filet de sécurité minimal après chaque déploiement.