Phát triển thuật toán sinh code cho ứng dụng web chuẩn đoán bệnh thủy sản với ATL

Công nghệ thông tin & Cơ sở toán học cho tin học  
PHÁT TRIỂN THUẬT TOÁN SINH CODE CHO ỨNG DỤNG WEB  
CHUẨN ĐOÁN BỆNH THỦY SẢN VỚI ATL  
Trần Đình Diễn*, Huỳnh Quyết Thắng, Nguyễn Thành Đạt  
Tóm tắt: Bài báo nghiên cứu phát triển các quy tắc và giải thuật sinh mã nguồn tự  
động từ các mô hình theo kỹ thuật web UWE (UML-based Web Engineering) để tạo ứng  
dụng web chẩn đoán bệnh thủy sản (benhthuysan.vn). Các quy tắc được thực nghiệm bằng  
ngôn ngữ chuyển đổi ATL, đảm bảo hiệu quả chuyển đổi mô hình cho phát triển ứng dụng  
Web hướng mô hình theo kiến trúc MVC. Trong bài báo này, chúng tôi trình bày phương  
pháp tiếp cận MDE để tạo ra các ứng dụng Web từ các mô hình theo kỹ thuật web UWE.  
Chúng tôi đã cải tiến xây dựng một số quy tắc, giải thuật sinh code tự động nhằm cải tiến,  
nâng cao hiệu quả chuyển đổi từ mô hình UWE sang mã nguồn và xây dựng công cụ  
CODEGER-UWE để xây dựng các ứng dựng Web. Đây là một phương pháp với quy trình  
phát triển rõ ràng và tiện dụng.  
Từ khóa: Sinh mã tự động; Chuyển đổi mô hình; ATL; Phát triển ứng dụng web.  
1. ĐẶT VẤN ĐỀ  
Sinh mã tự động là mục tiêu lâu dài trong kỹ thuật phần mềm và là một bước thiết yếu trong  
kỹ thuật hướng mô hình (MDE) [1-5] để phát triển phần mềm, cho phép các nhà thiết kế tự động  
tạo ra các ứng dụng từ mô hình thiết kế. Kỹ thuật UWE hoàn toàn tuân thủ theo MDE mục tiêu  
tiếp cận của UWE là xây dựng những mô hình CIM, PIM, PSM và sinh code tự động cho ứng  
dụng web (hình 1).  
Hình 1. Sinh code trong UWE.  
Các kỹ thuật chính trong sinh mã tự động bao gồm: Templates and metamodel, Templates  
and filtering, API-based generators, Inline code generation, Visitor-Based Approaches [6-9]. Kỹ  
thuật Template và Metamodel, mã được tạo bằng cách áp dụng khuôn mẫu cho đặc tả mô hình  
thành văn bản (thường là XML/XMI) [10]. Một cách trực quan cho yêu cầu này là cách tiếp cận  
dựa trên template nơi mà văn bản được sinh ra từ mô hình được quy định như là một tập các  
template dạng văn bản mà được tham số hóa với các phần tử mô hình, một Template xác định  
một template văn bản cùng với các điểm mốc (placeholders) cho dữ liệu được trích xuất ra từ mô  
hình. Những điểm mốc đó về bản chất là các biểu thức quy định các thành phần metamodel cùng  
với các truy vấn là cơ chế chính cho việc lựa chọn và trích xuất giá trị từ mô hình. Giá trị đó  
được chuyển đổi qua văn bản bằng cách sử dụng ngôn ngữ biểu thức dựa trên các thư viện xử lý  
chuỗi. Template có thể được sử dụng để giải quyết các yêu cầu chuyển đổi phức tạp và chủ yếu  
được sử dụng để tạo mã nguồn và đã được áp dụng trong nhiều lĩnh vực khác nhau [10].  
Trong nghiên cứu này, chúng tôi sử dụng phương pháp Template và Metamodel với nền tảng  
công nghệ J2EE, mô hình Web MVC cho kỹ thuật UWE, kết hợp với sự tương đồng về mặt định  
nghĩa của bốn mô hình trong UWE là mô hình nội dung, điều hướng, xử lý, trình bày với ba  
thành phần trong mô hình MVC, nhóm nghiên cứu phát triển các quy tắc và giải thuật sinh mã  
cho ứng dụng web benhthuysan.vn theo kỹ thuật UWE.  
Hiện nay, có nhiều nghiên cứu về việc sinh mã theo kỹ thuật UWE. Nghiên cứu [11] đã đề  
T. Đ. Diễn, H. Q. Thắng, N. T. Đạt, “Phát triển thuật toán … bệnh thủy sản với ATL.”  
102  
Nghiên cứu khoa học công nghệ  
xuất sử dụng ATL để chuyển đổi mô hình nhằm hỗ trợ cho nhà thiết kế các hoạt động tạo lập mô  
hình bằng cách sử dụng cấu hình UWE và chuyển đổi mô hình bán tự động. Do vậy, còn nhiều  
thành phần của mô hình vẫn phải xây dựng lại thủ công; việc sinh code mới chỉ dừng lại ở việc  
tạo ra các khung, để lập trình viên viết code.  
Hình 2. Sử dụng ngôn ngữ ATL để tạo ra các phần tử JSP [11].  
Marianne Busch and Nora Koch [12] phát triên công cụ MagicUWE là một plugin cho  
MagicDraw, được phát triển để hỗ trợ thiết kế các ứng dụng web bằng phương pháp UWE.  
MagicUWE được pháp triển để hỗ trợ cho nhà thiết kế cho các hoạt động tạo lập mô hình bằng  
cách sử dụng cấu hình UWE và chuyển đổi mô hình bán tự động.  
Nghiên cứu của Imane Essebaa, Chantit Salima, Mohammed Ramdani [13] là một minh  
chứng rất gần đây về việc ứng dụng MDE cho các ứng dụng Web. Công việc của họ mô tả một  
công cụ (MoDAr-WA) nhằm mục đích tự động hóa các chuyển đổi từ CIM sang mã. Các tác giả  
sử dụng các quy tắc QVT để chuyển đổi giữa các mô hình (CIM sang PIM và PIM sang PSM) và  
Acceleo để tạo mã tuân theo kiến trúc MVC từ các mô hình PSM.  
Hình 3. Tổng quan về cách tiếp cận trong [13].  
Trong tài liệu [14, 15], các tác giả áp dụng MDA để phát triển Ứng dụng web theo cấu trúc  
MVC. Nghiên cứu sử dụng ATL (Atlas Transformation Language) làm ngôn ngữ chuyển đổi  
thực hiện các phép biến đổi đến mã nguồn Java.  
Trong các nghiên cứu [11, 16-18] các tác giả đã đề xuất các quy tắc chuyển đổi mô hình từ  
CIM sang PIM sang PSM và [19] bổ sung bộ quy tắc chuyển đổi từ mô hình yêu cầu sang mô  
hình xử lý và mô hình trình bày, nhằm cải thiện quá trình chuyển đổi tự động cho các ứng dụng  
web sử dụng UWE.  
Trong bài báo [20], công bố năm 2018, chúng tôi đã đề xuất bổ sung một số quy tắc chuyển  
đổi sang mô hình xử lý và mô hình trình bày, nhằm cải tiến, nâng cao hiệu quả chuyển đổi mô  
hình UWE từ công cụ MagicUWE. Nghiên cứu này [20], đã phát triển 03 quy tắc sinh mã từ mô  
hình PSM: Quy tắc CM2M sinh mã thành phần Model từ mô hình nội dung; Quy tắc PRES2V  
Tạp chí Nghiên cứu KH&CN quân sự, Số 72, 04 - 2021  
103  
Công nghệ thông tin & Cơ sở toán học cho tin học  
sinh mã thành phần View từ mô hình trình bày và Quy tắc NPROM2C sinh mã thành phần  
Controller từ mô hình điều hướng và xử lý. Tương ứng với 03 quy tắc này, đã xây dựng 03 giải  
thuật sinh mã: CM2M, NPROM2C, PRES2V. Từ các quy tắc, giải thuật xây dựng, nhóm nghiên  
cứu đã xây dựng công cụ CODEGER-UWE để hỗ trợ sinh mã nguồn cho ví dụ “Address Book”  
Plugin ODEGER-UWE đã cho phép sinh mã nguồn từ bốn mô hình UWE tương ứng với các  
thành phần trong mô hình Web MVC, kết quả cho thấy, sinh mã tự động tốt hơn, đây là một vấn  
đề thiết thực, nhằm tăng năng suất, tiết kiệm thời gian, chi phí cho nhà phát triển.  
Trong nghiên cứu này, kế thừa các kết quả trong [20], chúng tôi tập trung hoàn thiện các quy  
tắc và giải thuật sinh code từ các mô hình UWE bằng ATL. Như thế, chúng ta sẽ có một tập các  
quy tắc sinh code đầy đủ. Cụ thể, các mô hình mức PIM trong UWE sẽ được chuyển đổi sang  
thành phần tương ứng trong kiến trúc MVC. Phương pháp đề suất của chúng tôi được thể hiện tại  
hình 4.  
- Mô hình nội dung và mô hình xử lý được chuyển đổi sang thành phần Model, trong đó, mô  
hình nội dung dùng để định nghĩa cấu trúc cơ sở dữ liệu, mô hình xử lý định nghĩa các hàm,  
phương thức mà Model cần cung cấp cho Controller (các Service trong Spring).  
- Mô hình điều hướng được chuyển đổi sang thành phần Controller.  
- Mô hình trình bày được chuyển đổi sang thành phần View.  
Hình 4. Tổng quan phương pháp đề xuất.  
Module sinh code gồm có 2 thành phần, phần model-to-model cho phép chuyển đổi từ các mô  
hình mức PIM sang các mô hình mức PSM (mô hình Java và mô hình JSP), phần model-to-code  
cho phép sinh code từ các mô hình mức PSM thu được thành các file mã nguồn .java và .jsp.  
Các đóng góp khoa học của bài báo này bao gồm:  
Thứ nhất, xây dựng 23 quy tắc chuyển đổi từ mô hình PIM sang PSM (mô hình Java). Trong  
đó, 12 quy tắc chuyển thành thành phần Model từ mô hình nội dung; 08 quy tắc tạo thành phần  
View từ mô hình trình bày và 03 quy tắc tạo thành phần Controller từ mô hình điều hướng.  
Thứ hai, phát triển 06 truy vấn ATL để sinh mã nguồn từ các mô hình Java; 04 truy vấn ATL  
để sinh mã nguồn từ mô hình JSP.  
Thứ ba, từ các quy tắc, truy vấn ATL và phương pháp được đề xuất, nhóm nghiên cứu đã xây  
dựng công cụ CODEGER-UWE để hỗ trợ sinh mã nguồn cho ứng dụng web benhthuysan.vn.  
Nội dung bài báo được cấu trúc như sau: Mục 2 trình bày kỹ thuật Tự động sinh mã nguồn  
trong phát triển ứng dụng web hướng mô hình theo kiến trúc MVC, mục 3 trình bày thử nghiệm  
đánh giá và phần 4 trình bày kết luận.  
2. XÂY DỰNG QUY TẮC CHUYÊN ĐỔI MODEL TO TEXT THEO KIẾN TRÚC MVC  
2.1. Tạo thành phần Model  
2.1.1. Chuyển đổi mô hình nội dung  
Mô hình nội dung chứa biểu đồ lớp của ứng dụng web được mô hình hoá bằng các phần tử mô  
T. Đ. Diễn, H. Q. Thắng, N. T. Đạt, “Phát triển thuật toán … bệnh thủy sản với ATL.”  
104  
Nghiên cứu khoa học công nghệ  
hình UML 2.0 tiêu chuẩn. Mỗi class trong mô hình nội dung được ánh xạ với một class trong phần  
model, các thuộc tính được để private và được truy cập thông qua các phương thức getter, setter.  
Quy trình thực hiện gồm các bước như sau:  
Bước 1: Đọc mô hình nội dung, tìm gói Content;  
Bước 2: Với mỗi class trong gói Content, tạo class Java với tên tương ứng, sau đó lấy ra danh  
sách các thuộc tính của class;  
Bước 3: Với mỗi thuộc tính của class, tạo thuộc tính tương ứng và các phương thức getter,  
setter trong class đó.  
Trong kiến trúc MVC thành phần Model chứa các lớp dùng để định nghĩa cấu trúc cơ sở dữ  
liệu (mỗi lớp tương ứng với một bảng, mỗi trường tương ứng với một cột của bảng trong cơ sở  
dữ liệu). Việc chuyển đổi từ mô hình nội dung sang mô hình Java được thực hiện dựa trên 08  
luật được thể hiện chi tiết tại bảng 1.  
Bảng 1. Các luật chuyển đổi từ mô hình nội dung sang mô hình Java.  
Tên luật  
Package2Package  
Phần tử mô hình nội dung  
Package  
Phần tử Java tương ứng  
Package  
Class2Class  
Class  
Class  
Property2Field  
Property  
Field  
Property2GetterMethod  
Property2SetterMethod  
CollectionProperty2Field  
CollectionProperty2 GetterMethod Property (số nhiều)  
CollectionProperty2 SetterMethod Property (số nhiều)  
Property  
Property  
Property (số nhiều)  
Method (get)  
Method (set)  
Field (Set hoặc List)  
Method (get)  
Method (set)  
2.1.2. Chuyển đổi mô hình xử lý  
Mô hình xử lý thể hiện các hành vi trong ứng dụng web mà controller sẽ thực hiện. Model  
cần cung cấp phương thức tương ứng để controller gọi khi muốn thực hiện hành vi nào đó. Phần  
tử ProcessClass trong mô hình xử lý chứa thuộc tính contentClass tham chiếu đến class trong mô  
hình nội dung cho biết hành vi đó ứng với model nào, mỗi hành vi ứng với một phương thức của  
service trong kiến trúc MVC.  
Quy trình thực hiện gồm các bước như sau:  
Bước 1: Đọc mô hình, tìm gói Content;  
Bước 2: Với mỗi class trong gói Content, tạo class Service tương ứng trong Java, tìm phần tử  
ProcessClass có thuộc tính contentClass tham chiếu đến;  
Bước 3: Với mỗi hành vi ứng với ProcessClass, tạo phương thức tương ứng trong class Service.  
Gói service thuộc thành phần Model, chứa các phương thức liên quan đến dữ liệu mà ứng dụng  
cần gọi đến (truy xuất cơ sở dữ liệu, chuyển đổi, kiểm tra dữ liệu hợp lệ,…). Do đó, các hành vi  
trong mô hình xử lý được dùng để định nghĩa các phương thức cho các service. Chúng tôi đã phát  
triển 04 luật để thực hiện việc chuyển đổi từ mô hình xử lý sang mô hình Java (bảng 2)  
Bảng 2. Các luật chuyển đổi và thành phần tương ứng từ mô hình xử lý sang mô hình Java.  
Tên luật  
Package2Package  
Class2Class  
Phần tử mô hình xử lý  
Package  
Class (Content class được  
ProcessClass tham chiếu)  
Operation (của ProcessClass)  
Phần tử Java tương ứng  
Package  
Class (Service class)  
Operation2Method  
Method (của Service class)  
Parameter2MethodParameter Parameter (của các Operation) MethodParameter  
2.2. Tạo thành phần Controller  
Tạp chí Nghiên cứu KH&CN quân sự, Số 72, 04 - 2021  
105  
Công nghệ thông tin & Cơ sở toán học cho tin học  
Mô hình điều hướng thể hiện luồng chuyển hướng giữa các trang web, mỗi phần tử  
NavigationClass trong mô hình điều hướng ứng với một nút trong luồng điều hướng và từ đó  
ứng với một yêu cầu từ phía client mà controller cần xử lý. Thuộc tính contentClass tham chiếu  
đến class mô hình nội dung và cho biết yêu cầu tương ứng được xử lý bởi lớp Controller nào.  
Quy trình thực hiện gồm các bước như sau:  
Bước 1: Đọc mô hình, tìm gói Content;  
Bước 2: Với mỗi class trong gói Content, tạo class Controller tương ứng trong Java, tìm phần  
tử NavigationClass có thuộc tính contentClass tham chiếu đến;  
Bước 3: Với mỗi NavigationClass, tạo phương thức trong class Controller với annotation  
@RequestMapping ứng với yêu cầu từ client.  
Trong kiến trúc MVC thành phần Controller, nhận các yêu cầu từ phía client và gọi các  
phương thức cần thiết (thường do các service trong thành phần Model cung cấp) để thực hiện  
yêu cầu sử dụng chú thích @RequestMapping để xác định khi nhận được một yêu cầu, phương  
thức nào của controller sẽ được thực thi. Trong mô hình điều hướng, mỗi NavigationClass thể  
hiện một nút trong luồng điều hướng giữa các trang web tương ứng với một yêu cầu từ phía  
client nên được dùng để định nghĩa các phương thức cho controller. Danh sách các luật chuyển  
đổi từ mô hình điều hướng sang mô hình Java được thể hiện tại bảng 3.  
Bảng 3. Các luật chuyển đổi mô hình điều hướng sang mô hình Java.  
Tên luật  
Package2Package  
Class2Class  
Phần tử mô hình điều hướng  
Package  
Class (Content class được Class (Controller class)  
Phần tử Java tương ứng  
Package  
NavigationClass tham chiếu)  
Class2Method  
NavigationClass  
Method (của Controller class)  
2.3. Tạo thành phần View  
Mô hình trình bày cung cấp một tập các phần tử giao diện dùng để mô hình hoá giao diện  
người dùng được hiển thị trên ứng dụng web. Phần tử PresentationPage đại diện cho một trang  
web, trong đó, có thể chứa các phần tử giao diện khác: Text, Image, Button, Anchor, TextInput,  
FileUpload,…  
Quy trình thực hiện gồm các bước như sau:  
Bước 1: Tìm các phần tử PresentationPage, tạo phần tử Root tương ứng trong JSP;  
Bước 2: Với mỗi phần tử PresentationPage, tìm các phần tử giao diện chứa trong đó và  
chuyển thành phần tử giao diện tương ứng trong JSP.  
Các luật chuyển mô hình trình bày thành mô hình JSP, cụ thể như sau:  
Có 08 luật được xây xây dựng để chuyển đổi mô hình trình bày sang mô hình JSP được thể  
hiện ở bảng 4.  
Bảng 4. Các luật chuyển đổi mô hình trình bày sang JSP.  
Tên luật  
PresentationPage2JSP  
PresentationGroup2JSP  
Text2JSP  
Phần tử mô hình trình bày  
PresentationPage  
PresentationGroup  
Text  
Thẻ JSP tương ứng  
html và head  
div  
span  
Image2JSP  
Image  
img  
Button2JSP  
Button  
button  
Anchor2JSP  
Anchor  
a
TextInput2JSP  
FileUpload2JSP  
TextInput  
FileUpload  
input (type=”text”)  
input (type=”file”)  
T. Đ. Diễn, H. Q. Thắng, N. T. Đạt, “Phát triển thuật toán … bệnh thủy sản với ATL.”  
106  
Nghiên cứu khoa học công nghệ  
2.4. Sinh code từ mô hình PSM  
Để thực hiện việc sinh mã nguồn, ta cần thêm một bước chuyển đổi từ các mô hình mức PSM  
thu được ở trên sang code Java và JSP. Việc này được hỗ trợ bởi các truy vấn ATL.  
Truy vấn ATL là chức năng do ATL cung cấp để thực hiện các hành động xử lý, tính toán  
trên các mô hình nguồn mà không sinh ra mô hình đích, trong đó, có việc sinh chuỗi kí tự và ghi  
ra file. Các truy vấn ATL nhận đầu là các mô hình Java, JSP thu được ở phần trên và cho đầu ra  
là các file mã nguồn .java và .jsp tương ứng.  
Sinh code từ mô hình Lava  
Để thực hiện sinh mã nguồn từ các mô hình java nhóm nghiên cứu đã phát triển 06 truy vấn  
ATL, được thể hiện tại bảng 5.  
Bảng 5. Các truy vấn sinh mã từ mô hình java.  
Tên truy vấn  
Java2Code  
toString  
visibility  
scope  
Mục đích  
Duyệt tất cả class, gọi toString() để sinh mã và ghi ra file  
Sinh mã cho một phần tử nào đó (package, class, field, method, parameter)  
Sinh mã phần access modifier (private, default, protected, public)  
Sinh mã từ khoá static  
fullName  
Sinh mã cho tên package, kiểu dữ liệu kèm theo đường dẫn package đầy đủ  
modifierAbstract Sinh mã từ khoá abstract  
Chi tiết truy vấn ATL Java2Code:  
query Java2Code = JAVA!Type.allInstances()  
-> select(e | e.oclIsTypeOf(JAVA!JavaClass))  
-> collect(x | x.toString()  
.writeTo('/UWE2JAVA/Output/java/' +  
thisModule.getPackageName()  
.replaceAll('.', '/') + '/' + x.name + '.java'));  
Sinh code từ mô hình JSP  
Để thực hiện sinh mã nguồn từ các mô hình JSP nhóm nghiên cứu đã phát triển 04 truy vấn  
ATL, được thể hiện tại bảng 6.  
Bảng 6. Truy vấn ATL sinh mã mô hình JSP.  
Tên truy vấn  
JSP2Code  
Ý nghĩa  
Duyệt tất cả các nút Root, với mỗi nút Root, gọi getChildren duyệt tất cả các  
thẻ (mỗi thẻ gọi getAttributes duyệt tất cả các thuộc tính) và gọi toCode để sinh  
mã, ghi vào file tương ứng  
getChildren  
getAttributes  
toCode  
Duyệt tất cả các thẻ  
Duyệt tất cả các thuộc tính  
Sinh mã cho một phần tử (thẻ hoặc thuộc tính)  
Chi tiết truy vấn JSP2Code:  
query JSP2Code = JSP!Root.allInstances()  
-> collect(n | n.getChildren()  
-> iterate(n; acc: String = '' | acc + n.toCode())  
.writeTo('/UWE2JAVA/Output/resources/jsp/' +  
n.documentName));  
3. THỬ NGHIỆM SINH CODE VỚI ỨNG DỤNG WEB BENHTHUYSAN.NET  
Dựa trên các quy tắc và giải thuật sinh mã được phát triển tại phần 2, chúng tôi đã xây dựng  
Tạp chí Nghiên cứu KH&CN quân sự, Số 72, 04 - 2021  
107  
Công nghệ thông tin & Cơ sở toán học cho tin học  
công cụ CODEGER –UWE, cung cấp cho người phát triển web hướng mô hình công cụ để sinh  
mã tự động tạo ứng dụng web.  
Để đánh giá các luật xây dựng được, chúng tôi áp dụng công cụ CODEGER –UWE vào bài  
toán xây dựng website chẩn đoán bệnh thủy sản (benhthuysan.vn). website chẩn đoán và phòng  
trị bệnh động vật thủy sản giúp người nuôi có thể chẩn đoán và đưa ra phác đồ điều trị cho bệnh  
thủy sản ở mọi lúc, mọi nơi, góp phần từng bước hiện đại hóa và phát triển NTTS bền vững ở  
Việt Nam. Ứng dụng web có bốn chức năng: (i) Chức năng gợi ý chọn loại triệu chứng và chuẩn  
đoán bệnh, lưu lại thông tin chuẩn đoán: dựa trên các thông tin người dùng lựa chọn để tinh toán  
kết quả bệnh, người dùng có thể lưu lại kết quả sau khi đã thực hiện chuẩn đoán. (ii) Chức năng  
tìm kiếm thông tin về phác đồ điều trị, thông tin bệnh theo tên bệnh hoặc tên loài thuỷ sản. (iii)  
Chức năng người dùng đánh giá sự chính xác về thông tin bệnh (triệu chứng, phác đồ điều trị, kết  
quả chuẩn đoán,...).  
3.1. Tạo các thành phần Model, Controler, View  
3.1.1. Thành phần model  
Mô hình nội dung (hình 5) biểu diễn các lớp cơ bản trong ứng dụng bệnh thủy sản, sau khi áp  
dụng các luật chuyển đổi được trình bày ở mục 2, mô hình Java được sinh ra tự động. Trong kiến  
trúc MVC, gói model thuộc thành phần Model, chứa các lớp dùng để định nghĩa cấu trúc cơ sở  
dữ liệu (mỗi lớp tương ứng với một bảng, mỗi trường tương ứng với một cột của bảng trong cơ  
sở dữ liệu).  
Hình 5. Mô hình nội dung.  
Hình 6. Mô hình xử lý.  
Trong kiến trúc MVC, gói service cũng thuộc thành phần Model, chứa các phương thức liên  
quan đến dữ liệu mà ứng dụng cần gọi đến (truy xuất cơ sở dữ liệu, chuyển đổi, kiểm tra dữ liệu  
hợp lệ,…). Do đó, mô hình xử lý (hình 6) các các hành vi được dùng để định nghĩa các phương  
thức cho các service, nội dung các phương thức được để trống và cần viết code để phương thức  
thức hiện chức năng mong muốn.  
3.1.2. Thành phần Controler  
Thành phần controller nhận các yêu cầu từ phía client và gọi các phương thức cần thiết  
(thường do các service trong thành phần Model cung cấp) để thực hiện yêu cầu. Spring sử dụng  
chú thích @RequestMapping để xác định khi nhận được một yêu cầu, phương thức nào của  
controller sẽ được thực thi. Trong mô hình điều hướng (hình 7), mỗi NavigationClass thể hiện  
một nút trong luồng điều hướng giữa các trang web tương ứng với một yêu cầu từ phía client nên  
được dùng để định nghĩa các phương thức cho controller. Áp dụng các luật chuyển vào mô hình  
điều hướng của ứng dụng bệnh thủy sản, mô hình Java của thành phần Controler sẽ được sinh để  
đáp ứng cho việc sinh code tự động.  
3.1.3. Thành phần View  
Áp dụng các luật chuyển đổi, mô hình trình bày (hình 8) của ứng dụng benhthuysan.vn thu  
được mô hình JSP hoàn toàn tương thích với JSP Metamodel.  
T. Đ. Diễn, H. Q. Thắng, N. T. Đạt, “Phát triển thuật toán … bệnh thủy sản với ATL.”  
108  
Nghiên cứu khoa học công nghệ  
Hình 7. Mô hình điều hướng.  
3.2. Thực hiện sinh mã  
Hình 8. Mô hình trình bày.  
Áp dụng các luật chuyển đổi và các truy vấn ATL để sinh mã tự động cho ứng dụng web. Mã  
nguồn Java và JSP tương ứng với ứng dụng web có 3 gói: model, controller và service (hình 9).  
Trong đó, Gói model gồm các lớp thể hiện mô hình nội dung ví dụ: tên cá, bệnh cá, triệu trứng  
bệnh,…; Gói service gồm các class Service chứa các phương thức liên quan đến dữ liệu (truy  
xuất, chuyển đổi, kiểm tra hợp lệ,…) được hệ thống gọi đến khi cần; Gói controller chứa các  
class xử lý các luồng điều hướng trong ứng dụng bao gồm 2 lớp: DiseaseController,  
DiagnosisController.  
Sau khi bổ sung mã nguồn còn thiếu, ứng dụng thu được có giao diện sử dụng như hình 10.  
Hình 9. Cấu trúc mã nguồn được sinh tự động.  
Hình 8. Giao diện web benhthuysan.vn.  
Ưu điểm của nghiên cứu này là chuyển đổi mô hình và tạo mã tự động giữa các mô hình hiệu  
quả hơn. Kết quả cho thấy, việc chuyển đổi tự động giữa các mô hình trong UWE tốt hơn trong  
các nghiên cứu [12], bao gồm việc mô tả chi tiết các thành phần của mô hình sau chuyển đổi  
được thể hiện chi tiết hơn, tiết kiệm thời gian hơn do ít phải can thiệp thủ công. Cụ thể, với mô  
hình nội dung, xử lý đối với công cụ CODEGER-UWE do nhóm nghiên cứu đề xuất có số lượng  
class sinh ra ít hơn nhưng trong mỗi class sinh ra có nhiều attributes và operations hơn (bảng 7).  
Vì vậy, việc sinh các class này có ý nghĩa hơn thay vì các class rỗng.  
Bảng 7. Bảng so sách kết quả chuyển đổi mô hình nội dung và mô hình xử lý.  
CODEGER-UWE  
Classes Attributes Operations  
MagicUWE  
Classes Attributes Operations  
Mô hình  
Nội dung  
Xử lý  
5
6
10  
18  
2
0
4 operations  
(2 parameters)  
7
5
10  
0
0
Tạp chí Nghiên cứu KH&CN quân sự, Số 72, 04 - 2021  
109  
Công nghệ thông tin & Cơ sở toán học cho tin học  
Bảng 8. Bảng so sánh kết quả chuyển đổi mô hình điều hướng.  
CODEGER-UWE  
MagicUWE  
Mô hình  
Navigation  
Classes  
8
Navigation  
Classes  
8
ProcessClass Links  
10 17  
ProcessClass Links  
10 18  
Điều hướng  
Bảng 9. Bảng so sách kết quả chuyển đổi mô hình trình bày.  
CODEGER-UWE MagicUWE  
Properties  
Mô hình  
Classes  
Properties  
Classes  
Trình bày  
3
9
3
9
Như vậy, phương pháp tiếp cận của nhóm nghiên cứu giúp đảm bào tính thống nhất giữa các  
mô hình sau khi chuyển đổi, góp phần cải thiện chất lượng chuyển đổi mô hình sang mô hình,  
mô hình sang text, đảm bảo hiệu quả chuyển đổi mô hình cho phát triển ứng dụng Web hướng  
mô hình.  
4. KẾT LUẬN  
Bài báo đã trình bày kết quả nghiên cứu phát triển các quy tắc chuyền đổi mô hình gồm hai  
phần. Thứ nhất, chuyển đổi model-to-model cho phép chuyển đổi từ các mô hình mức PIM sang  
các mô hình mức PSM (mô hình Java và mô hình JSP). Thứ hai, chuyển đổi model-to-code cho  
phép sinh mã từ các mô hình mức PSM thu được thành các file mã nguồn .java và .jsp. Cách tiếp  
cận của chúng tôi cung cấp một giải pháp hiệu quả cho vấn đề sinh mã tự động theo phương pháp  
phát triển ứng dụng Web hướng mô hình UWE. Chúng tôi đã thực hiện được một nghiên cứu  
như sau: Đề xuất giải pháp và xây dựng 23 quy tắc chuyển đổi sang mô hình Java (chuyển đổi từ  
mức PIM sang PSM): 12 quy tắc chuyển thành, thành phần Model từ mô hình nội dung; 08 quy  
tắc tạo thành phần View từ mô hình trình bày và 03 quy tắc tạo thành phần Controller từ mô hình  
điều hướng. Phát triển 06 truy vấn ATL để sinh mã các mô hình Java; 04 truy vấn ATL để sinh  
mã từ mô hình JSP. Từ các quy tắc, truy vấn ATL đã phát triển, nhóm nghiên cứu đã xây dựng  
công cụ CODEGER-UWE để hỗ trợ sinh mã nguồn java và jsp để tạo ứng dụng web  
benhthuysan.vn  
Trong thời gian tới chúng tôi tiếp tục phát triển, hoàn thiện các quy tắc chuyển đổi thành mô  
hình PSM và những giải thuật sinh mã nguồn tự động áp dụng vào các bài toán khác nhau hướng  
tới đưa công cụ vào sử dụng rộng rãi để tạo ứng dụng web tự động.  
TÀI LIỆU THAM KHẢO  
[1]. Q. X. Kevin Lano. (2016). "Agile model-based development using UML-RSDS".  
[2]. Q. X. Kevin Lano and S. Kolahdouz-Rahimi, "Agile Specification of Code Generators for Model-  
Driven Engineering," in The Fifteenth International Conference on Software Engineering Advances,  
Porto, Portugal, 2020.  
[3]. N. Kharmoum, S. Retal, S. Ziti, and F. Omary, "A Novel Automatic Transformation Method from the  
Business Value Model to the UML Use Case Diagram," presented at the Advanced Intelligent  
Systems for Sustainable Development (AI2SD’2019), Marrakech, Morocco, 2019.  
[4]. A. A. H. Alzahrani, "4GL Code Generation: A Systematic Review," (IJACSA) International Journal  
of Advanced Computer Science and Applications, vol. Vol. 11, p. 8, 2020.  
[5]. Y. Rhazali, A. E. Hachimi, I. Chana, and M. Lahmer. (2020). "Automate Model Transformation  
From CIM to PIM up to PSM in Model- Driven Architecture".  
[6]. A. Bajovs, O. Nikiforova, and J. Sejans, "Code Generation from UML Model: State of the Art and  
Practical Implications," Applied Computer Systems, vol. 14, p. 10, 08 Jun 2013 2013.  
[7]. J. Küster, "Model-Driven Software Engineering Code Generation," IBM Research – Zurich,  
Switzerland2011.  
[8]. K. Czarnecki and S. Helsen, "Feature-Based Survey of Model Transformation Approaches," IBM  
Systems Journal, vol. 45, pp. 621 - 645, March 15, 2006 2006.  
T. Đ. Diễn, H. Q. Thắng, N. T. Đạt, “Phát triển thuật toán … bệnh thủy sản với ATL.”  
110  
   
Nghiên cứu khoa học công nghệ  
[9]. K. C. a. S. Helsen, "Classification Classification of Model Transformation Approaches," presented at  
the OOPSLA’03 Workshop on Generative Techniques in the Context of MDA, USA, 2005.  
[10]. E. Syriani, L. Luhunu, and H. Sahraoui, "Systematic Mapping Study of Template-based Code  
Generation," Computer Languages, Systems & Structures, pp. 43-62, June 19, 2018 2018.  
[11]. K. Nora, "Transformation Techniques in the Model-Driven Development Process of UWE," in sixth  
international conference on Web engineering California, USA, 2007, p. 10.  
[12]. M. Busch and N. Koch, "MagicUWE – A CASE Tool Plugin for Modeling Web Applications," in 9th  
International Conference, ICWE 2009, Spain, 2009, pp. 505-508.  
[13]. I. Essebaa, C. Salima, and M. Ramdani, "MoDAr-WA: Tool Support to Automate anMDA Approach  
for MVCWeb Application," Computers 2019, p. 23, 2019.  
[14]. M. h. RAHMOUNI and S. MBARKI, "Model-Driven Generation of MVC2 Web Applications: From  
Models to Code," International Journal of Engineering and Applied Computer Science (IJEACS),  
vol. Volume: 02, 2017.  
[15]. G. Paolone, M. Marinelli, R. Paesani, and P. D. Felice, "Automatic Code Generation of MVC Web  
Applications," computers, vol. Vol. 9, p. 29, 2020.  
[16]. M. Busch and M. Á. G. d. Dios, "ActionUWE: Transformation of UWE to ActionGUI Models,"  
Institute for Informatics, Germany2012.  
[17]. L. Abdellatif, M. Chhiba, A. Tabyaoui, and O. Mjihil, "Model driven architecture approach for  
application security integration," Journal of Theoretical and Applied Information Technology, vol. 8,  
p. 13, 30th April 2017.  
[18]. A. F. Subahi, "A Business User Model-Driven Engineering Method for Developing Information  
Systems," Department of Computer Science, University of Sheffie, England, UK, 2015.  
[19]. T. D. Dien, H. Q. Thang, and T. Q. Khanh, "Development of The Rules for Model Transformation  
with OCL Integration in UWE," in The 7th International Conference On Frontiers Of Intelligent  
Computing: Theory And Application (FICTA 2018), Da Nang, Viet Nam, 2018.  
[20]. Q.-T. HUYNH, D.-D. TRAN, T.-M.-A. BUI, and P.-L. NGUYEN, "Development of Rules and  
Algorithms for Model-Driven Code Generator with UWE Approach," presented at the Advancing  
Technology Industrialization Through Intelligent Software Methodologies, Tools and Techniques -  
Proceedings of the 18th International Conference on New Trends in Intelligent Software  
Methodologies, Tools and Techniques (SoMeT_19), Kuching, Malaysia, 2019.  
ABSTRACT  
DEVELOPMENT OF CODE GENERATOR ALGORITHMS FOR WEB APPLICATION  
AQUATIC DISEASES DIAGNOSE WITH ATL  
The research paper develops rules and algorithm code generation from models follow  
by UWE technical (UML-based Web Engineering) to create a web application for aquatic  
disease diagnosis (benhthuysan.vn). According to MVC architecture, the rules are  
implemented in ATL transformation language, ensuring the efficiency of model  
transformation for model-oriented Web application development. In this paper, we present  
the MDE approach to creating Web applications from UWE web models. We have  
improved the construction of a number of rules, an automatic code generation algorithm  
to improve, improve the efficiency of the conversion from model to code from UWE models  
and built the CODEGER-UWE tool to build Web application. This is a method with a  
clear, handy development process.  
Keywords: Automatic code generation; Model transformation; ATL; Web applications.  
Nhận bài ngày 13 tháng 3 năm 2021  
Hoàn thiện ngày 06 tháng 4 năm 2021  
Chấp nhận đăng ngày 12 tháng 4 năm 2021  
Địa chỉ: Viện Công nghệ Thông tin và Truyền thông, Trường Đại học Bách Khoa Hà Nội.  
*Email: [email protected].  
Tạp chí Nghiên cứu KH&CN quân sự, Số 72, 04 - 2021  
111  
                 
pdf 10 trang baolam 23260 Free
Bạn đang xem tài liệu "Phát triển thuật toán sinh code cho ứng dụng web chuẩn đoán bệnh thủy sản với ATL", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfphat_trien_thuat_toan_sinh_code_cho_ung_dung_web_chuan_doan.pdf