Numérique et Sciences Informatiques1ère

Documentation du code
Exercices corrigés

Maîtrisez la documentation du code : commentaires, docstrings, conventions, outils, maintenance grâce à ces 5 exercices détaillés.

Concepts & Exercices
Code_{maintenable} = Code + Documentation_{complète}
Code documenté
Commentaires
# explication
Expliquer le code
Docstrings
"""descriptif"""
Documenter les fonctions
Conventions
PEP 257
Normes de documentation
🎯
Définition : Ensemble des textes explicatifs dans ou à côté du code.
📚
Objectif : Faciliter la compréhension, la maintenance et la collaboration.
🔄
Maintenance : Documenter les modifications apportées au code.
👥
Collaboration : Permettre à d'autres développeurs de comprendre le code.
Exercice 1
Documenter une fonction avec des commentaires et docstring
Exercice 2
Créer une documentation de module complète
Exercice 3
Documenter un algorithme complexe avec des commentaires explicatifs
Exercice 4
Utiliser des outils de génération de documentation automatique
Exercice 5
Maintenir la documentation pendant l'évolution du code
Corrigé : Exercices 1 à 3
1 Documentation de fonction
Définition :

Docstring : Chaîne de caractères au début d'une fonction décrivant son utilité.

Méthode de documentation :
  1. Écrire une docstring triple guillemet en première ligne de la fonction
  2. Indiquer la description, les paramètres et la valeur de retour
  3. Ajouter des exemples d'utilisation si nécessaire
  4. Utiliser des commentaires pour expliquer les parties complexes
def tri_selection(tableau): """ Trie un tableau en utilisant l'algorithme du tri par sélection. Args: tableau (list): Liste d'éléments comparables à trier Returns: list: Nouvelle liste triée en ordre croissant Example: >>> tri_selection([3, 1, 4, 1, 5]) [1, 1, 3, 4, 5] """ # Crée une copie du tableau pour ne pas modifier l'original resultat = tableau.copy() # Parcourt chaque position du tableau for i in range(len(resultat)): # Trouve l'indice de l'élément minimum à partir de la position i min_idx = i for j in range(i+1, len(resultat)): # Si un élément plus petit est trouvé, met à jour l'indice if resultat[min_idx] > resultat[j]: min_idx = j # Échange l'élément minimum avec l'élément à la position i resultat[i], resultat[min_idx] = resultat[min_idx], resultat[i] return resultat
Étape 1 : Écrire la docstring

Expliquer ce que fait la fonction, ses paramètres et sa valeur de retour.

Étape 2 : Ajouter des commentaires internes

Expliquer les parties complexes de l'algorithme.

Étape 3 : Inclure des exemples

Montrer comment utiliser la fonction avec des données concrètes.

Fonction bien documentée: Docstring + Commentaires + Exemples
Réponse finale :

Une fonction bien documentée contient une docstring décrivant son usage et des commentaires internes pour les parties complexes.

Règles appliquées :

Structure : Description, paramètres, retour, exemples

Clarté : Langage simple et descriptif

Exhaustivité : Tous les aspects de la fonction sont documentés

2 Documentation de module
Définition :

Documentation de module : Ensemble d'informations en tête de fichier décrivant l'ensemble des fonctions.

""" Module de manipulation de chaînes de caractères. Ce module fournit des fonctions utilitaires pour manipuler et analyser des chaînes de caractères selon diverses méthodes. Fonctions disponibles: - compter_mots: Compte le nombre de mots dans une chaîne - inverser_chaine: Retourne la chaîne inversée - est_palindrome: Vérifie si une chaîne est un palindrome """ def compter_mots(chaine): """Compte le nombre de mots dans une chaîne.""" return len(chaine.split()) def inverser_chaine(chaine): """Retourne la chaîne inversée.""" return chaine[::-1] def est_palindrome(chaine): """Vérifie si une chaîne est un palindrome.""" chaine = chaine.lower().replace(' ', '') return chaine == chaine[::-1] # Documentation des classes et constantes si présentes VERSION = "1.0.0" """ Version actuelle du module. """
Étape 1 : Documenter le module

Écrire une docstring en haut du fichier décrivant l'objectif.

Étape 2 : Lister les fonctions

Inclure une section avec les fonctions disponibles.

Étape 3 : Documenter les constantes

Ajouter des commentaires pour les variables globales.

Module documenté: En-tête + Fonctions + Constantes
Réponse finale :

Un module bien documenté commence par une description générale suivie de la documentation des éléments qu'il contient.

Règles appliquées :

Contexte : Expliquer le but du module

Structure : Organiser les informations de manière logique

Complétude : Documenter tous les éléments publics

3 Documentation d'algorithme
Définition :

Algorithme documenté : Code annoté pour expliquer la logique de chaque étape.

def quicksort(tableau): """ Trie un tableau en utilisant l'algorithme de tri rapide (Quicksort). Args: tableau (list): Liste d'éléments comparables à trier Returns: list: Nouvelle liste triée """ # Condition d'arrêt : si le tableau a 0 ou 1 élément, il est déjà trié if len(tableau) <= 1: return tableau # Sélection du pivot : ici, on prend le dernier élément pivot = tableau[-1] # Partitionnement : séparer les éléments en trois groupes # gauche : éléments inférieurs au pivot gauche = [x for x in tableau[:-1] if x < pivot] # milieu : éléments égaux au pivot milieu = [x for x in tableau if x == pivot] # droite : éléments supérieurs au pivot droite = [x for x in tableau[:-1] if x > pivot] # Appel récursif : trier les parties gauche et droite # puis combiner les résultats return quicksort(gauche) + milieu + quicksort(droite) # Exemple d'utilisation donnees = [64, 34, 25, 12, 22, 11, 90] resultat = quicksort(donnees) print(f"Tableau trié: {resultat}") # Affiche: [11, 12, 22, 25, 34, 64, 90]
Étape 1 : Expliquer l'algorithme

Donner un aperçu général de la méthode utilisée.

Étape 2 : Commenter les étapes clés

Expliquer chaque phase de l'algorithme avec des commentaires.

Étape 3 : Illustrer avec un exemple

Fournir un cas d'utilisation pour clarifier le fonctionnement.

Algorithme clair: Explication + Commentaires + Exemple
Réponse finale :

Un algorithme bien documenté explique sa logique et comment chaque étape contribue au résultat final.

Règles appliquées :

Logique : Expliquer la stratégie de l'algorithme

Clarté : Utiliser des commentaires pour les parties complexes

Illustration : Fournir des exemples d'utilisation

Corrigé : Exercices 4 à 5
4 Outils de documentation
Définition :

Outils de documentation : Logiciels qui génèrent automatiquement de la documentation à partir du code.

# Exemple de code prêt pour la documentation automatique def recherche_dichotomique(tableau, element): """ Recherche un élément dans un tableau trié par dichotomie. Cette fonction implémente l'algorithme de recherche dichotomique qui permet de trouver un élément dans un tableau trié en O(log n). Args: tableau (list): Liste triée d'éléments comparables element (any): Élément à rechercher dans le tableau Returns: int: Index de l'élément dans le tableau, ou -1 s'il n'est pas trouvé Raises: ValueError: Si le tableau n'est pas trié Example: >>> recherche_dichotomique([1, 3, 5, 7, 9], 5) 2 >>> recherche_dichotomique([1, 3, 5, 7, 9], 4) -1 """ debut = 0 fin = len(tableau) - 1 while debut <= fin: milieu = (debut + fin) // 2 if tableau[milieu] == element: return milieu elif tableau[milieu] < element: debut = milieu + 1 else: fin = milieu - 1 return -1 # Utilisation avec un outil comme Sphinx # sphinx-quickstart docs # Ajouter le code à la documentation # make html
Étape 1 : Structurer les docstrings

Utiliser un format standardisé (comme Napoleon pour Sphinx).

Étape 2 : Configurer l'outil

Installer et configurer l'outil de génération de documentation.

Étape 3 : Générer la documentation

Exécuter l'outil pour produire la documentation finale.

Documentation générée: Code + Docstrings → HTML/PDF
Réponse finale :

Les outils de documentation automatique transforment les docstrings en documentation formatée.

Règles appliquées :

Standardisation : Suivre les conventions de l'outil utilisé

Complétude : Documenter tous les éléments publics

Maintenance : Garder la documentation à jour avec le code

5 Maintenance de documentation
Définition :

Maintenance de documentation : Mettre à jour la documentation lors des modifications du code.

# Version initiale (avant modification) def calculer_moyenne(valeurs): """ Calcule la moyenne arithmétique d'une liste de valeurs. Args: valeurs (list): Liste de nombres Returns: float: Moyenne des valeurs Raises: ValueError: Si la liste est vide """ if not valeurs: raise ValueError("La liste ne peut pas être vide") return sum(valeurs) / len(valeurs) # Après modification (ajout de pondération) def calculer_moyenne(valeurs, poids=None): """ Calcule la moyenne arithmétique ou pondérée d'une liste de valeurs. Args: valeurs (list): Liste de nombres poids (list, optional): Liste des poids associés aux valeurs Returns: float: Moyenne des valeurs (arithmétique ou pondérée) Raises: ValueError: Si la liste est vide ou si les listes ont des tailles différentes """ if not valeurs: raise ValueError("La liste ne peut pas être vide") if poids is None: # Moyenne arithmétique return sum(valeurs) / len(valeurs) else: # Vérifier que les listes ont la même taille if len(valeurs) != len(poids): raise ValueError("Les listes de valeurs et de poids doivent avoir la même taille") # Calcul de la moyenne pondérée somme_produits = sum(v * p for v, p in zip(valeurs, poids)) somme_poids = sum(poids) return somme_produits / somme_poids # Journal des modifications """ Changelog: - v1.0.0: Fonction de calcul de moyenne arithmétique - v1.1.0: Ajout de la moyenne pondérée - v1.1.1: Correction d'un bug de division par zéro """
Étape 1 : Identifier les changements

Détecter les modifications apportées au code.

Étape 2 : Mettre à jour la documentation

Adapter les docstrings aux nouvelles fonctionnalités.

Étape 3 : Enregistrer les modifications

Tenir un journal des changements pour suivre l'évolution.

Documentation à jour: Code + Docstring + Journal des modifications
Réponse finale :

La documentation doit évoluer en même temps que le code pour rester précise et utile.

Règles appliquées :

Synchronisation : Documentation mise à jour avec le code

Historique : Tenir un journal des modifications

Précision : Documenter chaque changement significatif

Cours bien détaillé
\text{Maintenabilité} = \frac{\text{Code} + \text{Documentation}}{\text{Complexité}}
Équation de maintenabilité
🎯
Objectif : Faciliter la compréhension et la maintenance du code.
📚
Types : Inline, fonctionnelle, de module, de système.
🔄
Processus : Écriture, révision, mise à jour continue.
👥
Public : Développeurs, mainteneurs, utilisateurs du code.
💡
Conseil : Documenter pendant l'écriture du code, pas après
🔍
Attention : Éviter les commentaires redondants
Astuce : Utiliser des outils de génération de documentation
📋
Méthode : Suivre les conventions de documentation (PEP 257)
Vérification : S'assurer que la documentation est à jour
Niveaux de documentation :
  • Inline : Commentaires dans le code pour les parties complexes
  • Fonctionnelle : Docstrings pour les fonctions, classes et modules
  • Structurée : Documentation externe avec guides d'utilisation
  • Automatique : Génération à partir de docstrings avec des outils
Bonnes pratiques :
  • Clarté : Utiliser un langage simple et descriptif
  • Concision : Être bref mais complet
  • Actualité : Mettre à jour la documentation avec le code
  • Exemples : Fournir des cas d'utilisation concrets
Règles importantes :
  • Chaque fonction publique doit avoir une docstring
  • La documentation doit refléter exactement le comportement du code
  • Les commentaires doivent expliquer le "pourquoi" pas le "comment"
  • La documentation doit être maintenue à jour lors des modifications
  • Utiliser des outils pour générer de la documentation automatique
Documentation du code Intégration des connaissances