JOREK 코드 비회귀 테스트 자동화 전략

JOREK 코드 비회귀 테스트 자동화 전략
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 토카막 플라즈마의 자기유체역학 불안정성을 시뮬레이션하는 JOREK 코드에 특화된 비회귀 테스트(NRT) 절차를 제시한다. 병렬화된 대규모 과학 코드의 유지보수를 위해 테스트 케이스를 자동화하고, 결과 비교 기준을 정량화함으로써 코드 수정 시 발생할 수 있는 회귀 버그를 신속히 탐지한다. 또한, 버전 관리 시스템과 연동된 지속적 통합(CI) 파이프라인을 구축하여 개발자 간 협업 효율성을 높이고, 코드 품질을 지속적으로 검증한다.

상세 분석

비회귀 테스트는 소프트웨어가 기존 기능을 유지하면서 새로운 기능을 추가하거나 성능을 개선할 때, 의도치 않은 동작 변화를 조기에 발견하도록 설계된 검증 기법이다. JOREK와 같은 고성능 과학 시뮬레이션 코드는 수천 개의 MPI 프로세스와 OpenMP 스레드가 동시에 동작하며, 수치 해석 알고리즘의 복잡성 때문에 작은 코드 변경이 결과에 미치는 영향을 예측하기 어렵다. 따라서 테스트 자동화는 단순히 컴파일 성공 여부를 확인하는 수준을 넘어, 물리적 결과의 정밀도와 수렴 특성을 정량적으로 비교하는 절차가 필요하다.

논문에서는 먼저 JOREK의 핵심 모듈—예를 들어, 전기장·자기장 연산, 비선형 뉴턴-라프슨 반복, 그리고 고정된 격자와 적응형 격자 전환—에 대해 대표적인 시나리오를 선정한다. 각 시나리오는 입력 파일, 초기 조건, 경계 조건, 그리고 기대되는 출력(예: 에너지 성장률, 모드 구조, 전류 프로파일)으로 구성된다. 테스트 실행 후, 결과 파일에 기록된 물리량을 사전 정의된 허용 오차 범위와 비교한다. 허용 오차는 수치적 불확실성을 고려해 절대 오차와 상대 오차를 동시에 적용하며, 특히 비선형 수렴 과정에서 발생하는 작은 진동을 배제하도록 설계되었다.

자동화 파이프라인은 GitLab CI/CD 혹은 Jenkins와 같은 지속적 통합 도구와 연동된다. 코드가 커밋될 때마다 자동으로 컨테이너화된 환경에서 JOREK를 빌드하고, 선택된 테스트 케이스를 병렬 실행한다. 테스트 결과는 JSON 형식의 메타데이터와 함께 저장되며, 대시보드에 시각화되어 개발자가 회귀 여부를 한눈에 파악할 수 있다. 또한, 테스트 실패 시 자동으로 이슈를 생성하고, 로그와 차이점(diff)을 첨부해 디버깅 시간을 크게 단축한다.

JOREK의 특수성을 고려해, 테스트는 두 가지 레벨로 구분된다. 첫 번째는 “단위 수준” 테스트로, 개별 물리 모듈이 기대한 수학적 특성을 만족하는지 검증한다. 두 번째는 “통합 수준” 테스트로, 전체 시뮬레이션 파이프라인이 실제 토카막 실험 데이터와 일치하는지 확인한다. 특히, 고성능 컴퓨팅 환경에서 발생할 수 있는 비결정적 연산(예: 비동기 통신, 스레드 스케줄링)으로 인한 미세한 차이를 최소화하기 위해, 동일한 MPI 프로세스 레이아웃과 OpenMP 스레드 수를 고정하고, 난수 시드도 고정한다.

결과적으로, 자동화된 NRT는 코드 변경 후 평균 5분 이내에 회귀 여부를 판단할 수 있게 하였으며, 기존 수동 테스트에 비해 80% 이상의 시간 절감을 달성했다. 또한, 회귀 버그가 조기에 발견됨에 따라 전체 개발 주기가 약 15% 단축되었고, 코드 품질에 대한 신뢰도가 크게 향상되었다.


댓글 및 학술 토론

Loading comments...

의견 남기기