Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Se repérer dans le code d'un autre

Après cette leçon: Je peux trouver où se trouve une fonctionnalité dans le code de quelqu'un d'autre.

Leçon de 45 minAucune commande

Votre premier ticket

Vous commencez lundi dans une PME lyonnaise qui vend du café en ligne. Mardi, un premier ticket arrive.

« Un client a payé 4,90 € de livraison pour 55 € d'achats. La livraison est offerte dès 50 €. »

Le logiciel compte 300 fichiers. Vous n'en avez écrit aucun. Personne ne vous demande de tout lire.

À la fin de cette leçon

Remarque

Je peux trouver où se trouve une fonctionnalité dans le code de quelqu'un d'autre.

Mots clés

MotCe que ça veut direExemple
Base de codetous les fichiers d'un même logiciel
Fonctionun bloc de code nommé qui fait une seule tâchefrais_livraison
Appella ligne qui lance une fonctionfrais_livraison("69003", 5500)
Point d'entréel'endroit où le programme démarre
Recherchetrouver tous les endroits où un mot apparaîtgrep -rn livraison boutique
Ticketune demande écrite de correction ou d'évolution

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le code est rangé par sujet

Une base de code n'est pas un tas de fichiers. Elle est rangée par sujet, comme les classeurs d'un service comptable.

Les noms vous aident. Un fichier livraison.py parle de livraison. Un dossier tests contient les tests.

Commencez donc par regarder les dossiers et leurs noms, sans ouvrir les fichiers.

Exemple : les fichiers de la boutique

FichierCe qu'il faitUtile pour le ticket ?
boutique/commande.pyLe point d'entrée : il passe la commandeOui, on part de là
boutique/panier.pyIl additionne les prixPeut-être
boutique/livraison.pyIl calcule les frais de livraisonOui, c'est le sujet
boutique/factures.pyIl crée la facture en PDFNon
boutique/tests/Les tests du logicielOui, pour vérifier

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une recherche trouve le point de départ

Prenez les mots du ticket. Ici, le mot important est « livraison ».

grep -rn livraison boutique cherche ce mot dans tous les fichiers du dossier. L'option -r descend dans les sous-dossiers. L'option -n donne le numéro de chaque ligne.

Dans un éditeur de code, Ctrl+Maj+F fait la même recherche.

Essayez : cherchez dans la boutique

Code: bash
mkdir -p boutique/tests
printf '%s\n' 'def total_panier(prix):' '    return sum(prix)' > boutique/panier.py
printf '%s\n' 'SEUIL_GRATUIT = 6000' 'def frais_livraison(code_postal, total):' '    return 490' > boutique/livraison.py
printf '%s\n' 'from livraison import frais_livraison' 'frais = frais_livraison(cp, total)' > boutique/commande.py
printf '%s\n' 'def test_livraison_offerte():' '    assert frais_livraison("69003", 7000) == 0' > boutique/tests/test_livraison.py

# Les fichiers de la boutique, dossier par dossier.
ls -R boutique

echo "---- où parle-t-on de livraison ? ----"
grep -rn "livraison" boutique

# À vous : cherchez plutôt le mot SEUIL_GRATUIT.

Suivez l'appel jusqu'au travail

La recherche vous donne un point de départ. Ensuite, vous suivez les appels.

Partez du point d'entrée. Regardez quelle fonction il appelle. Allez voir cette fonction, puis ce qu'elle appelle à son tour.

Arrêtez-vous quand vous arrivez aux lignes qui font le calcul du ticket.

Essayez : lance la commande

Code: python
# --- livraison.py ---
TARIF_STANDARD = 490    # en centimes : 4,90 €
TARIF_CORSE = 1290      # 12,90 €
SEUIL_GRATUIT = 6000    # livraison offerte dès 60 €

def frais_livraison(code_postal, total):
    if total >= SEUIL_GRATUIT:
        return 0
    if code_postal.startswith("20"):
        return TARIF_CORSE
    return TARIF_STANDARD

# --- panier.py ---
def total_panier(prix):
    total = 0
    for p in prix:
        total = total + p
    return total

# --- commande.py : le point d'entrée ---
def passer_commande(code_postal, prix):
    total = total_panier(prix)
    frais = frais_livraison(code_postal, total)
    print("Articles :", total, "Livraison :", frais)
    return total + frais

passer_commande("69003", [3200, 2300])   # un client à Lyon

Une erreur fréquente

Attention

Beaucoup pensent qu'il faut tout lire avant de toucher une ligne. C'est faux. Une équipe attend de vous que vous cherchiez, puis que vous suiviez les appels. Lisez seulement les fonctions sur ce chemin.

À vous : corrigez le ticket

Code: python
# --- livraison.py ---
SEUIL_GRATUIT = 6000    # en centimes

def frais_livraison(code_postal, total):
    if total >= SEUIL_GRATUIT:
        return 0
    return 490

# --- panier.py ---
def total_panier(prix):
    total = 0
    for p in prix:
        total = total + p
    return total

# --- commande.py : le point d'entrée ---
def passer_commande(code_postal, prix):
    total = total_panier(prix)
    frais = frais_livraison(code_postal, total)
    return total + frais

# Le client à Lyon achète pour 55 €. Il devrait payer 5500.
print(passer_commande("69003", [3200, 2300]))

# Ticket : « La livraison est offerte dès 50 €, pas 60 €. »
# Suivez l'appel, trouvez la bonne ligne, corrigez-la, puis cliquez sur Exécuter.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.