Hướng dẫn · 5 phút đọc

Phân tích mã nguồn hỗ trợ AI cho hiện đại hóa hệ thống legacy

Tại sao phân tích cú pháp (parsing) là nút thắt cổ chai trong các dự án hiện đại hóa legacy, và các công cụ AST cho COBOL, JCL, PL/I cùng các ngôn ngữ thời mainframe khác thay đổi bài toán chi phí như thế nào.

Phân tích mã nguồn hỗ trợ AI cho hiện đại hóa hệ thống legacy

Nút thắt cổ chai thực sự trong hiện đại hóa legacy

Mọi dự án hiện đại hóa hệ thống legacy đều bắt đầu giống nhau: phải có người thực sự đọc mã nguồn. Không phải đọc lướt — mà phải hiểu. Các chương trình COBOL viết từ thập niên 1980, script JCL không ai đụng tới nhiều năm, logic nghiệp vụ PL/I không có tài liệu, form VB6 kết nối với database Access. Trước khi viết lại dù chỉ một dòng, ai đó phải tìm ra hệ thống hiện tại thực sự làm gì.

Đó chính là công việc phân tích cú pháp (parsing). Và thường đây là phần chậm nhất, dễ sai sót nhất trong cả dự án — làm thủ công, bởi các tư vấn viên tính phí theo giờ, xử lý mã nguồn còn cũ hơn cả sự nghiệp của họ.

Vì sao công cụ đa năng không đáp ứng được

Các công cụ phân tích tĩnh hiện đại được xây dựng cho các ngôn ngữ hiện đại. Đưa cho chúng một copybook COBOL, một giao dịch CICS, hay một exec REXX, chúng sẽ báo lỗi hoặc bỏ qua file đó hoàn toàn. Các ngôn ngữ thời mainframe có ngữ pháp riêng, đặc thù bảng mã riêng, và mô hình thực thi riêng — batch job, giao dịch dựa trên màn hình, layout cột cố định — không thể ánh xạ gọn gàng vào bất cứ thứ gì mà một linter JavaScript hay Python hiểu được.

Khoảng trống đó là lý do chúng tôi xây dựng Legacy Dragon, một bộ phân tích cú pháp được thiết kế riêng cho các ngôn ngữ đang thực sự vận hành hệ thống legacy trên toàn thế giới: COBOL, JCL, PL/I, VB6, VB.NET, PowerBuilder, Assembly, SQL/DB2, CICS và REXX — mười ngôn ngữ trong một công cụ.

Tốc độ thay đổi những gì có thể làm được

Một chương trình COBOL 1.200 dòng được phân tích trong khoảng 6 mili giây. Đây không phải là cải thiện nhỏ so với việc rà soát thủ công — mà là một loại công việc hoàn toàn khác. Khi việc phân tích gần như tức thời, bạn có thể:

  • Phân tích toàn bộ codebase — hàng nghìn chương trình — trong một lượt thay vì chỉ lấy mẫu vài chương trình
  • Tạo lại biểu đồ phụ thuộc mỗi khi mã nguồn thay đổi, thay vì chỉ một lần lúc khởi động dự án
  • Để kỹ sư khám phá “cái gì gọi đến đoạn này?” một cách tương tác thay vì grep qua bản in

Nhìn thấy cấu trúc, không chỉ là văn bản

Mã nguồn thô rất khó suy luận ở quy mô lớn. Một chương trình COBOL đơn lẻ có thể có hàng chục đích PERFORM, các điều kiện lồng nhau, và các copybook include chỉ có ý nghĩa khi được mở rộng. Legacy Dragon xây dựng biểu đồ AST tương tác cho từng chương trình đã phân tích, để bạn có thể theo dõi luồng điều khiển và phụ thuộc dữ liệu một cách trực quan thay vì phải ghi nhớ toàn bộ call graph trong đầu.

Điều này quan trọng nhất trong các dự án hiện đại hóa mà mục tiêu không chỉ là “dịch sang Java” — mà là “hiểu được nó thực sự làm gì để không tái hiện lại một lỗi đã tồn tại 40 năm.”

Bảng mã không phải là chuyện phụ

Bất kỳ ai từng làm việc với hệ thống mainframe ngoài Bắc Mỹ đều biết lỗi bảng mã có thể ngốn cả một sprint. Các hệ thống ở Nhật đặc biệt phải xử lý Shift-JIS và DBCS (bộ ký tự hai byte) lẫn trong các bản ghi COBOL độ rộng cố định, cùng với những đặc thù riêng của EBCDIC cho trường số và packed-decimal. Sai ở đây không báo lỗi — nó âm thầm làm hỏng dữ liệu. Legacy Dragon xử lý native các bảng mã Shift-JIS, EBCDIC và DBCS, vì một bộ phân tích không đọc được đúng các byte thực tế trên đĩa thì không có giá trị gì trong môi trường production.

Triển khai phải phù hợp với môi trường

Công việc hiện đại hóa legacy thường diễn ra trên hạ tầng bị khóa chặt — mạng cô lập, server gần mainframe bị hạn chế truy cập, môi trường mà việc cài một runtime cũng phải qua quy trình phê duyệt nhiều tuần. Đó là lý do Legacy Dragon được phát hành dưới dạng một file thực thi duy nhất: không cây phụ thuộc, không runtime cần cài đặt, không trình quản lý gói cần thương lượng với bộ phận bảo mật.

Điều này mang lại giá trị gì

Không có gì ở đây thay thế được đánh giá của kỹ sư hiểu logic nghiệp vụ. Điều nó làm được là loại bỏ phần việc lặt vặt — nhiều tuần lễ dành để lập bản đồ thủ công chương trình nào gọi chương trình nào, trường nào được đọc ở đâu, một file cụ thể thực sự dùng bảng mã gì — để đánh giá của kỹ sư được dùng cho những quyết định thực sự quan trọng, chứ không phải để phân tích thủ công COBOL cột cố định.

Nếu bạn đang đối mặt với một hệ thống legacy cần được hiểu trước khi có thể hiện đại hóa, đó chính xác là bài toán mà Legacy Dragon được xây dựng để thu nhỏ lại.


Legacy Dragon là một phần trong hệ sản phẩm AityTech. Xem trực tiếp tại dragon.aitytech.com, hoặc liên hệ [email protected] để trao đổi về một codebase cụ thể.

Xem sản phẩm của chúng tôi

Từ MinuteAI đến AgentKits — khám phá các sản phẩm và dự án chúng tôi đã triển khai.

Xem danh mục

Bài viết liên quan