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.
- 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 đề đó.
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ử.
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.
Đả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).
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.
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.
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ệ.
4.1. Ví dụ 1: Trường nhập Tuổi đă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".
4. Ví dụ 2: Số lượng mua hàng trên E-commerce
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ữ.
4.3. Ví dụ 3: Xác thực Độ dài Mật khẩu (Password)
Ở đây ta kiểm thử độ dài chuỗi (string length). Số lượng test case được rút gọn tối đa:
-
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. -
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. -
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.
4.4. Ví dụ 4: Nhập mã PIN Ngân hàng
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).
4.5. Ví dụ 5: Tính năng Tải lên Tệp tin (File Upload)
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)
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.
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ể.
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.
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.
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.
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.
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)
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
8. Các Lỗi thường gặp khi Tester áp dụng
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.
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).
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 ô đó.
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ủ:
- 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.
2.371 xem 12 kiến thức 5 đề thi
21.150 lượt xem 11/04/2026
20.973 lượt xem 11/04/2026
20.945 lượt xem 11/04/2026
21.038 lượt xem 11/04/2026
20.990 lượt xem 11/04/2026
21.011 lượt xem 11/04/2026
21.092 lượt xem 11/04/2026
21.122 lượt xem 11/04/2026
21.100 lượt xem 11/04/2026

