나는 무작위 테스트에 찬성하여 작성합니다. 그러나 특정 빌드 환경에 적합한 지 여부와 포함해야 할 테스트 스위트가 더 미묘한 문제입니다.
무작위 테스트를 통해 로컬에서 (예 : 개발자 박스에서 밤새) 실행하면 명백하고 모호한 버그가 발견되었습니다. 모호한 테스트는 무작위 테스트로 실제로 테스트 할 수있는 유일한 현실적인 테스트라고 생각합니다. 테스트로, 무작위 테스트를 통해 발견 된 찾기 힘든 버그를 하나 발견했으며, 개발자가 약 12 줄의 코드 (약 12 줄의 코드)를 검토하도록했습니다. 아무도 그것을 감지하지 못했습니다.
무작위 데이터에 대한 많은 주장은 "테스트를 재현 할 수 없습니다"라는 풍미입니다. 그러나 잘 작성된 무작위 테스트는 무작위 시드를 시작하고 실패시 출력하는 데 사용되는 시드를 캡처합니다. 직접 테스트를 반복 할 수있을뿐만 아니라, 해당 테스트의 시드를 하드 코딩하여 특정 문제를 테스트하는 새로운 테스트를 간단하게 만들 수 있습니다. 물론,이 경우를 다루는 명시 적 테스트를 직접 코딩하는 것이 더 좋지만 게으름에는 장점이 있으며, 따라서 실패한 시드에서 새로운 테스트 사례를 자동 생성 할 수도 있습니다.
그러나 내가 토론 할 수 없다는 점은 빌드 시스템을 손상 시킨다는 것입니다. 대부분의 빌드 및 연속 통합 테스트는 매번 테스트가 동일한 작업을 수행 할 것으로 예상합니다. 따라서 무작위로 실패한 테스트는 혼란을 일으키고 무작위로 실패하고 무해한 변화를 손가락으로 가리킬 것입니다.
해결책은 빌드 및 CI 테스트의 일부로 무작위 테스트를 계속 실행하지만 고정 된 수의 반복을 위해 고정 시드로 실행하는 것입니다 . 따라서 테스트는 항상 동일한 작업을 수행하지만 여러 반복을 위해 실행하는 경우 여전히 많은 입력 공간을 탐색합니다.
예를 들어 관련 클래스를 변경할 때 로컬로 더 많은 반복 또는 다른 시드를 위해 자유롭게 실행할 수 있습니다. 무작위 테스트가 점점 더 대중화되면 무작위로 알려진 특정 테스트 세트를 상상할 수 있습니다.이 테스트는 다른 시드로 실행될 수 있으며 (따라서 시간이 지남에 따라 적용 범위가 증가 함) 실패가 동일한 것을 의미하지 않는 경우 결정적 CI 시스템으로서 (즉, 실행은 코드 변경과 1 : 1과 관련이 없으므로 실패 할 때 특정 변경을 손가락으로 가리 키지 않습니다).
무작위 시험, 특히 잘 작성된 시험에 대해 많은 이야기가 있으므로 너무 빨리 끝내지 마십시오!