검사 목표를 만드는 이유
프로젝트를 초기화한 뒤 퍼저가 호출할 목표 함수를 구성한다. 입력을 대상 로직에 전달하고 잘못된 상태나 패닉을 드러내도록 작성한다. 라이브러리 전체가 자동으로 빠짐없이 검사되는 것은 아니므로 진입점과 입력 해석 및 확인 조건을 선택하는 과정이 중요하다. 워크스페이스의 구성도 대상 프로젝트에 맞춘다.
실패 입력과 코퍼스 축소
실패를 일으키는 입력 하나를 줄이는 작업과 전체 입력 모음에서 중복적인 사례를 줄이는 작업을 구분한다. 전자는 원인 파악을 돕고 후자는 탐색에 사용할 자료의 크기를 관리한다. 구조화된 입력은 디버그 표현으로 확인할 수 있다. 축소 후에도 같은 문제를 재현하는지 대상 소스와 실행 조건을 맞춰 확인한다.
실행 환경과 결과 해석
공식 안내는 LLVM sanitizer 지원과 nightly 플래그 및 C++ 컴파일러 같은 실행 조건을 설명한다. 지원되는 아키텍처와 운영체제를 확인해야 하며 일반 Rust 프로젝트가 빌드된다는 사실만으로 퍼징 환경이 준비되지는 않는다. 커버리지 자료도 생성할 수 있지만 제한된 실행에서 실패를 찾지 못했다고 모든 입력의 안전성이 입증되는 것은 아니다.