Kiểm thử phần mềm
Dùng bất biến sổ cái để phát hiện sai lệch giao dịch
Thiết kế oracle quan sát từng tài khoản và tổng tiền trước, sau chuỗi chuyển khoản.
Thích và đánh giá Bình luận và hỏi đáp1. Chọn bất biến quan sát được
Trong một hệ thống giả lập không có phí và chỉ chuyển giữa các tài khoản nội bộ, tổng số dư phải được bảo toàn. Dùng số nguyên theo đơn vị nhỏ nhất để tránh tranh luận về làm tròn. Chụp dữ liệu trước và sau thao tác trong cùng phạm vi kiểm thử. Nếu có hoạt động khác xen vào, tổng chênh có thể thuộc giao dịch ngoài phạm vi và oracle không còn cô lập lỗi.
2. Tổng đúng vẫn có thể ghi sai người nhận
Một lỗi ghi số tiền sang C thay vì B vẫn bảo toàn tổng. Do đó cần kiểm tra chênh lệch của A, B và mọi tài khoản khác. A giảm đúng số tiền, B tăng đúng số tiền và C giữ nguyên. Đối với giao dịch bị từ chối, ảnh chụp sau phải giống ảnh chụp trước. Những điều kiện này bắt được các nhóm lỗi khác nhau.
3. Dùng biến thể lỗi để đo độ nhạy
Ví dụ chuyển 7 từ A sang B. Bản đúng cho A từ 20 xuống 13 và B từ 4 lên 11. Bản lỗi tăng C lên 8. Hàm bảo toàn tổng chấp nhận cả hai, còn phép kiểm tra chênh theo từng tài khoản chỉ chấp nhận bản đúng. Bài tập thêm là bỏ bước ghi có để quan sát khi nào oracle tổng đủ phát hiện lỗi.
Chạy ví dụ bằng python test_doi_soat_so_cai.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 bao_toan(truoc, sau):
return sum(truoc.values()) == sum(sau.values())
def dung_nguoi_nhan(truoc, sau, gui, nhan, tien):
if truoc.keys() != sau.keys():
return False
mong_doi = {ma: 0 for ma in truoc}
mong_doi[gui] -= tien
mong_doi[nhan] += tien
return all(sau[ma] - truoc[ma] == delta for ma, delta in mong_doi.items())
truoc = {"A": 20, "B": 4, "C": 1}
dung = {"A": 13, "B": 11, "C": 1}
sai = {"A": 13, "B": 4, "C": 8}
assert bao_toan(truoc, dung) and bao_toan(truoc, sai)
assert dung_nguoi_nhan(truoc, dung, "A", "B", 7)
assert not dung_nguoi_nhan(truoc, sai, "A", "B", 7)
print("Tổng giống nhau, oracle từng tài khoản phát hiện bản ghi sai.")4. Mở rộng tới chuỗi giao dịch
Sinh chuỗi gồm giao dịch hợp lệ, vượt số dư, gửi lại và hoàn tác. Ghi mô hình kỳ vọng theo từng bước và tìm chỉ số đầu tiên lệch, thay vì chỉ xem ảnh chụp cuối. Cần xác định phí, quyền ghi nợ và đơn vị làm tròn theo đặc tả của hệ thống đang kiểm tra trước khi dùng bất biến trong dự án thật.