Khóa luận Nghiên cứu về mức bao phủ của kiểm thử

ĐẠI HỌC QUỐC GIA HÀ NỘI  
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ  
Vương Thị Quỳnh Dương  
NGHIÊN CỨU VỀ MỨC BAO PHỦ CỦA KIỂM THỬ  
KHOÁ LUẬN TT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY  
Ngành : Công Nghệ Thông Tin  
NỘI - 2009  
1
ĐẠI HỌC QUỐC GIA HÀ NỘI  
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ  
Vương ThQuỳnh Dương  
NGHIÊN CỨU VỀ MỨC BAO PHỦ CỦA KIỂM THỬ  
KHOÁ LUẬN TT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY  
Ngành: Công Nghệ Thông Tin  
Cán bộ hướng dẫn : TS. Trương Ninh Thuận  
Cán bộ đồng hướng dẫn: ThS. Tô Văn Khánh  
NỘI - 2009  
2
LỜI CM ƠN  
Bản thân em đạt được thành quả như ngày hôm nay là nhờ một phần không nhỏ  
công lao dìu dắt của các thầy cô trong khoa Công Nghệ Thông Tin - Đại Học Công  
Ngh- Đại Học Quốc Gia Hà Nội. Em xin ghi nhận công lao của các thầy cô và em xin  
gửi lời cảm ơn sâu sắc tới thầy cô.  
Để hoàn thành được khoá luận này em xin gửi lời cảm ơn chân thành tới TS.  
Trương Ninh Thuận và ThS. Tô Văn Khánh, hai thầy đã hướng dẫn, giúp đỡ, chỉ bảo rất  
tận tình cho em.  
Dù đã cố gắng rất nhiều trong quá trình làm khoá luận, nhưng cũng không thể  
tránh khỏi những thiếu sót, em rất mong nhận được sự góp ý của các thầy, cô giáo để  
em có thể hoàn thiện hơn.  
Hà nội, ngày 23 tháng 5 năm 2009  
Sinh viên: Vương ThQuỳnh Dương  
3
TÓM TẮT KHOÁ LUẬN  
Trong thời đại công nghthông tin bùng nổ như hiện nay, phn mềm đóng một  
vai trò cc kquan trọng trong hầu hết các lĩnh vc của đời sống. Phần mm là mt sn  
phẩm cn phải được đảm bo vcht lượng. Đảm bo chất lượng phần mềm (SQA-  
Software Quality Assuarance) là một nhiệm vụ đặc biệt quan trọng trong phát trin  
phn mm và là vấn đề sống còn đối với tất ccác công ty phần mềm. Để đảm bo chất  
lượng phần mềm thì trong các dán phần mềm phi tiến hành xác minh và thm định.  
Một trong các hoạt động xác minh và thẩm định quan trọng là tiến hành kim thphần  
mm. Kim thcần được tiến hành nhiều mức và phối hợp nhiều kthuật khác nhau.  
Phn không ththiếu trong kim thlà vic xây dựng các ca kim th. Các ca kim thử  
phi đủ tốt mới có thphát hiện ra khiếm khuyết của phần mềm. Mt vấn đề đặt ra ở  
đây là làm thế nào để xác định được ca kim thử đó là tốt, những tiêu chí nào đánh giá  
chất lượng của chính ca kim th? Và công việc tiến hành kim tra khi nào thì dừng lại?  
Nội dung của khoá luận sẽ đề cập đến hai phương pháp nhằm mục đích xây dựng  
các ca kim thtốt đó là kthuật phân tích bao phcode và kthut phân tích giá trị  
điểm biên. Phân tích bao phcode sphi tiến hành xây dựng các ca kim thtt ccác  
luồng đường đi có thqua chương trình, các luồng đường đi tinput ti output được  
xác định dựa trên các nhánh rcủa chương trình. Thông thường các lỗi vlập trình  
thường hay xy ra tại giá trbiên do vậy tại giá trbiên cần phải thiết kế ca kim thử  
kim tra nó. Trong phạm vi của khoá luận chúng tôi stiến hành cài đặt mt chương  
trình nhằm tìm ra các câu lệnh điều khin của file ngun java và chra giá trbiên trong  
các biu thức so sánh nhằm mục đích chra để xuất các giá trbiên baseline và robust  
cần đưc kim tra.  
4
Mục lục  
CHƯƠNG 1. MỞ ĐẦU...............................................................................................10  
1.1 Bối cảnh nghiên cứu ..........................................................................................10  
1.2 Nội dung bài toán ..............................................................................................11  
1.3 Cấu trúc của khoá luận.......................................................................................12  
CHƯƠNG 2. GIỚI THIỆU VỀ BAO PHỦ CODE ......................................................14  
2.1 Bao phủ code là gì ?...........................................................................................14  
2.2 Tại sao cần đo lượng code được bao phủ ?.........................................................14  
2.3 Làm thế nào để xác định lượng code được bao phủ ?.........................................15  
2.4. Trong tiến trình test thì bao phủ code hợp với kỹ thuật kiểm thử nào ? ............15  
2.4.1 Kiểm thử hộp đen .......................................................................................15  
2.4.2 Kiểm thử hộp trắng.....................................................................................15  
2.4.3 Bao phủ code ..............................................................................................16  
CHƯƠNG 3. GIỚI THIỆU MỘT SỐ PHƯƠNG PHÁP BAO PHỦ ............................17  
3.1 Bao phủ câu lệnh (Statement coverage) .............................................................17  
3.2 Bao phủ nhánh (Branch coverage) .....................................................................17  
3.3 Bao phủ đường đi (path coverage) .....................................................................18  
3.4 Bao phủ điều kiện (condition coverage).............................................................18  
3.5 Bao phủ nhiều điều kiện (multiple condition coverage) .....................................18  
CHƯƠNG 4. PHÂN TÍCH, ĐÁNH GIÁ CÁC PHƯƠNG PHÁP BAO PH..............19  
4.1 Phân tích phương pháp bao phủ câu lệnh (statement coverage)..........................19  
4.2 Phân tích phương pháp bao phủ nhánh (branch coverage)..................................23  
4.3 Phân tích phương pháp bao phủ đường đi (path coverage) .................................28  
CHƯƠNG 5. PHÂN TÍCH GIÁ TRỊ ĐIỂM BIÊN......................................................33  
5.1 Giới thiệu...........................................................................................................33  
5.2 Phân hoạch tương đương(equivalence partitioning) ...........................................33  
5.3 Phân tích giá trị biên (boundary value analysis) .................................................34  
5.3.1 Tổng quan về phân tích giá trị điểm biên.....................................................34  
5.3.2 Lựa chọn các ca kiểm thử sử dụng phân tích giá trị điểm biên.....................34  
5.3.3 Phân tích giá trị biên đơn biến (Single-Variable BVA)................................35  
5.3.4 Phân tích giá trị biên đa biến (Multi – Variable BVA).................................36  
5.3.5 Kết luận ......................................................................................................40  
CHƯƠNG 6. THỰC NGHIỆM ...................................................................................41  
6.1 Ví dụ một chương trình đơn giản .......................................................................41  
6.1.1 Xây dựng các ca kiểm thử cho chương trình trên ........................................42  
6.1.2 Kết luận ......................................................................................................46  
6.2 Chương trình cài đặt tìm kiếm các câu lệnh rẽ nhánh trong mã nguồn java. .......46  
6.2.1 Giới thiệu về chương trình ..........................................................................46  
6.2.2 Mô tả các chức năng chính..........................................................................46  
6.2.3 Biểu đồ trình t...........................................................................................47  
6.2.4 Thuật toán đã sử dụng.................................................................................49  
6.2.5 Các lớp cài đặt ............................................................................................51  
6.2.5 Kết quả thao tác các chức năng giữa người dùng và chương trình như sau..51  
6.3 Kết lun.............................................................................................................56  
5
CHƯƠNG 7: KẾT LUẬN KHOÁ LUẬN ...................................................................57  
7.1 Kết luận về khoá luận ........................................................................................57  
7.2 Hướng nghiên cứu phát triển trong tương lai......................................................57  
TÀI LIỆU THAM KHẢO ...........................................................................................59  
6
DANH SÁCH CÁC HÌNH VẼ  
Hình 1 : Kết quả kiểm tra mã nguồn được thực thi ......................................................20  
Hình 2 : Kết quả đo bao phủ dòng lệnh........................................................................23  
Hình 3 : Kết quả thực hiện test case 1..........................................................................26  
Hình 4 : Kết quả đo bao phủ nhánh khi thực hiện test case 1 .......................................26  
Hình 5 : Kết quả khi thực hiện test case 2....................................................................27  
Hình 6 : Kết quả đo bao phủ nhánh khi thực hiện test case 2 ......................................27  
Hình 7: Kết quả thực hiện test case 3...........................................................................30  
Hình 8 : Kết quả đo bao phủ khi thực hiện test case 3..................................................31  
Hình 9 : Kết quả thực hiện test case 4..........................................................................32  
Hình 10 : Kết quả đo bao phủ khi thực hiện test case 4................................................32  
Hình 11 : Tập hợp các giá trị biên baseline cho đơn biến trên một khoảng đầu vào .....35  
Hình 12 : Đường các giá trị baseline và robust cho đơn biến trên một khoảng đầu vào 36  
Hình 13 : Tập hợp các giá trị baseline và rubust trường hợp đơn biến trên hai khoảng  
đầu vào........................................................................................................................36  
Hình 14 : Tập giá trị baseline và robust của biến N trong trường hợp hai biến đầu vào  
....................................................................................................................................37  
Hình 15 : Tập hợp giá trị baseline và rubust trên hai khoảng của biến M  
trường hợp hai biến đầu vào  
trong  
38  
Hình 16 : Tổng hợp tất cả các giá trị của hai biến N và M trên hai khoảng đầu vào .....38  
Hình 17 : Tổng hợp toán bộ giá trị baseline, robust trường hợp đa biến đầu vào trên hai  
khoảng.........................................................................................................................39  
Hình 18 : Ví dụ cấu trúc một chương trình đơn giản....................................................41  
Hình 19 : Các công việc cần thực hiện (tô đậm)..........................................................42  
Hình 20 : Test case 1 kiểm tra công việc A..................................................................42  
Hình 21 : Test case 2 kiểm tra công việc B..................................................................42  
Hình 22 : Test case 3 kiểm tra công việc C..................................................................43  
Hình 23 : Hai điều kiện một và hai là độc lập nhau......................................................43  
Hình 24 : Kiểm tra đồng thời công việc A và công việc C trong cùng 1 test case.........44  
Test case 2 kiểm tra công việc B và công việc C: ........................................................44  
Hình 25 : Test case kiểm tra đồng thời công việc B và C.............................................44  
Hình 26 : Nhánh không được bao phủ .........................................................................45  
Hình 27. Biểu đồ trình t.............................................................................................47  
Hình 28: Biều đồ trình tự khi tương tác câu lệnh if......................................................48  
Hình 29: Biều đồ trình tự khi tương tác câu lệnh while................................................48  
Hình 30: Biểu đồ trình tự khi tương tác câu lệnh for....................................................49  
Hình 31: Kiến trúc lớp cài đặt Get_File_Name............................................................51  
Hình 32: Kiến trúc lp ReadContentFile......................................................................51  
Hình 33: Giao diện yêu cầu nhập tên file cần đọc........................................................52  
Hình 34: Nhập tên file không đúng định dạng *.java ...................................................52  
Hình 35: Nhập vào một tên file đúng để đọc................................................................52  
Hình 36 : Nội dung của file TestFile.java ....................................................................52  
Hình 37: Kết quả tìm kiếm câu lệnh điều khiển ...........................................................53  
Hình 38 : Nội dung của file chứa câu lệnh điều khiển được tìm kiếm ..........................53  
7
Hình 39 : Kết quả khi người dùng muốn thao tác với câu lệnh if .................................54  
Hình 40 : Kết quả khi người dùng muốn thao tác với câu lệnh while...........................55  
Hình 41 : Kết quả khi người dùng muốn thao tác với câu lệnh for ...............................55  
8
DANH MỤC CÁC THUẬT NGỮ  
Khái niệm  
Thuật ngữ  
Statement coverage  
Branch coverage  
Path coverage  
Condition coverage  
Boundary value analysis(BVA)  
Single-variable BVA  
Multi-variable BVA  
Equivalence partitioning  
Test case  
Bao phủ câu lệnh  
Bao phủ nhánh  
Bao phủ đường đi  
Bao phủ điều kiện  
Phân tích giá trị biên  
Phân tích giá trị biên đơn biến  
Phân tích giá trị biên đa biến  
Phân hoạch tương đương  
Ca kiểm thử  
Valication  
Xác minh  
Verification  
Thẩm định  
Test entropy  
Kim tra độ bất định trong cấu trúc của  
hthống  
Cyclomatic complextity  
Số đường độc lập tuyến tính đi qua mã  
ngun  
Baseline  
Robust  
đường cơ sở  
mạnh mẽ  
Module  
đun  
9
CHƯƠNG 1. MỞ ĐẦU  
1.1 Bối cảnh nghiên cứu  
Trong thời đại công nghthông tin bùng nnhư ngày nay, phần mềm đóng vai  
trò vô cùng quan trọng hầu hết các lĩnh vc của cuộc sống. Đặc biệt trong khi ngành  
doanh nghiệp, dịch v, quảng cáo, nó đã trgiúp đắc lực nhm làm tăng chất lượng  
nghiệp v. Mỗi bphận đều phthuộc vào phần mềm để htrcho vic phát trin, sn  
xuất, quảng cáo nhằm tiếp thcác sn phầm và dịch vcủa h.  
Phần mềm cũng được xem là một sản phm, nhưng là loại hình sn xuất đc biệt.  
Trong một quy trình sản xuất phần mm, giai đoạn phát hiện, xác định và sửa các lỗi  
phn mềm được xem là phần không ththiếu nhằm đảm bo chất lượng phần mm.  
Đảm bo chất lượng phần mềm là một nhiệm vụ đặc biệt quan trọng trong phát trin  
phầm mềm và là vấn đề sống còn đối với tất ccác công ty phn mềm. mức cao, vic  
đảm bo chất lượng liên quan đến mt loạt các vấn đề như chun và qui trình qun lý  
của công ty, môi trường và công cphát triển, mô hình phát trin phần mềm được lựa  
chọn, knăng của nhân viên…mức thấp hơn, chất lượng phn mềm được đảm bo  
trên cơ shiểu đúng yêu cầu của khách hàng, đặc tả đúng yêu cầu, tạo ra các thiết kết  
tốt và chuyn ti nó mt cách đúng đắn thành mã ngun của phần mềm. Chi phí bra  
cho giai đoạn này thường chiếm không nhtrong tổng chi phí mà các tchức phát triển  
phần mm bra cho toàn bqui trình. Với tốc độ phát triển chóng mặt của lĩnh vực  
công nghthông tin trên chthống phần cứng và phần mềm, khnăng xy ra nhiều  
lỗi, đặc biệt là những lỗi phức tạp là rất cao. Lỗi có thgây thiệt hại to lớn cvtiền  
bạc, thời gian và công sức con người. Chính vì vậy, cần có phương pháp phát hiện ra li  
sớm nhằm gim công sức để sửa chúng. Để phát hiện ra những li phần mềm, phần  
mềm cần phải được thm định (Valication) và kim chứng (Verification). Xác minh,  
thẩm định giúp ta phát hiện và sửa li phần mềm từ đó đánh tính dùng được của phn  
mềm.  
Con người không thkhông mắc sai lầm, và phần mềm mà không được kim tra  
slàm vic không hiu qu. Thông thường, có t20 đến 50 li trên 1000 dòng lệnh  
được tìm thấy trong suốt quá trình phát triển, và vẫn còn t1.5 đến 4 li trên 1000 dòng  
lệnh sau khi kim thhthống [1]. Mi lỗi này đều có thdẫn tới lỗi tổng thhay  
không đúng với đặc tyêu cầu. Mục đích của kim thphn mềm là làm gim lỗi phần  
mềm xuống mức có thchấp nhận được, tuthuộc vào mức độ phức tạp của dán.  
Chính vì vậy, kiểm thphần mềm có vai trò vô cùng quan trọng trong toàn bquy trình  
10  
phát triền phần mềm, và trong công nghiệp phần mềm hiện nay, nó đang thu hút sự  
quan tâm của nhiều nhà nghiên cứu.  
Trong quy trình phát trin phần mềm hiện đại có giai đoạn kim thphần mềm  
dùng để kim tra tính đúng đắn ca phần mm. Mục tiêu chính của nhóm phát triển  
phần mềm là phải làm sao tạo ra được những sản phầm phần mềm có chất lượng tốt  
nhất.Việc viết tập hợp các ca kiểm th(test cases) là một phần quan trọng không thể  
thiếu trong phương pháp phát triển phần mềm linh hoạt. Tập hợp các ca kiểm thử đúng  
đắn giúp chúng ta giảm thiểu tối đa các lỗi, giảm thời gian tìm kiếm lỗi, tạo ra được các  
phần mềm tốt, tính ổn định cao. Một cách lý tưởng thì người kim tra (tester) phải kiểm  
tra tất cả các giá trị của biến đầu vào, tuy nhiên điều này là không tưởng bởi vì thường  
thì miền giá trị của biến đầu vào là rất lớn, thậm chí gần như dài vô hạn hoặc vô hạn.  
Do đó người kim tra không thể kỉêm tra được tất cả mọi giá trị, mọi trường hợp mà chỉ  
kim tra một số trường hợp đại diện mà thôi. Như vậy luôn xuất hiện câu hỏi: xây dựng  
những ca kiểm thnào là hợp lý ? Bao giờ có thể ngưng kiểm tra? Các ca kim thtạo  
ra liệu có tốt hay không? Giá trị được chọn để xây dựng ca kim thlà những giá trị  
nào?... Để nhằm giải đáp các thắc mắc này và xây dựng lên các ca kim thtốt, trong  
tài liệu này chúng tôi sphân tích một số đề xuất được đưa ra nhằm đánh giá chất lượng  
của một ca kiểm th: phân tích bao phủ code (code coverage analysis), kiểm tra các  
điểm đặc biệt (particular point) cụ thlà phân tích đánh giá giá trtại vtrí biên.  
1.2 Nội dung bài toán  
Kim thlà giai đon vô cùng quan trọng trong quá trình phát trin phần mềm.  
Trong giai đon này thì công vic thiết kế các ca kim thlại đóng vai trò cc kquan  
trọng. Nhằm giúp xây dựng các ca kim thtốt, chiến lược kiểm thti ưu, trong tài  
liệu này sẽ đề cập đến kỹ thuật phân tích code bao phủ và phân tích các giá trị biên. Kỹ  
thuật phân tích bao phsẽ đánh giá độ bao phủ từ đó xác định quá trình kiểm tra có đạt  
được độ bao phủ yêu cầu hay không, tỷ lệ yêu cầu đã được kiểm tra (tính trên các yêu  
cầu của phần mềm và số lượng code đã viết). Trong phm vi tài liệu sphân tích các  
cách bao phcơ bn nhưng chúng vô cùng mạnh m. Thông thường, không thể kiểm  
thử với mọi dữ liệu, chiến lược chung khi thiết kế ca kiểm thử là phân hoạch tương  
đương (equivalence partitioning). Phân hoạch tương đương chia miền dữ liệu vào ra  
thành các vùng, mà mỗi vùng chứa các dữ liệu có cùng hành vi. Do đó, đối với mỗi  
vùng dữ liệu chỉ cần xây dựng một ca kiểm thử để đại diện. Theo kinh nghiệm, các sai  
sót vlập trình thường xy ra đối với dliệu biên nên cần thêm vào đó các ca kiểm thử  
kim tra đối với biên của các vùng. Trong tài liệu này cũng sẽ tiến hành phân tích đánh  
11  
giá các giá trị biên sử dụng trong các ca kiểm thử. Đưa ra các giá trbiên đề xuất cần  
phi được kiểm tra để đảm bo phần mềm vẫn hot động tốt n định trên các giá trị  
đó. Luồng chương trình tinput đến output có các cách đi khác nhau chyếu được dựa  
vào các câu lệnh điều khin trong mã nguồn, chúng tôi stiến hành cài đặt một chương  
trình tìm kiếm câu lệnh điều khiển trong file mã ngun java và xuất ra giá trbiên trong  
câu lệnh điều khin có cha toán tso sánh. Tóm lại bài toán đưa ra ở đây là làm sao  
xây dựng được ca kim thtốt, các lỗi lập trình thường xy ra các đim biên của di  
giá trị đầu vào, vậy thì ca kim ththiết kế để kim tra giá trbiên là gì? Gii quyết bài  
toán này chúng tôi sphân tích kthuật bao phcode và kthuật phân tích giá trbiên,  
sau cùng là cài đặt chương trình tìm kiếm câu lệnh điều khin của mã file mã ngun  
java, xuất ra giá trbiên trong đó.  
1.3 Cấu trúc của khoá luận  
Phần còn lại của khoá luận đưc trình bày như sau:  
Chương 2 giới thiệu vbao phủ code. Trong chương này sgiới thiệu vkthuật bao  
phcode. Lý do, tầm quan trọng của bao phcode. Cách tiếp cận để có thể đo code  
được bao ph. Phân loại bao phcode vào kthuật kim thhộp trắng.  
Chương 3 gii thiệu vmột sphương pháp đo bao phcode cơ bn nhưng vô cùng  
mạnh mẽ đó là các phương pháp : bao phcâu lệnh đo bao nhiêu câu lệnh được thc thi  
trong tng scâu lệnh mã ngun, bao phnhánh đo bao nhiêu nhánh đã được thực thi  
trong tổng số các nhánh rcủa chương trình, bao phủ đường đi đo bao nhiêu luồng  
đường đi được kiểm tra, bao phủ điu kin tương tnhư bao phnhánh nhưng nó có độ  
nhạy tốt hơn, bao phnhiều điều kiện kết hợp các biu thức điều kiện con trong các câu  
lệnh rnhánh.  
Chương 4 phân tích, đánh giá các phương pháp bao ph. Trong chương này stiến hành  
phân tích cthtừng phương pháp : bao phcâu lệnh, bao phnhánh, bao phủ đường  
đi, đồng thi đánh giá ưu nhược đim của từng phương pháp.  
Chương 5 trình bày tổng quan vphân tích giá trị đim biên, chiến lược phân hoạch  
tương đương. Tiếp đó phân tích kthuật phân tích giá trbiên đơn biến đa biến.  
Chương 6 thc nghiệm một chương trình đơn giản. Chúng tôi stiến hành phân tích bài  
toán thc nghiệm, đề xuất các ca kim thử để đảm bo kim tra code được bao phủ  
chương trình. Thông thường để xây dựng các ca kim thkiểm tra bao phcác nhánh  
và bao phủ đường đi ta phi xác định trong chương trình mã ngun có bao nhiêu câu  
12  
lệnh rnhánh, chúng tôi scài đặt mt chương trình đơn gin giúp xuất ra toàn bcâu  
lệnh rnhánh và giá trbiên trong các biu thức điều kiện trong file nguồn cần kim tra.  
File nguồn đu vào đọc là file java.  
Chương 7 kết luận vkhoá luận và hướng nghiên cứu tiếp theo.  
13  
CHƯƠNG 2. GIỚI THIỆU VBAO PHCODE  
2.1 Bao phủ code là gì ?  
Bao phủ code là phần trăm code được phủ bằng cách kim tra (test) tự động. Đo  
lượng code bao phủ đơn giản là xác định những câu lệnh nào được thực thi, những câu  
lệnh nào không được thực thi thông qua việc kiểm tra. Nhìn chung, một hệ thống bao  
phủ code sẽ thu thập thông tin về chương trình đang chạy và kết hợp với thông tin  
nguồn để tạo ra báo cáo bao phcode trên test suite [2].  
Trong tiến trình phát triển thì bao phủ code là một phần của vòng lặp các thông  
tin phản hồi. Khi các ca kim th(test case) được thực thi, bao phủ code sẽ làm nổi bật  
lên diện mạo của các dòng code không được kiểm tra thoả đáng và các dòng code này  
yêu cầu cần phải được kim tra thêm. Quá trình kiểm tra code không được thực thi và  
sau đó thêm vào các ca kim ththích hợp để kiểm tra lại là một vòng lặp. Vòng lặp  
này sẽ tiếp tục lặp đi lặp lại cho tới khi bao phủ đạt đến một vài chỉ tiêu đề ra.  
2.2 Tại sao cần đo lượng code được bao phủ ?  
Cần phải hiểu một cách đúng đắn rằng test unit giúp ta cải thiện chất lượng và  
giúp ta dự đoán trước được chất lượng của phần mềm. Tuy nhiên liệu rằng ta có thể biết  
được unit test nào tốt cho phần code của ta? Test bao nhiêu thì đủ? Có cần phải test  
nhiều hơn? Đo độ bao phcode stìm ra câu trlời cho nhng câu hỏi này.  
Vic đo code bao phgiúp ta tránh được test entropy (kiểm tra độ bất định trong  
cấu trúc của hệ thống)[3]. Khi code của ta tri qua nhiều chu trình phát hành, có thcó  
khuynh hướng làm hao mòn các unit test. Khi có code mới được thêm vào thì có thsẽ  
không cần đến các test case chun mà dán đã sdụng trong lần phát hành đầu tiên.  
Đo bao phcode có thgicho các test của ta đạt đến các chun mà ta mong muốn.  
Code không pass toàn bnhưng ta có thttin rằng đã được kim tra klưỡng.  
Nói tóm lại, đo độ bao phcode vì các lý do sau:  
- Để biết phn kim của ta có thc skim tra được code.  
- Để biết đưc kim tra đến khi nào đủ.  
- Để duy trì chất lượng các ca kim thqua các vòng đời của dán  
Nhìn chung bao phcode theo nguyên tắc 80 – 20. Tăng giá trbao phsdần  
trlên khó khăn, với vic thực hiện các kim tra mới scàng ngày càng ít làm tăng giá  
14  
trbao ph. Nếu ta tuân theo các nguyên tắc lập trình, các điều kiện li thường sẽ được  
kim tra nhiều cấp độ trong phần mềm của ta, có những dòng code có thrất khó để  
đạt ti các mức kim tra thc tế. Đo bao phkhông phi là vic thay thế bằng code tt  
và phong cách lập trình hay.  
2.3 Làm thế nào để xác định lượng code được bao phủ ?  
Có nhiều phương pháp để đo độ bao phcode. Đại thcó ba cách tiếp cận chính,  
chúng có thể được kết hợp sdụng với nhau.  
Đo mã nguồn: Phương pháp này sthêm các câu lệnh công cvào mã ngun và  
biên dịch lại mã ngun với các công cbiên dịch thông thường. Một điểm bất lợi của  
phương pháp này là phi biên dịch hai lần do đó có thlàm chậm tiến trình, đặc biệt là  
trong các dán lớn.  
Công cmã trung gian: các lớp biên dịch là công c, bằng vic thêm vào  
bytecodes mới thì các lớp công cmới cũng được tạo ra.  
Thu thập thông tin thc thi: phương pháp này thu thập thông tin tmôi trường  
thc thi khi code thi hành để xác định thông tin bao ph.  
2.4. Trong tiến trình test thì bao phủ code hợp với kỹ thuật kiểm thử nào ?  
2.4.1 Kiểm thử hộp đen  
Kiểm thhộp đen là skiểm thsdụng các ca kiểm thử được thiết kế dựa trên  
đặc tyêu cầu, tài liệu người dùng nhằm mục đích phát hiện ra các khiếm khuyết. Kiểm  
thhộp đen nhìn nhận đun (module) được kiểm tra như là mt hộp đen, và chquan  
tâm đến chức năng (hành vi) của đun (module), tức là kim tra xem có hoạt động  
đúng với đặc thay không. Các ca kiểm thử bao gồm các trường hợp bình thường và  
không bình thường (dliệu không hợp l…) của mô đun[4].  
2.4.2 Kiểm thử hộp trắng  
Kiểm thhộp trắng là skiểm thdựa trên vic phân tích chương trình để xác  
định các ca kiểm th. Kthuật chính ở đây là phân tích mã nguồn, xác định các luồng  
điều khiển tinput đến output. Dựa trên vic xác định các đường đi người ta đưa ra các  
ca kim thnhằm mục đích kiểm tra tất ccác đường đi có th. Tức đảm bo mọi tổ  
hợp hai lệnh liên tiếp đều được thc hiện ít nht mt lần trong mt ca kim thnào đó.  
Vic xác định các đường đi da trên việc phân tích các cấu trúc rnhánh và các vòng  
lặp[5].  
15  
2.4.3 Bao phủ code  
Tnhững đặc điểm vkthuật kim thhộp đen và kiểm thhộp trắng như  
trên ta có thế nói bao phcode là mt phương pháp kim thhộp trắng, bao phcode  
cần phi hiu vmã ngun, có thtruy cập vào mã ngun hơn là đơn gin sdụng các  
giao diện được cung cấp. Có thế nói bao phcode là phương pháp hu ích nhất trong  
suốt giai đoạn kim thđun (module), tuy nhiên nó cũng có những lợi ích trong  
kiểm thtích hợp và trong các lần kiểm thkhác nữa, phthuộc vào chúng ta kiểm tra  
cái gì và kiểm tra như thế nào. Kiểm thử đệ quy thường là kiểm thhộp đen do đó có  
thkhông phù hợp với bao phcode.  
16  
CHƯƠNG 3. GIỚI THIỆU MT SPHƯƠNG PHÁP BAO PHỦ  
3.1 Bao phủ câu lệnh (Statement coverage)  
Bao phcâu lệnh còn được gọi là bao phdòng lệnh (line coverage), là một cách  
đo scâu lệnh được thc thi khi ta áp dụng những ca kim ththích hợp. Đối với mỗi  
câu lệnh không được bao ph, chúng ta stìm hiu nguyên nhân tại sao nó không được  
bao ph. Những câu lệnh không được thực thi thì công cbao phsdùng cờ đánh dấu,  
những câu lệnh được thực thi sẽ được xuất ra thành bn báo cáo. Đo câu lệnh được bao  
phgần như được xem là cách thc thi đơn gin nhất, nó có tháp dụng thông qua  
bytecode. Bao phcâu lệnh thường hay được những người phát trin sdụng bi vì nó  
ddàng kết hp với các dòng mã nguồn. Để có thtiến hành phân tích kết qutest ta  
cần tính tlphn trăm câu lệnh đã được kim tra. Tính được phần trăm scâu lệnh  
được bao phcần tiến hành hai phép đo cốt yếu đó là : tổng scác câu lệnh trong mã  
ngun và scâu lệnh đã được kiểm tra bi test suite. Công thức tính phần trăm dòng  
lệnh được thc thi [6]:  
Scâu lệnh được kim tra  
Phần trăm dòng lệnh =  
* 100%  
Tổng scâu lệnh mã ngun  
3.2 Bao phủ nhánh (Branch coverage)  
Bao phnhánh còn được biết đến là bao phquyết định (Decision coverage).  
Bao phnhánh là một phép đo dựa trên các điểm quyết định như là các đim quyết định  
trong câu lệnh rnhánh if, while…Mt ví dụ đơn gin vlệnh rnhánh if :  
if (a>b)  
System.out.println( a);  
else  
System.out.println(b);  
Báo cáo của cách bao phnhánh là báo ra các biu thức boolean đã được kiểm  
tra trong các cấu trúc điu khiển, đánh giá cgiá tr“true” và “false”. Chẳng hạn mt  
câu lệnh if(a>b) trong ví dtrên schia chương trình thành 2 nhánh. Nếu mun c2  
nhánh đều được thc hiện thì cn phi có những test case để cho a > b trong câu lệnh  
trên mang chai giá tr“true” và “false” tại hai thời đim nào đó. Nhưng cũng có  
17  
trường hợp chmột ca kim thmà a > b đã có thmang chai giá tr, chẳng hạn nếu  
câu lệnh này nằm trong một vòng lặp thì có thtrong mt lần lp nào đó ta có a > b  
mang giá tr“true”, nhưng lần lặp sau thì a > b mang giá tr“false”.Công thức tính phần  
trăm nhánh được bao ph[6]:  
Snhánh được thc thi  
Phần trăm nhánh được bao ph=  
*100%  
Tổng snhánh trong chương trình  
3.3 Bao phủ đường đi (path coverage)  
Mt đường đi thhiện mt luồng vic thc thi tkhi bắt đầu đến khi kết thúc  
mt chương trình, mt phương thức có N quyết định scó 2N cách đi, và nếu phương  
thức có vòng lặp thì có thscó vô scách đi. Bao phủ đường đi cũng là một trong số  
các cách đo trong kiểm thhộp trắng, nó skim tra trong từng hàm xem các đường đi  
được kim tra hay không. Kthuật chính ở đây là phân tích mã nguồn, xác định các  
luồng điu khin hay đường đi của chương trình tinput đến output. Dựa trên việc xác  
định các đường đi người ta đưa ra các ca kim thnhằm kim tra tất ccác đường đi có  
th. Vic xác định các đường đi dựa trên vic phân tích các cấu trúc rnhánh và các  
vòng lặp.  
3.4 Bao phủ điều kiện (condition coverage)  
Bao phủ điều kiện tương tự như bao phnhánh nhưng nó có độ nhạy tốt hơn với  
luồng điều khin. Bao phủ điều kiện đo các biu thức con độc lập với các biu thức con  
khác. Bao phủ điều kiện báo cáo kết luận logic “true” hoc “false” của từng biu thức  
boolean con, các biu thức boolean con được phân tách bằng các phép logic-and và  
logic-or nếu chúng xy ra.  
3.5 Bao phủ nhiều điều kiện (multiple condition coverage)  
Bao phủ nhiều điều kiện là bao phủ kết hợp đồng thời các biểu thức boolean con  
xảy ra. Giống với bao phủ điều kiện (condition coverage) các biểu thức con được phân  
tách bằng các phép logic-and và logic-or.  
18  
CHƯƠNG 4. PHÂN TÍCH, ĐÁNH GIÁ CÁC PHƯƠNG PHÁP  
BAO PHỦ  
Chúng ta đề xuất mt sphương pháp bao phcode nhằm đánh giá được chất  
lượng của ca kim th. Để nhìn nhận bên trong mỗi hàm, và xác định những câu lệnh  
nào được thực thi, những câu lệnh nào không được thc thi thì yêu cầu ta cần phải phân  
tích bao phcode. Phân tích code sgiúp ta: làm rõ những code không được thc thi  
nhtest suite. Thêm vào các ca kim thử để kim tra lại. Nhận ra code dư thừa. Khi  
chương trình thiết kế thay đổi thường sdẫn đến code dư tha. Code dư thừa nên được  
loại bvì nó có thgây khó hiu cho công vic của người bo trì. Phân tích code bao  
phcòn được sdụng để theo dõi các phần code đặc biệt. Với vic đếm từng dòng  
code, bn phân tích bao phcòn được sdụng để sắp xếp có thtự các khối cơ bn  
trong mt hàm. Thông qua phân tích bao phcode slàm gim sli. Bao phcode  
không phải là phương thuốc chữa bách bệnh, bao phcode skhông giúp nhận dạng  
các loại điều kiện, các vần đề vsdng bnh, con trli, thm định kết quchương  
trình. Phân tích bao phcode luôn sẵn có trong nhiều ngôn nglập trình phbiến như  
C++, nhưng chúng thường là các sn phẩm thba được tích hợp với bbiên dịch, và  
thường rất đắt. Như vậy phân tích bao phcode là quá trình tạo ra các ca kiểm thử để  
tìm ra các vùng chưa được thc thi, tạo thêm các ca kim thử để tăng bao phvà xác  
định lượng code bao phsgián tiếp đo chất lượng code. Dưới đây ta slần lượt phân  
tích một số đề xuất bao phnhằm đưa ra để đánh giá chất lượng của ca kiểm th: bao  
phcâu lệnh (statement coverage), bao phnhánh (branch coverage) và bao phủ đường  
đi (path coverage) .  
4.1 Phân tích phương pháp bao phcâu lệnh (statement coverage)  
Trong thiết kế test case ta luôn cgắng bao phtối đa câu lệnh trong mã nguồn  
với stest case ít nhất có th. Bao phcâu lệnh snhận ra các câu lệnh trong mt  
phương thức hay trong mt lớp đã được thc thi. Đây là một phương pháp đo đơn gin  
là tìm ra scâu lệnh đã được thc thi trong tổng scác câu lệnh mã ngun [7]. Do đó  
lợi ích của bao phcâu lệnh là khnăng tìm ra các dòng code không được thc thi. Xét  
một ví dụ đơn giản. Mã nguồn của chương trình như sau:  
public class StatementCoverage {  
public void FunctionPrint ()  
{
19  
System.out.println("This is example about statement coverage"); }  
public static void main (String [] args)  
{
StatementCoverage hi=new StatementCoverage();  
hi.FunctionPrint(); }  
}
Trong chương trình mã ngun trên ta nhận thấy có :  
o Slớp : 1 lớp (lớp StatementCoverage).  
o Sphương thức : 3 phương thức :  
Main()  
FunctionPrint()  
Println()  
o Sdòng lệnh : 6 dòng.  
Sdụng công cEMMA (open source) đo bao phdòng lệnh,(phần giới thiệu và  
cách cài đặt công cEMMA sẽ được giới thiệu ở phần phlục) kim tra các dòng mã  
ngun đã được thc thi ta được báo cáo kết xuất như sau :  
Hình 1 : Kết quả kiểm tra mã nguồn được thực thi  
20  
Kết quả kết xuất ở trên thông báo có số gói được tìm thấy là một, tổng số lớp có  
trong chương trình là một, tổng số phương thức trong lớp là ba, tổng số file thực thi là  
một và tổng số dòng đã thực thi là sáu. Với kết quả báo cáo như trên ta nhận thấy 100%  
mã nguồn đã được thực thi.  
Tuy nhiên bao phủ dòng lệnh có nhược điểm là không thể nhận ra các lỗi xảy ra  
từ cấu trúc luồng điểu khiển trong mã nguồn như là khi ghép các điều kiện hay các nhãn  
switch liên tiếp. Điều này có nghĩa là báo cáo bao phủ của ta vẫn sẽ kết suất ra kết quả  
báo cáo là 100% code đã được bao phủ nhưng thực tế thì các lỗi đã không được bắt. Ví  
dụ ta xét hàm returnInput() sau:  
public int returnInput(int x, boolean condition1, boolean condition2, boolean  
condition3)  
{
if (condition1)  
x++;  
if(condition2)  
x--;  
if(condition3)  
x=x;  
return x;  
}
Trong phương thức returnInput() trên có 7 câu lệnh trong nó. Kết qumong  
mun là giá trị đầu ra bằng với giá trị đầu vào. Ta skim tra hoạt động của hàm trên  
bằng cách thiết lập ca kiểm thvới các giá trtruyền vào hàm :  
int x=1;  
boolean condition1=true;  
boolean condition2=true;  
boolean condition3=true;  
Chương trình mã nguồn đầy đủ :  
public class Path {  
public int returnInput(int x, boolean condition1, boolean condition2, boolean  
condition3)  
21  
{if (condition1)  
x++;  
if(condition2)  
x--;  
if(condition3)  
x=x;  
return x;  
}
public static void main (String [] args)  
{int x=0;  
boolean condition1=true;  
boolean condition2=true;  
boolean condition3=true;  
Path constructorInstance=new Path();  
int  
methodReturn=constructorInstance.returnInput  
(x,condition1,  
condition2,condition3); } }  
Kim tra các câu lệnh đã được thc thi ta được có kết qubáo cáo: tổng sgói là  
1, tổng slớp là 1, tổng sfile là 1, tổng sphương thức là 3, tổng sdòng đã thc thi  
là 16. Minh hokết qubáo cáo bao phcâu lệnh như sau.  
22  
Hình 2 : Kết quả đo bao phủ dòng lệnh  
Kết qunhận được là chương trình được bao ph100% nhưng thc tế rõ ràng đã  
có một lỗi trong hàm returnInput(). Nếu ta đánh giá nhánh đầu tiên hoc nhánh thhai  
là “true” thì kết qutrlại của hàm không như mong muốn, giá trtrlại không bằng  
với giá trị đầu vào. Lỗi này thật nguy him, nếu người quản lý xem kết qubao phủ  
100%, quyết định vic test đã hoàn thành thì sn phẩm phát hành scó li.  
Như vậy có thnói bao phdòng lệnh không báo cáo vcác vòng lặp tới các  
điều kiện lặp, nó chbáo cáo phần thân của vòng lặp được thc thi hay không. Với  
ngôn ngC, C++ và Java thì hạn chế này nh hưởng tới các vòng lặp. Đối với vòng lặp  
“do-while” khi lệnh sau “do” được thc hiện ít nhất một lần, bao phdòng lệnh xem  
chúng giống với các câu lệnh không rnhánh. Bao phcâu lệnh không thphân biệt  
các nhãn switch liên tiếp[6]. Nhìn chung các ca kim thtương thích với các nhánh hơn  
là với các câu lệnh. Ta skhông thtạo ra 10 ca kim thriêng biệt cho 10 câu lệnh  
không rnhánh mà ta stạo ra mt ca để kim tra chúng. Ví d: xem xét câu lệnh “if-  
else”. Có một câu lệnh theo sau mệnh đề “if” và có 99 câu lệnh theo sau mệnh đề  
“else”. Sau khi áp dụng một trong hai đường đi có th, bao phcu lệnh cho ta kết quả  
bao phhoc 1% hoc là 99 %. Bao phcâu khi lệnh thường lờ đi vấn đề này. Trước  
những hạn chế của bao phcâu lệnh ta có thtìm đến mt kthuật bao phkhác tốt  
hơn đó là bao phnhánh.  
4.2 Phân tích phương pháp bao phủ nhánh (branch coverage)  
Mt nhánh là mt kết luận logic của mt quyết định, do vậy bao phnhánh đơn  
gin là đo kết luận logic nào đã được kim tra. Phương pháp bao phnày xem xét mã  
ngun sâu sắc hơn là phương pháp bao phcâu lệnh. Xác định snhánh có trong một  
phương thức là một vic dlàm. Kết luận kiu boolean hin nhiên có hai kết luận logic  
là “true” hoc “false” do đó chương trình có N quyết định s2N nhánh. Phương pháp  
bao phnhánh vẫn có những đơn gin như ở bao phcâu lệnh tuy nhiên nó đã loại bỏ  
được một shạn chế bao phcâu lệnh. Tổng squyết định tác động lên một  
phương thức bằng với tng snhánh cần được bao phvà nhánh entry trong phương  
thức. Quay trlại với ví d:  
public class Path {  
public int returnInput(int x, boolean condition1, boolean condition2, boolean  
condition3)  
23  
{
if(condition1)  
x++;  
if(condition2)  
x--;  
if(condition3)  
x =x;  
return x; } }  
Trong ví dnày ta scó 7 nhánh: 3 nhánh “true”, 3 nhánh “false” và một nhánh  
entry. Nhận thấy rằng để bao ph7 nhánh này ta chcần đến 2 test case như sau :  
Test case 1 :  
public void testReturnInputIntBooleanBooleanBoolean_Path1(){  
int x=0;  
boolean condition1=true;  
boolean condition2=true;  
boolean condition3=true;  
Path contructorInstance=new Path();  
Int methodReturn= constructorInstance.returnInput(x, condition1,  
condition2,condition3);  
}
Test case 2 :  
public void testReturnInputIntBooleanBooleanBoolean_Path2(){  
int x=0;  
boolean condition1=false;  
boolean condition2=false;  
boolean condition3=false;  
Path contructorInstance=new Path();  
24  
int methodReturn= constructorInstance.returnInput(x, condition1,  
condition2,condition3);  
}
Biên dịch chương trình đầy đkim tra với test case 1  
public class Path {  
public int returnInput(int x, boolean condition1, boolean condition2, boolean  
condition3)  
{
if(condition1)  
x++;  
if(condition2)  
x--;  
if(condition3)  
x=x;  
return x;  
}
public static void main(String []args)  
{
int x=0;  
boolean condition1=true;  
boolean condition2=true;  
boolean condition3=true;  
Path constructorInstance=new Path();  
int methodReturn= constructorInstance.returnInput(x, condition1,  
condition2,condition3);  
System.out.println("Ket qua mong doi : output value = input value");  
System.out.println("output value :"+methodReturn);} }  
Kết qutest 1:  
25  
Hình 3 : Kết quả thực hiện test case 1  
Cho chạy qua công cụ đo bao phta được kết quả  
Hình 4 : Kết quả đo bao phủ nhánh khi thực hiện test case 1  
Biên dịch và chạy chương trình đầy đvới test case 2  
public class Path {  
public int returnInput(int x, boolean condition1, boolean condition2, boolean  
condition3)  
{
if(condition1)  
x++;  
if(condition2)  
x--;  
if(condition3)  
x=x;  
return x;  
}
26  
public static void main(String []args)  
{
System.out.println("Test case : false-false-false");  
System.out.println("Cac cau lenh trong cac dieu kien se khong duoc thuc thi");  
int x=0;  
boolean condition1=false;  
boolean condition2=false;  
boolean condition3=false;  
Path constructorInstance=new Path();  
int methodReturn= constructorInstance.returnInput(x, condition1,  
condition2,condition3);  
System.out.println("Ket qua mong doi : output value = input value");  
System.out.println("output value :"+methodReturn); } }  
Kết qutest 2:  
Hình 5 : Kết quả khi thực hiện test case 2  
Cho chạy qua công cbao phta được kết qu:  
Hình 6 : Kết quả đo bao phủ nhánh khi thực hiện test case 2  
27  
Với 2 test case như trên thm định cyêu cu giá troutput bằng với giá trinput và  
100% nhánh đã được bao ph. Nhưng ddàng nhận thấy ngay ckhi 100% nhánh được  
bao phthì chương trình vẫn có li được tìm ra. Trong ví dvừa đề cập, ta đã không  
kim tra các trường hợp : TRUE-FALSE-TRUE hay FALSE-TRUE-TRUE…Với 3  
quyết định trong một phương thức như trên ta scó 2^3=8 quyết định. Kiểm tra 8 cách  
đi là mt điều ddàng, nhưng có những phương thức có rất nhiều quyết định thì số  
đường đi stăng theo hàm mũ. Ví dmột phương thức có ti 10 quyết định kiu  
boolean như vậy ta scó 210=1024 cách đi. Lúc này để đạt được mục tiêu bao phủ  
100% câu lệnh và 100% nhánh là điều vô cùng khó khăn và không khthi cho những  
phương thức phức tạp[11].  
4.3 Phân tích phương pháp bao phủ đường đi (path coverage)  
Mt đường đi thhiện mt luồng thực thi tkhi bắt đầu đến khi kết thúc một  
hàm. Một phương thức với N quyết định scó 2^N đường đi, và nếu phương thức có  
chứa vòng lặp thì có thcó vô số đường đi. Nhưng may thay, ta có thsdụng phương  
pháp được gọi là Cyclomatic Complexity [3] để làm gim số đưòng đi mà chúng ta cần  
kiểm tra. Cysclomatic complexity của mt phương thức là tổng squyết định duy nhất  
trong phương thức. Cysclomatic complexity giúp ta định nghĩa stuyến tính các đường  
độc lập, được gọi là các thiết lập cơ squa một phương thức. Các thiết lập cơ slà các  
thiết lập các đường đi một cách ít nhất có th. Giống như bao phnhánh, kim tra các  
đường thiết lập đảm bo kim tra từng quyết định nhưng không giống như bao phủ  
nhánh, bao phủ đường đi đảm bo kim tra tất ccác quyết định tác động động lập với  
nhau. Nói một cách khác, mi đường đi mới “flips” chính xác nhánh đã thực thi trước  
đó, các nhánh còn lại khác không thay đổi. Đây là nhân tchyếu làm cho bao phủ  
đường đi mạnh mhơn bao phnhánh, đồng thời nó còn cho phép ta nhìn nhận được  
những thay đổi khi mt nhánh tác động lên hot động của một phương thức. Ta vẫn sẽ  
sdụng ví dtrong bao phcâu lệnh và bao phnhánh để minh ho.  
public class Path {  
public int returnInput(int x, boolean condition1, boolean condition2, boolean  
condition3)  
{
if(condition1)  
x++;  
28  
if(condition2)  
x--;  
if(condition3)  
x =x;  
return x; } }  
Để đạt được bao ph100% đường đi, chúng ta cần định nghĩa các đường cơ s.  
Cysclomatic complexity của phương thức này là bn, do vậy ta cần định nghĩa bn  
tuyến đường độc lập nhau. Để thc hiện công vic này ta schọn bất kỳ đường đầu tiên  
làm đường cơ svà sau đó slật các quyết định mt lần cho ti khi ta có các đường  
thiết lập cơ s.  
Path 1: Chọn các giá tr“true” cho các quyết định, biu diễn là TTT. Đây là đường đầu  
tiên trong thiết lập cơ scủa ta.  
Path 2 : Ta stìm đường cơ stiếp theo, lật quyết định đầu tiên trong đường cơ s, đem  
lại giá trFTT, giá trta mong mun quyết định tác động.  
Path 3 : Lật quyết định th2 trong đường cơ s, đem lại cho ta giá trTFT  
Path 4 : Cuối cùng, lật quyết đnh th3 trong đường cơ s, ta được đường th4 với giá  
trTTF.  
Vậy đã có 4 đường là : TTT, FTT,TFT và TTF. Tiếp theo đây ta sxây dựng các ca  
kiểm thvà xem điu gì xy ra. Hai đường đi TTT và FFF đã được kim tra trong bao  
phnhánh.Tiến hành kiểm tra đường đi FTT và TFT:  
Test case 3: Kim tra FTT. Thc thi đoạn code sau :  
public class Path {  
public int returnInput(int x, boolean condition1, boolean condition2, boolean  
condition3)  
{
if(condition1)  
x++;  
if(condition2)  
x--;  
if(condition3)  
29  
x=x;  
return x; }  
public static void main(String []args)  
{
System.out.println("Test case : false-true-true");  
System.out.println("Cac cau lenh trong cac dieu kien 1 se khong duoc thuc thi");  
int x=0;  
boolean condition1=false;  
boolean condition2=true;  
boolean condition3=true;  
Path constructorInstance=new Path();  
int methodReturn= constructorInstance.returnInput(x, condition1,  
condition2,condition3);  
System.out.println("Ket qua mong doi : output value = input value");  
System.out.println("output value :"+methodReturn); } }  
Kết qu:  
Hình 7: Kết quả thực hiện test case 3  
Đo bao phcode ta được kết qu:  
30  

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

pdf 59 trang yennguyen 21/04/2025 100
Bạn đang xem 30 trang mẫu của tài liệu "Khóa luận Nghiên cứu về mức bao phủ của kiểm thử", để 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_nghien_cuu_ve_muc_bao_phu_cua_kiem_thu.pdf