Examen final : Compléments d’informatique
UE3 : Compléments d’informatique
Instructions
- Examen sur papier
- Durée : 2h
- Une feuille A4 manuscrite recto/verso autorisée
- Sans calculatrice
Le sujet est composé de plusieurs pages, numérotées de 1 à la dernière page.
- Les exercices peuvent être traités dans l’ordre de votre choix.
- Dans chaque exercice, les questions ne sont pas forcément de difficulté croissante.
- Les différentes questions attendent des réponses courtes.
- Respectez scrupuleusement les consignes. Cependant, si une question ne vous semble pas claire, notez sur votre copie la manière dont vous l’avez comprise et traitée.
- Quand du code est demandé, veuillez respecter les règles de bases du langage (mots clefs et indentation). Des erreurs seront tolérées, car vous êtes sur papier. En cas d’oubli d’un nom de méthode Python, utilisez du pseudo-code.
- Sauf mention contraire, il n’est pas demandé d’écrire la documentation du code (même si la doc c’est bien !)
Bonne chance !
1 POO, Bases de données et Sécurité (7 points)
- Quels sont les 3 grands principes de la Programmation Orientée Objet ?
- Quels sont les 4 piliers de la sécurité informatique ? Détaillez celui de votre choix (définition, mécanismes associés).
- Quels sont les intérêts de séparer votre code en couches ?
- Quel est le rôle principal de la couche DAO ?
- Expliquez comment se prémunir des injections SQL ? Donnez quelques bonnes pratiques.
- On vous demande de gérer le stockage de mots de passe en base de données. Comment procédez-vous ?
- Complétez la classe
PersonneDao(ci-après) en écrivant la méthodetrouver_toutesqui retourne la liste de toutes les personnes de la base de données (pour cette méthode, le résultat renvoyé par le curseur pourra être traité comme une liste de dictionnaires).
class Personne:
def __init__(self, nom, prenom, age, id=None):
self.nom = nom
self.prenom = prenom
self.age = age
self.id = id
class PersonneDao(metaclass=Singleton):
def trouver_par_id(self, id: str) -> Personne:
"""Trouver une Personne à partir de son id"""
with DBConnection().connection as connection:
with connection.cursor() as cursor:
cursor.execute(
"SELECT nom, "
" prenom, "
" age "
" FROM exo.personne "
" WHERE id=%(id)s ",
{"id": id},
)
res = cursor.fetchone()
personne = None
if res:
personne = Personne(
nom=res["nom"],
prenom=res["prenom"],
age=res["age"],
id=id,
)
return personne2 Web services (3 points)
- Qu’est-ce qu’un Web service ?
- Quelles sont les 4 méthodes http pour contacter un Web service ?
- Nommez les éléments de la requête suivante :
GET https://pokeapi.fr:5000/pokemon?limit=10
- GET
- https
- pokeapi.fr
- 5000
- /pokemon
- ?limit=10
- Qu’est-ce qu’un Swagger ?
3 Git et Versionnage (5 points)
Dans cet exercice, vous travaillez dans une équipe composée de 3 personnes sur le projet Argousier. Le code de votre projet est stocké sur GitHub. Comme tous les matins, vous arrivez à 7h30 à votre bureau. Vos collègues, eux sont plutôt du soir. Vous allumez votre machine et lancez Git Bash.
- Vous voulez vérifier si vos collègues ont avancé sur le code hier soir. Quelle commande exécutez-vous ?
Pas de chance, hier avant de partir, vous avez oublié de partager votre code sur le dépôt distant. Quelqu’un a modifié le même fichier que vous et vous obtenez un conflit. Quand vous ouvrez le fichier en question, vous trouvez ceci :
<<<<<<< HEAD (current change)
print("Bonjour Alain")
=======
print("Bonjour Philippe")
>>>>>>> (incoming change)- Vous imposez votre version. Quelles actions faites-vous pour mettre à jour le dépôt distant ?
Vous avez maintenant réussi à mettre à jour le dépôt distant. Votre collègue Annabelle arrive à 9h00, développe pendant 30min, puis essaie de partager son code avec les commandes suivantes :
>>> git add .
>>> git commit -m "correction incident 5"
>>> git pushCependant lors du push, elle rencontre une erreur : « Updates were rejected because the remote contains work that you do not have locally. »
- Qu’est-ce qu’Annabelle a oublié de faire ?
- À 10h00, Michel arrive en panique. Il vient d’entendre à la radio que GitHub vient d’être piraté à l’instant et qu’ils ont perdu tous les dépôts. Est-ce que vous allez devoir recommencer votre projet à zéro (expliquez) ?
- À 11h00, Johanna, qui travaille sur un projet codé en R, vient vous voir, car elle est intéressée par l’utilisation de Git. Est-ce possible d’utiliser Git avec du code R ? Expliquez-lui en quelques mots à quoi sert Git.
4 Agilité et Tests (5 points)
- À quoi ça sert de faire des tests ?
- Comment appelle-t-on la méthode qui consiste à écrire des tests avant de coder ?
- Citez 4 types de tests.
- Écrivez 2 tests unitaires pour vérifier le bon fonctionnement de la méthode
trouver_par_id(id)de l’exercice 1.
- Cas nominal : id = 1 existant dans la base de données
- Cas d’erreur : id = 999 n’existant pas dans la base de données
- Citez 3 frameworks agile ? Lequel est le plus utilisé ?
- VRAI ou FAUX ? (sans justification)
- Le cycle en V permet d’avoir des cycles de livraisons plus rapides.
- « L’adaptation au changement plus que le suivi d’un plan » est l’une des 4 valeurs fondamentales de l’agilité.
- Le principal inconvénient de l’agilité est qu’il peut y avoir un effet tunnel.
- Le Scrum Master est le responsable du bon fonctionnement de l’équipe.
- Bonus : Est-ce qu’en tant que responsable d’une application informatique, vous feriez confiance aux utilisateurs de votre application ? Oui ou Non (réponse correcte : 0.25 pt, réponse fausse : -25 pts, non réponse : 0 pt)