Voir le résumé
Les systèmes logiciels tendent a devenir de plus en plus complexes, ce qui engendre des coûts de maintenance élevés qui dépassent souvent les coûts de développement initiaux. L’ingénierie dirigée par les modèles (IDM) s’est imposée comme une approche incontournable pour simplifier le développement et accroître la productivité. Elle repose sur l’utilisation de métamodèles pour générer divers artefacts, y compris du code, que les développeurs améliorent ensuite avec du code additionnel pour développer les différents outils linguistiques nécessaires pour un langage logiciel, par exemple un éditeur, un vérificateur, un compilateur, des couches d’accès aux données, etc. Des infrastructures logicielles tels que Eclipse Modeling Framework (EMF) illustrent ce flux de travail, en générant des API Java qui sont ensuite enrichies a des fins de validation, de débogage et de simulation. L’un des principaux enjeux de l’EDM est l’évolution du métamodèle et son impact sur les artefacts connexes. Dans cette thèse, nous nous concentrons sur l’artefact du code et sa co-évolution avec le métamodèle en évolution. En outre, nous visons a vérifier l’exactitude comportementale de la co-évolution du métamodèle et du code. Enfin, avec l’émergence des LLM, nous explorons leur utilité pour le problème de co-évolution du métamodèle et du code. Cette thèse répond a ces problèmes en : 1) en proposant une nouvelle approche de co-évolution entièrement automatisée des métamodèles et du code. Cette approche associe les erreurs de compilation a des patrons d’utilisation des éléments du métamodèle afin de sélectionner des résolutions appropriées, puis 2) en proposant une approche automatique pour vérifier que la co-évolution du code entre différentes versions n’a pas impacte son comportement lorsque son métamodèle évolue. métamodèle évolue. Cette approche s’appuie sur l’isolation d’un sous-ensembles des tests impactes avant et après la co-évolution. du code. 3) La dernière contribution concerne l’exploration de la capacité des LLM a proposer des co-évolutions correctes du code lorsque le métamodèle évolue. Cette approche est basée sur l’ingénierie des prompts, ou nous concevons et générons des prompts en langage naturel pour faire coévoluer au mieux le code impacte par l’évolution du métamodèle. Les trois contributions ont été évaluées sur des projets EMF d’OCL, Modisco et Papyrus. L’évaluation montre que notre approche automatique de co-évolution du code résout 100% des erreurs, avec 82% de précision et 81% de rappel, réduisant de manière significative l’effort manuel. De plus, notre deuxième contribution pour la vérification de la correction comportementale peut tracer et isoler avec succès les tests impactes par les changements de métamodèle représentant 5% des tests. Ensuite, après l’exécution des tests traces, la fluctuation du nombre de tests réussis, échoués ou erronés indique si la co-évolution du code est correcte ou non. L’utilisation de cette approche nous a permis de gagner 88% sur le nombre de tests total et 84% sur le temps d’exécution. Enfin, lors de l’évaluation de la capacité de ChatGPT dans la co-évolution de code, nous avons varie la valeur de la température, et la structure des prompts données. Nous avons constate que des températures plus basses donnent de meilleurs résultats avec un taux de correction de correction de 88,7%. En ce qui concerne la structure de prompts, le fait d’inclure de l’information sur lien d’abstraction de l’erreur et la réclamer des réponses alternatives améliorent les coévolutions proposées.