Symbolic Testing
COYOTE는 소프트웨어의 각 함수에 대하여 테스트케이스를 자동생성하고 테스트케이스에 대한 실행 테스트를 자동으로 실행합니다.
완전 자동 테스팅을 실현할 때 가장 어려운 부분이 바로 테스트케이스 자동생성입니다. 수십 년 동안 다양한 기법들이 고안되었지만 고전을 면치 못했습니다. 많은 테스트 자동화 도구들이 테스트케이스 자동생성 기능이 있다고 광고하고 있지만, 현장에서는 외면 받아온 이유입니다.
우리는 테스트케이스 자동생성을 실용화 수준으로 가능하게 하는 심볼릭 테스팅 엔진을 순수 국산기술로 개발하였습니다.
심볼릭 테스팅 기술은 심볼릭 실행(symbolic execution) 또는 콘콜릭 실행(concolic execution) 기법을 이용하여 화이트박스 테스팅을 수행하며, 테스트케이스 자동생성에 탁월한 능력을 발휘합니다.
심볼릭 테스팅 엔진은 주어진 함수의 모든 실행 경로를 탐색하면서 각 실행 경로가 실행되는 조건(경로 조건)을 계산합니다.
그리고 이 경로 조건을 이용하여 각 경로에 대한 테스트케이스를 생성합니다.
이를 위해서는 심볼릭 연산을 수행할 코드를 주어진 함수에 삽입하고 그 함수를 구동할 드라이버 코드와 그 함수가 호출하는 다른 함수의 스텁 코드를 생성함으로써 테스트 실행파일을 자동생성합니다.
테스트를 구동하면 실제 실행과 심볼릭 실행을 동시에 진행하면서 경로 조건과 테스트케이스를 계산합니다. 이때 조건식 해결을 위해서는 SMT 해결기와 같은 자동 정리증명기를 사용합니다.
(완전자동 화이트박스 테스팅 엔진)
자동검증팀
- 우리는 콘콜릭 실행, 자동정리증명, 정적 분석, 머신 러닝 등의 기술을 융합하여 완전 자동 테스팅 도구를 개발합니다.
- 개발환경은 F# 같은 함수 언어와 Java 같은 객체지향 언어 등을 주로 사용합니다.
- 심볼릭 테스팅 기술 뿐아니라 자동 테스팅에 필요한 다양한 요소들을 자동화하는데에는 소스코드 분석, SMT 해결기, 코드 생성 기술 등이 중요한 역할을 합니다.
- 자동차, 항공 등 SW 신뢰성이 특히 중요한 분야에서 완전 자동 테스팅 도구 COYOTE가 든든한 동반자가 되도록 최선을 다하겠습니다.