본문 바로가기
개발/테스팅

Concolic 테스팅

by ▶ Carpe diem ◀ 2023. 9. 3.

동적 심볼릭(Concolic) 테스팅

동적 심볼릭 테스팅이란?

프로그램 소스코드를 입력 받은 후, 프로그램의 구조와 의미를 분석하여 프로그램의 모든 경로를 도달하도록 테스트 입력 값을 연속적으로 생성하는 whitebox 테스트 기법이다.

 

Concolic 은 아래와 같이 concrete 와 symbolic 이 합쳐진 단어입니다.

  • Concolic: CONCrete + symbOLIC

이름에서 알 수 있듯이 동적 심볼릭 테스팅은 실행 경로 탐색과 심볼릭 실행을 결합한 테스트 기법입니다. 실행 경로 탐색은 프로그램의 모든 가능한 실행 경로를 찾는 작업을 말하고, 심볼릭 실행은 프로그램의 변수를 기호로 처리하여 실행하는 작업을 말합니다.

 

동적 심볼릭 테스팅 과정

  1. 프로그램의 실행 경로를 탐색합니다.
  2. 각 실행 경로에 대해 변수를 기호로 처리합니다.
  3. SMT 해법기¹를 사용하여 symbolic value에 대한 값을 찾습니다.
  4. 찾은 값을 사용하여 프로그램을 실행합니다.

예제

동적 심볼릭 테스팅 설명 예제
동적 심볼릭 테스팅 설명 예제

 

동적 심볼릭 테스팅 기법은 테스팅 대상 코드의 모든 분기문 실행의 조합, 즉 실행 가능한 모든 경로를 수행할 수 있도록 변수값의 조합을 자동으로 생성한다.

「동적 심볼릭 테스팅(Concolic 테스팅): 효과적인 오류 검출을 위한 실용적인 Whitebox 테스트 입력 생성 기법」참고

 

동적 심볼릭 테스팅 장·단점

장점

  • 높은 테스트 커버리지: 동적 심볼릭 테스팅은 실행 경로 탐색을 사용하여 프로그램의 모든 가능한 실행 경로를 찾을 수 있으므로, 높은 테스트 커버리지를 달성할 수 있습니다.
  • 효율적인 오류 검출: 동적 심볼릭 테스팅은 실행 경로 탐색을 사용하여 프로그램의 취약한 부분을 찾아내고, symbolic execution을 사용하여 취약한 부분을 유발하는 테스트 데이터를 생성할 수 있으므로, 효율적인 오류 검출이 가능합니다.

단점

  • 높은 계산 복잡도: 동적 심볼릭 테스팅은 SMT solver를 사용하여 symbolic value에 대한 값을 찾기 때문에, 높은 계산 복잡도를 필요로 합니다.
  • 높은 메모리 요구량: 동적 심볼릭 테스팅은 실행 경로를 탐색하고, symbolic value에 대한 값을 찾기 위해 메모리를 많이 사용합니다.

 

동적 심볼릭 테스팅은 계산 복잡도가 많은 컴퓨팅 파워와 많은 메모리 사용을 요구함에도 불구하고 지속적으로 발전하고 있는 기술로, 향후 소프트웨어 테스트의 표준 기술로 자리 잡을 것으로 기대됩니다. 

 


1. SMT 해법기(solver): Satisfiability Modulo Theories의 약자로, SMT 해법기는 symbolic value가 포함된 방정식이나 불평등의 해를 찾는 알고리즘입니다.

'개발 > 테스팅' 카테고리의 다른 글

Neuron Coverage  (0) 2023.09.04
Symbolic Execution (심볼릭 실행)  (0) 2023.09.02
KLEE 사용법  (0) 2023.09.02