Remarque
Les réponses décrites dans cet article sont des exemples. Les réponses Copilot Chat ne sont pas déterministes, vous pouvez donc obtenir des réponses différentes de celles affichées ici.
Le code hĂ©ritĂ© est un code ancien, obsolĂšte ou qui nâest plus pris en charge par les dĂ©veloppeurs dâorigine. Il peut ĂȘtre difficile Ă maintenir et Ă Ă©tendre, car il peut ne pas suivre les meilleures pratiques modernes, telles que lâutilisation de conventions de nommage cohĂ©rentes ou la rĂ©daction dâune documentation claire.
La modernisation du code hérité peut vous aider à :
- AmĂ©liorer lâanalyse des performances et la scalabilitĂ©.
- Faciliter la maintenance et lâextension du code.
- RĂ©duire le risque dâintroduire des bogues lors des modifications.
- Faciliter les tests du code.
Copilot peut vous aider à moderniser votre code hérité en :
- Fournissant des suggestions pour refactoriser le code afin de suivre les meilleures pratiques modernes.
- **Générant de la documentation ** pour vous aider à comprendre comment le code fonctionne.
- **GĂ©nĂ©rant des tests ** pour vous aider Ă vĂ©rifier que vos modifications nâont pas introduit de bogues.
Exemple de scénario
Dans cet exemple, nous allons examiner un systÚme de gestion de comptes écrit en COBOL et le moderniser en Node.js. Vous trouverez le code COBOL dans le référentiel modernize-legacy-cobol-app
.
Le systÚme de gestion des comptes comprend trois fichiers clés :
main.cob
: le programme principal qui lit les entrĂ©es de lâutilisateur et appelle le sous-programme appropriĂ©.operations.cob
: un sous-programme qui effectue des opérations sur les données du compte, telles que le crédit, le débit et la consultation du solde.data.cob
: un sous-programme qui gĂšre le stockage du solde du compte.
Ătape 1 : obtenir une copie locale du rĂ©fĂ©rentiel
Avant de compiler et dâexĂ©cuter le programme, vous devez disposer du code localement. Si vous nâavez pas encore clonĂ© le rĂ©fĂ©rentiel, naviguez jusquâau rĂ©pertoire dans lequel vous souhaitez stocker le projet et exĂ©cutez la commande suivante :
git clone https://github.com/continuous-copilot/modernize-legacy-cobol-app.git
git clone https://github.com/continuous-copilot/modernize-legacy-cobol-app.git
Ătape 2 : compiler et exĂ©cuter le programme
Vous pouvez soit installer un compilateur COBOL dans votre environnement de développement préféré (par exemple, le compilateur open source GnuCOBOL), soit utiliser Copilot Chat dans GitHub Codespaces.
Si vous utilisez MacOS, vous pouvez installer GnuCOBOL Ă lâaide de Homebrew :
brew install gnu-cobol
brew install gnu-cobol
Si vous utilisez Codespaces ou un systĂšme Ubuntu Linux, vous pouvez installer GnuCOBOL Ă lâaide de apt
:
sudo apt-get update && \ sudo apt-get install gnucobol
sudo apt-get update && \
sudo apt-get install gnucobol
Pour compiler le code, liez les fichiers et créez un exécutable, exécutez la commande suivante à partir de la racine du référentiel :
cobc -x main.cob operations.cob data.cob -o accountsystem
cobc -x main.cob operations.cob data.cob -o accountsystem
Pour exécuter le programme, utilisez la commande suivante :
./accountsystem
./accountsystem
Ătape 3 : expliquer les fichiers et le code
La premiÚre étape de la modernisation du code consiste à comprendre son fonctionnement. Vous pouvez demander à Copilot Chat d'expliquer le code dans chaque fichier.
Ouvrez le référentiel dans votre IDE, puis, dans le panneau Copilot Chat, entrez l'invite suivante.
Exemples dâinvite 1
/explain #file:main.cob #file:operations.cob #file:data.cob Can you please create a high level overview of the app. It will be great if you can explain each file in detail and how they are linked.
Exemples de réponse 1
Voici un extrait de la réponse au prompt ci-dessus :
Sure! Here's a high-level overview of the COBOL application, along with detailed explanations of each file and how they are linked together.
High-Level Overview
This COBOL application simulates an account management system. It allows users to view the current balance, credit the account, debit the account, and exit the application. The application is divided into three main COBOL source files: main.cob, operations.cob, and data.cob. ...
Ătape 4 : tracer le flux de donnĂ©es entre les fichiers
LâĂ©tape suivante consiste Ă comprendre comment les fichiers sont liĂ©s. Vous pouvez utiliser @workspace
pour crĂ©er un diagramme de flux de donnĂ©es pour lâapplication.
Remarque
Le participant au chat @workspace
dans VS Code et Visual Studio fournit Ă Copilot le contexte de tout le code de votre espace de travail. Vous pouvez utiliser @workspace
lorsque vous souhaitez que Copilot prenne en compte la structure de votre projet et la maniÚre dont les différentes parties de votre code interagissent. Si vous utilisez un IDE JetBrains, utilisez @project
plutĂŽt que @workspace
.
Exemple d'invite 2
@workspace can you create a sequence diagram of the app showing the data flow of the app. Please create this in mermaid format so that I can render this in a markdown file.
Copilot gĂ©nĂšre le balisage Mermaid pour un diagramme de sĂ©quence complet qui montre comment lâapplication fonctionne. Vous pouvez copier et coller ce balisage dans une application Mermaid pour gĂ©nĂ©rer le diagramme.
Ătape 5 : gĂ©nĂ©rer un plan de test
CrĂ©ez un plan de test pour vous assurer que lâapplication fonctionne comme prĂ©vu aprĂšs avoir apportĂ© des modifications. Vous pouvez utiliser @workspace
pour générer un plan de test qui couvre tous les fichiers du projet.
Exemple de prompt 3
@workspace The current Cobol app has no tests. Can you please create a test plan of current business logic that I can use to validate with business stakeholders about the current implementation.
Later I would like to use this test plan to create unit and integration tests in a node.js app. I am in the middle of transforming the current Cobol app to a node.js app.
The test plan should include the following:
1. Test Case ID
2. Test Case Description
3. Pre-conditions
4. Test Steps
5. Expected Result
6. Actual Result
7. Status (Pass/Fail)
8. Comments
Please create the test plan in a markdown table format. The test plan should cover all the business logic in the current Cobol app.
Convert this to markdown syntax to insert as a new file
Copilot gĂ©nĂšre un plan de test au format Markdown que vous pouvez utiliser pour valider lâapplication. Pour utiliser ce plan plus tard dans le processus, crĂ©ez un fichier appelĂ© TESTPLAN.md
et copiez-y le plan suggéré. Vous pourrez ainsi référencer le plan de test lors de la génération des cas de test dans les étapes suivantes.
Ătape 6 : convertir les fichiers de COBOL en Node.js
LâĂ©tape suivante consiste Ă convertir les fichiers COBOL en Node.js. Il est important de garder Ă lâesprit les pratiques suivantes concernant les prompts :
- Fournir un contexte
- Donner des instructions claires
- Ătre prĂ©cis sur le rĂ©sultat que vous souhaitez obtenir
Commencez par créer un répertoire temporaire au sein de votre projet, dans lequel vous enregistrerez les fichiers JavaScript que vous allez créer.
mkdir temp-JS-project-directory
mkdir temp-JS-project-directory
Ensuite, convertissez de maniÚre itérative les fichiers COBOL en Node.js.
Exemple de prompt 4
Can you convert code in #file:main.cob to node.js?
Exemples de réponse 4
Sure! Here is the equivalent Node.js code for the main.cob file. This code will simulate the same account management system functionality.
### COBOL Code:
main.cob
```COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. MainProgram.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CONTINUE-FLAG PIC X VALUE 'Y'.
01 USER-CHOICE PIC 9.
01 FINAL-BALANCE PIC 9(6)V99 VALUE 1000.00.
PROCEDURE DIVISION.
PERFORM UNTIL CONTINUE-FLAG = 'N'
DISPLAY "1. View Balance"
DISPLAY "2. Credit Account"
DISPLAY "3. Debit Account"
DISPLAY "4. Exit"
ACCEPT USER-CHOICE
EVALUATE USER-CHOICE
WHEN 1
CALL 'Operations' USING 'TOTAL'
WHEN 2
CALL 'Operations' USING 'CREDIT'
WHEN 3
CALL 'Operations' USING 'DEBIT'
WHEN 4
MOVE 'N' TO CONTINUE-FLAG
DISPLAY "Exiting the program. Goodbye!"
WHEN OTHER
DISPLAY "Invalid choice. Please try again."
END-EVALUATE
END-PERFORM
STOP RUN.
### Node.js Code: `main.js`
```javascript
const readline = require('readline');
let continueFlag = 'Y';
let finalBalance = 1000.00;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function displayMenu() {
console.log("1. View Balance");
console.log("2. Credit Account");
console.log("3. Debit Account");
console.log("4. Exit");
}
function handleUserChoice(choice) {
switch (choice) {
case '1':
viewBalance();
break;
case '2':
creditAccount();
break;
case '3':
debitAccount();
break;
case '4':
continueFlag = 'N';
console.log("Exiting the program. Goodbye!");
rl.close();
break;
default:
console.log("Invalid choice. Please try again.");
promptUser();
break;
}
}
function viewBalance() {
console.log(`Current balance: ${finalBalance.toFixed(2)}`);
promptUser();
}
function creditAccount() {
rl.question("Enter credit amount: ", (amount) => {
amount = parseFloat(amount);
if (!isNaN(amount) && amount > 0) {
finalBalance += amount;
console.log(`Amount credited. New balance: ${finalBalance.toFixed(2)}`);
} else {
console.log("Invalid amount. Please try again.");
}
promptUser();
});
}
function debitAccount() {
rl.question("Enter debit amount: ", (amount) => {
amount = parseFloat(amount);
if (!isNaN(amount) && amount > 0) {
if (finalBalance >= amount) {
finalBalance -= amount;
console.log(`Amount debited. New balance: ${finalBalance.toFixed(2)}`);
} else {
console.log("Insufficient funds for this debit.");
}
} else {
console.log("Invalid amount. Please try again.");
}
promptUser();
});
}
function promptUser() {
if (continueFlag === 'Y') {
displayMenu();
rl.question("Select an option: ", handleUserChoice);
}
}
promptUser();
This Node.js code replicates the functionality of the COBOL main.cob file, providing a simple command-line interface for viewing the balance, crediting the account, debiting the account, and exiting the application.
Vous devez examiner attentivement le code suggĂ©rĂ© avant de lâutiliser. Une fois que vous ĂȘtes satisfait du code gĂ©nĂ©rĂ©, suivez ces Ă©tapes pour lâenregistrer localement et terminer la conversion :
- Dans le répertoire temporaire que vous avez créé précédemment, créez un fichier appelé
main.js
. - Copiez le code généré dans le panneau Copilot Chat et collez-le dans
main.js
. - Enregistrez le fichier.
- Utilisez des prompts similaires pour convertir
operations.cob
etdata.cob
en Node.js. - Créez des fichiers JavaScript correspondants,
operations.js
etdata.js
, dans le mĂȘme rĂ©pertoire temporaire. - Copiez et collez le code gĂ©nĂ©rĂ© dans chaque fichier, puis enregistrez-les.
Ătape 7 : relier les fichiers et configurer un projet Node.js fonctionnel
Une fois que vous avez converti tous les fichiers en Node.js, vous devez les relier et configurer un projet Node.js fonctionnel.
-
Accédez au répertoire temporaire dans votre terminal.
-
Exécutez la commande suivante pour créer un fichier
package.json
:Shell npm init -y
npm init -y
-
Si votre application nécessite des packages externes, installez-les en exécutant :
Shell npm install
npm install
-
DĂ©marrez lâapplication en exĂ©cutant :
Shell npm start
npm start
Ă ce stade, lâapplication Node.js peut ne pas rĂ©pliquer entiĂšrement les fonctionnalitĂ©s du programme COBOL dâorigine. Par exemple, les soldes peuvent ne pas se mettre Ă jour correctement ou les calculs peuvent ne pas correspondre Ă la logique COBOL.
Pour perfectionner lâapplication, vous devrez :
-
Identifier les comportements incorrects en exécutant le programme et en le comparant à la version COBOL.
-
Travailler de maniĂšre itĂ©rative avec Copilot pour ajuster la logique jusquâĂ ce que le programme Node.js se comporte comme prĂ©vu.
-
Utiliser des prompts ciblés pour déboguer et améliorer des parties spécifiques du code, telles que :
@workspace - analyze main.js and ensure account balance updates correctly when crediting an account.
La refactorisation du code hĂ©ritĂ© nâest pas toujours un processus en une seule Ă©tape. Copilot peut vous aider Ă dĂ©boguer et Ă amĂ©liorer les fonctionnalitĂ©s Ă mesure que vous perfectionnez votre nouvelle implĂ©mentation Node.js.
Ătape 8 : gĂ©nĂ©rer des tests unitaires et dâintĂ©gration
LâĂ©tape suivante consiste Ă gĂ©nĂ©rer des tests unitaires et dâintĂ©gration pour sâassurer que lâapplication fonctionne comme prĂ©vu. Vous pouvez utiliser @workspace
pour générer un plan de test qui couvre tous les fichiers du projet.
Exemple de prompt 5
@workspace I would like to create unit and integration tests cases from the test plan mentioned in #file:TESTPLAN.md file The node.js code is in node-accounting-app folder and I am looking to generate tests for #file:operations.js file. Use a popular testing framework and also provide all the dependencies required to run the tests.
Exemples de réponse 5
Copilot génÚre un certain nombre de tests dans Jest, une infrastructure de test JavaScript, avec un guide complet, étape par étape, sur la façon de les implémenter et de les exécuter.
Voici un extrait de la réponse au prompt ci-dessus :
âThis test plan covers the main functionalities of the COBOL application, including viewing the balance, crediting the account, debiting the account, and exiting the application. The test cases are implemented using Jest, a popular testing framework for Node.js. Validate this test plan with the business stakeholders to ensure it meets the business requirements. Once validated, you can use this plan to create corresponding unit tests and integration tests for the Node.js application.â
Ătape 9 : exĂ©cuter des tests et perfectionner le code
AprĂšs avoir gĂ©nĂ©rĂ© le plan de test et rĂ©digĂ© les tests, vous devrez les exĂ©cuter et corriger les tests Ă©chouĂ©s. Les tests sont un processus itĂ©ratif, vous devrez peut-ĂȘtre modifier le code pour rĂ©soudre les problĂšmes, puis relancer les tests jusquâĂ ce que tout soit validĂ©.
Si un test Ă©choue, utilisez Copilot pour faciliter le dĂ©bogage et perfectionner lâimplĂ©mentation.
Exemple de prompt 6
@workspace - analyze test failures in operations.test.js and suggest fixes to match the expected behavior.
MĂȘme si tous les tests sont rĂ©ussis, le programme peut toujours prĂ©senter des problĂšmes. Les tests automatisĂ©s ne dĂ©tectent pas toujours les fonctionnalitĂ©s manquantes ou les erreurs logiques. Des tests manuels sont donc nĂ©cessaires pour sâassurer que lâapplication fonctionne comme prĂ©vu.
Ătape 10 : dĂ©placer le projet JavaScript vers un nouvel emplacement
Une fois que lâapplication fonctionne comme prĂ©vu, dĂ©placez le nouveau projet JavaScript hors du rĂ©pertoire COBOL pour le garder sĂ©parĂ©.
-
Accédez au répertoire parent du projet COBOL.
-
Déplacez le projet JavaScript vers un nouvel emplacement :
Shell mv modernize-legacy-cobol-app new-js-project
mv modernize-legacy-cobol-app new-js-project
-
AccĂ©dez au nouveau rĂ©pertoire du projet et vĂ©rifiez que tout sâexĂ©cute correctement :
Shell cd new-js-project npm start
cd new-js-project npm start
DĂ©sormais, lâapplication Node.js restructurĂ©e se trouve dans son propre dossier de projet autonome, sĂ©parĂ© des fichiers COBOL dâorigine.
Conclusion
Dans cet exemple, nous avons examinĂ© un systĂšme de gestion de comptes Ă©crit en COBOL et lâavons modernisĂ© en Node.js. Nous avons utilisĂ© Copilot Chat pour expliquer le code, schĂ©matiser le flux de donnĂ©es, gĂ©nĂ©rer un plan de test et convertir le code en Node.js. En suivant ces Ă©tapes, vous pouvez moderniser votre code existant et faciliter sa maintenance et son extension. Voici quelques astuces supplĂ©mentaires pour moderniser le code hĂ©ritĂ© :
- Les meilleures pratiques en matiÚre de prompts sont essentielles : la qualité de vos prompts détermine la qualité des suggestions de Copilot. Fournissez un contexte clair, décomposez les tùches complexes en étapes plus petites, donnez des exemples et fixez des objectifs spécifiques à atteindre pour Copilot. Cela rend votre flux de travail plus fluide et vos résultats plus précis
- Passez en revue le code avant de lâutiliser : assurez-vous de bien comprendre le code fourni par Copilot avant de lâutiliser dans votre application. Cela vous aidera Ă dĂ©tecter les Ă©ventuels problĂšmes et Ă vous assurer que le code rĂ©pond Ă vos besoins.
- Validez vos modifications : aprĂšs avoir apportĂ© des modifications au code, il est important de vĂ©rifier que lâapplication fonctionne toujours comme prĂ©vu. Vous pouvez utiliser le plan de test gĂ©nĂ©rĂ© par Copilot pour crĂ©er des tests unitaires et dâintĂ©gration pour lâapplication.
Travaux pratiques
Essayez l'exercice Moderniser votre code existant avec GitHub Copilot Exercice de compétences pour une expérience pratique de la mise à jour d'un code existant avec GitHub Copilot.