Professional Documents
Culture Documents
ti: Refactoring
: Khoa hc my tnh
Kho
: 52
SHSV
: 20071946
Mc lc
Chng 1. Gii thiu..........................................................................................................4
Chng 2. Cc nguyn l v refactoring............................................................................5
2.1. nh ngha refactoring............................................................................................5
2.2. Hai chic m............................................................................................................5
2.3. Ti sao cn refactor?...............................................................................................6
2.3.1. Refactoring gip ci thin thit k...................................................................6
2.3.2. Refactoring gip phn mm d hiu hn.........................................................6
2.3.3. Refactoring gip bn lp trnh nhanh hn........................................................6
2.4. Khi no nn refactor?..............................................................................................7
2.4.1. Nguyn tc 3 ln...............................................................................................7
2.4.2. Refactor khi thm chc nng...........................................................................7
2.4.3. Refactor khi sa li..........................................................................................7
2.4.4. Refactor khi xem li m ngun (code review).................................................7
2.5. Cc vn khi refactor............................................................................................7
2.5.1. C s d liu....................................................................................................7
2.5.2. Thay i giao din............................................................................................8
2.6. Refactoring vi thit k...........................................................................................8
2.7. Refactoring vi hiu nng.......................................................................................9
Chng 3. Nhn bit m ngun cn refactor...................................................................10
3.1. Trng lp m.........................................................................................................10
3.2. Phng thc di....................................................................................................10
3.3. Lp ln..................................................................................................................11
Chng 4. Xy dng b kim th....................................................................................12
4.1. Gi tr ca m kim th.........................................................................................12
Chng 5. Cc phng php refactor..............................................................................13
5.1. nh dng ca cc phng php refactor..............................................................13
5.2. Trch phng thc.................................................................................................13
5.2.1. Tm tt...........................................................................................................13
5.2.2. ng c..........................................................................................................14
5.2.3. V d: Khng c bin ni b..........................................................................14
5.2.4. V d: C s dng bin ni b.......................................................................15
5.2.5. V d: Gn li mt bin ni b.......................................................................16
5.3. Nhp phng thc (Inline method).......................................................................17
5.3.1. Tm tt...........................................................................................................17
5.3.2. ng c..........................................................................................................18
5.4. Nhp bin tm.......................................................................................................18
5.4.1. Tm tt...........................................................................................................18
5.4.2. ng c..........................................................................................................19
5.5. Di chuyn phng thc.........................................................................................19
5.5.1. Tm tt...........................................................................................................19
5.5.2. ng c..........................................................................................................19
5.5.3. V d...............................................................................................................19
Chng 6. Cc cng c refactor.......................................................................................21
6.1. Refactor bng cng c...........................................................................................21
6.2. Refactor m ngun Java bng Eclipse...................................................................21
6.2.1. Thc n refactor...........................................................................................21
6.2.2. i tn............................................................................................................22
6.2.3. Trch phng thc..........................................................................................23
6.2.4. Nhp phng thc..........................................................................................23
6.2.5. Nhp bin tm................................................................................................24
6.2.6. Di chuyn phng thc..................................................................................24
Ph lc A. Ti liu tham kho..........................................................................................26
Ph lc B. Danh sch bad smells in code.....................................................................27
Ph lc C. Danh sch cc phng php refactor..............................................................28
Ph lc D. Cc cng c refactor m ngun Java trong Eclipse Helios............................31
nh ngha refactoring
Hai chic m
Kent Beck s dng hnh nh hai chic m ch qu trnh pht trin phn mm c
refactor. Bn chia thi gian ra thnh hai hot ng tch bit: thm chc nng v refactor.
Khi thm chc nng, bn khng nn thay i nhng on m c, bn ch thm vo
nhng kh nng mi. Bn c th o tin bng cch to ra cc b test v m bo n
chy. Khi refactor, bn khng thm chc nng no m ch ti cu trc m ngun. Bn
cng khng thm b test no (tr khi pht hin ra mt b test bn b l trc ) v
ch thay i mt b test khi thc s cn thit ph hp vi s thay i ca giao din.
2.3.
2.3.1.
Ti sao cn refactor?
Refactoring gip ci thin thit k
chm li. Bn phi dnh thi gian tm v sa li thay v thm chc nng mi. Vic sa
i lu hn v bn phi c hiu h thng v tm nhng on m trng lp.
Thit k tt l iu kin cn duy tr tc pht trin phn mm v refactoring gip
bn chng li s phn r (decay) ca thit k, thm ch cn ci thin thit k na.
2.4.
2.4.1.
Khi no nn refactor?
Nguyn tc 3 ln
Refactor khi sa li
Xem li m ngun gip lan truyn kin thc trong nhm pht trin, to c hi cho cc
lp trnh vin c truyn kinh nghim cho nhng lp trnh vin mi hn. Refactor khin
ngi review khng ch tng tng ra m ngun trng ra sao vi nhng ngh ca
mnh m thc s nhn thy n. Qu trnh xem li c kt qu r rng hn, khng ch l
mt vi ngh m l nhng ngh c thc hin.
2.5.
2.5.1.
Cc vn khi refactor
C s d liu
Refactoring vi thit k
php n gin.
Nh vy refactoring dn n nhng thit k n gin hn m khng phi hy sinh s
mm do. Khi bn c mt nhn thc nht nh v nhng g c th refactor d dng,
bn thm ch khng ngh n thit k mm do na. Ch vic xy dng nhng g n
gin nht lm vic c. Hu ht thi gian bn s khng cn dng n nhng thit k
mm do v phc tp na.
2.7.
Mi quan ngi ph bin vi refactoring l lm gim hiu nng ca chng trnh. Trong
hu ht trng hp refactoring thc s lm chng trnh chm i. Tuy nhin b mt ca
nhng chng trnh chy nhanh, tr nhng trng hp cc k nghim ngt, l trc tin
n c lm d dng tinh chnh, sau mi c tinh chnh t tc mong
mun.
Mt iu th v v hiu nng l cc chng trnh thng tn nhiu thi gian nht vo
mt phn nh ca m ngun. Do vy nu bn ti u ho ton b m ngun nh nhau th
bn s lng ph 90% cng sc vo vic ti u ho nhng on m khng c chy
nhiu.
p dng nhn xt ny bn s vit nhng chng trnh tt m khng nhiu n hiu
nng. n khi bt u bc ti u ho, thng kh mun trong qu trnh pht trin, bn
bt u s dng chng trnh profiler phn tch nhng on m tn thi gian v b
nh nhiu nht. Tp trung vo nhng im nng ny, bn sa i m ngun v kim tra
s tin b v hiu nng cho n khi t c mc tiu.
Refactoring gip s ti u ho d dng hn theo hai cch. Th nht, v ci t nhanh
hn, bn c nhiu thi gian hn ti u ho. Th hai, m ngun c chia nh hn
d dng pht hin nhng im nng v d hiu hn bn ti u ho d dng.
Trng lp m
Phng thc di
Chng trnh hng i tng tt nht v sng lu nht l chng trnh c cc phng
thc ngn. Mi ngi u nhn ra rng phng thc cng di th cng kh hiu. Cc
phng thc ngn vi tn gi c t hp l c th tit kim rt nhiu thi gian v bn
khng cn c thn hm.
Trong 99% trng hp, tt c nhng g cn lm rt ngn phng thc l Trch
phng thc. Hy tm nhng phn ca phng thc kt hp c vi nhau v to ra
Lp ln
Gi tr ca m kim th
5.2.1.
Tm tt
Mt on m no c th c nhm li.
Chuyn on m thnh mt phng thc, t tn gii thch mc ch ca phng
thc .
void printOwing(double amount) {
printBanner();
//print details
System.out.println ("name:" + _name);
System.out.println ("amount" + amount);
}
Chuyn thnh:
void printOwing(double amount) {
printBanner();
printDetails(amount);
}
void printDetails (double amount) {
System.out.println ("name:" + _name);
System.out.println ("amount" + amount);
}
5.2.2.
ng c
V d: Khng c bin ni b
void printOwing() {
Enumeration e = _orders.elements();
double outstanding = 0.0;
// print banner
System.out.println ("**************************");
System.out.println ("***** Customer Owes ******");
System.out.println ("**************************");
// calculate outstanding
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}
//print details
System.out.println ("name:" + _name);
System.out.println ("amount" + outstanding);
}
Ta trch ra on m in banner:
void printOwing() {
Enumeration e = _orders.elements();
double outstanding = 0.0;
printBanner();
// calculate outstanding
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}
//print details
System.out.println ("name:" + _name);
System.out.println ("amount" + outstanding);
}
void printBanner() {
// print banner
System.out.println ("**************************");
System.out.println ("***** Customer Owes ******");
System.out.println ("**************************");
}
5.2.4.
V d: C s dng bin ni b
V d: Gn li mt bin ni b
// calculate outstanding
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}
printDetails(outstanding);
}
Sau khi trch:
void printOwing() {
printBanner();
double outstanding = getOutstanding();
printDetails(outstanding);
}
double getOutstanding() {
Enumeration e = _orders.elements();
double outstanding = 0.0;
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}
return outstanding;
}
5.3.
5.3.1.
Tm tt
ng c
Nhp bin tm
Tm tt
5.4.2.
ng c
5.5.1.
Tm tt
ng c
V d
Refactor s dng cng c hiu qu hn nhiu so vi refactor bng tay. Ngay c khi bn
c bo him bng b kim th, refactor bng tay vn tn thi gian hn rt nhiu.
Vi s h tr ngy cng cao ca cc cng c, refactoring ngy cng t tch ri khi lp
trnh. Chng ta s khng ni by gi ti ang lp trnh v by gi ti ang refactor
na m ch ni Trch phn ny ca phng thc, y n ln lp cha sau gi phng
thc mi va to trong lp con m ti ang lm vic. V bn khng kim th sau cc
thao tc refactor t ng ho nn vic chuyn i gia hai chic m tr nn t r rng
hn nhiu.
6.2.
Thc n refactor
Ti v tr ang son tho, nhn phi chut v chn refactor hoc s dng t hp phm
Alt-Shift-T, bn s nhn c mt thc n nhng thao tc refactor kh d. Danh sch
ny tu thuc vo ni bn t con tr nn n c th khng cho thy ht nhng kh nng
ca Eclipse.
6.2.2.
i tn
y l thao tc hay dng nht. Khi t con tr tn mt lp, bin hay phng thc v
nhn t hp phm Alt-Shift-R, tn c chn s c nh du tt c nhng ni n
xut hin trong ca s son tho hin thi. Khi bn hy nhp tn mi bn mong
mun v nhn enter. Tt c nhng tham chiu n i tng c trong v ngoi ca s
hin thi u c i theo.
6.2.3.
6.2.4.
Trong khi con tr ang t tn mt phng thc, s dng t hp phm Alt-Shift-I hoc
kch hot thc n refactor v chn Inline.
6.2.5.
Nhp bin tm
Trong khi con tr t tn mt bin, nhn t hp phm Alt-Shift-I hoc kch hot thc
n refactor > Inline...
6.2.6.
Trong khi con tr t tn m phng thc, nhn t hp phm Alt-Shift-V hoc kch
hot thc n refactor, chn Move...
M ngun trng lp
2.
Phng thc di
3.
Lp ln
4.
5.
Thay i bt ng
6.
Shotgun surgery
7.
Feature envy
8.
Data clumps
9.
10.
Cu lnh switch
11.
12.
Lp li bing
13.
14.
Trng tm
15.
Chui thng ip
16.
Trung gian
17.
18.
19.
Lp th vin khng y
20.
Lp d liu
21.
Ca tha k b t chi
22.
Ch thch
1.1.
1.2.
1.3.
Nhp bin tm
1.4.
1.5.
1.6.
Tch bin tm
1.7.
B cc php gn tham s
1.8.
1.9.
2.
2.1.
2.2.
Di chuyn trng
2.3.
Trch lp
2.4.
B lp
2.5.
Giu delegate
2.6.
Xo lp trung gian
2.7.
2.8.
To phn m rng ni b
3.
T chc d liu
3.1.
ng gi trng ni b
3.2.
3.3.
3.4.
3.5.
3.6.
Nhn bn d liu
3.7.
3.8.
3.9.
3.10.
ng gi trng
3.11.
ng gi tp hp
3.12.
3.13.
3.14.
3.15.
3.16.
4.
4.1.
Phn ly iu kin
4.2.
4.3.
Kt hp on m iu kin
4.4.
Xo c iu khin
4.5.
4.6.
4.7.
To i tng null
4.8.
To s xc nhn (assertion)
5.
Khin li gi hm n gin hn
5.1.
i tn phng thc
5.2.
Thm tham s
5.3.
Xo tham s
5.4.
5.5.
5.6.
5.7.
Gi i tng nguyn vn
5.8.
5.9.
To i tng tham s
5.10.
5.11.
5.12.
5.13.
ng gi s p kiu xung
5.14.
5.15.
6.
ng u vi s tng qut ho
6.1.
Ko ln trng
6.2.
Ko ln phng thc
6.3.
Ko ln thn hm to
6.4.
6.5.
y xung trng
6.6.
Trch lp con
6.7.
Trch lp cha
6.8.
6.9.
Thu gn cy k tha
6.10.
6.11.
6.12.
7.
Refactoring ln
7.1.
Tch i cy tha k
7.2.
7.3.
7.4.
Trch cy tha k
Rename (i tn)
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Use Supertype Where Possible (S dng lp cha, giao din khi c th)
14.
15.
16.
17.
18.
Introduce Indirection
19.
Introduce Factory
20.
21.
22.
23.