Dữ liệu danh tính nhất quán là dữ liệu mà mọi trường trong cùng một bản ghi kể đúng một câu chuyện: người này sống ở nước nào, giấy tờ do nước nào cấp, và số điện thoại liên lạc được gọi từ đâu. Khi các trường lệch nhau, bài kiểm thử vẫn có thể chạy xanh nhưng lại đang kiểm tra một thứ không giống thực tế. Bài này chỉ những cặp trường hay lệch nhất và cách xử lý.
Tính nhất quán của một bản ghi nghĩa là gì?
Một bản ghi danh tính không phải là một túi các trường rời rạc. Nó là một câu chuyện ngắn, và mỗi trường là một chi tiết. Nếu chi tiết này mâu thuẫn với chi tiết kia, người đọc sẽ nhận ra ngay, dù không trường nào tự nó sai định dạng.
Sự nhất quán có hai mức. Mức thứ nhất là hình dạng: mã bưu chính, số điện thoại và số giấy tờ phải đúng định dạng của quốc gia được ghi trong bản ghi. Mức thứ hai là ý nghĩa: ngày sinh phải tương thích với độ tuổi mà bản ghi được dùng để mô tả, nghề nghiệp phải hợp lý với độ tuổi đó, và địa chỉ phải thuộc đơn vị hành chính đã khai.
Hai mức này dễ bị tách rời trong thực tế. Rất nhiều hệ thống kiểm tra được mức hình dạng vì nó dễ viết, nhưng bỏ qua mức ý nghĩa vì nó đòi hỏi phải hiểu nghiệp vụ.
Những cặp trường nào hay lệch nhau nhất?
Bảng dưới đây liệt kê những cặp trường hay mâu thuẫn nhất trong dữ liệu thử, cùng hậu quả thường gặp của chúng nếu bạn để lọt.
| Cặp trường | Dạng mâu thuẫn hay gặp | Hậu quả |
|---|---|---|
| Quốc gia và địa chỉ | Quốc gia là nước này nhưng mã bưu chính theo mẫu nước khác | Phép kiểm tra địa chỉ chạy sai nhánh |
| Quốc gia và số điện thoại | Mã gọi quốc tế không khớp quốc gia trong hồ sơ | Luồng gửi tin nhắn xác thực thử sai đường |
| Quốc gia và giấy tờ | Số giấy tờ thuộc nước khác với địa chỉ | Hồ sơ tự vô hiệu khi đối chiếu chéo |
| Ngày sinh và tuổi sử dụng | Tuổi đã tính sẵn không khớp ngày sinh | Mẫu vượt được ngưỡng tuổi một cách giả tạo |
Bốn dòng này có điểm chung: chúng đều là những cặp trường mà bộ sinh dữ liệu hay lấy ngẫu nhiên độc lập. Chỉ cần lấy quốc gia một chỗ, lấy địa chỉ một chỗ khác, và ghép lại, bạn đã có ngay một bản ghi không tự nhất quán.
Vì sao dữ liệu không khớp lại khiến bài kiểm thử đạt sai?
Vì bài kiểm thử chỉ chứng minh được điều mà dữ liệu của nó chạm tới. Nếu bản ghi thử không bao giờ có mã bưu chính đúng nước, thì nhánh kiểm tra mã bưu chính theo quốc gia chưa từng được chạy thật, dù báo cáo vẫn ghi là đạt.
Đây là dạng lỗi nguy hiểm nhất trong kiểm thử: không phải đỏ, mà xanh một cách vô nghĩa. Nó làm người viết yên tâm, và chỉ lộ ra khi khách hàng thật nhập dữ liệu nhất quán và đi vào đúng nhánh chưa từng được thử.
Cách phòng thủ là chủ động đưa cả hai loại dữ liệu vào bộ kiểm thử: bản ghi hoàn toàn nhất quán để kiểm tra luồng chạy đúng, và bản ghi cố tình mâu thuẫn ở đúng một cặp trường để kiểm tra xem hệ thống có phát hiện được hay không.
Khi nào nên cảnh báo thay vì chặn?
Không phải mọi mâu thuẫn đều đáng bị từ chối. Có những trường hợp hoàn toàn hợp lệ trong thực tế: người dùng có thể đang tạm trú ở nước khác, dùng số điện thoại của người thân ở quê, hoặc giữ giấy tờ do nơi sinh cấp chứ không phải nơi ở hiện tại.
Vì vậy, bạn cần quyết định cho từng cặp trường là cảnh báo hay chặn. Nguyên tắc thực dụng là: nếu mâu thuẫn khiến quy trình tiếp theo không thể chạy đúng, hãy chặn; nếu nó chỉ khiến thông tin khó tin nhưng vẫn xử lý được, hãy cảnh báo và cho phép xác nhận.
Một cách làm hữu ích cho dữ liệu thử là ghi lại những lần cảnh báo kèm lý do. Khi số lần cảnh báo tăng bất thường, đó thường là dấu hiệu dữ liệu sinh ra đang lệch chứ không phải người dùng nhập sai. Với các luồng quốc tế, chi tiết về địa chỉ và số điện thoại được bàn thêm trong bài kiểm thử địa chỉ và số điện thoại quốc tế.
Làm sao tạo bộ dữ liệu khớp nhau để thử?
Nếu bạn cần dữ liệu nhất quán sẵn để thử biểu mẫu, trình tạo dữ liệu danh tính và kiểm thử trực tuyến của trang này dựng cả bản ghi theo cùng một quốc gia: chọn nước, chọn đơn vị hành chính nếu cần, và các trường về giấy tờ, địa chỉ, số điện thoại được sinh cho khớp nhau.
Dữ liệu ở đây là dữ liệu tổng hợp do thuật toán sinh, chỉ dùng cho kiểm thử phần mềm, không ứng với người có thật, và không dùng để mạo danh ai hay vượt qua bất kỳ bước xác minh danh tính nào.
Để thử cả phía ngược lại, hãy lấy một bản ghi mẫu rồi sửa đúng một trường: đổi mã quốc gia trong số điện thoại, hoặc đổi quốc gia của hồ sơ. Nếu hệ thống không phàn nàn gì, bạn vừa tìm ra một nhánh kiểm tra còn thiếu.
Phần dành cho nhà phát triển
Câu hỏi đầu tiên không phải là dùng quy tắc nào, mà là quy tắc nằm ở đâu. Kiểm tra từng trường nên nằm ngay tại trường đó, còn kiểm tra chéo giữa các trường nên nằm ở một lớp riêng, chạy sau khi bản ghi đã được dựng đủ. Trộn hai loại này vào nhau thường khiến mọi bản ghi đều đi qua cùng một hàm lớn khó sửa.
Vài điểm nên chốt:
- Ghi rõ mức độ của từng quy tắc, cảnh báo hay chặn, để người sau không vô tình biến một cảnh báo mềm thành lỗi cứng.
- Với bộ sinh dữ liệu, hãy sinh theo nhóm chứ không theo từng trường. Quốc gia là đầu vào chung, mọi trường khác đi theo nó.
- Đặt ra một bộ kiểm tra tự động cho chính dữ liệu thử, xác nhận rằng các cặp trường vẫn khớp sau mỗi lần bạn đổi cách sinh.
- Nhớ rằng giá trị đã tính sẵn rất dễ lệch khỏi nguồn của nó. Nếu đã lưu ngày sinh, đừng lưu thêm tuổi như một giá trị độc lập.
- Khi bổ sung một quốc gia mới, hãy rà lại toàn bộ các cặp trường, vì mỗi nước có thể có thêm ràng buộc riêng mà bạn chưa gặp.
Cuối cùng, đừng để dữ liệu thử lẫn vào môi trường thật. Bản ghi nhất quán trông rất giống người thật, nên một trường đánh dấu nguồn gốc tổng hợp sẽ giúp bạn lọc ra khi cần dọn dẹp.
Bước tiếp theo
Hãy chọn một bản ghi mẫu và cố tình làm nó mâu thuẫn ở từng cặp trường trong bảng phía trên, rồi xem hệ thống phản ứng ra sao. Sau đó mở trình tạo dữ liệu danh tính để sinh một bộ dữ liệu nhất quán làm nền, và thêm những bản ghi lệch có chủ đích vào bộ kiểm thử của bạn.