피드로 돌아가기
GeekNewsDevOps
원문 읽기
테스트 케이스 리듀서는 과소평가된 디버깅 도구
흥미성 테스트 기반 입력 최적화로 디버깅 복잡도 99% 제거
AI 요약
Context
대규모 입력 데이터에서 발생하는 비결정적 버그나 크래시 분석 시 수동 축소 방식의 높은 시간 비용과 누락 가능성이 병목 지점으로 작용. 단순 텍스트 삭제만으로는 상호 의존적인 데이터 구조의 최소 재현 케이스를 찾는 검색 공간을 효율적으로 탐색하기 어려움.
Technical Solution
- 프로그램, 입력, 흥미성 테스트(Interestingness Test)를 분리하여 입력 크기를 최소화하는 반복적 최적화 루프 설계
- 흥미성 테스트를 통한 0/1 반환 값 기반의 필터링으로 타겟 버그 재현 여부를 판별하는 오라클 구조 채택
- 단순 줄 삭제부터 정수 값 축소, 표준 주석 제거까지 단계별 축소 규칙을 적용하는 계층적 리듀싱 전략 적용
- 타임아웃 설정을 초기 실행 시간의 1.5~2배로 동적 할당하여 무한 루프 진입으로 인한 리듀서 정지 방지
- 비결정적 버그 해결을 위해 'n회 중 1회 이상 발생'에서 'n회 연속 발생'으로 흥미성 테스트의 엄격도를 점진적으로 상향하는 전략 사용
- 입력 길이 외에 실행 추적(Execution Trace) 라인 수를 대리 지표로 설정하여 로그 밀도를 최적화하는 맞춤형 목적 함수 정의
실천 포인트
- [ ] 버그 재현 입력이 100라인 이상인 경우 자동 리듀서 도입 검토 - [ ] 단순 크래시 여부 외에 실행 시간, 로그 라인 수 등 정량적 지표를 흥미성 테스트에 반영 - [ ] 비결정적 버그의 경우 '확률적 통과 -> 결정적 통과' 순으로 테스트 엄격도 상향 조정 - [ ] 리듀서 실행 속도 향상을 위해 코어 덤프 생성 비활성화 등 테스트 환경 최적화 수행