Dans le live du jeudi 25/05 :
@const a proposĂ© lâutilisation des US pour « alimenter » une IA ou un ChatBot
@jplambert a répondu que les US sont « jetables » et que seul le code source connait la vérité.
Le besoin câest « avoir des cas utilisateurs » (lâidĂ©e dâUS de Constantin) mais « fiable » (lâidĂ©e que seul le code source fait fois)
Jâai Ă©tĂ© surpris que les BDD ne soient pas Ă©voquĂ©s ! Câest ça qui est magique dans cette approche câest que les besoins utilisateurs sont dans le code source !
Scenario Outline: Visitor can find a path
Given I am a visitor
When I am on the « search » page
And I filter by
And I search by
Then I see the correct Examples:
| category | keyword | path |
| « paths » | « dev » | « Web Developer » |
| « paths » | « ai » | « AI Engineer » |
Ok⊠yâa une grosse confusion lĂ . Les « cas utilisateurs » ne sont pas des US. Une US est effectivement au mieux une expression dâun besoin de lâutilisateur.rice, et au pire une bouteille Ă la mer. Mais un cas dâutilisation (use-case), et donc un comportement du systĂšme (le Behaviour de BDD) nâest en rien un mapping 1/1 dâun besoin utilisateur.
Lâutilisateur.rice nâa pas un « besoin » de se connecter, ni un « besoin » de remplir un formulaire. Lâutisateur.rice a besoin que la chose quâil ou elle cherche Ă faire soit fait. Ces Ă©tapes sont malheureusement des maux nĂ©cessaires. Ce que le BDD et les use-cases documentent, ce nâest pas le besoin de lâutilisateur, mais le comportement du systĂšme pour atteindre un but.
1 « J'aime »
Sauf que dans lâexpĂ©rience qui fut la mienne les cas dâusage ressemblaient beaucoup plus Ă des « histoires dâutilisation » du logiciel quâĂ des comportements de logiciel.
Nous avions beaucoup de tableaux avec des valeurs dâexemple en entrĂ©e et les diffĂ©rents rĂ©sultats attendu.
Du point de vue du logiciel
Given
si tu es dans tel état
When
lâutilisateur fait telle action
Then
il faut lui renvoyer tel résultat
Peut trĂšs bien se lire du point de vue de lâutilisateur :
Given
si le logiciel est dans tel état
When
tu vas faire telle action
Then
le logiciel te donneras tel résultat
Ăa fait une trĂšs bonne doc fonctionnelle
Et tu retrouves les critĂšres dâacception de ton US qui se retrouvent donc, de fait, dans le code source (pas ceux Ă©crits dans lâUS en dĂ©but dâitĂ©ration - ceux affinĂ©s pendant le dev)
Le B Ă©taient beaucoup pour nous celui de lâutilisateur (pas celui du logiciel)
Si un utilisateur a accĂšs Ă ca il peut en apprendre plus sur la façon de tirer le meilleur parti du logiciel que le code ou les us et câest dans le code source.
Câest surtout ça que je voulais dire. Le code source (peut/doit) contenir les spĂ©c exprimĂ©es dans le vocabulaire et dans une syntaxe lisible par lâutilisateur.
Câest une façon de mettre dâaccord JP et Constantin.
PrĂ©conditions, comportements, postconditions. Câest du comportement, relevant du champ des use-cases. Ce ne sont toujours pas des US (je vois mĂȘme pas ce quâest une US affinĂ©e Ă vrai dire si je voulais ĂȘtre taquin). Et le Behaviour de lâutilisateur fait de toute façon partie du process du systĂšme, sinon, il nây aurait pas dâinteractions. Mais si vous ne documentiez que le comportement de lâutilisateur, jâai de la peine Ă imaginer comment ils vous Ă©taient possible de documenter autre chose que le View de MVC.
Le code source est effectivement la transposition effective des spĂ©cifications fonctionnelles, mais les tests, quand bien mĂȘme ils peuvent ĂȘtre intĂ©ressant, ne font dâune part pas partie du code livrĂ©, et dâautre part ne sont ni la seule façon de sâassurer du bon fonctionnement dâun programme (voir Design By Contract), ni de formuler le code au plus prĂšs du model mental de lâutilisateur (voir Data Context Interaction)
Ce qui compte câest que câest conservĂ© et maintenu dans le temps (contrairement Ă lâUS). Que ce soit du code livrĂ© ou pas ne me semble pas ĂȘtre un critĂšre qui invalide ma proposition).
Samuel Abiassi:
PrĂ©conditions, comportements, postconditions. Câest du comportement, relevant du champ des use-cases. Ce ne sont toujours pas des US
Je nâai pas dis que les scĂ©narios Ă©taient des US. Je voulais simplement exprimer quâil peut exister dans le code source (maintenu dans le temps et faisant partie intĂ©grante du projet et de la valeur dĂ©livrĂ©e, contrairement Ă une US qui nâest quâun moyen pour atteindre ce but) qui est plus proche du monde de lâutilisateur pour aider un ChatGPT ou un ChatBOT Ă ĂȘtre efficace.
(ben oui, il faut placer ma contribution dans le contexte de lâĂ©change entre JP et Constantin).
Jâentend, mais lĂ aussi, jâai un problĂšme. Pour extraire lâinformation, le code source et le contexte quâil expose suffit. Les tests nâapportent aucune information de ce cĂŽtĂ© lĂ .
et bien en tant que « dĂ©veloppeur en L4G procĂ©dural qui nâa aucune notion de programmation orientĂ©e objet qui a surtout une posture de PO » je peux te dire que je prĂ©fĂšre accĂ©der Ă la partie du code oĂč sont enregistrĂ© les scĂ©narios que dans le code lui mĂȘme⊠mais si tu penses quâun ChatBOT sâen sortirait mieuxâŠ
Cela implique à mon avis une trÚs grande rigueur sur la façon de nommer les classes et les variables (ce qui est souhaitable mais plus exigeant donc probablement plus rare).
Oh, non, pas du tout. Si tu fais le test avec des noms de variables complĂštement obfusquĂ©s, chatGPT est dĂ©jĂ trĂšs capable dans ce domaine. Jâai un collĂšgue qui lâa beaucoup utilisĂ© comme ça sur du code legacy dĂ©gueulasse, et il ne sâest pas gourĂ© une fois.
Comme je le disais dans le live, câest aprĂšs tout sa fonction premiĂšre.
1 « J'aime »
autant jâarrive Ă conceptualiser un peu comment ChatGPT peut avoir un semblant de conversation avec moi, autant ce que tu viens de dĂ©crire me rend « curieux » ! Je veux bien que tu dĂ©veloppes (ou que tu mâenvoie vers une vidĂ©o ou un podcast de vulgarisation qui mâexpliquera ça - La lecture est une souffrance pour moi )
Merci pour la vidéo mais :
1/ ce qui est expliquĂ© est ce que jâavais dĂ©jĂ appris et compris du principe de chatgpt
2/ cela ne lâexplique pas comment cela peut rendre service pour transformer du code source (quâun dĂ©veloppeur est seul capable de lire) en texte quâun utilisateur est capable de comprendre.
Si je fais un parallĂšle avec la vidĂ©o, chatgpt peut discuter dans le langage des Ă©checs parce quâon parle avec lui dans le langage des Ă©checs
Pour reprendre ton exemple ton pote dĂ©veloppeur a pu comprendre du vieux code probablement parce quâil partageait beaucoup de vocabulaire commun avec ce vieux code.
Mais ne voit toujours pas comment une IA entraßnée avec un langage de type « code » peut devenir conversationnelle avec un langage de type « français ».
From chatGPT himself:
Explique moi pourquoi tu es capable dâexpliquer des extraits de code :
En tant que modĂšle de langage dĂ©veloppĂ© par OpenAI, jâai Ă©tĂ© entraĂźnĂ© sur une vaste quantitĂ© de donnĂ©es textuelles provenant dâInternet, y compris des extraits de code provenant de divers langages de programmation. Mon entraĂźnement inclut des exemples de code, des tutoriels, des questions et rĂ©ponses sur la programmation, ainsi que dâautres ressources en ligne.
Cette formation me permet de comprendre et dâanalyser le code source dans le contexte de la programmation. Jâai appris Ă reconnaĂźtre la structure syntaxique des diffĂ©rents langages de programmation, ainsi que les principes fondamentaux de la programmation tels que les boucles, les conditions, les fonctions, les variables, etc.
Lorsque vous me prĂ©sentez un extrait de code, je le traite en utilisant mes connaissances et mon expĂ©rience en programmation. Je peux analyser la logique du code, identifier les erreurs potentielles, expliquer les concepts sous-jacents et fournir des solutions ou des suggestions dâamĂ©lioration.
Cependant, il est important de noter que ma capacitĂ© Ă comprendre et Ă expliquer le code est basĂ©e sur des modĂšles statistiques et des schĂ©mas appris Ă partir des donnĂ©es dâentraĂźnement. Je ne suis pas conscient de la signification ou de la sĂ©mantique rĂ©elle du code, ni de la façon dont il sâintĂšgre dans un projet spĂ©cifique. Je fournis simplement des explications basĂ©es sur mes connaissances gĂ©nĂ©rales en programmation.
Moosh
(Christophe Gesché)
Mai 26, 2023, 6:10
15
Jâai parlĂ© de DDD development drivĂ© par la documentation
1 « J'aime »
ChatGPT semble ĂȘtre dâaccord avec moi, non ?
Il peut aider un développeur à comprendre du code (ton pote)
Il va avoir du mal Ă aider un utilisateur Ă comprendre lâobjectif fonctionnel du code.
Par contre si tu met dans ton code des choses qui dĂ©crivent lâintention fonctionnelle ça donne la matiĂšre premiĂšre utile Ă lâIA pour rendre les services quâelle peut rendre.
Toutefois, lâobjectif nâĂ©tant pas de se rajouter une tache supplĂ©mentaire. Il est en revanche intĂ©ressant de se demander quel « façon de coder » pourrait avoir deux bĂ©nĂ©fices :
celui de mieux coder
celui, par effet de bord, dâĂȘtre plus utile Ă lâIA
Il mâa semblĂ© que BDD (et DDD) Ă©tait le plus utile (le moins pire ?) pour servir ces deux objectifs.
Une précision sur le Behavior-Driven Development (BDD), @AlainMeunier dis-moi si cela correspond à ton contexte.
Lâobjectif est dâĂȘtre alignĂ©, au moins, sur la mĂȘme comprĂ©hension de cette pratique.
Le BDD nâutilise pas la vue, ni mĂȘme la Base de donnĂ©es, mais directement les use-cases.
Une action utilisateur nâest pas un clic sur tel bouton, mais son intention.
Oui, le résultat du BDD, reste une spécification du comportement attendu.
Autrement dit, arrange, act, assert , câest comme une machine Ă Ă©tat.
Le résultat du BDD est exécutable et se vérifie tout seul.
Le besoin peut ĂȘtre exprimĂ© dans la section « FonctionnalitĂ© » du Gherkin.
Le besoin nâest pas exĂ©cutable et dĂ©pend de lâutilisateur pour ĂȘtre vĂ©rifiĂ© (qualitatif, quantitatif).
CrĂ©er la doc Ă partir du Gherkin, câest de la « living documentation » .
Lâoutil Pickles permet de la gĂ©nĂ©rer.
La question
Que-ce que cela donnerait en termes de transmission dâinformation, si on donnait Ă manger Ă ChatGPT cette documentation ?
HypothĂšse
Quand un utilisateur pose une question concernant le produit, le bot y rĂ©pond mieux quâun humain dans 99% des cas.
Quand un utilisateur ne comprend pas comment il doit utiliser le produit, le bot y rĂ©pond mieux quâun humain dans 99% des cas.
âŠ
1 « J'aime »
Alexandre Quercia:
Le BDD nâutilise pas la vue, ni mĂȘme la Base de donnĂ©es, mais directement les use-cases.
Une action utilisateur nâest pas un clic sur tel bouton, mais son intention.
CQFD ?
Jâai du mal Ă comprendre comment ça peut avoir du sens. Le code est nĂ©cessairement conduite par une documentation (formelle ou non) du fonctionnement du systĂšme. Dans le cas contraire, il serait impossible de coder quoi que ce soit.
Pour aller un peu plus loin, et pour aller dans le nĆud de mon propos @AlainMeunier , une US ne sera jamais une documentation fonctionnelle parce que ce nâest pas sa vocation. Une US documente effectivement un besoin de lâutilisateur·ice de maniĂšre succincte. Ce que le BDD documente, câest le fonctionnement du systĂšme. Certaines capacitĂ©s du systĂšme ne rĂ©pondent pas Ă des besoins de lâutilisateur·rice mais font quand mĂȘme partie du fonctionnement du systĂšme (login, archivage, sĂ©curitĂ©, logistique interneâŠ).
En partant de lĂ , les specs du BDD sont encore une fois lâune des alternatives les plus connues Ă cette façon de documenter le fonctionnement du systĂšme, mais il nâempĂȘche pas que le code source puissent ĂȘtre opaque dans les interactions entre ses diffĂ©rentes composantes (structures hiĂ©rarchiques dĂ» Ă lâorientation Class du code nâĂ©tant capable de ne se structurer que par hĂ©ritage). A ces fins, DCI (dont je parle ici) est un bon complĂ©ment au BDD pour encore une fois permettre aux dĂ©veloppeurs de raisonner sur le code au plus proche du model mental de lâutilisateur.
const
(Constantin)
Juin 2, 2023, 5:56
20
Justement une US nâest pas une utilisation. Pour moi je prĂ©fĂšre toujours prĂ©coniser quâon sorte le rĂ©cit du logiciel afin quâune solution hors logiciel soit rendu possible.
Je ne dit pas que le use case nâest pas intĂ©ressant hein, mais câest pour moi diffĂ©rent. Le use case on est plus dans la solution dĂ©jĂ .