우주 시스템 자동 테스트 생성
초록
본 논문은 ESA의 지상 시스템 운영 시뮬레이터에 대한 회귀 테스트를 자동화하기 위해, 기존 C++ 코드로부터 테스트 케이스를 자동으로 생성하는 방법을 탐구한다. VST가 요구하는 검증 요구사항을 충족시키기 위해 최신 자동 테스트 도구와 기법을 분석하고, C++ 특유의 복잡성을 고려한 맞춤형 프레임워크 설계를 제안한다.
상세 분석
ESA는 지상 세그먼트 인프라스트럭처, 특히 운영 시뮬레이터(Operational Simulator)를 테스트하기 위해 자체 엔진을 사용한다. 이 엔진은 다수의 서드파티 툴을 연계해 회귀 테스트 파이프라인을 구축하고, C++ 기반 시뮬레이터에 대해 블랙박스 테스트를 수행한다. 현재 테스트 스크립트는 수작업으로 작성되며, 이는 인력 비용 상승과 테스트 커버리지 한계라는 두 가지 주요 문제점을 낳는다. VST(VisionSpace Technologies)는 이러한 비효율성을 해소하고자, 기존 소스코드에서 직접 테스트 케이스를 추출·생성하는 자동화 도구가 필요하다.
자동 테스트 생성 분야에서는 정적 분석 기반 도구(EvoSuite, Randoop for Java), 동적 탐색 기반 도구(Pex/.NET, KLEE for C), 그리고 모델 기반 테스트(MBT) 접근법이 널리 연구돼 왔다. 그러나 C++은 템플릿 메타프로그래밍, 매크로, 하드웨어 인터페이스와 같은 복합적인 언어 특성을 가지고 있어, Java‑centric 도구를 그대로 적용하기 어렵다. 특히 시뮬레이터는 실시간 데이터 흐름과 외부 장치와의 I/O를 포함하므로, 테스트 오라클 생성과 실행 환경 격리가 핵심 과제로 떠오른다.
논문은 이러한 제약을 해결하기 위한 설계 원칙을 네 가지로 정리한다. 첫째, 소스코드 수준에서 함수 시그니처와 전후 조건을 추출해 테스트 입력 공간을 정의한다. 둘째, LLVM 기반 정적 분석과 심볼릭 실행을 결합해 경로 탐색을 효율화한다. 셋째, 시뮬레이터의 외부 I/O는 가상화된 모의 객체(Mock)와 시뮬레이션 스텁으로 대체해 테스트 독립성을 확보한다. 넷째, 생성된 테스트는 기존 ESA 테스트 엔진이 인식할 수 있는 스크립트 포맷(예: Python 혹은 Bash)으로 자동 변환한다.
구현 단계에서는 Clang/LLVM 프론트엔드를 활용해 AST를 파싱하고, 각 함수에 대해 제약조건을 추출한다. 이후 KLEE와 유사한 심볼릭 실행 엔진을 이용해 가능한 입력값을 탐색하고, 경계값 테스트와 등가 클래스 분할을 자동으로 적용한다. 테스트 오라클는 함수 반환값, 상태 변수 변화, 로그 출력 등을 비교하는 다중 기준으로 구성한다. 마지막으로, VST의 CI/CD 파이프라인에 통합하기 위해 Docker 기반 컨테이너 이미지를 제공하고, 테스트 결과를 JUnit XML 형태로 보고한다.
평가에서는 실제 ESA 운영 시뮬레이터 모듈 5개에 대해 자동 생성된 테스트가 기존 수작업 스크립트 대비 30% 이상의 코드 커버리지를 달성했으며, 테스트 작성 시간은 평균 80% 단축되었다는 결과를 제시한다. 또한, 오류 탐지율이 기존 대비 15% 상승했으며, 가짜 I/O 환경에서도 안정적인 실행이 확인되었다. 이러한 결과는 제안된 자동화 프레임워크가 복잡한 C++ 기반 우주 시스템 테스트에 실용적이며, VST와 같은 외주 업체가 요구하는 품질 기준을 충족시킬 수 있음을 시사한다.
댓글 및 학술 토론
Loading comments...
의견 남기기