Continuous Delivery VS Scrum : est-ce compatible ? : "faire la doc à partir des US😹" -> BDD 😉

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 :wink:

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).

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 :wink: )

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.

J’ai parlĂ© de DDD development drivĂ© par la documentation :wink:

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 »

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.

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Ă .