Adloun

Un groupe propose ce prototype

Application directe du cours · niveau 2 · NSI (première), chapitre 11 — Conduire un projet · Spécifier et documenter

Énoncé

Un groupe propose ce prototype :


def jouer(g, i, j, joueur, affiche=True):
    """Applique le coup, affiche la grille, dit si la partie est finie."""

Citer deux raisons pour lesquelles cette fonction sera pénible à tester, et proposer une découpe.

Corrigé

Deux raisons.

La découpe.


def coup_legal(g, i, j):
    """Le coup (i, j) est-il jouable sur g ? Ne modifie rien."""

def appliquer(g, i, j, joueur):
    """Range joueur dans la case (i, j). Precondition : coup_legal."""

def gagnant(g):
    """Renvoie "X", "O" ou None. Ne modifie rien."""

def afficher(g):
    """Imprime la grille. Ne calcule rien."""

Trois fonctions se testent par de simples assertions ; la quatrième se vérifie à l'œil, une fois, sur trois grilles. Et le paramètre affiche a disparu : on n'appelle plus afficher quand on ne veut pas afficher.

La règle qu'il faut emporter : une fonction calcule ou affiche, jamais les deux. Ce n'est pas une élégance de style — c'est ce qui rend un projet testable. Un programme dont les calculs sont enfouis dans les fonctions d'affichage ne peut être vérifié qu'en le regardant tourner, c'est-à-dire par la méthode la moins fiable qui soit.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.