ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
MAI THỊ KIM OANH
KHẢO SÁT MỘT SỐ PHƢƠNG PHÁP SINH BỘ
KIỂM THỬ TRONG KIỂM THỬ HỘP ĐEN
LUẬN VĂN THẠC SĨ
Hà Nội - 2011
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
MAI THỊ KIM OANH
KHẢO SÁT MỘT SỐ PHƢƠNG PHÁP SINH BỘ
KIỂM THỬ TRONG KIỂM THỬ HỘP ĐEN
Ngành
: CÔNG NGHỆ THÔNG TIN
Chuyên ngành : CÔNG NGHỆ PHẦN MỀM
Mã số
: 60 48 10
LUẬN VĂN THẠC SĨ
NGƢỜI HƢỚNG DẪN KHOA HỌC: TS. Phạm Ngọc Hùng
Hà Nội - 2011
Lời cảm ơn
Trước tiên tôi xin bày tỏ lòng biết ơn sâu sắc tới TS. Phạm Ngọc Hùng, giảng viên
Bộ môn Công nghệ phần mềm - Khoa Công nghệ thông tin - Trường Đại học Công nghệ ĐHQGHN. Trong thời gian học và làm luận văn tốt nghiệp, thầy đã dành nhiều thời gian
quý báu và tận tình chỉ bảo, hướng dẫn tôi trong việc nghiên cứu, thực hiện luận văn.
Tôi xin được cảm ơn các GS, TS đã giảng dạy tôi trong quá trình học tập và làm
luận văn. Các thầy cô đã giúp tôi hiểu thấu đáo hơn lĩnh vực mà mình nghiên cứu để có
thể vận dụng những kiến thức đó vào trong công tác của mình.
Xin cảm ơn bạn bè, đồng nghiệp trong công ty đã tạo mọi điều kiện tốt nhất cho tôi
trong suốt quá trình học tập và nghiên cứu để hoàn thành tốt bản luận văn tốt nghiệp này.
Hà nội, tháng 5 năm 2011
Học viên thực hiện
Mai Thị Kim Oanh
LỜI CAM ĐOAN
Tôi xin cam đoan rằng, đây là kết quả nghiên cứu của tôi trong đó có sự giúp đỡ rất lớn
của thầy hướng dẫn và các đồng nghiệp ở cơ quan. Các nội dung nghiên cứu và kết quả
trong đề tài này hoàn toàn trung thực.
Trong luận văn, tôi có tham khảo đến một số tài liệu của một số tác giả đã được liệt kê tại
phần tài liệu tham khảo ở cuối luận văn.
Hà nội, tháng 5 năm 2011
Học viên thực hiện
Mai Thị Kim Oanh
MỤC LỤC
Lời cảm ơn.................................................................................................................................. ii
LỜI CAM ĐOAN ...................................................................................................................... iii
MỤC LỤC ................................................................................................................................. iv
BẢNG CÁC CHỮ VIẾT TẮT ................................................................................................... vi
DANH MỤC BẢNG VÀ HÌNH VẼ.......................................................................................... vii
Chương 1. Giới thiệu .................................................................................................................. 1
1.1.
1.2.
1.3.
Đặt vấn đề ................................................................................................................. 1
Nội dung nghiên cứu ................................................................................................. 1
Cấu trúc luận văn ...................................................................................................... 2
Chương 2. Tổng quan về kiểm thử phần mềm ............................................................................. 3
2.1. Các khái niệm cơ bản về kiểm thử phần mềm ................................................................... 3
2.1.1. Định nghĩa kiểm thử phần mềm ................................................................................. 3
2.1.2. Lý do kiểm thử phần mềm ......................................................................................... 3
2.1.3. Vai trò của kiểm thử phần mềm.................................................................................. 4
2.1.4. Mục tiêu của kiểm thử phần mềm .............................................................................. 4
2.2. Tiến trình thực hiện kiểm thử ............................................................................................ 4
2.3. Các phương pháp kiểm thử phần mềm .............................................................................. 5
2.3.1. Kiểm thử hộp trắng .................................................................................................... 5
2.3.2. Kiểm thử hộp đen ...................................................................................................... 6
2.4. Các cấp độ kiểm thử phần mềm ........................................................................................ 7
2.4.1. Kiểm thử đơn vị......................................................................................................... 8
2.4.2. Kiểm thử tích hợp ...................................................................................................... 9
2.4.3. Kiểm thử hệ thống ....................................................................................................11
2.4.4. Kiểm thử chấp nhận sản phẩm ................................................................................. 12
Chương 3. Khảo sát các phương pháp sinh bộ kiểm thử ............................................................ 14
3.1. Phương pháp kiểm thử giá trị biên .................................................................................. 14
3.1.1. Kỹ thuật cơ bản ....................................................................................................... 14
3.1.2. Kiểm thử biên mở rộng ............................................................................................ 17
3.1.3. Kiểm thử trường hợp xấu nhất ................................................................................. 18
3.1.4. Kết hợp kiểm thử trường hợp xấu nhất và kiểm thử biên mở rộng ............................ 19
3.1.5. Một số ví dụ về miền giá trị các kiểu biến ................................................................ 20
3.1.6. Nhận xét .................................................................................................................. 22
3.2. Phương pháp kiểm thử dựa trên phân hoạch tương đương ............................................... 23
3.2.1. Phân lớp tương đương yếu ....................................................................................... 25
3.2.2. Phân lớp tương đương mạnh .................................................................................... 25
3.2.3. Phân lớp tương đương truyền thống ......................................................................... 26
3.2.4. Nhận xét .................................................................................................................. 27
3.3. Phương pháp kiểm thử dựa trên bảng quyết định ............................................................ 28
3.3.1. Định nghĩa bảng quyết định ..................................................................................... 28
3.3.2. Áp dụng bảng quyết định cho bài toán Tam giác ...................................................... 30
3.3.3. Áp dụng bảng quyết định cho bài toán Next Date..................................................... 32
3.3.3.1. Phép thử đầu tiên cho bài toán NextDate ........................................................... 35
3.3.3.2. Phép thử thứ hai cho bài toán NextDate ............................................................ 36
3.3.3.3. Phép thử thứ ba cho bài toán NextDate ............................................................. 38
3.3.4. Nhận xét .................................................................................................................. 42
3.4. So sánh các phương pháp ............................................................................................... 43
Chương 4. Ứng dụng................................................................................................................. 46
4.1. Đặc tả bài toán................................................................................................................ 46
4.2. Thiết kế ca kiểm thử cho bài toán có các biến độc lập ..................................................... 46
4.2.1. Bài toán ................................................................................................................... 46
4.2.2. Áp dụng các phương pháp kiểm thử để sinh ca kiểm thử .......................................... 47
4.2.2.1. Phương pháp phân tích giá trị biên cơ bản ......................................................... 47
4.2.2.2. Phương pháp phân tích giá trị biên mở rộng ...................................................... 49
4.2.2.3. Phương pháp phân lớp tương đương yếu ........................................................... 50
4.2.2.4. Phương pháp phân lớp tương đương mạnh ........................................................ 50
4.2.2.5. Phương pháp phân lớp tương đương truyền thống ............................................. 51
4.3. Thiết kế ca kiểm thử cho bài toán có các biến phụ thuộc. ................................................ 54
4.3.1. Bài toán ................................................................................................................... 54
4.3.2. Áp dụng các phương pháp kiểm thử để sinh ca kiểm thử .......................................... 55
4.3.2.1. Phương pháp phân tích giá trị biên cơ bản ......................................................... 55
4.3.2.2. Phương pháp phân tích giá trị biên mở rộng ...................................................... 56
4.3.2.3. Phương pháp phân lớp tương đương yếu ........................................................... 56
4.3.2.4. Phương pháp phân lớp tương đương mạnh ........................................................ 57
4.3.2.5. Phương pháp phân lớp tương đương truyền thống ............................................. 57
4.3.2.6. Phương pháp phân tích bảng quyết định ............................................................ 58
Chương 5. Kết luận ................................................................................................................... 60
Tài liệu tham khảo .................................................................................................................... 62
BẢNG CÁC CHỮ VIẾT TẮT
Viết tắt
Tên đầy đủ
AT
Acceptance Test
BVT
Boundary Value Testing
DT
Decision Table
EP
Equivalence Partitioning
ST
System Test
UT
Unit Test
DANH MỤC BẢNG VÀ HÌNH VẼ
Hình 2.1. Tiến trình thực hiện kiểm thử. ...................................................................................... 5
Hình 2.2. Sơ đồ các cấp độ kiểm thử. .......................................................................................... 8
Hình 2.3. Kiểm thử bottom up. .................................................................................................. 10
Hình 2.4. Kiểm thử top-down. ....................................................................................................11
Hình 3.1. Các cặp giá trị biên cơ bản. ........................................................................................ 15
Hình 3.2. Mô tả các giá trị biên cơ bản. ..................................................................................... 15
Bảng 3.1 Quy tắc tính tiền được vay thế chấp ............................................................................ 16
Hình 3.3. Mã nguồn bài toán tính tiền được vay thế chấp. ......................................................... 16
Bảng 3.2 Danh sách ca kiểm thử với phương pháp phân tích giá trị biên cơ bản ........................ 17
Hình 3.4. Phương pháp kiểm thử biên mở rộng. ........................................................................ 18
Bảng 3.3 Các ca kiểm thử với phương pháp kiểm thử biên mở rộng .......................................... 18
Hình 3.5. Các biên kiểm thử trong trường hợp xấu nhất. ........................................................... 19
Bảng 3.4 Các ca kiểm thử với phương pháp kiểm thử trong trường hợp xấu nhất ...................... 19
Hình 3.6. Kết hợp kiểm thử trường hợp xấu nhất và kiểm thử mở rộng. .................................... 20
Hình 3.7. So sánh các kỹ thuật kiểm thử giá trị biên. ................................................................. 20
Hình 3.8. Miền giá trị số nguyên. .............................................................................................. 21
Hình 3.9. Miền giá trị kiểu tiền tệ. ............................................................................................. 21
Hình 3.10. Miền giá trị kiểu nhiệt độ. ........................................................................................ 21
Hình 3.11. Miền giá trị kiểu String. ........................................................................................... 22
Hình 3.12. Miền giá trị kiểu ngày tháng năm. ............................................................................ 22
Hình 3.13. Trực quan mô tả phân lớp tương đương.................................................................... 23
Bảng 3.5 Danh sách ca kiểm thử sinh ra theo phân lớp tương đương yếu ................................... 25
Bảng 3.6 Các ca kiểm thử sinh ra theo phân lớp tương đương mạnh .......................................... 26
Bảng 3.7 Miền dữ liệu phân lớp tương đương yếu ..................................................................... 27
Bảng 3.8 Danh sách ca kiểm thử sinh ra theo phân lớp tương đương truyền thống ..................... 27
Bảng 3.9 Các thành phần của một bảng quyết định.................................................................... 28
Bảng 3.10 Ví dụ một bảng quyết định ....................................................................................... 29
Bảng 3.11 Bảng quyết định cho bài toán “Tam giác” [6]............................................................ 30
Bảng 3.12 Bảng quyết định được làm mịn cho bài toán “Tam giác” [6] ..................................... 31
Bảng 3.13 Bảng quyết định với tổng số các luật [6] ................................................................... 31
Bảng 3.14 Các trường hợp kiểm thử cho bài toán “Tam giác” [6] .............................................. 32
Bảng 3.15 Bảng quyết định với các loại trừ lẫn nhau ................................................................. 33
Bảng 3.16 Tổng số luật cho một bảng quyết định với các điều kiện loại trừ lẫn nhau ................. 33
Bảng 3.17 Phiên bản mở rộng của bảng quyết định 3.16 [6] ...................................................... 34
Bảng 3.18 Các điều kiện loại trừ lẫn nhau với các luật không xảy ra [6] .................................... 34
Bảng 3.19 Một bảng quyết định dư thừa [6] .............................................................................. 34
Bảng 3.20 Một bảng quyết định không nhất quán [6] ................................................................ 35
Bảng 3.21 Bảng quyết định cho thử nghiệm đầu tiên với 256 luật [6] ........................................ 36
Bảng 3.22 Bảng quyết định phép thử thứ 2 với 36 luật [6] ......................................................... 38
Bảng 3.23 Bảng quyết định cho hàm “NextDate” [6] ................................................................ 40
Bảng 3.24 Bảng quyết định được thu gọn cho hàm “NextDate” [6] ........................................... 41
Bảng 3.25 Các trường hợp kiểm thử cho bài toán “NextDate” [6] ............................................. 42
Hình 3.14. So sánh tính hiệu quả của các phương pháp kiểm thử. .............................................. 44
Hình 3.15. So sánh tính hiệu quả của các phương pháp kiểm thử. .............................................. 44
Bảng 3.26 Lựa chọn các phương pháp kiểm thử. ....................................................................... 45
Hình 4.1. Giao diện bài toán “Nhập điểm cho sinh viên”. .......................................................... 47
Bảng 4.1 Các giá trị biên cơ bản cho bài toán “Nhập điểm sinh viên” ........................................ 48
Bảng 4.2 Các trường hợp kiểm thử biên cơ bản cho bài toán “Nhập điểm sinh viên” ................. 48
Bảng 4.3 Các giá trị biên mở rộng cho bài toán “Nhập điểm sinh viên” ..................................... 49
Bảng 4.4 Kết quả kiểm thử biên mở rộng cho bài toán “Nhập điểm sinh viên” .......................... 49
Bảng 4.5 Các trường hợp kiểm thử cho phân lớp tương tương yếu ............................................ 50
Bảng 4.6 Kết quả kiểm thử theo phương pháp phân lớp tương đương mạnh .............................. 51
cho bài toán “Nhập điểm sinh viên” .......................................................................................... 51
Bảng 4.7 Các trường hợp kiểm thử cho phân lớp tương tương ................................................... 52
truyền thống với bài toán “Nhập điểm sinh viên” ...................................................................... 52
Bảng 4.8 So sánh các phương pháp sinh ca kiểm thử cho bài toán “Nhập điểm sinh viên” ......... 53
Hình 4.2. Giao diện bài toán “NextDate”................................................................................... 55
Bảng 4.9 Các giá trị biên cơ bản cho bài toán “NextDate” ......................................................... 55
Bảng 4.10 Kết quả kiểm thử theo phương pháp phân tích giá trị biên cơ bản cho bài toán
“NextDate” ............................................................................................................................... 56
Bảng 4.11 Các giá trị biên mở rộng cho bài toán “NextDate” .................................................... 56
Bảng 4.12 Kết quả kiểm thử giá trị biên mở rộng cho bài toán “NextDate” ............................... 56
Bảng 4.13 Các trường hợp kiểm thử cho phân lớp tương tương yếu với bài toán “NextDate” .... 57
Bảng 4.14 Kết quả kiểm thử theo phương pháp phân lớp tương tương mạnh với bài toán
“NextDate” ............................................................................................................................... 57
Bảng 4.15 Kết quả kiểm thử theo phương pháp phân lớp tương truyền thống với bài toán
“NextDate” ............................................................................................................................... 58
Bảng 4.16 Các trường hợp kiểm thử cho phân lớp tương tương truyền thống với bài toán
“NextDate” ............................................................................................................................... 58
Bảng 4.17 Kết quả kiểm thử dựa theo bảng quyết định cho bài toán “NextDate” ....................... 58
Bảng 4.18 So sánh các phương pháp sinh ca kiểm thử cho bài toán “NextDate” ........................ 59
1
Chƣơng 1. Giới thiệu
1.1. Đặt vấn đề
Kiểm thử phần mềm [1] là một trong những hoạt động quan trọng trong tiến trình phát
triển phần mềm. Nó góp một phần rất lớn trong việc đánh giá chất lượng của một phần
mềm và là quy trình bắt buộc trong các dự án phát triển phần mềm. Hiện nay, hai kỹ thuật
chính đang được áp dụng rộng rãi trong kiểm thử phần mềm là kiểm thử hộp trắng và
kiểm thử hộp đen [1]. Tuy nhiên, trong thực tế hiện nay, các công ty phần mềm thường
tập trung nguồn lực vào kiểm thử hộp đen do kỹ thuật kiểm thử hộp trắng rất tốn kém vì
liên quan đến phân tích mã nguồn và yêu cầu người kiểm thử phải có hiểu biết sâu sắc về
hệ thống, có khả năng phân tích cấu trúc dữ liệu cũng như am hiểu nhất định các vấn đề
kỹ thuật của chương trình.
Kiểm thử hộp đen là một phương pháp quan trọng trong kiểm thử phần mềm. Để
thực thi được hoạt động kiểm thử này chúng ta cần sinh bộ kiểm thử hay chính là tập hợp
của các ca kiểm thử. Chất lượng của hoạt động kiểm thử hoàn toàn phụ thuộc vào chất
lượng của bộ kiểm thử này. Tuy nhiên, các công ty phần mềm hiện nay chủ yếu sử dụng
phương pháp phân hoạch tương đương để sinh bộ kiểm thử. Phương pháp này sẽ rất tốn
kém khi số lượng đầu vào của một chức năng cần kiểm thử là lớn. Hơn nữa, phương pháp
này chỉ hiệu quả với giả thiết là các đầu vào hoàn toàn độc lập nhau. Với những bài toán
có đầu vào phụ thuộc lẫn nhau, phương pháp phân hoach tương đương khó phát hiện ra
các lỗi gây ra bởi những phụ thuộc này. Để giải quyết bài toán này, chúng ta cần khảo sát
các phương pháp sinh bộ kiểm thử và đưa ra gợi ý cho các công ty trong việc lựa chọn
hay kết hợp các phương pháp để đảm bảo chất lượng phần mềm.
1.2. Nội dung nghiên cứu
Luận văn tập trung vào việc nghiên cứu và khảo sát một số phương pháp sinh bộ kiểm thử
thường được sử dụng trong kiểm thử hộp đen như: kiểm thử giá trị biên, kiểm thử dựa
trên phân hoạch tương đương và kiểm thử dựa trên bảng quyết định. Với mỗi phương
pháp, luận văn sẽ đưa ra các tiêu chí sinh bộ kiểm thử, đồng thời đánh giá được ưu điểm,
nhược điểm và khả năng phát hiện lỗi của từng phương pháp theo bộ kiểm thử được sinh
ra. Từ kết quả của quá trình khảo sát, luận văn sẽ đưa ra những được gợi ý cho từng loại
bài toán, từng hệ thống phù hợp với phương pháp kiểm thử nào.
2
Luận văn cũng sẽ tiến hành thử nghiệm các phương pháp kiểm thử nêu trên cho hai
bài toán cụ thể và đưa ra các phân tích đánh giá cho các phương pháp kiểm thử đã khảo
sát trong phạm vi luận văn này.
1.3. Cấu trúc luận văn
Các phần còn lại của luận văn có cấu trúc như sau:
Chương 2 trình bày các kiến thức tổng quan nhất về kiểm thử phần mềm bao gồm:
các khái niệm cơ bản về kiểm thử phần mềm (định nghĩa, lý do, vai trò và mục tiêu của
kiểm thử), tiến trình thực hiện kiểm thử bao gồm những giai đoạn nào, các công việc cần
thực hiện trong suốt quá trình kiểm thử là gì và các cấp độ kiểm thử trong kiểm thử phần
mềm bao gồm: kiểm thử đơn vị, kiểm thử tích hợp, kiểm thử hệ thống và kiểm thử chấp
nhận sản phẩm. Chương này cũng sẽ trình bày các phương pháp kiểm thử chính trong
kiểm thử phần mềm bao gồm kiểm thử hộp trắng và kiểm thử hộp đen.
Các phương pháp sinh bộ kiểm thử trong kiểm thử hộp đen sẽ được khảo sát trong
chương 3 của luận văn bao gồm ba phương pháp sau: phương pháp phân tích giá trị biên,
phương pháp phân hoạch tương đương và phương pháp kiểm thử dựa trên bảng quyết
định.
Việc ứng dụng xây dựng các ca kiểm thử cho bài toán cụ thể, áp dụng các phương
pháp đã khảo sát ở chương 3 sẽ được trình bày trong nội dung của chương 4.
Chương 5 là chương cuối cùng với nội dung tóm tắt kết quả đã đạt được của luận
văn, trình bày những hạn chế và hướng nghiên cứu phát triển trong tương lai.
3
Chƣơng 2. Tổng quan về kiểm thử phần mềm
2.1. Các khái niệm cơ bản về kiểm thử phần mềm
2.1.1. Định nghĩa kiểm thử phần mềm
Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay thành phần dưới những điều
kiện xác định, quan sát và ghi lại các kết quả, và đánh giá một khía cạnh nào đó của hệ
thống hay thành phần đó (Theo Bảng chú giải thuật ngữ chuẩn IEEE của Thuật ngữ kỹ
nghệ phần mềm- IEEE Standard Glossary of Software Engineering Terminology) [5].
Kiểm thử phần mềm là quá trình thực thi một chương trình với mục đích tìm lỗi.
(Theo “The Art of Software Testing” – Nghệ thuật kiểm thử phần mềm). Kiểm thử phần
mềm theo Glen Myers là quá trình vận hành chương trình để tìm ra lỗi [7].
Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm
trong đúng môi trường chúng dự định sẽ được triển khai nhằm cung cấp cho người có lợi
ích liên quan những thông tin về chất lượng của sản phẩm hay dịch vụ phầm mềm ấy.
Mục đích của kiểm thử phần mềm là tìm ra các lỗi hay khuyết điểm phần mềm nhằm đảm
bảo hiệu quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau.
Có thể định nghĩa một cách dễ hiểu như sau. Kiểm thử phần mềm là một tiến trình
hay một tập hợp các tiến trình được thiết kế để đảm bảo mã hóa máy tính thực hiện theo
cái mà chúng đã được thiết kế để làm, và không thực hiện bất cứ thứ gì không mong
muốn. Đây là một pha quan trọng trong quá trình phát triển hệ thống, giúp cho người xây
dựng hệ thống và khách hàng thấy được hệ thống mới đã đáp ứng yêu cầu đặt ra hay
chưa.
2.1.2. Lý do kiểm thử phần mềm
Mặc dù kiểm thử phần mềm là một quy trình bắt buộc trong vòng đời phát triển phần
mềm nhưng hầu hết các phần mềm hiện tại vẫn còn lỗi lọt đến khách hàng hoặc được
chính người sử dụng tìm ra trong quá trình kiểm thử chấp nhận sản phẩm (acceptance
test). Nguyên nhân một phần lớn là do kiểm thử viên chưa làm đúng quy trình trong quá
trình xây dựng các ca kiểm thử. Vì vậy chúng ta cần hiểu rõ lý do của việc kiểm thử để từ
đó thấy được ý nghĩa của việc xây dựng ca kiểm thử hiệu quả. Có một số lý do chính của
hoạt động kiểm thử phần mềm như sau. Lý do thứ nhất, về khía cạnh xem xét sản phẩm,
người phát triển muốn kiểm tra phần mềm như một phần tử của hệ thống hoạt động thì cần
phải thực hiện thông qua hoạt động kiểm thử phẩn mềm. Lý do quan trọng thứ hai là khi
4
thực hiện tốt hoạt động kiểm thử, chúng ta sẽ hạn chế được chi phí cho các thất bại do lỗi
gây ra sau này. Đây chính là hiệu quả của hoạt động kiểm thử mang lại và cũng chính là mục
tiêu của người phát triển hệ thống khi thực hiện hoạt động kiểm thử phần mềm. Ngoài ra
còn có một lý do liên quan đến giải pháp phát triển, khi thực hiện hoạt động kiểm thử, đội
phát triển sẽ có kế hoạch tốt nâng cao chất lượng suốt quá trình phát triển phần mềm [1].
2.1.3. Vai trò của kiểm thử phần mềm
Thực tế đã chứng minh hoạt động kiểm thử có vai trò vô cùng quan trọng trong tiến trình
phát triển phần mềm. Vai trò đó được thể hiện qua chi phí và hiệu quả của hoạt động kiểm
thử mang lại. Về mặt chi phí, hoạt động kiểm thử chiếm khoảng 40% tổng công sức phát
triển phần mềm và chiếm tới hơn 30% tổng thời gian phát triển. Ngoài ra với các phần mềm
có ảnh hưởng tới sinh mạng thì chi phí kiểm thử có thể gấp từ 3 đến 5 lần tổng các chi phí
khác cộng lại [1]. Vai trò của hoạt động kiểm thử phần mềm còn thể hiện ở hiệu quả mà nó
mang lại, khi việc kiểm thử phần mềm đạt kết quả tốt sẽ có hiệu quả rất lớn trong việc giảm
chi phí phát triển và làm tăng độ tin cậy của sản phẩm phần mềm.
2.1.4. Mục tiêu của kiểm thử phần mềm
Có thể nói mục tiêu của hoạt động kiểm thử phần mềm là thiết kế được những trường hợp
kiểm thử để có thể phát hiện một cách có hệ thống những loại lỗi khác nhau và thực hiện
công việc đó với lượng thời gian và tài nguyên tối ưu nhất. Tuy nhiên kiểm thử phần mềm
không thể khẳng định rằng phần mềm không còn khiếm khuyết. Như vậy ta có thể kết luận,
mục tiêu đầu tiên và trước mắt của hoạt động kiểm thử phần mềm là tạo ra các ca kiểm thử
để tìm ra lỗi của phần mềm. Mục tiêu cuối cùng và cũng là mục tiêu mà người phát triển
hướng tới là kiểm thử phần mềm sẽ giúp cho người phát triển có một chương trình tốt, chi
phí thấp nhưng vẫn đảm bảo được chất lượng phần mềm [1].
2.2. Tiến trình thực hiện kiểm thử
Trước khi tìm hiểu quá trình tạo và thực thi các ca kiểm thử được thực hiện như thế nào,
chúng ta cần thấy được cái nhìn tổng quát nhất về tiến trình thực hiện kiểm thử như mô tả
trong hình 2.1 [1].
5
Hình 2.1. Tiến trình thực hiện kiểm thử.
Tiến trình này mô tả chi tiết quá trình thực hiện kiểm thử phần mềm bao gồm các giai
đoạn như sau. Trước tiên, chúng ta cần lập kế hoạch kiểm thử. Thông thường kế hoạch
kiểm thử bao gồm một số thông tin chính như phạm vi kiểm thử, các chức năng cần kiểm
thử, phương pháp kiểm thử, mức độ kiểm thử, lịch biểu và nhân công tương ứng,… Sau
khi hoàn thành kế hoạch kiểm thử, chúng ta tiến hành tạo các ca kiểm thử dựa vào đặc tả
của hệ thống, song song với quá trình tạo ca kiểm thử thì các kiểm thử viên cũng cần
chuẩn bị môi trường kiểm thử, dữ liệu đầu vào tương ứng với từng ca kiểm thử. Dữ liệu
kiểm thử sẽ được dùng trong giai đoạn tiếp theo khi kiểm thử viên tiến hành thực hiện
hoạt động kiểm thử phần mềm dựa trên các ca kiểm thử đã được xây dựng từ giai đoạn
trước đó. Dựa vào kết quả thực tế khi chạy chương trình và so sánh với kết quả mong đợi,
kiểm thử viên sẽ đưa ra được kết luận cuối cùng, tạo báo cáo kiểm thử để hoàn thành quá
trình kiểm thử.
2.3. Các phƣơng pháp kiểm thử phần mềm
Hiện nay, có hai phương pháp chính đang được áp dụng rộng rãi trong kiểm thử phần
mềm là kiểm thử hộp trắng và kiểm thử hộp đen. Chúng ta sẽ đi vào tìm hiểu cụ thể hai
phương pháp này trong mục 2.3.1 và 2.3.2.
2.3.1. Kiểm thử hộp trắng
Kiểm thử hộp trắng (white box testing) là loại kiểm thử hướng logic nhằm mục đích khảo
sát cấu trúc bên trong của chương trình. Chiến lược này xuất phát từ dữ liệu kiểm thử
bằng sự kiểm thử tính logic của chương trình. Kiểm thử viên sẽ truy cập vào cấu trúc dữ
liệu và giải thuật bên trong chương trình và cả mã lệnh thực hiện chúng.
6
Đối tượng của kiểm thử hộp trắng là mã nguồn chương trình, cụ thể là các mô đun
đơn vị. Kiểm thử hộp trắng tập trung vào việc kiểm tra các chi tiết thủ tục (logic xử lý,
thuật toán), các con đường logic (luồng điều khiển) và các trạng thái của chương trình (dữ
liệu cục bộ) [1]. Hiện nay, có một số kỹ thuật hay được sử dụng trong kiểm thử hộp trắng
như: đồ thị dòng (do Tom McCabe đưa ra đầu tiên), ma trận kiểm thử (số đường đi, trọng
số trên từng cạnh), điều khiển theo dòng dữ liệu, các cấu trúc chu trình – giá trị đặc trưng.
Phương pháp kiểm thử hộp trắng cũng có thể được sử dụng để đánh giá sự hoàn thành
của một bộ kiểm thử mà được tạo cùng với các phương pháp kiểm thử hộp đen (sẽ trình
bày trong mục 2.3.2). Điều này cho phép các nhóm phát triển phần mềm khảo sát các
phần của một hệ thống ít khi được kiểm tra và đảm bảo rằng những điểm chức năng quan
trọng nhất đã được kiểm thử.
2.3.2. Kiểm thử hộp đen
Kiểm thử hộp đen (black box testing) là một trong những phương pháp kiểm thử quan trọng
nhất trong tiến trình kiểm thử phần mềm. Kiểm thử hộp đen cũng được gọi là kiểm thử
hướng dữ liệu hay hướng vào/ra. Phương pháp này xem chương trình như là một “hộp đen”,
kiểm thử viên chỉ quan tâm đến đầu vào và đầu ra của chương trình mà không hề biết cấu
trúc nội tại bên trong hệ thống và các thành phần cúa nó hoạt động ra sao. Thay vào đó, tập
trung vào tìm các trường hợp mà chương trình không thực hiện theo các đặc tả của nó. Hơn
nữa, kiểm thử hộp đen còn bổ sung cho phương pháp kiểm thử hộp trắng để phát hiện ra các
lỗi khác nhau mà kiểm thử hộp trắng không phát hiện ra được.
Phương pháp này tập trung kiểm thử về mặt yêu cầu chức năng của sản phẩm. Đối
tượng của kiểm thử hộp đen là các module tích hợp, các hệ con và toàn bộ hệ thống. Thông
qua giao diện của chương trình và dựa vào các yêu cầu đặc tả, điều kiện vào/ra và cấu trúc
dữ liệu, kiểm thử viên sẽ kiểm tra xem các chức năng của chương trình đã đủ và vận hành
đúng theo đặc tả hệ thống hay chưa.
Với phạm vi giới hạn của đề tài, trong mục này, luận văn xin giới thiệu một số phương
pháp kiểm thử hộp đen thông dụng hiện nay, tuy nhiên luận văn sẽ không đi vào trình bày
chi tiết cho từng phương pháp.
Phân lớp tương đương – Equivalence partitioning.
Phân tích giá trị biên – Boundary value analysis.
Kiểm thử mọi cặp – All-pairs testing.
Kiểm thử fuzz – Fuzz testing.
Kiểm thử dựa trên mô hình – Model-based testing.
7
Ma trận dấu vết – Traceability matrix.
Kiểm thử thăm dò – Exploratory testing.
Kiểm thử dựa trên đặc tả – Specification-base testing [1].
Ƣu điểm và nhƣợc điểm của kiểm thử hộp đen
Kiểm thử hộp đen không có mối liên quan nào tới mã lệnh, và kiểm thử viên chỉ cần
quan tâm đầu ra của chương trình có đúng theo đặc tả hay không. Áp dụng các phương pháp
sinh ca kiểm thử trong kiểm thử hộp đen sẽ giúp các kiểm thử viên tìm ra lỗi mà những lập
trình viên đã không tìm thấy ở giai đoạn trước. Tuy nhiên do kiểm thử viên không biết các
phần mềm được kiểm tra thực sự được xây dựng thế nào nên sẽ có nhiều hạn chế trong việc
tập trung vào kiểm thử cái gì. Đó là lý do giải thích tại sao có nhiều trường hợp mà một
kiểm thử viên hộp đen viết rất nhiều các ca kiểm thử để kiểm tra một thứ gì đó mà đáng lẽ
có thể chỉ cần kiểm tra bằng một ca kiểm thử duy nhất, hoặc một số phần của chương trình
không được kiểm tra chu đáo.
Do vậy, kiểm thử hộp đen có ưu điểm của “ một sự đánh giá khách quan”, không phụ
thuộc vào quan điểm của người xây dựng chương trình mà thiên về cách nhìn của người sử
dụng nhiều hơn, mặt khác nó lại có nhược điểm của “thăm dò mù” nên đôi khi hơi tốn thời
gian và chi phí cho việc kiểm thử nếu không chọn được phương pháp/chiến lược kiểm thử
phù hợp và hiệu quả.
2.4. Các cấp độ kiểm thử phần mềm
Theo mô hình thác nước trình bày trong hình 2.2 thì kiểm thử phần mềm gồm có các
cấp độ: kiểm thử đơn vị, kiểm thử tích hợp, kiểm thử hệ thống và kiểm thử chấp nhận sản
phẩm. Mỗi cấp độ kiểm thử sẽ có một số đặc điểm riêng và phù hợp với từng giai đoạn của
quá trình xây dựng và phát triển phần mềm.
Dựa vào hình 2.2 bên dưới ta thấy tương ứng với mỗi giai đoạn phát triển phần mềm sẽ
có một cấp độ kiểm thử phù hợp với giai đoạn đó. Mỗi cấp độ kiểm thử được thực hiện theo
một thứ tự nhất định và có mục tiêu cụ thể cho từng giai đoạn. Trong thực tế, để việc tạo và
thực thi các ca kiểm thử đạt kết quả cao thì quá trình phân tích, thiết kế của hoạt động kiểm
thử cần được làm song song và phù hợp với các giai đoạn phát triển phần mềm. Hơn nữa,
kiểm thử viên nên tham gia vào quá trình xem xét tài liệu càng sớm càng tốt để đưa ra kế
hoạch và chiến lược kiểm thử phù hợp nhất cho hệ thống [4].
8
Hình 2.2. Sơ đồ các cấp độ kiểm thử.
2.4.1. Kiểm thử đơn vị
Một đơn vị (unit) là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm thử được. Ví dụ,
các hàm, thủ tục, lớp hay phương thức đều có thể được xem là đơn vị. Các thành phần đơn
vị này sẽ được kiểm thử tại cấp độ kiểm thử mức đơn vị trong quy trình kiểm thử phần
mềm.
Kiểm thử đơn vị hay còn gọi là unit testing (UT), là cấp độ kiểm thử cho phép bạn
kiểm tra, tìm kiếm lỗi bên trong chức năng của chương trình phần mềm (ví dụ module, đối
tượng, lớp,..). Thông thường việc kiểm thử mức module đơn vị sẽ do lập trình viên thực
hiện trước khi nó được chuyển giao sang giai đoạn tích hợp với các module khác. Công
đoạn này cần được thực hiện càng sớm càng tốt trong giai đoạn viết mã nguồn và xuyên
suốt chu kỳ phát triển phần mềm.
Trước khi thực hiện UT, kiểm thử viên nên xác định quan điểm thực hiện kiểm thử rõ
ràng. Quan điểm kiểm thử ở đây được hiểu là các tiêu chí cũng như các đối tượng sẽ được
kiểm thử trong giai đoạn này. Trong thực tế, UT nên kiểm tra được các đối tượng sau.
Kiểm tra, xác minh hoạt động của các tham số với giá trị bình thường (norm).
Kiểm tra, xác minh hoạt động của các tham số với giá trị biên.
Kiểm tra, xác minh hoạt động của các tham số với giá trị không nằm trong miền giới
hạn (abnormal).
Kiểm tra sự hoạt động của các vòng lặp.
Kiểm tra sự hoạt động của các hàm đệ quy.
Kiểm tra sự truy cập cấu trúc dữ liệu/truy cập file.
Đảm bảo rằng tất các các câu lệnh, các nhánh lệnh được thực thi đúng.
9
Vì đơn vị được chọn để kiểm tra thường có kích thước nhỏ và chức năng hoạt động
đơn giản, chúng ta không khó khăn gì trong việc tổ chức kiểm thử, ghi nhận và phân tích kết
quả kiểm thử. Nếu phát hiện lỗi, việc xác định nguyên nhân và khắc phục cũng tương đối dễ
dàng vì chỉ khoanh vùng trong một đơn thể đang được kiểm tra. Thực tế cho thấy thời gian
tốn cho hoạt động kiểm thử đơn vị sẽ được đền bù bằng việc tiết kiệm rất nhiều thời gian và
chi phí cho việc kiểm thử và sửa lỗi ở các mức kiểm thử sau đó.
Thông thường, kiểm thử đơn vị đòi hỏi kiểm thử viên có kiến thức về thiết kế và mã
nguồn của chương trình. Mục đích của UT là đảm bảo thông tin được xử lý và xuất khỏi đơn
vị là chính xác trong mối tương quan với dữ liệu nhập và chức năng của đơn vị đó. Điều này
thường đòi hỏi tất cả các nhánh bên trong thành phần đơn vị đều phải được kiểm tra để phát
hiện nhánh phát sinh lỗi. Một nhánh thường là một chuỗi các lệnh được thực thi trong một
đơn vị. Thực tế, việc chọn lựa các nhánh để đơn giản hóa quá trình kiểm thử và quét hết
thành phần đòi hỏi kiểm thử viên phải có kỹ thuật, đôi khi phải dùng thuật toán để chọn lựa.
Cùng với các mức độ kiểm thử khác, kiểm thử đơn vị cũng đòi hỏi phải chuẩn bị trước
các ca kiểm thử hoặc kịch bản kiểm thử, trong đó chỉ định rõ dữ liệu đầu vào, các bước thực
hiện và dữ liệu đầu ra mong muốn. Các ca kiểm thử và kịch bản kiểm thử này nên được giữ
lại để tái sử dụng.
Thực tế đã chứng minh rằng, với kiểm thử mức đơn vị, chúng ta có thể thực thi việc
kiểm thử với sự hỗ trợ của các công cụ phát triển như framework hoặc công cụ gỡ lỗi
(debugging tool) [4]. Thông thường, số lượng lỗi tìm ra ở giai đoạn kiểm thử mức đơn vị có
thể chiếm hơn 25% tổng số lượng lỗi của toàn bộ dự án.
2.4.2. Kiểm thử tích hợp
Kiểm thử tích hợp - intergration test là sự kết hợp các thành phần của một ứng dụng và kiểm
thử chúng như một ứng dụng đã hoàn thành. Trong khi UT kiểm tra các thành phần và đơn
vị riêng lẻ thì kiểm thử tích hợp kết hợp chúng lại với nhau và kiểm tra sự giao tiếp và tương
tác giữa chúng. Kiểm thử tích hợp là giai đoạn tiếp theo của kiểm thử đơn vị, nó được thực
hiện bởi nhóm kiểm thử viên và tập trung vào việc tích hợp các thành phần đơn vị của hệ
thống. Trước khi thực thi kiểm thử tích hợp chúng ta phải đảm bảo rằng các thành phần đơn
vị đã thực hiện UT thành công.
Mục tiêu chính của kiểm thử tích hợp là phát hiện lỗi giao tiếp xảy ra giữa các đơn vị,
tích hợp các thành phần đơn vị đơn lẻ thành các hệ thống nhỏ và cuối cùng là tích hợp thành
một hệ thống hoàn chỉnh chuẩn bị cho kiểm thử ở mức hệ thống. Trong UT, lập trình viên cố
gắng phát hiện lỗi liên quan đến chức năng và cấu trúc nội tại của đơn vị. Có một số phép
kiểm thử đơn giản trên giao tiếp giữa đơn vị với các thành phần liên quan khác, tuy nhiên
mọi giao tiếp liên quan đến thành phần đơn vị chỉ thật sự được kiểm tra đầy đủ khi các đơn
vị này được tích hợp với nhau trong khi thực hiện kiểm thử tích hợp.
10
Trừ một số ít trường hợp ngoại lệ, còn lại kiểm thử tích hợp chỉ nên thực hiện trên
những đơn vị đã được kiểm tra cẩn thận trước đó bằng UT, và tất cả các lỗi mức đơn vị đã
được sửa chữa. Một số người hiểu sai rằng thành phần đơn vị một khi đã qua giai đoạn UT
với các giao tiếp giả lập thì không cần phải thực hiện kiểm thử tích hợp nữa. Thực tế việc
tích hợp giữa các đơn vị dẫn đến những tình huống hoàn toàn khác. Một chiến lược cần
quan tâm trong kiểm thử tích hợp là nên tích hợp dần từng đơn vị. Một thành phần đơn vị tại
một thời điểm được tích hợp vào một nhóm các đơn vị khác đã tích hợp trước đó và đã hoàn
tất các đợt kiểm thử tích hợp trước đó. Lúc này, ta chỉ cần kiểm thử giao tiếp của đơn vị mới
thêm vào với hệ thống các đơn vị đã tích hợp trước đó, điều này sẽ làm cho số lượng ca
kiểm thử giảm đi rất nhiều, và sai sót sẽ giảm đáng kể. Trong kiểm thử ở mức tích hợp, có
02 chiến lược cơ bản là kiểm thử từ dưới lên và kiểm thử từ trên xuống.
Kiểm thử từ dưới lên (bottom up testing) là quá trình tích hợp và kiểm thử các
module ở mức thấp trước. Thông thường người ta không thuần túy kiểm thử tất cả
các module ở tầng dưới cùng mà nhóm các module này thành các nhóm chức
năng, tích hợp và kiểm thử chúng theo từng nhóm như minh họa ở hình 2.3.
Hình 2.3. Kiểm thử bottom up.
Ƣu điểm: Chiến lược kiểm thử từ dưới lên sẽ giúp cho kiểm thử viên tránh
được việc phải tạo ra các bộ giả lập đầu vào phức tạp hay tạo các kết quả
nhân tạo để thực hiện kiểm thử. Hơn nữa, nó còn thuận tiện cho việc phát
triển các module thứ cấp dùng lại được.
Nhƣợc điểm: Song song với ưu điểm trên thì chiến lược kiểm thử bottom up
cũng tồn tại nhược điểm như: Phát hiện chậm các lỗi thiết kế và chậm chễ
trong việc có được phiên bản thực thi của hệ thống.
Kiểm thử từ trên xuống (top down testing) là quá trình tiến hành kiểm thử các
module ở mức cao trước, các module ở mức thấp được tạm thời phát triển với các
- Xem thêm -