Kiểm thử phần mềm
Kiểm thử nhất quán có độ trễ bằng đồng hồ giả
Phân biệt dữ liệu chưa kịp cập nhật, vượt hạn và cập nhật sai giá trị.
Thích và đánh giá Bình luận và hỏi đáp1. Xác định hợp đồng thời gian
Khi ghi vào nguồn chính, chỉ mục tìm kiếm có thể cập nhật sau. Một kiểm thử đọc ngay rồi buộc dữ liệu mới xuất hiện sẽ tạo lỗi giả nếu hệ thống cho phép độ trễ. Cần ghi rõ mốc bắt đầu tính hạn, trạng thái có thể quan sát trước hạn và yêu cầu tại hạn. Ví dụ quan sát các nhịp từ 0 đến 5, cho phép bản cũ ở các nhịp 0–4 và yêu cầu thấy bản mới chậm nhất ở nhịp 5.
2. Tách kết quả sai khỏi kết quả chưa có
Giá trị cũ trong thời gian chờ có thể hợp lệ. Giá trị khác cả cũ lẫn mới cho thấy hệ thống đã ghi nhận nội dung ngoài dự kiến. Trong ví dụ, oracle trả ba kết quả gồm đạt, sai dữ liệu và vượt hạn. Điều kiện đọc tại hạn được kiểm tra trước khi kết luận vượt hạn, nên dữ liệu xuất hiện đúng nhịp 5 vẫn đạt.
3. Kiểm tra ngay tại hai phía của hạn
Mã nhận hàm đọc theo nhịp, vì vậy chạy ngay không dùng sleep. Tạo một ca hiện ở nhịp 5, một ca hiện ở nhịp 6 và một ca hiện sai ở nhịp 2. Ba ca trả về ba kết quả khác nhau. Trong kiểm thử tích hợp, truyền đồng hồ đơn điệu và giới hạn tổng thời gian thay vì đặt một khoảng nghỉ cố định ở mọi lần chạy.
Chạy ví dụ bằng python test_nhat_quan_tre.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.
def cho_cap_nhat(doc, han, cu="v1", moi="v2"):
for nhip in range(han + 1):
gia_tri = doc(nhip)
if gia_tri == moi:
return "đạt"
if gia_tri != cu:
return "sai dữ liệu"
return "vượt hạn"
assert cho_cap_nhat(lambda t: "v2" if t >= 5 else "v1", 5) == "đạt"
assert cho_cap_nhat(lambda t: "v2" if t >= 6 else "v1", 5) == "vượt hạn"
assert cho_cap_nhat(lambda t: "lỗi" if t >= 2 else "v1", 5) == "sai dữ liệu"
# Oracle chỉ kiểm tra lần xuất hiện đầu, không kiểm tra hội tụ ổn định.
assert cho_cap_nhat(lambda t: "v2" if t == 4 else "v1", 5) == "đạt"
print("Ba nhánh đúng kỳ vọng; oracle dừng tại lần đầu thấy bản mới.")Giới hạn của oracle. Hàm dừng ngay khi thấy v2. Nếu lần đọc ở nhịp 4 là v2 nhưng nhịp 5 quay về v1, ca hiện tại vẫn đạt vì không đọc tiếp. Kết quả chỉ xác nhận đã quan sát bản mới trong hạn. Muốn kiểm tra hội tụ ổn định hoặc cấm đọc lùi phiên bản, cần giữ một cửa sổ quan sát sau lần xuất hiện đầu tiên và định nghĩa thêm điều kiện.
4. Chọn chu kỳ quan sát có chủ đích
Lấy mẫu quá thưa có thể bỏ qua một trạng thái sai thoáng qua. Lấy mẫu quá dày có thể làm tăng tải và ảnh hưởng kết quả. Nếu đặc tả yêu cầu không bao giờ lộ trạng thái trung gian, bổ sung nhật ký sự kiện hoặc lịch thực thi điều khiển được. Báo riêng kết quả quan sát và khả năng quan sát của bộ đo.