Lý thuyết kiểm thử phần mềm: PP phân vùng tương đương

Tìm hiểu kỹ thuật Phân vùng tương đương (Equivalence Partitioning). Cách tối ưu hóa bộ kiểm thử hộp đen giúp tiết kiệm thời gian và đảm bảo độ bao phủ tối đa

Phân vùng tương đươngEquivalence PartitioningKiểm thử hộp đenBlack-box TestingKỹ thuật kiểm thử

 

1. Khái niệm cơ bản (Introduction)

Phân vùng tương đương (Equivalence Partitioning - EP) là một kỹ thuật kiểm thử phần mềm. Nó chia dữ liệu đầu vào của hệ thống phần mềm thành các nhóm (phân vùng) dữ liệu khác nhau.

Kỹ thuật này được áp dụng chủ yếu trong Kiểm thử Hộp đen (Black-Box Testing). Tester không cần quan tâm đến mã nguồn bên trong, chỉ cần tập trung vào dữ liệu đầu vào và kết quả đầu ra.

Cơ sở lý thuyết: Hệ thống phần mềm sẽ xử lý tất cả các giá trị thuộc cùng một phân vùng theo một cách thức giống hệt nhau.
rule Nguyên tắc cốt lõi
  • Nếu một trường hợp kiểm thử trong phân vùng hoạt động đúng, giả định tất cả trường hợp khác trong phân vùng đó cũng đúng.
  • Nếu một trường hợp kiểm thử trong phân vùng gặp lỗi, giả định tất cả trường hợp khác trong phân vùng đó cũng sẽ gặp lỗi.
  • Chỉ cần chọn MỘT giá trị đại diện duy nhất từ mỗi phân vùng để tiến hành chạy kiểm thử.

Tại sao cần Phân vùng tương đương? (Why Equivalence Partitioning?)

Trong thực tế, việc kiểm thử tất cả các giá trị đầu vào (Exhaustive Testing) là bất khả thi do giới hạn về thời gian và tài nguyên. Phương pháp này giải quyết triệt để vấn đề đó.

timer

Tiết kiệm thời gian

Giảm thiểu đáng kể số lượng test case cần phải viết và thực thi, giúp rút ngắn chu kỳ kiểm thử.

savings

Tối ưu chi phí

Giảm bớt nguồn lực nhân sự cần thiết, tiết kiệm chi phí cho toàn bộ dự án phát triển phần mềm.

track_changes

Đảm bảo độ bao phủ

Tuy số lượng test case ít đi, nhưng vẫn đảm bảo bao phủ toàn bộ các kịch bản quan trọng của hệ thống.

Công thức tính toán Test Case:

Thay vì kiểm thử toàn bộ miền dữ liệu N, số lượng Test Case được giảm xuống chỉ còn số lượng phân vùng hợp lệ (V) cộng với số lượng phân vùng không hợp lệ (I).

Ttotal=V+INT_{total} = V + I \ll N

3. Phân loại Phân vùng (Types of Partitions)

Mỗi tập dữ liệu đầu vào luôn được phân tách thành hai loại phân vùng đối lập nhau để đảm bảo kiểm thử toàn diện.

check_circle

Phân vùng Hợp lệ

Valid Equivalence Class

Là nhóm bao gồm các giá trị đầu vào hợp lệ, chính xác theo như tài liệu đặc tả yêu cầu (SRS) của phần mềm.

  • Hệ thống phải chấp nhận các giá trị này.
  • Hệ thống phải xử lý trơn tru không báo lỗi.
  • Hành vi mong đợi: Thực hiện thành công chức năng.
cancel

Phân vùng Không hợp lệ

Invalid Equivalence Class

Là nhóm bao gồm các giá trị đầu vào nằm ngoài luồng mong đợi, sai định dạng, vượt quá giới hạn hoặc không tuân thủ đặc tả.

  • Hệ thống phải từ chối các giá trị này.
  • Hệ thống phải bắt lỗi (throw error) hoặc ngăn chặn xử lý tiếp.
  • Hành vi mong đợi: Hiển thị thông báo lỗi phù hợp cho người dùng.

4. Phân tích Các Ví dụ Minh họa Thực tế (Examples)

Dưới đây là 10 ví dụ phân tích chi tiết cách áp dụng Phân vùng tương đương vào các trường hợp phổ biến trong ứng dụng thực tế. Mỗi ví dụ sẽ mổ xẻ cụ thể cách xác định phân vùng hợp lệ và không hợp lệ.

cake 4.1. Ví dụ 1: Trường nhập Tuổi đăng ký tài khoản

Yêu cầu hệ thống: Ứng dụng chỉ cho phép người dùng có độ tuổi từ 18 đến 60 tuổi thực hiện đăng ký tài khoản.

Nếu kiểm thử toàn diện, ta phải nhập từ 1, 2, 3... đến hàng trăm. Áp dụng Phân vùng tương đương, ta chia làm 3 phân vùng:

Không hợp lệ 1 (Nhỏ hơn)

Tuổi < 18

Đại diện chọn: 15

Kết quả: Báo lỗi "Chưa đủ tuổi".

Hợp lệ (Nằm trong khoảng)

18 <= Tuổi <= 60

Đại diện chọn: 35

Kết quả: Đăng ký thành công.

Không hợp lệ 2 (Lớn hơn)

Tuổi > 60

Đại diện chọn: 65

Kết quả: Báo lỗi "Vượt quá tuổi".

shopping_cart 4. Ví dụ 2: Số lượng mua hàng trên E-commerce

Yêu cầu hệ thống: Khách hàng chỉ được phép mua từ 1 đến 10 sản phẩm cho một mặt hàng trong mỗi lần thanh toán để tránh đầu cơ.

Tương tự, ta xác định các tập hợp kiểm thử giúp tối ưu số lượng test case:

Phân vùng Không hợp lệ

Số lượng < 1

Dữ liệu test: 0

Phân vùng Hợp lệ

1 <= Số lượng <= 10

Dữ liệu test: 5

Phân vùng Không hợp lệ

Số lượng > 10

Dữ liệu test: 15

*Lưu ý: Cần kết hợp thêm phân vùng lỗi định dạng chữ cái (VD: Nhập "abc") để che phủ tính năng chặn nhập chữ.

password 4.3. Ví dụ 3: Xác thực Độ dài Mật khẩu (Password)

Yêu cầu hệ thống: Mật khẩu bắt buộc phải có độ dài từ 6 đến 15 ký tự. Không quan tâm đến loại ký tự.

Ở đây ta kiểm thử độ dài chuỗi (string length). Số lượng test case được rút gọn tối đa:

  • close Không hợp lệ: Độ dài dưới 6 ký tự. Dữ liệu thử nghiệm: "abcd" (4 ký tự). Kết quả: Từ chối.
  • check Hợp lệ: Độ dài từ 6 đến 15 ký tự. Dữ liệu thử nghiệm: "mypass123" (9 ký tự). Kết quả: Chấp nhận.
  • close Không hợp lệ: Độ dài trên 15 ký tự. Dữ liệu thử nghiệm: "thisisaverylongpassword" (23 ký tự). Kết quả: Từ chối.

credit_card 4.4. Ví dụ 4: Nhập mã PIN Ngân hàng

Yêu cầu hệ thống: Mã PIN thẻ ATM bắt buộc phải là số và có độ dài chính xác là 4 chữ số.

Trường hợp này đặc biệt hơn vì độ dài không phải là một khoảng, mà là một giá trị cố định. Phân vùng sẽ mở rộng ra cả kiểu dữ liệu (Data Type):

Nhóm Hợp lệ duy nhất

  • Chuỗi chỉ chứa số.
  • Độ dài đúng 4 ký tự.
  • Giá trị test: "1234", "9876".

Các Nhóm Không hợp lệ

  • Độ dài < 4. (VD: "123")
  • Độ dài > 4. (VD: "12345")
  • Chứa chữ cái. (VD: "12a4")
  • Chứa ký tự đặc biệt. (VD: "12@4")
  • Bỏ trống (Empty).

upload_file 4.5. Ví dụ 5: Tính năng Tải lên Tệp tin (File Upload)

Yêu cầu hệ thống: Hệ thống yêu cầu tải lên ảnh đại diện. Chỉ hỗ trợ định dạng JPG hoặc PNG. Dung lượng tối đa không vượt quá 2MB.

Trong ví dụ này, đầu vào kết hợp 2 yếu tố: Định dạng tệp và Dung lượng. Tester phải kết hợp các phân vùng:

Tạo Test Case thông qua Đại diện Phân vùng:

Test Case Định dạng Dung lượng Kết quả mong đợi
1. Hợp lệ hoàn toàn JPG (Hợp lệ) 1MB (Hợp lệ) Tải lên thành công
Lỗi dung lượng PNG (Hợp lệ) 3MB (Không HL) Lỗi vượt dung lượng
3. Lỗi định dạng PDF (Không HL) 1.5MB (Hợp lệ) Lỗi sai định dạng
4. Lỗi kép GIF (Không HL) 5MB (Không HL) Báo lỗi cả hai

4.6. Ví dụ 6: Hạn mức Chuyển tiền Ngân hàng

Yêu cầu: Chuyển tiền tối thiểu 50,000 VND và tối đa 300,000,000 VND một ngày.

Phân vùng: Chọn 10,000 VND (Không hợp lệ thấp); 100,000 VND (Hợp lệ giữa); 500,000,000 VND (Không hợp lệ cao).

Phân tích: Đảm bảo chức năng kiểm tra số dư và hạn mức hoạt động đồng nhất trên các khoảng tiền, tránh tình trạng lỗi tràn số (integer overflow) với số tiền quá lớn.

4.7. Ví dụ 7: Tìm kiếm Tên chuyến bay

Yêu cầu: Ô tìm kiếm chấp nhận các chuỗi ký tự chữ cái (A-Z) hoặc mã chuyến (VD: VN123), không chấp nhận ký tự đặc biệt.

Phân vùng: Nhóm Hợp lệ: "Hanoi", "VJ456". Nhóm Không hợp lệ: "Hanoi@#", "như thẻ script alert('xss')".

Phân tích: Ở đây, việc phân vùng giúp phát hiện các lỗ hổng bảo mật. Thay vì nhập mọi ký tự, ta gom nhóm các ký tự đặc biệt như (!@#$%) vào một phân vùng không hợp lệ duy nhất.

4.8. Ví dụ 8: Chọn Thành phố (Dropdown List)

Yêu cầu: Trình đơn thả xuống chứa 63 tỉnh thành của Việt Nam. Người dùng phải chọn 1.

Phân vùng: Nhóm Hợp lệ: Chọn một mục có trong danh sách (VD: Hà Nội). Nhóm Không hợp lệ: Không chọn gì cả (Để trống - Default value).

Phân tích: Đối với danh sách liệt kê, mọi giá trị trong danh sách thường tạo thành MỘT phân vùng hợp lệ. Ta không cần test việc chọn cả 63 tỉnh, chọn 1-2 đại diện là đủ.

4.9. Ví dụ 9: Nhập Số điện thoại

Yêu cầu: Số điện thoại tại Việt Nam, bắt đầu bằng số 0, có đúng 10 chữ số.

Phân vùng: Nhóm Hợp lệ: "0912345678". Các nhóm Không hợp lệ: Bắt đầu bằng số 1 ("1912345678"), ít hơn 10 số ("0912345"), nhiều hơn 10 số ("09123456789").

4.10. Ví dụ 10: Mã Giảm Giá (Discount Code)

Yêu cầu: Hệ thống chỉ chấp nhận 3 mã giảm giá cụ thể: "SUMMER20", "SALE50", "NEWUSER".

Phân vùng: Trong trường hợp tập hợp rời rạc cụ thể. Nhóm Hợp lệ: Chọn ngẫu nhiên 1 trong 3 mã trên. Nhóm Không hợp lệ: Bất kỳ chuỗi nào không khớp ("WINTER10", để trống).

5. Ưu điểm của Phương pháp (Advantages)

trending_down

Giảm thiểu Khối lượng công việc

Loại bỏ sự cần thiết phải kiểm thử mọi giá trị đầu vào có thể có, chuyển từ kiểm thử cạn kiệt (Exhaustive Testing) sang kiểm thử chọn lọc thông minh.

speed

Tăng tốc độ Thực thi

Với số lượng test case ít hơn nhưng chất lượng cao, thời gian chạy Automation Test hoặc Manual Test đều giảm xuống đáng kể.

playlist_add_check

Ngăn chặn Kiểm thử Dư thừa

Tránh việc test đi test lại một luồng code. Nếu nhập tuổi 25 thành công thì nhập 26 không mang lại thêm giá trị phát hiện lỗi mới nào.

model_training

Dễ dàng Hướng dẫn & Áp dụng

Là một phương pháp có tính hệ thống cao, logic rõ ràng, rất phù hợp để đào tạo cho các Tester mới vào nghề (Junior QA/QC).

6. Nhược điểm và Hạn chế (Disadvantages & Pitfalls)

Mặc dù mạnh mẽ, nhưng Phân vùng tương đương không phải là "Viên đạn bạc" (Silver Bullet). Nó chứa đựng những lỗ hổng tiềm ẩn nếu chỉ sử dụng độc lập.

error

Bỏ sót lỗi tại Vùng biên (Boundary Errors)

Đây là điểm yếu lớn nhất. Phương pháp này chỉ lấy giá trị đại diện nằm giữa vùng. Ví dụ nhập tuổi từ 18-60, nếu Dev code nhầm điều kiện `tuổi > 18` (thiếu dấu bằng), nếu Tester chọn giá trị đại diện là 25, phần mềm vẫn pass. Lỗi tại số `18` sẽ bị bỏ sót hoàn toàn.

blind

Giả định có thể sai lầm

Phương pháp dựa trên niềm tin mãnh liệt rằng mọi giá trị trong một vùng sẽ có mã nguồn xử lý giống nhau. Tuy nhiên, nếu bên dưới mã nguồn Dev viết một câu lệnh `if (tuổi == 30) throw Error();` một cách vô tình hoặc cố ý, kỹ thuật này sẽ không bao giờ phát hiện được trừ khi Tester vô tình chọn trúng số 30.

cable

Không xét đến sự phụ thuộc dữ liệu

Phương pháp này đánh giá từng tham số đầu vào một cách độc lập. Nó không thiết kế để tìm lỗi khi các thông số kết hợp với nhau. (Ví dụ: Tuổi = 18 hợp lệ, Thu nhập = 0 hợp lệ, nhưng Tuổi = 18 VÀ Thu nhập = 0 thì không được mở thẻ tín dụng).

7. Khắc phục hạn chế: Kết hợp Phân tích Giá trị biên (BVA)

Để khắc phục điểm yếu lớn nhất của Phân vùng tương đương (EP), Tester chuyên nghiệp luôn luôn kết hợp nó với kỹ thuật Phân tích giá trị biên (Boundary Value Analysis - BVA).

Ví dụ: Yêu cầu độ tuổi từ 18 đến 60

Chỉ dùng Phân vùng TĐ

  • Test giá trị < 18 (VD: 10)
  • Test giá trị trong khoảng (VD: 35)
  • Test giá trị > 60 (VD: 70)
Tổng: 3 Test cases. Thiếu kiểm tra các mép rìa.

Kết hợp EP + BVA

  • Biên dưới Invalid: 17
  • Biên dưới Valid: 18
  • Giữa phân vùng: 35
  • Biên trên Valid: 60
  • Biên trên Invalid: 61
Tổng: 5 Test cases. Đảm bảo an toàn tuyệt đối, diệt sạch lỗi off-by-one.

8. Các Lỗi thường gặp khi Tester áp dụng

1. Bỏ sót phân vùng dữ liệu rỗng (Null/Empty)

Nhiều Tester chỉ chăm chăm test các giá trị số và chữ mà quên mất việc người dùng có thể nhấn nút "Submit" khi chưa điền gì cả vào form.

Phân vùng chồng chéo (Overlapping)

Tạo ra các phân vùng chứa cùng một loại dữ liệu, khiến cho các test case bị lặp lại vô nghĩa. Các phân vùng phải rời rạc hoàn toàn (Mutually Exclusive).

3. Bỏ qua các phân vùng định dạng sai

Ví dụ trường nhập số điện thoại, tester chỉ test số hợp lệ và số ngắn/dài, nhưng lại quên test trường hợp người dùng copy-paste một đoạn text chữ cái vào ô đó.

4. Quá lạm dụng chọn nhiều đại diện

Tester chọn đến 5 giá trị hợp lệ khác nhau (20, 25, 30, 40, 50) trong cùng một phân vùng hợp lệ. Điều này phá vỡ bản chất "tối ưu hóa số lượng" của EP.

9. Tiêu chí đánh giá & Độ bao phủ (Coverage Metrics)

Làm sao để biết QA/QC đã thiết kế đủ test case cho phương pháp này? Chúng ta đo lường bằng Equivalence Class Coverage (Độ bao phủ phân vùng).

Công thức tính tỷ lệ bao phủ:

Coverage=(Soˆˊ lượng Phaˆn vuˋng đa˜ được testTổng soˆˊ Phaˆn vuˋng đa˜ được xaˊc định)×100%Coverage = \left( \frac{\text{Số lượng Phân vùng đã được test}}{\text{Tổng số Phân vùng đã được xác định}} \right) \times 100\%
  • Mục tiêu: Luôn hướng tới Coverage = 100%. Mọi phân vùng dù là hợp lệ hay không hợp lệ, ít nhất phải có 1 test case chạy qua nó.
  • Lợi ích: Cung cấp một con số định lượng cụ thể để báo cáo cho Project Manager (PM) hoặc Khách hàng về mức độ tự tin của việc kiểm thử.
  • Tuy nhiên, tỷ lệ bao phủ 100% của Equivalence Partitioning không đồng nghĩa với việc phần mềm hoàn toàn sạch lỗi, nó chỉ đảm bảo không có logic phân vùng nào bị bỏ sót trong kịch bản thử nghiệm.
Mục lục
1. Khái niệm cơ bản (Introduction)
Tại sao cần Phân vùng tương đương? (Why Equivalence Partitioning?)
Công thức tính toán Test Case:
3. Phân loại Phân vùng (Types of Partitions)
Phân vùng Hợp lệ
Phân vùng Không hợp lệ
4. Phân tích Các Ví dụ Minh họa Thực tế (Examples)
cake 4.1. Ví dụ 1: Trường nhập Tuổi đăng ký tài khoản
shopping_cart 4. Ví dụ 2: Số lượng mua hàng trên E-commerce
password 4.3. Ví dụ 3: Xác thực Độ dài Mật khẩu (Password)
credit_card 4.4. Ví dụ 4: Nhập mã PIN Ngân hàng
upload_file 4.5. Ví dụ 5: Tính năng Tải lên Tệp tin (File Upload)
5. Ưu điểm của Phương pháp (Advantages)
6. Nhược điểm và Hạn chế (Disadvantages & Pitfalls)
7. Khắc phục hạn chế: Kết hợp Phân tích Giá trị biên (BVA)
8. Các Lỗi thường gặp khi Tester áp dụng
9. Tiêu chí đánh giá & Độ bao phủ (Coverage Metrics)
Khoá học liên quan
Kiến thức tương tự