ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
KIỂM CHỨNG CÀI ĐẶT BIỂU ĐỒ TƯƠNG TÁC
VỚI UML 2.0
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành:Công nghệ phần mềm
HÀ NỘI - 2010
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
KIỂM CHỨNG CÀI ĐẶT BIỂU ĐỒ TƯƠNG TÁC
VỚI UML 2.0
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ phần mềm
HÀ NỘI - 2010
Tóm tắt
!"#$"%
&'()'(*+(!#$
%,-*"./0
1"2*3/456+7877968:
;3<-6+7=>33/$
?/@*+0"./<A
BC(D-EFGH((B?/<*IJK"+"
)L B<*M-EAB/B?-
/$ (%&1 (D*IJK"!
BN;3H((B")68"
'(B!?/M"(2?<* 1+C
6+7=%OO-/$3<O""(
N776+7%+C6+7=H1P%(
4Q1H/B$68?IJK? RJK?
6PP8F6FS8PT(L$ (%EU >
(DIJK+(+7OO-/$VW
X"-+C+7+71*--/
$ (%&E>
Mục lục
Chương 1. Mở đầu...................................................................................................................................1
1.1. Đặt vấn đề.......................................................................................................................................1
1.2. Nội dung bài toán............................................................................................................................2
1.3. Tổng quan phương pháp “kiểm chứng cài đặt biểu đồ tương tác với UML 2.0”..........................2
1.4 . Cấu trúc khóa luận.........................................................................................................................4
Chương 2. Annotaions , Aspects và UML 2.0.............................................................................................5
2.1. Annotations.....................................................................................................................................5
2.2. Aspect..............................................................................................................................................7
2.3. UML 2.0.........................................................................................................................................10
2.4. Xây dựng máy trạng thái từ biểu đồ trình tự...............................................................................16
2.5. Tổng kết chương...........................................................................................................................18
Chương 3 . Xây dựng cộng cụ tự động sinh Aspect từ máy trạng thái....................................................19
3.1. Biểu đồ trình tự và các đoạn gộp.................................................................................................20
3.2. Sinh Aspect từ biểu đồ trình tự...................................................................................................21
3.3. Kết luận.........................................................................................................................................23
Chương 4. Thực nghiệm.........................................................................................................................23
4.1. Xây dựng công cụ ........................................................................................................................24
4.2. Kiểm chứng một số giao thức thực tế.........................................................................................27
4.3. Kết luận.........................................................................................................................................44
Chương 5. Kết luận.................................................................................................................................45
Phụ lục .......................................................................................................................................................47
Phụ lục A : Tài liệu XMI mô tả biểu đồ trình tự.....................................................................................47
Danh mục các ký hiệu, từ viết tắt
Từ viết tắc Diễn giải
AOP 6+79877
FSM Y7T7J7
OOP 8 Z7877
XML 7R7+ "7J/(K(7
XMI RJKJ7S77
UML I[7J7""(7
Chương 1. Mở đầu
1.1. Đặt vấn đề
P<-<C$O!"W
>+EC%?G&$O1!B$O$?G&
$O*B$OL$"3(MU+\<
-<NMMMC"L-C%?@
""H%3J%'()QN<-<"N<-
]N;3+ 2Q<-$C.
N<-
^-?"+\4Q<-<?'(
*"<>'('(*HU_(*
"(`(2H((?4?B/B??/
?/ *aE3?- !"Q
"<;'()bM?!U"/?c+0
".+'(*+(!?M"<-Q
/d--".(%*2('("3?E(
><+$+0".?24M" %-EG(?
M/! N4*21-
".+3(<+$+0e>a--&".
?/$5d7[:\c5d":fgh
#$"/7BMB/Bee
U/<H((/<F\c"M+.Q
/,/7M$H((Q)/<
JO44Q/$""(+E".
MUB$!!M!2N4*2?MMi
<;'() %'(*j
-PM(eE'(Q(H$(
k/0MO4/4elQ+
?/7M$(( U/<FB?
/01c<>%2/0(
1
(1$b2?m/4e+Q((Q
1*?/</'(*%(1*M7e
U (/<d-/</e1*"3
1.2. Nội dung bài toán
#$"%<;'()'(*
d*2M!(1/$
"2/$<*F3/M"(2?<(E2B
1 /$ H1"2 * 3/4
568:NO "/$U%QE
=/0>
FB2?%$O3EU ,<
*IJKU ,<&=`T(/6+7+?e+
7C=/>nM-O
6+7G (D(?;6+7=6+7/(
1*4#1*?6+7+%/U
$< ".B(M !/o+
P-O4Q "1C6+7
/$<OPlugin Protocol Verification Generator %+
6+7/$U$ , (D(IJK
1.3. Tổng quan phương pháp “kiểm chứng cài đặt biểu đồ tương tác với UML 2.0”
F /M"(2p#SqJ N^rPk asN Ft IJK N^8 FuN Fv ^wJ
JxJyfzhC* 1/$UIJK0?
/M"(2C14/$%+E$
56n:
f6{nh
P/M"(2M?'(B%+E!`
9 J3mGA/%+E$1
9 NmM/ (D>?U (D767
IJKaE3?$< ,IJKzA"H*<O/<
-
2
9 d-%+6+7+-6+7+
+(M"("a+0O6+7*MZ7
B
9 6+7+MZ7F$"? !/o"3M
%1$<A(*(c(OQ6+9
7a(?(/H".
9 F"-(RJS(Q<OC()m$
B
G/M"(2H?<C'(B!H6+7
+BlZ7;H3["7k$/$
aB/B7IJKz|?N(/-"U?")+0O<%
%"?"6+7+M +/%1$
>;!(
b+/(&<IJKz|3?H!(e"(&
j6+7+j/(+3A<OdkG<O
dk<CL(;3U$ ,IJKz|
n l(3("% (L(IJKz|? (D
,<O6"I7"z|}|U6"I7"z|}|"(?
(D+(!3RJST(M?"!<B
EQ (D(%5YTJ:K2*H+
<9(-O4G (D (Di"T+
3M"'(*6+7Gn pChecking Interface
Interaction Protocols Using Aspect-Oriented Programmingyf~hC1
/$$+0O68b <<O
%+6+73(""-(RJS< (D(IJKz|1
<OPlugin Protocol Verification Generator(PPVGQ<D
3
− n3}`4"-(RJS?"!<B
− n3z`R %%+6+7GYTJ`T0OYTJG
+GH?(-GYTJ?O1U6+9
3
7 MH?<Z9?(7G
M*H<9(6+7
1.4 . Cấu trúc khóa luận
Ni"Q/M"(2!(e+(`
Chương 23-(+?6+7=?68?IJKz?
F1<* /B$1 +0O/M"(2Q<
1
Chương 3<O+6+7G< (D*IJK
Chương 4U<O%+6+7B/$%+E
$
Chương 5/B"(2Q/M"(23H$(1"
4
Chương 2. Annotaions , Aspects và UML 2.0
2.1. Annotations
NM"/-6+-(> BB?*2A
<+* l)/-1 U4QQ
6+
2.1.1. Khái niệm annotaions
6+
}
3H("%7J7"U&
"-(%E?c*MN•2~??U% B
MM7cRJK"€TTaU&"-("%2c$&
<l)?1 <EMN•?3% *
7M D`H+W* ?H+W? "(?
J7/<"•+H(&"-(•%+E>GcGB6+
Bd-
2.1.2. Ưu điểm của annotations
6+"%/‚(23)?$ƒ"("4
-?3"%+E"4Q+
− F>`P*"3H M!„O4
− a1
− F!(".>`"2*?e>
!+".>K. A/( Hc>4(
'(BM A"2*H".>"
&"./Mc(?/M/@?!(>*(H69
+"%\".e'(*!(*Q/( Hc
PW" HcM "2*H%+E!(*+"e
cPB(;1">e4?(%4URJK*
".m > Ae1("&"-(@
− rO1`d-;cRJKeE
>? %3(LGRJK+EM6SX
1"-b8JUT6Rj"%Ab;6+*…
!(
1
`††Z+(†+† /+†("†Z†Z88†+"
5
2.1.3. Cấu trúc annotaions
J%+cW+(`
@interface tên_annotations {
// các các thành phần
}
N+"+ B+EQM
F<>+;%e4
1*"++? B+E?1$?UM/" !/o%i"-
ae%MQ1**+H
3Mac+(`
‡Hˆ+5‰+E+EŠ:FHˆˆ
d4O`+0O+1$
@Override
public String toString()‹
return super.toString() +"Testing annotation name: 'Over-
ride'";
}
6+Hc+0O,/•c1$T
Œ"H1$Q"3
2.1.4. Target annotions
6+!?M!("+?<m2B
F7+*"+<;/M"(2T(?<+*
"+
F7+e4/(M43""++nD"
− ‡F75•"77F7FŽ•:•uO !/oB(EQ"++
− ‡F75•"77F7YS•Kb:•NMO"W(%
4
− ‡F75•"77F7J•F^8b:•NMO$%7
6
− ‡F75•"77F76€6J•F•€:•u O < +E Q
7+
− ‡F75•"77F7N8PTF€INF8€:•uO+(+
− ‡F75•"77F7K8N6Kˆd6€S6nK•:•u O B c
1
− ‡F75•"77F76PP8F6FS8PˆFŽ•:•K*(H E"%e
4
d4O`
@Target(ElementType.METHOD)
public @interface Test_Target {
public String dosomething();
}
6+HcWe1$?3
4"+75:a+0O+*HM31$
d4O`
@Test_Target(“test”)
Public void test(){
// do something
}
aE3+?B(McW;"E
*MmMe"EMP+A4OH?Mm
MeE"%1$PB(+0OMe%"++
U% B*+2".
2.2. Aspect
2.2.1. Lập trình hướng khía cạnh AOP
d
•
H
‘
<
•
"
’
(
“
68"
‘
7
•
(
•
”
H
”
•
•
H
‘
H H
”
<
”
•
"
”
‘
/H
•
1
”
(
•
"
”
H
“
”
HH
”
<
•
+((
‘
68 <
“
+(/
’
(
”
"
”
•
‘
1
•
<
•
1
”
@
‘
H
”
<’1
”
<
”
”
<9(/
•
?7
•
/7
•
7
H
“
H
”
((
“
•
H
‘
(
‘
<
”
/<
•
#<
•
‘
1
”
”
"
‘
–6+7—5
”
”
"
‘
–"
•
—˜
‘
•
"
•
@
•
'(H
‘
("1
•
<
•
1
”
:?
‘
’
–6+7—
‘
(
•
•
H(
“
1
•
•
H
“
‘
H
‘
1
•
`6+7977P1
‘
’
1
”
•
H?
•
H
‘
(1
“
HH’/H
“
+
•
1N
•
6+7(
“
H
”
<
•
•
H
“
<
“
?H@
”
•
"(
•
H
”
‘
•
H
“
•
+
“
(
”
J<
”
”
H
”
@
”
H
”
•
H"
‘
6+7™77
”
H
”
/H
•
1
”
•
‘
‘
H"7
“
"
”
‘
H
”
<
•
1
”
•
68D~ 3`
− •
•
•
H(
‘
(H
“
•
”
•
H
‘
(
‘
•
H
‘
(
− R
”
H
“
H
”
‘
•
H
‘
H H
”
− F<
“
1
”
•
H
“
H
”
F* Hc68-7 3`
− #H
•
1
”
•
‘
H"7
“
− N(H
“
<
“
</H
•
'(
“
+
”
’
”
N(Q68fšh`
− J<(
•
’
•
H
‘
(`68
•
”
•
•
H
‘
<
”
•
•
H
”
”
H
•
<
•
H
“
(H
”
”
@
‘
’
?7
•
<(
•
“
•
H
‘
"H'(H
•
H
‘
("1
•
<
•
1
”
− bH’
‘
•
H
“
H
”
<
•
`dH
”
H
•
@1
•
•
H
“
”
H
”
H’
‘
@
‘
•
”
6+71
•
‘
/<
‘
'(H
•
•
H
‘
(#H
•
<(1
•
‘
H
”
<
•
?
•
6+7H
”
•
+7
’
/H
•
1
•
(
•
‘
”
H+
”
•
H
“
@
”
7
’
− N7
•
H
“
"
”
'(H
•
”
H
•
/H
•
1"`J<
”
H
•
/H
•
<
•
“
•
•
H
•
“
H(
‘
(H
”
”
‘
1"?H
”
•
”
H(
‘
(1""
‘
<
”
<H
”
/
•
/@PH
•
(
“
+
•
’
H(
‘
(1"
•
H
“
”
+7
’
“
<
“
”
H
”
"
”
H
‘
(
‘
H
”
<
•
d1
•
68?1
‘
H
•
/H
•
H
”
<
•
•
H
“
H
“
"
”
•
'(H
•
”
H
•
/H
•
’
H(
‘
(1"1
‘
”
H
”
7
− F
•
+
“
(
”
’
<
•
1`N
•
6+7"
‘
’
<(H H
”
?1
”
/H
•
1
”
"<
”
˜•
•
"
‘
H
•
(<
•
'(
”
H
“
•
+
“
(
”
’
687
•
•
+
“
(
”
’
<
•
188
8
2.2.2. AspectJ
6+7="%A%Q"2*3/468e-)
$O=H68XM6+7=e-
<9(M!'(-$OX1"`
/0"›".?D %M?E(M-('(?7„?*".
6+7=!(GZ9?(?7fœh
=+"cW1*?ZM"%">)?
/A%"3?/A%EP>Z9+Mc
$@l-EH=9M"4+(`
− =9/A
− =9(2(%4
− =9(2"-
("2Z +0OcW7
(+)%ZM&Z9MNeQ
(+(`
f7+++7[7h((975f+h:`(97[•
d4O`
public pointcut test() : call(String Start()) || call(boolean end());
JCAGZ9)7NM("7` 7[7
93Z9?[79+(MP?67"C+
-%Z9) A%(
67""+(`
− n7[7`a-3Z9
− 6(`a-+(Z9
− 6[[7`a-+(Z9
6+7=gM(A%1+36+7=3M?%
ž 2"MM+0O+=g%Z9F<>
+>cW%7+F7
+McW"3?1$U%
/F/M"(2Q<?<+0O+cW1$
9
d3%+cW1$PM+e3%
1$M#M6+7+cW1$M3+(`
‡FHˆ+FHˆ1ˆ$5+E+E:
d4O`
pointcut test() : call(@Implement * m());
d4OH?(/4/%3$5: e A
+‡S"77)
2.3. UML 2.0
2.3.1. khái niệm về UML
IJK5I[7J7"K(7:"%<&(\-OM?
'(M?"-(%-E?j<
*-&-E/IJKH(%"/‚(2<
-E!C/$<(-E"3$
IJK"%'()-3E
'(*IJK+0O(B/›-(D)<
B/BQT0OIJK+eMM
XB?/&@B/B?H(\B/B/Be
Q
P&O44-B/BQIJK"`
− N(!>;3%"-()+0O?M›W%
<&<*'(?*2)ML<*M›
W
− N(!1BU/@A%A%/-E"„
− #<O(%<&"2*O'(*
− N(!%1+A4$-(&<&<*M
− k@+Qc><O3E
− ^.+A$1/-"" +?[79
Ÿ/+?7+7+
− F4BE!
IJKz|3(L-< (Dd3
+A%<%"??"]"(
10
-">+0Ob3?<+<%+E (D
*IJKz|
2.3.2. Biểu đồ trình tự UML
J% (D*m%%%&%"E#4
'()Q (D"m*<-57++7:0
&EPMjm*1&E?(+
%>OM*Q-EN (D*
$%"E (X ,>•$FO>
M3GH(E3 (D? (Dm+L<-&
E/><'(N<- (X ,>
l"3jH5 (c<-:E"&&>•
$-EFO>;&">2 />+
"Q (Db3"%4O (D(
Hình 2.3.2a: Quá trình đăng nhập ATM
FB7?<+3-(Q (D(IJKz|
I"z|CM+L/$ (X (D(a(H"
11
e4 (D?UHe4%/(?
/(+0O%IJKz|f}hJ%/((
!%3 (D?cc4E'(-Q
(Db3?"</(
Hình 2.3.2b mô tả một khung cơ bản
d3 (D(?M!}z"%cW`"?? 7/?
?+7'?+?7?"?7?+7?++7?"PHBmMš
"+0OQB(M"`"??" 7/T(<+* š
"
2.3.2.1. Alt
JO4"*/B+")LMB"¡(&
U(*<-N+B +<*ML5[
7"+7:pB(*y54O`B(<( $*<}g¢•U<
}|¢:
12
^*z~z} (D*+0O"
2.3.2.2. Opt
J/B5+;):+0O<*%*+?
+0(/-!c•B(/<*+/<T;)
+0O<%-1p[7y5B(*:54O`B(M41g
H *Hz &:
Ne4Q/B;)1E3/BB?G
MmM%/< iMp7"+7y
13
Hình 2.3.2.2 biểu đồ dùng opt
2.3.2.3. Loop
a</ +%*"U"U"FIJKz|<*M%
(D"U"U"CB;3(/-Q/Bi"U
14
Hình 2.3.2.3 biểu đồ sử dụng loop
2.3.2.4 . Break
N/( 7/;<O<*MG+/+
Hình 2.3.2.4 Biểu đồ sử dụng break
15
d34OH?//(/- "7‰("+*-
4+(Q% 7/P"?B((/-"e*% 7/
-/<-% 7/-B*<
-/ H/<-&
2.4. Xây dựng máy trạng thái từ biểu đồ trình tự
2.4.1. Cấu trúc dữ liệu mô tả biểu đồ trình tự
J% (D*D(?MM'(
)>+E?<-L&>+E?%?
]/H( (D*<+(`
− FH"3C(D1*1$3H%>+E
− N<-L&>+E<Q
%1$"31$AC(D1*J%1$
H?c?++E
Hình 3.1.1 : Altova Umodel mô tả thành phần trong biểu đồ trình tự.
a25YTJ:(HM!((&"-(<
(D*^'()">+E<
-L&>+E
n,-4"-(RJS?"3<>+E<-
&>+EUK3K[7K7<%>+E
class Lifeline {
private String id, className, name;
private boolean isMultiObject;
16
String objectName;
/////
}
F"-(RJS?%>+EcW£"[7"7MM
'()`
9 BQ>+E
9 7<HQ>+E
aE31$L&>+EU<'("3J7++7
K3U+(`
public class Message implements Comparable<Message>{
private String id, name;
private String sendEventId, receiveEventId;
String className;
Lifeline from, to;
String sourceState, targetState;
//////////
}
F"-(RJS?<<-U£7++7?3%
<-M4+(`
9 <Q<-
9 7<HQ<-
9 +7•7S<(D?1 l(<-
9 777•7S<1BQ<-
9 [<- l(DG>+E
9 F<-/BeA>+E
9 +(7T7 B l(Q<-
9 7T7 B/BeQ<-
17
2.4.2. Xây dựng máy trạng thái(FSM)
F (D*?<-/B(?e<$
)Q<-d-<Q<
(F?(4"<
-bM?+<$3+(Q<
-bM?+D&"-(+(`
− +7++Q
− 77++<-
− [+T7(HQ
− "+T7+2(EQ
F(2`
nzšz`F(2fzh
Stt tên Mô tả
} ( F"-(RJS
z (( JZ+B(/<< ".
~ N 3-
1. #A [+? +7+? 77+? [+T7?
"+T7
z a)["7RJS?"!B`
<-??]
~ b(-G<-?77+
~} PB("<-(E*H
/Be"+T7+
3.2. PB("<- l(?H
(D[+T7
~~ PB("<-(?"(&
"-(
2.5. Tổng kết chương
F1?<C* %+E/-1 +?
6+7=?+6+7=?IJK? (D*IJKza"
18
/M"(2Q<aO<O+6+7%aD><j
* (21
Chương 3. Xây dựng cộng cụ tự động sinh Aspect từ máy trạng thái
19