Quiz d'auto-évaluation

Présentation & objectifs

Les quiz suivants sont là pour vous aider à vérifier que vous avez compris les articles que vous deviez étudier. À la fin d’un quiz, vous recevrez des explications sur vos réponses.

Ces quiz sont fournis pour l’auto-évaluation et ne seront pas notés ni stockés.

N’hésitez pas à nous contacter sur le serveur Discord pour toute précision/explication !

Quiz

Exceptions et assertions

# Qu'est-ce qu'une exception en programmation ? - [x] Un événement qui perturbe le flux normal d'un programme > ✅ Les exceptions sont des événements qui se produisent pendant l'exécution d'un programme et perturbent son flux normal. - [ ] Une erreur qui termine toujours le programme > ❌ Les exceptions ne terminent pas nécessairement un programme ; elles peuvent être attrapées et gérées. - [x] Une erreur qui peut être attrapée et gérée par le programme > ✅ Les programmes peuvent attraper et gérer les exceptions pour prévenir les plantages et maintenir une exécution fluide. - [ ] Un type de boucle en programmation > ❌ Les exceptions ne sont pas des boucles ; elles sont des mécanismes pour gérer les erreurs pendant l'exécution. - [x] Un événement levé quand des données invalides ou un fichier manquant est rencontré > ✅ Les exceptions sont souvent levées quand des données invalides sont fournies ou qu'un fichier requis est manquant. # Quel est le but du bloc `try-except` ? - [x] Attraper les exceptions qui peuvent se produire dans un bloc d'instructions > ✅ Le bloc `try-except` est utilisé pour attraper et gérer les exceptions, empêchant le programme de planter. - [ ] Boucler à travers un bloc de code de manière répétée > ❌ Le bloc `try-except` n'est pas une boucle ; c'est pour la gestion d'erreurs. - [x] Gérer des types spécifiques d'exceptions > ✅ La clause `except` peut spécifier le type d'exception à gérer. - [ ] Terminer le programme quand une erreur se produit > ❌ Le bloc `try-except` est conçu pour empêcher le programme de se terminer en gérant les exceptions. - [x] Fournir une manière propre de gérer les erreurs sans faire planter le programme > ✅ Le bloc `try-except` permet une gestion gracieuse des erreurs et la récupération du programme. # Que se passe-t-il si une exception se produit et n'est pas attrapée par le programme ? - [x] Le programme se termine avec un message d'erreur > ✅ Si une exception n'est pas attrapée, le programme se termine et imprime un message d'erreur expliquant le problème. - [ ] L'exception est ignorée et le programme continue à fonctionner > ❌ Les exceptions non gérées ne sont pas ignorées ; elles causent la terminaison du programme. - [ ] Le programme continue après avoir sauté l'exception > ❌ Une exception non gérée empêche le programme de continuer son exécution. - [ ] Le programme entre dans une boucle infinie > ❌ Les exceptions ne causent pas de boucles infinies ; elles causent la terminaison du programme à moins d'être gérées. - [x] Le type d'exception est imprimé avec une traceback > ✅ Le type d'exception et une traceback montrant où l'erreur s'est produite sont imprimés quand une exception n'est pas attrapée. # Quelle est la différence entre les exceptions et les assertions ? - [x] Les exceptions gèrent les erreurs pendant l'exécution, tandis que les assertions vérifient les conditions pendant le développement > ✅ Les exceptions sont pour gérer les erreurs pendant l'exécution, tandis que les assertions sont des vérifications pour valider les conditions pendant le développement. - [ ] Les assertions sont pour attraper les erreurs d'entrée utilisateur, tandis que les exceptions sont pour gérer les erreurs logiques > ❌ Les assertions ne sont pas pour attraper les erreurs d'entrée utilisateur ; elles sont utilisées pour vérifier les conditions pendant le développement. - [x] Les assertions sont utilisées pour s'assurer que certaines conditions sont vraies pendant l'exécution > ✅ Les assertions sont utilisées pour valider que certaines conditions restent vraies pendant l'exécution du programme. - [ ] Les exceptions sont seulement utilisées pendant le développement > ❌ Les exceptions sont utilisées pendant l'exécution pour gérer les erreurs en production aussi bien qu'en développement. - [x] Les assertions peuvent être désactivées dans les environnements de production > ✅ Les assertions sont souvent désactivées dans les environnements de production pour éviter les vérifications inutiles et la surcharge de performance. # Quand devriez-vous utiliser les assertions dans votre code ? - [x] Pour valider les suppositions pendant le développement > ✅ Les assertions sont utilisées pour valider les suppositions dans le code, s'assurant que les conditions attendues sont respectées pendant le développement. - [ ] Pour gérer les erreurs d'entrée utilisateur > ❌ Les assertions ne devraient pas être utilisées pour gérer les erreurs d'entrée utilisateur ; les exceptions sont plus appropriées à cette fin. - [x] Pour vérifier les invariants et imposer des contraintes > ✅ Les assertions sont utiles pour vérifier les invariants et imposer des contraintes dans le code. - [ ] Pour remplacer toute la gestion d'erreur en production > ❌ Les assertions sont typiquement désactivées en production et ne devraient pas remplacer les mécanismes de gestion d'erreur comme les exceptions. - [x] Pour attraper les erreurs logiques tôt pendant la phase de développement > ✅ Les assertions aident à attraper les erreurs logiques pendant le développement en vérifiant les conditions attendues dans le code. # Pour quoi les assertions ne devraient-elles PAS être utilisées ? - [x] Gérer les erreurs d'entrée utilisateur > ✅ Les assertions ne devraient pas être utilisées pour gérer les erreurs d'entrée utilisateur. La validation d'entrée est mieux gérée par les exceptions. - [ ] Vérifier que l'état du programme est correct > ❌ Les assertions sont destinées à vérifier l'état du programme pendant le développement. - [x] Vérifier les conditions qui peuvent être causées par des facteurs externes (par exemple, entrée utilisateur) > ✅ Les assertions ne devraient pas être utilisées pour vérifier les conditions qui peuvent être affectées par des facteurs externes, comme l'entrée utilisateur ou les problèmes réseau. - [ ] Vérifier les suppositions pendant le développement > ❌ Les assertions sont conçues pour vérifier les suppositions pendant le développement. - [x] Effectuer des tâches avec des effets de bord, comme ouvrir des fichiers ou modifier des données > ✅ Les assertions ne devraient pas effectuer d'actions qui modifient l'état du programme ; elles sont pour les vérifications, pas pour les effets de bord.

Programmation défensive

# Qu'est-ce que la programmation défensive ? - [x] Une manière d'écrire du code qui anticipe les erreurs utilisateur possibles > ✅ La programmation défensive se concentre sur l'anticipation des erreurs utilisateur pour prévenir les plantages et améliorer la gestion d'erreur. - [ ] Une méthode pour écrire du code qui fonctionne plus rapidement > ❌ La programmation défensive ne concerne pas l'optimisation de la vitesse, mais plutôt l'amélioration de la résilience et la fiabilité. - [x] Une approche de programmation qui vise à réduire les plantages dus aux mauvaises entrées > ✅ En anticipant les erreurs et validant les entrées, la programmation défensive aide à prévenir les plantages causés par de mauvaises entrées. - [ ] Une technique pour s'assurer que toute entrée utilisateur est ignorée > ❌ La programmation défensive n'ignore pas les entrées ; elle s'assure que les entrées sont correctement validées. - [x] Une stratégie pour rendre les programmes plus résilients aux conditions inattendues > ✅ La programmation défensive vise à rendre les programmes plus résilients en se préparant aux entrées ou conditions inattendues. # Quels sont les principes clés de la programmation défensive ? - [x] Validation des entrées > ✅ La validation des entrées s'assure que les entrées sont correctement formatées et empêche les données invalides ou malveillantes de causer des problèmes. - [ ] Toujours supposer que l'utilisateur sait ce qu'il fait > ❌ La programmation défensive suppose que les utilisateurs peuvent faire des erreurs, donc elle valide les entrées plutôt que de leur faire entièrement confiance. - [x] Défauts de sécurité > ✅ Un défaut de sécurité s'assure que quand quelque chose va mal, le programme entre dans un état sûr plutôt que de procéder avec une action incorrecte ou dangereuse. - [x] Éviter les suppositions > ✅ La programmation défensive implique d'éviter les suppositions sur la correctness des entrées ou états système, se préparant aux erreurs à la place. - [ ] Supposer que les erreurs ne se produiront jamais > ❌ L'opposé est vrai en programmation défensive. Elle suppose que les erreurs se produiront et s'y prépare. # Quel est le but de la validation des entrées en programmation défensive ? - [x] S'assurer que l'entrée utilisateur est valide avant de la traiter > ✅ La validation des entrées vérifie que l'entrée est correctement formatée et sûre avant de la traiter, prévenant les erreurs inattendues. - [ ] Permettre au programme de fonctionner plus rapidement > ❌ La validation des entrées peut ajouter des étapes de traitement, mais son but est d'assurer la sécurité, pas la vitesse. - [x] Prévenir les entrées malveillantes ou mal formées de causer des erreurs > ✅ Une validation d'entrée appropriée aide à prévenir les vulnérabilités de sécurité et les plantages causés par des entrées invalides. - [ ] Supposer que toute entrée est toujours correcte > ❌ La programmation défensive ne suppose pas que l'entrée est toujours correcte ; elle la valide pour assurer la sécurité. - [x] Améliorer la sécurité et la robustesse du programme > ✅ En validant les entrées, les programmes deviennent plus sécurisés et robustes contre les attaques et erreurs utilisateur. # À quoi servent les assertions en programmation défensive ? - [x] Vérifier les conditions qui ne devraient jamais se produire pendant le fonctionnement normal > ✅ Les assertions sont utilisées pour vérifier les conditions qui ne devraient pas se produire dans des circonstances normales, attrapant les bugs tôt en développement. - [ ] Remplacer la validation des entrées > ❌ Les assertions ne sont pas un remplacement pour la validation des entrées. Elles sont utilisées pour vérifier les suppositions faites pendant le développement. - [x] Aider à attraper les erreurs logiques pendant la phase de développement > ✅ Les assertions aident à attraper les erreurs logiques tôt en vérifiant que certaines conditions sont respectées pendant l'exécution. - [ ] Gérer toutes les erreurs utilisateur en production > ❌ Les assertions sont typiquement désactivées en production et ne devraient pas être utilisées pour gérer les erreurs d'entrée utilisateur. - [x] Imposer les conditions qui doivent toujours être vraies pour que le système fonctionne correctement > ✅ Les assertions imposent les conditions qui doivent être vraies pour que le système fonctionne correctement, comme les invariants dans un programme. # Parmis les exemples suivants, lesquels sont des cas pratiques de programmation défensive ? - [x] Valider les entrées utilisateur > ✅ Valider les entrées s'assure que les données fournies par l'utilisateur sont correctes et sûres à traiter. - [ ] Utiliser des variables globales pour partager des données à travers le programme > ❌ Utiliser des variables globales est découragé en programmation défensive car cela peut conduire à des bugs difficiles à trouver et des effets de bord non intentionnels. - [x] Fournir des messages d'erreur significatifs quand quelque chose va mal > ✅ Fournir des messages d'erreur significatifs aide les utilisateurs à comprendre le problème et ajuster leur comportement. - [x] Utiliser des défauts de sécurité > ✅ Les défauts de sécurité s'assurent que quand quelque chose va mal, le système se comporte de manière sûre et prévisible. - [ ] Ignorer les cas limites pour simplifier le code > ❌ Ignorer les cas limites peut conduire à des bugs et un comportement imprévisible. La programmation défensive implique de considérer les cas limites et de les gérer appropriément.

Écriture de tests

# Quel est le but d'écrire des tests en développement logiciel ? - [x] Vérifier que le code se comporte comme attendu > ✅ Écrire des tests s'assure que chaque partie du programme fonctionne comme attendu et répond à ses spécifications. - [ ] Faire fonctionner le code plus rapidement > ❌ Les tests ne sont pas conçus pour améliorer la vitesse du code ; ils sont utilisés pour vérifier la justesse. - [x] Détecter les bugs et régressions tôt dans le processus de développement > ✅ Les tests aident à détecter les bugs et régressions tôt, réduisant le coût de correction des erreurs plus tard dans le cycle de développement. - [x] S'assurer que les nouveaux changements ne cassent pas la fonctionnalité existante > ✅ En exécutant les tests après les changements de code, les développeurs peuvent confirmer que les nouvelles fonctionnalités ou corrections n'introduisent pas de nouveaux bugs ou ne cassent pas le code existant. - [ ] Corriger automatiquement les erreurs dans le code > ❌ Les tests aident à identifier les erreurs mais ne les corrigent pas automatiquement. # Quels sont les bénéfices des tests automatisés ? - [x] Ils facilitent la maintenance en détectant les problèmes rapidement > ✅ Les tests automatisés détectent rapidement les problèmes dans le code, rendant plus facile la maintenance et la mise à jour du logiciel. - [ ] Ils remplacent le besoin de révision humaine du code > ❌ Les tests automatisés complètent la révision humaine, mais ils ne remplacent pas le besoin d'une révision minutieuse du code par les développeurs. - [x] Ils supportent l'intégration continue et le déploiement (CI/CD) > ✅ Les tests automatisés sont essentiels dans les pipelines CI/CD, s'assurant que les changements de code sont minutieusement testés avant d'être intégrés ou déployés. - [x] Ils renforcent la confiance des développeurs quand ils font des changements au code > ✅ Savoir que les tests attraperont les erreurs permet aux développeurs de refactoriser et améliorer le code avec confiance. - [ ] Ils garantissent que le logiciel n'aura jamais de bugs > ❌ Les tests automatisés aident à réduire les bugs, mais ils ne peuvent pas garantir que tous les bugs seront attrapés. # Que sont les tests unitaires ? - [x] Des tests qui se concentrent sur des unités ou composants individuels du logiciel > ✅ Les tests unitaires se concentrent sur le test d'unités individuelles, telles que les fonctions ou méthodes, en isolation du reste de l'application. - [ ] Des tests qui vérifient l'interaction entre plusieurs composants > ❌ Ceci décrit les tests d'intégration, pas les tests unitaires. Les tests unitaires se concentrent sur les composants individuels. - [x] Des tests qui s'assurent qu'une fonction ou méthode unique fonctionne comme attendu > ✅ Les tests unitaires vérifient que les fonctions ou méthodes individuelles se comportent correctement. - [ ] Des tests qui vérifient la sécurité de toute l'application > ❌ Les tests unitaires ne couvrent pas la sécurité ; c'est le but des tests de sécurité. - [x] Des tests qui sont écrits pour fonctionner rapidement et indépendamment > ✅ Les tests unitaires sont conçus pour fonctionner rapidement et indépendamment, s'assurant que les composants individuels fonctionnent comme attendu. # Pourquoi est-il important d'écrire les tests avant le code (développement dirigé par les tests) ? - [x] Les tests définissent le comportement attendu du code avant qu'il soit implémenté > ✅ Écrire les tests en premier (comme dans le développement dirigé par les tests) définit le comportement attendu du code avant qu'il soit implémenté. - [ ] Cela assure que le code n'aura pas de bugs > ❌ Écrire les tests en premier ne garantit pas qu'il n'y aura pas de bugs, mais cela aide à les réduire en clarifiant les attentes. - [x] Cela encourage les développeurs à penser de façon critique au design et à la fonctionnalité > ✅ Écrire les tests en premier encourage les développeurs à penser au design et à la fonctionnalité du code avant que l'implémentation commence. - [ ] Cela fait fonctionner le code plus rapidement > ❌ Le développement dirigé par les tests se concentre sur l'amélioration de la qualité du code, pas sur la vitesse. - [x] Cela favorise la communication et assure une compréhension partagée des objectifs du projet > ✅ Écrire les tests avant le code favorise une meilleure communication et assure que toutes les parties prenantes comprennent les objectifs du projet.

Documenter et commenter le code

# Pourquoi documenter le code est-il important ? - [x] Cela rend le code plus facile à lire et à maintenir > ✅ Documenter le code s'assure que d'autres développeurs peuvent facilement le comprendre et le maintenir sans avoir besoin de déchiffrer la logique par eux-mêmes. - [ ] Cela fait fonctionner le code plus rapidement > ❌ La documentation améliore la lisibilité et la maintenabilité, pas la performance. - [x] Cela aide les nouveaux développeurs à devenir opérationnels rapidement > ✅ Un code bien documenté permet aux nouveaux développeurs de comprendre le but et la structure du projet plus rapidement, réduisant le temps d'intégration. - [x] Cela améliore la collaboration entre les membres de l'équipe > ✅ Une bonne documentation favorise la collaboration en fournissant une compréhension partagée de la base de code. - [ ] Cela élimine le besoin de commentaires dans le code > ❌ La documentation ne remplace pas le besoin de commentaires dans le code, qui expliquent la logique ou les décisions spécifiques. # Quel est le rôle des commentaires dans le code ? - [x] Rendre le code plus facile à comprendre > ✅ Les commentaires expliquent comment fonctionnent les parties du code, rendant plus facile pour d'autres de comprendre la logique complexe ou non triviale. - [ ] Réécrire le code en français simple > ❌ Les commentaires ne devraient pas paraphraser le code lui-même ; ils devraient expliquer son but, sa logique et ses décisions de design. - [x] Fournir des informations supplémentaires sur les algorithmes ou décisions > ✅ Les commentaires sont utiles pour décrire les algorithmes, les décisions de design, les limitations ou les améliorations futures (TODOs). - [x] Expliquer le but des parties complexes du code > ✅ Pour les sections non triviales du code, les commentaires sont essentiels pour expliquer le but et assurer la maintenabilité. - [ ] Éviter le besoin de documentation > ❌ Les commentaires complètent la documentation mais ne la remplacent pas. Les deux servent des buts différents dans le processus de développement. # Que ne devraient PAS faire les commentaires ? - [x] Paraphraser le code > ✅ Les commentaires ne devraient pas simplement reformuler le code en français simple ; ils devraient fournir des aperçus et explications supplémentaires. - [ ] Expliquer les parties non triviales du code > ❌ Les commentaires devraient expliquer la logique non triviale ou complexe pour aider à la compréhension. - [ ] Fournir un contexte pour les décisions de design > ❌ Les commentaires peuvent être utilisés pour expliquer pourquoi certaines décisions de design ont été prises. - [x] Submerger le code avec des détails inutiles > ✅ Trop de commentaires peuvent rendre le code plus difficile à lire. Il est important de trouver un équilibre et ne commenter que quand c'est nécessaire. - [x] Remplacer de bons noms de variables et de fonctions > ✅ De bons noms de variables et de fonctions devraient rendre le code auto-explicatif dans de nombreux cas, réduisant le besoin de commentaires excessifs. # Quel est l'objectif principal de documenter les signatures de fonctions et de classes ? - [x] Décrire les paramètres d'entrée et les valeurs de retour > ✅ Documenter les signatures de fonctions et de classes aide à expliquer les paramètres d'entrée, les valeurs de retour et toutes les exceptions qui peuvent être levées. - [ ] Réécrire la logique de la fonction en commentaires > ❌ Le but n'est pas de réécrire la logique de la fonction mais de décrire ses entrées, sorties et comportement. - [x] Rendre le code plus facile à comprendre et à utiliser > ✅ Fournir une documentation claire pour les signatures de fonctions et de classes rend plus facile pour les développeurs d'utiliser et comprendre le code. - [ ] Générer automatiquement des tests unitaires > ❌ Bien que les signatures de fonctions aident dans les tests, leur documentation n'est pas destinée à générer des tests automatiquement. - [x] Faciliter la génération de documentation externe > ✅ La documentation des signatures de fonctions et de classes peut être utilisée pour générer une documentation externe que les développeurs peuvent consulter quand ils utilisent le code. # Comment les docstrings supportent-elles la documentation automatique ? - [x] Les outils comme `pydoc` peuvent extraire les docstrings pour générer la documentation > ✅ Les docstrings peuvent être extraites par des outils comme `pydoc` pour générer automatiquement une documentation lisible par l'humain. - [ ] Elles remplacent le besoin de commentaires dans le code > ❌ Les docstrings fournissent de la documentation mais ne remplacent pas les commentaires, qui expliquent des parties spécifiques du code ou la logique. - [x] Elles fournissent des descriptions détaillées des fonctions, méthodes ou classes > ✅ Les docstrings décrivent le but et le comportement des fonctions, méthodes ou classes, qui peuvent ensuite être utilisées pour générer de la documentation. - [x] Elles sont écrites directement dans le code source > ✅ Les docstrings sont intégrées directement dans le code source, les rendant facilement accessibles à la fois pour les développeurs et les outils de documentation. - [ ] Elles sont seulement utilisées dans les langages compilés > ❌ Les docstrings ne sont pas exclusives aux langages compilés ; elles sont largement utilisées dans les langages interprétés comme Python.