Adloun

Modularité, mise au point et tests

Cours · NSI (terminale), chapitre 10 · terminale, spécialité numérique et sciences informatiques · le début du chapitre, la suite sur Adloun

La mise au point d'un programme : une série de tests, réussis ou échoués, à faire passer.

Écrire un programme qui fonctionne est une chose ; écrire un programme fiable, lisible et maintenable en est une autre. Lorsqu'un projet grossit, il devient impossible de tout placer dans un seul fichier monolithique : on découpe alors le code en modules et en fonctions réutilisables. Mais découper ne suffit pas : encore faut-il documenter ce que fait chaque fonction, vérifier qu'elle se comporte comme prévu grâce à des jeux de tests, et corriger les erreurs qui apparaissent inévitablement.

Ce chapitre présente les outils et les méthodes du développeur professionnel : la modularité (fonctions, modules, imports, bibliothèques), la documentation (docstring, spécification, préconditions), les jeux de tests et les assertions, les types d'erreurs et les techniques de débogage, ainsi que les pratiques de gestion de projet et de travail collaboratif fondées sur le versionnage.

10.1 La modularité

10.1.1 Pourquoi découper un programme ?

Un programme bien conçu est constitué de briques indépendantes, chacune réalisant une tâche précise. Cette organisation présente plusieurs avantages :

Définition 10.1Modularité

La modularité est le principe de conception qui consiste à décomposer un programme en unités autonomes et réutilisables : les fonctions, regroupées au sein de modules, eux-mêmes parfois regroupés en bibliothèques (ou paquets).

10.1.2 Les fonctions

La fonction est l'unité de base de la modularité. Elle reçoit des paramètres, effectue un traitement et renvoie un résultat grâce à l'instruction return.

Définition 10.2Fonction

Une fonction est un bloc de code nommé, qui peut recevoir des arguments en entrée et renvoyer une valeur en sortie. Elle encapsule un traitement de manière à pouvoir être appelée par son nom.

Exemple 10.3Une fonction simple

def aire_rectangle(longueur, largeur):
    return longueur * largeur

surface = aire_rectangle(5, 3)
print(surface)   # affiche 15

La fonction aire_rectangle prend deux paramètres et renvoie leur produit. Une fois définie, elle peut être réutilisée partout dans le programme.

Proposition 10.4Portée des variables

Une variable définie à l'intérieur d'une fonction est locale : elle n'existe que pendant l'exécution de la fonction et n'est pas accessible à l'extérieur. Les variables définies au niveau principal du programme sont globales. Cette séparation évite les effets de bord et rend les fonctions indépendantes les unes des autres.

10.1.3 Les modules

Lorsqu'un ensemble de fonctions traite d'un même sujet, on les regroupe dans un module, c'est-à-dire un fichier .py dédié.

Définition 10.5Module

Un module est un fichier source Python (extension .py) contenant des définitions (fonctions, constantes, classes) destinées à être réutilisées par d'autres programmes via le mécanisme d'import.

Méthode : Créer et importer un module

  • On écrit les fonctions dans un fichier, par exemple geometrie.py.
  • Dans un autre fichier situé dans le même dossier, on importe le module.
  • On accède aux fonctions du module par la notation nom_module.nom_fonction.

# fichier geometrie.py
def aire_cercle(rayon):
    return 3.14159 * rayon ** 2

# fichier principal.py
import geometrie
print(geometrie.aire_cercle(2))   # 12.56636
Exemple 10.6Les différentes formes d'import

import math                 # importe tout le module
print(math.sqrt(16))        # 4.0

from math import sqrt       # importe une fonction precise
print(sqrt(25))             # 5.0

from math import pi as PI   # importe en renommant
print(PI)                   # 3.141592653589793

La forme import math est la plus claire car elle indique explicitement la provenance de chaque fonction. La forme from math import * (tout importer) est déconseillée : elle masque l'origine des noms et peut provoquer des conflits.

Exercices du chapitre

La suite du cours · Tous les exercices du chapitre