Các công cụ chuyển đổi mô hình, sinh mã nguồn hiện có đã đáp ứng được một phần nhu cầu cho phương pháp phát triển ứng dụng Web hướng mô hình.. Các đóng góp khoa học của luận văn Luận vă
Trang 1B Ộ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
Nguy ễn Thanh Giang
NGHIÊN C ỨU CẢI TIẾN KỸ THUẬT SINH MÃ NGUỒN
THEO K Ỹ THUẬT UWE
Chuyên ngành: Kỹ thuật phần mềm
LUẬN VĂN THẠC SĨ KỸ THUẬT
NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS.TS Huỳnh Quyết Thắng
Trang 2L ỜI CAM ĐOAN
Tôi – Nguy ễn Thanh Giang – cam kết luận văn là công trình nghiên cứu của bản thân tôi dưới sự hướng dẫn của PGS.TS Huỳnh Quyết Thắng
Các kết quả nêu trong luận văn là trung thực, không phải là sao chép toàn văn của
Trang 3LỜI CAM ĐOAN 2
DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ 5
DANH MỤC HÌNH 7
DANH MỤC BẢNG 9
MỞ ĐẦU 11
1 Mục đích nghiên cứu của luận văn 11
2 Nội dung của luận văn 11
3 Các đóng góp khoa học của luận văn 12
Chương 1: Tổng quan về kiến trúc hướng mô hình và kỹ thuật Web hướng mô hình UWE 13
1.1 Kiến trúc hướng mô hình 13
1.2 Các kỹ thuật Web hướng mô hình 13
1.3 Kỹ thuật UWE 16
1.3.1 Mô hình yêu cầu 18
1.3.2 Mô hình nội dung 19
1.3.3 Mô hình điều hướng 19
1.3.4 Mô hình xử lý 20
1.3.5 Mô hình trình bày 20
1.4 Tổng hợp các nghiên cứu về kỹ thuật sinh mã nguồn trong phát triển ứng dụng Web hướng mô hình 22
1.4.1 Các phương pháp sinh mã hướng mô hình 22
1.4.2 OptimalJ 24
1.4.3 UWE4JSF 24
1.5 Tiểu kết chương 25
Chương 2: Phát triển các giải thuật sinh mã nguồn 27
2.1 Đặt vấn đề 27
2.2 Quy trình chuyển đổi MDA cho kỹ thuật UWE 28
2.2.1 Lựa chọn nền tảng công nghệ 28
2.2.2 Lựa chọn mô hình Web 29
2.2.3 Lựa chọn phương pháp sinh mã 30
2.2.4 Quy trình chuyển đổi MDA cho kỹ thuật UWE 31
2.3 Xây dựng giải thuật CM2M sinh mã thành phần Model từ mô hình nội dung (Content Model to Model Code Genenation) 32
Trang 42.4 Xây dụng giải thuật PRES2V sinh mã thành phần View từ mô hình trình bày
(Presenation Model to View Code Generation) 38
2.5 Xây dụng giải thuật NPROM2C sinh mã thành phần Controller từ mô hình điều hướng và xử lý (Navigation and Processing Model to Controller Code Generation)43 2.5.1 Xây dựng giải thuật NM2C 43
2.5.2 Xây dựng giải thuật PROM2C 48
2.6 Tiểu kết chương 52
Chương 3: Cài đặt công cụ CODEGER-UWE tích hợp các giải thuật và áp dụng, đánh giá 53
3.1 Xây dựng công cụ CODEGER-UWE 53
3.2 Áp dụng công cụ CODEGER-UWE vào một bài toán cụ thể 55
3.3 Đánh giá 61
3.4 Tiểu kết chương 62
KẾT LUẬN 63
DANH MỤC THAM KHẢO 65
PHỤ LỤC 67
Trang 5DANH M ỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ
Từ viết tắt, thuật ngữ Từ viết đầy đủ
ATL Atlas Transformation Language
CIM Computation Independent Model
CSS Cascading Style Sheets
CWM Common Warehouse Metamodel
DTD Document Type Definition
EMF Eclipse Modeling Framework
HTML Hypertext Markup Language
ISM Implementation Specific Model
J2EE Java 2 Platform, Enterprise Edition
JET Java Emitter Templates
JSF Java Server Faces
JSP Java Server Pages
JSTL JSP Standard Tag Library
MDA Model Driven Architecture
MDD Model Driven Development
MDE Model Driven Engineering
MDSD Model Driven Software Development
MDWE Model Driven Web Engineering
MOF Meta Object Facility
MVC Model View Controller
OCL Object Constraints Language
OMG Object Management Group
OOHDM Object Oriented Hypermedia Design Method
OOHDMDA Object Oriented Hypermedia Design Method Driven Approach PIM Platform Independent Model
PSM Platform Specific Model
QVT Query Views Transformation
UML Unified Modeling Language
Trang 6UWE Uml-based Web Engineering
W2000 (HDM) Hypertext Design Model
WebSA Web Software Architecture
WTP Web Tools Platform
XMI XML Metadata Interchange
XML eXtensible Markup Language
XSLT eXtensible Stylesheet Language Transformation
Trang 7DANH M ỤC HÌNH
Hình 1.1 Cấu trúc MDA cho kỹ thuật Web [6] 14
Hình 1.2 UWE metamodel [15] 16
Hình 1.3 UWE profile cho mô hình yêu cầu [15] 18
Hình 1.4 UWE profile cho mô hình nội dung [15] 19
Hình 1.5 UWE profile cho mô hình điều hướng [15] 20
Hình 1.6 UWE profile cho mô hình xử lý [15] 21
Hình 1.7 UWE profile cho mô hình trình bày [15] 22
Hình 1.8 Phương pháp sinh mã dựa trên khuôn mẫu và bộ lọc [8] 22
Hình 1.9 Phương pháp sinh mã dựa trên khuôn mẫu và metamodel [8] 23
Hình 1.10 Phương pháp sinh mã dựa trên API [8] 23
Hình 1.11 Phương pháp sinh mã dựa trên khuôn mẫu [3] 24
Hình 1.12 Quy trình sinh mã UWE4JSF [4] 25
Hình 2.1 Cấu trúc MDA cho ứng dụng web theo kỹ thuật UWE 27
Hình 2.2 Mô hình MVC trong Web [17] 29
Hình 2.3 Java metamodel 30
Hình 2.4 JSP metamodel 31
Hình 2.5 Chuyển đổi mô hình PIM sang PSM, mã nguồn theo mô hình MVC 31
Hình 2.6 Các thành phần trong mô hình nội dung 32
Hình 2.7 Các quy tắc cấu thành giải thuật CM2M 33
Hình 2.8 Quy trình chuyển đổi sinh mã nguồn từ mô hình nội dung 36
Hình 2.9 Các thành phần trong mô hình trình bày 38
Hình 2.10 Các quy tắc cấu thành giải thuật PRES2V 38
Hình 2.11 Quy trình chuyển đổi sinh mã JSP từ mô hình trình bày 42
Hình 2.12 Các thành phần trong mô hình điều hướng 44
Hình 2.13 Các quy tắc cấu thành giải thuật NM2C 44
Hình 2.14 Quy trình chuyển đổi sinh mã nguồn từ mô hình điều hướng 47
Hình 2.15 Các thành phần trong mô hình xử lý 49
Hình 2.16 Các quy tắc cấu thành giải thuật PROM2C 49
Hình 2.17 Quy trình chuyển đổi sinh mã nguồn từ mô hình xử lý 51
Hình 3.1 Kiến trúc MagicDraw và CODEGER-UWE 54
Hình 3.2 Cài đặt CODEGER-UWE 54
Hình 3.3 Giao diện công cụ CODEGER-UWE 55
Trang 8Hình 3.4 Bốn mô hình của AddressBook 57
Hình 3.5 Mã nguồn sinh ra từ bốn mô hình UWE 58
Hình 3.6 Khung ứng dụng Web 59
Hình 3.7 Giao diện trang web 59
Hình 3.8 Hiện thị các kết quả tìm kiếm Contact 60
Hình 3.9 Giao diện tạo mới Contact 60
Hình 3.10 Giao diện cập nhật một Contact đã có 60
Hình 3.11 Hiện thị lại danh sách sau khi đã xóa một Contact 61
Trang 9DANH M ỤC BẢNG
Bảng 1 So sánh các kỹ thuật Web hướng mô hình [6] 16
Bảng 2 Các thành phần khuôn mẫu trong UWE [15] 17
Bảng 3 Bảng đánh giá mã nguồn 61
Trang 10L ỜI CẢM ƠN
Để có thể hoàn thành luận văn tốt nghiệp này, em xin chân thành cảm ơn thầy hướng dẫn luận văn tốt nghiệp, PGS.TS Huỳnh Quyết Thắng, bộ môn Công nghệ phần
mềm, trường đại học Bách Khoa Hà Nội Thầy đã nhiệt tình hướng dẫn, truyền đạt
những kiến thức cần thiết và định hướng cho em trong quá trình thực hiện đề tài
Em xin chân thành cảm ơn sự giúp đỡ quý báu của anh Trần Đình Diễn, nghiên cứu sinh tại bộ môn Công nghệ phần mềm, trường đại học Bách Khoa Hà Nội
Em xin chân thành cảm ơn các thầy cô giáo ở bộ môn Công nghệ phần mềm, trường Đại học Bách Khoa Hà Nội
Dù đã cố gắng nhưng luận văn chắc chắn không tránh khỏi thiếu sót, em rất mong
nhận được ý kiến đóng góp của các thầy cô
Em xin chân thành cảm ơn!
Trang 11Các công cụ chuyển đổi mô hình, sinh mã nguồn hiện có đã đáp ứng được một phần nhu cầu cho phương pháp phát triển ứng dụng Web hướng mô hình Đề tài tập trung
cải tiến kỹ thuật sinh mã để nâng cao chất lượng mã nguồn, tăng năng suất, giảm bớt
thời gian cho người phát triển
1 M ục đích nghiên cứu của luận văn
Mục đích của luận văn là nghiên cứu cải tiến kỹ thuật sinh mã để nâng cao chất lượng mã nguồn, tăng năng suất, tiết kiệm thời gian và chi phí cho ứng dụng Web, giúp phát triển ứng dụng Web đơn giản, linh hoạt, nhanh chóng và hiệu quả hơn
Việc cải tiến này được thể hiện thông qua xây dựng bộ quy tắc chuyển đổi cấp mô hình và xây dựng công cụ sinh mã nguồn dựa trên bộ quy tắc này
Luận văn có 3 nhiệm vụ cụ thể:
1) Trình bày bộ quy tắc chuyển đổi cấp mô hình: từ mô hình độc lập với nền tảng công nghệ (PIM) sang mô hình theo nền tảng công nghệ cụ thể (PSM) với nền tảng công nghệ được áp dụng là J2EE (Java 2 Platform, Enterprise Edition)
2) Xây dựng công cụ sinh mã nguồn CODEGER-UWE dựa trên bộ quy tắc chuyển đổi cấp mô hình
3) Áp dụng công cụ CODEGER-UWE đã xây dựng vào bài toán cụ thể và đánh giá
kết quả
2 N ội dung của luận văn
Nội dung luận văn bao gồm 3 chương:
Chương 1: Tổng quan về kiến trúc hướng mô hình và kỹ thuật Web hướng mô hình UWE Chương này giới thiệu kiến trúc hướng mô hình, các kỹ thuật Web hướng mô
Trang 12hình, tổng hợp các nghiên cứu về kỹ thuật sinh mã nguồn trong phát triển ứng dụng hướng mô hình
Chương 2: Phát triển các giải thuật sinh mã nguồn Chương này giới thiệu bài toán,
lựa chọn nền tảng công nghệ, mô hình Web, phương pháp sinh mã, đưa ra quy trình chuyển đổi; trình bày mối tương quan giữa các mô hình UWE với mô hình MVC, thể
hiện các quy tắc chuyển đổi mô hình và xây dựng công cụ sinh mã
Chương 3: Cài đặt công cụ CODEGER-UWE tích hợp các giải thuật, áp dụng cho
một bài toán cụ thể và đánh giá
3 Các đóng góp khoa học của luận văn
Luận văn có hai đóng góp như sau:
Thứ nhất: Xây dựng các giải thuật sinh mã nguồn: giải thuật CM2M sinh mã thành
phần Model từ mô hình nội dung, giải thuật NPROM2C sinh mã thành phần Controller
từ mô hình điều hướng và xử lý, giải thuật PRES2V sinh mã thành phần View từ mô hình trình bày
Thứ hai: Xây dựng công cụ CODEGER-UWE tích hợp các giải thuật trên, áp dụng cho một bài toán cụ thể, đánh giá
Trang 13Chương 1: Tổng quan về kiến trúc hướng mô hình
và kỹ thuật Web hướng mô hình UWE 1.1 Ki ến trúc hướng mô hình
Kiến trúc hướng mô hình MDA (Model Driven Architecture) là một hướng tiếp cận
vấn đề theo kỹ nghệ hướng mô hình MDE (Model Driven Engineering) do tổ chức OMG đề xuất MDA bắt đầu với ý tưởng tách đặc điểm kỹ thuật của hệ thống ra khỏi
nền tảng hoạt động của hệ thống [6, 7, 14] MDA cung cấp một cách tiếp cận và công
o UML (Unified Modeling Language): ngôn ngữ mô hình thống nhất
o MOF (Meta Object Facility): ngôn ngữ dùng để định nghĩa ngôn ngữ mô hình
o XML (eXtensible Markup Language): ngôn ngữ đánh dấu mở rộng
o CWM (Common Warehouse Metamodel): siêu mô hình ứng dụng kho lưu dữ liệu MDA mô tả khuôn mẫu cho việc phát triển phần mềm nhanh chóng hiệu quả và tối
ưu về chi phí, đồng thời cung cấp các hướng dẫn để cấu trúc các đặc tả lại thành các
mô hình, định nghĩa các chức năng của hệ thống dựa trên mô hình độc lập nền tảng PIM (Platform Independent Model), sử dụng các ngôn ngữ đặc tả chuyên biệt PIM sau
đó được chuyển thành một hoặc một vài mô hình phụ thuộc nền tảng xác định PSM (Platform Specific Model) mà các máy tính có thể chạy được PSM có thể sử dụng các ngôn ngữ đặc tả chuyên biệt hoặc các ngôn ngữ phổ biến như: Java, C#, C++ [6, 14]
1.2 Các k ỹ thuật Web hướng mô hình
Với những ưu điểm của MDA và những đặc điểm về tính đa dạng về công nghệ cũng như ngôn ngữ của phát triển các ứng dụng Web thì kỹ nghệ Web hướng mô hình MDWE (Model Driven Web Engineering) được áp dụng vào phát triển các ứng dụng Web nhằm tạo ra các ứng dụng Web nhanh chóng, linh hoạt và chất lượng Trong kỹ nghệ Web hướng mô hình bao gồm bốn mức [1, 2, 14, 16]:
Trang 14o Mô hình độc lập tính toán CIM (Computation Independent Model) thể hiện mô hình hóa các chức năng của hệ thống
o Mô hình PIM là một khung nhìn của hệ thống từ điểm nhìn độc lập nền tảng Đó là
một mô hình của hệ thống không chứa thông tin cụ thể về nền tảng, hay công nghệ được dùng để thực hiện nó
o Mô hình PSM là một khung nhìn của một hệ thống từ điểm nhìn nền tảng cụ thể
Đó là một mô hình của hệ thống bao gồm thông tin về công nghệ cụ thể được dùng
để thực hiện nó trong một nền tảng cụ thể ví dụ Java hoặc NET
o Mô hình triển khai cụ thể ISM (Implementation Specific Model) cung cấp thông tin
Trang 15Một số kỹ thuật Web hướng mô hình điển hình:
OOHDMDA: Phương pháp thiết kế đa phương tiện hướng đối tượng OOHDM
(Object Oriented Hypermedia Design Method) được đề xuất năm 1995 Ý tưởng của phương pháp này là chia việc thiết kế một hệ thống Web thành ba mô hình: mô hình khái niệm, mô hình điều hướng và mô hình giao diện trừu tượng [14] OOHDMDA là
kiến trúc hướng mô hình cho OOHDM, bắt đầu bằng mô hình PIM được thiết kế trong OOHDM, để tạo ra các PSM OOHDMDA cung cấp phương pháp thiết kế ứng dụng Web bằng cách kết hợp UML và các mô hình được định nghĩa trong OOHDM
W2000 (HDM): W2000 (Hypertext Design Model) dựa trên nguyên lý hướng đối tượng Phương pháp này đưa ra một vòng đời cho phát triển một ứng dụng Web [14] W2000 bắt đầu bằng bước phân tích yêu cầu dựa trên biểu đồ ca sử dụng Dựa trên
những thông tin có được ở bước phân tích yêu cầu để phát triển mô hình khái niệm và
mô hình điều hướng Tiếp theo W2000 thay đổi và mở rộng một số mô hình UML như
là biểu đồ lớp và biểu đồ trạng thái Cuối cùng sử dụng các biểu đồ tuần tự để mô tả
chức năng của hệ thống
WebML: WebML là một phương pháp thiết kế Web thế hệ thứ ba dựa trên MDA,
dựa trên mô hình quan hệ thực thể [6, 14] Trong WebML bổ sung, xây dựng tập ký pháp để thiết kế khái niệm của các trang Web phức tạp Phương pháp này sử dụng ký
hiệu riêng và không sử dụng metamodel tuân thủ MOF, mà sử dụng định nghĩa kiểu tài
liệu DTD (Document Type Definition) để lưu các mô hình nội dung và điều hướng, ví
dụ định nghĩa dạng ngữ pháp cho cấu trúc của tài liệu XML DTD không có tính trừu tượng như MOF và thiếu ký hiệu dễ hiểu Ngôn ngữ chuyển đổi định kiểu mở rộng XSLT (eXtensible Stylesheet Language Transformation) được sử dụng cho việc chuyển đổi mô hình sang mã nguồn (hỗ trợ Java và JSP) XSLT không phù hợp với
những chuyển đổi phức tạp, khó phát triển chương trình và dễ bị lỗi [6]
UWE: UWE (Uml –based Web Engineering) là phương pháp hướng đối tượng dựa trên ngôn ngữ mô hình hóa UML, là một trong những kỹ thuật đầu tiên phát triển theo
kỹ thuật hướng mô hình và được sử dụng nhiều nhất trong kỹ thuật Web hướng mô hình [6, 14] UWE là một kỹ thuật phát triển ứng dụng Web hoàn chỉnh nhưng chủ yếu
tập trung vào giai đoạn phân tích và thiết kế Một trong những ưu điểm quan trọng của UWE là tất cả các mô hình của nó đều là phần mở rộng của UML UWE sử dụng ký pháp đồ họa hoàn toàn dựa trên UML Nó cho phép sử dụng các công cụ dựa trên
Trang 16quen thuộc với UML Kỹ thuật Web hướng mô hình UWE đáp ứng đầy đủ các yêu cầu
của MDA cho việc phát triển ứng dụng Web bao gồm mô hình CIM, PIM, PSM và kỹ thuật chuyển đổi từ mô hình CIM sang PIM, từ mô hình PIM sang PSM
Hình 1.2 UWE metamodel [15]
Trang 17Metamodel UWE được định nghĩa như một phần mở rộng cho UML 2.0 UML profile tương thích với hầu hết công cụ UML Metamodel UWE định nghĩa một số khuôn mẫu mở rộng cho UML dựa trên những đặc trưng riêng của các ứng dụng Web
Trang 181.3.1 Mô hình yêu c ầu
Mô hình yêu cầu sẽ bao gồm hai thành phần cơ bản đó là các biểu đồ ca sử dụng và các biểu đồ hoạt động tương ứng
Hình 1.3 UWE profile cho mô hình yêu cầu [15]
Biểu đồ ca sử dụng mô tả sự tương tác đặc trưng giữa người dùng bên ngoài và hệ
thống Nó thể hiện nghiệp vụ của hệ thống đối với bên ngoài, trong một hoàn cảnh nhất định, xét từ quan điểm của người sử dụng Biểu đồ ca sử dụng mô tả các yêu cầu đối
với hệ thống, mô tả những gì hệ thống phải làm Tập hợp tất cả biểu đồ ca sử dụng của
hệ thống sẽ mô tả tất cả các trường hợp mà hệ thống có thể được sử dụng
Trang 19Biểu đồ hoạt động là bản vẽ tập trung vào mô tả các hoạt động, luồng xử lý bên trong hệ thống Nó có thể được sử dụng để mô tả chi tiết cho các yêu cầu quy trình nghiệp vụ trong hệ thống đã được mô tả sơ lược trong biểu đồ ca sử dụng Các luồng
của một chức năng hoặc các hoạt động của một đối tượng Các thành phần tạo nên biểu
đồ ca sử dụng và biểu đồ hoạt động được mô tả trong hình 1.3
Mô hình nội dung thể hiện trong hình 1.4, mô tả cấu trúc và quan hệ giữa các thành
phần tạo nên phần mềm Mô hình hoá nội dung không đòi hỏi bất kỳ cấu trúc bổ sung Các lớp UML thông thường được sử dụng cho mô hình hoá mô hình nội dung tương tự
như mô hình hóa các ứng dụng không phải là Web
Hình 1.4 UWE profile cho mô hình nội dung [15]
Mô hình điều hướng mô tả luồng chuyển hướng tương ứng với hành động người sử
dụng trong ứng dụng Web, thể hiện trong hình 1.5 Nó được thể hiện bằng biểu đồ lớp
và bổ sung các khuôn mẫu của UWE đại diện cho các nút, các liên kết, thực đơn và chỉ
Trang 20hệ thống mà người dùng có thể tương tác để chuyển đổi giữa các trang, các danh mục
nội dung của trang Web
Hình 1.5 UWE profile cho mô hình điều hướng [15]
Mô hình xử lý sẽ thể hiện chi tiết quá trình xử lý được thực hiện như thế nào, thể
hiện trong hình 1.6 Mô hình xử lý đại diện cho các khía cạnh động của ứng dụng Web, cung cấp các phần tử mô hình cho việc tích hợp quy trình vào một mô hình ứng dụng Web Gói xử lý có thể được chia thành ba nhiệm vụ [15]: (1) Tích hợp các quy trình nghiệp vụ vào mô hình điều hướng; (2) Định nghĩa một giao diện người dùng để hỗ trợ các xử lý (3) Định nghĩa hành vi
1.3.5 Mô hình trình bày
Mô hình trình bày như thể hiện trong hình 1.7, mô tả một cái nhìn trừu tượng về giao diện người dùng của ứng dụng Web Mô hình trình bày định nghĩa nhiều khuôn
mẫu cho các loại thành phần khác nhau, ví dụ như khung nhập văn bản, các nút bấm,
… nhưng không cung cấp chi tiết cụ thể như kiểu CSS hoặc các yếu tố HTML [6]
Trang 21Hình 1.6 UWE profile cho mô hình xử lý [15]
Trang 22Hình 1.7 UWE profile cho mô hình trình bày [15]
1.4 T ổng hợp các nghiên cứu về kỹ thuật sinh mã nguồn trong phát triển ứng
d ụng Web hướng mô hình
o Khuôn mẫu và bộ lọc (Template and Filtering)
Phương pháp [8] này là phương pháp đơn giản nhất để sinh mã nguồn Mã nguồn được sinh ra bằng cách áp dụng khuôn mẫu cho đặc tả mô hình văn bản (thường là XML/XMI), và sau khi lọc một vài phần của đặc tả Một phần của mã nguồn cũng được nhúng trong khuôn mẫu
Hình 1.8 Phương pháp sinh mã dựa trên khuôn mẫu và bộ lọc [8]
Trang 23o Khuôn mẫu và metamodel (Template and metamodel)
Phương pháp [8] này là một sự mở rộng của phương pháp Khuôn mẫu và bộ lọc Từ đặc tả mô hình văn bản, ta xây dựng metamodel rồi áp dụng khuôn mẫu Khuôn mẫu được mô tả trong phạm vi của metamodel
Hình 1.9 Phương pháp sinh mã dựa trên khuôn mẫu và metamodel [8]
o Sinh mã dựa trên API (API –based Generator)
Phương pháp [8] này mô tả kỹ thuật mà ở đó, trình khách sẽ gọi API để sinh mã, API này được xây dựng dựa trên metamodel hay cú pháp của ngôn ngữ đích Phương pháp này phù hợp sử dụng cho việc sinh một lượng nhỏ mã nguồn do API nhanh chóng
trở lên phức tạp, rườm rà với mô hình lớn
Hình 1.10 Phương pháp sinh mã dựa trên API [8]
Nhìn chung, giải pháp cho nhu cầu sinh mã tự động là sử dụng bộ tạo mã dựa trên khuôn mẫu hướng mô hình (Model –driven Template –based Code Generators) Bộ tạo
mã lấy thông tin từ mô hình và khuôn mẫu làm đầu vào, sau đó chuyển đổi sang mã nguồn/chương trình Kiến trúc bậc cao điển hình của hệ thống tạo mã hướng mô hình
là dựa trên khuôn mẫu được mô tả cụ thể như sau:
Trang 24Hình 1.11 Phương pháp sinh mã dựa trên khuôn mẫu [3]
1.4.2 OptimalJ
OptimalJ [12] là một trong những môi trường phát triển đầu tiên triển khai MDA, được phát hành lần đầu vào năm 2001 bởi Compuware tại Amsterdam, dựa trên NetBeans IDE của Sun Microsystem Từ năm 2006, OptimalJ phát triển dựa trên Eclipse IDE Các mô hình trong OptimalJ có các mức trừu tượng khác nhau:
o Mô hình miền (OptimalJ Domain Model) tương ứng với PIM trong MDA Nó định nghĩa miền nghiệp vụ (Business Domain) mà không có bất cứ thông tin chi tiết nền
tảng cụ thể nào Nó được định nghĩa bằng cách mô hình hóa các tính năng và hành
vi của ứng dụng, thông tin phụ thuộc miền được xây dựng dựa trên MOF bằng UML
o Mô hình miền được chuyển đổi tự động sang mô hình ứng dụng (OptimalJ Application Model), tương ứng với PSM trong MDA Miền ứng dụng định nghĩa ứng dụng, dựa trên nền tảng công nghệ được lựa chọn J2EE Nó mô tả những gì sẽ được tạo ra để thực hiện ứng dụng, bằng cách cung cấp một logic tổng quan về các thành phần chứa trong mỗi tầng tạo nên ứng dụng
o Miền ứng dụng được chuyển đổi tự động sang mô hình mã (OptimalJ Code Model) tương ứng với Code/Text trong MDA Mô hình mã tạo ra mã ứng dụng
OptimalJ không còn được tiếp tục phát triển từ năm 2008
1.4.3 UWE4JSF
UWE4JSF [4] là công cụ tự động sinh mã ứng dụng Web nền tảng JSF 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)
Trang 25UWE4JSF sử dụng ngôn ngữ chuyển đổi mô hình ATL (Atlas Transformation Language) và công cụ mã nguồn mở JET (Java Emitter Template) ATL xây dựng các quy tắc xác định các phần tử mô hình nguồn được kết hợp và điều hướng như thế nào
để tạo và khởi tạo các phần tử của mô hình đích JET cung cấp một framework và tiện ích cho việc sinh mã, khuôn mẫu JSP với đầu vào mặc định là file xml
UWE4JSF tương thích trên Eclipse Galileo (version 3.5), Eclipse Helios (version 3.6), yêu cầu cài đặt nền tảng công cụ Web WTP (Web Tools Platform), EMF, JET, ATL và 2 sub –project: uwe4jsf –persistence –hibernate & uwejsf –framework
Phiên bản mới nhất của UWE4JSF năm 2007
Hình 1.12 Quy trình sinh mã UWE4JSF [4]
Trang 26hướng mô hình theo kỹ thuật 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
Luận văn hướng đến nghiên cứu cải tiến kỹ thuật sinh mã nguồn cho ứng dụng Web hướng mô hình UWE, xây dựng phát triển các giải thuật sinh mã nguồn từ bốn mô hình UWE dựa trên những nghiên cứu đã có về kỹ thuật sinh mã nguồn, đồng thời cụ thể hóa bằng việc xây dựng công cụ sinh mã
Trang 27Chương 2: Phát triển các giải thuật sinh mã nguồn 2.1 Đặt vấn đề
Như đã giới thiệu ở chương một, trong MDA, sự chuyển đổi các mức được định nghĩa: chuyển đổi CIM sang PIM, PIM sang PSM và từ PSM sang mã nguồn Kỹ thuật UWE là phương pháp hướng đối tượng dựa trên ngôn ngữ mô hình hóa UML, là một
kỹ thuật phát triển ứng dụng Web hoàn chỉnh, đáp ứng đầy đủ các yêu cầu của MDA bao gồm các mô hình CIM, PIM, PSM và kỹ thuật chuyển đổi từ mô hình CIM sang PIM, từ mô hình PIM sang PSM [11], thể hiện trong hình 2.1
Hình 2.1 Cấu trúc MDA cho ứng dụng web theo kỹ thuật UWE
Những nghiên cứu trước đó [1, 2, 7] đã cơ bản hoàn thiện các kỹ thuật chuyển đổi
cấp mô hình từ CIM sang PIM Kết quả của bước chuyển đổi trên cho ta bốn mô hình trong kỹ thuật UWE: nội dung, điều hướng, xử lý và trình bày, là đầu vào cho bước chuyển đổi kế tiếp Tài liệu [1] cũng trình bày các quy tắc chuyển đổi mô hình PIM sang PSM, chuyển đổi PSM sang mã, tuy nhiên các quy tắc được đưa ra chưa được đầy
đủ, chưa có sơ đồ chuyển đổi một cách tổng quan
Luận văn vì lẽ đó tiếp tục nghiên cứu, đi sâu vào việc phát triển các giải thuật sinh
mã từ bốn mô hình UWE, nhằm hoàn thiện quy trình chuyển đổi MDA cho kỹ thuật UWE và cụ thể hóa các giải thuật bằng việc xây dựng một plugin cho ứng dụng thương
mại MagicDraw Để thực hiện được điều này, ta cần phải:
o Lựa chọn nền tảng công nghệ, mô hình Web, phương pháp sinh mã, từ đó đưa ra
tổng quan chung cho quy trình chuyển đổi
o Xây dựng giải thuật chuyển đổi cấp mô hình PIM sang PSM và chuyển đổi PSM sang mã nguồn
Trong phạm vi luận văn, quy trình chuyển đổi sẽ được thực hiện hoàn toàn trong môi trường ứng dụng MagicDraw Đầu vào của luận văn là bốn mô hình UWE với dữ
Trang 28liệu được lấy trực tiếp bằng cách sử dụng các API của ứng dụng, mà không cần thông qua định dạng đặc tả mô hình văn bản (XML/XMI)
2.2 Quy trình chuy ển đổi MDA cho kỹ thuật UWE
Như đã trình bày ở trên, để đưa ra quy trình chuyển đổi MDA cho kỹ thuật UWE
cần lựa chọn được nền tảng công nghệ, lựa chọn mô hình Web và phương pháp sinh
mã
ASP.NET được phát triển bởi Microsoft, cung cấp cho các nhà phát triển một công
cụ kịch bản dễ dàng để xây dựng các trang Web và các ứng dụng ASP.NET dễ phát triển, có công cụ hỗ trợ tốt là VisualStudio, hỗ trợ mạnh mẽ với bộ thư viện phong phú
và đa dạng của NET framework, độ bảo mật tốt, phù hợp với dự án doanh nghiệp vừa
và nhỏ Nhược điểm là chỉ hoạt động tốt trong môi trường Windows, mã nguồn đóng
và mất phí
PHP viết tắt của Hypertext Preprocessor, hoàn toàn là mã nguồn mở, ban đầu là một công cụ kịch bản, sau đó được biết đến rộng rãi nhờ việc học nó dễ dàng và cộng đồng phát triển rất lớn PHP dễ học, miễn phí, có nhiều framework hỗ trợ như Zend, Symfony, Laravel giúp cho việc phát triển nhanh và tốt hơn, có trình quản lý nội dung văn bản, hình ảnh, video rất tốt, phù hợp với dự án Web vừa và nhỏ PHP không được đánh giá cao về khả năng bảo mật so với ASP.NET, khó bảo trì hoặc mở rộng do cách
viết mã nguồn tương đối tùy tiện
J2EE là công nghệ của Sun Microsystems, là một nền lập trình dành cho việc phát triển ứng dụng phân tán kiến trúc đa tầng, thường được sử dụng để xây dựng các hệ
thống Website lớn đòi hỏi độ bảo mật cao, số lượng người dùng lớn Ưu điểm lớn của J2EE là có kiến trúc thiết kế tốt, cộng đồng mạnh do là công nghệ mở, có framework
hỗ trợ tốt như Spring, chạy tốt trên nhiều nền tảng và hoàn toàn miễn phí J2EE không
dễ học như PHP hay ASP.NET, cần nhiều kinh nghiệm để có thể xây dựng một dự án
Trang 29Java và một số hành động xử lý đã được định trước (pre –defined actions) và trong
nội dung tĩnh của trang JSTL (JSP Standard Tag Library) là thư viện chuẩn của JSP, cung cấp các thẻ để kiểm soát hành vi của trang, vòng lặp, các lệnh điều khiển, các thẻ quốc tế hóa và các thẻ SQL
o JavaBean là một kiểu lớp Java đặc biệt có một số đặc thù:
• Có một hàm khởi tạo mặc định, không có tham số
• Thuộc tính của thành phần có thể là đọc, ghi, chỉ đọc, chỉ ghi
• Tất cả các thuộc tính đều là private, được truy cập hoặc gán giá trị thông qua getter/setter
o Spring là một framework phát triển các ứng dụng Java: Java Desktop, Java Web, Java Mobile, giúp tạo các ứng dụng có hiệu năng cao, dễ kiểm thử, sử dụng lại mã nguồn,… Spring là mã nguồn mở, được phát triển, chia sẻ, có cộng đồng người dùng rất lớn với kích thước nhỏ Spring được chia thành nhiều gói, trong đó SpringMVC được thiết kế dành cho việc xây dựng các ứng dụng nền tảng Web
Mô hình MVC (Model –View –Controller) là một kiến trúc phần mềm hay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm Nó giúp cho người phát triển tách ứng
dụng của ba thành phần khác nhau Model, View và Controller 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 Do được chia thành các thành
phần độc lập nên giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp, bảo trì
Hình 2.2 Mô hình MVC trong Web [17]
Nhiệm vụ của các thành phần như sau:
o Model: Có nhiệm vụ thao tác với cơ sở dữ liệu, nghĩa là nó sẽ chứa tất cả các hàm, các phương thức truy vấn trực tiếp với dữ liệu Controller sẽ thông qua các hàm,
Trang 30o View: Có nhiệm vụ tiếp nhận dữ liệu từ Controller và hiển thị nội dung sang các đoạn mã HTML, còn gọi là thành phần giao diện
o Controller: Đóng vai trò trung gian giữa Model và View Nó có nhiệm vụ tiếp nhận yêu cầu từ trình khách sau đó xử lý các yêu cầu đó, gọi các Model tương ứng và gửi
dữ liệu qua View tương ứng rồi trả kết quả về cho trình khách
Chương 1 đã giới thiệu các phương pháp sinh mã trong phát triển ứng dụng Web hướng mô hình: phương pháp khuôn mẫu và bộ lọc, phương pháp khuôn mẫu và metamodel, và phương pháp sinh mã dựa trên API Phương pháp khuôn mẫu và metamodel được lựa chọn trong phạm vi luận văn do có ưu thế hơn so với hai phương pháp còn lại
Metamodel là một biểu đồ lớp, định nghĩa các đặc tả mô hình cho mô hình, ngôn
ngữ đích Nền tảng công nghệ được chọn là J2EE có các metamodel là Java metamodel
và JSP metamodel
Hình 2.3 Java metamodel Java metamodel được mô tả trong hình 2.3, được tham khảo từ tài liệu [1] So với nguyên mẫu gốc, Java metamodel được bổ sung thêm thành phần thuộc tính
Trang 31annotation, ki ểu dữ liệu là String vào lớp JavaClassMember và JavaClass phục vụ
mục đích của tác giả
JSP metamodel được mô tả trong hình 2.4, được tham khảo từ tài liệu [1]
Hình 2.4 JSP metamodel
Từ những sự lựa chọn được trình bày ở trên: nền tảng công nghệ J2EE, mô hình Web MVC, phương pháp sinh mã 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, ta đưa ra được quy trình chuyển đổi MDA cho kỹ thuật UWE như hình 2.5 Cụ thể như sau:
Trang 32o Mô hình nội dung (mức PIM) được chuyển đổi sang JavaModel (mức PSM),là một
thể hiện của Java metamodel, sau đó chuyển đổi sang mã nguồn Java, tương ứng thành phần Model Giải thuật chuyển đổi có tên là CM2M
o Mô hình điều hướng và xử lý được chuyển đổi sang JavaModel, sau đó được
chuyển đổi sang mã nguồn Java, tương ứng thành phần Controller Giải thuật
chuyển đổi có tên NPROM2C
o Mô hình trình bày được chuyển đổi sang JSPModel, là một thể hiện của JSP
metamodel, sau đó chuyển đổi sang mã JSP, tương ứng thành phần View Giải thuật chuyển đổi có tên PRES2V
Xây dựng các giải thuật này được trình bày ở phần tiếp theo của luận văn
2.3 Xây d ựng giải thuật CM2M sinh mã thành phần Model từ mô hình nội dung (Content Model to Model Code Genenation)
Mô hình nội dung sử dụng thành phần mô hình UML chuẩn cho mô hình cấu trúc như các lớp, các liên kết và các gói để mô hình hóa nội dung ứng dụng Web Hình 2.6
là một ví dụ của mô hình nội dung, thể hiện các lớp có trong mô hình, các thuộc tính (attributes), các thủ tục (operations), các liên kết, sự kế thừa của lớp
Hình 2.6 Các thành phần trong mô hình nội dung Các lớp, các thành phần trong lớp của mô hình nội dung được chuyển đổi sang JavaModel thông qua ba quy tắc chuyển đổi cấp mô hình: UWEClass2JavaClass,
Trang 33UWEProperty2JavaClassMember, UWEOperation2JavaMethod, và quy tắc chuyển
đổi mô hình sang mã nguồn JavaModel2SourceCode, thể hiện như hình 2.7
Hình 2.7 Các quy tắc cấu thành giải thuật CM2M
Quy t ắc 2.3.1 UWEClass2JavaClass
Tạo lớp JavaBean tương ứng với một lớp trong mô hình nội dung, giữ nguyên sự kế
thừa giữa các lớp
Quy tắc được trình bày chi tiết trong phụ lục A, mục 1
Minh h ọa quy tắc
Mô t ả
Đầu vào: Lớp, trong mô hình nội dung
Trong ví dụ minh họa, lớp có tên là "JSPElement", kế thừa từ lớp "JSPNode"
Đầu ra: JavaClass với các thuộc tính:
o name: tên của lớp đầu vào
o superClasses: tên của lớp đầu vào được kế thừa
o các thuộc tính khác được gán các giá trị phù hợp
Trang 34Quy t ắc 2.3.2 UWEProperty2JavaClassMember
Mỗi một thuộc tính (attribute) được chuyển đổi tương ứng thành một trường (field) trong JavaBean có phạm vi truy cập là "private", đi cùng là hai phương thức truy cập (getter), gán giá trị (setter) tương ứng có phạm vi truy cập là "public"
Quy tắc được trình bày chi tiết trong phụ lục A, mục 1
Minh h ọa quy tắc
Mô t ả
Đầu vào: Thuộc tính của lớp
Trong ví dụ minh họa, thuộc tính có tên là "name", có kiểu dữ liệu là "String"
Đầu ra: JavaField, JavaMethod (hàm getter), JavaMethod (hàm setter)
Trong ví dụ minh họa:
o JavaField có các thuộc tính:
• name: "_" + tên của thuộc tính
• type: kiểu dữ liệu của thuộc tính
• initialize: khởi tạo giá trị dựa trên kiểu dữ liệu thuộc tính
• các thuộc tính khác được gán các giá trị phù hợp
o JavaMethod (getter) có các thuộc tính:
• name: "get" + tên của thuộc tính
• type: kiểu dữ liệu của thuộc tính
• body: trả về JavaField
• các thuộc tính khác được gán các giá trị phù hợp
Trang 35o JavaMethod (setter) có các thuộc tính:
• name: "set" + tên thuộc tính
• parameter: tạo tham số truyền vào theo tên và kiểu dữ liệu thuộc tính
• body: gán giá trị cho JavaField
• các thuộc tính khác được gán các giá trị phù hợp
Quy t ắc 2.3.3 UWEOperation2JavaMethod
Mỗi một thủ tục (operation) được chuyển đổi tương ứng thành một phương thức (method), có cùng kiểu dữ liệu trả về và tham số đầu vào Nội dung phương thức là
mặc định
Quy tắc được trình bày chi tiết trong phụ lục A, mục 1
Minh h ọa quy tắc
Mô t ả
Đầu vào: Phương thức của lớp
Trong ví dụ minh họa, phương thức "toCode" của lớp JSPNode có kiểu dữ liệu trả
về là "String", không có tham số
Đầu ra: JavaMethod với các thuộc tính:
o name: tên của phương thức đầu vào
o type: kiểu dữ liệu trả về của phương thức
o parameter: tham số của phương thức
o body: trả về giá trị mặc định, phụ thuộc vào kiểu dữ liệu trả về của phương
thức
o các thuộc tính khác được gán các giá trị phù hợp
Trang 36Quy t ắc 2.3.4 JavaModel2SourceCode
Sinh mã nguồn Java từ JavaModel, được trình bày chi tiết trong phụ lục B
Minh h ọa quy tắc
Mô t ả
Đầu vào: JavaModel, là kết quả chuyển đổi cấp mô hình từ các lớp, các thành
phần có trong lớp trong mô hình nội dung
Đầu ra: Mã nguồn Java
Hình 2.8 thể hiện quy trình chuyển đổi sinh mã nguồn từ mô hình nội dung
Hình 2.8 Quy trình chuyển đổi sinh mã nguồn từ mô hình nội dung
Trang 37Mô t ả giải thuật CM2M
B1 Đọc mô hình, lấy ra biểu đồ nội dung, tạo danh sách chứa các lớp có trong biểu đồ B2 Duyệt danh sách và thực hiện các chuyển đổi đối với từng lớp, từng thành phần sử
dụng các quy tắc đã được trình bày ở trên
Gi ải thuật CM2M
Sinh mã nguồn từ mô hình nội dung
Đầu vào: ContentModel {UWE Model}
Đầu ra: listfile {JavaCode}
1: Begin
2: listClass ←ContentModel.getListClass {Lấy danh sách các lớp có trong mô
hình nội dung}
3: For c in listClass do
4: Tạo file {Tạo file với tên tương ứng với tên của lớp}
5: jc ←UWEClass2JavaClass(c) theo quy tắc 2.3.1
6: listProperty ←c.getlistproperty{Lấy danh sách các thuộc tính có trong lớp}
for p in listProperty do
jf, jg, js ←UWEProperty2JavaClassMember(p) theo quy tắc 2.3.2
jc.members.add(jf, jg, js){Thêm các thành phần vào lớp JavaClass} 7: listOperation ←c.getlistoperation {Lấy danh sách các phương thức có
trong lớp}
for o in listOperation do
jm←UWEOperation2JavaMethod (o) theo quy tắc 2.3.3
jc.members.add(jm) {Thêm các thành phần vào lớp JavaClass} 8: sourcecode ←jc.toCode theo quy tắc 2.3.4
9: Ghi sourcecode vào file
listfile.add(file)
10: return listfile
Trang 382.4 Xây d ụng giải thuật PRES2V sinh mã thành phần View từ mô hình trình bày (Presenation Model to View Code Generation)
Mô hình trình bày mô tả một cái nhìn trừu tượng về giao diện người dùng của ứng
dụng Mô hình trình bày được xây dựng trên các định nghĩa khuôn mẫu (stereotype) cho các loại thành phần khác nhau, ví dụ khung nhập văn bản (text), các nút bấm (button), … Hình 2.9 là một ví dụ của mô hình trình bày, thể hiện các lớp có trong mô hình, định nghĩa khuôn mẫu của từng lớp và quan hệ giữa các lớp với nhau
Hình 2.9 Các thành phần trong mô hình trình bày Các lớp của mô hình trình bày được chuyển đổi sang JSPModel thông qua hai quy
tắc chuyển đổi cấp mô hình PreElement2JSP, PreClass2JSP và quy tắc chuyển đổi mô
hình sang mã nguồn JSPModel2SourceCode, thể hiện như hình 2.10
Hình 2.10 Các quy tắc cấu thành giải thuật PRES2V
Trang 39Quy t ắc 2.4.1 PreElement2JSP
Lớp có khuôn mẫu là văn bản (text), nút bấm (button), khung nhập văn bản (text input), hình ảnh (image), mỏ neo (anchor),…, được gọi chung là UIElement, được chuyển đổi thành các thành phần tương ứng trong JSP
Quy tắc được trình bày chi tiết trong phụ lục A, mục 2
Minh h ọa quy tắc
Mô t ả
Đầu vào: Lớp, trong mô hình trình bày
Trong ví dụ minh họa, lớp có tên là "Introduction" có khuôn mẫu là văn bản
Đầu ra: JSPElement Tùy thuộc vào khuôn mẫu của lớp đầu vào, đầu ra
JSPElement sẽ có các lớp con JSPElement, JSPAttribute, JSPTextNode, JSPNode với số lượng, thuộc tính khác nhau
Trong ví dụ minh họa, JSPElement có thuộc tính name có giá trị là "c:out", và JSPAttribute là con của JSPElement, có thuộc tính:
o name: "value"
o value: được xây dựng trên cơ sở tên của lớp đầu vào
Trang 40Quy t ắc 2.4.2 PreClass2JSP
Lớp có khuôn mẫu là trang (presentationPage), biểu mẫu (inputform), nhóm (presentationGroup), khung thay thế (presentationAlternative), ngoài việc được chuyển đổi thành các thành phần tương ứng trong JSP, còn cần xác định các lớp con được chứa bên trong và tiếp tục quá trình chuyển đổi
Quy tắc được trình bày chi tiết trong phụ lục A, mục 2
Minh h ọa quy tắc
Mô t ả
Đầu vào: Lớp, trong mô hình trình bày
Trong ví dụ minh họa, lớp có tên là "SearchForm" có khuôn mẫu là biểu mẫu
Đầu ra: JSPElement Tùy thuộc vào khuôn mẫu của lớp đầu vào, đầu ra
JSPElement sẽ có các lớp con JSPElement, JSPAttribute, JSPTextNode, JSPNode
với số lượng, thuộc tính khác nhau Ngoài ra, các lớp con có trong lớp đầu vào
tiếp tục được chuyển đổi dựa trên khuôn mẫu của nó bằng cách gọi lại chính PreClass2JSP (thực hiện đệ quy) hay quy tắc 2.4.1 PreElement2JSP
Trong ví dụ minh họa, JSPElement có thuộc tính name có giá trị là "form", có hai
lớp con JSPAttribute với các thuộc tính có giá trị được xây dựng trên cơ sở tên
lớp đầu vào, có lớp con JSPElement có thuộc tính name là "table" chứa lớp chuyển đổi của các lớp là con của lớp đầu vào: lớp "SearchCriterion" có khuôn
mẫu là khung nhập văn bản và lớp "Search" có khuôn mẫu là nút bấm