개요
Differential testing은 동일한 입력을 여러 유사한 Application (혹은 버전만 다른 같은 Application)에 제공하고 실행의 차이를 관찰하여 버그를 탐지하는 Fuzzing기법이다. Differnetial testing은 Crash나 Abortion을 유발하지 않는 Semantic혹은 Logical bug를 발견하기 위해서 사용된다. Differential testing은 다른 발로 Back-to-Back testing이라고 불리기도 한다.
Differential testing은 동일한 기능의 다양한 구현을 오라클로 사용하여서 버그를 찾는다. 만약 동일한 입력인데 서로다른 프로그램의 동작 차이가 발생하면, 이는 잠재적인 버그로 간주된다.
Differential testing은 SSL/TLS 구현, C/C++ 컴파일러 버그 추적, JVM처럼 다양한 분야에서 사용된다.
전략
- Unguided Input Generation
- 비유도 입력 생성은, 과거의 정보를 고려하지 않고 모든 Test case generation이 독립적으로 생성한다. 따라서 간단하나 비효율적일 가능성이 매우 높은 방식이다.
- Guided Input Generation
- 유도 입력 생성은 Domain-specific정보나 Symbolic execution처럼 다양한 프로그램의 사전정보를 가지고 Test case를 생성해 내는 방식을 말한다. 각 프로그램의 특성을 반영하는 복잡한 Policy를 가지고 있으나, 효율적인 방식으로 활발한 연구가 진행되고 있다.