POO, documentation et tests - TP2

Modules, style de code, exceptions et tests
Author

Ludovic Deneuville

Introduction

Créer l’arborscence

Vous pouvez créer chaque dossier et fichier à la main, ou utiliser dans un terminal Git Bash les commandes ci-dessous (mkdir : make directory):

# Sur la VM ensai
mkdir -p /p/Cours1A/IPOO/TP2/Exercice_{1..5}/ && touch /p/Cours1A/IPOO/TP2/Exercice_{1..5}/ex.py

# Sur un Datalab Onyxia
mkdir -p /home/onyxia/work/IPOO/TP2/Exercice_{1..5}/ && touch /home/onyxia/work/IPOO/TP2/Exercice_{1..5}/ex.py

Moodle

1 Cours

1.1 Linter Flake8

Flake8 est un Linter :

  • Il analyse le code pour détecter des erreurs, des mauvaises pratiques ou des violations des règles de style
  • Il ne modifie pas directement le code
  • Il signale les problèmes pour que l’on puisse ensuite les corriger

Il existe également des formatters (Black, Ruff) qui à la différence des linters, modifient le code.

1.2 Tests Unitaires

cf. partie Cours

1.3 Exceptions

cf. partie Cours

2 Visual Studio Code

      • dans votre Explorer à gauche apparait l’arborescence des dossiers et fichiers de Exercice_1

2.1 Settings

  • icone ⚙️ en bas à droite > Settings
  • options à activer :
    • files.trimTrailingWhitespace
    • files.insertFinalNewline
    • files.trimFinalNewlines
    • flake8.args
      • Add item : –max-line-length=88
    • editor.rulers : 88
    • python.testing.pytestArgs
      • Add item : –doctest-modules

2 niveaux :

  • User : options appliquées au niveau global
  • Workspace : réglages spécifiques pour l’espace de travail (dossier)
    • création d’un fichier .vscode/settings.json (exportable) qui contient ces réglages

3 Exercices

3.1 Exercice 1

3.2 Exercice 2

Les doctest vus au TP1 ne sont pas utilisés en pratique car cela surcharge les modules.

On préfère exporter les tests dans des modules à part.

3.3 Exercice 3

3.4 Exercice 4

  • Inscription
      • Exemple pour lever une exception

        if adresse_electronique.count('@') != 1:
            raise ValueError(
                "L'adresse électronique doit contenir un seul symbole @."
            )
    • base_de_donnees : list[tuple[str, str]]

4 Template doc

Voici un modèle que vous pouvez utiliser pour documenter vos fonctions

def ma_fonction(param1, param2=valeur_par_defaut) -> type_retour:
    """description_courte

    description_longue

    Parameters
    ----------
    param1 : type (str, int, float, list...)
        description_param1
    param2 : type
        description_param2

    Returns
    -------
    type_retour
        description_retour

    Examples
    --------
    >>> 1+1
    2
    >>> print("abc")
    abc
    >>> ma_fonction(xxx, yyy)
    valeur_esperee
    """
    return None