Kiểm thử phần mềm
Tái lập kiểm thử ngẫu nhiên bằng seed và mẫu đầu vào
Giải thích vì sao lưu seed cần đi cùng phiên bản bộ sinh và dữ liệu gây lỗi.
Thích và đánh giá Bình luận và hỏi đáp1. Một seed chưa mô tả toàn bộ phép thử
Seed khởi tạo trạng thái của bộ sinh. Chuỗi kết quả còn phụ thuộc việc gọi những hàm nào, thứ tự gọi và thuật toán sinh dữ liệu ở bên ngoài. Nếu thêm một lần gọi ngẫu nhiên trước khi tạo đầu vào, các giá trị sau đó có thể khác dù seed giữ nguyên. Kịch bản kiểm thử chạy đồng thời còn có thể thay đổi thứ tự tiêu thụ số.
2. Tách bộ sinh theo mục đích
Dùng một đối tượng Random riêng cho dữ liệu ca thử để tránh mã ghi log hoặc sinh màu giao diện dùng chung trạng thái. Ghi phiên bản bộ sinh, tham số miền và phiên bản môi trường khi cần tái lập chuỗi. Tài liệu Python mô tả phạm vi bảo đảm tái lập, vì vậy không nên giả định mọi hàm tiện ích giữ nguyên thuật toán qua mọi phiên bản.
3. Lưu trực tiếp mẫu gây lỗi
Mẫu Python dùng seed 17 rồi tạo tám số. Chạy lại cùng quá trình cho cùng dãy trong môi trường kiểm tra. Chèn một bước lấy số ngẫu nhiên làm dãy thay đổi. Chương trình tuần tự hóa seed, phiên bản bộ sinh và đầu vào thành JSON, rồi in ra màn hình; nó chưa ghi tệp. Sao chép JSON này vào báo cáo hoặc tệp dữ liệu hồi quy để giữ mẫu cụ thể mà không cần chạy lại quá trình tìm lỗi.
Chạy ví dụ bằng python test_tai_lap_bo_sinh.py.
Môi trường thực hành. Python 3.10 trở lên. Ví dụ dùng thư viện chuẩn Python.
import json
from random import Random
def sinh(seed, chen_buoc=False):
rng = Random(seed)
if chen_buoc:
rng.random()
return [rng.randrange(0, 10) for _ in range(8)]
seed = 17
ban_dau = sinh(seed)
assert ban_dau == sinh(seed)
assert ban_dau != sinh(seed, chen_buoc=True)
luu = json.dumps({"seed": seed, "input": ban_dau, "generator": "v1"}, ensure_ascii=False)
doc_lai = json.loads(luu)
assert doc_lai["input"] == ban_dau
print("Ảnh chụp mẫu JSON", luu)4. Thiết kế quy trình tìm và lưu lỗi
Khi gặp lỗi, trước hết lưu đầu vào và thông tin triển khai. Sau đó thu nhỏ mẫu bằng một oracle ổn định, luôn giữ một bản gốc để đối chiếu. Tách số ca đã chạy khỏi số mẫu khác nhau vì một bộ sinh có thể tạo trùng. Nếu sửa cách sinh dữ liệu, đánh giá lại độ phủ và khả năng tìm lỗi trên cùng ngân sách.