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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Base de code | tous les fichiers d'un même logiciel | |
| Fonction | un bloc de code nommé qui fait une seule tâche | frais_livraison |
| Appel | la ligne qui lance une fonction | frais_livraison("69003", 5500) |
| Point d'entrée | l'endroit où le programme démarre | |
| Recherche | trouver tous les endroits où un mot apparaît | grep -rn livraison boutique |
| Ticket | une 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
| Fichier | Ce qu'il fait | Utile pour le ticket ? |
|---|---|---|
| boutique/commande.py | Le point d'entrée : il passe la commande | Oui, on part de là |
| boutique/panier.py | Il additionne les prix | Peut-être |
| boutique/livraison.py | Il calcule les frais de livraison | Oui, c'est le sujet |
| boutique/factures.py | Il crée la facture en PDF | Non |
| boutique/tests/ | Les tests du logiciel | Oui, 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
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
# --- 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
# --- 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.