Phân tích giá trị biên (Boundary Value Analysis - BVA)

Phân tích giá trị biên (BVA):
Phân tích giá trị biên tập trung vào biên của miền xác định để xây dựng ca kiểm thử. Lý do là lỗi thường xảy ra ở gần các giá trị biên này.

Chọn giá trị
Phân tích giá trị biên sẽ chọn các giá trị:

  • Giá trị nhỏ nhất
  • Ngay trên giá trị nhỏ nhất
  • Một giá trị bình thường
  • Ngay dưới giá trị lớn nhất
  • Giá trị lớn nhất

Test case design techniques: Boundary value analysis – Sang Bui

Kiểm thử biên mạnh
Kiểm thử biên mạnh (robustness testing) là một mở rộng đơn giản của BVA. Mục đích chính là xem chương trình có kiểm tra giá trị hợp lệ của đầu vào không.

Ngoài năm giá trị biên bổ sung thêm hai giá trị ngoài biên:

  • Giá trị ngay trên giá trị cực đại (max+) và
  • Giá trị ngay dưới giá trị cực tiểu (min-).

Kiểm thử trường hợp xấu nhất

Điều gì xảy ra khi nhiều hơn một biến nhận các giá trị (gần) cực trị? Khi các biến có tương tác với nhau thì cần kiểm tra các bộ giá trị kết hợp các cực trị này Có thể kết hợp với kiểm thử mạnh để có bộ kiểm thử trường hợp xấu nhất mạnh.

Phân loại miền biên trường hợp nhiều biến

  • Điểm trên biên (Boundary point).
  • Điểm cực biên (Extreme point).
  • Điểm ngoài biên (Off point).
  • Điểm trong biên (Interior point.)

Ưu/ nhược điểm của BVA

Phân tích giá trị biên dựa trên nguyên lý giả định khiếm khuyết đơn: “Hỏng hóc xảy ra hiếm khi do hai (hoặc hơn) khiếm khuyết cùng xảy ra” Do đó các ca kiểm thử theo phương pháp này được tạo bằng việc lấy các giá trị bình thường của các chiều/biên rồi lần thay mỗi chiều bằng các giá trị cực trị như trên. 

Ư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.

Để đả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.

Kỹ thuật phân vùng tương đương – Equivalence Patitioning

Đị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ế Testcase bằng phân lớp tương đương tiến hành theo 2 bước:

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.

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.

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

Ư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).

Kỹ thuật phân tích giá trị biên

Đị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:

  1. 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.
  2. 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.
  3. 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 đó.

  1. Sử dụng nguyên tắc 2 cho mỗi trạng thái đầu ra.
  2. 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.
  3. 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

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

Ư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.

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.

Xem thêm: Kỹ thuật phân vùng tương đương