Trình tạo địa chỉ Hoa Kỳ là công cụ sinh ra những bản ghi địa chỉ được ghép theo đúng cấu trúc mà hệ thống bưu chính Hoa Kỳ dùng, để bạn có sẵn dữ liệu mà thử biểu mẫu, thử luồng thanh toán và thử các phép kiểm tra nhập liệu. Điểm đáng quan tâm không nằm ở chỗ bản ghi trông giống địa chỉ thật, mà ở chỗ các trường bên trong nó phải khớp với nhau: thành phố thuộc đúng bang, mã bưu chính thuộc đúng thành phố, mã bang viết đúng hai chữ cái theo chuẩn. Đọc hết bài này, bạn sẽ nắm được một địa chỉ Hoa Kỳ gồm những phần nào, vì sao các phần đó ràng buộc lẫn nhau, những lỗi nhập liệu nào đáng đưa vào bộ kiểm thử, và ranh giới giữa một bản ghi dùng để thử với một địa chỉ có thể gửi thư tới.
Một địa chỉ Hoa Kỳ được ghép từ những phần nào?
Một địa chỉ gửi thư ở Hoa Kỳ có ba tầng rõ rệt. Tầng hẹp nhất là số nhà kèm tên đường, và nếu tòa nhà có nhiều căn thì thêm số căn hộ hoặc số phòng. Tầng giữa là thành phố, mã bang viết bằng hai chữ cái, và mã bưu chính. Tầng rộng nhất là tên quốc gia, thường chỉ xuất hiện khi thư đi từ nước ngoài vào hoặc khi hệ thống của bạn cần một trường quốc gia riêng.
Thứ tự này đi từ đơn vị nhỏ nhất tới đơn vị lớn nhất, ngược với cách viết ở Nhật Bản, Trung Quốc hay Hàn Quốc, nơi địa chỉ mở đầu bằng tỉnh hoặc thành phố lớn rồi mới hạ xuống số nhà. Sự đảo ngược đó không chỉ là chuyện trình bày. Nếu bộ phân tích địa chỉ của bạn được viết cho một quốc gia theo thứ tự lớn tới nhỏ, nó sẽ tách sai ngay từ dòng đầu tiên khi gặp dữ liệu Hoa Kỳ. Bài định dạng địa chỉ quốc tế so sánh hai trật tự này và chỉ ra những chỗ giao diện dùng chung hay làm hỏng cả hai.
Số nhà đứng trước tên đường trong gần như mọi trường hợp ở Hoa Kỳ, khác với phần lớn châu Âu nơi số nhà đứng sau. Tên đường có thể chứa cả chữ lẫn số, có thể là một con số thứ tự, một chữ cái đơn, hoặc một cái tên ghép từ nhiều từ. Vì vậy, đừng viết quy tắc kiểm tra cho rằng tên đường chỉ gồm chữ cái, và cũng đừng đặt giới hạn độ dài dòng đường quá chặt, bởi tên đường ở đây có thể dài hơn nhiều so với dự đoán ban đầu của người thiết kế biểu mẫu.
Số căn hộ là phần gây tranh cãi nhất khi lưu trữ. Nó có thể được viết bằng chữ viết tắt, bằng dấu thăng, hoặc đặt hẳn xuống một dòng riêng, và cả ba cách đều chỉ cùng một giá trị. Nếu hệ thống của bạn coi cả dòng đường là một khối văn bản tự do, bạn sẽ không tách được số căn hộ để sắp xếp danh sách giao hàng theo tòa nhà, cũng không in được nhãn theo đúng quy ước của đơn vị vận chuyển.
Vì sao mã bưu chính phải khớp với thành phố và bang?
Trình tạo địa chỉ Hoa Kỳ chỉ hữu ích khi ba trường thành phố, mã bang và mã bưu chính cùng mô tả một chỗ. Nếu công cụ bốc ngẫu nhiên một mã bưu chính ở Texas rồi ghép với thành phố ở Oregon, bản ghi vẫn qua được phần lớn phép kiểm tra hình thức, vẫn hiển thị bình thường trên màn hình, nhưng lại hỏng đúng ở bước bạn cần nó đúng nhất: bước đối chiếu với dịch vụ kiểm tra địa chỉ hoặc bước gọi API của cổng thanh toán.
Có một lý do kỹ thuật khiến quan hệ này chặt. Mã bưu chính Hoa Kỳ không được cấp theo các khoảng số đều đặn cho từng bang, mà gán theo tuyến phát thư và theo dân cư, nên bạn không thể suy ra bang từ mã bưu chính bằng một công thức số học đơn giản. Muốn kiểm tra chéo, bạn phải tra cứu trong một bảng dữ liệu. Cách làm đúng là để bảng tra cứu đó là dữ liệu có thể cập nhật, chứ không phải một hằng số nằm rải rác trong mã nguồn.
Mã bưu chính còn có phần mở rộng bốn chữ số, thường viết sau một dấu gạch nối, dùng để thu hẹp phạm vi tới một nhóm địa chỉ nhỏ hơn trong cùng khu vực. Khi lưu dữ liệu, bạn cần quyết định rõ phần mở rộng này là bắt buộc, tùy chọn, hay bị bỏ qua. Nếu chỉ nhận năm chữ số, hãy cắt phần mở rộng một cách có ý thức và ghi lại rằng dữ liệu đã bị rút gọn, thay vì để nó lọt vào cột rồi làm hỏng các phép kiểm tra độ dài ở tầng sau. Bài định dạng mã bưu chính theo quốc gia đặt dạng này cạnh những dạng có chữ cái và dấu cách của các nước khác.
Năm mươi bang, thủ đô và các vùng lãnh thổ khác nhau ra sao?
Hệ thống mã hai chữ cái của Hoa Kỳ không chỉ gồm năm mươi bang. Nó còn có Đặc khu Columbia, nơi đặt thủ đô, và một nhóm vùng lãnh thổ như Puerto Rico, Guam, Quần đảo Virgin thuộc Hoa Kỳ, Samoa thuộc Hoa Kỳ và Quần đảo Bắc Mariana. Mỗi thực thể trong nhóm này có mã riêng, và mã của vùng lãnh thổ không được suy ra từ tên nước theo bất kỳ quy tắc nào.
Đây là chỗ nhiều biểu mẫu sai. Nếu danh sách chọn bang của bạn chỉ có năm mươi dòng, một khách hàng ở Puerto Rico sẽ không có cách nào nhập đúng địa chỉ, và nếu hệ thống ép họ chọn một bang đại diện thì dữ liệu thu được đã sai ngay từ nguồn. Cách xử lý hợp lý là đưa đủ mã vào danh sách, kèm nhãn dễ đọc, thay vì từ chối hoặc bắt người dùng chọn tạm.
Còn một nhóm nữa thường bị bỏ sót là địa chỉ quân sự. Nhóm này dùng hệ thống trung chuyển riêng, trong đó tên thành phố và mã bưu chính không mô tả một địa điểm dân sự thông thường. Nếu biểu mẫu của bạn kiểm tra chéo thành phố với mã bưu chính bằng một bảng dân sự thuần túy, nhóm người dùng này sẽ luôn bị báo lỗi dù họ nhập đúng. Bạn có thể xem cách trang này mô tả từng mã ở trang quốc gia Hoa Kỳ trước khi quyết định danh sách nào được phép vượt qua phép kiểm tra chéo.
Những lỗi nhập liệu nào hay gặp nhất?
Lỗi phổ biến nhất là chọn nhầm dòng gợi ý trong danh sách thành phố tự động, khiến thành phố thuộc bang này nhưng mã bang lại thuộc bang khác. Lỗi thứ hai là gõ mã bưu chính thiếu một chữ số, và vì phần lớn biểu mẫu chỉ kiểm tra độ dài nên sai sót chỉ lộ ra khi đơn hàng đã đi vào hệ thống. Lỗi thứ ba là trộn dấu phẩy và dấu cách ở sai vị trí, làm bộ phân tích tách nhầm thành phố ra khỏi bang.
Một nhóm lỗi khác đến từ chính người xây dựng hệ thống chứ không từ người dùng cuối. Ví dụ, đặt độ dài tối đa cho trường mã bang là ba ký tự để chừa chỗ cho dấu cách, rồi sau đó so khớp bằng phép so sánh chuỗi chính xác, khiến giá trị có dấu cách luôn trượt. Hoặc chuẩn hóa chữ hoa chữ thường ở tầng giao diện nhưng lại lưu nguyên bản ở tầng cơ sở dữ liệu, tạo ra hai cách viết cho cùng một mã bang.
Khi thiết kế bộ kiểm thử, hãy chuẩn bị ca có số căn hộ và ca không có, ca có phần mở rộng mã bưu chính và ca chỉ có năm chữ số, ca mã bang hợp lệ nhưng mã bưu chính lệch bang, ca địa chỉ quân sự, ca vùng lãnh thổ, và ca tên đường chứa chữ số. Bài các ca kiểm thử biểu mẫu địa chỉ khi thanh toán đi sâu vào danh sách này theo góc nhìn của người viết kiểm thử tự động.
Bộ dữ liệu của trang này bao phủ những gì?
Trình tạo địa chỉ Hoa Kỳ của trang này hiện phủ 201 thành phố, 1.999 quận và đơn vị hành chính, cùng 13.746 mã bưu chính trải khắp các bang, Đặc khu Columbia và các vùng lãnh thổ. Con số này không nhằm nói rằng bộ dữ liệu đầy đủ bằng kho dữ liệu của cơ quan bưu chính, mà nhằm nói rằng nó đủ rộng để bạn thử được những ca mà một danh sách vài chục dòng không bao giờ chạm tới.
Điều quan trọng hơn số lượng là cách các trường được ghép. Mỗi bản ghi được dựng như một khối, nghĩa là thành phố, mã bang, mã bưu chính và tiền tố điện thoại trong cùng bản ghi đều thuộc một khu vực. Nhờ vậy, bạn có thể dùng bản ghi để thử cả phép kiểm tra chéo giữa các trường, chứ không chỉ thử định dạng của từng trường riêng lẻ.
Sự đa dạng cũng nằm trong hình dạng chuỗi. Có bản ghi có số căn hộ, có bản ghi không. Có tên đường một từ, có tên đường nhiều từ. Có thành phố ngắn, có thành phố dài. Chính những khác biệt nhỏ này là thứ làm vỡ bố cục, làm tràn ô nhập liệu và làm lệch cột khi in, mà một tập dữ liệu chỉ có vài kiểu tên sẽ không bao giờ phát hiện ra.
Làm sao đưa dữ liệu mẫu vào bộ kiểm thử tự động?
Cách làm gọn nhất là cố định đầu vào sinh dữ liệu để mỗi lần chạy cho ra cùng một kết quả. Nếu mỗi lần chạy bộ kiểm thử lại nhận một địa chỉ khác, bạn sẽ không biết lỗi mình đang sửa là lỗi thật hay chỉ là hệ quả của một bản ghi mới. Với những ca cần nhiều dòng, hãy sinh một lô rồi lưu lại thành tệp và đọc từ tệp đó, thay vì gọi trình tạo ngay trong lúc chạy kiểm thử.
Khi ghép địa chỉ vào một bản ghi lớn hơn, hãy giữ nguyên quốc gia cho toàn bộ bản ghi. Một hồ sơ có giấy tờ của nước này nhưng địa chỉ và số điện thoại của Hoa Kỳ vẫn qua được khá nhiều phép kiểm tra, để rồi lộ ra ở bước xác minh cuối cùng và làm bạn mất thời gian truy nguyên. Nếu bạn cần nhiều quốc gia trong cùng một đợt thử, hãy xem trình tạo địa chỉ Thổ Nhĩ Kỳ như một ví dụ về quốc gia có trật tự viết hoàn toàn khác, và trình tạo địa chỉ ngẫu nhiên để hiểu vì sao tính tái lập quan trọng hơn tính bất ngờ.
Một chi tiết nhỏ nhưng hay bị bỏ qua là ghi nguồn gốc tổng hợp ngay trong dữ liệu, chẳng hạn một trường đánh dấu bản ghi là dữ liệu thử. Trường này giúp bạn lọc ra và xóa sạch khi cần, đồng thời ngăn một bản ghi thử lọt vào môi trường thật theo đường xuất tệp hoặc sao lưu.
Trình tạo địa chỉ Hoa Kỳ dùng khi nào và không dùng khi nào?
Nên dùng khi bạn cần thử biểu mẫu đăng ký, luồng thanh toán, luồng giao hàng, bộ lọc và sắp xếp danh sách địa chỉ, hoặc khi bạn cần vài nghìn dòng để thử phân trang và xuất tệp. Cũng nên dùng khi bạn muốn dạy cho hệ thống của mình biết rằng một địa chỉ Hoa Kỳ hợp lệ về hình thức vẫn có thể có nhiều hình dạng chuỗi khác nhau.
Không nên dùng khi bạn cần một địa chỉ có thể nhận thư thật, cần đối chiếu với hồ sơ của một người cụ thể, hoặc cần chứng minh rằng một quy trình nghiệp vụ nào đó đã xác minh được danh tính của ai. Những bản ghi ở đây được sinh bằng thuật toán theo quy ước định dạng, không trỏ tới căn nhà nào có thật, và không thay thế được bất kỳ bước xác minh nào của cơ quan hay tổ chức thật.
Cũng đừng dùng chúng để lấp chỗ trống trong cơ sở dữ liệu thật hay trong báo cáo gửi ra bên ngoài. Một khi dữ liệu tổng hợp bị trộn lẫn với dữ liệu vận hành mà không có dấu phân biệt, việc dọn dẹp về sau sẽ tốn kém hơn rất nhiều so với công sức bạn tiết kiệm được lúc đầu.
Bước tiếp theo
Hãy mở trình tạo địa chỉ, chọn Hoa Kỳ, rồi sinh vài bản ghi liên tiếp và đối chiếu từng bản ghi xem thành phố, mã bang và mã bưu chính có cùng mô tả một chỗ hay không. Sau đó thử dán một trong các bản ghi đó vào biểu mẫu của bạn ở cả dạng có số căn hộ và dạng không có, rồi quan sát xem hệ thống phản ứng thế nào khi bạn cố tình đổi mã bang sang một bang khác.
Toàn bộ dữ liệu do trang này sinh ra là dữ liệu kiểm thử tổng hợp: định dạng và quan hệ giữa các trường đúng theo quy ước của Hoa Kỳ, nhưng không ứng với người nào, nhà nào hay tài khoản nào có thật, và chỉ nên dùng cho việc thử phần mềm, thử biểu mẫu và trình diễn giao diện.