Note
Ответы, показанные в этой статье, являются примерами. Ответы Copilot Chat являются недетерминированными, поэтому вы можете получить различные ответы, показанные здесь.
Устаревший код — это код, устаревший или устаревший, который больше не поддерживается исходными разработчиками. Это может быть трудно поддерживать и расширять, так как оно может не соответствовать современным рекомендациям, таким как использование согласованных соглашений об именовании или написание четкой документации.
Модернизация устаревшего кода поможет вам:
- Повышение производительности и масштабируемости.
- Упростить обслуживание и расширение кода.
- Уменьшите риск возникновения ошибок при внесении изменений.
- Упрощение тестирования кода.
Copilot поможет модернизировать устаревший код:
- Предоставление предложений по рефакторингу кода для выполнения современных рекомендаций.
- Создание документации , помогающей понять, как работает код.
- Создание тестов для проверки того, что изменения не появились.
Пример сценария
В этом примере мы рассмотрим систему управления учетными записями, написанную в COBOL, и модернизируем ее в Node.js. Код COBOL можно найти в репозиторииmodernize-legacy-cobol-app
.
Система управления учетными записями состоит из трех ключевых файлов:
main.cob
: основная программа, которая считывает входные данные от пользователя и вызывает соответствующую подпрограмму.operations.cob
: подпрограмма, которая выполняет операции с данными учетной записи, такими как кредит, дебетовый и просмотр баланса.data.cob
: подпрограмма, которая управляет хранением баланса учетной записи.
Шаг 1. Получение локальной копии репозитория
Перед компиляцией и запуском программы необходимо локально получить код. Если вы еще не клонировали репозиторий, перейдите в каталог, в котором вы хотите сохранить проект, и выполните следующую команду:
git clone https://github.com/continuous-copilot/modernize-legacy-cobol-app.git
git clone https://github.com/continuous-copilot/modernize-legacy-cobol-app.git
Шаг 2. Компиляция и запуск программы
Можно установить компилятор COBOL в предпочитаемой среде разработки (например, компилятору GnuCOBOL открытый код) или использовать Copilot Chat в GitHub Codespaces.
При использовании MacOS можно установить GnuCOBOL с помощью Homebrew:
brew install gnu-cobol
brew install gnu-cobol
Если вы используете Codespaces или систему Ubuntu Linux, вы можете установить GnuCOBOL с помощью apt
:
sudo apt-get update && \ sudo apt-get install gnucobol
sudo apt-get update && \
sudo apt-get install gnucobol
Чтобы скомпилировать код, связать файлы и создать исполняемый файл, выполните следующую команду из корневого каталога репозитория:
cobc -x main.cob operations.cob data.cob -o accountsystem
cobc -x main.cob operations.cob data.cob -o accountsystem
Чтобы запустить программу, используйте следующую команду:
./accountsystem
./accountsystem
Шаг 3. Объяснение файлов и кода
Первый шаг в модернизации кода заключается в том, чтобы понять, как он работает. Вы можете попросить Copilot Chat объяснить код в каждом файле.
Откройте репозиторий в интегрированной среде разработки, а затем на панели Copilot Chat введите следующий запрос.
Пример запроса 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.
Пример ответа 1
Это фрагмент ответа на приведенный выше запрос:
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. ...
Шаг 4. Схема потока данных между файлами
Следующий шаг заключается в том, чтобы понять, как файлы связаны друг с другом. Можно использовать @workspace
для создания схемы потока данных для приложения.
Note
Участник @workspace
чата в VS Code и Visual Studio предоставляет Copilot контекстом обо всем коде в рабочей области. Вы можете использовать @workspace
, если требуется Copilot для рассмотрения структуры проекта и способа взаимодействия различных частей кода. Если вы используете интегрированную среду разработки JetBrains, используйте @project
вместо @workspace
этого.
Пример запроса 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 выводит разметку Mermaid для полной схемы последовательности, которая показывает, как работает приложение. Чтобы создать схему, можно скопировать и вставить эту разметку в приложение Mermaid.
Шаг 5. Создание тестового плана
Создайте тестовый план, чтобы убедиться, что приложение работает должным образом после внесения изменений. Можно использовать @workspace
для создания тестового плана, охватывающего все файлы проекта.
Пример запроса 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 выводит тестовый план в формате Markdown, который можно использовать для проверки приложения. Чтобы использовать этот план позже в процессе, создайте файл с именем TESTPLAN.md
и скопируйте предлагаемый план в него. Это позволит ссылаться на план тестирования при создании тестовых случаев в следующих шагах.
Шаг 6. Преобразование файлов из COBOL в Node.js
Следующим шагом является преобразование файлов COBOL в Node.js. Важно учитывать следующие методики запроса:
- Предоставление контекста
- Предоставление четких направлений
- Будьте конкретными в отношении результата, которого вы хотите достичь
Начните с создания временного каталога в проекте, в котором будут сохранены файлы JavaScript, которые вы собираетесь создать.
mkdir temp-JS-project-directory
mkdir temp-JS-project-directory
Затем итеративно преобразуйте файлы COBOL в Node.js.
Пример запроса 4
Can you convert code in #file:main.cob to node.js?
Пример ответа 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.
Перед его использованием необходимо тщательно просмотреть предлагаемый код. После удовлетворения созданного кода выполните следующие действия, чтобы сохранить его локально и завершить преобразование:
- В созданном ранее временном каталоге создайте новый файл
main.js
. - Скопируйте созданный код из панели Copilot Chat и вставьте его в
main.js
. - Сохраните файл.
- Используйте аналогичные запросы для преобразования
operations.cob
иdata.cob
Node.js. - Создайте соответствующие файлы
operations.js
JavaScript иdata.js
в том же временном каталоге. - Скопируйте и вставьте созданный код в каждый файл, а затем сохраните их.
Шаг 7. Связывание файлов и настройка рабочего проекта Node.js
После преобразования всех файлов в Node.js необходимо связать их вместе и настроить рабочий проект Node.js.
-
Перейдите к временному каталогу в терминале.
-
Выполните следующую команду, чтобы создать
package.json
файл:Shell npm init -y
npm init -y
-
Если для приложения требуются внешние пакеты, установите их, выполнив следующие действия:
Shell npm install
npm install
-
Запустите приложение, выполнив следующую команду:
Shell npm start
npm start
На этом этапе приложение Node.js может не полностью реплицировать функциональные возможности исходной программы COBOL. Например, балансы могут не обновляться правильно или вычисления могут не соответствовать логике COBOL.
Чтобы уточнить приложение, вам потребуется:
-
Определите неправильное поведение , выполнив программу и сравнивая ее с версией COBOL.
-
Работайте итеративно с Copilot для настройки логики до тех пор, пока программа Node.js не будет работать должным образом.
-
Используйте целевые запросы для отладки и улучшения конкретных частей кода, таких как:
@workspace - analyze main.js and ensure account balance updates correctly when crediting an account.
Рефакторинг устаревшего кода не всегда является одношаговым процессом: Copilot может помочь в отладке и улучшении функциональных возможностей при уточнении новой реализации Node.js.
Шаг 8. Создание модульных и интеграции тестов
Следующим шагом является создание модульных и интеграционных тестов, чтобы убедиться, что приложение работает должным образом. Можно использовать @workspace
для создания тестового плана, охватывающего все файлы проекта.
Пример запроса 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.
Пример ответа 5
Copilot создает ряд тестов в Jest, платформе тестирования JavaScript с полным пошаговые инструкции по реализации и запуску.
Это фрагмент ответа на приведенный выше запрос:
“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.”
Шаг 9. Выполнение тестов и уточнение кода
Создав план тестирования и написав тесты, их необходимо запустить и исправить все неудачные тесты. Тестирование является итеративным процессом, может потребоваться изменить код для устранения проблем, а затем повторно запустить тесты до тех пор, пока все не пройдет.
Если тест завершается ошибкой, используйте Copilot для отладки и уточнения реализации.
Пример запроса 6
@workspace - analyze test failures in operations.test.js and suggest fixes to match the expected behavior.
Даже если все тесты проходят, программа может по-прежнему иметь проблемы. Автоматические тесты не всегда перехватывать отсутствующие функции или ошибки логики, поэтому для обеспечения правильного поведения приложения требуется ручное тестирование.
Шаг 10. Перемещение проекта JavaScript в новое расположение
Когда приложение работает должным образом, переместите новый проект JavaScript из каталога COBOL, чтобы сохранить его отдельно.
-
Перейдите в родительский каталог проекта COBOL.
-
Переместите проект JavaScript в новое расположение:
Shell mv modernize-legacy-cobol-app new-js-project
mv modernize-legacy-cobol-app new-js-project
-
Перейдите к новому каталогу проекта и убедитесь, что все выполняется правильно:
Shell cd new-js-project npm start
cd new-js-project npm start
Теперь рефакторинг Node.js приложение находится в собственной автономной папке проекта, отдельно от исходных файлов COBOL.
Заключение
В этом примере мы рассмотрели систему управления учетными записями, написанную в COBOL, и модернизировали ее в Node.js. Мы использовали Copilot Chat для объяснения кода, построения потока данных, создания тестового плана и преобразования кода в Node.js. Выполнив следующие действия, вы можете модернизировать устаревший код и упростить обслуживание и расширение. Ниже приведены некоторые дополнительные советы по модернизации устаревшего кода:
- Рекомендации по запросу являются ключевыми: качество запросов определяет качество Copilot. Предоставьте четкий контекст, разбийте сложные задачи на небольшие шаги, укажите примеры и предоставьте Copilot конкретным целям для работы. Это упрощает рабочий процесс и более точные результаты
- Просмотрите код перед его использованием: убедитесь, что вы понимаете код, который Copilot предоставляется перед его использованием в приложении. Это поможет вам поймать все потенциальные проблемы и убедиться, что код соответствует вашим требованиям.
- Проверьте изменения. После внесения изменений в код важно убедиться, что приложение по-прежнему работает должным образом. Вы можете использовать план тестирования, созданный Copilot для создания модульных и интеграции тестов для приложения.