<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>legacy &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/legacy/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Tue, 21 Apr 2026 10:14:24 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>legacy &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Legacy &#038; IA : Voyagez dans le Temps depuis votre Terminal</title>
		<link>https://www.smalsresearch.be/legacy-ai-voyagez-temps-terminal/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 09:48:59 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/?p=28963</guid>

					<description><![CDATA[Depuis l'essor de l'engouement pour les grands modèles de langage, la plupart des développeurs ont sans doute déjà pu constater le gain de productivité que ces outils peuvent offrir, à condition de les utiliser correctement. Dans cet article de blog, nous explorons la possibilité d'aller plus loin : l'IA offre-t-elle une aide suffisante afin de maîtriser le legacy code ?]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-large is-resized"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj.png"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-1024x1024.png" alt="" class="wp-image-27693" style="width:274px;height:auto"/></a></figure>



<p class="justify-text no-top-margin"><em>Dit artikel is ook beschikbaar in het <a href="https://www.smalsresearch.be/legacy-ai-tijdreizen-in-je-terminal/" data-type="post" data-id="27622">Nederlands</a>.</em></p>



<p class="justify-text" style="padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">Depuis l&#8217;essor de l&#8217;engouement pour les grands modèles de langage, la plupart des développeurs ont sans doute déjà pu constater le gain de productivité que ces outils peuvent offrir, à condition de les utiliser correctement. Dans cet article de blogue, nous explorons la possibilité d&#8217;aller plus loin&nbsp;: l&#8217;IA offre-t-elle une aide suffisante afin de maîtriser le <em>legacy code</em>&nbsp;?</p>



<span id="more-28963"></span>



<p class="justify-text">Le recours aux grands modèles de langage <a href="https://www.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/">(Large Language Model &#8211; LLM)</a> en programmation est en effet bien connu à présent&nbsp;: cela va de la formulation de questions à un <em>chatbot</em> (&#8220;comment écrire un algorithme en Java qui&#8230;&#8221;), à un <a href="https://www.smalsresearch.be/llms-pour-code/"><em>code completion</em> de plus en plus intelligent et étendu</a> (saisie automatique de ce que vous souhaitez taper dans l&#8217;éditeur), jusqu&#8217;au <a href="https://www.smalsresearch.be/vibe-coding-avec-les-ides-agentique/"><em>vibe coding</em> complet </a>(dans l&#8217;IDE, ou même simplement dans un terminal)&nbsp;: des agents d&#8217;IA rédigent, à l&#8217;aide de <em>prompts</em>, des pans entiers de code sur votre machine &#8211; oui, même des applications fonctionnelles.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:30%">
<p class="justify-text">Cette méthode de travail a déjà été décrite <a href="https://www.smalsresearch.be/vibe-coding-avec-les-ides-agentique/">dans un article de blog précédent</a>, et les mises en garde et les points auxquels il faut prêter attention, restent d&#8217;actualité&nbsp;: surveiller en permanence, remettre les choses en question, vérifier, et fournir à l&#8217;IA la bonne quantité de contexte utile (un art en soi). Cependant, le traitement du <strong>code <em>legacy</em></strong> pose encore un certain nombre de problèmes supplémentaires&nbsp;:</p>



<ul class="wp-block-list">
<li class="justify-text">Il ne s&#8217;agit pas d&#8217;une nouvelle construction (ou <em>greenfield</em>)&nbsp;: les décisions du passé, souvent obscures, ont un impact considérable.</li>



<li class="justify-text">Dans de nombreux cas, il existe déjà une masse de code.</li>



<li class="justify-text">Souvent, la compilation, l’exécution et le test du code nécessitent une technologie spécifique, qui est elle-même obsolète et parfois difficile à installer ou à simuler.</li>



<li class="justify-text">En tant qu’humain, on n’est souvent plus au courant du comment et du pourquoi de la base de code existante, ce qui rend plus difficile l’évaluation critique des résultats de l’IA.</li>
</ul>
</div>



<div class="wp-block-column is-style-section-1 has-accent-5-background-color has-background is-layout-flow wp-container-core-column-is-layout-43dc041e wp-block-column-is-layout-flow is-style-section-1--1" style="border-width:2px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;flex-basis:70%">
<h3 class="wp-block-heading is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-right:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);margin-left:var(--wp--preset--spacing--20)"><span style="text-decoration: underline;"><em>Vibe coding</em>&nbsp;: quelques conseils</span></h3>



<p class="justify-text has-small-font-size" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)"><em>Nous avons déjà découvert ces astuces simples dans le cadre de notre travail sur le code </em>legacy<em> et l&#8217;IA, mais elles s&#8217;appliquent plus largement à tous les projets de </em>Vibe Coding<em>.</em></p>



<ul class="wp-block-list">
<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Nettoyage en profondeur&nbsp;: avant de laisser une IA se pencher sur une base de code, vous devez vous assurer qu&#8217;elle ne contient aucune donnée privée, aucun mot de passe ni aucune autre information sensible&nbsp;!</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Planification&nbsp;: demandez des options et reportez l&#8217;exécution. En effet, lorsqu&#8217;on maîtrise soi-même ce que l&#8217;on souhaite réaliser, on a certainement déjà une idée précise de l&#8217;objectif à atteindre. Il peut toutefois s&#8217;avérer utile de commencer une conversation avec l&#8217;IA en gardant l&#8217;esprit ouvert et de lui demander des idées et des options (par exemple en matière d&#8217;architecture ou de technologie utilisée) pour concrétiser sa vision générale (tout en précisant à l&#8217;IA, parfois trop zélée, qu&#8217;il ne s&#8217;agit encore que de planification). Demandez spécifiquement plusieurs suggestions&nbsp;! Cela peut aider à réfléchir ensemble et à enrichir vos propres idées avec davantage d’inspiration. Au fil de la conversation, explorez plus en profondeur les options qui vous plaisent le plus, puis n’ajoutez votre expertise personnelle que pour affiner les idées de l’IA, jusqu’à ce qu’un plan d’action concret et aussi optimal que possible ait vu le jour. Ce n’est qu’ensuite que nous passerons à une mise en œuvre effective..</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Indirection et outils. En particulier lorsque vous travaillez via une CLI (Command Line Interface), ni vous ni l’IA n’avez immédiatement conscience de tous les outils existants qui pourraient être exploités pour atteindre vos objectifs. Laissez l’IA rechercher les outils susceptibles de vous aider, et aidez-la à les installer. Plus vous pouvez accomplir de tâches à l&#8217;aide d&#8217;outils, moins le contexte est encombré par un travail &#8220;manuel&#8221; inutile effectué par l&#8217;IA elle-même (sans parler des économies réalisées en termes de consommation de <em>tokens</em>). Il existe par exemple toutes sortes d&#8217;outils d&#8217;analyse statique de code permettant d&#8217;évaluer et de maintenir la qualité des lignes de code que vous écrivez. L&#8217;IA n&#8217;a souvent aucun mal à mettre en œuvre bon nombre des suggestions fournies après l&#8217;analyse.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Mode Expert&nbsp;: parfois, les outils standard ne suffisent pas pour aider suffisamment l&#8217;IA à accomplir ce que vous souhaitez qu&#8217;elle fasse. Dans ce cas, vous pouvez d&#8217;abord laisser l&#8217;IA écrire ses propres outils. De cette manière, il est possible de s&#8217;assurer que le résultat, ou l&#8217;<em>output</em> de l&#8217;outil, soit concis et synthétique pour les tâches suivantes, afin de ne pas surcharger le contexte. Les <em>context windows</em> des LLM s&#8217;agrandissent certes de plus en plus, mais il faut tout de même veiller à ce qu&#8217;elles ne contiennent que les éléments les plus utiles (attention au <a href="https://redis.io/blog/context-rot/"><em>context rot</em></a>).</li>
</ul>
</div>
</div>



<p>Nous avons donné une définition très large du code <em>legacy</em> dans un <a href="https://www.smalsresearch.be/code-herite-meilleures-pratiques-ia/">précédent article de blog</a>. Commençons donc par préciser ce que nous entendons par &#8220;<em>legacy</em>&#8221; et par mieux illustrer le &#8220;degré de difficulté&#8221; des projets legacy.</p>



<h2 class="wp-block-heading">&#8220;Ancien&#8221; code&nbsp;: une multitude de possibilités</h2>



<p class="justify-text">Il n’existe pas vraiment de définition officielle du code <em>legacy</em>&nbsp;; généralement, on parle de l’utilisation d’une technologie qui n’est plus prise en charge, difficile à maintenir, ou simplement de &#8220;code dont on hérite de quelqu’un d’autre&#8221;. Il s’agit évidemment toujours de code encore en service, et donc important. Ironiquement, les applications les plus critiques sont souvent celles qui existent depuis des années et auxquelles on &#8220;fait confiance&#8221; depuis longtemps, mais sans les entretenir correctement.</p>



<p class="justify-text">L&#8217;IA peut nous aider à entretenir n&#8217;importe quel code ; nous allons donc présenter un spectre allant du code <em>legacy</em> le plus ancien et le plus problématique au code de projets ne nécessitant qu&#8217;une petite mise à jour. À une extrémité du spectre, on trouve des programmes écrits dans des langages de programmation obsolètes, selon une architecture dépassée, utilisant des bases de données qui ne sont plus d’actualité et fonctionnant sur des serveurs équipés de systèmes d’exploitation qui ne sont plus pris en charge&nbsp;: avec ces géants, on doit souvent craindre une défaillance critique à la moindre modification erronée. À l’autre extrémité, on trouve des logiciels assez bien entretenus, mais qui utilisent une bibliothèque logicielle qui n’est plus la version la plus récente&nbsp;: il est généralement très facile de les remettre entièrement à jour. Enfin, quelque part entre les deux, on trouve des applications pour lesquelles la plupart des développeurs n’utiliseraient pas encore le terme <em>legacy</em>, mais qui nécessitent néanmoins des migrations complexes, avec par exemple un ou deux <em>frameworks</em> obsolètes à remplacer.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-scaled.png"><img decoding="async" width="1024" height="506" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-1024x506.png" alt="" class="wp-image-27634" style="width:1301px;height:auto"/></a></figure>



<p class="justify-text">Que pouvons-nous en faire&nbsp;? Les LLM offrent-ils d&#8217;autres possibilités en fonction de la position du projet sur ce spectre&nbsp;? Jusqu&#8217;à présent, nos recherches se sont concentrées sur la partie gauche de ce spectre&nbsp;; la suite de cet article portera donc davantage sur les possibilités d&#8217;aborder le &#8220;véritable&#8221; legacy. Plus tard dans l&#8217;année, nous approfondirons également ce que nous pouvons faire en matière de migrations et d&#8217;updates.</p>



<h1 class="wp-block-heading">Utilisation des LLM sur des bases de code <em>legacy</em></h1>



<p class="justify-text">Il est clair qu&#8217;un simple prompt &#8220;réécris ce programme selon les normes modernes&#8221; ne fonctionnera pas (même si certains fournisseurs affirment que cela sera bientôt possible). Nous devrons poser des questions un peu plus concrètes et décomposer le travail en plusieurs étapes. Il y a en fait deux choses que nous pouvons faire avec notre code <em>legacy&nbsp;</em>: le réécrire et le documenter.</p>



<h2 class="wp-block-heading">Réécriture du code <em>legacy</em></h2>



<p class="justify-text">Lorsque nous commençons à réécrire du code, nous devons souvent tenir compte du fait que la reconstruction complète d’un très grand projet est une tâche trop difficile. Il est possible d’obtenir des &#8220;quick wins&#8221; en réécrivant stratégiquement certaines parties d’un projet, qui seront ensuite réutilisées dans un contexte plus large, où une équipe humaine et l’IA reconstruiront l’application dans les règles de l’art. Nos expériences nous ont montré qu’il était trop ambitieux d’attendre de l’IA qu’elle utilise une architecture entièrement nouvelle tout en traduisant l’ancien code vers le nouveau. En revanche, il est possible de &#8220;vibe coder&#8221; une grande partie de la charpente typique d’un nouveau projet, puis d’y injecter de manière ciblée un certain nombre de morceaux de code qui sont des traductions de parties d’un projet <em>legacy</em>. En tant qu’êtres humains, notre tâche consiste à indiquer clairement quelle architecture nous attendons et quelles sont les règles de qualité du code nouveau.</p>



<p class="justify-text">L&#8217;un des principaux défis liés à la réécriture de code à l&#8217;aide de l&#8217;IA consiste à tester l&#8217;exactitude de la traduction&nbsp;: le code fait-il toujours ce qu&#8217;il faisait auparavant (indépendamment du fait que cela soit souhaitable, car même le <em>business case</em> peut parfois être trop obsolète dans le cas d&#8217;un projet <em>legacy</em>)&nbsp;? Pour les projets relativement récents, il existe déjà de nombreux tests que nous pouvons effectuer pour vérifier l&#8217;exactitude, mais avec les anciens systèmes <em>legacy</em>, nous sommes souvent confrontés au problème que l&#8217;application est simplement testée en production, ou du moins avec des données de production&nbsp;: il n&#8217;y a pas de tests spécifiques ni même de données de test pouvant être utilisées en toute sécurité. Dans ce cas, il s&#8217;agit de créer un environnement dans lequel nous pouvons tester le nouveau code en toute sécurité, ce qui est généralement un travail ad hoc et demande une certaine créativité. Nous ne pouvons pas envoyer de données de production vers le <em>cloud</em>, nous devons donc nous assurer que le LLM ne puisse pas les lire. Ce serait plus simple si nous pouvions utiliser des LLM fonctionnant en local, mais pour l&#8217;instant, ceux-ci ne sont pas encore assez puissants (quand ils sont disponibles) pour effectuer des tâches aussi complexes avec du code <em>legacy</em>.</p>



<p class="justify-text">L&#8217;interface utilisateur constitue un autre défi&nbsp;: dans les projets plus anciens, celle-ci est souvent obsolète et il faut construire une nouvelle GUI à partir de zéro. Cela pose toutefois le problème de ne plus disposer d&#8217;une base de référence dans l&#8217;ancien projet&nbsp;: la nouvelle interface devra généralement être testée manuellement par des personnes. J&#8217;espère toutefois que nous verrons des progrès dans ce domaine dans un avenir proche, en ce qui concerne les possibilités de l&#8217;IA. En effet, nous voyons déjà apparaître des systèmes capables de contrôler l&#8217;intégralité de votre ordinateur (comme OpenClawd), et l&#8217;intégration avec des frameworks plus traditionnels pour le test d&#8217;une interface graphique fait également partie des possibilités.</p>



<p class="justify-text">Enfin, les petits projets <em>legacy</em> constituent également un domaine où nous pouvons obtenir des résultats rapides. Si nous utilisons un programme <em>legacy </em>petit à moyen, doté de fonctionnalités limitées et d’une GUI simple, ou présentant un <em>input </em>et un <em>output </em>clairs en cas de traitement par lots, et qu’il n’existe aucun <em>business case</em> justifiant son intégration dans une autre méthode de travail, nous pouvons alors tenter une approche directe pour construire une version moderne dans un nouveau langage de programmation à l’aide de l’IA. Dans ce cas, il faudra tout de même bien tester et adopter une approche structurée avec un accompagnement des développeurs humains, mais il est possible d&#8217;essayer cette méthode pour des applications non critiques. Une application à usage interne, par exemple, constitue généralement un bon premier candidat.</p>



<h2 class="wp-block-heading">Documentation du code <em>legacy</em></h2>



<p class="justify-text">Parfois, la réécriture du code <em>legacy </em>avec l&#8217;IA est un peu trop ambitieuse, ou nous avons besoin de plus d&#8217;informations avant de nous y risquer. Il peut être intéressant de se tourner d’abord vers la documentation&nbsp;: l’IA peut également nous aider à faire en sorte que l’exploration d’une base de code <em>legacy </em>ressemble un peu moins à de l’archéologie de haut niveau.</p>



<p class="justify-text">Expliquer un morceau de code de petite à moyenne taille et en extraire la logique business, ou analyser un morceau plus important et en expliquer la structure et l’architecture, tout cela est tout à fait possible avec les grands modèles de langage actuels. Il est toutefois possible d’aller plus loin&nbsp;: il est possible de créer des outils d’IA pour l&#8217;aider à explorer la base de code et, par exemple, à générer des diagrammes illustrant les dépendances entre les segments de code. Ou bien on peut lui faire écrire des scripts afin de structurer soigneusement ses conclusions après chaque analyse dans un fichier texte pour elle-même et un PDF destiné à l’utilisateur humain.</p>



<p class="justify-text">Il est également possible d&#8217;adopter une approche hiérarchique&nbsp;: commencer par explorer la base de code, puis approfondir progressivement l&#8217;analyse des différents modules afin d&#8217;obtenir de plus en plus de détails et de compléter l&#8217;analyse. Il s&#8217;agit là de l&#8217;approche descendante, que nous pouvons toutefois compléter par une version ascendante&nbsp;: une fois que nous sommes allés en profondeur, nous pouvons à nouveau demander un résumé afin de construire une présentation mieux documentée de la situation dans son ensemble.</p>



<p class="justify-text">Il est toutefois important ici de savoir à l&#8217;avance ce que nous souhaitons exactement atteindre. Une analyse générale d’une base de code par l’IA peut s’avérer intéressante lorsque les utilisateurs humains ne connaissent pas du tout le système et souhaitent disposer de points de repère pour se familiariser avec celui-ci.</p>



<p class="justify-text">Cependant, lorsque l&#8217;objectif est de pouvoir assurer la maintenance de la base de code, il est préférable de mettre en place un système proposant un <em>chatbot</em> qui connaît le contexte spécifique et les particularités du projet <em>legacy</em>, et qui peut répondre à des questions très ciblées à ce sujet. Cela est possible, par exemple, dans CoPilot Studio. Si cela ne fonctionne pas correctement, il est possible d&#8217;envisager de construire manuellement une base de connaissances en utilisant l&#8217;IA qui pourra ensuite être utilisée par l&#8217;IA pour répondre aux questions.</p>



<p class="justify-text">Une autre option consiste à extraire des informations spécifiques de la base de code, telles que la logique business par module individuel, ou du pseudocode pouvant aider les développeurs humains à réimplémenter cette logique dans un autre projet. (Et bien sûr, une IA peut également être mise à contribution lors de cette deuxième étape).</p>



<p class="justify-text">Avec une touche de créativité, nous pouvons concevoir une meilleure approche pour la plupart des analyses ad hoc que celle consistant à &#8220;se contenter d’analyser à tout va&#8221;. Et la documentation d’un système <em>legacy </em>peut tout simplement constituer une première étape vers sa réécriture.</p>



<h1 class="wp-block-heading" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)">Conclusion&nbsp;: professionnels recherchés</h1>



<figure class="wp-block-image alignright size-large is-resized is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-scaled.png"><img decoding="async" width="1024" height="559" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-1024x559.png" alt="" class="wp-image-27699" style="aspect-ratio:1.8333516399024625;object-fit:contain;width:546px;height:auto"/></a></figure>



<p class="justify-text no-top-margin">Comme mentionné précédemment, les LLM nous offrent progressivement des possibilités très puissantes pour traiter nos bases de code <em>legacy</em>, surtout lorsque nous avons accès aux modèles volumineux et puissants disponibles aujourd’hui. Nous constatons toutefois qu’il s’agit en réalité d’une boîte à outils très bien fournie, comprenant plusieurs outils puissants, et que nous devons savoir ce que nous voulons en faire et comment les utiliser au mieux.</p>



<p class="justify-text">Tout n’est pas encore entièrement automatisé&nbsp;: nous aurons donc toujours besoin de bons professionnels pour tirer le meilleur parti de ces outils. Notre conseil aux développeurs est de ne surtout pas avoir peur de l’IA et de l’utiliser régulièrement lors de l’analyse et du développement de logiciels&nbsp;: l’expérience est la meilleure école pour former les bons professionnels dont nous avons besoin dans ce domaine.</p>



<p class="justify-text">Pour l’instant, la conclusion est donc la suivante&nbsp;: pour le code <em>legacy</em>, l’IA n’est pas une panacée, mais une boîte à outils pratique qu’il vaut mieux essayer dans le cadre d’une approche plus large. Comme indiqué, nous nous pencherons plus tard dans l&#8217;année sur le milieu et la partie droite du spectre du code <em>legacy</em>. Nous pensons qu&#8217;il existe ici davantage de possibilités d&#8217;automatisation de certains workflows, surtout si nous exploitons davantage les agents. Il est donc possible que, pour des projets un peu plus simples et répétitifs, nous puissions évoluer du &#8220;professionnel&#8221; vers &#8220;l&#8217;usine&#8221;.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Legacy &#038; AI: Tijdreizen in je Terminal</title>
		<link>https://www.smalsresearch.be/legacy-ai-tijdreizen-in-je-terminal/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 07:56:17 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/?p=27622</guid>

					<description><![CDATA[Sinds de hype van grote taalmodellen is losgebarsten, zullen de meeste ontwikkelaars ondertussen al wel geproefd hebben van de productiviteitswinst die deze tools, mits correct gebruik, kunnen bieden. In deze blog onderzoeken we of we verder kunnen gaan dan dat: biedt het AI ook voldoende hulp bij het beheersen van Legacy Code?]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-large is-resized"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-1024x1024.png" alt="" class="wp-image-27693" style="width:274px;height:auto"/></a></figure>



<p class="no-top-margin justify-text"><em>Cet article est aussi disponible en <a href="https://www.smalsresearch.be/legacy-ai-voyagez-temps-terminal/" data-type="post" data-id="28963">français</a>.</em></p>



<p class="justify-text" style="padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">Sinds de hype van grote taalmodellen is losgebarsten, zullen de meeste ontwikkelaars ondertussen al wel geproefd hebben van de productiviteitswinst die deze tools, mits correct gebruik, kunnen bieden. In deze blog onderzoeken we of we verder kunnen gaan dan dat: biedt AI ook voldoende hulp bij het beheersen van Legacy Code?</p>



<span id="more-27622"></span>



<p class="justify-text">Het inzetten van <a href="https://www.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/" data-type="post" data-id="24386">Large Language Models (LLM)</a> bij het programmeren is inderdaad ondertussen stilaan goed gekend: het gaat van vragen stellen aan een chatbot (&#8220;hoe schrijf ik in Java een algoritme dat &#8230; &#8220;), overheen steeds <a href="https://www.smalsresearch.be/llms-voor-code/" data-type="post" data-id="18875">slimmere en langer wordende <em>code completion</em></a> (automatisch aanvullen wat je wil typen in de editor), tot <a href="https://www.smalsresearch.be/vibe-coding-met-agentic-ides/" data-type="post" data-id="22499">volledige <em>vibe coding</em></a> (in de IDE, of zelfs gewoon in een terminal): AI agenten, via prompts, hele stukken code &#8211; ja, zelfs werkende toepassingen &#8211; laten schrijven op je machine.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:30%">
<p class="justify-text">Deze manier van werken beschreven we reeds <a href="https://www.smalsresearch.be/vibe-coding-met-agentic-ides/" data-type="post" data-id="22499">in een vorige blogpost</a>, en de caveats, zaken waarop men moet letten, gelden nog steeds: blijf continu opvolgen, stel zaken in vraag, controleer, en geef de juiste hoeveelheid nuttige context mee aan het AI (een kunst op zich). Voor het behandelen van <strong><em>legacy code</em></strong>, stellen er zich echter nog een aantal verdere problemen:</p>



<ul class="wp-block-list">
<li class="justify-text">Het is geen nieuwbouw (of <em>greenfield</em>): er is erg veel impact van &#8211; vaak obscure &#8211; beslissingen uit het verleden.</li>



<li class="justify-text">In veel gevallen is er reeds een massa code aanwezig.</li>



<li class="justify-text">Vaak vraagt het com- pileren, uitvoeren en testen van de code specifieke technologie, die zelf verouderd is en soms moeilijk te in-stalleren of simuleren.</li>



<li class="justify-text">Je bent als mens vaak niet meer onderwezen in het hoe en waarom van de bestaande codebase, waardoor het moeilijker wordt de resultaten van het AI kritisch te be-oordelen.</li>
</ul>
</div>



<div class="wp-block-column is-style-section-1 has-accent-5-background-color has-background is-layout-flow wp-container-core-column-is-layout-43dc041e wp-block-column-is-layout-flow is-style-section-1--2" style="border-width:2px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;flex-basis:70%">
<h3 class="wp-block-heading is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-right:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);margin-left:var(--wp--preset--spacing--20)"><span style="text-decoration: underline;">Vibe Coding: Een aantal Tips</span></h3>



<p class="justify-text has-small-font-size" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)"><em>Deze eenvoudige truukjes ondervonden we reeds bij ons werk rond Legacy Code &amp; AI, maar zijn breder toepasbaar naar alle Vibe Coding projecten.</em></p>



<ul class="wp-block-list">
<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Grote Schoonmaak: vóór je een AI loslaat op een codebase, moet je ervoor zorgen dat er geen privégegevens, paswoorden, of andere gevoelige informatie in te vinden zijn!</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Planning: vraag om opties en stel executie uit. Als je zelf bedreven bent in wat je wil doen, heb je vast en zeker al een idee van waar je precies naartoe wilt. Het kan echter soms lonen om je gesprek met het AI heel open van geest te beginnen en te vragen naar ideeën en opties (b.v. qua architectuur of gebruikte technologie) om je algemene visie te bewaarlijken (waarbij je het soms overijverige AI ook duidelijk maakt dat er alleen nog maar wordt gepland). Vraag specifiek naar meerdere suggesties! Dit kan helpen bij het brainstormen, en om je eigen ideeën aan te vullen met meer inspiratie. In het vervolg van het geprek ga je dan dieper in op de opties die je het meeste aanstaan, en dan pas vul je aan met je eigen expertise om de ideeën van het AI bij te sturen, tot er een concreet plan van actie is ontstaan dat zo optimaal mogelijk is. Pas daarna gaan we over tot effectieve implementatie.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Indirectie en Tools. Zeker als je via een CLI (Command Line Interface) werkt, zijn zowel jij als het AI zich niet meteen bewust van alle mogelijke reeds bestaande tools die zouden kunnen worden geëxploiteerd om je doelen te bereiken. Laat het AI zoeken naar tools die zouden kunnen helpen, en helpen bij de installatie ervan. Hoe meer zaken je via tools kan doen, hoe minder de context wordt vervuild met nodeloos &#8220;manueel&#8221; werk door het AI zelf (om nog maar te zwijgen van de besparing qua token gebruik). Zo bestaan er b.v. allerlei <a href="https://en.wikipedia.org/wiki/Static_program_analysis">static code analysis tools</a> die je kan gebruiken om de kwaliteit van je geschreven code te evalueren en hoog te houden. Het is vaak een koud kunstje voor het AI om heel wat van de gegeven suggesties na de analyse uit te voeren.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Expert Mode: soms volstaan standaard tools niet om het AI voldoende te helpen bij wat je wil dat het doet. In dat geval kan je het AI eerst diens eigen tools laten schrijven. Daarbij kan je er voor zorgen dat het resultaat, of de output van de tool, iets is wat kort en samenvattend is voor de verdere taken, om de context niet teveel te belasten. Context windows van LLMs worden weliswaar steeds groter, maar dan nog moet je ervoor zorgen dat enkel de nuttigste zaken erin zitten (pas op voor <a href="https://redis.io/blog/context-rot/">context rot</a>).</li>
</ul>
</div>
</div>



<p>In een vorige <a href="https://www.smalsresearch.be/legacy-code-trotseren-best-practices-ai/" data-type="post" data-id="21131">post rond legacy code</a>, gaven we een erg brede definitie. Laten we dus vooreerst iets duidelijker stellen wat we met Legacy bedoelen, en de &#8220;moeilijkheidsgraad&#8221; van Legacy projecten beter illustreren.</p>



<h2 class="wp-block-heading">&#8220;Oude&#8221; code: een spectrum aan mogelijkheden</h2>



<p class="justify-text">Er is niet echt een officiële definitie van legacy code; meestal spreekt men van het gebruik van niet langer ondersteunde technologie, moeilijk te onderhouden, of simpelweg &#8220;code die je van iemand anders erft&#8221;. Het gaat uiteraard altijd wel om code die nog in gebruik, en dus belangrijk is. Ironisch genoeg, zijn het vaak de meest kritische toepassingen, die al jaren meegaan en waar men al jaren &#8220;op vertrouwt&#8221;, maar dan zonder ze goed te onderhouden.</p>



<p class="justify-text">AI kan ons helpen bij het onderhoud van eender welke code, dus we zullen een spectrum demonstreren dat van de oudste, ergste legacy code gaat, tot code van projecten die slechts een kleine update nodig heeft. Aan de ene kant van het spectrum heb je programma&#8217;s, geschreven in ouderwetse programmeertalen, volgens een achterhaalde architectuur, gebruik makend van databases die niet meer van deze tijd zijn, en draaiende op servers met niet langer ondersteunde besturingssystemen: bij deze mastodonten moet men vaak bang zijn dat ze kritisch zullen falen bij de kleinste verkeerde wijziging. Helemaal aan de andere kant heb je vrij goed onderhouden software, waarin een softwarebibliotheek wordt gebruikt die niet meer de meest recente versie is: meestal een koud kunstje om ze weer helemaal up-to-date te krijgen. Ergens in het midden vind je, ten slotte, toepassingen terug waarbij de meeste developers nog niet meteen het woord Legacy in de mond zullen nemen, maar waar wel moeilijke migraties dienen te gebeuren, met b.v. een verouderd framework of twee dat zou moeten worden vervangen.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-scaled.png"><img loading="lazy" decoding="async" width="1024" height="506" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-1024x506.png" alt="" class="wp-image-27634" style="width:1301px;height:auto"/></a></figure>



<p class="justify-text">Wat kunnen we hier nu mee? Bieden LLMs ons andere mogelijkheden naargelang de plaats van het project op dit spectrum? Ons onderzoek heeft zich tot nu toe op de linkerkant van dit spectrum gefocust, dus het vervolg van deze blogpost zal veeleer over de mogelijkheden gaan om &#8220;échte&#8221; Legacy aan te pakken. Later dit jaar gaan we ook verder uitdiepen wat we met migraties en updates kunnen doen.</p>



<h2 class="wp-block-heading">Gebruik van LLMs op Legacy Codebases</h2>



<p class="justify-text">Het is duidelijk dat de eenvoudige prompt &#8220;herschrijf mij dit programma volgens moderne standaarden&#8221; niet zal werken (al beweren sommige vendors dat dit eraan zit te komen). We zullen iets concretere zaken gaan vragen, en het werk ook enigszins in stukjes moeten kappen. Verder zijn er eigenlijk twee zaken die we kunnen gaan doen met onze legacy code: ze herschrijven en ze documenteren.</p>



<h3 class="wp-block-heading">Herschrijven van Legacy Code</h3>



<p class="justify-text">Als we beginnen met code herschrijven, zullen we er vaak rekening mee moeten houden dat een heel groot project voldoende goed herbouwen een te moeilijke opgave is. We kunnen &#8220;quick wins&#8221; behalen door strategisch een aantal zaken te gaan herschrijven van een project, en die stukken dan te gebruiken in een ruimere context, waarbij een team van mensen en AI de toepassing opnieuw bouwen volgens de regels van de kunst. Bij onze experimenten stelden we vast dat het een brug te ver was om van het AI te verwachten een volledig nieuwe architectuur te gebruiken, tegelijk met het vertalen van oude code naar nieuwe. Wat wel mogelijk is, is om heel wat van de typische scaffolding (de standaardcode om tot iets werkend te komen) van een nieuw project te vibe coden, en daar dan gericht een aantal stukken code in te injecteren die vertalingen zijn van stukjes van een legacy project. Als mens is het onze taak om duidelijk aan te geven welke architectuur we verwachten, en wat de kwaliteitsregels zijn van de nieuw geschreven code.</p>



<p class="justify-text">Eén van de grotere uitdagingen bij het herschrijven van code met behulp van AI, is het testen van de correctheid van de vertaling: doet de code nog wat ze vroeger deed (los van het feit of dit wenselijk is, want zelfs de business case kan soms te verouderd zijn in geval van Legacy)? Bij redelijk nieuwe projecten zullen er reeds heel wat testen bestaan die we kunnen uitvoeren om de correctheid na te gaan, maar bij legacy hebben we vaak het probleem dat de toepassing eenvoudigweg wordt getest in productie, of op zijn minst met productiedata: er zijn geen specifieke tests of zelfs maar veilig bruikbare testdata. In dat geval komt het erop neer een omgeving te creëren waarin we de nieuwe code op een veilige manier kunnen testen, wat meestal ad hoc werk is en enige creativiteit vraagt. We mogen namelijk geen productiedata naar de Cloud sturen, dus we moeten ervoor zorgen dat het LLM deze niet kan lezen. Het zou eenvoudiger zijn als we lokaal draaiende LLMs zouden kunnen gebruiken, maar voorlopig zijn deze nog niet krachtig genoeg (als ze al beschikbaar zijn) om dergelijke complexe taken uit te voeren met legacy code.</p>



<p class="justify-text">Een andere uitdaging is de gebruikersinterface: bij oudere projecten is deze vaak achterhaald en moet er, vanaf de grond, een nieuwe GUI (Graphical User Interface) worden opgebouwd. Dat geeft echter het probleem dat je geen basis meer hebt in het oude project om mee te vergelijken: de nieuwe interface zal doorgaans manueel door mensen moeten worden getest. Ik verwacht echter dat we op dit vlak nog vorderingen zullen zien in de nabije toekomst, wat de mogelijkheden van het AI betreft. We zien namelijk al systemen opduiken die je volledige computer kunnen besturen (zoals <a href="https://openclawd.ai/">OpenClaw</a> of het <a href="https://www.anthropic.com/news/3-5-models-and-computer-use">&#8220;Computer Use&#8221; van Anthropic</a>), en ook integratie met meer traditionele raamwerken voor het testen van een GUI behoort tot de mogelijkheden.</p>



<p class="justify-text">Waar we, ten slotte, ook quick wins mee kunnen halen, zijn kleinere Legacy projecten. Als we een klein tot matig groot legacy programma gebruiken, met beperkte functionaliteit en een eenvoudige GUI of een duidelijke input en output in geval van batch processing, en geen business case om deze te integreren in een andere manier van werken, dan kunnen we een rechttoe rechtaan aanpak proberen om een moderne versie in een nieuwe programmeertaal te bouwen met AI. We moeten dan nog altijd goed testen en een gestructureerde aanpak hebben met bijsturingen door menselijke developers, maar het wordt wel feasible om dit voor niet-kritische toepassingen te gaan uitproberen. Een intern gebruikte toepassing is bijvoorbeeld een typische goede eerste kandidaat.</p>



<h3 class="wp-block-heading">Documenteren van Legacy Code</h3>



<p class="justify-text">Soms is herschrijven van Legacy met AI net iets te ambitieus, óf we hebben meer informatie nodig voor we er ons aan wagen. In dat geval kan het interessant zijn om eerst richting documentatie te kijken: het AI kan ons ook helpen om het verkennen van een legacy codebase net iets minder op archeologie voor gevorderden te doen lijken.</p>



<p class="justify-text">Van een klein tot matig stuk code uitleggen en er de business logica uithalen, of een groter stuk analyseren en de opbouw en architectuur uitleggen: dat kan met de huidige grote taalmodellen zonder meer. We kunnen echter verder gaan: we kunnen het AI tools laten bouwen om zichzelf te helpen de codebase te verkennen, en b.v. diagrammen te voorzien van de afhankelijkheden tussen de stukken code. Of we kunnen het scripts laten maken om de bevindingen na elk stuk analyse netjes te structureren in een tekstbestand voor zichzelf en een pdf voor de menselijke gebruiker.</p>



<p class="justify-text">We kunnen ook hiërarchisch werken: eerst een verkenning van de codebase doen, en dan telkens dieper duiken in de verschillende modules, om meer en meer detail te verkrijgen en de analyse aan te vullen. Dat is de top-down aanpak, die we echter kunnen aanvullen met een bottom-up versie: eens we tot in de diepte zijn gegaan, kunnen we weer zaken laten samenvatten om van het grotere plaatje een beter geïnformeerde uiteenzetting op te bouwen.</p>



<p class="justify-text">Hier is het wel van belang dat we van tevoren weten wat we precies willen bereiken. Een algemene analyse van een codebase door het AI kan interessant zijn wanneer de menselijke gebruikers het systeem nog totaal niet kennen en aanknopingspunten willen hebben om zaken te leren, maar biedt meestal weinig extra aan mensen die de codebase reeds beheersen.</p>



<p class="justify-text">Maar wanneer het doel is om de codebase te kunnen onderhouden, kunnen we eventueel een systeem opbouwen waarbij we een chatbot aanbieden die de specifieke context en bijzonderheden van het legacy project kent, en daar heel gerichte vragen over kan beantwoorden. Dit kan b.v. in <a href="https://adoption.microsoft.com/en-us/ai-agents/copilot-studio/">CoPilot Studio</a>. Wanneer dat niet goed genoeg werkt, kunnen we nog overwegen om manueel een knowledge base op te bouwen, gebruik makend van het AI, die dan weer door het AI kan worden gebruikt om vragen te beantwoorden.</p>



<p class="justify-text">Nog een andere optie bestaat eruit dat we specifieke informatie uit de codebase willen extraheren, zoals de business logica per afzonderlijke module, of pseudocode die menselijke developers kan helpen om de logica in een ander project te herimplementeren. (En uiteraard kan bij die tweede stap ook weer een AI worden ingezet.)</p>



<p class="justify-text">Kortom, met een beetje creativiteit kunnen we voor de meeste ad hoc analyses een betere aanpak verzinnen dan &#8220;analyseer er maar gewoon op los&#8221;. En het documenteren van een legacy systeem kan ook gewoon een eerste opstap zijn naar het herschrijven.</p>



<p></p>



<h2 class="wp-block-heading" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)">Besluit: vakmannen gevraagd</h2>



<figure class="wp-block-image alignright size-large is-resized is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-scaled.png"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-1024x559.png" alt="" class="wp-image-27699" style="aspect-ratio:1.8333516399024625;object-fit:contain;width:546px;height:auto"/></a></figure>



<p class="justify-text no-top-margin">Zoals we hebben aangekaart, bieden LLMs ons stilaan erg krachtige mogelijkheden om onze Legacy Codebases aan te pakken, zéker wanneer we toegang hebben tot de grote en krachtige modellen die vandaag beschikbaar zijn. We zien echter ook dat het eigenlijk een heel goed gevulde gereedschapskoffer is, met een aantal krachtige &#8220;power tools&#8221;, en dat we moeten weten <em>wat </em>we ermee willen bereiken en <em>hoe </em>we deze best kunnen gebruiken.</p>



<p class="justify-text">We zitten nog niet op het punt dat alles automatisch gaat: we zullen dus nog steeds goede <em>vakmannen </em>nodig hebben om optimaal van dit gereedschap gebruik te maken. Onze raad aan developers is om zeker niet bang te zijn van AI en er geregeld gebruik van te maken bij de analyse en ontwikkeling van software: ervaring is de beste leerschool om de goede vakmannen die we hiervoor nodig hebben, op te leiden.</p>



<p class="justify-text">Voorlopig is dus het besluit: voor legacy code is AI geen wondermiddel, maar een handige gereedschapskist die je best kan uitproberen als deel van een bredere aanpak. Zoals gezegd kijken we later dit jaar eerder naar het midden en de rechterkant van het spectrum van legacy. Wij vermoeden dat hier meer mogelijkheden zijn tot automatisering van een aantal workflows, zeker als we ook dieper gebruik gaan maken van agents. Mogelijks kunnen we, voor iets eenvoudigere en repetitievere projecten, dus toch van &#8220;vakman&#8221; naar &#8220;fabriek&#8221; evolueren.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Code hérité: meilleures pratiques &#038; IA</title>
		<link>https://www.smalsresearch.be/code-herite-meilleures-pratiques-ia/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 25 Sep 2024 11:31:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[technical debt]]></category>
		<guid isPermaLink="false">/?p=21169</guid>

					<description><![CDATA[Dans ce blog, nous discutons de plusieurs stratégies générales pour gérer le code hérité, et nous donnons un aperçu de ce que l'intelligence artificielle peut encore y ajouter.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-full is-resized"><a href="/wp-content/uploads/2024/09/brain-code-image.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2024/09/brain-code-image.png" alt="" class="wp-image-21152" style="width:338px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p><a href="/legacy-code-trotseren-best-practices-ai/"><em>Nederlandstalige Versie</em></a></p>



<p class="has-black-color has-text-color has-link-color wp-elements-cd97f2ccfcf37b961a4d14b734b19e33">Dans le monde en perpétuelle évolution du développement logiciel, le code hérité est un sujet souvent abordé, mais finalement très peu compris. Le code hérité peut être défini de différentes manières, mais pour cette discussion, nous considérons qu&#8217;il s&#8217;agit de <em>tout code qui est encore utilisé par une application importante, mais qui devrait être mis à niveau</em>. Il se peut qu&#8217;un nouveau style architectural ou de nouvelles normes soient nécessaires, que des cadres obsolètes soient encore utilisés ou que le code soit écrit dans un langage de programmation qui n&#8217;est plus pris en charge. Ou alors le code n&#8217;est pas travaillé à la base, et se retrouve donc trop souvent pollué de correctifs rapides. En d&#8217;autres termes, il s&#8217;agit d&#8217;un code devenant de plus en plus difficile à maintenir et qui doit être réécrit, mais qui, pour une raison ou une autre, n&#8217;est pas pris en main. Certains parlent également de dette technique <a>(<em>technical debt</em>)</a>.</p>



<p class="justify-text">Et si nous allions plus loin en essayant non seulement de gérer ce code, mais en plus de l&#8217;améliorer de manière proactive&nbsp;? Pouvons-nous utiliser de nouvelles technologies comme l&#8217;IA pour y parvenir&nbsp;?</p>



<span id="more-21169"></span>



<h3 class="wp-block-heading"><strong>Pourquoi le Code hérité est un problème</strong></h3>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2024/09/technical-debt-imge.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2024/09/technical-debt-imge.png" alt="" class="wp-image-21156" style="width:338px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text">Le code hérité entraîne un certain nombre de défis. Le plus important d&#8217;entre eux est probablement le fait qu&#8217;il ralentit le développement et rend la maintenance difficile, ou qu&#8217;il nécessite des connaissances spécialisées et des outils obsolètes. Sans les connaissances et les outils adéquats, il peut représenter un coût énorme pour tout éditeur de logiciels. De plus, si les développeurs qui ont écrit le code original ont également quitté l&#8217;entreprise, le problème peut se révéler encore plus grave. En parlant des développeurs, c&#8217;est également la <a href="https://stackoverflow.blog/2024/07/24/developers-want-more-more-more-the-2024-results-from-stack-overflow-s-annual-developer-survey/">&nbsp;dette technique qui constitue l&#8217;un des plus grands désagréments dans leur travail</a>.</p>



<p class="justify-text">Il existe heureusement plusieurs façons de relever ces défis, même en utilisant les technologies les plus avancées, telles que l&#8217;intelligence artificielle.</p>



<h2 class="wp-block-heading"><strong>Stratégies de gestion du code hérité</strong></h2>



<p class="justify-text">Il n&#8217;existe malheureusement pas de solution magique permettant de résoudre tous les problèmes liés aux code hérité en une seule fois. Il faut adopter une approche polyvalente faisant appel à plusieurs tactiques à la fois. Pensons à l&#8217;analyse du code, à la construction de nouveaux composants de manière modulaire et à la maintenance continue de la base de code pour s&#8217;assurer qu&#8217;elle reste à jour et bien adaptée aux besoins futurs.</p>



<p class="justify-text">Une première étape consiste à effectuer une <strong>analyse statique</strong>. Il s&#8217;agit d&#8217;examiner le code sans l&#8217;exécuter afin d&#8217;identifier les problèmes potentiels tels que les dépendances, les failles de sécurité ou les <a href="https://refactoring.guru/refactoring/smells">&#8220;code smells&#8221;</a>. En utilisant des outils d&#8217;analyse statique, les développeurs peuvent mieux comprendre la structure du code et identifier les zones problématiques à améliorer. Ces outils sont en partie intégrés dans un bon environnement de développement, mais il est souvent possible de leur ajouter une puissance supplémentaire.</p>



<p class="justify-text">Après l&#8217;analyse du code, il est essentiel de <strong>mettre en place des bancs d&#8217;essai</strong>, conformément au paradigme du <em><a href="https://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development</a></em> (TDD). Cela permet de créer un environnement sûr dans lequel divers tests peuvent être exécutés afin de garantir que le code se comporte comme prévu. Les tests sont essentiels pour détecter rapidement les bogues et les problèmes de performance, avant que des changements ne soient apportés. Par ailleurs, si la couverture des tests est suffisante, il devient beaucoup plus sûr de remanier le code, ce que nous devons continuer à faire tout au long du cycle de vie afin de veiller à ce que le code continue d’être amélioré et n&#8217;atteigne surtout pas le <em>legacy status</em>. La mise en place de bancs d&#8217;essai soutient en outre les processus d’intégration et de déploiement continus (CI/CD)), qui sont essentiels pour la gestion de la qualité à long terme.</p>



<p class="justify-text">Une autre stratégie importante consiste à remanier le code pour le rendre <strong>modulaire</strong>. En <a href="/van-n-tier-naar-microservices/">décomposant une base de code monolithique en modules plus petits et plus faciles à gérer</a>, les développeurs peuvent isoler les fonctionnalités, ce qui rend le code plus facile à comprendre, à maintenir et à tester (et peut-être même à réécrire). Cette <a href="/ecosysteem-architectuur/">modularisation</a> permet également à différentes équipes de travailler simultanément sur différentes parties de la base de code, ce qui augmente la productivité et réduit la probabilité d&#8217;erreurs.</p>



<h2 class="wp-block-heading"><strong>Le rôle de l&#8217;IA dans la gestion de code hérité</strong></h2>



<p class="justify-text">L&#8217;intelligence artificielle offre de nouvelles possibilités pour la gestion de code hérité, en particulier aujourd&#8217;hui, avec l&#8217;évolution rapide de l&#8217;<a href="/llms-pour-code/"><em>IA générative</em></a>. Bien que les capacités actuelles de l&#8217;IA soient souvent limitées à des tâches à petite échelle, son potentiel de transformation de la gestion du code hérité est considérable. L&#8217;IA peut aider à analyser le code, à écrire des tests, à remanier et même à générer de la documentation. Cela fait de l&#8217;IA un outil précieux pour les développeurs.</p>



<ul class="wp-block-list">
<li class="justify-text"><strong>Analyser le code&nbsp;:</strong> Les outils d&#8217;IA peuvent analyser le code pour en déterminer la structure et la fonctionnalité, ce qui permet d&#8217;obtenir des informations qui ne sont pas forcément évidentes pour les développeurs humains. Cela peut s&#8217;avérer particulièrement utile lorsqu&#8217;il s&#8217;agit de systèmes hérités complexes ou mal documentés.</li>



<li class="justify-text"><strong>Rédaction de tests&nbsp;:</strong> L&#8217;IA peut également aider à générer automatiquement des tests basés sur le comportement du code, ce qui permet de gagner du temps et d&#8217;améliorer la qualité du code en identifiant les cas marginaux qui pourraient être négligés lors des tests manuels.</li>



<li class="justify-text"><strong>Refonte du code&nbsp;:</strong> Les outils pilotés par l&#8217;IA peuvent suggérer des améliorations et aider les développeurs à remanier le code graduellement. Ce processus de remaniement continu permet de garder la base de code propre et maintenable, réduisant ainsi la dette technique au fil du temps.</li>



<li class="justify-text"><strong>Génération de documentation&nbsp;:</strong> L&#8217;IA peut automatiquement générer et actualiser la documentation dans le cadre de CI/CD, ce qui est particulièrement utile dans les grands projets où la maintenance de la documentation peut être un défi.</li>
</ul>



<p>Ces tâches peuvent principalement être effectuées par le même type d&#8217;outils d&#8217;IA&nbsp;: les assistants de codage. &nbsp;<a href="https://www.codacy.com/">Codacy</a>,&nbsp;<a href="https://snyk.io/platform/deepcode-ai/">Snyk</a>&nbsp;et, bien entendu,&nbsp;<a href="https://github.com/features/copilot">github CoPilot</a> en sont quelques exemples.</p>



<h2 class="wp-block-heading"><strong>Conclusion&nbsp;: l&#8217;avenir de la gestion de code hérité grâce à l&#8217;IA</strong></h2>



<p class="justify-text">La gestion de code hérité reste un défi complexe qui nécessite une approche stratégique. Cependant, l&#8217;émergence de l&#8217;IA en tant qu&#8217;outil d&#8217;analyse, de test et de remaniement du code offre des possibilités de relever ce défi de manière plus efficace et plus rentable. L&#8217;évolution de la technologie de l&#8217;IA générative est encore en plein essor, et son rôle dans la gestion de code hérité ne fera probablement que s&#8217;accroître, offrant davantage de possibilités d&#8217;améliorer les processus de développement de logiciels.</p>



<figure class="wp-block-image aligncenter size-full is-resized is-style-default"><a href="/wp-content/uploads/2024/09/two-hands.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2024/09/two-hands.png" alt="" class="wp-image-21160" style="width:455px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text">Toutefois, il ne faut pas non plus se focaliser sur l&#8217;IA&nbsp;: le meilleur remède contre le code hérité est encore de l&#8217;éviter, et ce, en appliquant les bonnes tactiques tout au long du cycle de vie du développement logiciel afin de maintenir la conception et le code aussi propres et à jour que possible. Dans un prochain article de blog, nous examinerons cette question plus en détail, en zoomant sur les différentes phases du cycle de vie afin de discuter de la manière d&#8217;éviter le code hérité et de la façon dont l&#8217;IA peut être utilisée au cours de chaque phase en vue d&#8217;y contribuer.</p>



<p></p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Legacy Code Trotseren: Best Practices &#038; AI</title>
		<link>https://www.smalsresearch.be/legacy-code-trotseren-best-practices-ai/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 25 Sep 2024 11:30:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[technical debt]]></category>
		<guid isPermaLink="false">/?p=21131</guid>

					<description><![CDATA[In deze blog bespreken we een aantal algemene strategieën om met legacy code om te gaan, en geven we een overzicht van wat artificiële intelligentie daar nog aan kan toevoegen.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-full is-resized"><a href="/wp-content/uploads/2024/09/brain-code-image.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2024/09/brain-code-image.png" alt="" class="wp-image-21152" style="width:338px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/09/brain-code-image-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p><em><a href="/code-herite-meilleures-pratiques-ia/">Version française</a></em></p>



<p class="justify-text">In de steeds veranderende wereld van softwareontwikkeling is legacy code een onderwerp dat vaak ter sprake komt, maar zelden goed wordt begrepen. Legacy code kan op verschillende manieren worden gedefinieerd, maar voor deze discussie beschouwen we ze als <em>elke code die nog steeds wordt gebruikt door een belangrijke toepassing, maar die zou moeten worden geüpgraded</em>. Misschien zijn er een nieuwe architectuurstijl of standaarden nodig, worden er nog verouderde frameworks gebruikt, of is de code geschreven in een niet langer ondersteunde programmeertaal. Of er is al te vaak niet meer ten gronde aan de code gewerkt en ze is vervuild geraakt met snelle fixes. Met andere woorden, het is code die steeds moeilijker te onderhouden wordt en die opnieuw moet worden geschreven, maar om een of andere reden niet wordt aangepakt. Sommigen noemen dit ook wel eens <em>technical debt</em>.</p>



<p class="justify-text">Maar wat nu als we een stap verder gaan en deze code niet alleen proberen te beheersen, maar ook proactief verbeteren? En kunnen we hierbij gebruik maken van nieuwe technologieën zoals AI?</p>



<span id="more-21131"></span>



<h3 class="wp-block-heading">Waarom Legacy-Code een Probleem Is</h3>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2024/09/technical-debt-imge.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2024/09/technical-debt-imge.png" alt="" class="wp-image-21156" style="width:338px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/09/technical-debt-imge-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text">Legacy code brengt tal van uitdagingen met zich mee. De grootste daarvan is waarschijnlijk het feit dat ze de ontwikkeling vertraagt en onderhoud bemoeilijkt; of ze vraagt gespecialiseerde kennis van voorbijgestreefde hulpmiddelen. Zonder de juiste kennis en tools kan dit een gigantische kostenpost worden voor elk softwarebedrijf. Als de ontwikkelaars die de oorspronkelijke code schreven, bovendien ook nog het bedrijf verlaten hebben, kan het probleem nog groter worden. Over de ontwikkelaars gesproken: ook voor hen is <a previewlistener="true" href="https://stackoverflow.blog/2024/07/24/developers-want-more-more-more-the-2024-results-from-stack-overflow-s-annual-developer-survey/">technical debt een van de grootste ergernissen bij hun werk</a>.</p>



<p class="justify-text">Er zijn gelukkig een aantal manieren om met deze uitdagingen om te gaan, zelfs met behulp van de meest geavanceerde technologieën, zoals kunstmatige intelligentie.</p>



<h2 class="wp-block-heading">Strategieën om Legacy Code te beheren</h2>



<p class="justify-text">Er bestaat, jammer genoeg, geen magische oplossing die alle problemen met legacy code in een keer oplost. Het vereist een veelzijdige aanpak waarbij meerdere taktieken tegelijkertijd worden toegepast. Denk aan het analyseren van de code, het modulair opbouwen van nieuwe componenten en het continu onderhouden van de codebase, om ervoor te zorgen dat deze up-to-date blijft en goed is aangepast aan toekomstige behoeften.</p>



<p class="justify-text">Een eerste stap is het uitvoeren van <strong>statische analyse</strong>. Hierbij wordt de code onderzocht zonder deze daadwerkelijk uit te voeren, om zo potentiële problemen te identificeren zoals afhankelijkheden, beveiligingslekken, of <a previewlistener="true" href="https://refactoring.guru/refactoring/smells">zogenaamde ‘code smells’</a>. Met behulp van statische analysetools kunnen ontwikkelaars de structuur van de code beter begrijpen en probleemgebieden aanwijzen die verbetering behoeven. Deze tools zijn voor een deel ingebakken in een goede IDE, maar je kan er vaak nog extra kracht aan toevoegen.</p>



<p class="justify-text">Nadat de code is geanalyseerd, is het <strong>opzetten van testbanken</strong> essentieel, volgens het <a previewlistener="true" href="https://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development</a> (TDD) paradigma. Dit creëert een veilige omgeving waarin verschillende tests kunnen worden uitgevoerd om ervoor te zorgen dat de code zich gedraagt zoals verwacht. Testen is cruciaal om bugs en prestatieproblemen vroegtijdig op te sporen, voordat er wijzigingen worden doorgevoerd. Als er voldoende test coverage is, wordt het trouwens een stuk veiliger om de code te refactoren, hetgeen we tijdens de volledige levenscyclus zullen moeten blijven doen, om ervoor te zorgen dat de code steeds beter wordt en zeker geen legacy status krijgt. Het opzetten van testbanken ondersteunt daarnaast ook continuous integration en deployment (CI/CD) processen, die essentieel zijn voor kwaliteitsbeheer op lange termijn.</p>



<p class="justify-text">Een andere belangrijke strategie is het refactoren van de code om deze <strong>modulair</strong> te maken. Door een monolithische codebase <a href="/van-n-tier-naar-microservices/" data-type="post" data-id="9702">op te splitsen in kleinere, beter beheersbare modules</a>, kunnen ontwikkelaars functionaliteiten isoleren, wat de code gemakkelijker maakt om te begrijpen, te onderhouden en te testen (en eventueel zelfs om ze te herschrijven). Deze <a href="/ecosysteem-architectuur/" data-type="post" data-id="16980">modularisatie</a> stelt verschillende teams ook in staat om tegelijkertijd aan verschillende onderdelen van de codebase te werken, wat de productiviteit verhoogt en de kans op fouten vermindert.</p>



<h2 class="wp-block-heading">De rol van AI in het aanpakken van Legacy Code</h2>



<p class="justify-text">Kunstmatige intelligentie biedt nieuwe mogelijkheden voor het beheren van legacy code, zeker nu, met de snelle evolutie van <em><a href="/llms-voor-code/" data-type="post" data-id="18875">generatieve AI</a></em>. Hoewel de huidige mogelijkheden van AI vaak beperkt zijn tot kleinschalige taken, is het potentieel om legacy codebeheer te transformeren aanzienlijk. AI kan helpen bij het analyseren van code, het schrijven van tests, het refactoren en zelfs bij het genereren van documentatie. Dit maakt AI een waardevol hulpmiddel voor ontwikkelaars.</p>



<ul class="wp-block-list">
<li class="justify-text"><strong>Code Analyseren</strong>: AI-tools kunnen code analyseren om de structuur en functionaliteit te bepalen, waardoor inzichten ontstaan die mogelijk niet direct duidelijk zijn voor menselijke ontwikkelaars. Dit kan vooral nuttig zijn bij het omgaan met complexe of slecht gedocumenteerde legacy-systemen.</li>



<li class="justify-text"><strong>Tests Schrijven</strong>: AI kan ook helpen bij het automatisch genereren van tests op basis van het gedrag van de code, wat tijd bespaart en de codekwaliteit verbetert door randgevallen te identificeren die tijdens handmatige tests over het hoofd kunnen worden gezien.</li>



<li class="justify-text"><strong>Code Refactoren</strong>: AI-gestuurde tools kunnen verbeteringen voorstellen en ontwikkelaars helpen om code stapsgewijs te refactoren. Dit continue refactoringsproces helpt om de codebase schoon en onderhoudbaar te houden, waardoor technische schuld in de loop van de tijd wordt verminderd.</li>



<li class="justify-text"><strong>Documentatie Genereren</strong>: AI kan automatisch up-to-date documentatie genereren en bijhouden als onderdeel van CI/CD, wat vooral nuttig is in grote projecten waar het bijhouden van documentatie een uitdaging kan zijn.</li>
</ul>



<p>Deze taken kunnen veelal worden uitgevoerd door dezelfde type AI tools: de zogenaamde <em>code assistants</em>. Een aantal voorbeelden zijn <a href="https://www.codacy.com/">Codacy</a>, <a href="https://snyk.io/platform/deepcode-ai/">Snyk</a> en, uiteraard, <a href="https://github.com/features/copilot">github copilot</a>.</p>



<h2 class="wp-block-heading">Conclusie: de toekomst van legacy codebeheer met AI</h2>



<p class="justify-text">Het beheren van legacy code blijft een complexe uitdaging die een strategische aanpak vereist. Maar met de opkomst van AI als hulpmiddel bij het analyseren, testen en refactoren van code, ontstaan er mogelijkheden om deze uitdaging op een meer efficiënte en kosteneffectieve manier aan te pakken. Generatieve AI-technologie is nog in volle ontwikkeling, en haar rol in legacy codebeheer zal waarschijnlijk alleen maar toenemen, wat nog meer kansen biedt voor het verbeteren van softwareontwikkelingsprocessen.</p>



<figure class="wp-block-image aligncenter size-full is-resized is-style-default"><a href="/wp-content/uploads/2024/09/two-hands.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2024/09/two-hands.png" alt="" class="wp-image-21160" style="width:455px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/09/two-hands-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text">We mogen ons echter ook niet blind staren op AI: het beste medicijn tegen legacy code is ze te voorkomen, en dit door gedurende de volledige softwareontwikkelingslevenscyclus de juiste taktieken toe te passen om het ontwerp en de code zo clean en up-to-date mogelijk te houden. In een toekomstige blogpost zullen we hier nog dieper op ingaan, waarbij we op de verschillende fasen van de levenscyclus inzoomen, om te bespreken hoe we legacy kunnen vermijden, en ook hoe AI tijdens elke fase kan worden ingezet als hulpmiddel daarbij.</p>



<p></p>


]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
