Các loi kim th phn mm
Mt hot động mang tính sng còn trong các d án sn xut hoc gia công phn mm (PM), đó là kim th (Software
Testing). Dân làm PM chc hn không ai nghi ng vai trò quan trng ca nó, tuy nhiên không phi ai (c trong ngành
và ngoài ngành) cũng hiu rõ hot động này. Bn thân công vic kim th phn mm (KTPM) cũng là mt lĩnh vc
hot động độc lp và khá “hp dn”. Cùng vi các d án gia công sn xut PM, hin cũng có khá nhiu d án mà ni
dung công vic ch là kim th nhng PM đã được khách hàng phát trin sn.
Mc dù công vic KTPM không xa l song nhng khái nim và k thut li khá rc ri. Bài viết này s nhm cung cp
mt cái nhìn tương đối bao quát v lĩnh vc “tưởng cũ nhưng không cũ” này.
KIM TH PHN MM LÀ GÌ?
Thc ra KTPM là công vic mà bt c người nào tng tham gia phát trin phn mm (PTPM) đều biết và tng làm.
Theo nghĩa thông thường nht, KTPM bao gm vic “chy th” PM hay mt chc năng ca PM, xem nó “chy” đúng
như mong mun hay không. Vic kim th này có th thc hin tng chng, sau mi chc năng hoc module được
phát trin, hoc thc hin sau cùng, khi PM đã được phát trin hoàn tt.
KTPM đứng v trí hết sc nhy cm, nó là bước đệm gia giai đon xây dng PM và s dng PM, trước khi giao sn
phm hoàn chnh cho khách hàng. Bn có th tham kho bài “Tng quan các mô hình phát trin phn mm” trong
TGVT A s tháng 8/2005 (ID: A0508_106) để biết v trí ca KTPM trong các mô hình PTPM.
Hình 1: 4 mc độ cơ bn ca kim th phn mm
CÁC MC ĐỘ CA KTPM
Thc tế, KTPM không đơn gin như nhiu người thường nghĩ, công vic này có nhiu mc độ khác nhau và có mi
tương quan vi các chng phát trin trong d án PTPM. Hình 1 cho thy 4 mc độ cơ bn ca KTPM và hình 2 cho
thy mi tương quan vi các chng PTPM trong mô hình V-model.
Phn sau s làm rõ chi tiết v các mc độ KTPM, do mt s thut ng không có t tương đương sát nghĩa trong tiếng
Vit, mt khác để các bn tin tham kho sau này, chúng tôi xin gi nguyên mt s thut ng gc tiếng Anh.
1. Unit Test – Kim th mc đơn v
Để có th hiu rõ v Unit Test, khái nim trước tiên ta cn làm rõ: thế nào là mt đơn v PM (Unit)?
Mt Unit là mt thành phn PM nh nht mà ta có th kim th được. Theo định nghĩa này, các hàm (Function), th
tc (Procedure), lp (Class), hoc các phương thc (Method) đều có th được xem là Unit.
Vì Unit được chn để kim th thường có kích thước nh và chc năng hot động đơn gin, chúng ta không khó khăn
gì trong vic t chc, kim th, ghi nhn và phân tích kết qu kim th. Nếu phát hin li, vic xác định nguyên nhân
và khc phc cũng tương đối d dàng vì ch khoanh vùng trong mt đơn th Unit đang kim th. Mt nguyên lý đúc kết
t thc tin: thi gian tn cho Unit Test s được đền bù bng vic tiết kim rt nhiu thi gian và chi phí cho vic kim
th và sa li các mc kim th sau đó.
Unit Test thường do lp trình viên thc hin. Công đon này cn được thc hin càng sm càng tt trong giai đon viết
code và xuyên sut chu k PTPM. Thông thường, Unit Test đòi hi kim th viên có kiến thc v thiết kế và code ca
chương trình. Mc đích ca Unit Test là bo đảm thông tin được x lý và xut (khi Unit) là chính xác, trong mi tương
quan vi d liu nhp và chc năng ca Unit. Điu này thường đòi hi tt c các nhánh bên trong Unit đều phi được
kim th để phát hin nhánh phát sinh li. Mt nhánh thường là mt chui các lnh được thc thi trong mt Unit, ví d:
chui các lnh sau điu kin If và nm gia then … else là mt nhánh. Thc tế vic chn la các nhánh để đơn gin
hóa vic kim th và quét hết Unit đòi hi phi có k thut, đôi khi phi dùng thut toán để chn la.
Cũng như các mc kim th khác, Unit Test cũng đòi hi phi chun b trước các tình hung (test case) hoc kch bn
(script), trong đó ch định rõ d liu vào, các bước thc hin và d liu mong ch s xut ra. Các test case và script
này nên được gi li để tái s dng.
2. Integration Test – Kim th tích hp
Integration test kết hp các thành phn ca mt ng dng và kim th như mt ng dng đã hoàn thành. Trong khi
Unit Test kim th các thành phn và Unit riêng l thì Intgration Test kết hp chúng li vi nhau và kim th s giao
tiếp gia chúng.
Integration Test có 2 mc tiêu chính:
Phát hin li giao tiếp xy ra gia các Unit.
Tích hp các Unit đơn l thành các h thng nh (subsystem) và cui cùng là nguyên h thng hoàn chnh
(system) chun b cho kim th mc h thng (System Test).
Trong Unit Test, lp trình viên c gng phát hin li liên quan đến chc năng và cu trúc ni ti ca Unit. Có mt s
phép kim th đơn gin trên giao tiếp gia Unit vi các thành phn liên quan khác, tuy nhiên mi giao tiếp liên quan
đến Unit tht s được kim th đầy đủ khi các Unit tích hp vi nhau trong khi thc hin Integration Test.
Tr mt s ít ngoi l, Integration Test ch nên thc hin trên nhng Unit đã được kim th cn thn trước đó bng Unit
Test, và tt c các li mc Unit đã được sa cha. Mt s người hiu sai rng Unit mt khi đã qua giai đon Unit Test
vi các giao tiếp gi lp thì không cn phi thc hin Integration Test na. Thc tế vic tích hp gia các Unit dn đến
nhng tình hung hoàn toàn khác.
Mt chiến lược cn quan tâm trong Integration Test là nên tích hp dn tng Unit. Mt Unit ti mt thi đim được tích
hp vào mt nhóm các Unit khác đã tích hp trước đó và đã hoàn tt (passed) các đợt Integration Test trước đó. Lúc
này, ta ch cn kim th giao tiếp ca Unit mi thêm vào vi h thng các Unit đã tích hp trước đó, điu này làm cho
s lượng kim th s gim đi rt nhiu, sai sót s gim đáng k.
Có 4 loi kim th trong Integration Test:
Kim th cu trúc (structure): Tương t White Box Test (kim th nhm bo đảm các thành phn bên trong
ca mt chương trình chy đúng), chú trng đến hot động ca các thành phn cu trúc ni ti ca chương trình
chng hn các lnh và nhánh bên trong.
Kim th chc năng (functional): Tương t Black Box Test (kim th ch chú trng đến chc năng ca chương
trình, không quan tâm đến cu trúc bên trong), ch kho sát chc năng ca chương trình theo yêu cu k thut.
Kim th hiu năng (performance): Kim th vic vn hành ca h thng.
Kim th kh năng chu ti (stress): Kim th các gii hn ca h thng.
3. System Test - Kim th mc h thng
Mc đích System Test là kim th thiết kế và toàn b h thng (sau khi tích hp) có tha mãn yêu cu đặt ra hay
không.
System Test bt đầu khi tt c các b phn ca PM đã được tích hp thành công. Thông thường loi kim th này tn
rt nhiu công sc và thi gian. Trong nhiu trường hp, vic kim th đòi hi mt s thiết b ph tr, phn mm hoc
phn cng đặc thù, đặc bit là các ng dng thi gian thc, h thng phân b, hoc h thng nhúng. mc độ h
thng, người kim th cũng tìm kiếm các li, nhưng trng tâm là đánh giá v hot động, thao tác, s tin cy và các yêu
cu khác liên quan đến cht lượng ca toàn h thng.
Đim khác nhau then cht gia Integration Test và System Test là System Test chú trng các hành vi và li trên toàn
h thng, còn Integration Test chú trng s giao tiếp gia các đơn th hoc đối tượng khi chúng làm vic cùng nhau.
Thông thường ta phi thc hin Unit Test và Integration Test để bo đảm mi Unit và s tương tác gia chúng hot
động chính xác trước khi thc hin System Test.
Sau khi hoàn thành Integration Test, mt h thng PM đã được hình thành cùng vi các thành phn đã được kim th
đầy đủ. Ti thi đim này, lp trình viên hoc kim th viên (tester) bt đầu kim th PM như mt h thng hoàn
chnh. Vic lp kế hoch cho System Test nên bt đầu t giai đon hình thành và phân tích các yêu cu. Phn sau ta
s nói rõ hơn v mt quy trình System Test cơ bn và đin hình.
System Test kim th c các hành vi chc năng ca phn mm ln các yêu cu v cht lượng như độ tin cy, tính tin
li khi s dng, hiu năng và bo mt. Mc kim th này đặc bit thích hp cho vic phát hin li giao tiếp vi PM
hoc phn cng bên ngoài, chng hn các li “tc nghn” (deadlock) hoc chiếm dng b nh. Sau giai đon System
Test, PM thường đã sn sàng cho khách hàng hoc người dùng cui cùng kim th để chp nhn (Acceptance Test)
hoc dùng th (Alpha/Beta Test).
Đòi hi nhiu công sc, thi gian và tính chính xác, khách quan, System Test thường được thc hin bi mt nhóm
kim th viên hoàn toàn độc lp vi nhóm phát trin d án.
Bn thân System Test li gm nhiu loi kim th khác nhau (xem hình 3), ph biến nht gm:
Kim th chc năng (Functional Test): bo đảm các hành vi ca h thng tha mãn đúng yêu cu thiết kế.
Kim th kh năng vn hành (Performance Test): bo đảm ti ưu vic phân b tài nguyên h thng (ví d b
nh) nhm đạt các ch tiêu như thi gian x lý hay đáp ng câu truy vn…
Kim th kh năng chu ti (Stress Test hay Load Test): bo đảm h thng vn hành đúng dưới áp lc cao (ví
d nhiu người truy xut cùng lúc). Stress Test tp trung vào các trng thái ti hn, các “đim chết”, các tình hung
bt thường…
Kim th cu hình (Configuration Test)
Kim th kh năng bo mt (Security Test): bo đảm tính toàn vn, bo mt ca d liu và ca h thng.
Kim th kh năng phc hi (Recovery Test): bo đảm h thng có kh năng khôi phc trng thái n định
trước đó trong tình hung mt tài nguyên hoc d liu; đặc bit quan trng đối vi các h thng giao dch như ngân
hàng trc tuyến.
Nhìn t quan đim người dùng, các kim th trên rt quan trng: bo đảm h thng đủ kh năng làm vic trong môi
trường thc.
Lưu ý không nht thiết phi thc hin tt c các loi kim th nêu trên. Tùy yêu cu và đặc trưng ca tng h thng,
tu kh năng và thi gian cho phép ca d án, khi lp kế hoch, trưởng d án s quyết định áp dng nhng loi kim
th nào.
Hình 2: Mi tương quan gia phát trin và kim th phn mm
4. Acceptance Test - Kim th chp nhn sn phm
Thông thường, sau giai đon System Test là Acceptance Test, được khách hàng thc hin (hoc y quyn cho mt
nhóm th ba thc hin). Mc đích ca Acceptance Test là để chng minh PM tha mãn tt c yêu cu ca khách hàng
và khách hàng chp nhn sn phm (và tr tin thanh toán hp đồng).
Acceptance Test có ý nghĩa hết sc quan trng, mc dù trong hu hết mi trường hp, các phép kim th ca System
Test và Accepatnce Test gn như tương t, nhưng bn cht và cách thc thc hin li rt khác bit.
Đối vi nhng sn phm dành bán rng rãi trên th trường cho nhiu người s dng, thông thường s thông qua hai
loi kim th gi là Alpha Test và Beta Test. Vi Alpha Test, người s dng (tim năng) kim th PM ngay ti nơi
PTPM, lp trình viên s ghi nhn các li hoc phn hi, và lên kế hoch sa cha. Vi Beta Test, PM s được gi ti
cho người s dng (tim năng) để kim th ngay trong môi trường thc, li hoc phn hi cũng s gi ngược li cho
lp trình viên để sa cha.
Thc tế cho thy, nếu khách hàng không quan tâm và không tham gia vào quá trình PTPM thì kết qu Acceptance
Test s sai lch rt ln, mc dù PM đã tri qua tt c các kim th trước đó. S sai lch này liên quan đến vic hiu
sai yêu cu cũng như s mong ch ca khách hàng. Ví d đôi khi mt PM xut sc vượt qua các phép kim th v
chc năng thc hin bi nhóm thc hin d án, nhưng khách hàng khi kim th sau cùng vn tht vng vì b cc màn
hình nghèo nàn, thao tác không t nhiên, không theo tp quán s dng ca khách hàng v.v…
Gn lin vi giai đon Acceptance Test thường là mt nhóm nhng dch v và tài liu đi kèm, ph biến như hướng dn
cài đặt, s dng v.v… Tt c tài liu đi kèm phi được cp nht và kim th cht ch.
Hình 3: Các loi kim th khác nhau trong System Test
5. Regression Test - Kim th hi quy
Trước tiên cn khng định Regression Test không phi là mt mc kim th, như các mc khác đã nói trên. Nó đơn
thun kim th li PM sau khi có mt s thay đổi xy ra, để bo đảm phiên bn PM mi thc hin tt các chc năng
như phiên bn cũ và s thay đổi không gây ra li mi trên nhng chc năng vn đã làm vic tt. Regression test có th
thc hin ti mi mc kim th.
Ví d: mt PM đang phát trin khi kim th cho thy nó chy tt các chc năng A, B và C. Khi có thay đổi code ca
chc năng C, nếu ch kim th chc năng C thì chưa đủ, cn phi kim th li tt c các chc năng khác liên quan
đến chc năng C, trong ví d này là A và B. Lý do là khi C thay đổi, nó có th s làm A và B không còn làm vic đúng
na.
Mc dù không là mt mc kim th, thc tế li cho thy Regression Test là mt trong nhng loi kim th tn nhiu
thi gian và công sc nht. Tuy thế, vic b qua Regression Test là “không được phép” vì có th dn đến tình trng
phát sinh hoc tái xut hin nhng li nghiêm trng, mc dù ta “tưởng rng” nhng li đó hoc không có hoc đã được
kim th và sa cha ri!
TÓM TT
Trên đây là tng quan v các mc và loi kim th PM cơ bn. Thc tế nếu đi sâu vào tng mc và loi kim th, còn
có rt nhiu kim th đặc thù khác na, mang tính chuyên bit cho tng vn đề hoc tng loi ng dng. Tuy nhiên,
nhng mc độ và loi kim th nêu trên là cơ bn nht và có th áp dng trong hu hết các loi ng dng PM khác
nhau.
Trong s báo ti chúng tôi s gii thiu nhng bước cơ bn ca mt quy trình KTPM, làm thế nào để đánh giá và ci
tiến năng lc KTPM ca mt t chc thông qua mô hình TMM (Testing Maturity Model), mt mô hình được các chuyên
gia đánh giá khá tt dành cho hot động KTPM.