GenAI et le mainframe
Introduction
Depuis plusieurs décennies, on annonce la fin du mainframe remplacé par une technologie émergente, on peut citer le client/serveur, le web, le cloud… etc…
Avec l’arrivée du GenAI (‘lintelligence artificielle generative), la fin du mainframe redevient un sujet d’actualité ? En quoi GenAI va faciliter cette transformation ?
Challenges
Si on analyse en détail les challenges et les drivers pour ce “move”, on a :
Compétences : il devient de plus en plus difficile de recruter ou de former des ingénieurs en développement sur ces langages que sont Cobol, Natural, … De plus, lorsqu’un développeur quitte l’entreprise généralement pour prendre sa retraite, on perd à la fois une compétence technique mais surtout une competence fonctionnelle forte.
Agilité : ces systèmes n’apportent pas l’agilité requise de nos jours pour accélérer le time-to-market. On est plutôt sur des cycles entre 3 et 6 mois et on reste sur des process de type “Waterfall” avec des silos applicatifs et de données.
Coût : les mainframes peuvent être assez onéreux, avec un manque certain de transparence et de flexibilité
Les entreprises qui choisissent de migrer certains applicatifs hors du mainframe citent trois avantages clés à cette approche : une amélioration du Time-to-market, un accroissement des performances et une accélération de l'innovation.
Les clients de Mainframe & Midrange peuvent être classés selon 3 catégories :
o Les Investisseurs : regroupent ceux qui veulent continuer à investir dans les mainframe
o Les mainteneurs : sont des clients qui souhaitent ne plus investir dans le mainframe ou à minima tout en le gardant
o Les désinvestisseurs : préfèrent sortir du monde du mainframe vers des solutions plus “modernes” si on peut dire pour plus d’agilité, de services innnovants.
GenAI
Avec l’émergence de l’IA generative et notamment la solution GitHub Copilot de Microsoft, je me suis bien évidemment poser la question "Est-ce que GitHub Copilot serait capable de convertir du Cobol vers un langage dit plus moderne comme le C# par exemple ? A-t-il suffisamment de data pour comprendre le Cobol et produire un code de qualité ?
Il ne reste plus qu’une chose à faire : faire un test !
Je suis donc parti d’un code cobol (certes simple) pour vérifier les capacités de GitHub Copilot. Je décrirai le process d’installation et de configuration complet dans un futur article.
Voici le code ouvert dans #VSCode (mon outil préféré pour développer)
Recommandé par LinkedIn
****************************************************************
* This program demonstrates the following Language *
* Environment callable *
* services : CEEMOUT, CEELOCT, CEEDATE *
****************************************************************
****************************************************************
** I D D I V I S I O N ***
****************************************************************
Identification Division.
Program-id. AWIXMP.
****************************************************************
** D A T A D I V I S I O N ***
****************************************************************
Data Division.
Working-Storage Section.
****************************************************************
** Declarations for the local date/time service.
****************************************************************
01 Feedback.
COPY CEEIGZCT
02 Fb-severity PIC 9(4) Binary.
02 Fb-detail PIC X(10).
77 Dest-output PIC S9(9) Binary.
77 Lildate PIC S9(9) Binary.
77 Lilsecs COMP-2.
77 Greg PIC X(17).
****************************************************************
** Declarations for messages and pattern for date formatting.
****************************************************************
01 Pattern.
02 PIC 9(4) Binary Value 45.
02 PIC X(45) Value
"Today is Wwwwwwwwwwwwz, Mmmmmmmmmmz ZD, YYYY.".
77 Start-Msg PIC X(80) Value
"Callable Service example starting.".
77 Ending-Msg PIC X(80) Value
"Callable Service example ending.".
01 Msg.
02 Stringlen PIC S9(4) Binary.
02 Str .
03 PIC X Occurs 1 to 80 times
Depending on Stringlen.
****************************************************************
** P R O C D I V I S I O N ***
****************************************************************
Procedure Division.
000-Main-Logic.
Perform 100-Say-Hello.
Perform 200-Get-Date.
Perform 300-Say-Goodbye.
Stop Run.
**
** Setup initial values and say we are starting.
**
100-Say-Hello.
Move 80 to Stringlen.
Move 02 to Dest-output.
Move Start-Msg to Str.
CALL "CEEMOUT" Using Msg Dest-output Feedback.
Move Spaces to Str. CALL "CEEMOUT" Using Msg Dest-output Feedback.
**
** Get the local date and time and display it.
**
200-Get-Date.
CALL "CEELOCT" Using Lildate Lilsecs Greg Feedback.
CALL "CEEDATE" Using Lildate Pattern Str Feedback.
CALL "CEEMOUT" Using Msg Dest-output Feedback.
Move Spaces to Str.
CALL "CEEMOUT" Using Msg Dest-output Feedback.
**
** Say Goodbye.
**
300-Say-Goodbye.
Move Ending-Msg to Str.
CALL "CEEMOUT" Using Msg Dest-output Feedback.
End program AWIXMP.
Comme je ne suis pas expert du Cobol, demandons à Copilot de m’expliquer ce que fait ce code Cobol qui fait tout de même 79 lignes 😊.
Voici sa réponse :
Bien sûr, je peux expliquer ce code COBOL.
1. Identification Division : Cette section identifie le programme. Ici, le programme est identifié par "AWIXMP".
2. Data Division : Cette section est utilisée pour déclarer toutes les variables utilisées dans le programme. Il y a plusieurs sections dans la division de données, dont la section de stockage de travail est utilisée ici.
3. Working-Storage Section : Cette section est utilisée pour déclarer les variables temporaires qui sont utilisées dans le programme. Ici, plusieurs variables sont déclarées, y compris Feedback, Dest-output, Lildate, Lilsecs, Greg, Pattern, Start-Msg, Ending-Msg et Msg.
4. Procedure Division : Cette section contient le code qui est exécuté. Ici, il y a trois procédures principales : 100-Say-Hello, 200-Get-Date et 300-Say-Goodbye.
o 100-Say-Hello : Cette procédure affiche un message indiquant que l'exemple de service appelable commence.
o 200-Get-Date : Cette procédure obtient la date et l'heure locales et les affiche.
o 300-Say-Goodbye : Cette procédure affiche un message indiquant que l'exemple de service appelable se termine.
5. CALL "CEEMOUT" : C'est un appel à un service qui écrit une chaîne de caractères sur un périphérique de sortie. Il est utilisé pour afficher les messages sur la console.
6. CALL "CEELOCT" : C'est un appel à un service qui obtient la date et l'heure locales.
7. CALL "CEEDATE" : C'est un appel à un service qui formate une date selon un modèle spécifié.
8. Stop Run : C'est une instruction qui termine l'exécution du programme.
En résumé, ce programme COBOL est un exemple simple qui affiche un message de début, la date et l'heure locales, puis un message de fin.
La réponse est très pertinente pour quelqu’un qui ne maitrise pas Cobol 😊 ou qui est onboardé sur un nouveau projet.
Maintenant faisons le test final : Convertir ce code en C#.
Tout d’abord, Copilot commence par m’expliquer que ce n’est pas simple à cause principalement d’une structuration différente entre les 2 langages :
“Converting COBOL to C# is not a straightforward task due to the significant differences in the structure and syntax of the two languages. However, I can provide a rough equivalent of the COBOL code in C#. Please note that this conversion might not be perfect and may require additional adjustments to fit your specific needs.”
Puis il me fait la conversion. Certes mon exemple est relativement simple mais il a réussi à le faire 😊.
using System;
public class Program
{
public static void Main()
{
SayHello();
GetDate();
SayGoodbye();
}
static void SayHello()
{
Console.WriteLine("Callable Service example starting.");
}
static void GetDate()
{
DateTime currentDate = DateTime.Now;
Console.WriteLine($"Today is {currentDate:dddd, MMMM dd, yyyy}.");
}
static void SayGoodbye()
{
Console.WriteLine("Callable Service example ending.");
}
}
Ensuite je peux bien entendu lui demander d’améliorer ce code en plaçant les chaines de texte sous forme de variable :
« peux-tu modifier le code généré en intégrant des variables pour les chaines de caractères ?”
Enfin, on retrouve ensuite toutes les fonctionnalités de GitHub Copilot comme la création de tests unitaires, …
Conclusion
J'avoue finalement être surpris qu'il puisse réussir à le faire. L'un des inconvénient est que cette conversion se fait fichier par fichier et ne tient pas compte d'une certaine consistence d'une application complète.
Chez Avanade , on n'a pas attendu GenAI pour faire ce genre de conversion, nous avons développé notre propre outil de conversion de code mainframe et notre propre méthodolgie. Je vous invite à en savoir plus sur ce lien : Mainframe Migration & Modernization | Avanade
Néanmoins GenAI nous aide à améliorer nos outils non pas sur la conversion en elle-même mais sur des sujets complémentaires comme la rétrodocumentation, les tests automatisés pour vérifier la non régression, etc...
Maintenant, A vous de jouer !
Group Manager Infrastructure at Avanade France
1 ansJe pense que l’intention est louable mais a quels risques on s’expose en utilisant l’IA pour convertir du code pour des plateformes hautement stratégiques dans les sociétés ? Il me paraît important de définir ce qui peut être pris en charge par l’IA et ce qui devra être pris par l’humain … cela impose de classifier en amont les parties de code par catégorie de risque (faible, moyen, sensibles ou ultra critiques) pour ensuite affecter des portions de code a l’IA (et non la totalité comme certains developpers de chez S…….G l’ont fait). Ceci permettra d’accélérer la modernisation du Mainframe sans créer une backdoor non souhaitée/desirée.
Marketing Director Avanade, an Accenture/Microsoft company | Business Partner | ABM certified
1 ansIntéressant ton article Michel, merci
Tech lead
1 ansEst-ce que changer le langage du mainframe suffit à le remplacer par une technologie plus moderne ? Les infrastructures ne sont-elles pas plus resilientes et prévues pour durer plus longtemps ? Je précise que je ne connais pas suffisamment l’univers mainframe pour argumenter, je pose juste la question
An architect who thrives on solving complex challenges with elegant and straightforward solutions.
1 ansgenial, j'avais la question avec un client :)