# ChatGPT peut-il écrire du code fiable?

Date: 2022-12-04 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/chatgpt-code-fiable/

**Answer:** ChatGPT peut écrire du code qui fonctionne pour beaucoup de petites tâches bien décrites, mais vous ne pouvez pas vous y fier à première vue, parce qu’il prédit du code d’apparence plausible sans l’exécuter. Traitez chaque extrait comme le brouillon d’un collègue junior rapide : lisez-le, testez-le, et seulement ensuite, utilisez-le.

Dès ses premiers jours en ligne, ChatGPT est devenu un jouet favori des programmeurs. The Guardian rapporte que des gens s’en servent pour résoudre en quelques secondes des énigmes de programmation dans des langages obscurs. The Verge a recueilli des publications de testeurs qui jugeaient parfaites ses réponses à des questions de programmation, à côté de celle d’une personne qui qualifiait l’une de ces mêmes réponses de bonne à jeter. Les deux réactions peuvent être vraies en même temps, et comprendre pourquoi est la clé pour bien l’utiliser.

ChatGPT est un modèle de langage : un programme entraîné à prédire le prochain morceau de texte. Quand vous lui demandez une fonction, il écrit le genre de code qui suit habituellement une demande comme la vôtre. Il ne compile pas ce code, ne l’exécute pas et ne vérifie pas le résultat avant de vous le montrer. Le code peut donc avoir l’air propre, s’accompagner d’une explication assurée, et être faux quand même.

## Pourquoi du code qui a l’air bon peut être faux

OpenAI est franche à ce sujet. Son billet de lancement indique que le modèle produit parfois des réponses qui semblent plausibles, mais qui sont incorrectes, et qu’il devine habituellement ce que vous vouliez dire quand une demande est ambiguë, au lieu de poser la question. En programmation, ces deux habitudes se manifestent ainsi :

- **Des cas limites oubliés.** La fonction marche pour l’entrée évidente et plante avec une liste vide, un nombre négatif ou une ligne blanche.
- **Des suppositions silencieuses.** Vous pensiez en pouces et il a supposé des centimètres; vous vouliez garder les doublons et il les a retirés.
- **Des détails inventés.** Un nom de fonction ou d’option qui semble réel, mais qui n’existe pas dans la bibliothèque que vous utilisez.

La bonne nouvelle, c’est que le code, contrairement à une dissertation, peut être vérifié mécaniquement. Un test réussit ou échoue. Cela fait de la programmation l’un des terrains les plus sûrs pour utiliser ChatGPT, à condition d’exécuter vraiment les tests.

Les propres exemples de lancement d’OpenAI vont dans le même sens. Dans l’un d’eux, un utilisateur colle du code en disant qu’il ne fonctionne pas, et ChatGPT demande d’abord ce que le code est censé faire avant de suggérer un problème probable. Une bonne conversation sur du code est un échange, pas une demande unique.

## Un exemple concret : demande, tests, correctif

Voici une petite tâche en Python. Les réponses décrites ci-dessous sont illustratives : elles montrent le genre de réponse que vous risquez d’obtenir, pas une transcription.

**Étape 1 : demander la fonction, en précisant les règles.**

```prompt
Écris une fonction Python median(numbers) qui renvoie la médiane d’une liste de nombres.
Règles :
- Ne modifie pas la liste passée en argument.
- Pour un nombre pair d’éléments, renvoie la moyenne des deux valeurs du milieu.
- Pour une liste vide, lève une ValueError avec un message clair.
Ajoute une courte docstring.
```

Supposons que la première version trie la liste sur place avec `numbers.sort()`. Elle renvoie la bonne médiane, mais elle réordonne discrètement la liste de l’appelant, ce qui enfreint votre première règle. Rien dans l’explication ne vous en avertirait.

**Étape 2 : demander les tests, séparément.**

```prompt
Maintenant, écris des tests pytest pour median(). Couvre : une liste de longueur impaire, une liste de longueur paire, un seul élément, des nombres négatifs, une liste vide (ValueError attendue) et une vérification que la liste d’origine est inchangée après l’appel.
```

**Étape 3 : les exécuter.** Enregistrez la fonction dans `stats.py` et les tests dans `test_stats.py`, installez pytest au besoin (`pip install pytest`) et lancez `pytest` dans ce dossier. Dans notre cas illustratif, cinq tests réussissent et le test « la liste est inchangée » échoue.

**Étape 4 : renvoyer l’échec.**

```prompt
Le test test_does_not_modify_input échoue : la liste est réordonnée après l’appel à median(). Corrige la fonction sans modifier les tests.
```

Le correctif habituel consiste à travailler sur une copie triée, `values = sorted(numbers)`, au lieu de trier sur place. Relancez les tests. Quand les six réussissent, vous avez quelque chose de fiable pour les cas auxquels vous avez pensé.

| Étape | Ce que vous faites | Ce que ça attrape |
|---|---|---|
| Demande claire | Énumérer les règles et les cas limites | Les suppositions vagues |
| Tests séparés | Demander des tests qui correspondent à vos règles | Les comportements manquants |
| Les exécuter vous-même | Faire tourner le code sur votre machine | Les bogues que l’explication cachait |
| Renvoyer l’échec | Citer l’erreur exacte | Les « correctifs » qui partent dans tous les sens |

> **À essayer :** choisissez une fonction que vous avez déjà écrite et que vous comprenez. Demandez à ChatGPT d’écrire sa propre version, puis de fournir des tests, et exécutez ses tests sur les deux versions. Notez les points où elles divergent.

## Comment tester le code qu’il vous donne?

Commencez par écrire, en mots simples, ce que le code doit faire et ce qu’il ne doit jamais faire. Ces phrases deviennent vos cas de test. Demandez à ChatGPT de les transformer en tests, mais lisez chaque test avant de l’exécuter : un test dont la réponse attendue est fausse approuvera volontiers une fonction fausse. Si vous le pouvez, écrivez d’abord vous-même un ou deux tests, pour les cas qui vous importent le plus.

Exécutez ensuite le tout sur votre propre machine ou dans un environnement isolé sûr, jamais sur des données réelles. Pour un script qui supprime, déplace ou envoie quoi que ce soit, faites d’abord l’essai sur des copies. Méfiez-vous des noms de bibliothèques que vous n’avez jamais vus; vérifiez-les dans la documentation officielle avant d’installer quoi que ce soit qu’un robot conversationnel vous suggère.

Enfin, gardez la conversation ciblée. Collez le message d’erreur exact ou le test qui échoue, et demandez la plus petite modification qui règle le problème. Si les réponses commencent à tourner en rond, ouvrez une nouvelle conversation avec le code actuel et votre liste de tests. Beaucoup s’attendent à ce que des outils comme celui-ci deviennent une partie normale de la programmation, et l’habitude qui comptera le plus est la plus vieille du métier : ne livrez pas ce que vous n’avez pas testé.

## Sources

- ChatGPT: Optimizing Language Models for Dialogue: https://openai.com/blog/chatgpt/
- OpenAI’s new chatbot can explain code and write sitcom scripts but is still easily tricked: https://www.theverge.com/23488017/openai-chatbot-chatgpt-ai-examples-web-demo
- AI bot ChatGPT stuns academics with essay-writing skills and usability: https://www.theguardian.com/technology/2022/dec/04/ai-bot-chatgpt-stuns-academics-with-essay-writing-skills-and-usability
