Tôi ủng hộ các bài kiểm tra ngẫu nhiên, và tôi viết chúng. Tuy nhiên, liệu chúng có phù hợp trong một môi trường xây dựng cụ thể không và chúng nên được đưa vào bộ thử nghiệm nào trong câu hỏi nhiều sắc thái hơn.
Chạy cục bộ (ví dụ, qua đêm trên hộp dev của bạn) các thử nghiệm ngẫu nhiên đã tìm thấy các lỗi cả rõ ràng và tối nghĩa. Những cái tối nghĩa là đủ phức tạp mà tôi nghĩ rằng thử nghiệm ngẫu nhiên thực sự là thử nghiệm thực tế duy nhất để loại bỏ chúng. Để thử nghiệm, tôi đã lấy một lỗi khó tìm thấy được phát hiện thông qua thử nghiệm ngẫu nhiên và có một nửa tá nhà phát triển crack xem xét chức năng (khoảng một chục dòng mã) nơi nó xảy ra. Không ai có thể phát hiện ra nó.
Nhiều đối số của bạn chống lại dữ liệu ngẫu nhiên là hương vị của "bài kiểm tra không thể lặp lại". Tuy nhiên, một thử nghiệm ngẫu nhiên được viết tốt sẽ nắm bắt hạt giống được sử dụng để bắt đầu hạt giống ngẫu nhiên và đưa ra thất bại. Ngoài việc cho phép bạn lặp lại thử nghiệm bằng tay, điều này cho phép bạn tạo ra thử nghiệm mới một cách tầm thường nhằm kiểm tra vấn đề cụ thể bằng cách mã hóa hạt giống cho thử nghiệm đó. Tất nhiên, có thể tốt hơn để mã hóa một bài kiểm tra rõ ràng bao gồm trường hợp đó, nhưng sự lười biếng có những ưu điểm của nó và điều này thậm chí cho phép bạn tự động tạo ra các trường hợp thử nghiệm mới từ một hạt giống thất bại.
Tuy nhiên, một điểm bạn đưa ra mà tôi không thể tranh luận là nó phá vỡ các hệ thống xây dựng. Hầu hết các bài kiểm tra tích hợp và liên tục đều mong muốn các bài kiểm tra sẽ làm điều tương tự, mọi lúc. Vì vậy, một bài kiểm tra ngẫu nhiên thất bại sẽ tạo ra sự hỗn loạn, thất bại ngẫu nhiên và chỉ tay vào những thay đổi vô hại.
Sau đó, một giải pháp là vẫn chạy các thử nghiệm ngẫu nhiên của bạn như là một phần của thử nghiệm xây dựng và CI, nhưng chạy nó với một hạt giống cố định, cho một số lần lặp cố định . Do đó, bài kiểm tra luôn làm điều tương tự, nhưng vẫn khám phá một loạt không gian đầu vào (nếu bạn chạy nó cho nhiều lần lặp).
Tại địa phương, ví dụ, khi thay đổi lớp liên quan, bạn có thể tự do chạy nó để lặp lại nhiều hơn hoặc với các hạt giống khác. Nếu thử nghiệm ngẫu nhiên trở nên phổ biến hơn, bạn thậm chí có thể tưởng tượng một bộ thử nghiệm cụ thể được biết là ngẫu nhiên, có thể được chạy với các hạt khác nhau (do đó tăng độ bao phủ theo thời gian) và trong đó thất bại không có nghĩa tương tự như các hệ thống CI xác định (nghĩa là các lần chạy không liên quan 1: 1 với các thay đổi mã và do đó bạn không chỉ tay vào một thay đổi cụ thể khi mọi thứ không thành công).
Có rất nhiều điều để nói về các bài kiểm tra ngẫu nhiên, đặc biệt là các bài kiểm tra được viết tốt, vì vậy đừng quá nhanh chóng để loại bỏ chúng!