AI Coding · 4 mondes · 12 étapes

Coder avec l'IA

Faire travailler un assistant de code, sans jamais lui confier les clés.

Progression

0 %

0/12 étapes terminées

Intermédiaire · 10 min de lecture

Tester avant d'accepter

Les tests tranchent, pas le style

1Définition

On écrit les tests d'abord, à partir de la consigne — un cas par phrase — puis on les lance sur chaque proposition. Les tests de propriétés vont plus loin : des centaines d'entrées au hasard (avec une graine pour rejouer), et des règles qui doivent toujours tenir.

2Principes fondamentaux

01

La consigne, puis les cas

Chaque phrase de la spécification donne au moins un test.

02

Des propriétés

Ordonnée, mêmes éléments, entrée intacte : vrai pour toute entrée.

03

Un hasard rejouable

Une graine fixe donne toujours la même suite.

04

Un contre-exemple

Le cas qui échoue, à montrer à l'assistant.

3Exemples pratiques

Des propriétés avec fast-check

Exemple
1import fc from "fast-check";2 3fc.assert(fc.property(fc.array(fc.integer()), (t) => {4  const r = trier(t);5  return r.every((x, i) => i === 0 || r[i - 1] <= x) && r.length === t.length;6}));

La bibliothèque génère les entrées et réduit tout échec au plus petit contre-exemple.

Demander du code avec ses tests

Exemple
1Voici les tests (Vitest) que la fonction doit passer.2Écris estPalindrome pour qu'ils passent tous, sans modifier les tests.

Les tests deviennent la spécification ; l'assistant a un critère de réussite clair.

4Erreurs courantes

Tester avec le code sous les yeux

À éviter

// j'écris les tests d'après la proposition

À faire

// j'écris les tests d'après la consigne

Pourquoi : On reproduit les erreurs du code dans les tests.

Un hasard non rejouable

À éviter

Math.random()

À faire

graine(42)

Pourquoi : Un échec qu'on ne peut pas rejouer ne se corrige pas.

Renvoyer l'entrée modifiée

À éviter

return entree;  // déjà triée sur place

À faire

return copie;

Pourquoi : Le contre-exemple montré doit être l'entrée d'origine.

5Subtilités à connaître

  • ◆[10, 9, 1].sort() donne [1, 10, 9] : sans comparateur, JavaScript trie des textes.
  • ◆Une propriété peut servir d'oracle : comparer le résultat à une implémentation lente mais évidente.
  • ◆Les tests de propriétés complètent les exemples, ils ne les remplacent pas : un exemple documente, une propriété explore.

6Vérifie ta compréhension

Question 1/3

Score 0

D'où viennent les tests ?

Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.