Les chercheurs proposent un nouveau modèle de logiciel lisible et modulaire
Le codage avec de grands modèles de langage (LLM) est très prometteur, mais il expose également certains défauts de longue date des logiciels : un code compliqué, difficile à modifier en toute sécurité et souvent opaque sur ce qui se passe réellement sous le capot. Les chercheurs du Laboratoire d'informatique et d'intelligence artificielle (CSAIL) du MIT tracent une voie plus « modulaire ».
Leur nouvelle approche divise les systèmes en « concepts », éléments distincts d'un système, chacun conçu pour bien accomplir une tâche, et en « synchronisations », règles explicites qui décrivent exactement comment ces éléments s'emboîtent. Le résultat est un logiciel plus modulaire, plus transparent et plus facile à comprendre.
Un petit langage spécifique à un domaine (DSL) permet d'exprimer les synchronisations simplement, sous une forme que les LLM peuvent générer de manière fiable. Dans une étude de cas réelle, l’équipe a montré comment cette méthode peut rassembler des fonctionnalités qui autrement seraient dispersées sur plusieurs services. L'article est publié dans le Actes du Symposium international ACM SIGPLAN 2025 sur les nouvelles idées, les nouveaux paradigmes et les réflexions sur la programmation et les logiciels.
L'équipe, comprenant Daniel Jackson, professeur de génie électrique et d'informatique (EECS) au MIT et directeur associé du CSAIL, et Eagon Meng, titulaire d'un doctorat à l'EECS. étudiant, affilié au CSAIL et concepteur du nouveau DSL de synchronisation, explorent cette approche dans leur article « What You See Is What It Does : A Structural Pattern for Legible Software », qu'ils ont présenté à la Splash Conference à Singapour en octobre.
Le défi, expliquent-ils, est que dans la plupart des systèmes modernes, une seule fonctionnalité n’est jamais totalement autonome. L'ajout d'un bouton « Partager » à une plateforme sociale comme Instagram, par exemple, ne se limite pas à un seul service. Ses fonctionnalités sont réparties entre le code qui gère la publication, la notification, l'authentification des utilisateurs, etc. Tous ces éléments, bien qu’éparpillés dans le code, doivent être soigneusement alignés, et tout changement risque d’avoir des effets secondaires involontaires ailleurs.
Jackson appelle cela la « fragmentation des fonctionnalités » comme un obstacle majeur à la fiabilité des logiciels. « Dans la façon dont nous construisons les logiciels aujourd'hui, la fonctionnalité n'est pas localisée. Vous voulez comprendre comment fonctionne le « partage », mais vous devez le rechercher à trois ou quatre endroits différents, et lorsque vous le trouvez, les connexions sont enfouies dans du code de bas niveau », explique Jackson.
Les concepts et les synchronisations visent à résoudre ce problème. Un concept regroupe une fonctionnalité unique et cohérente, comme partager, aimer ou suivre, ainsi que son état et les actions qu'il peut entreprendre. Les synchronisations, quant à elles, décrivent à un niveau supérieur la manière dont ces concepts interagissent.
Plutôt que d'écrire du code d'intégration de bas niveau désordonné, les développeurs peuvent utiliser un petit langage spécifique à un domaine pour épeler directement ces connexions. Dans ce DSL, les règles sont simples et claires : l'action d'un concept peut en déclencher une autre, de sorte qu'un changement dans un élément d'état puisse être synchronisé avec un autre.
« Considérez les concepts comme des modules complètement propres et indépendants. Les synchronisations agissent alors comme des contrats : elles indiquent exactement comment les concepts sont censés interagir. C'est puissant car cela rend le système à la fois plus facile à comprendre pour les humains et plus facile à générer correctement pour des outils tels que les LLM », explique Jackson.
« Pourquoi ne pouvons-nous pas lire le code comme un livre ? Nous pensons que les logiciels doivent être lisibles et écrits en fonction de notre compréhension : notre espoir est que les concepts correspondent à des phénomènes familiers et que les synchronisations représentent notre intuition sur ce qui se passe lorsqu'ils se réunissent », explique Meng.
Les avantages vont au-delà de la clarté. Parce que les synchronisations sont explicites et déclaratives, elles peuvent être analysées, vérifiées et bien sûr générées par un LLM. Cela ouvre la porte à un développement logiciel plus sûr et plus automatisé, dans lequel les assistants IA peuvent proposer de nouvelles fonctionnalités sans introduire d’effets secondaires cachés.
Dans leur étude de cas, les chercheurs ont attribué des fonctionnalités telles que aimer, commenter et partager chacune à un seul concept, comme une architecture de microservices, mais plus modulaire. Sans ce modèle, ces fonctionnalités étaient réparties sur de nombreux services, ce qui les rendait difficiles à localiser et à tester. Grâce à l'approche concepts et synchronisations, chaque fonctionnalité est devenue centralisée et lisible, tandis que les synchronisations expliquaient exactement comment les concepts interagissaient.
L'étude a également montré comment les synchronisations peuvent prendre en compte des problèmes courants tels que la gestion des erreurs, le formatage des réponses ou le stockage persistant. Au lieu d'intégrer ces détails dans chaque service, la synchronisation peut les gérer une seule fois, garantissant ainsi la cohérence dans l'ensemble du système.
Des directions plus avancées sont également possibles. Les synchronisations pourraient coordonner les systèmes distribués, en gardant les répliques sur différents serveurs en phase, ou permettre aux bases de données partagées d'interagir proprement. L’affaiblissement de la sémantique de synchronisation pourrait permettre une cohérence éventuelle tout en préservant la clarté au niveau architectural.
Jackson voit le potentiel d'un changement culturel plus large dans le développement de logiciels. Une idée est la création de « catalogues de concepts », des bibliothèques partagées de concepts bien testés et spécifiques à un domaine. Le développement d’applications pourrait alors consister moins à assembler du code à partir de zéro qu’à sélectionner les bons concepts et à écrire les synchronisations entre eux.
« Les concepts pourraient devenir un nouveau type de langage de programmation de haut niveau, avec des synchronisations au fur et à mesure que les programmes sont écrits dans ce langage. C'est une manière de rendre visibles les connexions dans les logiciels », explique Jackson. « Aujourd'hui, nous cachons ces connexions dans le code. Mais si vous pouvez les voir explicitement, vous pouvez raisonner sur le logiciel à un niveau beaucoup plus élevé. Vous devez toujours faire face à la complexité inhérente des fonctionnalités qui interagissent. Mais maintenant, elles sont visibles, non dispersées et obscurcies. »
« Créer des logiciels à usage humain à partir d'abstractions provenant de machines informatiques sous-jacentes a surchargé le monde de logiciels trop souvent coûteux, frustrants, voire dangereux, à comprendre et à utiliser », déclare Kevin Sullivan, professeur agrégé à l'Université de Virginie, qui n'a pas participé à la recherche.
« Les impacts (par exemple sur les soins de santé) ont été dévastateurs. Meng et Jackson inversent le scénario et insistent sur la création de logiciels interactifs sur des abstractions de la compréhension humaine, qu'ils appellent des « concepts ». Ils combinent la logique mathématique expressive et le langage naturel pour spécifier de telles abstractions utiles, fournissant une base pour vérifier leurs significations, les composer en systèmes et les affiner en programmes adaptés à l'usage humain. Il s'agit d'une direction nouvelle et importante dans la théorie et la pratique de la conception de logiciels qui mérite d'être surveillée. »
« Il est clair depuis de nombreuses années que nous avons besoin de meilleurs moyens de décrire et de spécifier ce que nous voulons que les logiciels fassent », ajoute Thomas Ball, professeur honoraire de l'Université de Lancaster et professeur affilié à l'Université de Washington, qui n'a pas non plus participé à la recherche. « La capacité des LLM à générer du code n'a fait qu'alimenter le feu des spécifications. Le travail de Meng et Jackson sur la conception conceptuelle fournit un moyen prometteur de décrire ce que nous attendons du logiciel de manière modulaire. Leurs concepts et spécifications sont bien adaptés pour être associés aux LLM afin d'atteindre l'intention du concepteur. «
Pour l’avenir, les chercheurs espèrent que leurs travaux pourront influencer la façon dont l’industrie et le monde universitaire envisagent l’architecture logicielle à l’ère de l’IA. « Si l'on veut que les logiciels deviennent plus fiables, nous avons besoin de moyens de les écrire qui rendent leurs intentions transparentes », explique Jackson. « Les concepts et les synchronisations constituent un pas vers cet objectif. »
