Để đảm bảo được chất lượng của một hoặc nhiều dự án phần mềm QA cần phải tạo được bộ testcase phù hợp.Để thực hiện việc kiểm tra phần mềm với thời gian ngắn nhất mà vẫn đạt chất lượng cao nhất cần phải hiểu sâu về nghiệp vụ của phần mềm và linh hoạt trong việc thiết kế testcase. Thiết kế testcase trong kiểm thử phần mềm là quá trình xây dựng các phương pháp kiểm thử có thể phát hiện lỗi, sai sót, khuyết điểm của phần mềm để xây dựng phần mềm đạt tiêu chuẩn.
Trong phương pháp kiểm thử hộp đen, có 2 kỹ thuật thường được sử dụng mà nếu vận dụng một cách linh hoạt thì sẽ giảm thiểu rất nhiều số lượng case thừa, tiết kiệm thời gian kiểm thử mà vẫn đảm bảo chất lượng phần mềm. Tôi sẽ giới thiệu ngay dưới đây.
1. Kỹ thuật phân vùng tương đương – Equivalence Patitioning
1.1 Định nghĩa:
Phân vùng tương đương là phương pháp chia các điều kiện đầu vào thành những vùng tương đương nhau. Tất cả các giá trị trong một vùng tương đương sẽ cho một kết quả đầu ra giống nhau. Vì vậy chúng ta có thể test một giá trị đại diện trong vùng tương đương. Các lớp tương đương được xác định bằng bằng cách lấy mỗi trạng thái đầu vào (thường là 1 câu hay 1 cụm từ trong đặc tả) và phân chia nó thành 2 hay nhiều nhóm.
Thiết kế Test-case bằng phân lớp tương đương tiến hành theo 2 bước:
1.1.1. Xác định các lớp tương đương:
Có hai kiểu lớp tương đương được xác định:
Lớp tương đương hợp lệ mô tả các đầu vào hợp lệ của chương trình, và lớp tương đương không hợp lệ mô tả tất cả các trạng thái có thể khác của điều kiện (ví dụ, các giá trị đầu vào không đúng). Với 1 đầu vào hay điều kiện bên ngoài đã cho, việc xác định các lớp tương đương hầu như là 1 quy trình mang tính kinh nghiệm. Để xác định các lớp tương đương c có thể áp dụng tập các nguyên tắc dưới đây:
a. Nếu 1 trạng thái đầu vào định rõ giới hạn của các giá trị, xác định 1 lớp tương đương hợp lệ và 2 lớp tương đương không hợp lệ.
b. Nếu 1 trạng thái đầu vào xác định số giá trị, xác định 1 lớp tương đương hợp lệ và 2 lớp tương đương bất hợp lệ.
c. Nếu 1 trạng thái đầu vào chỉ định tập các giá trị đầu vào và chương trình sử dụng mỗi giá trị là khác nhau, xác định 1 lớp tương đương hợp lệ cho mỗi loại và 1 lớp tương đương không hợp lệ.
d. Nếu 1 trạng thái đầu vào chỉ định một tình huống “chắc chắn – must be”, xác định 1 lớp tương đương hợp lệ và 1 lớp tương đương không hợp lệ.
Nếu có bất kỳ lý do nào để tin rằng chương trình không xử lý các phần tử trong cùng 1 lớp là như nhau, thì hãy chia lớp tương đương đó thành các lớp tương đương nhỏ hơn.
1.1.2 Xác định các ca kiểm thử.
Với các lớp tương đương xác định được ở bước trên, bước thứ hai là sử dụng các lớp tương đương đó để xác định các ca kiểm thử. Quá trình này như sau:
a. Gán 1 số duy nhất cho mỗi lớp tương đương.
b. Cho đến khi tất cả các lớp tương đương hợp lệ được bao phủ bởi (hợp nhất thành) các ca kiểm thử, viết 1 ca kiểm thử mới bao phủ càng nhiều các lớp tương đương đó chưa được bao phủ càng tốt.
c. Cho đến khi các ca kiểm thử của bạn đã bao phủ tất cả các lớp tương đương không hợp lệ, viết 1 ca kiểm thử mà bao phủ một và chỉ một trong các lớp tương đương không hợp lệ chưa được bao phủ.
d. Lý do mà mỗi ca kiểm thử riêng bao phủ các trường hợp không hợp lệ là vì các kiểm tra đầu vào không đúng nào đó che giấu hoặc thay thế các kiểm tra đầu vào không đúng khác.
Mặc dù việc phân lớp tương đương là rất tốt khi lựa chọn ngẫu nhiên các ca kiểm thử, nhưng nó vẫn có những thiếu sót. Ví dụ, nó bỏ qua các kiểu test – case có lợi nào đó. Hai phương pháp tiếp theo, phân tích giá trị biên và đồ thị nguyên nhân – kết quả , bao phủ được nhiều những thiếu sót này.
1.2. Ví dụ:
(*) Form nhập số tầng của tòa nhà bao gồm:
Floor: Text-box
Yêu cầu:
Thiết kế test case sao cho người dùng nhập vào ô text-box Salary chỉ cho nhập ký tự là số với độ dài trong khoảng [0-10] (*) Dựa vào yêu cầu bài toán ta có thể có các lớp tương đương(phân vùng) sau:
-
Phân vùng 1: Nhập giá trị hợp lệ từ 0=> 10 ký tự
-
Phân vùng 2: Nhập giá trị không hợp lệ < 0 ký tự
-
Phân vùng 3: Nhập giá trị không hợp lệ > 10 ký tự
-
Phân vùng 4: Trường hợp để trống không nhập gì hay nhập ký tự không phải dạng số
Sau khi áp dụng phân vùng tương đương có thể chọn được các ca kiểm thử (test case) sau:
-
Case 1: Nhập giá trị từ 0 => 10 (có thể chỉ nhập số 5)=> pass
-
Case 2: Nhập giá trị < 0 (có thể chỉ nhập số -5) => hiển thị lỗi
-
Case 3: Nhập giá trị > 10 => hiển thị lỗi
-
Case 4: Để trống không nhập gì hay nhập ký tự không phải dạng số => hiển thị lỗi
1.3. Ưu/ nhược điểm:
(*) Ưu điểm:
Vì mỗi vùng tương đương ta chỉ cần test trên các phần tử đại diện nên số lượng test case được giảm đi khá nhiều nhờ đó mà thời gian thực hiện test cũng giảm đáng kể.
(*) Nhược điểm:
Không phải với bất kỳ bài toán nào đều có thể áp dụng kỹ thuật này. Có thể bị lack lỗi ở biên nếu chỉ chọn giá trị ở khoảng giữa của miền tương đương. Vì vậy khi phần lớn các lỗi được tìm thấy lúc kiểm tra giá trị ở biên của các phân vùng thì chúng ta nên tìm hiểu thêm một kỹ thuật nữa là Boundary value analysis (phân tích giá trị biên).
2. Kỹ thuật phân tích giá trị biên
2.1 Định nghĩa:
Đây là một trong những kỹ thuật kiểm thử phần mềm, trong đó các testcase được thiết kế bao gồm các giá trị tại các biên. Nếu dữ liệu đầu vào được sử dụng là trong giới hạn giá trị biên, nó được cho là Positive testing. Nếu dữ liệu đầu vào được sử dụng là ngoài giới hạn giá trị biên, nó được cho là Negative testing. Mục tiêu là lựa chọn các test case để thực thi giá trị biên.
Kinh nghiệm cho thấy các ca kiểm thử mà khảo sát tỷ mỷ các điều kiện biên có tỷ lệ phần trăm cao hơn các ca kiểm thử khác. Các điều kiện biên là những điều kiện mà các tình huống ngay tại, trên và dưới các cạnh của các lớp tương đương đầu vào và các lớp tương đương đầu ra.
Phân tích các giá trị biên là phương pháp thiết kế ca kiểm thử bổ sung thêm cho phân lớp tương đương, nhưng khác với phân lớp tương đương ở 2 khía cạnh:
- Phân tích giá trị biên không lựa chọn phần tử bất kỳ nào trong 1 lớp tương đương là điển hình, mà nó yêu cầu là 1 hay nhiều phần tử được lựa chọn như vậy mà mỗi cạnh của lớp tương đương đó chính là đối tượng kiểm tra.
- Ngoài việc chỉ tập trung chú ý vào các trạng thái đầu vào (không gian đầu vào), các ca kiểm thử cũng nhận được bằng việc xem xét không gian kết quả (các lớp tương đương đầu ra).
Phân tích giá trị biên yêu cầu óc sáng tạo và lượng chuyên môn hóa nhất định và nó là một quá trình mang tính kinh nghiệm rất cao. Tuy nhiên, có một số quy tắc chung như sau:
- Nếu 1 trạng thái đầu vào định rõ giới hạn của các giá trị, hãy viết các ca kiểm thử cho các giá trị cuối của giới hạn, và các ca kiểm thử đầu vào không hợp lệ cho các trường hợp vượt ra ngoài phạm vi.
- Nếu 1 trạng thái đầu vào định rõ số lượng giá trị, hãy viết các ca kiểm thử cho con số lớn nhất và nhỏ nhất của các giá trị và một giá trị trên, một giá trị dưới những giá trị này.
- Sử dụng quy tắc 1 cho mỗi trạng thái đầu vào.
Ví dụ, nếu 1 chương trình tính toán sự khấu trừ FICA hàng tháng và nếu mức tối thiểu là 0.00$, và tối đa là 1,165.25$, hãy viết các ca kiểm thử mà khấu trừ 0.00$ và 1,165.25, khấu trừ âm và khấu trừ lớn hơn 1,165.25$. Chú ý là việc xem xét giới hạn của không gian kết quả là quan trọng vì không phải lúc nào các biên của miền đầu vào cũng mô tả cùng một tập sự kiện như biên của giới hạn đầu ra (ví dụ, xét chương trình con tính SIN). Ngoài ra, không phải lúc nào cũng có thể tạo ra 1 kết quả bên ngoài giới hạn đầu ra, nhưng tuy nhiên rất đáng để xem xét tiềm ẩn đó.
- Sử dụng nguyên tắc 2 cho mỗi trạng thái đầu ra.
- Nếu đầu vào hay đầu ra của 1 chương trình là tập được sắp thứ tự ( ví dụ,1 file tuần tự hay 1 danh sách định tuyến hay 1 bảng) tập trung chú ý vào các phần tử đầu tiên và cuối cùng của tập hợp.
- Sử dụng sự khéo léo của bạn để tìm các điều kiện biên.
Các case chuẩn được lựa chọn dựa vào quy tắc sau:
Giá trị biên nhỏ nhất – 1
Giá trị biên nhỏ nhất
Giá trị biên lớn nhât
Giá trị biên lớn nhất + 1
Nhưng nếu bạn muốn kiểm tra sâu hơn thì bạn cũng có thể lựa chọn theo quy tắc:
Giá trị biên nhỏ nhất – 1
Giá trị biên nhỏ nhất
Giá trị biên nhỏ nhất + 1
Giá trị biên lớn nhất – 1
Giá trị biên lớn nhất
Giá trị biên lớn nhất + 1
2.2. Ví dụ:
(*) Form nhập số tầng của tòa nhà bao gồm:
Floor: Text-box
Áp dụng kỹ thuật phân tích giá trị biên ta chọn được các case sau:
-
Case 1: Nhập giá trị là -1 => hiển thị lỗi
-
Case 2: Nhập giá trị là 0 => pass
-
Case 3: Nhập giá trị với 10 => pass
-
Case 4: Nhập giá trị với 11 => hiển thị lỗi
-
Case 5: Để trống không nhập gì hay nhập ký tự không phải dạng chữ => hiển thị lỗi
2.3. Ưu/ nhược điểm:
(*) Ưu điểm:
Thay vì phải test hết toàn bộ các giá trị trong từng vùng tương đương, kỹ thuật phân tích giá trị biên tập trung vào việc kiểm thử các giá trị biên của miền giá trị inputs để thiết kế test case do “lỗi thường tiềm ẩn tại các ngõ ngách và tập hợp tại biên”.
Tiết kiệm thời gian thiết kế test case và thực hiện test.
(*) Nhược điểm:
Phương pháp này chỉ hiệu quả trong trường hợp các đối số đầu vào (input variables) độc lập với nhau và mỗi đối số đều có một miền giá trị hữu hạn.
3.Tổng kết:
Ngoài 2 kỹ thuật thiết kế test case đã nói ở trên, bạn cũng có thể tìm hiểu và sử dụng rất nhiều các kỹ thuật khác nữa như: đoán lỗi (Error Guessing), thiết kế test case dựa trên đồ thị nguyên nhân – kết quả(Cause-Effect Diagram), dựa trên bảng quyết định(Decision Tables)…
Để giảm thiểu số case đến mức tối ưu mà vẫn đảm bảo chất lượng phần mềm, mỗi tester cần linh hoạt trong việc lựa chọn các kỹ thuật thiết kế test case. Kiểm thử phần mềm giúp cung cấp phần mềm ứng dụng có chất lượng và đảm bảo các phần mềm là ít bug nhất trước khi được ra mắt. Để kiểm thử hiệu quả, ta sử dụng cả Positive và Negative testing, trong đó cung cấp đủ sự tin tưởng về chất lượng của phần mềm. Yêu cầu về thời gian thực, giá trị đầu vào bất kỳ phải được kiểm tra trước khi phát hành.