{"meta":{"title":"Modernisieren von Legacycode mit GitHub Copilot","intro":"Copilot Chat hilft beim Modernisieren von Legacycode, indem Sie Umgestaltungen vorschlagen und Tests erstellen, um potenzielle Probleme abzufangen.","product":"GitHub Copilot","breadcrumbs":[{"href":"/de/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/de/enterprise-cloud@latest/copilot/tutorials","title":"Anleitungen"},{"href":"/de/enterprise-cloud@latest/copilot/tutorials/modernize-legacy-code","title":"Modernisierung von Altsystemcode"}],"documentType":"article"},"body":"# Modernisieren von Legacycode mit GitHub Copilot\n\nCopilot Chat hilft beim Modernisieren von Legacycode, indem Sie Umgestaltungen vorschlagen und Tests erstellen, um potenzielle Probleme abzufangen.\n\n> \\[!NOTE] Bei den in diesem Artikel veranschaulichten Antworten handelt es sich um Beispiele.\n> Copilot Chat Antworten sind nicht deterministisch, daher erhalten Sie möglicherweise unterschiedliche Antworten von den hier gezeigten Antworten.\n\nLegacycode ist alter, veralteter oder nicht mehr von den ursprünglichen Entwickelnden unterstützter Code. Eine Verwaltung oder Erweiterung kann sich als schwierig erweisen, da er möglicherweise keine modernen Best Practices wie die Verwendung konsistenter Namenskonventionen oder das Verfassen einer klaren Dokumentation befolgt.\n\nDie Modernisierung von Legacy-Code kann Ihnen helfen:\n\n* Verbessern der Leistung und Skalierbarkeit\n* Machen Sie den Code leichter wartbar und erweiterbar.\n* Verringern des Risikos für die Einzuführung von Fehlern bei Änderungen\n* Einfacheres Testen von Code\n\nCopilot kann Ihnen dabei helfen, Ihren Legacycode zu modernisieren, indem Sie:\n\n* **Bereitstellen von Vorschlägen** zum Umgestalten des Codes, um moderne Best Practices zu befolgen\n* **Erstellung der Dokumentation**, um zu verstehen, wie der Code funktioniert.\n* **Generieren von Tests** zum Sicherstellen, dass durch Änderungen keine Fehler eingeführt wurden\n\n## Beispielszenario\n\nIn diesem Beispiel wird ein Kontoverwaltungssystem veranschaulicht, das in COBOL geschrieben wurde und in Node.js modernisiert wird. Sie finden den COBOL-Code im Repository [`modernize-legacy-cobol-app`](https://github.com/continuous-copilot/modernize-legacy-cobol-app).\n\nDas Kontoverwaltungssystem besteht aus drei wichtigen Dateien:\n\n* `main.cob`: Das Hauptprogramm, das Benutzereingaben liest und das entsprechende Unterprogramm aufruft\n* `operations.cob`: Ein Unterprogramm, das Vorgänge für die Kontodaten ausführt, z. B. das Anzeigen von Kredit, Debit und Saldo\n* `data.cob`: Ein Unterprogramm, das die Speicherung des Kontostands verwaltet.\n\n## Schritt 1: Abrufen einer lokalen Kopie des Repositorys\n\nBevor du das Programm kompilierst und ausführst, musst du lokal über den Code verfügen. Wenn Sie das Repository noch nicht geklont haben, navigieren Sie zu das Verzeichnis, in dem Sie das Projekt speichern möchten, und führen Sie den folgenden Befehl aus:\n\n```shell copy\ngit clone https://github.com/continuous-copilot/modernize-legacy-cobol-app.git\n```\n\n## Schritt 2: Kompilieren und Ausführen des Programms\n\nSie können entweder einen COBOL-Compiler in Ihrer bevorzugten Entwicklungsumgebung installieren (z. B. den Open Source GnuCOBOL-Compiler), oder Copilot Chat in GitHub Codespaces verwenden.\n\nAuf MacOS kannst du GnuCOBOL mithilfe von [Homebrew](https://brew.sh/) installieren:\n\n```shell copy\nbrew install gnu-cobol\n```\n\nWenn Sie Codespaces oder ein Ubuntu Linux-System verwenden, können Sie GnuCOBOL mit `apt` installieren:\n\n```shell copy\nsudo apt-get update && \\\nsudo apt-get install gnucobol\n```\n\nUm den Code zu kompilieren, die Dateien zu verknüpfen und eine ausführbare Datei zu erstellen, führe den folgenden Befehl aus dem Stammverzeichnis des Repositorys aus:\n\n```shell copy\ncobc -x main.cob operations.cob data.cob -o accountsystem\n```\n\nVerwende zum Ausführen des Programms den folgenden Befehl:\n\n```shell copy\n./accountsystem\n```\n\n## Schritt 3: Erläutern von Dateien und Code\n\nDer erste Schritt bei der Modernisierung des Codes besteht darin, seine Funktionsweise nachzuvollziehen. Sie können Copilot Chat bitten, den Code in jeder Datei zu erklären.\n\nÖffnen Sie das Repository in Ihrer IDE, und geben Sie dann im Copilot Chat Bereich die folgende Eingabeaufforderung ein.\n\n### Beispielprompt 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### Beispielantwort 1\n\nDieser Auszug stammt aus der Antwort auf den obigen Prompt:\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## Schritt 4: Diagramm des data flow zwischen den Dateien\n\nDer nächste Schritt besteht darin, die Verknüpfung der Dateien nachzuvollziehen. Sie können `@workspace` verwenden, um ein data flow Diagramm für die Anwendung zu erstellen.\n\n> \\[!NOTE]\n> Der `@workspace` Chatteilnehmer in VS Code und Visual Studio bietet Copilot mit Kontext zu allem Code in Ihrem Arbeitsbereich. Sie können `@workspace` verwenden, wenn Sie möchten, dass Copilot die Struktur Ihres Projekts und die Interaktion verschiedener Teile Ihres Codes berücksichtigt. Wenn Sie eine JetBrains-IDE verwenden, verwenden Sie `@project` anstelle von `@workspace`.\n\n### Beispielprompt 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 gibt das Mermaid-Markup für ein vollständiges Sequenzdiagramm aus, das zeigt, wie die Anwendung funktioniert. Du kannst dieses Markup kopieren und in eine Mermaid-Anwendung einfügen, um das Diagramm zu generieren.\n\n## Schritt 5: Generieren eines Testplans\n\nErstelle einen Testplan, um eine erwartungsgemäße Funktionsweise der Anwendung nach dem Vornehmen von Änderungen sicherzustellen. Sie können `@workspace` verwenden, um einen Testplan zu generieren, der alle Dateien im project abdeckt.\n\n### Beispielprompt 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 gibt einen Testplan im Markdown-Format aus, mit dem Sie die Anwendung überprüfen können. Um diesen Plan später im Prozess zu verwenden, erstelle eine Datei namens `TESTPLAN.md`, und füge den vorgeschlagenen Plan in der Datei ein. Auf diese Weise kannst du in den nächsten Schritten beim Generieren von Testfällen auf den Testplan verweisen.\n\n## Schritt 6: Konvertieren der Dateien von COBOL in Node.js\n\nDer nächste Schritt besteht darin, die COBOL-Dateien in Node.js zu konvertieren. Dabei sollte die folgende Vorgehensweise für Prompts berücksichtigt werden:\n\n* Bereitstellen von Kontext\n* Geben Sie klare Anweisungen\n* Seien Sie spezifisch bezüglich des gewünschten Ergebnisses\n\nErstellen Sie zunächst ein temporäres Verzeichnis in Ihrer project, in dem Sie die JavaScript-Dateien speichern, die Sie erstellen möchten.\n\n```shell copy\nmkdir temp-JS-project-directory\n```\n\nKonvertiere anschließend die COBOL-Dateien iterativ in Node.js.\n\n### Beispielprompt 4\n\n```copilot copy\nConvert the code in #file:main.cob to node.js\n```\n\n### Beispielantwort 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\nDu solltest den vorgeschlagenen Code sorgfältig überprüfen, bevor du ihn verwenden. Wenn du mit dem generierten Code zufrieden bist, führe die folgenden Schritte aus, um ihn lokal zu speichern und die Konvertierung abzuschließen:\n\n1. Erstelle im zuvor erstellten temporären Verzeichnis eine neue Datei namens `main.js`.\n2. Kopieren Sie den generierten Code aus dem Copilot Chat Panel, und fügen Sie ihn in `main.js`ein.\n3. Speichern Sie die Datei.\n4. Verwende ähnliche Prompts, um `operations.cob` und `data.cob` in Node.js zu konvertieren.\n5. Erstelle im selben temporären Verzeichnis die entsprechenden JavaScript-Dateien `operations.js` und `data.js`.\n6. Kopiere den generierten Code, und füge ihn in jede Datei ein. Speichere die Dateien anschließend.\n\n## Schritt 7: Verknüpfen der Dateien und Einrichten einer funktionierenden Node.js project\n\nNachdem Sie alle Dateien in Node.jskonvertiert haben, müssen Sie sie miteinander verknüpfen und eine funktionierende Node.js project einrichten.\n\n1. Navigiere im Terminal zum temporären Verzeichnis.\n\n2. Führe den folgenden Befehl aus, um eine `package.json`-Datei zu erstellen:\n\n   ```shell copy\n   npm init -y\n   ```\n\n3. Wenn deine Anwendung externe Pakete benötigt, installiere diese, indem du den folgenden Befehl ausführst:\n\n   ```shell copy\n   npm install\n   ```\n\n4. Führen Sie den folgenden Befehl aus, um die App zu starten:\n\n   ```shell copy\n   npm start\n   ```\n\nZu diesem Zeitpunkt kann die Node.js-Anwendung die Funktionalität des ursprünglichen COBOL-Programms nicht vollständig replizieren. Beispielsweise wird das Saldo möglicherweise nicht ordnungsgemäß aktualisiert, oder die Berechnungen stimmen möglicherweise nicht mit der COBOL-Logik überein.\n\nZum Optimieren der Anwendung sind folgende Schritte erforderlich:\n\n* **Identifizieren falschen Verhaltens** durch das Ausführen des Programms und einen Vergleich mit der COBOL-Version\n* **Iterativ arbeiten mit Copilot** um die Logik anzupassen, bis sich das Node.js Programm wie erwartet verhält.\n* **Verwenden gezielter Prompts** zum Debuggen und Verbessern bestimmter Teile des Codes, z. B.:\n\n  ```copilot copy\n  @workspace - analyze main.js and ensure the account balance updates correctly when crediting an account.\n  ```\n\nDas Umgestalten von Legacycode ist nicht immer ein Ein-Schritt-Prozess–Copilot kann beim Debuggen und Verbessern der Funktionalität helfen, während Sie ihre neue Node.js Implementierung verfeinern.\n\n## Schritt 8: Generieren von Komponenten- und Integrationstests\n\nDer nächste Schritt besteht darin, Komponenten- und Integrationstests zu generieren, um eine erwartungsgemäße Funktionsweise der Anwendung sicherzustellen. Sie können `@workspace` verwenden, um einen Testplan zu generieren, der alle Dateien im project abdeckt.\n\n### Beispielprompt 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### Beispielantwort 5\n\nCopilot generiert eine Reihe von Tests in Jest, einem JavaScript-Testframework, mit einer vollständigen schrittweisen Anleitung zum Implementieren und Ausführen dieser Tests.\n\nDieser Auszug stammt aus der Antwort auf den obigen Prompt:\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## Schritt 9: Ausführen von Tests und Optimieren des Codes\n\nNachdem du den Testplan generiert und die Tests geschrieben hast, musst du sie ausführen und alle Fehler beheben, die beim Ausführen der Tests auftreten. Das Testen ist ein iterativer Prozess. Möglicherweise musst du den Code ändern, um Probleme zu beheben, und die Tests anschließend erneut ausführen, bis alle Tests bestanden werden.\n\nWenn ein Test fehlschlägt, verwenden Sie Copilot, um die Implementierung zu debuggen und zu verfeinern.\n\n### Beispielprompt 6\n\n```copilot copy\n@workspace - analyze test failures in operations.test.js and suggest fixes to match the expected behavior.\n```\n\nSelbst wenn alle Tests bestanden werden, kann das Programm weiterhin Probleme aufweisen. Automatisierte Tests erfassen nicht immer fehlende Funktionalität oder Logikfehler, wodurch manuelle Tests erforderlich sind, um eine erwartungsgemäße Funktionsweise der Anwendung sicherzustellen.\n\n## Schritt 10: Verschieben des JavaScript-Projekts an einen neuen Ort\n\nSobald die Anwendung wie erwartet funktioniert, verschieben Sie das neue JavaScript-project aus dem COBOL-Verzeichnis, um sie getrennt zu halten.\n\n1. Navigieren Sie zum übergeordneten Verzeichnis des COBOL-Projekts.\n\n2. Verschieben Sie die JavaScript-project an einen neuen Speicherort:\n\n   ```shell copy\n   mv modernize-legacy-cobol-app new-js-project\n   ```\n\n3. Navigieren Sie zum neuen Projektverzeichnis und stellen Sie sicher, dass alles ordnungsgemäß funktioniert.\n\n   ```shell copy\n   cd new-js-project\n   npm start\n   ```\n\nJetzt befindet sich die umgestaltete Node.js Anwendung in einem eigenen eigenständigen project Ordner, getrennt von den ursprünglichen COBOL-Dateien.\n\n## Zusammenfassung\n\nIn diesem Beispiel wurde ein Kontoverwaltungssystem veranschaulicht, das in COBOL geschrieben und in Node.js modernisiert wurde. Wir haben mit Copilot Chat den Code erläutert, den Datenfluss dargestellt, einen Testplan generiert und den Code in Node.js konvertiert. Durch das Ausführen dieser Schritte kannst du Legacycode modernisieren, damit dieser einfacher verwaltet und erweitert werden kann. Hier findest du einige zusätzliche Tipps zum Modernisieren von Legacycode:\n\n* **Bewährte Methoden für Prompts sind entscheidend**: Die Qualität Ihrer Prompts bestimmt die Qualität der Vorschläge von Copilot. Bereiten Sie klaren Kontext, unterteilen Sie komplexe Aufgaben in kleinere Schritte, stellen Sie Beispiele bereit, und geben Sie Copilot spezifische Ziele, an denen gearbeitet werden kann. Das führt zu einem optimierten Workflow und zu präziseren Ergebnissen.\n* **Überprüfen Sie den Code, bevor Sie ihn verwenden**: Stellen Sie sicher, dass Sie den Code verstehen, der bereitgestellt wird, Copilot bevor Sie ihn in Ihrer Anwendung verwenden. Dadurch kannst du potenzielle Probleme abfangen und sicherstellen, dass der Code deine Anforderungen erfüllt.\n* **Überprüfe deine Änderungen**: Nachdem du Änderungen am Code vorgenommen hast, ist es wichtig zu überprüfen, ob die Anwendung weiterhin erwartungsgemäß funktioniert. Sie können den von Copilot generierten Testplan verwenden, um Unit- und Integrationstests für die Anwendung zu erstellen.\n\n## Praktische Übungen\n\nÜben Sie die Modernisierung von Legacy-Code mit der Übung [Modernisierung Ihres Legacy-Codes mit GitHub Copilot](https://github.com/skills/modernize-your-legacy-code-with-github-copilot) Fähigkeiten.\n\nIn dieser Übung erfahren Sie, wie Sie:\n\n* Analysieren Sie den Legacy-COBOL-Code mit GitHub Copilot Chat, um die Geschäftslogik zu verstehen.\n* Generieren Sie Dokumentationen, z. B. Mermaid-Datenflussdiagramme und Testpläne.\n* Transformieren Sie eine COBOL-Codebasis in Node.js mit Copilot.\n* Erstellen Sie Komponententests basierend auf dem generierten Testplan.\n\n## Weitere Informationen\n\n* [Dokumentieren von Legacy-Code](/de/enterprise-cloud@latest/copilot/tutorials/copilot-cookbook/document-code/document-legacy-code)\n* [Modernisieren von Legacy-Code mit GitHub Copilot: Tipps und Beispiele](https://github.blog/ai-and-ml/github-copilot/modernizing-legacy-code-with-github-copilot-tips-and-examples/) im GitHub Blog"}