Commercial components (COTS) is being used more and more in Component-Based Software Engineering for building software applications, and accordingly, some mechanisms are demanded by deve[r]
(1)Ta.p ch´ı Tin ho.c v`a Diˆe` u khiˆe’n ho.c, T.23, S.2 (2007), 153–163
C ´AC GIA’I THU ˆA T T`IM KIˆE´M V `A LU A CHO N THANH PH ˆ` `AN COTS T ˆO´I U.U THEO C ´AC TIˆEU CH´I GI ´A TH `ANH V `A DU.TH `U.A D ˜U.LIˆE U
HU `YNH QUYˆE´T TH˘A´NG1, PHA.M THI QU`YNH2
1Khoa CNTT, Tru.`o.ng DHBK H`a Nˆo.i 2Khoa CNTT, Tru.`o.ng DHSP H`a Nˆo.i
Abstract Component-based software development is gaining recognition as the key technology for the construction of high-quality, evolvable and large software systems in timely and affordable man-ners Commercial components (COTS) is being used more and more in Component-Based Software Engineering for building software applications, and accordingly, some mechanisms are demanded by developers of software applications to describe, search, select and compose COTS components In this paper we presented two algorithms applied to select COTS components witth optimization of cost and data redunancy (size) The proposed algorithms are realized based on NET platform and experimented on case study Geographic Translator Service The comparison between proposed and original algorithm also is presented
T´om t˘a´t Ph´at triˆe’n phˆ` n mˆea ` m hu.´o.ng th`anh phˆa` n (ComponentBased Software Development -CBSD) l`a mˆo.t nh˜u.ng k˜y thuˆa.t tiˆeu biˆe’u xˆay du ng c´ac phˆa` n mˆe` m l´o.n, ph´u.c ta.p, gi´up gia’m th`o.i gian, cˆong s´u.c v`a gi´a th`anh xˆay du. ng phˆ` n mˆea ` m C´ac th`anh phˆa` n thu.o.ng ma.i (COTS) dang du.o c su.’ du.ng ng`ay c`ang nhiˆe` u cˆong nghˆe phˆa`n mˆe` m du a th`anh phˆa`n dˆe’ xˆay du ng c´ac ´u.ng du.ng phˆa` n mˆe` m, v`a d´o c´ac nh`a ph´at triˆe’n ´u.ng du.ng d˜a yˆeu cˆa`u mˆo.t sˆo´ co chˆe´ dˆe’ mˆo ta’, t`ım kiˆe´m, lu. a cho.n v`a xˆay du. ng c´ac th`anh phˆ` n COTS Trong b`ai b´ao n`ay ch´ung tˆoi tr`ınh b`ay gia’i thuˆa.t lu aa cho.n c´ac th`anh phˆa` n COTS tˆo´i u.u theo du th`u.a d˜u liˆe.u (k´ıch thu.´o.c) v`a gi´a th`anh, dˆe’ t´ıch ho p phˆ` n mˆea ` m cˆa` n xˆay du ng Thuˆa.t to´an dˆe` xuˆa´t c´o dˆo ph´u.c ta.p chˆa´p nhˆa.n du.o c C´ac thu.’ nghiˆe.m du.o c thu c hiˆe.n trˆen mˆo.t b`ai to´an cu thˆe’: Thiˆe´t kˆe´ di.ch vu chuyˆe’n dˆo’i khuˆon da.ng c´ac a’nh khˆong gian
1 MO’ D ˆ ` UA
Ph´at triˆe’n phˆa` n mˆe` m du a th`anh phˆa`n (CBSD) cho ph´ep ngu.`o.i ph´at triˆe’n ta.o nh˜u.ng ´
u.ng du.ng d`ung mˆo.t phˆa` n phˆa` n mˆe` m du.o c go.i l`a c´ac th`anh phˆa`n Th`anh phˆa`n phˆa`n mˆe` m l`a mˆo.t do.n vi cˆa´u th`anh v´o.i giao diˆe.n du.o c tho’a thuˆa.n tru.´o.c v`a chı’ phu thuˆo.c du.´o.i g´oc dˆo nˆo.i dung d˜a r˜o r`ang, ch´ung c´o kha’ n˘ang liˆen kˆe´t, tu.o.ng t´ac v´o.i h`ınh th`anh nˆen mˆo.t hˆe thˆo´ng m´o.i Th`anh phˆa` n phˆa` n mˆe` m c´o thˆe’ du.o c triˆe’n khai mˆo.t c´ach dˆo.c lˆa.p COTS l`a mˆo.t th`anh phˆa` n phˆa` n mˆe` m mang t´ınh thu.o.ng ma.i (c´o thˆe’ du.o c cˆa´p giˆa´y ph´ep, ho˘a.c du.o c b´an) cho ph´ep d´ong g´oi, phˆan phˆo´i, lu.u gi˜u., su.’ a ch˜u.a v`a tu`y biˆe´n theo ´y ngu.`o.i su.’ d`ung, nh˜u.ng th`anh phˆa` n n`ay thu.`o.ng l´o.n v`a du.o c lu.u tr˜u c´ac kho phˆa`n mˆe`m.
(2)154 HU `YNH QUYˆE´T TH˘A´NG, PHA.M THI QU`YNH
nhu hˆe diˆe` u h`anh, co so.’ d˜u liˆe.u, hˆe thˆo´ng tin nh˘a´n, thu diˆe.n tu.’, GIS, GUI builders C´ac sa’n phˆa’m n`ay gˆo`m c´ac ´u.ng du.ng v`a c´ac th`anh phˆa` n ho`an thiˆe.n v`a d˜a c´o m˘a.t trˆen thi tru.`o.ng CNTT Sˆo´ lu.o ng c´ac th`anh phˆa` n COTS dang tiˆe´p tu.c gia t˘ang, chˆa´t lu.o ng c˜ung nhu kha’ n˘ang ´u.ng du.ng cu’a n´o ng`ay c`ang du.o c ca’i thiˆe.n Ho.n n˜u.a, ph´at triˆe’n phˆa` n mˆe` m du a trˆen c´ac th`anh phˆa` n COTS c`on cung cˆa´p kha’ n˘ang mo.’ rˆo.ng v`a biˆe´n dˆo’i c´ac ´u.ng du.ng phˆa`n mˆe`m thˆong qua c´ac h`am APIs, c´ac ngˆon ng˜u plug- ins v`a script T`u d´o, n´o c´o thˆe’ ph`u ho p v´o.i nhu cˆa` u su.’ du.ng cu’a t`u.ng mu.c d´ıch, r`ang buˆo.c kh´ac nhau.
Trong ph´at triˆe’n phˆa` n mˆe` m du a th`anh phˆa`n COTS, viˆe.c lu a cho.n th`anh phˆa`n COTS ph`u ho p l`a mˆo.t nh˜u.ng b`ai to´an rˆa´t quan tro.ng Trong b`ai b´ao n`ay ch´ung tˆoi tˆa.p trung
H`ınh Tiˆe´n tr`ınh xˆay du. ng phˆa` n mˆe` m du. a trˆen c´ac th`anh phˆa` n COTS v`ao nghiˆen c´u.u mo.’ rˆo.ng gia’i thuˆa.t lu a
cho.n c´ac tˆo’ ho p th`anh phˆa` n ´u.ng cu.’ viˆen COTS cho kiˆe´n tr´uc phˆa` n mˆe` m cˆa` n xˆay du. ng C´ac mo’ rˆo.ng gia’i thuˆa.t lu a cho.n n`ay du.o c xˆay du ng trˆen tiˆeu ch´ı: du th`u.a d˜u liˆe.u cu’a c´ac th`anh phˆa` n v`a gi´a th`anh cu’a th`anh phˆa` n ´Y tu.o.’ ng ch´ung tˆoi ´ap du.ng gia’i thuˆa.t xˆay du ng gia’i thuˆa.t lu a cho.n l`a phu.o.ng ph´ap nh´anh cˆa.n Cˆa´u tr´uc cu’a b`ai b´ao du.o. c tr`ınh b`ay nhu sau Mu.c tr`ınh b`ay vˆe` tiˆe´n tr`ınh xˆay du. ng phˆa` n mˆe` m du a th`anh phˆa`n COTS. Mu.c s˜e tr`ınh b`ay gia’i thuˆa.t COTSCon-figs v`a nh˜u.ng d´anh gi´a vˆe` c´ac kha’ n˘ang mo.’ rˆo.ng v`a tˆo´i u.u thuˆa.t to´an Tiˆe´p theo, Mu.c l`a c´ac mo.’ rˆo.ng dˆe` xuˆa´t cho thuˆa.t to´an COTSConfigs Trong Mu.c l`a c´ac mo.’ rˆo.ng thˆong tin d˘a.c ta’ COTS Doc-ument dˆe’ lu.u tr˜u gi´a th`anh th`anh phˆa` n Mu.c tr`ınh b`ay c´ac d´anh gi´a thu.’ nghiˆe.m d˜a thu. c hiˆe.n v´o.i c´ac gia’i thuˆa.t dˆe` xuˆa´t, cuˆo´i c`ung l`a kˆe´t luˆa.n v`a hu.´o.ng ph´at triˆe’n.
2 TIˆE´N TR`INH PH ´AT TRIˆE’N PH ˆA` N Mˆ` ME DU A TR EN C ´ˆ AC TH `ANH PH ˆ` N COTSA
Mˆo h`ınh tiˆe´n tr`ınh ph´at triˆe’n phˆa` n mˆe` m hu.´o.ng th`anh phˆa` n du a trˆen c´ac th`anh phˆa`n COTS, mˆo ta’ H`ınh 1, du.o. c chia th`anh ba giai doa.n ([1, 5, 6]):
Giai doa.n 1: Su.’ du.ng c´ac cˆong cu mˆo h`ınh h´oa (v´ı du UML-RT cu’a bˆo cˆong cu Rational Rose) dˆe’ mˆo ta’ v`a thiˆe´t kˆe´ kiˆe´n tr´uc phˆa` n mˆe` m Mˆa˜u d˘a.c ta’ du.o c xˆay du ng v`a tr`ınh b`ay [1, 5]
Giai doa.n 2: Su.’ du.ng mˆo.t tiˆe´n tr`ınh tu dˆo.ng dˆe’ xuˆa´t c´ac thˆong tin t`u k´y ph´ap UML - RT th`anh c´ac mˆa˜u d˘a.c ta’ XML
(3)C ´AC GIA’ I THUˆA T T`IM KI ˆE´M V`A LU..A CHO N TH `ANH PH ˆ` N COTS T ˆA O´I U.U 155
viˆen kho ch´u.a mˆa˜u XML Co so.’ cu’a tiˆe´n tr`ınh n`ay l`a gia’i thuˆa.t COTSTrader Gia’i thuˆa.t d˜a du.o c tr`ınh b`ay chi tiˆe´t [1]
Tiˆe´p theo tiˆe´n tr`ınh t`ım kiˆe´m l`a tiˆe´n tr`ınh COTSConfigs lu. a cho.n tˆo’ ho p th`anh phˆa ` n t`u danh s´ach th`anh phˆa` n ´u.ng cu.’ viˆen dˆe’ ta.o c´ac cˆa´u h`ınh tho’a m˜an kiˆe´n tr´uc phˆa`n mˆe` m yˆeu cˆa` u Trong [1, 2, 3] c˜ung tr`ınh b`ay chi tiˆe´t gia’i thuˆa.t COTSConfigs, ´ap du.ng tu tu.o.’ng v´et ca.n c´ac tru.`o.ng ho p tho’a m˜an cˆa´u h`ınh Mˆo.t sˆo´ ca’i tiˆe´n cu’a gia’i thuˆa.t n`ay c˜ung d˜a du.o c tr`ınh b`ay [5, 6]
Bu.´o.c cuˆo´i c`ung giai doa.n n`ay, tˆa´t ca’ c´ac cˆa´u h`ınh d˜a du.o c sinh, ch´ung ta thu c hiˆe.n bu.´o.c d´ong g´oi c´ac cˆa´u h`ınh dˆe’ ta.o mˆo.t ´u.ng du.ng ho`an chı’nh
Tro.ng tˆam cu’a b`ai b´ao tˆa.p trung v`ao bu.´o.c th´u hai cu’a giai doa.n - tiˆe´n tr`ınh COTSConfigs lu. a cho.n tˆo’ ho p th`anh phˆa ` n
3 THU ˆA T TOAN COTSConfigs LU´ A CHO N TOˆ’ HO P C ´AC TH `ANH PH ˆA` N COTS
3.1 Mˆo ta’ b`ai to´an
Tiˆe´n tr`ınh sinh c´ac cˆa´u h`ınh t`u tˆa.p c´ac th`anh phˆa` n ´u.ng viˆen l`a mˆo.t qu´a tr`ınh quan tro.ng to`an bˆo qu´a tr`ınh t`ım kiˆe´m c´ac th`anh phˆa` n COTS Tiˆe´n tr`ınh n`ay s˜e lu a cho.n tˆa.p c´ac th`anh phˆa` n ph`u ho p nhˆa´t v´o.i kiˆe´n tr´uc phˆa`n mˆe`m cˆa`n xˆay du ng Diˆe` u kiˆe.n ph`u ho p o.’ dˆay l`a pha’i lu. a cho.n c´ac th`anh phˆa` n cho tˆa.p di.ch vu m`a cˆa´u h`ınh d´ap ´u.ng du.o c pha’i kh´o.p v´o.i tˆa.p di.ch vu yˆeu cˆa` u cu’a kiˆe´n tr´uc phˆa` n mˆe` m cˆa` n xˆay du ng.
B`ai to´an lu. a cho.n tˆo’ ho p c´ac th`anh phˆa ` n COTS du.o c ph´at biˆe’u nhu sau ([1]): Cho mˆo.t kiˆe´n tr´uc phˆa` n mˆe` m A C´o mˆo.t kho B ch´u.a to`an bˆo c´ac th`anh phˆa`n ´u.ng viˆen COTS ph`u ho p dˆe’ lu. a cho.n t´ıch ho p v`ao A Cˆa ` n pha’i sinh c´ac cˆa´u h`ınh S l`a tˆa.p ho p cu’a c´ac th`anh phˆa`n ´
u.ng viˆen COTS c´o B, cho cˆa´u h`ınh S d´ap ´u.ng c´ac di.ch vu./ch´u.c n˘ang m`a A yˆeu cˆa` u Nhu vˆay cˆa´u h`ınh S cˆa` n d´ap ´u.ng hai diˆe` u kiˆe.n:
(i) Tˆa.p c´ac di.ch vu du.o c hˆo˜ tro bo.’i c´ac th`anh phˆa` n cu’a S pha’i tr`ung v´o.i tˆa.p c´ac di.ch vu du.o. c hˆo˜ tro bo ’ i A (t´ u.c l`a khˆong c´o c´ac lˆo˜ hˆo’ng di.ch vu.).
(ii) Khˆong c´o hai th`anh phˆa` n n`ao cu’a S cung cˆa´p c`ung mˆo.t di.ch vu chung (t´u.c l`a khˆong c´o di.ch vu tr`ung)
Sau dˆay l`a thuˆa.t to´an s˜e sinh c´ac cˆa´u h`ınh S ([1]) Gia’i thuˆa.t COTSConfigs
1 function COTSconfigs(i, Sol, S)
2 // i 6size(CB(A)) kha’o s´at qua tˆa´t ca’ c´ac kha’ n˘ang c´o kho CB(A)
(ch´u.a danh s´ach c´ac th`anh phˆa` n ´u.ng cu.’ viˆen)
3 //Sol l`a cˆa´u h`ınh ta.m hiˆe.n th`o.i dang du.o c xˆay du ng gia’i thuˆa.t //S ch´u.a du. ng tˆa.p ho p tˆa´t ca’ c´ac cˆa´u h`ınh c´o gi´a tri dˆo´i v´o .i kiˆe´n tr´uc A if i6size(CB(A)) then
6 for j:= 1to size(Ci.R) do//thu. c hiˆe.n v´o.i tˆa´t ca’ c´ac di.ch vu C1
7 // thu.’ gom di.ch vu.Ci.Ri v`aoSol
8 if {Ci.Ri} ∩Sol.R=∅then //Ci.Ri6∈Sol:R?
9 Sol:=Sol∪ {Ci.Ri}
(4)156 HU `YNH QUYˆE´T TH˘A´NG, PHA.M THI QU`YNH
11 S :=S∪ {Sol} // Nˆe´uSol l`a mˆo.t cˆa´u h`ınh, n´o s˜e du.o c gom nh´om v`ao S
12 else // nhu.ng nˆe´u vˆa˜n c`on c´ac di.ch gˆo´i v`a di.ch vu tr`ung nhau 13 configs(i, Sol, S); // t`ım Ci
14 endif
15 Sol:=Sol− {Ci.Ri}
16 endif
17 endfor
18 configs(i+ 1, Sol, S)// tiˆe´p tu.c trong CB(A)
19 endif 20 endfunction
C´ac kho.’ i ta.o cu’a gia’i thuˆa.t l`a S=;Sol=; configs (1;Sol;S) Mˆo˜i cˆa´u h`ınh (d`ong 9) dˆe` u du.o. c sinh b˘a`ng c´ach thu’ tˆa´t ca’ c´ac ´u.ng cu.’ viˆen, kˆe´t ho p dˆa`n c´ac di.ch vu. Cj.Rj c`on chu.a ch´u.a A, v`a bo’ di nh˜u.ng di.ch vu m`a A d˜a c´o rˆo`i (d`ong v`a d`ong 10) Khi gia’i thuˆa.t kˆe´t th´uc, biˆe´nS s˜e ch´u.a tˆa´t ca’ c´ac cˆa´u h`ınh cˆa` n thiˆe´t
3.2 D´anh gi´a nhˆa n x´et vˆ` gia’i thuˆe a t
Thuˆa.t to´an ´ap du.ng tu tu.o.’ng gia’i thuˆa.t quay lui dˆe’ thu c hiˆe.n qu´a tr`ınh t`ım kiˆe´m lu a cho.n c´ac cˆa´u h`ınh ho p lˆe N´o s˜e sinh t`u tˆa.p ho p c´ac ´u.ng cu.’ viˆen kho B :CB(A) =
{C1, , Ck}, v`a t`u kiˆe´n tr´uc phˆa` n mˆe` m cˆa` n xˆay du ngA, mˆo.t tˆa.pS c´ac cˆa´u h`ınh ho p lˆe (d`ong
11) Khˆong c´o tru.`o.ng ho p c´ac cˆa´u h`ınh S c`on tˆo`n ta.i c´o lˆo˜ hˆo’ng di.ch vu (mˆo.t di.ch vu. n`ao d´o khˆong du.o. c d´ap ´u.ng) hay c´ac di.ch vu chˆo`ng ch´eo Do d´o, gia’i thuˆa.t s˜e chı’ sinh nh˜u.ng cˆa´u h`ınh ho p lˆe Tuy nhiˆen, gia’i thuˆa.t n`ay c´o nhu.o c diˆe’m l`a mˆo.t gia’i thuˆa.t t`ım kiˆe´m v´et ca.n, v´o.i dˆo ph´u.c ta.p l`a O(2n
), d´onl`a sˆo´ lu.o ng c´ac di.ch vu m`a tˆa´t ca’ c´ac th`anh phˆa` n CB(A) c´o thˆe’ d´ap ´u.ng Khi d´o v´o.i mˆo.t kho c´ac th`anh phˆa` n ´u.ng viˆen l´o.n, th`ı s˜e dˆa˜n t´o.i b`ung nˆo’ tˆo’ ho p Qu´a tr`ınh t`ım kiˆe´m nhu vˆa.y s˜e khˆong kha’ thi.
4 C ´AC Dˆ` XU ˆE A´T CA’I TIˆE´N GIA’I THU ˆA T COTSCONFIGS LU A CHO N TO’ HOˆ P C AC TH `´ ANH PH ˆA` N COTS
Dˆe’ gia’m dˆo ph´u.c ta.p cu’a thuˆa.t to´an trˆen, ch´ung ta c´o thˆe’ dˆe` xuˆa´t thay b˘a`ng gia’i thuˆa.t nh´anh cˆa.n (brand and bound) Tu tu.o.’ng cu’a thuˆa.t to´an nh´anh cˆa.n l`a nh`o v`ao mˆo.t sˆo´ c´ac thˆong tin d˜a c´o dˆe’ nh˘a`m loa.i bo’ b´o.t mˆo.t sˆo´ c´ac phu.o.ng ´an ch˘a´c ch˘a´n khˆong pha’i l`a tˆo´i u.u, t´u.c l`a c´o thˆe’ lu.o c b´o.t mˆo.t sˆo´ n´ut khˆong cˆa` n thiˆe´t trˆen cˆay t`ım kiˆe´m Vˆa.y mˆo.t sˆo´ tiˆeu ch´ı c´o thˆe’ du.a v`ao dˆe’ t˘ang hiˆe.u qua’ t`ım kiˆe´m nhu.:
- Lu. a cho.n th`anh phˆa` n v´o.i du th`u.a d˜u liˆe.u l`a tˆo´i thiˆe’u. - Lu. a cho.n th`anh phˆa` n v´o.i tˆo’ng gi´a th`anh l`a tˆo´i thiˆe’u
(5)C ´AC GIA’ I THUˆA T T`IM KI ˆE´M V`A LU..A CHO N TH `ANH PH ˆ` N COTS T ˆA O´I U.U 157
h`ınh khˆong du.o. c lu a cho.n V`ı vˆa.y ch´ ung ta cˆa` n pha’i xˆay du ng gia’i thuˆa.t t`ım kiˆe´m, lu a cho.n COTSConfigs cho loa.i bo’ nh˜u.ng cˆa´u h`ınh khˆong cˆa` n thiˆe´t n`ay
Gia’i thuˆa.t nh´anh cˆa.n t`ım kiˆe´m lu a cho.n c´ac th`anh phˆa` n v´o.i du th`u.a d˜u liˆe.u l`a tˆo´i thiˆe’u du.o. c dˆe` xuˆa´t nhu sau
Gia’i thuˆa.t COTSConfigs ca’i tiˆe´n v´o.i du th`u.a d˜u liˆe.u tˆo´i thiˆe’u
1 total = numOfInterfaces(CB(A))//tˆo’ng sˆo´ di.ch vu cu’a mˆo.t cˆa´u h`ınh
2 function brandAndBound(i, Sol, S)//gia’i thuˆa.t nh´anh cˆa.n
3 if i6size(CB(A)) then
4 for j:= 1to size(Ci.R) //thu c hiˆe.n v´o.i tˆa´t ca’ c´ac di.ch vu C1
// thu.’ gom di.ch vu. Ci.Riv`aoSol
5 if {Ci.Ri} ∩Sol.R=∅ then // Ci.Ri6∈Sol:R?
6 Sol:=Sol∪ {Ci.Ri}
7 if A.R⊆Sol.Rthen //
8 if numOfInterface(S)<total then
//sˆo´ di.ch vu cu’a cˆa´u h`ınh n`ay c`on ´ıt ho.n ca’ ngu.˜o.ng(mu.c tiˆeu) nˆen //dˆay l`a mˆo.t gi´a tri cu’a ngu.˜o.ng vˆe` sˆo´ di.ch vu cu’a mˆo.t cˆa´u h`ınh m´o.i
9 total := numberOfInterface(S) // cˆa.p nhˆa.t ngu.˜o.ng m´o.i 10 S:= // x´oa c´ac kˆe´t qua’ c˜u
11 S:=S∪ {Sol}// du.a Solv`ao tˆa.p kˆe´t qua’ S 12 else if numberOfInterface(S) = total then
//tho’a m˜an ngu.˜o.ng vˆe` sˆo´ di.ch vu.
13 S:=S∪ {Sol}// du.a Solv`ao tˆa.p kˆe´t qua’ S
14 endif
15 else // nhu.ng nˆe´u vˆa˜n c`on c´ac di.ch vu gˆo´i ho˘a.c di.ch vu tr`ung nhau 16 configs(i, Sol, S)// t`ım trongCi
17 endif
18 Sol:=Sol− {Ci.Ri}
19 endif
20 endfor
21 if (numberOfInterface(S) + (n−m)×minOfInterface(CB(A))
⇐ total then
22 brandAndBound(i+ 1, Sol, S)
23 endif
24 endif
25 endfunction
(6)158 HU `YNH QUYˆE´T TH˘A´NG, PHA.M THI QU`YNH
Tu.o.ng tu. nhu gia’i thuˆa.t chuˆa’n COTSConfigs ch´ung ta c˜ung lˆa`n lu.o t thu.’ c´ac cˆa´u h`ınh (d`ong v`a 6) Ch´ung ta thˆem v`ao kiˆe’m tra xemSol c´o l`a mˆo.t cˆa´u h`ınh khˆong v`a nˆe´u d´ung, kiˆe’m tra cˆa´u h`ınh n`ay c´o tˆo´i thiˆe’u vˆe` d˜u liˆe.u khˆong (d`ong 9) Gia’ su.’ ta.i mˆo.t th`o.i diˆe’m trong qu´a tr`ınh t`ım kiˆe´m ta c´o, kiˆe´n tr´uc A cˆa` nn di.ch vu., m`a l´uc n`ay Sol d˜a tho’a m˜an du.o. c m di.ch vu cu’aA Nhu vˆa.y, c`on cˆa` nn−mdi.ch vu cu’aAn˜u.a th`ıSoltho’a m˜an l`a mˆo.t cˆa´u h`ınh. Tˆo`i nhˆa´t, l`a m−n di.ch vu n`ay n˘a`m trˆenn−m th`anh phˆa` n kh´ac Nhu vˆa.y, diˆe`u kiˆe.n dˆe’ tiˆe´p tu.c t`ım kiˆe´m l`a tˆo’ng: (sˆo´ di.ch vu hiˆe.n c´o cu’aSolcˆo.ng v´o.i(n−m) th`anh phˆa` n nhˆan v´o.i sˆo´ di.ch vu nho’ nhˆa´t c´o thˆe’ cu’a mˆo.t th`anh phˆa` n) pha’i nho’ ho.n ngu.˜o.ng tˆo’ng sˆo´ di.ch vu Nˆe´u tho’a m˜an th`ı tiˆe´p tu.c t`ım kiˆe´m, c`on khˆong th`ı d`u.ng qu´a tr`ınh t`ım kiˆe´m
4.2 Ca’i tiˆe´n gia’i thuˆa.t lu a cho.n th` anh phˆ` n v´a o.i tˆo’ng gi´a th`anh tˆo´i thiˆe’u
Nhu ta d˜a biˆe´t, c´ac th`anh phˆa` n COTS l`a c´ac th`anh phˆa` n du.o c dem thu.o.ng ma.i V`ı vˆa.y, xˆay du ng hˆe thˆo´ng phˆa` n mˆe` m su.’ du.ng c´ac th`anh phˆa`n COTS, ngo`ai yˆe´u tˆo´ k˜ı thuˆa.t l`a pha’i d´ap ´u.ng du.o. c kiˆe´n tr´uc phˆa` n mˆe` m, th`ı yˆe´u tˆo´ vˆe` m˘a.t gi´a th`anh cu’a COTS c˜ung l`a mˆo.t yˆe´u tˆo´ rˆa´t quan tro.ng Thˆong tin vˆe` gi´a th`anh cu’a th`anh phˆa` n COTS du.o c di k`em trong t`ai liˆe.u d˘a.c ta’ vˆe` th`anh phˆa` n, COTS Document V`ı vˆa.y, thuˆa.t to´an sau dˆay du.o c dˆe` xuˆa´t dˆe’ ca’i tiˆe´n thuˆa.t to´an t`ım kiˆe´m dˆe’ du.a nh˜u.ng cˆa´u h`ınh ph`u ho p dˆo`ng th`o.i pha’i tho’a m˜an mˆo.t gi´a th`anh cho tru.´o.c
Gia’i thuˆa.t COTSConfigs ca’i tiˆe´n v´o.i gi´a th`anh tˆo´i thiˆe’u total = numOfInterfaces(CB(A))
2 function brandAndBound(i, Sol, S)// gia’i thuˆa.t nh´anh cˆa.n
3 if i6size(CB(A)) then
4 for j:= tosize(Ci.R) // thu. c hiˆe.n v´o.i tˆa´t ca’ c´ac di.ch vu // thu.’ gom di.ch vu. Ci.Riv`aoSol
5 if{Ci.Ri} ∩Sol.R=∅ then //Ci.Ri6∈Sol:R?
6 Sol:=Sol∪ {Ci.Ri}
7 ifA.R⊆Sol.Rthen
8 if totalCost(S) 6maxCost then
9 S:=S∪ {Sol}// du.aSolv`ao tˆa.p kˆe´t qua’ S
10 endif
11 else // nhu.ng nˆe´u vˆa˜n c`on c´ac di.ch gˆo´i v`a di.ch vu tr `ung 12 configs(i, Sol, S)// t`ım trongCi
13 endif
14 Sol:=Sol− {Ci.Ri}
15 endif
16 endfor
17 if (totalCost(S) + (n−m)×minOfCost(CB(A))6maxCost then // nˆe´u tho’a m˜an th`ı tiˆe´p tu.c t`ım kiˆe´m, c`on khˆong th`ı thˆoi 18 brandAndBound(i+ 1, Sol, S)
19 endif
20 endif
(7)C ´AC GIA’ I THUˆA T T`IM KI ˆE´M V`A LU..A CHO N TH `ANH PH ˆ` N COTS T ˆA O´I U.U 159
Tru.´o.c tiˆen, thuˆa.t to´an yˆeu cˆa` u nhˆa.p v`ao ngu.˜o.ng gi´a cu’a mˆo.t cˆa´u h`ınh Thuˆa.t to´an s˜e thu. c hiˆe.n t`ım kiˆe´m tˆa´t ca’ c´ac cˆa´u h`ınh tho’a m˜an m`a tˆo’ng gi´a th`anh cu’a c´ac th`anh phˆa` n s˜e nho’ ho.n ngu.˜o.ng gi´a cho tru.´o.c
maxCost :=hkho.’ i ta.o mˆo.t gi´a tri ngu.˜o.ng gi´ai
Tu.o.ng tu. nhu gia’i thuˆa.t chuˆa’n COTSConfigs ch´ung ta c˜ung lˆa`n lu.o t thu.’ c´ac cˆa´u h`ınh (d`ong v`a 6) Ch´ung ta thˆem v`ao kiˆe’m tra xem Sol c´o l`a mˆo.t cˆa´u h`ınh khˆong v`a nˆe´u Sol d˜a l`a mˆo.t cˆa´u h`ınh kiˆe’m tra cˆa´u h`ınh n`ay c´o tho’a m˜an vˆe` gi´a hay khˆong
Gia’ su.’ ta.i mˆo.t th`o.i diˆe’m qu´a tr`ınh t`ım kiˆe´m ta c´o, kiˆe´n tr´uc Acˆa` n ndi.ch vu., m`a l´uc n`ay Sol d˜a tho’a m˜an du.o. cm di.ch vu cu’aA Nhu vˆa.y, c`on cˆa` nn−mdi.ch vu cu’aA n˜u.a th`ı Sol tho’a m˜an l`a mˆo.t cˆa´u h`ınh Tˆo`i nhˆa´t, l`a n−m di.ch vu n`ay n˘a`m trˆen m−n th`anh phˆa` n kh´ac Nhu vˆa.y, diˆe` u kiˆe.n dˆe’ tiˆe´p tu.c t`ım kiˆe´m l`a tˆo’ng: (gi´a th`anh hiˆe.n ta.i cu’a Sol cˆo.ng v´o.i (m−n) th`anh phˆa` n nhˆan v´o.i gi´a nho’ nhˆa´t c´o thˆe’ cu’a mˆo.t th`anh phˆa`n) pha’i nho’ ho.n ngu.˜o.ng gi´a cho tru.´o.c o.’ trˆen
4.3 Nhˆa n x´et vˆ` hai gia’i thuˆe a t ca’i tiˆe´n
Thuˆa.t to´an ´ap du.ng tu tu.o.’ng gia’i thuˆa.t nh´anh cˆa.n dˆe’ thu c hiˆe.n qu´a tr`ınh t`ım kiˆe´m lu a cho.n cˆa´u h`ınh ho p lˆe v`a tho’a m˜an tiˆeu ch´ı du th`u.a d˜u liˆe.u tˆo´i thiˆe’u v`a tˆo’ng gi´a th`anh tˆo´i thiˆe’u Do d´o, so s´anh v´o.i gia’i thuˆa.t COSTConfigs cˆo’ diˆe’n, sˆo´ lu.o ng n´ut cˆa` n duyˆe.t hai gia’i thuˆa.t s˜e gia’m di rˆa´t nhiˆe` u V`ı ch´ung ta kiˆe’m tra ngu.˜o.ng m`a thˆa´y khˆong tho’a m˜an th`ı thuˆa.t to´an s˜e khˆong tiˆe´p tu.c di theo nh´anh d´o n˜u.a Tuy nhiˆen, tru.`o.ng ho p tˆo`i nhˆa´t th`ı dˆo ph´u.c ta.p t´ınh to´an cu’a hai gia’i thuˆa.t d˜a ca’i tiˆe´n n`ay vˆa˜n l`a O(2n
)
Ngo`ai hai thuˆa.t to´an d˜a ca’i tiˆe´n, t´ac gia’ c`on bˆo’ sung thˆem c´ac tiˆeu ch´ı vˆe` tˆo´i thiˆe’u h´oa du th`u.a d˜u liˆe.u v`a tˆo’ng gi´a th`anh V`ı vˆa.y, cˆa´u h`ınh t`ım du.o c sau thu c hiˆe.n hai gia’i thuˆa.t n`ay l`a nhˆa´t v`a tˆo´i u.u nhˆa´t theo tiˆeu ch´ı cho tru.´o.c Dˆay l`a mˆo.t kˆe´t qua’ kh´a quan tro.ng kˆe´t qua’ cu’a gia’i thuˆa.t COSTConfigs cˆo’ diˆe’n cho biˆe´t tˆa´t ca’ c´ac cˆa´u h`ınh ho p lˆe
5 CA’ I TIˆE´N M ˆA˜U T `AI LIˆE U COTSDocument, D ˘A C TA’ TH `ANH PH ˆA` N COTS
Dˆe’ phu.c vu cho mu.c d´ıch t`ım kiˆe´m v`a lu a cho.n th`anh phˆa` n COTS th`ı viˆe.c dˆa`u tiˆen l`a pha’i di.nh ngh˜ıa mˆo.t mˆa˜u XML d˘a.c ta’ COTSDocument chuˆa’n cho kho d˜u liˆe.u COTS XML Dˆe’ thu. c hiˆe.n d˘ang k´y c´ac di.ch vu v`ao kho d˜u liˆe.u COTS XML, c´ac nh`a cung cˆa´p (Exporter) cˆa` n mˆo ta’ thˆong tin vˆe` c´ac di.ch vu cu’a m`ınh theo mˆa˜u d˘a.c ta’ n`ay C´ac thˆong tin ch´ınh trong mˆo.t mˆa˜u d˘a.c ta’ gˆo`m c´o ([1]):
// Di.nh ngh˜ıa IDL cu’a giao diˆe.n th`anh phˆa` n theBuffer module theBuffer{
// giao diˆe.n cung cˆa´p interface Buffer{
void write(in longx) long read()
} }