Kiểm thử phần mềm

Kiểm chứng thời hạn phản hồi trên vết hữu hạn

Phân biệt yêu cầu quá hạn với yêu cầu chưa quan sát đủ lâu.

Vấn đề nghiên cứuNâng cao6 phút đọcPython

Thích và đánh giá Bình luận và hỏi đáp
Nếu vết kết thúc trước hạn mà chưa thấy phản hồi, kết quả chưa kết luận.
Nếu vết kết thúc trước hạn mà chưa thấy phản hồi, kết quả chưa kết luận. Mở hình lớn ↗

1. Xác định quan hệ giữa yêu cầu và phản hồi

Mỗi yêu cầu trong ví dụ có mã duy nhất và mốc gửi. Phản hồi cần mang cùng mã. Hợp đồng đòi có ít nhất một phản hồi trong khoảng từ lúc gửi tới lúc gửi cộng hạn. Nếu chỉ kiểm tra có một phản hồi nào xuất hiện trong toàn nhật ký, một phản hồi quá muộn vẫn có thể bị chấp nhận nhầm.

2. Dùng mốc quan sát để tránh lỗi giả

Khi yêu cầu B được gửi ở mốc 1 và hạn bằng 3, ta phải quan sát tới mốc 4 mới kết luận B đã quá hạn nếu chưa có phản hồi. Vết dừng ở mốc 2 chỉ cho kết quả chưa đủ dữ liệu. Mốc này cần biểu thị phạm vi đã thu thập đầy đủ, thay vì đơn thuần là thời gian hiện tại trên một máy.

3. Chạy ba vết có kết quả khác nhau

Mã so một phản hồi B ở mốc 5, một phản hồi ở đúng mốc 4 và một vết mới quan sát tới 2. Ba kết quả lần lượt là quá hạn, đạt và chưa đủ dữ liệu. Mẫu chấp nhận phản hồi đúng ngưỡng. Nếu có nhiều phản hồi, nó xét phản hồi hợp lệ sớm nhất theo mã yêu cầu.

Chạy ví dụ bằng python test_han_phan_hoi_theo_vet.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.

Python · test_han_phan_hoi_theo_vet.pyTải mã nguồn
def danh_gia(gui, nhan, han, da_quan_sat_den):
    ket_qua = {}
    for ma, bat_dau in gui.items():
        moc_han = bat_dau + han
        cac_lan = [t for t in nhan.get(ma, []) if bat_dau <= t <= da_quan_sat_den]
        if cac_lan:
            ket_qua[ma] = "đạt" if min(cac_lan) <= moc_han else "quá hạn"
        else:
            ket_qua[ma] = "quá hạn" if da_quan_sat_den >= moc_han else "chưa đủ dữ liệu"
    return ket_qua

gui = {"A": 0, "B": 1}
assert danh_gia(gui, {"A": [2], "B": [5]}, 3, 5) == {"A": "đạt", "B": "quá hạn"}
assert danh_gia(gui, {"A": [2], "B": [4]}, 3, 4) == {"A": "đạt", "B": "đạt"}
assert danh_gia(gui, {"A": [2]}, 3, 2) == {"A": "đạt", "B": "chưa đủ dữ liệu"}
print("Phân biệt đạt, quá hạn và vết chưa quan sát đủ.")

4. Kiểm tra đồng hồ và sự đầy đủ của log

Trong hệ thống phân tán, mốc từ hai máy có thể lệch. Có thể đo thời gian từ cùng một phía hoặc dùng thông tin đồng bộ có sai số đã biết. Đặt quy tắc cho yêu cầu bị hủy và mã được tái sử dụng. Trước khi kết luận vi phạm, kiểm tra xem log có bị mất bản ghi hoặc tới trễ hay không.

Đọc thêm Đồng hồ đơn điệu trong tài liệu Python.