Kiểm thử phần mềm
Thu nhỏ dữ liệu tái hiện lỗi bằng cách loại từng phần
Tách thao tác gây lỗi khỏi dữ liệu nhiễu và kiểm tra giới hạn của phép thu nhỏ tham lam.
Thích và đánh giá Bình luận và hỏi đáp1. Định nghĩa lỗi mục tiêu trước khi thu nhỏ
Một bộ dữ liệu dài có thể gây lỗi vì hai thao tác cách xa nhau. Chọn tín hiệu đủ cụ thể, chẳng hạn loại ngoại lệ và điểm phát sinh. Nếu chỉ giữ mọi dữ liệu làm chương trình báo lỗi, thao tác thu nhỏ có thể chuyển sang lỗi cú pháp khác và không còn tái hiện vấn đề ban đầu.
2. Thử bỏ từng phần và lặp lại
Ví dụ lỗi xuất hiện khi bật bộ nhớ đệm rồi nhập lại dữ liệu theo đúng thứ tự, nếu giữa hai bước không có thao tác dọn bộ đệm. Thử xóa lần lượt các phần, chỉ giữ phép xóa còn tái hiện. Sau mỗi lần xóa thành công, duyệt lại vì việc thay đổi dữ liệu có thể làm một phần tử khác trở nên dư.
3. Kiểm tra kết quả tối tiểu cục bộ
Mã thu được hai thao tác. Bỏ riêng bất kỳ thao tác nào thì không còn lỗi. Đây là kết luận 1-minimal theo phép xóa, chưa bảo đảm dữ liệu ngắn nhất trong mọi ứng viên. Có trường hợp phải xóa đồng thời hai phần thì lỗi mới xuất hiện trở lại, trong khi bỏ riêng từng phần làm lỗi biến mất.
Chạy ví dụ bằng python test_thu_nho_du_lieu_loi.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 loi_muc_tieu(thao_tac):
cache = False
for ten in thao_tac:
if ten == "bat_cache":
cache = True
if ten == "don_cache":
cache = False
if ten == "nhap_lai" and cache:
return True
return False
def thu_nho(du_lieu):
assert loi_muc_tieu(du_lieu)
while True:
for i in range(len(du_lieu)):
ung_vien = du_lieu[:i] + du_lieu[i + 1:]
if loi_muc_tieu(ung_vien):
du_lieu = ung_vien
break
else:
return du_lieu
ket_qua = thu_nho(["mo", "bat_cache", "cuon", "nhap_lai", "dong"])
assert ket_qua == ["bat_cache", "nhap_lai"]
assert all(not loi_muc_tieu(ket_qua[:i] + ket_qua[i+1:]) for i in range(len(ket_qua)))
print(ket_qua)4. Tăng hiệu quả với dữ liệu có cấu trúc
Có thể bỏ cả khối trước, sau đó thu nhỏ bên trong khối. Với chuỗi gọi API, cần giữ phụ thuộc tạo tài nguyên và mã định danh. Ghi số lần chạy oracle, kích thước đầu vào trước và sau, cùng các ứng viên không thực thi được. So hai chiến lược trên cùng lỗi và dùng bộ ca thu nhỏ làm ca hồi quy.
Đọc thêm Nghiên cứu về thu nhỏ đầu vào gây lỗi của Zeller và Hildebrandt.