CHƯƠNG 4 : CÁC KỸ THUẬT THIẾT KẾ KIỂM THỬ
4.4 Kỹ thuật kiểm thử hộp trắng hoặc kiểm thử dựa trên cấu trúc
4.4.1 Kiểm thử bao phủ câu lệnh (Statement Coverage).
Bao phủ Câu lệnh là việc đánh giá tỷ lệ phần trăm của các câu lệnh được thực thi được thực hiện bởi một bộ test suite.
50
Kỹ thuật kiểm thử bao phủ câu lệnh giúp tạo ra được những test cases để thực thi những câu lệnh cụ thể, mục đích để kiểm tra độ bao phủ câu lệnh, theo công thức sau:
Độ 𝑏𝑎𝑜 𝑝ℎủ 𝑐â𝑢 𝑙ệ𝑛ℎ =Số câu lệnh được thực thi
Tổng số câu lệnh × 100%
Theo cơng thức trên ta có thể thấy nếu độ bao phủ câu lệnh càng cao thì số câu lệnh được thực thi hoặc được kiểm tra qua càng nhiều, và để có nhiều câu lệnh được thực thi thì chúng ta phải thiết kế các test case với dữ liệu đầu vào sao cho nó đi qua được tất cả các câu lệnh, khơng bỏ sót câu lệnh nào.
- Một câu lệnh có thể nằm trên một dòng đơn hoặc trải dài qua nhiều dịng.
- Một dịng có thể chứa nhiều hơn một câu lệnh, chỉ một câu lệnh hoặc chỉ một phần của câu lệnh.
Ví dụ: Hãy nhìn vào đoạn code mẫu sau
Nếu chúng ta có các test cases với những giá trị đầu vào như sau: Test Case 1: A=2, B=3
Test Case 2: A=0, B=25 Test Case 3: A = 47, B=1
Với 3 bộ Test Case này chúng ta chỉ đi qua được 5 câu lệnh (vì khơng có test case nào cho giá trị C>50 để chạy được câu lệnh PRINT “Large C“), do đó ta chỉ có thể kiểm tra được 5 trên 6 câu lệnh, và độ bao phủ câu lệnh chỉ được 85%.
Để tăng độ bao phủ câu lệnh lên 100% (tức kiểm tra được 6/6 câu lệnh) thì bắt buộc ta phải thiết kế thêm test case với giá trị đầu vào sao cho chạy được câu lệnh PRINT “Large C“, ví dụ:
51
4.4.2 Kiểm thử bao phủ quyết định
Bao phủ Quyết định là việc đánh giá tỷ lệ phần trăm của các kết quả quyết định (ví dụ như các tùy chọn True hoặc False của một mệnh đề IF) được thực hiện bởi một bộ test suite. Ví dụ, nếu mệnh đề IF có 3 nhánh kết quả (3 quyết định) thì chúng ta phải thiết kế Test Cases với các bộ dữ liệu phù hợp để kiểm tra được hết 3 nhánh đó, đây chính là kiểm thử bao phủ quyết định.
Kỹ thuật bao phủ quyết định giúp chúng ta thiết kế được những Test Case có ý nghĩa để kiểm thử hết tất cả các quyết định (các nhánh kết quả) có thể có của một mệnh đề If, một vòng lặp Do-While, Repeat-Until, Case,... nhằm mục đích gia tăng độ bao phủ quyết định.
Ta có cơng thức sau:
Độ 𝑏𝑎𝑜 𝑝ℎủ 𝑞𝑢𝑦ế𝑡 đị𝑛ℎ =Số lượng các kết quả quyết định được thực thi
Tổng số các kết quả quyết định × 100% Bao phủ quyết định mạnh hơn bao phủ câu lệnh: 100% bao phủ quyết định đảm bảo 100% bao phủ câu lệnh, nhưng ngược lại thì khơng. Điều này có nghĩa là nếu ta thiết kế được các Test Case với những dữ liệu đầu vào đảm bảo kiểm thử được hết tất cả các nhánh quyết định (độ bao phủ câu lệnh = 100%) thì những Test Cases đó cũng đảm bảo chạy qua được hết các câu lệnh (độ bao phủ câu lệnh cũng bằng 100%) nhưng nếu chúng ta thiết kế được những Test Cases mà đảm bảo độ bao phủ câu lệnh bằng 100% thì chưa chắc đã kiểm tra được hết tất cả các nhánh quyết định (độ bao phủ quyết định chưa chắc được 100%).
52 Ví dụ: Xét đoạn Code sau:
Nếu chúng ta có Test Case: A=20, B=15 thì có thể đi qua được hết 6 câu lệnh (tức độ bao phủ câu lệnh = 100%) nhưng nếu xét về độ bao phủ quyết định thì Test Case này chỉ kiểm tra được ½ quyết định (tức độ bao phủ quyết định chỉ bằng 50%). Do đó, để tăng độ bao phủ quyết định lên 100% thì chúng ta phải bổ sung thêm Test Case để kiểm thử được hết các kết quả quyết định, ví dụ: Test Case: A=10, B=2