Réaliser une application Web, qui permet de demander à *ChatGPT* de créer une fonction avec des tests unitaires dans un langage de programmation donné.
## Dates limites
- point d'étape : **mardi 14 février** matin
- dépôt final : **dimanche 19 février** minuit
## Moyens
Langage de développement : au choix
Framework Web : au choix
Dépôt GIT : https://gitlab.univ-lorraine.fr
## Langages cibles
**Groupe 1** : Python / Prolog
**Groupe 2** : Java / Eiffel
**Groupe 3** : PHP / Haskell
## Description de la page WEB
Un exemple de formulaire Web est fourni dans le ficheir `codeur_gpt.html`
Le formulaire doit contenir les élements suivants :
- une zone de description de la fonction, par exemple :
- « Résoudre une équation du second degré. »
- « Trier une liste de mots »
- « Tester si un mot est un palindrome. »
- « Calculer le nombre d'occurences de chaque mot dans un texte. »
- une zone de saisie du nombre de tests unitaires
- un bouton pour lancer la création du programme
- un popup menu pour choisir le langage de programmation entre les deux définis pour le groupe
- une zone éditable d’affichage du programme
- une zone éditable avec la liste des tests
- un bouton pour relancer le passage des tests après modification du programme ou des tests
Votre logiciel de création de fonction devra pouvoir être testé sans accès à ChatGPT, ni Internet. Vous utiliserez donc un *mock* (https://en.wikipedia.org/wiki/Mock_object) avec des réponses prédéfinies pour simuler le comportement de l'accès à *ChatGPT*.
On mettra en place des scénarios de tests fonctionnels avec le framework *Selenium*.
La fonction créée devra passer et valider les tests générés par *ChatGPT*. Comme dans le programme *Mira* (voir ci-dessous), il peut être nécessaire de demander à *ChatGPT* de refaire le programme pour qu'il passe les tests. On limitera le nombre d'itérations à 10, et on mettra un message d'erreur si la fonction ne peut pas être validée.
## Itérations de développement
1. Un seul langage de programmation cible, pas de validations des tests, pas de modification du programme et des tests, pas d'itérations de *refactoring* auprès de ChatGPT.
2. Ajout de la validation des tests sans *refactoring*, vous mettrez un message pour indiquer si certains tests ne passent pas.
3. Ajout de la modification du programme et des tests par l'utilisateur.
4. Ajout des itérations de *refactoring* auprès de *ChatGPT*.
5. Ajout du second langage de programmation.
## Références
Ces sources devraient être utiles :
-*Mira*, un programme en Rust qui crée des programems Rust via GPT-3 : https://gitlab.com/corpsmoderne/mira