Mise au point des programmes

Spé. NSI · Terminale · cours rédigé et vérifié par Claryo, conforme au Bulletin officiel

L'essentiel

La mise au point (debugging) regroupe tout ce qui permet de détecter, localiser et corriger les erreurs d'un programme, puis de vérifier qu'il fonctionne correctement. On distingue trois grands types d'erreurs.

· L'erreur de syntaxe viole la grammaire du langage : le programme ne s'exécute pas du tout (en Python, une SyntaxError). Exemples : parenthèse ou deux-points manquants, mauvaise indentation. · L'erreur d'exécution survient pendant l'exécution et provoque un arrêt par exception : division par zéro (ZeroDivisionError), indice hors limites (IndexError), type incompatible (TypeError). · L'erreur logique (ou sémantique) est la plus sournoise : le programme s'exécute sans planter mais renvoie un résultat faux. Aucune erreur n'est signalée ; seuls des tests bien choisis la révèlent.

Pour fiabiliser un programme, on construit un jeu de tests : des couples (entrée, sortie attendue). Il faut impérativement inclure les cas limites (liste vide, n = 0, premier et dernier éléments, valeurs négatives ou extrêmes), car c'est là que se cachent la plupart des bugs. En Python, l'instruction assert condition automatise ces vérifications : si la condition est fausse, une AssertionError est levée.

Pour localiser un bug, deux approches complémentaires : les affichages temporaires (print) pour suivre l'évolution des variables, et le débogage pas à pas avec un débogueur et des points d'arrêt, qui permet d'inspecter finement l'état du programme et de le mettre en pause.

Formules et schémas clés

· Test par assertion : assert recherche(7, [3, 7, 9]) == 1. · Recherche d'indice correcte : boucle for i in range(len(tab)), renvoyer i si trouvé, sinon -1 après la boucle. · Maximum correct : initialiser m = liste[0] (jamais 0).

Schéma : tableau à trois colonnes « cas testé / entrée / sortie attendue » couvrant les cas normaux et les cas limites.

Méthode type bac

1) Lire la spécification (entrée, sortie attendue). 2) Construire un jeu de tests incluant les cas limites. 3) Si un test échoue, isoler la ligne fautive par print ou pas à pas. 4) Distinguer le type d'erreur (syntaxe / exécution / logique) et corriger. 5) Relancer tous les tests (non-régression).

Pièges

· Initialiser un maximum à 0 : faux dès qu'il y a des valeurs négatives. · Oublier le cas de la liste vide ou de l'élément absent (return -1). · Confondre erreur d'exécution (le programme plante) et erreur logique (résultat faux sans plantage). · Laisser des print de débogage dans le code final ou s'y fier au lieu d'un vrai jeu de tests.

Pour l'épreuve

C'est un attendu majeur de l'épreuve pratique : savoir écrire un jeu de tests avec assert couvrant les cas limites, lire un message d'erreur pour identifier le type d'erreur, et corriger un bug classique (initialisation, condition de boucle, cas vide). Toujours tester avant d'affirmer qu'un code est correct.