Khóa luận Kiểm chứng đặt tả UML cho tác tử phần mềm

ĐẠI HC QUC GIA HÀ NI  
TRƯỜNG ĐẠI HC CÔNG NGHỆ  
Vũ Sỹ Vương  
KIM CHỨNG ĐẶT TUML CHO TÁC TỬ  
PHN MM  
KHOÁ LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghphn mm  
HÀ NI - 2009  
ĐẠI HC QUC GIA HÀ NI  
TRƯỜNG ĐẠI HC CÔNG NGHỆ  
Vũ Sỹ Vương  
KIM CHỨNG ĐẶT TUML CHO TÁC TỬ  
PHN MM  
KHOÁ LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghphn mm  
Cán bộ hướng dn: Tiến sỹ Trương Anh Hoàng  
HÀ NỘI - 2009  
Lời cám ơn  
Trước tiên tôi xin gi li cảm ơn sâu sc tới TS. Trương Anh Hoàng, Bộ môn  
Công nghphn mm, Khoa Công nghệ thông tin, Trường Đại hc Công Nghệ, Đại  
Hc Quc Gia Hà Ni – người đã định hướng đề tài và tn tình hướng dn chbo tôi  
trong sut quá trình thc hin khóa lun tt nghip này.  
Tôi cũng xin trân trọng cảm ơn quý th y cô trong Khoa Công nghthông tin  
trường Đại hc Công Nghệ, Đại Hc Quc Gia Hà Nội đã tn tình ging dy, truyn  
đạt nhng kiến thc quý báu trong sut bốn năm học làm nn tng cho tôi thc hin  
khóa lun tt nghip này.  
Con xin cảm ơn cha mẹ và gia đình đã sinh ra và nuôi d y con khôn ln, luôn  
bên cạnh động viên và ng hộ con trên con đường mà con đã yêu thích và la chn.  
Cảm ơn các bạn sinh viên Khoa Công nghthông tin khóa 2005 – 2009. Các bn  
đã giúp đng htôi rt nhiu cũng như đóng góp nhiều ý kiến quý báu, qua đó,  
giúp tôi hoàn thin khóa lun tốt hơn.  
Mặc dù đã rt nlc, cgắng nhưng chắc hn khóa lun ca tôi vn còn nhiu  
thiếu sót. Tôi rt mong nhận được nhiu nhng ý kiến đánh giá, phê bình ca quý thy  
cô, ca các anh chvà các bn.  
Mt ln na, tôi xin chân thành cảm ơn.  
Hà Nội, tháng 5 năm 2009  
Vũ Sỹ Vương  
Tóm tt ni dung  
Trong quy trình phát trin phn mm, kim chng phn mềm đóng vai trò quan  
trng trong việc đảm bảo tính đúng đắn ca hthng trong sut quá trình thc thi. Nó  
có nhim vphát hin và dò tìm lỗi cho giai đoạn kim thphn mềm. Phương pháp  
lp trình hưng khía cnh (AOP) cùng vi công nghAspectJ ra đời đã tạo ra hướng  
phát trin mi cho kim chng phn mm, giúp nâng cao chức năng dò tìm, s a li  
phn mm mà không ảnh hưởng ti mã ngun hthng. Tyêu cu thc tế, khi mà  
mô hình UML đang là sự la chn phbiến cho vic mô hình hóa hthng phn mm  
ở giai đoạn thiết kế, vic kim chng các giao thc ràng buộc đối tượng, giao thc  
ràng buc gia các tác ttrong hệ đa tác tử được mô ttrong biểu đồ trng thái và biu  
đồ trình tUML, AUML là rt cn thiết trong thi gian chy. Da vào yêu cu thc tế  
đặt ra cùng vi vic la chn AOP làm gii pháp gii quyết vấn đề, trong phm vi  
khóa lun, tôi xin trình bày phương pháp sinh mã aspect phc vcho mục đích kiểm  
chng phn mm và xây dng công cProtocol Verification Generator (PVG) tự động  
sinh mã aspect dựa trên phương pháp này. Nội dung chính của phương pháp là dựa  
vào các kiến thc vAOP và UML, XML, AUML, JADE framework để chuyển đổi  
các giao thc ràng buộc đối tượng được đặc tbi biểu đồ UML, giao thức tương tác  
gia các tác ttrong hệ đa tác tử được đặc tbi biểu đổ AUML sang các mô-đun  
aspect phc vquá trình kim chng. Ý nghĩa thc tin ca bài toán là vic sdng  
aspect vừa được tạo ra đan vào chươngìntrh chính thông qua b ộ đan (aspect  
weaver) ca AspectJ để thc hin nhim vkim chng các giao thc ràng buc gia  
các đối tượng, các tác ttrong thi gian chy.  
Mc lc  
5.5 Sinh mã aspect kim chng giao thc (AB)n.........................................52  
5.5.1 Giao thc (AB)n là gì?.......................................................................52  
5.5.2 Thut toán kim chng giao thc (AB)n ...........................................53  
5.5.3 Sinh mã aspect kim chng giao thc (AB)n ....................................54  
6.2.3 Kim chng giao thc [A*B] n..........................................................64  
Danh mc ký hiu, tviết tt  
AOP  
FSM  
JADE  
OOP  
PVG  
XMI  
XML  
UML  
Aspect-Oriented Programming  
Finite State Machine  
Java Agent DEvelopment Framework  
Object Oriented Programming  
Protocol Verification Generator  
XML Metadata Interchange  
eXtensible Markup Language  
Unified Modeling Language  
Chương 1. Mở đầu  
1.1 Đặt vấn đề  
Ngày nay công nghệ thông tin đã đưc ng dng vào tt ccác lĩnh vực của đời  
sng xã hi. Nó đã to ra mt din mo mi cho xã hi và nhờ đó nền văn minh nhân  
loại đã đưc nâng lên mt tm cao mới. Nói đến công nghệ thông tin là nói đến công  
nghphn mm – mt phn không thtách ri ca công nghthông tin. Hin nay  
ngành công nghphn mm trên thế giới đã và đang phát triển như vũ bão. Nhng tiến  
bộ vượt bc ca khoa hc kthut phn cứng đã tạo điều kin thun li cho công nghệ  
phn mm ngày càng phát trin không ngng.  
Phn mềm được coi là sn phm chính ca công nghphn mềm, được phát trin  
theo các mô hình, quy trình phát triển đặc bit. Quá trình phát trin phn mm bao  
gm rt nhiều giai đoạn: Thu thp yêu cu, phân tích, thiết kế, xây dng, kim tra,  
trin khai và bo trì phn mềm. Trong các giai đoạn đó giai đoạn kim tra, phát hin,  
xác định và sa các li phn mm là rt quan trọng để đảm bo chất lượng ca mt  
phn mm. Các li phn mm có thgây thit hi to ln vtin bc, thi gian và công  
sc của con người. Li phn mềm được phát hin càng mun thì càng gây hu quả  
nghiêm trng, tn rt nhiu thi gian và công sức để sa cha li, thm chí có thphi  
xây dng li toàn bhthng từ đầu. Chính ví vy cần có các phương pháp phát hiện  
li sm nhm gim thiu công sức để sửa chúng. Để phát hin ra nhng li phn mm,  
phn mm cn phải được kim chng (Verification) và thẩm định (Valication) [13].  
Kim chng phn mm là kim tra xem phn mềm có được thiết kế đúng và thực thi  
đúng như đặc tyêu cu hay không. Thẩm định phn mềm là giai đoạn có shtrợ  
ca khách hàng nhm kim tra xem phn mềm có đáp ứng được các yêu cu ca họ  
hay không.  
Mục đích chính của kim chng phn mm là làm gim thiu li phn mm ti  
mc có thchp nhận được. Chính vì vy, nó có vai trò vô cùng quan trng trong toàn  
bquy trình phát trin phn mm và trong ngành công nghphn mm hin nay. Nó  
đã và đang thu hút được mi quan tâm ca rt nhiu nhà nghiên cu.  
Giai đoạn kim thtrong quy trình phát trin phn mm có mục đích kiểm tra  
tính đúng đắn ca sn phm phn mm. Trên thc tế, các thao tác kim thử đơn vị chỉ  
đánh giá được tính đúng sai của đầu vào và đầu ra của chương trình, không kim tra  
được quá trình hoạt động logic của chương trình có theođúng đ c tả ban đầu hay  
1
   
không. Những đơn vị chương trình nhnày nếu không được kim tra kscó thgây  
ra thit hi nng nkhi tích hợp chúng để tạo thành chương trình hoàn chnh. Vấn đề  
đặt ra là cần có phương pháp kiểm chứng các đặc tgiao thc giữa các đối tượng, các  
tác tngay trong thi gian chạy, đánh giá xem trong thời gian chạy đối tượng hay tác  
tphn mm có vi phm các giao thc ràng buộc đã được đặc thay không, và từ đó  
đảm bo chc chắn hơn tính đúng đắn ca sn phm phn mm. Trong khóa lun này,  
tôi xin gii thiệu phương pháp tự động sinh mã aspect kim chứng đặc tgiao thc  
trong thi gian chy, dựa trên phương pháp lập trình hư ớng khía cnh (Aspect –  
Oriented Programming).  
1.2 Ni dung bài toán  
Hin nay có rt nhiều phương pháp kiểm chng phn mềm như giả lp hay kim  
chng mô hình. Trong phạm vi bài toán được đặt ra ở đây, tôi muốn đcp tới phương  
pháp kim chng phn mm dựa trên phương pháp lập trình hưng khía cnh (AOP)  
[7, 12]. Lĩnh vực kim chng cthtrong phm vi bài toán là kim chng giao thc  
đặc thoạt động của các đối tượng Java và kim chng giao thc gia các tác ttrong  
hệ đa tác tử (giao thức được mô tbng biểu đồ trng thái và biểu đồ trình tUML,  
AUML) trong thi gian chy.  
Trong cách tiếp cn này, mt ng dụng hướng đối tượng được đặc tbng mô  
hình UML và được cài đặt bng ngôn ngJava; mt hệ đa tác tử được đặc tbng các  
biểu đồ AUML và được cài đặt da trên JADE framework. Các aspect sau đó sẽ được  
đan vào khung mã Java đ ể kim tra ti bt kthời điểm nào trong thi gian chy, các  
đối tượng Java, các tác tphn mm hoạt động vi phm giao thức đã đặc t(aspect là  
mô-đun cắt ngang hthng). Bài toán có nhim vlà tạo ra được các aspect tbiểu đồ  
trng thái và biểu đồ trình tUML; dùng công cAspectJ để đan các aspect này vào  
khung chương trình Java chính . Khi đó, trong quá ìtnr h ch y của chương trình, các  
đoạn mã aspect stự động kiểm tra các đặc tgiao thức và đưa ra thông báo lỗi khi có  
bt kvi phm nào xảy ra. Trong khi phương pháp kiểm thử đơn vị chỉ xác định được  
tính đúng đắn của đầu vào và đầu ra của chương trình, không kiểm tra được nhng li  
logic thì phương pháp kiểm tra tính đúng đắn ngay ti thi gian chy của chương trình  
sẽ đem lại hiu qurt ln.  
Nhim vchính ca bài toán là xây dựng phương pháp tạo ra các đoạn mã aspect  
để kim chng, xây dng công cProtocol Verification Generator(PVG) tự động sinh  
aspect kim chng từ đặc tgiao thc bng biểu đồ trng thái và biểu đồ trình tự  
UML, AUML. Tôi xin đề cập hướng nghiên cu kim chứng đặc tUML cho tác tử  
2
 
phn mềm để kim chng giao thc giữa các đối tượng Java trong thi gian chy và  
kim chng giao thc gia các tác ttrong hệ đa tác tử được xây dng trên JADE  
framework. Tmt biểu đồ trng thái hay biểu đồ trình tUML, AUML xut ra tài  
liệu XMI đặc tcác biểu đồ này. Các tài liệu XMI chính là đầu vào cho công ccn  
xây dng. Da vào các kiến thc vUML, XML tôi sphân tích tài liu XMI, xây  
dng máy trng thái (FSM) mô tcác biểu đồ UML, AUML. Sdng máy trng thái  
va tạo để sinh ra mã aspect phc vcho vic kim chng sau này. Mã aspect chính là  
đầu ra cui cùng ca công c.  
1.3 Tng quan phương pháp “Kiểm chứng đặc tUML  
cho tác tphn mm”  
Bài toán bắt đầu với đầu vào là mt biểu đồ trng thái hay biểu đồ trình tUML,  
các biểu đồ này sẽ được xut ra dạng XMI. Sau đó, ly ra các thông tin cn thiết mô tả  
các đối tượng ca biểu đồ và chuyn thành mt máy trng thái (FSM). Lp trình viên  
sphát trin các mô-đun nghiệp vchính thai biểu đồ này và các biểu đồ UML khác  
còn li. Song song vi nó là quá trình xây dng các mô-đun cắt ngang hthng thành  
các aspect tmáy trng thái. Bài báo “Checking Interface Interaction Protocols Using  
Aspect-oriented Programming” [5] đã xây dựng phương pháp kiểm chng giao thc  
xdng AOP. Da vào nội dung phương pháp này tôi đã xây d ng công ctự động  
hóa vic sinh các mô-đun aspect với đầu vào là tài liu XMI mô tbiểu đồ trng thái  
hay biểu đồ trình tự UML. Phương pháp xây dựng công cProtocol Verification  
Generator ca tôi gồm hai bước:  
- Bước1: Phân tích tài liu XMI, ly các thông tin cn thiết mô tbiểu đồ  
UML để xây dng máy trạng thái. Đầu tiên, tôi sphân tích tài liu XMI,  
xây dng các cu trúc dliu mô tcác thành phn ca biểu đồ UML bng  
ngôn ngữ Java, sau đó sử dụng thư viện XML DOM đọc tài liu XMI này,  
ly dliu theo cấu trúc đã định nghĩa trước, to ra FSM.  
- Bước 2: Xây dng bsinh tự động aspect tFSM: Sdng FSM va  
được sinh ra, duyt tng trng thái trong FSM, áp dụng phương pháp cài  
đặt aspect trong bài báo nói trên, tôi sto ra các join point, pointcut và  
advice tcác trạng thái đó để hình thành mô-đun aspect.  
Trong hình minh họa dưới đây, tôi sẽ xây dng công cProtocol Verification  
Generator. Kết quả thu được là các đoạn mã aspect sẽ được đan vào chương trình Java  
thông qua trình biên dch AspectJ. Kết qucui cùng ca quá trình này chính là hệ  
3
 
thng có cha những đoạn mã kim chng. Trong quá trình thc thi, kctrong thi  
gian chy, bt ckhi nào xy ra vi phm ràng buộc đã định nghĩa trong biểu đồ UML  
thì chương trình đều báo thông báo li cho lp trình viên, chra vtrí dòng mã ngun  
sai đặc ttrong mã ngun của chương trình. Nh ờ đó, lập trình viên có thkim soát  
được hthng và làm cho hthng chy ổn định và đúng đắn hơn.  
UML  
Use Case Diagram  
Class Diagram  
XMI File  
(*.xmi, *.xml)  
Protocol  
Specification  
Sequence Diagram  
State Diagram  
…….  
AspectJ Generator  
AspectJ code  
Java code  
AspectJ Weaver  
Bytecode with  
Protocol checking  
Hình 1.1: Quy trình kim chng phn mm da vào AOP  
1.4 Cu trúc khóa lun  
Các phn còn li ca khóa luận được phân bố như sau:  
Chương 2: Gii thiu về phương pháp lập trình hướng khía cạnh. Trong chương  
này tôi sẽ đưa ra những so sánh giữa hai phương pháp OOP và AOP, từ đó nêu bật  
những ưu điểm ca AOP; vai trò và ý ngĩha c ủa AOP đối vi công nghphn mm  
hiện nay. Đồng thi, tôi cũng gii thiu công cAspectJ – một cài đặt ca AOP cho  
ngôn nglp trình Java.  
Chương 3: Trình bày sơ qua vcác kiến thc v: UML, XML, XMI; trình bày  
mt skhái nim vtác tphn mm, phn mềm hướng agent và AUML – mrng từ  
UML để mô tcác hthng da tác t. Gii thiu JADE – mt framework htrxây  
dng hệ đa tác tử trên ngôn ngJava. Đây là nn tng kiến thức căn bản để xây dng  
công ctsinh mã aspect trong khóa lun ca tôi.  
Chương 4: Trình bày phương pháp xây dựng máy trng thái mô tbiểu đồ trng  
thái và biểu đồ trình tự UML. Trong chương này, tôi sẽ trình bày cách phân tích tài  
4
 
liu XMI mô tcác biểu đồ UML, từ đó xây dựng các cu trúc dliu cn thiết để ly  
dliu ttài liu XMI hình thành nên máy trng thái.  
Chương 5: Xây dng công ctsinh mã aspect tmáy trng thái. Trong  
chương này, tôi sẽ trình bày chi tiết thut toán sinh mã aspect tmáy trng thái mô tả  
biểu đồ UML. Đồng thi tôi trình bày phương pháp sinh mã aspect kim chng giao  
thc (AB)n – mt mrng cho công cProtocol Verification Generator.  
Chương 6: Cài đặt công cProtocol Verification Generator tsinh aspect. Sau  
đó, tiến hành kim chng mt sgiao thc thc tế.  
Chương 7: Đưa ra các kết lun ca khóa luận và hướng nghiên cu tiếp theo  
trong tương lai.  
5
Chương 2. Gii thiu lp trình hư ớng khía cnh  
(Aspect-Oriented Programming) và AspectJ  
2.1 Phương pháp lập trình hướng khía cnh  
Có lcác khái nim vlp trình hướng khía cnh (AOP) hiện nay đã được nhiu  
người biết đến, vì vy ở đây tôi sẽ chtrình bày li ngn gn các khái niệm cơ bản và  
đặc điểm chính của AOP. Để trlời được câu hi AOP là gì? Ti sao phi có AOP?  
chúng ta sbắt đầu tìm hiu shn chế của các phương pháp lập trình hin ti trong  
việc đáp ng các yêu cu ngày càng phc tp ca các hthng phn mm.  
2.1.1 Shn chế ca lp trình hướng đối tưng (OOP)  
Như chúng ta đã biết trong OOP người ta cgng mô tthế gii thc thành các  
đối tượng vi các thuộc tính và phương thức; cùng vi các tính cht ca lp trình  
hướng đối tượng như: tính trừu tượng, tính đóng gói, tính kế thừa và đa hình đã làm  
thay đổi hoàn toàn ngành công nghip phn mm.  
Hình 2.1: OOP  
Ta xét mt bài toán cth: Cn xây dng một chương trình vhình đơn giản như  
hình vmô tả dưới đây:  
6
     
Hình 2.2: Mô tả chương trình vhình đơn giản  
Một phân tích đơn giản cho yêu cu ca bài toán:  
- Các hình học cơ bản: điểm, đoạn thng, hình chnht, hình tròn…  
- Hin thcác hình các vtrí khác nhau trong khung v.  
- Phi cp nht li hình ti vtrí mi mi khi di chuyn, co giãn hình.  
Sdng OOP ta smô hình hóa yêu cầu thành các đối tượng như sau:  
- Lp Shape: là mt lp Abstract chứa phương thức moveBy(int, int) – di  
chuyn hình.  
-
Lp Display: hin thhình nh.  
- Lp Point: mô tmột điểm hình hc. Cha hai thuc tính là hai tọa độ x, y  
và được kế tha tlp Shape.  
- Lp Line: mô tả đoạn thng, cha hai thuộc tính là hai điểm mút của đoan  
thng và cũng được kế tha tlp Shape.  
Ở đây tôi không đi quá sâu vào đặc tbài toán, chmô tmt slớp đơn giản  
nhất. Dưới đây là sơ đồ lp cho bài toán vhình:  
7
Hình 2.3: Sơ đồ lp cho bài toán vhình  
Mô hình hóa thành các lớp như vậy ta thấy bài toán đã tương đối n. Bây givn  
đề đặt ra là mỗi khi ta thay đổi tọa độ ca một điểm hay co giãn hình, di chuyn hình  
ta li phi vli hình vtrí mi – tc là phi update li Display.  
Xét lớp đơn giản nht là lp Point, Khi đặt li tọa độ x, tọa độ y, hay di chuyn  
Point tvtrí này sang vị trí khác, ta đều phi update li Display thông qua phương  
thc display.update(this). Như vậy, cùng một phương thức display.update(this), ta  
phi gõ li ba vtrí khác nhau ng vi ba sự thay đổi. Hãy thử tưởng tượng xem nếu  
chương trình của chúng ta đủ ln và có khong vài ngàn sthay đổi kiểu như thế thì  
dòng mã ngun display.update(this) sphi xut hin hàng ngàn chkhác nhau.  
Đối vi lp Line hay các lp khác cũng vậy. Mi khi có sự thay đi hình thì ngay  
sau sự thay đổi đó sẽ có dòng mã ngun display.update(this) đi kèm theo .  
Hình 2.4: Cp nht hình khi có sự thay đổi  
8
Gisử chương trình vhình của chúng ta đã hoàn thành mmãn với đầy đủ các  
chức năng cơ bản. Đột nhiên, khách hàng yêu cu cn phi ghi li nhng sự thay đổi  
khi vhình ra mt file log.txt. Ôi! Điều này thc slà rt khscho lp trình viên khi  
phi dò li toàn bmã nguồn, xem đoạn nào có sự thay đổi hình, chèn thêm vàođó  
mt dòng mã ngun có chức năng lưu vết ra file log.txt.  
Ta có thchia các chức năng của mt phn mm ra làm hai loi chính:  
- Thnht là các chức năng thực hin các nghip vchính, nghip vụ cơ  
bn ca hthng (ví dụ như chức năng vẽ điểm, vẽ đoạn thng, vhình  
khi trong bài toán vhình trên).  
- Thhai, nhng chức năng dàn trải trên rt nhiu các mô-đun nghiệp vụ  
chính – được gi là các chức năng cắt ngang hthng (ví d: cp nht  
hình, lưu vết, bo mật) hay đưc gi là crosscutting concern.  
OOP có thgii quết rt tt nhng chức năng chính của hthống, nhưng lại gp  
rt nhiều khó khăn trong việc gii quyết các chức năng cắt ngang hthng. Khi sử  
dụng OOP để thc hin các chức năng cắt ngang hthng, hthng sgp phi hai  
vấn đề chính, đó là: chồng chéo mã ngun (Code tangling) và dàn tri mã ngun  
(Code scattering) [12].  
- Chng chéo mã ngun: Mô-đun chính của hthng ngoài vic thc hin  
các yêu cu chính, nó còn phi thc hin các yêu cầu khác như: tính đồng  
b, bo mật, lưu vết, lưu trữ. Như vậy, trong mt mô-đun có rất nhiu loi  
mã khác nhau, hiện tượng này gi là chng chéo mã nguồn. Điều này làm  
cho tính mô-đun hóa của hthng giảm đi, khả năng sử dng li mã ngun  
thp, khó bo trì hthng.  
- Dàn tri mã ngun: Cùng mt mã ngun ca các chức năng cắt ngang hệ  
thống được cài đặt lặp đi lặp li rt nhiu ln nhiu mô-đun chính của hệ  
thng. Ví dụ như trong chương trình vhình trên, mã ngun ca chc  
năng cập nht hình, lưu v ết xut hin tt ccác mô-đun của hthng.  
Hiện tượng này gi là dàn tri mã ngun.  
2.1.2 Lp trình hướng khía cnh (AOP)  
Lp trình hướng khía cạnh được xây dựng trên các phương pháp lập trình hin ti  
như lập trình hư ớng đối tượng, lp trình có cu trúc, bsung thêm các khái nim và  
cấu trúc để mô-đun hóa các chức năng cắt ngang hthng (crosscutting concern). Vi  
AOP, các quan hệ cơ bản sdụng các phương pháp cơ bản. Nếu sdng OOP, sthc  
9
 
thi các quan hệ cơ bản dưới hình thc lp (class). Các aspect trong hthống đóng gói  
các chức năng cắt ngang hthng li vi nhau. Chúng sẽ quy định cách các mô-đun  
khác nhau gn kết với nhau để hình thành lên hthng cui cùng.  
Nn tảng cơ bản ca AOP khác vi OOP là cách qun lý các chức năng cắt  
ngang hthng. Vic thc thi ca tng chức năng cắt ngang AOP bqua các hành vi  
được tích hp vào nó. Ví dmt mô-đun nghiệp vskhông quan tâm nó cần được  
lưu vết hoặc được xác thực như thế nào, kết qulà vic thc thi ca tng concern tiến  
trin một cách đc lp.  
Quay trli vi ví dvề chương trình vhình đơn giản phn trên. Nếu sdng  
AOP, các chức năng cắt ngang hthng: cp nht hình, lưu vết sẽ được gii quyết theo  
cách sau:  
Thay vì tích hp chức năng các mô-đun cắt ngang hthng (cp nht hình, lưu  
vết) ngay trong mô-đun nghiệp vchính; lp trình viên stách chúng ra thành các mô-  
đun mới, gi là aspect. Hình 2.5 minh ha cho vic thc thi chức năng cập nht hình  
bằng AOP và dưới đây là mã ngun ca aspect đó  
public aspect UpdateSignaling {  
pointcut updateDisplay(): execution(void *.setX(int))  
|| execution(void *.setY(int))  
|| execution(void *.moveBy(int,int));  
after(): updateDisplay()  
{
display.update(this);  
}
}
Hình 2.5: Dùng AOP gii quyết bài toán vhình  
10  
Sau khi định nghĩa một aspect như vậy thì bt ckhi nào có sự thay đổi vhình  
(setX, setY, moveBy) chương trình s tự động gi chức năng cập nht hình, cthể ở  
đây là phương thức display.update(this) mà ta không cn phi lc li lại các đoạn mã  
nguồn để thêm nó dòng mã ngun này vào. (các khái niệm cơ bản ca aspect như:  
advice, join point, pointcut, aspect tôi strình bày cthtrong phn 2.2 nói về  
AspectJ).  
2.1.2.1 Phương pháp lun ca AOP  
Vấn đề ct lõi ca AOP là cho phép chúng ta thc hin các vấn đề riêng bit mt  
cách linh hot và kết ni chúng lại để to nên hthng cui cùng. AOP bxung cho  
OOP bng vic htrmt dng mô-đun khác, cho phép kéo theo thể hin chung ca  
các vấn đề đan nhau vào một khi. Khi này gi là ‘aspect’ (tm dch là ‘lát’ – hàm ý  
ct ngang qua nhiu lớp đối tượng). Tchaspect’ này chúng ta có mội phương pháp  
lp trình mi: Aspect-Oriented Programming. Nhđược tách riêng bit, các vấn đề  
đan xen nhau trở nên dkiểm soát hơn. Các aspect ca hthng có thể thay đổi, thêm  
hoc xóa lúc biên dch và có thtái sdng. Mt dng biên dịch đặc bit có tên là  
Aspect Weaver thc hin vic kết hp các thành phn riêng lthành mt hthng  
thng nht.  
2.1.2.2 Ưu điểm ca AOP  
AOP là mt kthut mi đầy trin vng, ha hẹn đem lại nhiu li ích cho vic  
phát trin phn mềm, dưới đây là một sli ích cthca AOP [12]:  
- Mô-đun hóa những vấn đề đan xen nhau: AOP xác định vấn đề mt  
cách riêng bit, cho phép mô-đun hóa những vấn đề liên quan đến nhiu  
lớp đối tượng.  
- Tái sdng mã ngun tốt hơn: Các aspect là nhng mô-đun riêng biệt,  
được kết hợp linh động – đây chính là yếu tquan trọng để tái sdng mã  
ngun.  
- Cho phép mrng hthng dễ dàng hơn: Mt thiết kế tt phải tính đến  
cnhng yêu cu hin tại và tương lai, việc xác định các yêu cu trong  
tương lai là một công việc khó khăn. Nhưng nếu bqua các yêu cu trong  
tương lai, có thể bn sphải thay đổi hay thc hin li nhiu phn ca hệ  
thng. Với AOP, người thiết kế hthng có thể để li quyết định thiết kế  
cho nhng yêu cầu trong tương lai nhờ thc hin các aspect riêng bit.  
11  
2.2 AspectJ  
AspectJ là smrng theo mô hình AOP ca ngôn ngJava, vi smrng  
này mã chương trình viết bng Java sẽ tương thích với chương trình viết bng AspectJ.  
AspectJ gm hai phần cơ bản là:  
- Đặc tngôn ng: Chra cách viết mã, vi AspectJ các chức năng cơ bản  
ca hthng sẽ được viết bng Java còn các chức năng cắt ngang hthng  
sẽ được thc hin bi AspectJ.  
- Phn thc thi: Cung cp các công cbiên dch, gli. AspectJ đã đư ợc  
plugin vào công cphát trin Eclipse (http://www.eclipse.org/) và được  
đánh giá là sản phm tt nht hin nay vAOP.  
Mt skhái niệm cơ bản trong AspectJ:  
2.2.1 Join point  
Join point là bt kỳ điểm nào có thể xác định được khi thc hiện chương trình [7,  
12]. Ví d: li gi hàm, khi tạo đối tượng. Join point chính là vị trí mà các hành động  
thc thi cắt ngang được đan vào. Trong AspectJ mi thứ đều xoay quanh join point.  
Mt sloi join point chính trong AspectJ:  
- Join point ti hàm khi to (constructor).  
- Join point tại các phương thức.  
- Join point tại các điểm truy cp thuc tính.  
- Join point tại các điểm điều khin ngoi lệ: Được điều khin trong khi  
điều khin ngoi l.  
2.2.2 Pointcut  
Pointcut là mt cấu trúc chương trình mà nó chn các join point và ngcnh ti  
các join point đó [7, 12]. Ví dmt pointcut có thchn mt join point là li gọi đến  
một phương thức và ly thông tin ngcnh của phương thức đó như đối tượng cha  
phương thức đó, các tham scủa phương thức đó.  
Cú pháp của pointcut được khai báo như sau:  
[access specifier] pointcut pointcut-name([args]) : pointcut-  
definition;  
Ví d:  
public pointcut test(): call(void Line.setP1(Point));  
12  
     
Bng 2.1: Ánh xgia các loi join point pointcut tương ứng:  
Loi join point  
Thc hiện phương thức  
Gọi phương thức  
Thc hin hàm dng  
Gi hàm dng  
Cú pháp pointcut  
execution(MethodSignature)  
call(MethodSignature)  
execution(ConstructorSignature)  
call(ConstructorSignature)  
staticinitialization(TypeSignature)  
get(FieldSignature)  
Khi to lp  
Đọc thuc tính  
set(FieldSignature)  
Ghi thuc tính  
execution handler(TypeSignature)  
Thc hiện điều khin ngoi  
lệ  
initialization(ConstructorSignature)  
preinitialization(ConstructorSignature)  
adviceexecution()  
Khi tạo đối tượng  
Tin khi tạo đối tượng  
Thc hin advice  
2.2.3 Advice  
Advice là mã thc hin ti mt join point mà được chn bi pointcut [7, 12]. Hay  
nói cách khác, nếu ta coi pointcut là khai báo tên phương thức, thì advice là phn thân  
của phương thức đó. Pointcut advice shình thành nên các luật đan kết các quan hệ  
đan xen.  
Advice được chia ra làm ba loi sau:  
- Before: Được thc hiện trước join point.  
- After: Được thc hin sau join point.  
- Around: Thc thi xung quanh join point.  
Gista có pointcut được khai báo như sau:  
pointcut updateDisplay(): execution(void *.moveBy(int,int))  
Ta có thxây dng các advice như sau:  
- Before advice thhiện lưu vết  
before() : updateDisplay() {  
13  
 
// logging  
}
- After advice thc hin cp nht hình  
after() : updateDisplay() {  
display.update(this);  
}
Ví dvaround advice dùng để kim tra thuc tính age ca lp Person trong  
phương thức setAge() có vi phạm điều khiện không (điều kin: age > 0).  
void around(Person person, int age):setAge(person, age)  
{
if(age > 0)  
Process(person,age);  
else  
System.out.println("Invalid Age!");  
}
2.2.4 Aspect  
Aspect là phn ttrung tâm ca AspectJ, giống như class trong Java. Aspect cha  
mã thhin các luật đan kết cho các concern. Join point, pointcut, advice được kết hp  
trong aspect [7, 12].  
Aspect được khai báo theo mu sau:  
[access specification] aspect <AspectName>  
[extends class-or-aspect-name]  
[implements interface-list]  
[<association-specifier>(Pointcut)] {  
... aspect body  
}
Ví d:  
public abstract aspect AbstractLogging {  
public abstract pointcut logPoints();  
public abstract Loger getLogger();  
before():logPoints()  
{
getLogger().log(Level.INFO, “Before” + thisJoinPoint);  
}
}
Tuy có gn giống các đặc điểm ca class trong Java như: chứa thuc tính,  
phương thức, có thkhai báo trừu tượng, có thkế tha… Tuy nhiên, Aspect có mt  
skhác biệt cơ bản sau:  
14  
 
- Aspect không thkhi to trc tiếp.  
- Aspect không thkế tha tmt aspect cth(không phi trừu tượng)  
Aspect có thể được đánh dấu là có quyn bằng định danh privileged. Nhờ đó nó  
có thtruy cập đến các thành viên ca lp mà chúng ct ngang.  
2.2.5 Cơ chế họa động ca AspectJ  
Aspect compiler là thành phn trung tâm ca AspectJ, nó có nhim vkết hp  
các file mã ngun Java vi các aspect li với nhau để tạo ra chương trình cu i cùng.  
Quá trình dt có thxy ra các thời điểm khác nhau: compile – time, link – time và  
load – time [7]:  
- Compile – time: Dt trong thi gian biên dịch là cách đơn giản nht. Mã  
ngun Java và các aspect sẽ được kết hp với nhau trước khi trình biên  
dch dch mã ngun ra dng byte code. Hay nói cách khác, trước khi biên  
dch, các mã aspect sẽ được phân tích, chuyển đổi sang dng mã Java và  
được chèn chính xác vào các vị trí đã định nghĩa sẵn trong mã ngun Java  
chính của chương trình. Sau đó trình biên dch sdch mã đã đưc dt này  
ra dng byte code. AspectJ 1.0.x sdụng cách này để dệt chương trình.  
- Link – time: Quá trình dệt được thc hin sau khi mã ngun Java và các  
aspect được biên dch ra dng byte code. Mt bxlý tĩnh được sdng  
để đánh dấu các điểm gi hàm trong mã được viết bng java. Khi mt hàm  
được thc thi. Runtime system sphát hiện ra điểm nào cn gọi đến mã  
aspect để thực thi và khi đó mã aspect sẽ được gọi để đan vào chương trình  
chính. AspectJ 1.1.x sdụng cách này để dệt chương trình.  
- Load – time: Quá trình dệt được thc hin khi máy o Java ti mt class  
vào để chy. Theo cách này, mã ngun Java và các aspect được biên dch  
ra dng byte code. Quá trình dt din ra khi classloader np mt class.  
AspectJ 1.5.x sdụng cách này để dệt chương trình.  
2.3 Sdng AOP Phát trin ng dụng và phương pháp  
kim chng da trên AOP  
Ngày nay, AOP được ng dng rng rãi trong vic phát trin phn mm. Phát  
trin hthng sdụng AOP tương tự như phát triển hthng sdụng các phương  
pháp khác, cũng g ồm các bước như: xác định concern, cài đặt concern và kết hp  
15  
   
chúng li to thành hthng cui cùng. Cộng đồng nghiên cứu AOP đề xuất ba bước  
[12] thc hiện như sau:  
- Phân tích bài toán theo khía cnh (Aspectual decomposition): Trong  
bước này chúng ta phân tích các yêu cu nhằm xác định các chức năng  
chính ca hthng và các chức năng cắt ngang hthống. Các phương thức  
ct ngang hthống được tách ra khi các chức năng chính.  
- Xây dng các chức năng (Concern Implementation): Cài đặt các chc  
năng một cách độc lp.  
- Kết hp các khía cnh lại để to nên hthng hoàn chnh (Aspectual  
Recompositon): Trong bước này chúng ta chra các quy lut kết hp bng  
cách to ra các aspect. Quá trình này gi là quá trình dt mã, sdng các  
thông tin trong aspect để cu thành hthng cui cùng.  
Hình 2.6: Các giai đoạn phát trin ng dng sdng AOP  
AOP đã được nghiên cu và áp dng vào rt nhiu ngôn nglp trình như: Java,  
C, C#, PHP. Mt sdự án được lit kê trong bảng dưới đây:  
Bng 2.2: Các dán nghiên cu AOP  
Tên dán  
1. AspectJ  
Địa chỉ  
1. AspectWerkz  
2. Jboss AOP  
3. Sping AOP  
4. Aspect#  
5. AspectC++  
6. JAC  
16  
Tkhả năng mô-đun hóa các quan hệ đan xen, các chức năng cắt ngang hệ  
thng; tách ri shoạt động ca các mô-đun cũng như nhiều ưu điểm khác ca AOP  
so vi OOP mà hiện nay AOP đã trthành sla chn phù hp cho rt nhiu hthng  
phn mềm; đặc bit là trong các chức năng lưu vết, bo mt, xác thc ca hthng  
phn mm. Ngoài ra, do các mã aspect độc lp vi mã ngun chính của chương trình,  
có thsửa đổi tùy theo ý mun ca lp trình viên, chính vì vy AOP cònđư ợc ng  
dng rt ln vào các loi kim chng trong quá trình thiết kế phn mm. Ví dụ như:  
kim chng giao thc [5], kim tra vic gi tun tcác hàm trong chương trình [15]…  
Ni dung chính của các phương pháp kiểm chng da trên AOP là da vào  
nhng kiến khái niệm cơ bản của AOP như: join point, pointcut, advice, aspect để xây  
dng nên các mô-đun kiểm chng (các aspect) tcác chức năng cắt ngang hthng.  
Các aspect này sẽ được đan vào khung mã ngu ồn chương trình thông qua trình biên  
dch AspectJ để thc hin chức năng kiểm chng.  
2.4 Kết lun  
Trong chương 2 này, tôi trình bày tt cnhng khái niệm cơ bản về phương pháp  
lp trình hướng khía cnh AOP và AspectJ – smrng ca AOP cho Java. ng dng  
ca AOP vào phát trin và kim chng phn mm. AOP vn là mt ý tưng mi, vn  
cn có thời gian để đánh giá, tìm hiu các kthut hiện có và để phát trin, ng dng  
rng rãi  
17  
 
Chương 3. Agent UML và JADE framework  
3.1 Ngôn ngmô hình hóa UML  
3.1.1 Khái nim  
UML (Unified Modeling Language) là ngôn ngmô hình hóađư c sdụng để  
biu diễn, đặc tvà xây dng các thành phn ca hthng phn mm. Nó là mt  
chun ca tchc OMG (Object management Group) [11]. UML giúp người sdng  
mô tả được các tài liệu đặc tyêu cu, tài liu phân tích và tài liu thiết kế ứng dng.  
Hiện nay, nó được dùng để mô thình hóa gần như toàn bộ các hthng phn mm từ  
nhti ln, từ đơn giản ti phc tp trên thế gii.  
UML sdng mt hthng ký hiu thng nhất để biu din các phn tmô hình.  
Tp các phn tmô hình to nên các biểu đồ UML. Có nhiu loi biểu đồ UML như:  
biểu đồ ca sdng, biểu đồ lp, biểu đồ tun t, biểu đồ trng thái, biểu đồ hot  
động… Ở đây tôi chỉ trình bày hai loi biểu đồ được sdụng làm đầu vào cho nghiên  
cu của tôi; đó là: biểu đồ trng thái (State Diagram) và biểu đồ trình t(Sequence  
Diagram).  
3.1.2 Biểu đồ trng thái (State Diagram)  
Biểu đồ trng thái là mt sbsung cho li miêu tbiểu đồ lp. Nó mô tchu  
ktn ti của đối tương từ khi sinh ra đến khi bphá hy. Nó chra tt ccác trng  
thái mà đối tượng ca lp này có thcó, các hành vi của đối tượng và nhng skin  
tác động làm thay đổi trng thái.  
Ví d:  
Hình 3.1: Biểu đồ trng thái thc hiện hóa đơn  
Mt trng thái có thcó ba phn sau:  
- Name: Tên ca trng thái, Ví d: Paid, Unpaid.  
18  
       
- State variables (các biến trng thái – không bt buc): đây là những thuc  
tính ca lớp được thhin qua biểu đồ trng thái  
- Activities (skin – không bt buộc): Đây là phần dành cho hoạt động nơi  
mà các skiện và hành động và lit kê. Có ba loi skin chun hóa có  
thể được sdụng cho hành động:  
o Entry: Xác định các hành động to trng thái.  
o Exit: Xác định các hành động khi ri btrng thái.  
o Do: Xác định các hành động cn phi thc hin trong trng thái.  
Skin là nguyên nhân ca chuyn trng thái. Mt skin có thkích hot mt  
hoc nhiều hành động bi mt tác nhân. Trong UML, có các kiểu sư kiện:  
- Change events: Xut hiện khi điều kin tha mãn.  
- Signal events: Chra vic nhn mt tín hiu ngoài tmột đối tượng sang  
đối tượng khác.  
- Call events: Chra vic nhn mt li gi hàm bi một đối tượng hoc tác  
nhân.  
- Time events: Đánh dấu vic chuyn trng thái sau mt khong thi gian.  
3.1.3 Biểu đồ trình t(Sequence Diagram)  
Biểu đồ trình tminh họa các đối tượng tương tác với nhau ra sao. Chúng tp  
trung vào các chuỗi thông điệp, có nghĩa là các thông đip gi và nhn gia mt lot  
các đối tượng như thế nào. Biểu đồ tun tcó hai trc: trc dc chthi gian, trc nm  
ngang chra mt tập các đối tượng. Ví d:  
Hình 3.2: Biểu đồ tun trút tin tmáy ATM  
Mt biểu đồ tun tcũng nêu bật sự tương tác giữa các đối tượng trong mt kch  
bn – một tương tác sẽ xy ra ti mt thời điểm nào đó trong quá tìrnh thc thi hệ  
thng.  
19  
 
Biểu đồ tun tgm hai thành phn chính:  
- Các đối tượng.  
- Các thông điệp trao đổi giữa các đối tượng.  
3.2 XML (eXtensible Markup Language)  
3.2.1 Cơ bản vXML  
XML kết hp những ưu điểm ca các ngôn ngữ trước đó (sự đơn giản ca HTML  
và cu trúc mô ttài liu ca SGML), có khả năng mô tả nhiu loi dliu khác nhau  
vi mục đích là đơn giản hóa vic chia sdliu gia các hthống khác nhau, đặc  
bit là các hthống được kết ni vi Internet. XML là ngôn ngữ đánh dấu vi mc  
đích chung cho W3C đề ngh[6].  
XML là mt ngôn ngữ đánh dấu, nó gn ging vi HTML (Hypertext markup  
Language). Nó cung cp một phương tiện dùng văn bản để mô tthông tin và áp dng  
mt cu trúc kiểu cây cho thông tin đó. Mọi thông tin đều hin thị dưới dạng văn bản  
(text), chen gia các thẻ đánh dấu (markup) vi nhim vký hiu sphân chia thông  
tin thành mt cu trúc có thbc ca các dliu ký t[6].  
Ni dung ca mt tài liu XML gm hai phn chính:  
- Ni dung chính: Hthng các thẻ đánh dấu tương ứng vi các thông tin  
cn biu din và có mt node gc.  
- Ni dung ph: Bsung thông tin cho tài liu XML, mt sthph:  
o Thkhai báo tham s: <?xml Ten1=“Giatri1”… ? >  
Mt stham số thường dùng như: tham số version (phiên bn chỉ  
định ca XML), tham sencoding (cách mã hóa các ký t), tham số  
standalone (liên kết vi tài liu xml khác).  
o Thchthxlý: Mô tmt sthông tin cho tài liệu XML nhưng có  
ý nghĩa riêng đi vi mt vài công cxlý nàođó. C ấu trúc: <?  
Bo_Xu_Ly_Du_Lieu >  
Ví d: <?xml-stylesheet type=“text/css” href=“a.css” ?>  
Định dng thhin tài liu XML với “chương trình đ ịnh dng”  
theo ngôn ngữ CSS được lưu trữ bên trong tp tin a.css. Thnày  
có ý nghĩa với mt strình duyệt như IE5, Netscape.  
o Thghi chú: Không ảnh hưởng đến tài liu XML.  
20  
   
Cu trúc: <-- Ni dung ghi chú -->  
o ThCDATA: Yêu cu các bphân tích tài liu XML bqua không  
phân tích vào ni dung bên trong ca thnày. Mục đích chính của thẻ  
này là cho phép sdng trc tiếp bên trong thmt ský hiu không  
được phép sdng bên ngoài. Ví dcác ký t‘<’, ‘>’.  
Cu trúc: <![CDATA [Ni dung]]>.  
o Thkhai báo thc th: cho phép tài liu XML tham chiếu đến mt  
tp hp các giá trị đã chun bị trước dưới dng mt tên gi nh(tên  
thc th).  
Khai báo: <!DOCTYPE Ten_goc[  
Khai báo thc thtên X  
Khai báo thc thtên Y]  
o Thkhai báo cu trúc.  
Các thẻ XML không được định nghĩa trước trong cú pháp XML, người sdng  
có thtự định nghĩa theo các thẻ theo ý thích khi sdng XML. XML sdng DTD  
hoặc XML schema để mô tdliu. XML biu din dliu bng cách sdng các  
thành phần XML, trong đó chứa mt trong các thành phần sau đây:  
- Thbắt đầu: Cha tên ca thành phn.  
- XML attributes: Các thuc tính, mi thuc tính có tên và giá trị  
- Ni dung: Có thcha một đoạn văn bản hoc thuc tính, cũng có th ể  
cha chai.  
- Thkết thúc, ging vi tên ca thbắt đầu.  
Ví dvmt tài liu XML:  
<?xml version="1.0" encoding="UTF-8"?>  
<edge type="directed ">  
<from id="n1"/>  
<to id="n2"/>  
</edge>  
<comment> An edge of one graph</comment>  
Có 6 thành phn XML trong tài liệu này. Đầu tiên là chthxlý, Phn tedge  
cha thuc tính có tên là type và giá trdirected. Phn tedge cha hai phn tcon  
from to chúng có hai thuc tính là id. Phn tcomment cha ni dung là mt  
đoạn văn bản (text).  
XML đã trthành mt công crt mạnh và đơn giản để lưu trữ dliu trên các  
file. Nó cho phép bạn lưu trữ dliu theo mu và có thtruy xuất được bng các ng  
21  
dụng khác nhau, nhưng nó không thể to ra dliu. Bng cách sdng các API như  
DOM, SAX, bn có thtruy xut dliu tmt tài liu XML rt ddàng.  
3.2.2 XML DOM  
3.2.2.1 DOM  
“The W3C Document Object Model (DOM) is a platform and language-neutral  
interfacethat allows programs and scripts to dynamically access and update the  
content, structure, and style of a document” [http://www.w3.org/].  
DOM gm ba phn riêng bit:  
- Core DOM: Định nghĩa các đối tượng chun cho các tài liu có cu trúc.  
- XML DOM: Định nghĩa tập hợp các đối tượng chun cho tài liu XML  
- HTML DOM: Định nghĩa tập các đối tượng chun cho tài liu HTML.  
3.2.2.2 XML DOM  
XML DOM định nghĩa các đối tượng và thuc tính ca tt ccác thca tài liu  
XML và các phương thức (giao diện) để truy xut chúng. Nó là mt chuẩn để truy  
xut, thêm, xóa, sa các thXML.  
Trong DOM, mi thtrong tài liệu đều là nút (node):  
- Toàn btài liu là mt nút tài liu (document node) – cây node  
o Mt cây gm nhiu node.  
o Node cao nht gi là root.  
o Mi node, trroot ra có chính xác mt node cha.  
o Mt node có nhiu node con.  
o Node lá là node không có node con.  
- Mi thXML là mt nút th(element node).  
- Text trong các thXML là nút text (text node).  
- Mi thuc tính là nút thuc tính (attribute node).  
- Ghi chú là nút ghi chú (comment node).  
3.2.2.3 XML DOM Parser  
Để đọc, cp nht và thao tác trên mt tài liu XML ta cn mt XML Parser. Có  
nhiu XML Parser được htrtrong hu hết các ngôn ng(Java, .Net…). Parser np  
tài liu XML vào trong bnhcủa máy tính và được xem dưới dng cây node. Sau đó  
dliu sẽ được thao tác và xlý thông qua tp hàm XML DOM API.  
22  
 

Tải về để xem bản đầy đủ

pdf 93 trang yennguyen 24/05/2025 120
Bạn đang xem 30 trang mẫu của tài liệu "Khóa luận Kiểm chứng đặt tả UML cho tác tử phần mềm", để 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:

  • pdfkhoa_luan_kiem_chung_dat_ta_uml_cho_tac_tu_phan_mem.pdf