CHƯƠNG 1 : PHÁT TRIỂN PHẦN MỀM HƯỚNG MÔ HÌNH
1.5. Tiểu kết chương
Trong chương 1, luận án đã giới thiệu tổng quan về các nội dung kiến thức chung liên quan tới đề tài, cũng như các tìm hiểu, phân tích về những nghiên cứu hiện nay, liên quan tới 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:
- Phần 1.1, giới thiệu về kiến trúc MDA: Tổng hợp, phân tích các thành phần trong MDA như các mơ hình (PIM, PSM, CODE), mối quan hệ giữa các mơ hình, các cơng cụ chuyển đổi, ngơn ngữchuyển đổi....
- Phần 1.2, phân tích tiêu chuẩn MDA. Chuẩn quan trọng nhất trong MDA là MOF cho phép chúng ta định nghĩa meta- mode và bất cứ khi nào chúng ta định nghĩa một ngôn ngữ mới qua một MOF meta-model, nó có thể được sử dụng cùng với môi trường MDA. Ngôn ngữ UML và mở rộng của nó được định nghĩa bởi UML Profile, là ngơn ngữ mơ hình sẽ được sử dụng thường xuyên.
- Phần 1.3, phân tích, so sách một số kỹ thuật Web hướng mơ hình điển hình như OOWS, UWE, WebML, WebSA đã được sử dụng rộng rãi cho việc thiết kế và phát triển của các ứng dụng Web, làm cơ sở đểlựa chọn, xây dựng mơ hình và các quy tắc chuyển đổitrong chương 2.
- Phần 1.4, luận án trình bày tình hình các nghiên cứu liên quan, phân tích cụ thể điểm mạnh, điểm cần cải tiến của các nghiên cứu và dẫn tới lý do của đề tài luận án. Các nghiên cứu được phân loại theo góc độ trong nước và ngồi nước. Trong đó có thể thấy rằng, các nghiên cứu trong nước về lĩnh vực đề tài cịn rất hạn chế. Do đó, đề tài sẽ khả thi và có đóng góp trong khai phá một vấn đề mới của chuyển đổi mơ hình và sinh mã tự động trong phát triển ứng dụng web.
CHƯƠNG 2: KỸ THUẬT CHUYỂN ĐỔI MƠ HÌNH
(CIM TO PIM) THEO PHƯƠNG PHÁP UWE
CHO PHÁT TRIỂN ỨNG DỤNG WEB
Trong chương này, tác giả trình bày tổng hợp lý thuyết về các kỹ thuật chuyển đổi mơ hình CIM to PIM theo phương pháp UWE cho phát triển ứng dụng Web và trên cơ sở đó, trình bày chi tiết các kết quả nghiên cứu phát triển các quy tắc chuyển đổi mơ hình từ CIM to PIM. Liên quan đến các kết quả trình bày trong chương này, tác giả có 4 cơng trình nghiên cứu liên quan: CT1, CT2, CT3, CT7.
2.1. Các mơ hình trong UWE
Mơ hình u cầu (Requirements Model): Mơ hình u cầu tập trung vào việc sử dụng biểu đồ ca sử dụng của ngôn ngữ UML thông thường, để xác định một vài xử lý và hoạt động mà ứng dụng Web cần thực hiện. Các phần tử đặc trưng của mơ hình này:
<<Navigation>> là những use case có nhiệm vụ như: duyệt, xem và tìm kiếm <<webprocess>> các use case có nhiệm vụ khác
<<personalized>> use case yêu cầu sự thích nghi
Mơ hình nội dung (Content Model): Mơ hình nội dung cho các ứng dụng web
với UWE, không khác biệt so với mơ hình nội dung phát triển phần mềm khơng phải web. Do đó, việc 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 của ứng dụng web. Ngồi ra mơ hình hành vi có thể sử dụng tính năng của UML, như máy trạng thái và biểu đồ trình tự.
Mơ hình điều hướng (Navigation Model): Như tên gọi, mơ hình này được sử
dụng để xác định luồng chuyển hướng mà người sử dụng có thể làm theo (VD: các
trang web và luồng chuyển hướng kết nối chúng với nhau). Nó được thực hiện bằng
biểu đồ lớp UML, được bổ sung bởi những khuôn mẫu UWE đại diện cho các nút và các liên kết. Các metamodel điều hướng UWE được trình bày trong hình 2.1 [77].
Một tập hợp các nút và link cung cấp các metaclass miền web cụ thể cho việc xây dựng mơ hình điều hướng: NavigationClass và ProcessClass với NavigationLink và ProcessLink cũng như các Menu và các truy cập nguyên thủy Index, GuidedTour và Query.
Mơ hình xử lý (Process Model): Mơ hình xử lý đặc tả hành vi của ứng dụng Web, những hành động của người dùng và phản hồi của ứng dụng tương ứng. Nó bao gồm: (1) mơ hình cấu trúc của xử lý - mơ tả mối quan hệ giữa một vài xử lý khác nhau (hoặccũng có thể là tập hợp các hoạt động) của ứng dụng Web và (2) mơ hình
luồng xử lý –gồm các biểu đồ hoạt động UML mô tả cụ thể một xử lý được thực hiện như thế nào (khuôn mẫu UserAction trong UWE được sử dụng để xác định các hoạt
động đòi hỏi sự tương tác rõ ràng với người sử dụng) (Hình 2.2 ).
Siêu mơ hình xử lý (Process Metamodel) [77]
Lớp xử lý tượng trưng cho một xử lý thông qua việc hướng dẫn người dùng cách sử dụng trên ứng dụng web, khuôn mẫu UML: <<processClass>>
Link xử lý thường là một liên kết giữa một lớp điều hướng và một lớp xử lý, khuôn mẫu UML: <<processLink>>
Trạng thái của một web xử lý được xác định bởi mơ hình luồng xử lý, trình bày bởi biểu đồ hoạt động UML.
Luồng xử lý bao gồm luồng thực thi được trình bày bởi các nút và các cạnh của hoạt động, các nút điều khiển cung cấp cấu trúc điều khiển của luồng, như là quyết định và đồng bộ hóa, nút đối tượng để trình bày luồng dữ liệu theo các cạnh và đỉnh của hành động, trong UML2 ngữ nghĩa của hoạt động dựa trên điều khiển và các dấu hiệu của dịng dữ liệu.
Mơ hình trình bày (Presentation Model): 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 (ví dụ giao diện các trang web). Mơ hình trình bày định nghĩa nhiều khn 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.
Từ những trình bày trên về UWE metamodel ta có thể định nghĩa một cách ngắn gọn: “UWE metamodel là các tiêu chuẩn về mơ hình trong UWE, dựa vào để xây dựng các mơ hình Requirement, Content, Navigation, Process và Presentation cho ứng dụng web.
Siêu mơ hình trình bày (Presentation Metamodel) [77]
2.2. Chuyển đổi mơ hình trong UWE
Chuyển đổi mơ hình là chìa khóa quan trọng trong kiến trúc hướng mơ hình [14, 61, 78, 79] và là trung tâm của kỹ thuật phát triển phần mềm hướng mơ hình [45, 80- 83]. Chuyển đổi mơ hình là q trình, trong đó một mơ hình là nguồn được chuyển thành một mơ hình khác – mơ hình đích, bằng cách sử dụng các quy tắc chuyển đổi nhất định. Chuyển đổi mơ hình, giúp tự động hóa q trình phát triển ứng dụng Web. Dựa trên bộ quy tắc chuyển đổi, từ mơ hình nguồn sẽ chuyển đổi tự động thành các mơ hình đích. Từ đó chuyển đổi sang mã nguồn,giúp giảm chi phí và nâng cao hiệu quả phát triển ứng dụng Web.
Áp dụng các nguyên tắc của MDA, phương pháp tiếp cận UWE đề xuất để xây dựng một tập hợp các CIMS, PIM và chuyển đổi từ CIM sang PIM (Hình 2.4), từ PIM sang PSM và từ PSM có thể chuyển thành mã chương trình cụ thể thực thi hệ thống (Hình 2.5).
Chuyển đổi mơ hình từ PIM san PSM trong UWE [1]
Về chuyển đổi mơ hình, kỹ thuật nổi lên gần đây trong chuyển đổi mơ hình được sử dụng trong UWE là ATL và QVT [4, 45, 65]. Một trong những cơng cụ thực hiện cơng việc này là MagicDraw, nó bao gồm 1 cơng cụ đính kèm cho phép khởi tạo ứng dụng Web đối với nền tảng khác nhau [17]. UWE được hỗ trợ bởi nhiều công cụ như: ArgoUWE, MagicUWE, MagicDraw và UWE4JSF [62].
Hình sau thể hiện các ngơn ngữ và kĩ thuật được dùng trong chuyển đổi giữa các mơ hình của UWE [4].
2.2.1. Chuyển đổi từ mơ hình u cầu sang mơ hình nội dung
Mục tiêu của mơ hình nội dung là xác định các khía cạnh cấu trúc và hành vi của ứng dụng Web. Ngồi các tính năng cấu trúc tĩnh (các thuộc tính và các liên kết) được tham chiếu trong các mơ hình điều hướng, mơ hình nội dungcũng bao gồm các tính năng hành vi động (hoạt động) được tham chiếu trong các mơ hình xử lý.
Theo [1] mơ hình nội dung được tự động lấy từ các mơ hình yêu cầu bằng cách áp dụng các Requirements2Content (Hình 2.6). Kết quả của mơ hình nội dung sau đó được tinh chế bởi nhà phát triển bằng cách thêm vào các lớp, các thuộc tính, liên kết..
Chuyển đổi Requirements2Content tự động sinh ra mơ hình nội dung từ mơ hình u cầu. Dựa trên hai quy tắcsẽ trình bày dưới đây.
Quy tắc ContentClass2ContentClassWithOperations
Quy tắc này ánh xạ mỗi lớp nội dung tới một lớp nội dung cùng với việc thêm operation được tạo bởi quy tắc thứ hai SimpleProcess2Operation. Ở đây, chú ý tới biểu thức ATL:
thisModule.resolveTemp( sp, ‘op’ ) [5]
Biểuthức này cần thiết cho tham chiếu tới một thành phần đặc biệt đích op của quy tắc SimpleProcess2Operation để nối các thành phần nguồn sp. Quy tắc này được biểu diễn thơng qua Hình 2.7.
Mơ tả các quy tắc để thêm các hoạt động
rule ContentClass2ContentClassWithOperations {
from c : UWE!Class ( c.oclIsTypeOf( UWE!Class ) ) to tc : UWE!Class
(
ownedOperation <- c.ownedOperation->union(
c.useCase->select( uc | uc.o clIsKindOf( UWE!SimpleProcess ) )-> collect( sp | thisModule.resolveTemp( sp, ‘op’ ) ) ),
… ) }
Quy tắc SimpleProcess2Operation
Đối với mỗi xử lý đơn giản trong các mơ hình u cầu một operation được sinh ra. Tên của các operation được tính tốn bằng cách loại bỏ các dấu cách từ tên của các xử lý đơn giản và chuyển đổi ký tự đầu tiên chữ in thường. Các hàm regexReplaceAll (thay thế các chuỗi con bằng việc sử dụng các biểu thức thường) và firstToLower được cung cấp bởi ATL. Một quy tắc type2Return-Parameter được sử dụng để tạo ra giá trị đối số trả về của operation.
rule SimpleProcess2Operation {
from sp : UWE!SimpleProcess
to tsp : UWE!SimpleProcess ( … ), -- target for copying source element op : UWE!Operation
(
name <- sp.name.regexReplaceAll( ' ', '' ).firstToLower(), type <- sp.target,
ownedParameter <- if sp.target.oclIsUndefined() then Sequence {} else Sequence { thisModule.Type2ReturnParameter( sp.target ) endif )
}
2.2.2. Chuyển đổi từ mơ hình u cầu, nội dung sang mơ hình điều hướng
Mục tiêu của mơ hình điều hướng để xác định khả năng điều hướng thông qua các nội dung của một ứng dụng Web, tức là xác định một giao diện điều hướng tĩnh của nội dung, để xác định một giao diện điều hướng tĩnh của nội dung, các nút đại diện cho các thơng tin từ các mơ hình nội dung và các liên kết thể hiện các đường dẫn điều hướng giữa các nút. Như vậy, các yếu tố cơ bản trong mơ hình điều hướng là các nút điều hướng và các liên kết.
Từ mơ hình nội dung ta chuyển đổi sang mơ hình điều hướng với các thành phần cơ bản, để từ đó loại bỏ bớt và bổ sung thêm các thành phần khác nhằm hồn thiện mơ hình. Việc đặc tả mơ hình điều hướng bắt buộc phải tuân thủ chặt chẽ các quy tắc chuyển đổiđã đề ra, vì dữ liệu từ các mơ hình này sẽ được dùng cho việc chuyển đổi. Mơ hình điều hướng thểhiện các chức năng của ứng dụng và có thể được chuyển đổi tự động tạo ra mơ hình điều hướng từ mơ hình u cầu và các mơ hình nội dung (Hình 2.8) [1].
Chuyển đổi RequirementsAndContent2Navigation [1]
Quy tắc ContentClass2NavigationClass
Mỗi lớp nội dung là đối tượng của một Web use case hoặc đích của Web use case, trả về bởi helper isRelevantForNavigation, được ánh xạ tới lớp điều hướng với tên giống nhau. Thêm vào đó, một tham chiếu được phân cơng tới lớp nội dung tương ứng. Quy tắc như sau.
rule ContentClass2NavigationClass {
from c : UWE!Class ( c.is RelevantForNavigation() )
to tc : UWE!Class ( … ), -- target for copying source element nc : UWE!NavigationClass
( name <- c.name, contentClass <- tc, ownedAttribute <- c.ownedAttribute->collect( p | thisModule.resolveTemp( p, 'np' ) ), … ), … } Quy tắc Property2NavigationProperty
Mỗi sở hữu nội dung mà không phải là một phần của association sẽ được ánh xạ tới một sở hữu điều hướng. Quy tắc như sau:
rule Property2NavigationProperty {
from p : UWE!Property ( p.oclIsTypeOf( UWE!Property ) and
p.class_.isRelevantForNavigation() and p.association.oclIsUndefined() ) to tp : UWE!Property ( … ), -- ta rget for copying source element
np : UWE!NavigationProperty ( name <- p.name, class_ <- p.class_, type <- p.type, contentProperties <- Sequence { p }, … ) } Quy tắc AssociationProperty2NavigationLink
Mỗi sở hữu của một association được sở hữu bởi một lớp nội dung được ánh xạ tới liên kết điều hướng và hai sở hữu điềuhướng tương ứng. Một điều kiện thêm vào là navigation use case tương ứng tồn tại trong mơ hình u cầu. Các association một chiều được ánh xạ tới một liên kết điều hướng và các association hai chiều đến hai liên kết điều hướng.
rule AssociationProperty2NavigationLink {
from p : UWE!Property (
if p.class_.oclIsTypeOf( UWE!Class ) then p.oclIsTypeOf( UWE!Property ) and
not p.association.oclIsUndefined() and p.class_.useCase->exists( uc |
uc.oclIsKindOf( UWE!Navigation ) and uc.target() = p.type ) else false endif )
to tp : UWE!Property ( … ), -- ta rget for copying source element nl : UWE!NavigationLink ( … ), nps : UWE!Property ( association <- nl, owningAssociation <- nl, type <- p.class_, … ), np : UWE!NavigationProperty ( name <- p.name, class_ <- p.class_, type <- p.type, association <- nl, contentProperties <- Set { p }, … ) }
2.2.3. Chuyển đổi sang mơ hình xử lý
Mơ hình xử lý (cịn gọi là mơ hình nhiệm vụ) xuất phát từ lĩnh vực giao diện người máy [84]. Các thành phần «processClass» ở mơ hình điều hướng sẽ được thể hiện rõ hơn bởi mơ hình xử lý. Chúng được đặc tả bởi biểu đồ hoạt động với các Action mà người dùng có thể thực hiện trong ứng dụng web.
Các mơ hình điều hướng của một ứng dụng Web miêu tả cấu trúc thông tin tĩnh cịn Mơ hình xử lý diễn tả ý động của ứng dụng Web.[1]
Chuyển đổi sang mơ hình xử lý [1]
Việc chuyển đổi sang mơ hình xử lý nhằm nâng cao mơ hình định hướng, bằng cách thêm các lớp xử lý và liên kết xử lý đối với việc tích hợp xử lý.
Quy tắc Menu2IntegratedMenu
Mỗi Web process use case từ mơ hình yêu cầu được ánh xạ tới lớp xử lý trong mơ hình điều hướng được tích hợp. Một liên kết xử lý kết nối với menu tương ứng tới lớp nội dung của Web process use case để tạo ra lớp xử lý. Một liên kết xử lý liên tục được tạo ra cho đích bắt buộc của Web process use case.
rule Menu2IntegratedMenu {
from nc : UWE!Menu (
nc.contentClass.useCase->exists( uc | uc.oclIsKindOf( UWE!WebProcess ) ) ) using
{
wps : Sequence( UWE!WebProce ss ) = nc.contentClass.useCase-> select( uc | uc.oclIsKindOf( UWE!WebProcess ) )->asSequence(); wpsWithTarget : Sequence( UWE!W ebProcess ) = wps->select( wp | not wp.target.oclIsUndefined() );
wpsWithoutTarget : Sequence( UWE! WebProcess ) = wps->select( wp | wp.target.oclIsUndefined() );
wpsOrdered : Sequence( UWE!WebProcess ) = wpsWithTarget-> union( wpsWithoutTarget );
}
to tnc : UWE!Menu ( … ), -- tar get for copying source element pc : distinct UWE!ProcessClass foreach ( wp in wpsOrdered ) (
name <- let n : String = wp.name.regexReplaceAll( ' ', '' ).firstToUpper() in if UWE!WebProcess.allInstances()->select( uc |
uc.name.regexReplaceAll( ' ', '' ).firstToUpper() = n )->size() > 2 then nc.getTraceSource( 'NavigationClass2Menu' ).name else '' endif + n, …
pl : distinct UWE!ProcessLink foreach ( wp in wpsOrdered ) (
… ),
epl : distinct UWE!ProcessLink foreach ( wp in wpsWithTarget ) (
… ), …
}
2.2.4. Chuyển đổi từmơ hình điều hướng, xử lý sang mơ hình trình bày
Mơ hình trình bày định nghĩa từ các lớp của mơ hình xử lý và mơ hình điều hướng. Mơ hình trình bày đặc tả chính xác các thành phần giao diện người dùng và xác định cụ thể cấu trúc của ứng dụng web mà các mơ hình điều hướng, xử lý, khơng thể hiện được…
Chuyển đổi AvigationAndProcess to Presentation [1]
Lớp trình bày tạo ra bởi mỗi node trong mơ hình điều hướng và mỗi lớp dữ liệu xử lý. Một sở hữu xử lý tương ứng được tạo ra bởi mỗi thuộc tính cùng với kiểu của thành phần giao diện người dùng.
Rule NavigationClass2PresentationClass
Với mỗi lớp điều hướng, một lớp trình bày được tạo ra bởi quy tắcnày. Hơn nữa, với mỗi thuộc tính của lớp điều hướng cùng với một kiểu datatype thì một thành phần giao diện người dùng văn bản được tạo ra. Đối với mỗi liên kết, một thành phần giao diện người dùng cố định được tạo ra.
rule NavigationClass2PresentationClass {
from nn : UWE!NavigationClass (
not nn.isAbstract and nn.oclIs TypeOf( UWE!NavigationClass ) ) to tnn : UWE!NavigationClass ( … ), -- target for copying source element pc : UWE!PresentationClass
( …
),
textUis : distinct UWE!Text foreach ( p in nn.allOwnedAttribute()-> select( p | p.type.oclIsKindOf( UWE!DataType ) ) )
(
name <- p.name.firstToUpper(), …
),
anchorUis : distinct UWE!Anchor foreach ( p in nn.allOwnedAttribute()-> select( p | p.association.oclIsKindOf( UWE!Link ) ) )
( name <- p.type.name, … ), … } Quy tắc Menu2PresentationClass
Với mỗi menu, một lớp trình bày được tạo ra bằng quy tắc này. Với mỗi liên kết một thành phần giao diện người dùng cốđịnh được tạo ra.
rule Menu2PresentationClass