Antithesis가 슈퍼 마리오 브라더스를 이용해 복잡한 시스템의 버그를 신속하게 찾는 방법과 그 과정을 자세히 설명합니다. 결정론적 하이퍼바이저의 역할과 다양한 실험 사례를 다룹니다.
2024년 4월 17일

1년 반 전, 저희 친구들인 TigerBeetle이 저를 Systems Distributed에 초대해 Antithesis의 미리보기를 소개하도록 해주었습니다. 이 발표는 녹화되었지만, 당시에는 비공개(스텔스 모드)여서 공개되지 않았습니다.
이제서야 그 영상을 공개하는 이유는, 많은 분들이 질문하시는 'Antithesis가 복잡한 시스템의 상태 공간을 어떻게 탐색하며 버그를 어떻게 그렇게 빨리 찾는가?'에 대한 답이 담겨 있기 때문입니다. 또한 Alex의 글에서 언급된 대로, 우리의 결정론적 하이퍼바이저는 단순히 발견한 버그를 완벽히 재현하는 것뿐만 아니라, 애초에 버그를 찾는 데에도 큰 도움을 준다는 사실도 설명하고 있습니다.
그리고 이 모든 설명이 우리가 잘 아는 유명한 이탈리아 배관공의 예시로 진행됩니다. 한 번 감상해보세요:
앞서 밝힌 것처럼, 저희 플랫폼은 수년간 Nintendo 게임을 플레이하고 클리어해왔습니다. 이제 왜 우리가 이러한 프로그램들을 버그 탐색 연구에 사용하는지 어느 정도 이해가 되셨을 겁니다. 이들은 단순한 장난감 문제가 아니라 오히려 여러 중요한 측면에서 '실제' 소프트웨어보다 탐색이 훨씬 더 어렵습니다.
위 발표에서 저는 저희 플랫폼이 슈퍼 마리오 브라더스의 해답을 스스로 발견한 결과만을 보여드렸지만, 아래에는 전체 과정을 빠르게 감상할 수 있도록 전체 영상을 임베드해두었습니다(재생 속도를 높였습니다). Antithesis는 이 해답을 2018년 워크스테이션 CPU 기준 약 45분 만에 찾아낼 수 있습니다. 저희 플랫폼이 받은 단서는 단 두 가지, 각각 레벨에서 마리오의 X, Y 좌표가 메모리의 어느 위치에 저장되어 있는지와 현재 플레이 중인 레벨 번호뿐이었습니다.
진행 과정에서, Antithesis가 게임 내에서 주로 시간을 보내는 위치를 시각화한 히트맵도 그릴 수 있습니다. 벽을 통과하는 "클리핑"은 비교적 드문 현상이므로, 이러한 히트맵에서는 매우 익숙한 레벨 실루엣이 선명히 드러나곤 합니다:

그리고 이번에는 Kaizo 롬 해킹 버전을 전혀 설정 변경 없이, 하이퍼파라미터 튜닝 없이, 플랫폼의 반복 없이 동일한 설정으로 플레이하는(역시 빠르게 편집한) 영상입니다. 새로운 레벨로 시스템을 처음 실행한 순간 이 일이 벌어진 것입니다. 막판에는 막히기도 하지만, 전반적으로 게임을 꽤 잘 플레이하는 모습을 보실 수 있습니다(그리고 버그도 하나 발견합니다!).
마지막으로, 여러분이 내내 궁금해하셨던 질문에 대한 답변입니다! 과연 Antithesis는 마이너스 월드까지 도달했을까요? 그럼요, 당연히 도달했습니다:
슈퍼 마리오 브라더스는 단순한 게임이지만, 그 상태 공간은 상상할 수 없을 정도로 방대합니다. 우리가 알기로 Antithesis는 이 상태 공간을 충분히 효율적으로 탐색해서 게임을 클리어한 최초의 자율 시스템입니다(두세 개의 힌트만으로요).
이렇게 효율적인 상태 공간 탐색 능력이야말로 저희가 버그를 찾아 고객사에 가치를 제공할 수 있는 원동력입니다. Antithesis가 여러분의 소프트웨어 품질이나 개발 생산성 향상에 도움을 줄 수 있을지 궁금하시다면, 문의해주세요!