초보 개발자

Concolic Testing 본문

컴퓨터공학 전공/소프트웨어공학

Concolic Testing

mandudu 2022. 12. 8. 19:27

** 본 글은 차성덕 교수님의 소프트웨어공학이야기 책을 정리한 글입니다. **

Concrete + Symbolic testing
특정 branch를 수행할 수 있는 입력값 자동 생성 도구 활용 (SMT solver)

 

복잡한 소프트웨어를 테스팅할 수 있는 Concolic Testing

Concolic 테스팅 기법과 이를 자동화하는 도구를 사용하는 것이 좋다. (CREST)
동작 원리: (1,1)부터 값을 주며 실행하고, 해당 상황에서 알게 된 지식을 바탕으로 값을 수정하며 반복 수행 (SMT solver 활용)

  • 실제로 학생들이 테스팅해보면, statement coverage (57.3~78.3) / Branch Coverage (36.9~62.1)로 상당히 낮다.
  • Concolic testing은? branch coverage 60%인 테스트 케이스를 자동으로 생성해준다. (학생 평균 36.9%)
  • 60%가 시사하는 바: Concolic testing은 효과가 좋지만 그럼에도 불구하고 테스팅은 어렵다는 점을 보여준다.
    - 실제로 concolic testing을 사용했음에도 호출되지 않은 함수가 매우 많다.
  • 기계학습을 도입하는 등 Concolic testing 수치를 개선하고는 있지만, 아직도 부족하다.
  • 품질관점에서는, 예외상황 및 오류 검출이 가능한 테스트케이스를 생성하는 기능에 효과적이다.
  • 보안 취약점을 찾는 것은 매우 어려운데 Concolic testing은 Fuzzing이라는 기법에 사용되며 취약점을 찾는데 효과적이다.
    다양한 환경에서 프로그램 수행 + 각종 분기 수행에 Concolic Testing 기법 사용
    입력값만 바꾸어 가며 Concolic Testing을 수행해도 목적을 달성할 수 있다

* Fuzzing: 임의의 입력을 사용하여 반복적으로 수행하며 crash를 찾는 것