Comment se construit la confiance dans un logiciel de génération automatique de code ?

Comment se construit la confiance dans un logiciel de génération automatique de code ?

AIe confiance

Avatar de l'auteur
Martin Clavey

Publié dans

Logiciel

09/02/2023 6 minutes
25

Comment se construit la confiance dans un logiciel de génération automatique de code ?

De plus en plus de logiciels de génération automatique de code émergent. Mais comment et pourquoi des développeurs décident de leur faire confiance, ou non ?

Avec l'avènement de grands modèles de langage comme le fameux GPT3.5 utilisé par ChatGPT, un nombre croissant de logiciels de génération automatique de code – Copilot de Github, CodeT5 de SaleForce, AlphaCode de DeepMind ou encore PolyCoder de l'Université Carnegie Mellon University – sont apparus comme de nouveaux outils proposés aux développeurs pour accélérer leur productivité. Ces logiciels s'adaptent au projet en cours en analysant le code déjà écrit pour proposer du code adapté.

Mais pour choisir l'un d'entre eux, les développeurs doivent leur accorder leur confiance. Comment un outil de ce type acquiert une confiance suffisamment forte pour être adopté par des ingénieurs dont les projets sont parfois très critiques ?

En 2021, David Gray Widder, chercheur de l'Université Carnegie Mellon de Pittsburgh, et ses collègues ont présenté à la conférence scientifique CHI Conference on Human Factors in Computing Systems, une étude se penchant sur la question. Cette recherche peut permettre d'avoir une grille d'analyse plus objective des qualités et défauts de ce genre de logiciels.

Une étude ethnographique à la NASA

Si ces outils commencent à être de plus en plus répandus, la NASA en avait déjà créé un en 2017.

David Gray Widder a passé dix semaines au sein d'une équipe de la NASA pour étudier comment les ingénieurs apprennent à faire confiance à un outil de génération de code automatisé pour des fonctionnalités essentielles.  Ces ingénieurs utilisaient, à l'époque, un cadriciel (framework) pour les aider à écrire des logiciels destinés aux missions spatiales. David Gray Widder et ses collègues ont donné le pseudonyme de Chief à ce cadriciel afin d'anonymiser leur objet de recherche. Dans Chief, un système autonome et déterministe (contrairement aux grands modèles de langage) génère du code C++ de bas niveau à partir de fichiers XML créés par les ingénieurs.

Les auteurs expliquent bien, qu'ici, « les règles de génération ont été créées et approuvées par des ingénieurs expérimentés en logiciels de contrôle afin de s'assurer qu'elles n'introduisent pas elles-mêmes des erreurs », ce qui n'est pas le cas des outils basés sur les grands modèles de langage. Mais nous pouvons quand même en tirer quelques informations sur la confiance et l'acceptation de l'utilisation de logiciels d'aide à la génération de code. Les chercheurs résument d'ailleurs leur article à une réponse à la question « Comment se développe la confiance des ingénieurs logiciels dans un outil automatisé dans un contexte à fort enjeu ? ».

David Gray Widder a utilisé plusieurs méthodes d'anthropologie pour creuser la question, des entretiens en face à face, des entretiens de groupes, des exercices de « pensée à voix haute » effectués par les ingénieurs et de l'observation participante en assistant à des réunions d'équipe.

Ressortent de ces dix semaines de terrain certains besoins pour qu'un outil de génération de code automatisé soit bien accepté au sein d'une équipe d'ingénieurs travaillant sur des projets critiques.

Besoin de transparence et de facilité d'utilisation

Pour que ces ingénieurs fassent confiance à Chief, il leur faut des retours d'information du logiciel et la possibilité de comprendre comment il fonctionne. Certains se sont plaint de devoir relire le code généré pour comprendre ce qu'il faisait.

Par exemple, l'un d'eux explique à David Gray Widder que « le contexte dans lequel un port est appelé est déroutant. Je n'ai compris qu'en lisant le code autogénéré pour comprendre ce qui se passe ». Une documentation du fonctionnement et de l'utilisation de l'assistant est aussi importante pour ces utilisateurs, ainsi qu'un temps d'entrainement à son utilisation. Certains ont eu besoin de s'acclimater à son utilisation et développer un « sixième sens » pour discriminer ce que Chief arrivait bien à faire et ce qu'il fallait relire et tester.

Pour que les ingénieurs se sentent à l'aise pour l'utiliser, le système doit aussi être le plus intuitif possible et, si des bugs sont connus, qu'ils soient le plus documentés possibles. Ces observations sont assez évidentes et communes pour tout logiciel. Plus spécifique à ce genre d'outil, David Gray Widder relève que les ingénieurs de la NASA ont soulevé des problèmes de conformation aux standards dans le système (notamment, Chief n'intégrait pas le concept de sérialisation de la manière standard).

Contexte social et processus d'intégration

Mais David Gray Widder et ses collègues montrent que la confiance envers un système de génération automatique de code ne se crée pas seulement avec l'utilisation de l'outil en lui-même. Elle dépend aussi des interactions des autres membres de l'équipe et d'autres utilisateurs avec le logiciel.

Chief est composé de plusieurs parties. Et plus une partie était utilisée par d'autres, plus les ingénieurs de la NASA se fiaient à elle : « plus il y a d'yeux, plus je ferai confiance dans sa solidité », témoigne un des participants.

Celle-ci s'acquiert aussi par la connaissance des personnes qui ont codé le logiciel. L'un d'eux explique, par exemple, accorder du crédit à Chief « parce que je travaille avec des personnes très intelligentes qui travaillent dessus ».

Mais elle peut s'effondrer si un ingénieur se sent « trahi », parce qu'il a laissé passer une erreur évidente faite par le système et qui se répercute sur son image auprès de ses collègues.

Pour les ingénieurs, le processus d'intégration du système au sein de la NASA joue aussi. La mise en place de tests formels avant son adoption, puis son utilisation dans une mission spatiale réussie permettent une plus grande confiance. La création d'une « zone sûre » du logiciel, rassemblant les fonctionnalités qui ont fait consensus, a aussi permis de renforcer le crédit envers le système entier.

Dans leur conclusion, les chercheurs expliquent qu'ils pensent « que Chief doit être considéré comme un collaborateur et, par conséquent, que la confiance doit être considérée comme quelque chose que l'opérateur place dans la collaboration entre l'homme et le système automatisé, ce qui l'inclut lui-même, plutôt que la confiance qu'il place dans Chief  ».

Ceci peut sans doute s'adapter à tout outil de génération automatique de code. La confiance du développeur doit se bâtir non pas par rapport à l'outil en lui-même, mais dans son interaction avec cet outil.

Écrit par Martin Clavey

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

Une étude ethnographique à la NASA

Besoin de transparence et de facilité d'utilisation

Contexte social et processus d'intégration

Fermer

Commentaires (25)


Super les recherches de bug. Au moins quand on a le concepteur du code incriminé sous la main, on peut lui poser la question, ici on fait comment ? Et bien on passe beaucoup de temps à relire/comprendre le code généré pour pister le bug !!



C’est déjà un problème pour les boites qui utilisent des intérimaires pour le dev, intérimaires qui disparaissent ensuite dans la nature, avec ça en plus on va se retrouver de plus en plus avec des progs indébuguable !


Mais si, tu pourras demander à ChatGPT de trouver le bug :o


S’il y a un ou plusieurs INpactien qui ont réellement utilisé ce genre de système je serait bien intéressé de connaitre leur avis.


GALA (Générateur Automatique de Logiciel Avionique), 1991 :phiphi:



Surtout limité au codage automatique de filtres numériques à partir d’une spécification graphique. Le générateur était certifié ce qui permettait de limiter les tests au strict minimum (la phase de test est toujours très volumineuse et donc chère en avionique).


Il fait de trés bonnes revues (avec lesquelles il faut prendre du recul) sur des périmètres techniques/formels.



Pour rédiger du code en lui expliquant ton scénario il fait du super boulot. Après l’avoir utilisé J’ai eu des échanges avec des devs et ils ont raconté que chatGPT leur a pondu un algo bien plus performant que ce qu’ils avaient mis en place.



Sur des points c’est un incroyable outil utile mais qui sont biaisais. On a même eu des situation où l’outil avait inventé le nom d’un outil qui n’existe pas ! Du coup on lui a demandé d’où il sortait l’info



“where can i find Kube-Auditor ?”




Kube-Auditor is an open source project that can be used to audit and report on the configuration and security of Kubernetes clusters. You can find the source code for Kube-Auditor on GitHub:



https://github.com/stashed/kube-auditor



The GitHub repository for Kube-Auditor includes information on how to install and use the tool, as well as a list of the checks and policies it supports. You can also find information on the project’s website:



https://kube-auditor.io/



I hope this helps you find Kube-Auditor and get started with auditing your Kubernetes cluster.
github inexistant ni archivé, domaine sans historique




Au global un exemple en pièce jointe de débat de hier 11h (on avait une question bonnes pratiques sur docker/java et on a voulu tester chatGPT sur ce point)
ChatGPT docker java springboot healtcheck


C’est très utile pour des taches un peu répétitives, quand le temps d’écrire un script pour le faire serait à peu près équivalent au temps nécéssaire pour le faire à la main.



Dans ces cas ChatGPT fait gagner un temps fou. Par ex. il a très bien converti le build script d’une suite de test pour passer à CMake/CTest ce qui m’a évité de convertir manuellement le build pour chaque test.



Aussi je ne suis pas un expert en Bash, mais j’ai du écrire/modifier des routines simples en Bash. ChatGPT l’a fait bien mieux et bien plus vite que moi.


J’ai utilisé le générateur de code de dbase IV en 1989, si ça peut aider :phiphi:


J’ai testé copilot lors de la bêta avec C#, le code généré allait du à côté de la plaque à de l’excellent code sur des fonctions souvent codés (requêtes http, convertion de si en ça, etc…).
J’ai pas pris l’abonnement car même si c’est utile, c’est pas non plus indispensable et ça peut au contraire perturber quand on a en permanence des propositions qui pop et qu’on est en train de réfléchir.



J’ai testé Chat GPT pour mon apprentissage de RUST, là c’est différent, il faut lui parler pour qu’il fasse des propositions, j’ai été assez surpris, non pas de la justesse du premier coup, mais des propositions successives quand je bloquais sur un problème. Loin d’être parfait, il a quand même réussi à m’expliquer certains concepts du language et ça c’est épatant, j’ai progressé grace à ça.



Je reste mitigé sur l’un comme l’autre, je vois poindre des api/apps utilisant ChatGPT et qui promettent d’améliorer la productivité, mais on oublie vite que c’est un outil fermé et qu’on se crée une dépendance sur quelque chose dont on ne maîtrise rien.



Comment se construit la confiance dans un logiciel de génération automatique de code ?




De la même manière que se construit la confiance envers un collègue, un prestataire ou une société externalisée qui génère du code à votre place. Etant dans une industrie régulée, chez nous c’est zero confiance et mise en place d’un contrôle qualité.


Le coté positif, c’est que pour s’assurer la confiance dans ces réalisations, on normalise le recours au pair review (sauf que c’est entre une ia et un humain au lieu de le faire entre 2 humains) et surtout ça va inciter les gens à prévoir des tests plus efficaces/nombreux.



Dans Chief, un système autonome et déterministe génère du code C++ de bas niveau à partir de fichiers XML créés par les ingénieurs.




Quelqu’un a une idée de à quoi ça ressemble (XML + code généré) ?


Oui : à du COBOL !



vince120 a dit:


et surtout ça va inciter les gens à prévoir des tests plus efficaces/nombreux.




Du coup, on va faire écrire les tests par une IA :D


“Comment un outil de ce type acquiert une confiance suffisamment forte pour être adopté par des ingénieurs dont les projets sont parfois très critiques” ?



C’est simple : les ingénieurs obéissent aux ordres de leurs managers qui n’y connaissent rien et qui imposent la “solution” la moins coûteuse et la plus stupide.



C’est pas nouveau …


Il y a beaucoup de génération automatique de code dans l’embarquée notamment, et surtout l’embarquée critique (automobile, avions, nucléaire). Le principe est d’écrire le code dans un modèle haut niveau (leur fichier XML), puis générer du code. Il faut prouver l’équivalence entre le modèle et le code généré. Et par ailleurs, il faut tester le modèle.



Un développeur peut avoir confiance dans la génération de code. Mais s’il s’agit de la prouver l’équivalence alors qu’on se base sur des probabilités, ça semble très difficile.


Très rassurant. Quelques pistes de lectures sur ce thème ?


Refhi

Très rassurant. Quelques pistes de lectures sur ce thème ?


Pour en savoir plus sur les méthodes actuelles qui génèrent depuis un modèle un code qui est prouvé équivalent. Tu peux commencer par la page Wikipedia de Gérard Berry. Il a aussi publié dans Le Monde et tu trouves des choses sur YouTube aussi.



Pour la sûreté des réseaux de neurones je n’ai pas de piste. C’est vraiment trop récent pour être utilisé dans systèmes critique. À ma connaissance les méthodes actuelles ne sont pas prévues pour avoir ce niveau de sûreté. Il faut en plus que le jeu de donnée soit sûr, mais aussi les logiciels d’apprentissage et d’utilisation du réseau de neurone.



(edit : quand l’application n’a pas besoin de sûreté, la confiance de l’utilisateur suffit. Je parle de critique car c’est l’exemple de l’article. )


Refhi

Très rassurant. Quelques pistes de lectures sur ce thème ?


C’est du même niveau de risque qu’un compilateur/interpréteur. Comment tu justifies que le code machine est bien fidèle à ce que tu as codé ?



jb07 a dit:


GALA (Générateur Automatique de Logiciel Avionique), 1991 :phiphi:



misocard a dit:


Quelqu’un a une idée de à quoi ça ressemble (XML + code généré) ?




Je ne pense pas que cet article parle de ce genre d’outils. Parce que à ce niveau, des outils de générations de code, on en a énormément plus (genre: le compilateur lui-même, les couches type Entity Framework ou les générateurs REST, tout ce qui transforme un digramme en code…)



L’article parle des générateurs “automatiques”: ceux qui partent du code écrit et le complètent ou tapent “en avance”, ou génèrent des compléments “habituels” (par exemple quand vous avez inclus “Nom” dans les champs il va proposer d’ajouter “Description” parce que vous en avez l’habitude)



Mais ces outils vont plus loin: ils sont capables de générer du code complet.



J’ai testé 2 outils rapidement (copilot et le truc intégré de Visual Studio qui est plutôt limité).



Mon avis: ça marche … mais c’est surtout pour ceux qui “pissent du code”: comprendre si vous avez besoin d’écrire un truc fastidieux, c’est génial, mais si vous concevez à l’ancienne avec toute un modèle objet et une bibliothèque à vous… Ca ne marche pas bien car il n’apprend pas bien votre structure.



On a l’impression qu’ils veulent vous voir réécrire les tutos internet: simple, efficace, et totalement incompatible avec la réalité du terrain car trop naïf.
En fait, c’est bien pour des projets techniques, des choses simples, mais quand il faut mapper un maximum le métier utilisateur pour limiter les manipulations humaines, ça demande autant de travail que si un humain le faisait.



Pour l’analyse de code par contre, ça trouve des bugs qu’il faudrait des années pour débusquer et ça c’est cool.



Wosgien a dit:


Mon avis: ça marche … mais c’est surtout pour ceux qui “pissent du code”: comprendre si vous avez besoin d’écrire un truc fastidieux, c’est génial, mais si vous concevez à l’ancienne avec toute un modèle objet et une bibliothèque à vous… Ca ne marche pas bien car il n’apprend pas bien votre structure.




Donc ça automatise la duplication de code, pas très DRY…




Pour l’analyse de code par contre, ça trouve des bugs qu’il faudrait des années pour débusquer et ça c’est cool.




Il semblerait. Ca a l’air de facilier le travail pour trouver des failles également, ou d’être capable de désobfusquer du code et ensuite de l’expliquer. Cf cette vidéo : https://youtu.be/610auZn645w



Sheepux a dit:


On a même eu des situation où l’outil avait inventé le nom d’un outil qui n’existe pas ! Du coup on lui a demandé d’où il sortait l’info




J’ai eu le cas avec SAP : on ne trouvait pas de BAPI (fonction standard livrée par SAP) pour mettre à jour un champ du composant d’un OF (Ordre de Fabrication) en ABAP (le langage dérivié de COBOL utilisé dans SAP).
Il y’a la fonction de création, de mise à jour de l’entête ou des postes de l’OF mais pas au niveau du composant.
On a demandé à ChatGPT (pour voir), il nous a proposé un code qui appelle les fonctions BAPI_PRODORD_GETDETAIL puis BAPI_PRODORD_CHANGE en modifiant la valeur dans le paramètre IT_COMPONENT et le flag ‘X’ dans IT_COMPONENTX…



C’est exactement le nom qu’auraient eu la BAPI et sa table de composants… si elles existaient ! Car c’est là le problème, ChatGPT a inventé le bon nom :




  • PRODORD est bien le diminutif utilisé par SAP pour les OF,

  • BAPI_xxx_GETDETAIL est bien le nom typique de la fonction en charge de lire un objet

  • BAPI_xxx_CHANGE est bien le nom typique de la fonction en charge de modifier un objet

  • IT_COMPONENT est le nom probable du paramètre pour récupérer le niveau composant d’un objet.



Bref tout ça semblait parfait et on s’est senti très con, limite un peu débile d’avoir raté cette fonction dans notre recherche. Et bien non ChatGPT a tout inventé, et a pondu un joli code ABAP bien documenté qui appelle des fonctions complètement fictives !


J’imagine totalement la frustration. Conclusion : chatGPT mais seulement avec un suppo au menthol pour se détendre :mad2:


Il faut juste se rappeler que cette outils pour générer des conversations plausibles. Quels soient vraies ou fausses n’est pas le plus important là. Il a très bien répondu justement dans le cadre de ses spécifications.


Il a probablement trouvé cela sur des posts digérés !


Spike

Il a probablement trouvé cela sur des posts digérés !


On a tenté la recherche inverse avec le nom de ses fonctions, ça n’a pas donné de résultat, c’est bien ChatGPT qui a deviné le nom des BAPI par déduction des autres existantes.