Kiểm định các bài kiểm thử do AI tạo: Một nửa kết quả CI xanh không chứng minh được điều gì
Một bài kiểm thử vượt qua (pass) tạo cảm giác như một bằng chứng. Nhưng thực tế thường ít giá trị hơn bạn nghĩ.
Một bài kiểm thử khẳng định rằng mã nguồn thực hiện đúng những gì bài kiểm thử mong đợi. Nếu cùng một tác giả viết cả mã nguồn lẫn kỳ vọng, thì kỳ vọng đó sẽ bị định hình bởi chính mã nguồn. Bài kiểm thử vượt qua vì nó được viết ra để vượt qua.
Một dấu tích xanh chứng minh rằng các bài kiểm thử của bạn đồng nhất với mã nguồn. Nó không chứng minh rằng mã nguồn đó là chính xác.
Vấn đề này trở nên nghiêm trọng hơn khi các AI agent gửi toàn bộ các pull request. Chúng viết cả phần triển khai (implementation) lẫn các bài kiểm thử trong cùng một lần. Dấu tích xanh không trở nên đáng tin cậy hơn khi tác giả thay đổi.
Tôi đã xây dựng mirror_audit.py để tìm ra lỗ hổng này. Nó đọc mã nguồn kiểm thử bằng AST. Nó không bao giờ chạy mã. Nó tìm kiếm ba mô hình phổ biến:
- The Recompute (Tái tính toán): Bài kiểm thử sử dụng cùng một công thức với mã nguồn. Nó giống như
f(x) == f(x)dưới một lớp vỏ bọc khác. - The Golden Literal (Giá trị hằng số vàng): Bài kiểm thử sử dụng một con số được sao chép từ một lần chạy trước đó. Nó cố định bài kiểm thử vào bất kỳ kết quả nào mà mã nguồn đã thực hiện vào ngày đầu tiên, bao gồm cả các lỗi.
- The Smoke Test (Kiểm thử khói): Bài kiểm thử kiểm tra xem kết quả có khác
Nonehay không nhưng lại thiếu một assertion thực sự.
Tôi đã chạy thử công cụ này trên hai bộ kiểm thử (suites).
Bộ kiểm thử thứ nhất được thiết kế để mô phỏng lại phần triển khai. Nó đạt tỷ lệ mirror-ratio là 50.0%. CI thất bại. Một nửa số bài kiểm thử không mang lại tín hiệu độc lập nào.
Bộ kiểm thử thứ hai thì trung thực. Nó sử dụng các trường hợp tiêu cực (negative cases) và các kỳ vọng độc lập. Nó đạt tỷ lệ 0.0%. CI vượt qua.
Tỷ lệ mirror-ratio không đo lường tỷ lệ lỗi của bạn. Nó đo lường sự thiếu hụt tín hiệu độc lập. Nó cho bạn biết bao nhiêu phần trăm kết quả CI xanh chỉ là do bộ kiểm thử đang "gật đầu đồng ý" với mã nguồn.
Nếu một bài kiểm thử tính toán ra cùng một kết quả sai lệch như phần triển khai, bài kiểm thử đó vẫn sẽ hiện màu xanh. Nếu một bài kiểm thử khẳng định một hợp đồng (contract) thực sự, bài kiểm thử sẽ chuyển sang màu đỏ và bắt được lỗi.
Đừng chỉ nhìn vào coverage. Hãy tự hỏi liệu các bài kiểm thử của bạn có thực sự có thể thất bại vì một lý do thực tế hay không.
Source: https://dev.to/alex_spinov/audit-ai-generated-tests-half-of-green-ci-proves-nothing-4bmb
Optional learning community: https://t.me/GyaanSetuAi
