GenAI et le mainframe
généré par Microsoft Designer

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)

  ****************************************************************
      *  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 !

Christophe SIMIAND-BUISSONNET

Group Manager Infrastructure at Avanade France

1 ans

Je 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.

Stephanie Moret

Marketing Director Avanade, an Accenture/Microsoft company | Business Partner | ABM certified

1 ans

Intéressant ton article Michel, merci

Est-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

Louis-Guillaume "LG" M.

An architect who thrives on solving complex challenges with elegant and straightforward solutions.

1 ans

genial, j'avais la question avec un client :)

Identifiez-vous pour afficher ou ajouter un commentaire

Plus d’articles de Michel HUBERT

  • Developer is Dead, Long live developer (1/2)

    Developer is Dead, Long live developer (1/2)

    The Pioneers of the Machine It all begins in the first half of the 20th century. As the world modernizes at an…

    2 commentaires
  • Azure Migrate application and code assessment

    Azure Migrate application and code assessment

    When I need to assess an application in order to migrate it to the cloud, I use the solution CAST Highlight. Microsoft…

  • Mesurer la productivité des développeurs

    Mesurer la productivité des développeurs

    Le développement logiciel est constamment sous-estimé ! Malgré, à présent de nombreuses années d'expérience en…

    1 commentaire
  • ChatGPT, décevant...

    ChatGPT, décevant...

    Les réponses apportées par ChatGPT sont-elles toutes pertinentes ? La question de "Comment faire confiance" et "Comment…

    9 commentaires
  • ChatGPT (&OpenAI), Terraform & VSCode

    ChatGPT (&OpenAI), Terraform & VSCode

    Récemment j'ai suivi les vidéos de Stanislas Quastana et Pierre Chesne sur #github copilot (vidéo très bien faite comme…

    2 commentaires
  • ChatGPT (& OpenAI) pour les équipes support

    ChatGPT (& OpenAI) pour les équipes support

    De nos jours, on trouve beaucoup de réactions sur l'émergence de ChatGPT & OpenAI. Je me suis posé la question :…

    2 commentaires
  • Terraform et les API Azure

    Terraform et les API Azure

    Si vous souhaitez déployer des ressources Azure non couvertes par les modules natifs #Terraform, vous pouvez appeler…

    1 commentaire
  • Réaffecter une licence Windows 365

    Réaffecter une licence Windows 365

    Suite à la crise sanitaire, les solutions de Bureaux Virtuels ont été un vrai facilitateur pour le télétravail…

  • Bureaux Virtuels (VDI)

    Bureaux Virtuels (VDI)

    La crise sanitaire a été un véritable accélérateur de la transformation numérique des entreprises. Tout le monde le…

    2 commentaires
  • (R)évolution du modèle des ESN

    (R)évolution du modèle des ESN

    Introduction Les ESN se portent globalement bien, portées par la demande de transformation numérique (ou digitale) des…

    5 commentaires

Autres pages consultées

Explorer les sujets