CHƯƠNG 1 : PHÁT TRIỂN PHẦN MỀM HƯỚNG MÔ HÌNH
3.3. Sinh mã sử dụng ngôn ngữ ATL
3.3.3. Xây dựng quy tắc chuyển đổi từ PSM sang mã nguồn
Để 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 tố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. 3.3.3.1. Sinh code từ mơ hình java
Để thực hiện sinh mã nguồn từ các mơ hình java tác giảđã phát triển 06 truy vấn ATL, được thể hiện tại bảng 3.11.
Bảng 3.11. Các truy vấn sinh mã từ mơ hình java
Tên truy vấn Mục đích
Java2Code Duyệt tất cả class, gọi toString() để sinh mã và ghi ra file toString Sinh mã cho một phần tửnào đó (package, class, field,
method, parameter)
visibility Sinh mã phần access modifier (private, default, protected, public)
scope 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 đủ
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')); 3.3.3.2. Sinh code từ mơ hình JSP
Để thực hiện sinh mã nguồn từ các mơ hình JSP tác giảđã sử dụng 04 truy vấn ATL, được thể hiện tại bảng 3.12.
Bảng 3.12. Truy vấn ATL sinh mã mơ hình JSP
Tên truy vấn Ý nghĩa
JSP2Code 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 Duyệt tất cả các thẻ
getAttributes Duyệt tất cả các thuộc tính
toCode 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.4. Thử nghiệm sinh mã cho ứng dụng web benhthuysan.vn 3.4.1. Công cụ sinh mã CODEGER-UWE 3.4.1. Công cụ sinh mã CODEGER-UWE
Công cụ hỗ trợ đầy đủ là yếu tố quan trọng quyết định thành công của phương pháp hoặc kỹ thuật phát triển phần mềm nói chung và ứng dụng Web nói riêng [1]. Việc sử dụng công cụ sinh mã sẽ cải thiện quy trình phát triển phần mềm và làm tăng chất lượng của mã được tạo ra [2]. Đối với phương pháp UWE (UML-based Web Engineering) cũng đã có một số công cụnhư ArgoUWE, UWE4JSF [3]. Đây là công
cụ tự động sinh mã ứng dụng Web với nền tảng JSF (JavaServer Faces) từ mơ hình UWE, bao gồm một chuỗi các plugin được tích hợp trong mơi trường mơ hình hóa Eclipse EMF (Eclipse Modeling Framework), được xây dựng và đóng gói thành các thư viện Java (.jar). Đây là minh chứng cho khả năng sinh mã nguồn cho ứng dụng Web hướng mơ hình theo phương pháp UWE, nhưng hiện tại đã khơng cịn được tiếp tục phát triển và không thể vận hành với các phiên bản mới của Eclipse cũng như UWE profile. Công cụ MagicUWE hỗ trợ thiết kế hệ thống ứng dụng web với phương pháp UWE [4], giúp phát triển ứng dụng web các hoạt động lập mơ hình bằng cách sử dụng cấu hình UWE và chuyển đổi giữa các mơ hình UWE. MagicUWE được triển khai như một plugin cho công cụ MagicDraw. Tuy nhiên, công cụ này chủ yếu tập trung vào chuyển đổi mơ hình, chưa tập trung cho việc sinh mã. Trong nội dung này, tác giả trình bày cơng cụ CODEGER-UWE, một plugin được tác giả xây dựng và tích hợp trong phần mềm MagicDraw 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.
CODEGER-UWE là cơng cụđược tích hợp các quy tắc chuyển đổi mơ hình và các giải thuật sinh mã, để tạo ứng dụng web một cách tựđộng từcác mơ hình UWE tương ứng với các thành phần trong mơ hình Web MVC. Đây là một cơng cụ với quy trình phát triển rõ ràng, tiện dụng, áp dụng công cụđể phát triển ứng dụng web sẽ làm giảm rất nhiều thời gian cho việc phát triển ứng dụng Web.
Hình 3.19.Kiến trúc CODEGER –UWE
Quy tắc chuyển đổi mơ hình
Chuyển đổi mơ hình được phân chia thành một vài mô đun. Công việc cần làm là thiết lập từng mô đun cho mỗi công đoạn chuyển đổi mơ hình UWE. Trong mơ đun
này đã tích hợp 31 quy tắc chuyển đổi từ mơ hình u cầu sang mơ hình nội dung, điều hướng, xử lý và trình bày với ngơn ngữ chuyển đổi mơ hình ATL. Để chuyển đổi từCIM sang PIM, đầu vào là mơ hình u cầu (CIM), dựa trên UML Metamodel, UWE Metamodel và UWE Profile được ánh xạ với nhau, chúng gồm các phần có quan hệ tuyến tính với nhau. Ngồi ra, UWE Meta-model cịn là sự mở rộng của UML Meta-model. Do đó, việc chuyển đồi phần lớn gồm các quy tắc sẽ ánh xạ các thành phần khuôn mẫu UML (stereotype) sang các thành phần tương ứng của UWE Metamodel và các thành phần UML cơ bản được lồng ghép vào. Các quy tắc ATL được phân chia theo mỗi mơ hình UWE để xử lý việc chuyển đổi. Kết quả sau chuyển đổi là các mơ hình nội dung, điều hướng, xử lý và trình bày cho ứng dụng Web được tạo ra.
Quy tắc và giải thuật sinh code
Chuyển đổi từCIM sang PIM đơn thuần chỉ là ánh xạ giữa mơ hình UML và mơ hình UWE. Đối với chuyển đổi UWE2JSF (hay là từ PIM sang PSM) trong CODEGER-UWE áp dụng phương pháp khuôn mẫu và metamodel, 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
Hình 3.21. Quy trình sinh mã nguồn từmơ hình điều hướng
Hình 3.23. Quy trình sinh mã JSP từ mơ hình trình bày
3.4.2. Phát triển ứng dụng benhthuysan.vn
Dựa trên các quy tắc và giải thuật sinh mã được phát triển và trình bày tại mục 3.3, tác giảđã xây dựng 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.
Để thử nghiệm và đánh giá các quy tắc được xây dựng, tác giả đề xuất áp dụng công cụ CODEGER–UWE vào bài toán xây dựng ứng dụng web Chẩn đoán bệnh thủy sản (benhthuysan.vn). Đây là ứng dụng web, mô phỏng chuyên gia bệnh thủy sản, chẩn đoán và đưa ra phác đồđiều trị cho các loài thủy sản bị bệnh với một giao diện người dùng thân thiện. Khi ao nuôi bị bệnh, người dân chưa thể biết là bệnh gì và khơng có chun gia bệnh để tư vấn. Người nuôi thủy sản lựa chọn những triệu chứng (dấu hiệu) mà loại thủy sản trong ao nuôi mắc phải, ứng dụng web sẽ chẩn đoán và đưa ra phác đồđiều trị bệnh, giúp người ni tự chẩn đốn và điều trị sớm dịch bệnh mà ao của mình mắc phải, nhằm giảm thiểu rủi ro do dịch bệnh, tăng năng suất cho người nuôi trồng thủy sản.
Công cụ CODEGER –UWE đã được hoàn thiện. Toàn bộ mã nguồn được cài đặt, lưu trữ trên Github, tuân thủcác quy định phần mềm nguồn mở. Trong công cụ này, quá trình chuyển đổi mơ hình nền tảng độc lập (PIM) sang mơ hình nền tảng cụ thể (PSM), là quá trình chuyển đổi được xây dựng trên một nền tảng Web cụ thể và các quy tắc chuyển đổi được xây dựng tương ứng với mơ hình MVC. Trong đó những mối quan tâm của một ứng dụng Web tương ứng với vai trị của Model (nội dung), View (trình bày) và Controller (điều hướng và xử lý). Mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác, giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp, bảo trì.
Để thử nghiệm và đánh giá công cụ CODEGER –UWE, tác giả áp dụng ví dụ benhthuysan.vn, đây là một ứng về chẩn đốn bệnh thủy sản cho phép người dùng tự chuẩn đoán bệnh thủy sản cho ao ni của mình.
Quy trình thực hiện như sau:
- Bước 1: Xác định đầu vào của công cụ
Các yêu cầu trong UWE được mơ hình hóa bằng biểu đồ ca sử dụng, CODEGER –UWE cho phép chuyển đổi từ mơ hình u cầu (Use case) sang mơ hình nội dung, điều hướng, xử lý và trình bày với các quy tắc chuyển đổi đã được tác giả bổ sung, phát triển, giúp cho quá trình chuyển đổi mơ hình hiệu quảhơn.
Hình 3.25.Biểu đồ Activity, mơ hình đầu vào của ứng dụng
- Bước 2: Thực hiện chuyển đổi mơ hình
Lần lượt thực hiện chuyển đổi mơ hình từ CIM to PIM – to PSM
Hình 3.27. Mơ hình điều hướng
Hình 3.28.Mơ hình xử lý
- Bước 3: Thực hiện sinh mã sử dụng công cụ CODEGER –UWE.
Áp dụng các quy tắc 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 3.30). 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 và Diagnosis Controller. 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 3.31
Hình 3.30.Cấu trúc mã nguồn được sinh tựđộng
Website Chuẩn đốn bệnh hỗ trợ người ni trồng thủy sản chẩn đốn bệnh cho 6 lồi thuỷ sản với 62 loại bệnh khác nhau như: Cá trắm, cá chép, rô phi, cá tra…. Hệ thống đã được thử nghiệm và hiện nay đang được chạy chính thức trên website www.benhthuysan.vn. Sản phẩm của đề tài được áp dụng trong thực tế, giúp người nuôi thủy sản tự chẩn đoán và đưa ra phác đồđiều trị kịp thời, giúp giảm thiểu rủi ro do dịch bệnh, tăng năng suất và nâng cao thu nhập cho người nuôi thủy sản.
3.4.3. Kết quả và thảo luận
Ư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 [71], 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 tác giả đề 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 3.13). 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 3.13. Bảng so sách kết quả chuyển đổi mơ hình nội dung và xử lý
Mơ hình
CODEGER-UWE MagicUWE
Classes Attributes Operations Classes Attributes Operations
Nội
dung 5 6 10 18 2 0
Xử lý 7 5 4 operations
(2 parameters) 10 0 0
Bảng 3.14. Bảng so sách kết quả chuyển đổi mơ hình điều hướng
Mơ hình
CODEGER-UWE MagicUWE
Navigation
Classes ProcessClass Links
Navigation
Classes ProcessClass Links
Điều
hướng 8 10 17 8 10 18
Bảng 3.15. Bảng so sách kết quả chuyển đổi mơ hình trình bày
Mơ hình CODEGER-UWE MagicUWE
Classes Properties Classes Properties
Như vậy, phương pháp tiếp cận của tác giả 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 code, đả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.
Để đánh giá sản phẩm của đề tài, tác giả đã khảo sát thử nghiệm với chuyên gia thủy sản, người nuôi trồng thủy sản và sinh viên thủy sản. Chuyên gia thủy sản sẽ xem xét, đánh giá tính đúng đắn của các kết quảcịn người ni trồng thủy sản và sinh viên thủy sản sẽ xem thửchương trình có giúp ích gì cho bản thân họ trong việc chẩn đốn bệnh hay khơng. Những người thử nghiệm được sử dụng hệ thống và đánh giá với 5 mức độ là: Rất hài lịng, hài lịng, bình thường, khơng hài lịng và rất khơng hài lịng. Kết quả khảo sát thử nghiệm hệ thống được thể hiện tại hình 3.32
Hình 3.32. Kết quảđánh giá thử nghiệm benhthuysan.vn
3.5. Tiểu kết chương
Trong chương 3, luận án đã thực hiện nghiên cứu những nội dung về sinh mã nguồn tự động cho ứng dụng web hướng mơ hình theo phương pháp UWE với kiến trúc MVC. Luận án đã trình bày chi tiết các giải thuật liên quan đến phương pháp sinh mã, và tích hợp phát triển cơng cụ CODEGER-UWE sinh code cho ứng dụng web theo phương pháp UWE với ngơn ngữ chuyển đổi mơ hình ATL.
Cụ thể, các đóng góp khoa học chủ yếu của nghiên cứu gồm:
(1) Luận án đã trình bày 03 quy tắc sinh mã tựđộng từ các mơ hình UWE: Quy tắc CM2M sinh mã thành phần Model từ mơ hình nội dung; Quy tắc PRES2V 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ý.
0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0
Rất hài lịng Hài lịng Bình thường Khơng hài lịng Rất khơng hài
lịng
(2) Xây dựng 23 quy tắc chuyển đổi sang mơ hình java: 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. Các nội dung này được công bố trong CT4, CT5. (3) Từ các quy tắc chuyển đổi mơ hình và sinh mã nguồn, luận án đã xây dựng
công cụ CODEGER-UWE để hỗ trợ chuyển đổi mơ hình và sinh mã tựđộng phát triển ứng dụng web từ mơ hình UWE theo kiến trúc MVC để hỗ trợ sinh mã nguồn để tạo ứng dụng web benhthuysan.vn. Nội dung này được công bố trong CT 6 và CT 8.
KẾT LUẬN
Luận án đã trình bày phương pháp tiếp cận MDE để việc tạo ra các ứng dụng Web từ các mơ hình theo phương pháp UWE. Luận án đã xây dựng thành công các quy tắc chuyển đổi mơ hình từ CIM sang PIM và từ PIM sang PSM, cũng như chuyển đổi PSM thành mã chương trình để xây dựng ứng dựng Web benhthuysan.vn, với ngơn ngữ chuyển đổi mơ hình ATL. Phương pháp tiếp cận giúp đảm bảo tính thống nhất giữa các mơ hình sau khi chuyển đổi, đả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. Qua nghiên cứu, luận án đã khẳng định được một sốđóng góp cơ bản đối với lĩnh vực nghiên cứu đó là:
(1) Tổng hợp lý thuyết và từđó bổ sung phát triển các quy tắc chuyển đổi mơ hình từ CIM to PIM to PSM to CODE cho phát triển ứng dụng web hướng mơ hình theo phương pháp UWE. Nội dung này được trình bày trong chương 2 và có 4 cơng trình cơng bố liên quan: CT1, CT2, CT3, CT7.
(2) Xây dựng phương pháp sinh mã và tích hợp phát triển cơng cụ CODEGER-UWE sinh code cho ứng dụng web, theo phương pháp UWE với ngơn ngữ chuyển đổi mơ hình ATL. Nội dung này được trình bày trong chương 3 và có 2 cơng trình cơng bố liên quan: CT4, CT5.
(3) Áp dụng xây dựng Chuẩn đoán bệnh thủy sản trên nền tảng benhthuysan.vn. Nội dung này được trình bày trong chương 3 (mục 3.4) và có 2 cơng trình cơng bố liên quan: CT6, CT8.
Cụ thểhơn, luận án đã thực hiện được những kết quả sau: