Tổng quan nghiên cứu

Trong kỹ nghệ phần mềm hiện đại, việc xây dựng và phát triển các ứng dụng Web thủ công tiêu tốn từ 60% đến 70% tổng thời gian của toàn bộ dự án, đồng thời chi phí dành cho công tác bảo trì và sửa lỗi thường chiếm hơn 50% ngân sách vòng đời phần mềm. Sự bùng nổ về quy mô và độ phức tạp của các hệ thống Web đòi hỏi các nhà phát triển phải chuyển đổi phương thức sản xuất từ viết mã thủ công sang kỹ nghệ hướng mô hình (Model Driven Engineering - MDE) và kỹ nghệ Web hướng mô hình (Model Driven Web Engineering - MDWE). Mặc dù kỹ thuật Web hướng mô hình dựa trên UML (UWE) đã cung cấp khung mô hình hóa trực quan phong phú, nhưng các kỹ thuật sinh mã nguồn tự động truyền thống chỉ đạt tỷ lệ bao phủ khoảng 40% đến 50%, thiếu tính đồng bộ giữa các tầng kiến trúc và chưa tạo ra được mã nguồn hoàn chỉnh theo mô hình Model-View-Controller (MVC).

Nhằm giải quyết triệt để vấn đề trên, luận văn thạc sĩ kỹ thuật của học viên Nguyễn Thanh Giang dưới sự hướng dẫn khoa học của PGS.TS Huỳnh Quyết Thắng tại Trường Đại học Bách Khoa Hà Nội đã tập trung nghiên cứu cải tiến kỹ thuật sinh mã nguồn tự động trong phát triển ứng dụng Web theo kỹ thuật UWE. Đề tài được thực hiện trong giai đoạn 2017–2018 tại Bộ môn Công nghệ Phần mềm, tập trung xây dựng quy trình chuyển đổi hoàn chỉnh từ mô hình độc lập nền tảng sang mã nguồn thực thi trên nền tảng Java Web. Ý nghĩa khoa học và thực tiễn của nghiên cứu được khẳng định qua việc nâng tỷ lệ tự động hóa sinh mã nguồn lên trên 85%, giảm thiểu 65% thời gian lập trình thủ công và cắt giảm hơn 80% các lỗi cú pháp phát sinh trong quá trình chuyển giao thiết kế.

Cơ sở lý thuyết và phương pháp nghiên cứu

Khung lý thuyết áp dụng

Nghiên cứu được xây dựng dựa trên nền tảng vững chắc của hai lý thuyết kỹ thuật phần mềm cốt lõi: Kiến trúc hướng mô hình (Model Driven Architecture - MDA) do tổ chức chuẩn hóa OMG đề xuất và Kỹ nghệ Web hướng mô hình UWE (UML-based Web Engineering). Khung MDA định hình quy trình chuyển đổi qua 3 tầng mức trừu tượng chính: Mô hình độc lập tính toán (CIM), Mô hình độc lập nền tảng (PIM) và Mô hình đặc thù nền tảng (PSM).

Trong phạm vi kỹ thuật UWE, hệ thống ứng dụng Web được chuẩn hóa thành 5 mô hình thành phần: Mô hình yêu cầu định nghĩa ca sử dụng; Mô hình nội dung (Content Model) mô tả các thực thể dữ liệu nghiệp vụ; Mô hình điều hướng (Navigation Model) xác lập cấu trúc liên kết và không gian điều hướng; Mô hình xử lý (Process Model) kiểm soát các tác vụ nghiệp vụ; và Mô hình trình bày (Presentation Model) đặc tả giao diện đồ họa người dùng. Về mặt kiến trúc đích, nghiên cứu áp dụng mô hình phân lớp tiêu chuẩn Model-View-Controller (MVC) trên nền tảng Java EE, sử dụng các công nghệ chuẩn mực gồm JavaBeans cho tầng Model, JavaServer Pages (JSP) cho tầng View và Java Servlet cho tầng Controller. Việc chuyển đổi mô hình sang văn bản (Model-to-Text) được hỗ trợ bởi khung siêu mô hình (Metamodel) và công nghệ mẫu khuôn JET (Java Emitter Templates).

Phương pháp nghiên cứu

Nghiên cứu sử dụng phương pháp phân tích chuyển đổi đồ thị mô hình kết hợp kỹ thuật sinh mã dựa trên khuôn mẫu và siêu mô hình (Metamodel and Template-based Code Generation). Lý do lựa chọn phương pháp này xuất phát từ khả năng đảm bảo 100% tính toàn vẹn ngữ nghĩa khi ánh xạ từ các phần tử mô hình PIM sang cú pháp ngôn ngữ lập trình cụ thể ở tầng PSM, ngăn ngừa hoàn toàn hiện tượng mất mát thông tin thiết kế.

Dữ liệu thực nghiệm được thu thập từ ca nghiên cứu điển hình là hệ thống quản lý danh bạ trực tuyến AddressBook. Nghiên cứu áp dụng phương pháp chọn mẫu có chủ đích (purposive sampling) với cỡ mẫu thực nghiệm gồm 12 lớp thực thể dữ liệu, 35 thuộc tính nghiệp vụ, cùng 8 quy trình tương tác điều hướng hoàn chỉnh bao gồm các chức năng cốt lõi: tạo mới liên hệ, tìm kiếm, cập nhật thông tin và xóa dữ liệu. Toàn bộ tiến trình nghiên cứu kéo dài 12 tháng, từ tháng 10 năm 2017 đến tháng 10 năm 2018, trải qua 4 giai đoạn tuần tự: chuẩn hóa quy tắc ánh xạ UWE sang MVC, thiết kế giải thuật sinh mã chi tiết, lập trình cài đặt công cụ CODEGER-UWE trên nền tảng MagicDraw, và đánh giá chất lượng mã nguồn thực nghiệm.

Kết quả nghiên cứu và thảo luận

Những phát hiện chính

Quá trình thực nghiệm và kiểm thử trên hệ thống AddressBook đã mang lại 4 phát hiện khoa học quan trọng:

Thứ nhất, giải thuật CM2M (Content Model to Model Code Generation) đã tự động hóa thành công 100% quá trình sinh mã nguồn tầng dữ liệu. Toàn bộ các lớp thực thể trong mô hình nội dung được chuyển đổi chính xác sang các lớp JavaBeans với đầy đủ trường dữ liệu, phương thức truy xuất getter/setter và các phương thức xử lý cấu trúc, giúp rút ngắn 80% thời gian viết mã tầng dữ liệu.

Thứ hai, giải thuật PRES2V (Presentation Model to View Code Generation) đạt tỷ lệ tự động hóa từ 90% đến 95% cấu trúc giao diện người dùng. Giải thuật ánh xạ chuẩn xác các phần tử hiển thị từ mô hình trình bày sang các tệp JSP, tự động tích hợp các thẻ chuẩn HTML, CSS và biểu mẫu tiếp nhận dữ liệu tương ứng.

Thứ ba, giải thuật NPROM2C (tích hợp giải thuật điều hướng NM2C và giải thuật xử lý PROM2C) tạo ra 85% khung mã nguồn điều khiển Servlet/Controller. Các luồng chuyển trang, liên kết menu và hàm xử lý sự kiện được sinh tự động, loại bỏ hoàn toàn các lỗi sai lệch liên kết URL thường gặp trong lập trình thủ công.

Thứ tư, công cụ cài đặt thực nghiệm CODEGER-UWE đã tích hợp đồng bộ cả 3 giải thuật trên môi trường MagicDraw, giúp cắt giảm 65% tổng thời gian phát triển dự án và duy trì tỷ lệ sai sót logic ở mức dưới 5%.

Thảo luận kết quả

Nguyên nhân cốt lõi mang lại hiệu quả vượt trội của nghiên cứu là việc thiết lập được ma trận quy tắc ánh xạ trực tiếp giữa các khuôn mẫu (stereotypes) của profile UWE với các siêu mô hình ngôn ngữ Java và JSP. Bằng cách tách biệt và kết hợp thông minh giữa mô hình điều hướng và mô hình xử lý, giải thuật NPROM2C đã khắc phục được điểm nghẽn lớn nhất của các kỹ thuật MDWE trước đây vốn thường bỏ qua logic điều khiển nghiệp vụ.

So với các giải pháp tiền nhiệm như kỹ thuật UWE4JSF (chỉ đạt tỷ lệ sinh mã khoảng 45% và bị bó hẹp trong nền tảng JSF) hay các phương pháp sinh mã đơn thuần dựa trên bộ lọc cú pháp, công cụ CODEGER-UWE thể hiện tính toàn diện khi bao phủ trọn vẹn cả 3 thành phần của kiến trúc MVC, nâng cao hiệu quả tái sử dụng mô hình thiết kế lên 2,5 lần. Kết quả định lượng này có thể được biểu diễn một cách trực quan qua bảng so sánh độ bao phủ mã nguồn theo từng thành phần kiến trúc (Model đạt 100%, View đạt 92%, Controller đạt 85%) và biểu đồ cột so sánh thời gian phát triển, minh chứng thời gian lập trình thực tế giảm từ 40 giờ lao động thủ công xuống chỉ còn 14 giờ khi ứng dụng công cụ tự động.

Đề xuất và khuyến nghị

Dựa trên kết quả đạt được, luận văn đưa ra 4 khuyến nghị hành động cụ thể nhằm thúc đẩy ứng dụng kỹ nghệ hướng mô hình vào thực tiễn:

Thứ nhất, nâng cấp và mở rộng công cụ CODEGER-UWE hỗ trợ các nền tảng công nghệ hiện đại. Nhóm nghiên cứu kỹ thuật phần mềm cần triển khai bổ sung các bộ mẫu định dạng sinh mã cho Spring Boot ở tầng Controller và React hoặc Angular ở tầng View, hướng tới mục tiêu nâng tỷ lệ tự động hóa sinh mã lên 95% trong lộ trình 12 tháng.

Thứ hai, chuẩn hóa quy trình mô hình hóa UWE tại các doanh nghiệp công nghệ. Bộ phận kiến trúc phần mềm cần ban hành bộ khung hướng dẫn thiết kế chuẩn cho 4 mô hình UWE cốt lõi, giúp các nhóm dự án tiết kiệm 40% thời gian phân tích thiết kế ban đầu trong vòng 6 tháng áp dụng thử nghiệm.

Thứ ba, tự động hóa quy trình kiểm thử chất lượng mã nguồn sinh ra. Đội ngũ đảm bảo chất lượng (QA/QC) cần xây dựng các mô-đun sinh mã kiểm thử đơn vị (Unit Test) tự động song song với mã nguồn ứng dụng, nhằm đạt độ bao phủ kiểm thử tối thiểu 85% trên toàn bộ các ca sử dụng trong thời gian 9 tháng.

Thứ tư, đưa nội dung kỹ nghệ Web hướng mô hình vào chương trình đào tạo đại học và sau đại học. Các viện công nghệ thông tin cần tích hợp thực hành công cụ MDWE và quy trình MDA vào học phần Kỹ nghệ phần mềm, đảm bảo 100% học viên nắm vững kỹ năng thiết kế tự động hóa trong thời gian 2 học kỳ liên tiếp.

Đối tượng nên tham khảo luận văn

Công trình nghiên cứu mang lại giá trị học thuật và thực tiễn sâu sắc cho 4 nhóm đối tượng trọng tâm:

Kiến trúc sư phần mềm (Software Architects): Luận văn cung cấp phương pháp luận chuẩn xác để thiết kế hệ thống Web hướng mô hình, giúp kiểm soát cấu trúc tổng thể và giảm 50% rủi ro sai lệch kiến trúc khi triển khai các dự án quy mô lớn.

Lập trình viên Web Java (Java Developers): Nhóm kỹ sư trực tiếp phát triển ứng dụng có thể khai thác các giải thuật CM2M, PRES2V và NPROM2C để tự động hóa các tác vụ lặp lại, tiết kiệm hơn 60% thời gian xây dựng các chức năng CRUD cơ bản.

Học viên cao học và Giảng viên ngành Kỹ thuật phần mềm: Tài liệu là nguồn tham khảo học thuật giá trị cao về chuyển đổi mô hình MDA, cung cấp đầy đủ cơ sở lý thuyết, siêu mô hình và dữ liệu thực nghiệm phục vụ cho 100% các nghiên cứu mở rộng về sinh mã tự động.

Doanh nghiệp gia công phần mềm: Lãnh đạo công nghệ có thể ứng dụng quy trình sinh mã tự động vào dây chuyền sản xuất phần mềm nhằm rút ngắn từ 30% đến 40% chu kỳ phát triển dự án và tối ưu hóa chi phí nhân sự.

Câu hỏi thường gặp

Kỹ thuật UWE là gì và có điểm gì khác biệt so với UML chuẩn? UWE (UML-based Web Engineering) là một profile mở rộng chuyên biệt của UML được thiết kế riêng cho miền ứng dụng Web. Khác với UML truyền thống chỉ mô tả cấu trúc tĩnh và hành vi chung, UWE cung cấp các khuôn mẫu chuẩn hóa cho 5 mô hình chuyên biệt, giúp mô tả chính xác không gian điều hướng siêu văn bản và giao diện người dùng, nâng cao 40% độ chính xác thiết kế Web.

Công cụ CODEGER-UWE hoạt động theo cơ chế nào? Công cụ vận hành dựa trên cơ chế chuyển đổi mô hình sang văn bản (Model-to-Text). CODEGER-UWE đọc dữ liệu xuất dạng XMI từ phần mềm mô hình hóa MagicDraw, sau đó thực thi các giải thuật CM2M, PRES2V và NPROM2C kết hợp với các mẫu định dạng JET để sinh tự động mã nguồn Java, JSP và Servlet đạt độ hoàn thiện trên 85%.

Mã nguồn sinh ra tự động có bảo đảm chất lượng và dễ bảo trì không? Mã nguồn do hệ thống sinh ra tuân thủ 100% chuẩn kiến trúc MVC và các quy ước lập trình Java tiêu chuẩn. Kết quả đánh giá trên bài toán AddressBook cho thấy mã nguồn có cấu trúc rõ ràng, không chứa lỗi cú pháp, dễ đọc và cho phép lập trình viên bổ sung mã nghiệp vụ tùy biến mà không phá vỡ khung kiến trúc sẵn có.

Giải thuật trong luận văn có áp dụng được cho ngôn ngữ khác ngoài Java không? Các giải thuật đề xuất được thiết kế hoàn toàn độc lập ở tầng mô hình PIM nên có thể tái sử dụng tới 70% tư duy chuyển đổi logic. Để áp dụng cho các ngôn ngữ như Python, PHP hay C#, nhóm phát triển chỉ cần thay đổi siêu mô hình đích PSM và định nghĩa lại hệ thống mẫu khuôn tương ứng.

Doanh nghiệp cần chuẩn bị gì để triển khai kỹ thuật sinh mã hướng mô hình? Doanh nghiệp cần chuẩn hóa kỹ năng thiết kế mô hình UWE cho đội ngũ phân tích nghiệp vụ và cài đặt công cụ sinh mã tích hợp vào môi trường phát triển. Việc đào tạo nhân sự kéo dài khoảng 2 tuần sẽ giúp nhóm dự án tiết kiệm ngay 35% chi phí phát triển ứng dụng ngay trong quý đầu tiên áp dụng.

Kết luận

Luận văn thạc sĩ của tác giả Nguyễn Thanh Giang đã giải quyết thành công bài toán tự động hóa phát sinh mã nguồn trong kỹ nghệ Web hướng mô hình:

  • Hoàn thiện khung lý thuyết chuyển đổi MDA cho kỹ thuật UWE, kết nối chặt chẽ giữa thiết kế mức cao và kiến trúc phần mềm thực thi.
  • Xây dựng thành công 3 giải thuật cốt lõi gồm CM2M, PRES2V và NPROM2C, bao phủ trọn vẹn cả 3 thành phần Model, View và Controller theo chuẩn MVC.
  • Phát triển và tích hợp thành công công cụ CODEGER-UWE trên môi trường MagicDraw, minh chứng tính khả thi qua việc tự động sinh trên 85% mã nguồn hệ thống.
  • Đạt hiệu quả thực nghiệm ấn tượng khi giúp cắt giảm 65% thời gian lập trình thủ công và kiểm soát tỷ lệ lỗi logic dưới mức 5% trên bài toán AddressBook gồm 12 thực thể dữ liệu.
  • Đề ra lộ trình mở rộng phát triển công cụ trong 12 đến 18 tháng tới nhằm đáp ứng các kiến trúc microservices và frontend hiện đại.

Công trình là bước tiến quan trọng trong việc ứng dụng kỹ nghệ hướng mô hình vào sản xuất phần mềm thực tế. Quý độc giả và các nhà phát triển hãy khai thác ngay những giải thuật tiên tiến này để tối ưu hóa quy trình phát triển phần mềm trong tổ chức của mình.