{"meta":{"title":"Modernización del código heredado con GitHub Copilot","intro":"Chat de Copiloto ayuda a modernizar el código heredado mediante la sugerencia de refactorizaciones y la creación de pruebas para detectar posibles problemas.","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/tutorials","title":"Tutoriales"},{"href":"/es/copilot/tutorials/modernize-legacy-code","title":"Modernización del código heredado"}],"documentType":"article"},"body":"# Modernización del código heredado con GitHub Copilot\n\nChat de Copiloto ayuda a modernizar el código heredado mediante la sugerencia de refactorizaciones y la creación de pruebas para detectar posibles problemas.\n\n> \\[!NOTE] Las respuestas que se muestran en este artículo son ejemplos.\n> Chat de Copiloto las respuestas son no deterministas, por lo que puede obtener respuestas diferentes de las que se muestran aquí.\n\nEl código heredado es código antiguo, obsoleto o que ya no recibe soporte de los desarrolladores originales. Puede ser difícil mantener y ampliar porque es posible que no siga los procedimientos recomendados modernos, como el uso de convenciones de nomenclatura coherentes o la escritura de documentación clara.\n\nLa modernización del código heredado puede ayudarte a:\n\n* Mejorar el rendimiento y la escalabilidad.\n* Facilitar el mantenimiento y la extensión del código.\n* Reducir el riesgo de introducir errores al realizar cambios.\n* Facilitar la prueba del código.\n\nCopilot puede ayudarle a modernizar el código heredado mediante:\n\n* **Proporcionar sugerencias** para refactorizar el código para seguir los procedimientos recomendados modernos.\n* **Generar documentación** para ayudarte a comprender cómo funciona el código.\n* **Generar pruebas** para ayudarte a comprobar que los cambios no han introducido errores.\n\n## Escenario de ejemplo\n\nEn este ejemplo, examinaremos un sistema de administración de cuentas escrito en COBOL y lo modernizaremos en Node.js. Puede encontrar el código COBOL en el repositorio [`modernize-legacy-cobol-app`](https://github.com/continuous-copilot/modernize-legacy-cobol-app).\n\nEl sistema de administración de cuentas consta de tres archivos clave:\n\n* `main.cob`: el programa principal que lee la entrada del usuario y llama al subprograma adecuado.\n* `operations.cob`: subprograma que realiza operaciones en los datos de la cuenta, como crédito, débito y visualización del saldo.\n* `data.cob`: un subprograma que administra el almacenamiento del saldo de la cuenta.\n\n## Paso 1: Obtener una copia local del repositorio\n\nAntes de compilar y ejecutar el programa, debes tener el código localmente. Si aún no ha clonado el repositorio, vaya al directorio donde desea almacenar el project y ejecute el siguiente comando:\n\n```shell copy\ngit clone https://github.com/continuous-copilot/modernize-legacy-cobol-app.git\n```\n\n## Paso 2: Compilar y ejecutar el programa\n\nPuede instalar un compilador COBOL en su entorno de desarrollo preferido (por ejemplo, el compilador gnuCOBOL de código abierto) o usar Chat de Copiloto en GitHub Codespaces.\n\nSi usas MacOS, puedes instalar GnuCOBOL mediante [Homebrew](https://brew.sh/):\n\n```shell copy\nbrew install gnu-cobol\n```\n\nSi usa Codespaces o un sistema Ubuntu Linux, puede instalar GnuCOBOL mediante `apt`:\n\n```shell copy\nsudo apt-get update && \\\nsudo apt-get install gnucobol\n```\n\nPara compilar el código, vincula los archivos y crea un archivo ejecutable, ejecuta el siguiente comando desde la raíz del repositorio:\n\n```shell copy\ncobc -x main.cob operations.cob data.cob -o accountsystem\n```\n\nPara ejecutar el programa, usa el siguiente comando:\n\n```shell copy\n./accountsystem\n```\n\n## Paso 3: Explicar los archivos y el código\n\nEl primer paso para modernizar el código es comprender cómo funciona. Puede pedir que Chat de Copiloto explique el código en cada archivo.\n\nAbra el repositorio en su IDE y, después, en el panel Chat de Copiloto, escriba la siguiente solicitud.\n\n### Ejemplo de solicitud 1\n\n```copilot copy\n/explain #file:main.cob #file:operations.cob #file:data.cob. Create a high level overview of the app. Explain each file in detail and how they are linked.\n```\n\n### Respuesta de ejemplo 1\n\nEsto es un extracto de la respuesta a la solicitud anterior:\n\n`Sure! Here's a high-level overview of the COBOL application, along with detailed explanations of each file and how they are linked together.`\n\n`High-Level Overview`\n\n`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. ...`\n\n## Paso 4: Trazar el data flow entre los archivos\n\nEl siguiente paso es comprender cómo están vinculados los archivos. Puede usar `@workspace` para crear un diagrama de data flow para la aplicación.\n\n> \\[!NOTE]\n> El `@workspace` participante del chat en VS Code y Visual Studio ofrece Copilot información contextual sobre todo el código en tu área de trabajo. Puede usar `@workspace` cuando desee Copilot tener en cuenta la estructura del proyecto y cómo interactúan diferentes partes del código. Si usa un IDE de JetBrains, use `@project` en lugar de `@workspace`.\n\n### Ejemplo de mensaje 2\n\n```copilot copy\n@workspace Create a sequence diagram of the app showing the data flow of the app. Create this in mermaid format so that I can render this in a markdown file.\n```\n\nCopilot genera la sintaxis Mermaid para un diagrama de secuencia completo que muestra cómo funciona la aplicación. Puedes copiar y pegar este marcado en una aplicación Mermaid para generar el diagrama.\n\n## Paso 5: Generación de un plan de pruebas\n\nCrea un plan de pruebas para asegurarte de que la aplicación funciona según lo previsto después de realizar cambios. Puede usar `@workspace` para generar un plan de prueba que abarque todos los archivos de la project.\n\n### Ejemplo de indicación 3\n\n```copilot copy\n@workspace The current COBOL app has no tests. Create a test plan of current business logic that I can use to validate with business stakeholders about the current implementation.\n\nLater 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.\n\nThe test plan should include the following:\n\n1. Test Case ID\n2. Test Case Description\n3. Pre-conditions\n4. Test Steps\n5. Expected Result\n6. Actual Result\n7. Status (Pass/Fail)\n8. Comments\n\nCreate the test plan in a markdown table format. The test plan should cover all the business logic in the current COBOL app.\n\nConvert this to markdown syntax to insert as a new file\n```\n\nCopilot genera un plan de prueba en formato Markdown que puede usar para validar la aplicación. Para usar este plan más adelante en el proceso, crea un archivo denominado `TESTPLAN.md` y copia el plan sugerido en él. Esto te permitirá hacer referencia al plan de prueba al generar casos de prueba en los pasos siguientes.\n\n## Paso 6: Convertir los archivos de COBOL a Node.js\n\nEl siguiente paso es convertir los archivos COBOL en Node.js. Es importante tener en cuenta las siguientes prácticas recomendadas:\n\n* Proporciona contexto\n* Proporciona instrucciones claras\n* Sé específico sobre el resultado que deseas lograr\n\nEmpiece por crear un directorio temporal dentro de la project, en el que se guardarán los archivos de JavaScript que va a crear.\n\n```shell copy\nmkdir temp-JS-project-directory\n```\n\nA continuación, convierte iterativamente los archivos COBOL en Node.js.\n\n### Mensaje de ejemplo 4\n\n```copilot copy\nConvert the code in #file:main.cob to node.js\n```\n\n### Respuesta de ejemplo 4\n\n````shell\nSure! Here is the equivalent Node.js code for the main.cob file. This code will simulate the same account management system functionality.\n\n### COBOL Code:\n\nmain.cob\n\n```COBOL\nIDENTIFICATION DIVISION.\n       PROGRAM-ID. MainProgram.\n\n       DATA DIVISION.\n       WORKING-STORAGE SECTION.\n       01  CONTINUE-FLAG      PIC X VALUE 'Y'.\n       01  USER-CHOICE        PIC 9.\n       01  FINAL-BALANCE      PIC 9(6)V99 VALUE 1000.00.\n\n       PROCEDURE DIVISION.\nPERFORM UNTIL CONTINUE-FLAG = 'N'\nDISPLAY \"1. View Balance\"\nDISPLAY \"2. Credit Account\"\nDISPLAY \"3. Debit Account\"\nDISPLAY \"4. Exit\"\nACCEPT USER-CHOICE\n\nEVALUATE USER-CHOICE\nWHEN 1\nCALL 'Operations' USING 'TOTAL'\nWHEN 2\nCALL 'Operations' USING 'CREDIT'\nWHEN 3\nCALL 'Operations' USING 'DEBIT'\nWHEN 4\nMOVE 'N' TO CONTINUE-FLAG\nDISPLAY \"Exiting the program. Goodbye!\"\nWHEN OTHER\nDISPLAY \"Invalid choice. Please try again.\"\nEND-EVALUATE\nEND-PERFORM\nSTOP RUN.\n\n### Node.js Code: `main.js`\n```javascript\nconst readline = require('readline');\n\nlet continueFlag = 'Y';\nlet finalBalance = 1000.00;\n\nconst rl = readline.createInterface({\n    input: process.stdin,\n    output: process.stdout\n});\n\nfunction displayMenu() {\n    console.log(\"1. View Balance\");\n    console.log(\"2. Credit Account\");\n    console.log(\"3. Debit Account\");\n    console.log(\"4. Exit\");\n}\n\nfunction handleUserChoice(choice) {\n    switch (choice) {\n        case '1':\n            viewBalance();\n            break;\n        case '2':\n            creditAccount();\n            break;\n        case '3':\n            debitAccount();\n            break;\n        case '4':\n            continueFlag = 'N';\n            console.log(\"Exiting the program. Goodbye!\");\n            rl.close();\n            break;\n        default:\n            console.log(\"Invalid choice. Please try again.\");\n            promptUser();\n            break;\n    }\n}\n\nfunction viewBalance() {\n    console.log(`Current balance: ${finalBalance.toFixed(2)}`);\n    promptUser();\n}\n\nfunction creditAccount() {\n    rl.question(\"Enter credit amount: \", (amount) =&gt; {\n        amount = parseFloat(amount);\n        if (!isNaN(amount) &amp;&amp; amount &gt; 0) {\n            finalBalance += amount;\n            console.log(`Amount credited. New balance: ${finalBalance.toFixed(2)}`);\n        } else {\n            console.log(\"Invalid amount. Please try again.\");\n        }\n        promptUser();\n    });\n}\n\nfunction debitAccount() {\n    rl.question(\"Enter debit amount: \", (amount) =&gt; {\n        amount = parseFloat(amount);\n        if (!isNaN(amount) &amp;&amp; amount &gt; 0) {\n            if (finalBalance &gt;= amount) {\n                finalBalance -= amount;\n                console.log(`Amount debited. New balance: ${finalBalance.toFixed(2)}`);\n            } else {\n                console.log(\"Insufficient funds for this debit.\");\n            }\n        } else {\n            console.log(\"Invalid amount. Please try again.\");\n        }\n        promptUser();\n    });\n}\n\nfunction promptUser() {\n    if (continueFlag === 'Y') {\n        displayMenu();\n        rl.question(\"Select an option: \", handleUserChoice);\n    }\n}\n\npromptUser();\n\nThis 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.\n````\n\nDebes revisar el código sugerido de forma exhaustiva antes de usarlo. Una vez que estés satisfecho con el código generado, sigue estos pasos para guardarlo localmente y completar la conversión:\n\n1. En el directorio temporal que creaste anteriormente, crea un archivo denominado `main.js`.\n2. Copie el código generado desde el Chat de Copiloto panel y péguelo en `main.js`.\n3. Guarde el archivo.\n4. Usa indicaciones similares para convertir `operations.cob` y `data.cob` en Node.js.\n5. Crea los archivos de JavaScript correspondientes `operations.js` y `data.js`, en el mismo directorio temporal.\n6. Copia y pega el código generado en cada archivo y guárdalos.\n\n## Paso 7: Enlazar los archivos y configurar un proyecto de trabajo de Node.js\n\nUna vez que haya convertido todos los archivos en Node.js, debe vincularlos juntos y configurar un Node.js project de trabajo.\n\n1. Ve al directorio temporal en el terminal.\n\n2. Ejecuta el comando siguiente para crear un archivo `package.json`:\n\n   ```shell copy\n   npm init -y\n   ```\n\n3. Si la aplicación requiere paquetes externos, instálalos mediante la ejecución de:\n\n   ```shell copy\n   npm install\n   ```\n\n4. Inicie la aplicación; para ello, ejecute:\n\n   ```shell copy\n   npm start\n   ```\n\nEn este momento, es posible que la aplicación Node.js no replique completamente la funcionalidad del programa COBOL original. Por ejemplo, es posible que los saldos no se actualicen correctamente o que los cálculos no coincidan con la lógica de COBOL.\n\nPara refinar la aplicación, deberás hacer lo siguiente:\n\n* **Identifica el comportamiento incorrecto** ejecutando el programa y comparándolo con la versión de COBOL.\n* **Trabajar de forma iterativa con Copilot** para ajustar la lógica hasta que el programa de Node.js se comporta según lo previsto.\n* **Usa indicaciones dirigidas** para depurar y mejorar partes específicas del código, como:\n\n  ```copilot copy\n  @workspace - analyze main.js and ensure the account balance updates correctly when crediting an account.\n  ```\n\nLa refactorización del código heredado no siempre es un proceso de un solo paso:Copilot puede ayudar a depurar y mejorar la funcionalidad a medida que refina la nueva implementación de Node.js.\n\n## Paso 8: Generación de pruebas unitarias y de integración\n\nEl siguiente paso es generar pruebas unitarias y de integración para asegurarte de que la aplicación funciona según lo previsto. Puede usar `@workspace` para generar un plan de prueba que abarque todos los archivos de la project.\n\n### Ejemplo de mensaje 5\n\n```copilot copy\n@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 the 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.\n```\n\n### Respuesta de ejemplo 5\n\nCopilot genera una serie de pruebas en Jest, un marco de pruebas de JavaScript, con una guía completa paso a paso sobre cómo implementarlas y ejecutarlas.\n\nEsto es un extracto de la respuesta a la solicitud anterior:\n\n`“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.”`\n\n## Paso 9: Ejecutar pruebas y refinar el código\n\nDespués de generar el plan de prueba y escribir las pruebas, deberás ejecutarlas y corregir las pruebas con errores. Las pruebas son un proceso iterativo, es posible que tengas que modificar el código para resolver problemas y, a continuación, volver a ejecutar las pruebas hasta que se supere todo.\n\nSi se produce un error en una prueba, use Copilot para ayudar a depurar y refinar la implementación.\n\n### Indicación de ejemplo 6\n\n```copilot copy\n@workspace - analyze test failures in operations.test.js and suggest fixes to match the expected behavior.\n```\n\nIncluso si se superan todas las pruebas, es posible que el programa todavía tenga problemas. Las pruebas automatizadas no siempre detectan errores de funcionalidad o lógica que faltan, por lo que es necesario realizar pruebas manuales para asegurarte de que la aplicación se comporta según lo previsto.\n\n## Paso 10: Mover el proyecto de JavaScript a una nueva ubicación\n\nUna vez que la aplicación funciona según lo previsto, mueva el nuevo JavaScript project fuera del directorio COBOL para mantenerlo separado.\n\n1. Vaya al directorio primario del project COBOL.\n\n2. Mueve el proyecto de JavaScript a una nueva ubicación:\n\n   ```shell copy\n   mv modernize-legacy-cobol-app new-js-project\n   ```\n\n3. Vaya al nuevo directorio project y confirme que todo se ejecuta correctamente:\n\n   ```shell copy\n   cd new-js-project\n   npm start\n   ```\n\nAhora, la aplicación Node.js refactorizada se encuentra en su propia carpeta de proyecto, separada de los archivos COBOL originales.\n\n## Conclusión\n\nEn este ejemplo, examinamos un sistema de administración de cuentas escrito en COBOL y lo modernizamos en Node.js. Hemos usado Chat de Copiloto para explicar el código, trazar el flujo de datos, generar un plan de prueba y convertir el código en Node.js. Siguiendo estos pasos, puedes modernizar el código heredado y facilitar el mantenimiento y la extensión. Estas son algunas sugerencias adicionales para modernizar el código heredado:\n\n* **Las mejores prácticas de uso de comandos son clave**: la calidad de los comandos determina la calidad de las sugerencias.Copilot Proporcione un contexto claro, divida las tareas complejas en pasos más pequeños, proporcione ejemplos y proporcione Copilot objetivos específicos para trabajar. Esto hace que el flujo de trabajo sea más fluido y los resultados más precisos\n* **Revise el código antes de usarlo**: asegúrese de comprender el código que Copilot proporciona antes de usarlo en la aplicación. Esto te ayudará a detectar posibles problemas y a asegurarte de que el código cumple los requisitos.\n* **Valida los cambios**: después de realizar cambios en el código, es importante validar que la aplicación sigue funcionando según lo previsto. Puede usar el plan de prueba generado por Copilot para crear pruebas unitarias e de integración para la aplicación.\n\n## Ejercicios prácticos\n\nPractique la modernización del código heredado con el ejercicio de [Modernización de su código heredado con GitHub Copilot](https://github.com/skills/modernize-your-legacy-code-with-github-copilot).\n\nEn este ejercicio, aprenderá a:\n\n* Analice el código COBOL heredado con Copilot Chat de GitHub para comprender la lógica de negocios.\n* Genere documentación, como diagramas de flujo de datos de Sirena y planes de prueba.\n* Transforme un código base COBOL para Node.js con Copilot.\n* Cree pruebas unitarias basadas en el plan de pruebas generado.\n\n## Información adicional\n\n* [Documentación del código heredado](/es/copilot/copilot-chat-cookbook/documenting-code/documenting-legacy-code)\n* [Modernización del código heredado con GitHub Copilot: Sugerencias y ejemplos](https://github.blog/ai-and-ml/github-copilot/modernizing-legacy-code-with-github-copilot-tips-and-examples/) en el GitHub Blog"}