Happy path ai cũng viết được. Bug lọt sprint gần như luôn nằm ở edge case và negative case mà không ai nghĩ tới lúc refinement. Đây là nơi AI phát huy giá trị lớn nhất: nó liệt kê rất nhanh các nhánh bạn hay quên. Việc của bạn là dùng khung tư duy để ép AI đi hết các nhánh, rồi lọc theo nghiệp vụ.
Khung 7 nhóm edge case (dùng để nhắc AI)
- Dữ liệu biên: rỗng, 0, số âm, cực lớn, vượt giới hạn ký tự.
- Định dạng sai: email không hợp lệ, ngày sai, ký tự đặc biệt/emoji.
- Trạng thái: tài khoản khóa, chưa xác minh, phiên hết hạn.
- Phân quyền: không đủ quyền, truy cập chéo dữ liệu người khác.
- Hệ thống/mạng: timeout, mất mạng giữa chừng, service phụ lỗi.
- Đồng thời (concurrency): hai tab cùng thao tác, double-click, race.
- Thời gian/định lượng: hết hạn, đúng thời điểm chuyển ngày, giới hạn số lần.
Prompt mẫu "quét edge case theo khung"
Dưới đây là story và AC happy path đã có. Hãy SOI qua 7 nhóm rủi ro
và sinh thêm negative/edge case dạng Gherkin (tiếng Việt) cho MỖI
nhóm áp dụng được. Nếu nhóm nào không áp dụng, ghi rõ "không áp dụng"
và lý do (đừng bịa case).
7 nhóm: (1) dữ liệu biên (2) định dạng sai (3) trạng thái tài khoản
(4) phân quyền (5) mạng/hệ thống (6) đồng thời (7) thời gian/giới hạn.
Story: "Là người dùng, tôi muốn tải lên ảnh đại diện để cá nhân hóa
hồ sơ."
Ràng buộc: chỉ nhận JPG/PNG, tối đa 5MB, 1 ảnh.
Happy path: [dán AC happy path của bạn]
Câu "nếu không áp dụng thì ghi rõ, đừng bịa" cực quan trọng — nó chống việc AI cố nhồi case vô nghĩa.
Ví dụ nhánh AI hay giúp bạn nhớ
Với story tải ảnh đại diện ở trên, AI thường bổ sung những nhánh mà buổi refinement 30 phút hay bỏ quên: người dùng chọn file 4,9MB rồi mạng rớt giữa lúc upload; file đúng đuôi .jpg nhưng thực chất là PDF đổi tên; hai thiết bị cùng đổi avatar một lúc; ảnh 0 byte; tên file chứa emoji. Mỗi nhánh này nếu không có Then rõ ràng sẽ thành một bug thật ngoài production. Đây chính là chỗ AI trả lại nhiều giá trị nhất cho thời gian bạn bỏ ra.
Các bước làm
- Viết/AI-sinh happy path trước.
- Chạy prompt quét 7 nhóm với happy path đính kèm.
- Với từng case, hỏi: nghiệp vụ mình có xử lý nhánh này không? Nếu có mà chưa định nghĩa hành vi → đây là câu hỏi mở cho stakeholder.
- Xóa case không áp dụng, giữ case thật, chốt hành vi mong đợi.
- Đánh dấu case cần stakeholder quyết định để mang ra họp.
- Cập nhật lại bộ AC với các nhánh đã chốt, giữ định dạng Gherkin thống nhất.
Template Then "đo được" cho negative case
Scenario: [tên nhánh lỗi]
Given [tiền điều kiện gây lỗi]
When [hành động]
Then hệ thống KHÔNG thực hiện [hành vi]
And hiển thị thông báo "[nội dung chính xác]"
And [trạng thái dữ liệu giữ nguyên / không đổi]
Sai lầm thường gặp
- Nhận hết case AI đưa ra. AI ảo giác ra nhánh không tồn tại (ví dụ case "tải lên file GIF động" khi sản phẩm không hỗ trợ) làm phình ticket. Lọc theo nghiệp vụ thật.
- Chỉ định nghĩa lỗi mà quên hành vi khôi phục. Then của negative case phải nói rõ dữ liệu giữ nguyên/không mất, không chỉ "báo lỗi".
- Bỏ qua concurrency và mạng. Đây là hai nhóm con người quên nhiều nhất và cũng là nơi AI giúp nhiều nhất — đừng cắt chúng cho gọn ticket.
- Phụ thuộc quá mức vào danh sách của AI. AI phủ rộng nhưng không biết case nghiệp vụ đặc thù của bạn (ví dụ quy tắc thuế địa phương). Vẫn cần bộ não PO bổ sung.