Dữ liệu địa chỉ là một trong những loại dữ liệu dễ bị nhét tạm vào mã kiểm thử nhất, vì ai cũng nghĩ một chuỗi vài dòng thì không đáng để tách ra. Chỉ tới khi biểu mẫu thay đổi, khi cần thử thêm quốc gia mới, hoặc khi ai đó phát hiện trong kho mã có địa chỉ của một khách hàng thật, người ta mới thấy cái giá của việc nhét tạm. Bài này trình bày cách tổ chức dữ liệu địa chỉ cho kiểm thử sao cho rõ ràng, an toàn và còn dùng được lâu.
Vì sao nên tách dữ liệu địa chỉ khỏi mã kiểm thử?
Khi địa chỉ nằm rải rác trong từng tệp kiểm thử, ba vấn đề xuất hiện gần như ngay lập tức. Thứ nhất, cùng một địa chỉ bị chép lại ở nhiều nơi, và khi cần sửa thì không ai biết đã sửa hết chưa. Thứ hai, người đọc không phân biệt được đâu là dữ liệu cố ý sai để thử nhánh lỗi và đâu là dữ liệu đúng nhưng bị gõ nhầm. Thứ ba, khi cần thêm một quốc gia mới vào bộ kiểm thử, người viết phải đi tìm khắp kho mã để biết nên đặt dữ liệu ở đâu.
Tách dữ liệu ra một chỗ giải quyết cả ba vấn đề cùng lúc. Mã kiểm thử chỉ còn mô tả hành vi cần kiểm tra, còn dữ liệu thì được khai báo một lần với tên gọi nói rõ mục đích. Cách này cũng giúp việc rà soát trở nên khả thi: muốn biết bộ kiểm thử có chứa thông tin của người thật hay không, bạn chỉ cần đọc một tệp thay vì đọc toàn bộ kho mã.
Dữ liệu địa chỉ trong bộ dữ liệu kiểm thử nên gồm những gì?
Một bộ dữ liệu địa chỉ dùng được cho nhiều mục đích khác nhau, không chỉ để thử trường hợp thành công. Nếu chỉ có địa chỉ hợp lệ, bạn sẽ không bao giờ biết hệ thống phản ứng thế nào khi dữ liệu sai, và đó lại thường là những chỗ dễ hỏng nhất khi lên môi trường thật.
| Nhóm dữ liệu | Mục đích | Ví dụ về tình huống |
|---|---|---|
| Hợp lệ thông thường | Thử luồng thành công | Địa chỉ đầy đủ, có mã bưu chính |
| Thiếu trường tùy chọn | Thử giá trị mặc định | Không có số căn hộ hoặc không có mã bưu chính |
| Ở biên độ dài | Thử giới hạn ký tự | Tên đường rất dài, tên người rất ngắn |
| Sai về hình thức | Thử nhánh báo lỗi | Mã bưu chính sai cấu trúc, quốc gia không có thật |
| Không xác định được | Thử nhánh cảnh báo | Địa chỉ đúng hình thức nhưng không tra được |
Điểm quan trọng là mỗi mục trong bộ dữ liệu phải được đặt tên theo ý định, chứ không theo nội dung. Một cái tên nói rõ địa chỉ này dùng để thử nhánh cảnh báo sẽ còn đúng khi nội dung bên trong được thay, còn một cái tên chỉ mô tả chuỗi ký tự thì sẽ lạc hậu ngay sau lần sửa đầu tiên.
Dùng địa chỉ thật trong môi trường kiểm thử có sao không?
Dùng dữ liệu thật trong môi trường kiểm thử là thói quen phổ biến vì nó tiện: chép một địa chỉ đang có sẵn, chạy thử, xong. Nhưng địa chỉ là dữ liệu gắn với một người cụ thể, nên khi nó được sao chép vào kho mã, vào tệp cấu hình hay vào ảnh chụp màn hình kiểm thử, nó đã đi ra khỏi phạm vi mà nó được thu thập cho.
Hệ quả không chỉ là chuyện riêng tư. Dữ liệu thật còn mang theo những đặc điểm khiến bộ kiểm thử khó đọc: nó thường không có cấu trúc đẹp, không bao quát được các quốc gia khác, và khi người đó yêu cầu xóa dữ liệu thì bạn phải đi tìm cả trong kho mã. Vì vậy, nguyên tắc nên đặt ra từ đầu là không dùng địa chỉ của người thật trong kiểm thử, kể cả trong môi trường chỉ có nội bộ truy cập. Những gì cần cân nhắc thêm về mặt dữ liệu cá nhân được nói kỹ hơn ở bài dữ liệu địa chỉ và quyền riêng tư.
Làm sao để bộ dữ liệu không bị trùng và không bị lệch?
Trùng lặp và lệch chuẩn là hai bệnh thường gặp của bộ dữ liệu lâu năm. Trùng lặp xuất hiện khi hai người khác nhau cùng thêm một địa chỉ cho cùng một mục đích, thường với cách viết hơi khác nhau. Lệch chuẩn xuất hiện khi một phần dữ liệu được cập nhật theo định dạng mới còn phần khác thì không.
Cách phòng ngừa hiệu quả nhất là ràng buộc dữ liệu bằng cấu trúc chứ không bằng lời nhắc trong tài liệu. Mỗi bản ghi địa chỉ nên có cùng một tập trường, kể cả những trường không dùng tới, và mỗi trường nên có kiểu dữ liệu rõ ràng. Khi dữ liệu phải tuân theo một khuôn, việc thêm bản ghi trùng sẽ trở nên khó hơn, và việc phát hiện bản ghi lệch cũng dễ hơn.
Một cách khác là kiểm tra chính bộ dữ liệu đó bằng một bài kiểm thử riêng. Bài kiểm thử này không kiểm tra sản phẩm mà kiểm tra dữ liệu: mọi mã quốc gia có nằm trong bảng mã hay không, mọi trường bắt buộc có được điền hay không, có bản ghi nào trùng khóa hay không. Những bài kiểm tra như vậy rất rẻ và phát hiện lỗi trước khi chúng làm hỏng các bài kiểm thử khác.
Khi nào nên sinh dữ liệu ngay lúc chạy kiểm thử?
Có hai trường phái, và cả hai đều có chỗ dùng. Dữ liệu cố định trong tệp phù hợp khi bạn cần kết quả lặp lại giống nhau, khi cần đối chiếu ảnh chụp màn hình, hoặc khi cần trao đổi với người không đọc được mã. Dữ liệu sinh ngay lúc chạy phù hợp khi bạn cần số lượng lớn, khi cần tránh va chạm giữa các lần chạy song song, hoặc khi bạn không muốn lưu bất kỳ địa chỉ cụ thể nào trong kho mã.
Điểm cần lưu ý với dữ liệu sinh tự động là tính tái lập. Nếu mỗi lần chạy cho ra một địa chỉ khác nhau, một bài kiểm thử hỏng sẽ rất khó tái hiện. Cách xử lý thông thường là dùng một hạt giống xác định cho mỗi lần chạy và ghi lại hạt giống đó vào nhật ký, để lần sau có thể dựng lại đúng bộ dữ liệu đã dùng. Nếu địa chỉ sinh ra không khớp với các trường khác trong cùng bản ghi, bài kiểm thử của bạn sẽ thất bại vì lý do không liên quan tới sản phẩm, nên hãy chọn nguồn sinh dữ liệu có ràng buộc giữa quốc gia, đơn vị hành chính, thành phố và mã bưu chính.
Lấy dữ liệu địa chỉ mẫu ở đâu?
Trình tạo địa chỉ giả của trang này sinh địa chỉ cho nhiều quốc gia theo đúng cấu trúc của từng nơi, với các trường khớp nhau trong cùng một bản ghi. Vì đơn vị hành chính được chọn trước rồi mới tới thành phố và mã bưu chính, dữ liệu sinh ra không rơi vào tình trạng thành phố không thuộc đơn vị hành chính đi kèm.
Toàn bộ dữ liệu là tổng hợp và chỉ dùng cho kiểm thử phần mềm, không trỏ tới người hay địa chỉ có thật. Mỗi trường cũng có thể sao chép riêng, nên bạn dùng được cả khi chỉ cần một mảnh dữ liệu thay vì cả địa chỉ, và có thể đọc thêm về cách đối chiếu chúng ở bài xác thực và chuẩn hóa địa chỉ.
Phần dành cho nhà phát triển
Hãy đặt bộ dữ liệu địa chỉ ở một vị trí duy nhất, có khuôn rõ ràng, và coi nó như một phần của sản phẩm chứ không phải phụ lục của bộ kiểm thử. Một bộ dữ liệu được bảo trì sẽ sống lâu hơn nhiều so với những đoạn dữ liệu chép tay trong từng tệp.
Những điểm khác nên chốt:
- Đặt tên bản ghi theo mục đích kiểm thử, không theo nội dung địa chỉ.
- Giữ cùng một tập trường cho mọi bản ghi, kể cả trường bỏ trống, để tránh lệch chuẩn về sau.
- Thêm một bài kiểm tra cho chính bộ dữ liệu, chạy cùng bộ kiểm thử sản phẩm.
- Ghi lại nguồn gốc dữ liệu, kể cả khi dữ liệu được sinh tự động, để người sau biết nó không phải dữ liệu thật.
- Kiểm thử cả bản ghi có địa chỉ ở nhiều dòng và bản ghi có ký tự ngoài bảng chữ cái Latin.
- Khi dữ liệu được dùng cho ảnh chụp màn hình hoặc tài liệu, rà lại xem có thông tin nào trông như dữ liệu thật hay không.
Bước tiếp theo
Hãy mở kho mã và tìm những chỗ địa chỉ đang được viết trực tiếp trong tệp kiểm thử. Sau đó gom chúng về một bộ dữ liệu chung, đặt tên theo mục đích, rồi dùng trình tạo địa chỉ giả để bổ sung những quốc gia còn thiếu thay vì chép thêm dữ liệu thật.