페이스북, AI로 소프트웨어 버그 수정하는 SapFix 시스템 공개
※ 아래 글은 정보통신기술진흥센터(IITP)가 발간하는 주간기술동향 1872호(2018. 11. 14. 발행)에 기고한 원고입니다.
▶ IITP에서 PDF 포맷으로 퍼블리싱한 파일을 첨부합니다. 가독성이 좋으니 참고하시기 바랍니다.
페이스북, AI로 소프트웨어 버그 수정하는 SapFix 시스템 공개.pdf
◾ 페이스북은 인공지능(AI)이 소프트웨어를 테스트하고 버그를 찾아 수정 패치를 개발하는 ‘SapFix(샙픽스)’ 시스템을 개발했으며 조만간 OSS(오픈소스소프트웨어)로 공개할 계획
▸ 페이스북은 지난 9월 실리콘밸리에서 개최된 대규모 시스템 개발 연구모임인 ‘@Scale Conference’에서 안드로이드용 앱의 버그를 수정해 주는 패치를 자동으로 생성해주는 디버깅 시스템 ‘SapFix(샙픽스)’를 공개하였음
▸ 샙픽스는 AI가 자동으로 앱을 테스트하여 버그를 찾고 수정 패치를 개발한 다음, 새로운 테스트 케이스를 만들어 다시 테스트 한 후 인간 엔지니어의 리뷰를 요구하는 시스템인데, 페이스북은 최근 조만간 샙픽스를 포함한 전체 디버깅 시스템을 OSS로 공개할 것이라 발표
▸ 페이스북의 디버깅 자동화 연구는 오래된 것이어서, 이미 2015년 6월에 정적 코드 분석 도구인 ‘Infer(인퍼)’를 OSS로 공개한 바 있고, 샙픽스 공개에 앞서 올해 5월에 안드로이드 및 iOS용 모바일 앱의 테스트 자동화 도구인 ‘Sapienz(사피엔즈)’를 공개한 바 있음
◾ 버그 수정 자동화 도구인 샙픽스가 추가됨으로써 페이스북은 AI를 이용한 디버깅의 완전 자동화를 실현하게 되었음
▸ 전체 디버깅 자동화 시스템은 사피엔즈와 인퍼가 자동으로 버그를 찾아내면 샙픽스가 그 버그를 수정하는 패치를 개발하고, 샙픽스가 만든 패치에 버그가 없는지 다시 사피엔즈와 인퍼가 테스트 한 다음 통과하면 인간 엔지니어에 리뷰를 요청하는 구조임
▸ 페이스북은 2017년 9월부터 자체 모바일 앱에 대해 사피엔즈로 자동 테스트를 시작했으며, 현재는 ‘페이스북’, ‘인스타그램’, ‘워크플레이스’, ‘메신저’ 등 여러 안드로이드용 앱에 테스트를 적용하고 있고, 올해 8월부터는 페이스북 앱의 버그 수정에 샙픽스 적용을 시작하였음
▸ 페이스북은 자사 기술 블로그를 통해 ‘이 정도 규모로 AI를 이용한 테스트 및 디버깅 자동화를 실제 운용하고 있는 사례는 페이스북이 처음일 것’이라며, 앞으로 사피엔즈와 샙픽스를 모두 OSS로 공개해 코드 수정이 빈번한 기업의 업무 효율성 제고를 지원하겠다는 의향을 표명
◾ 페이스북은 모바일 앱 테스트 자동화를 위해 자체 개발한 거대한 안드로이드 시뮬레이터 환경인 ‘One World(원 월드)’를 이용하는데, 이는 수천 대의 시뮬레이터로 구성되어 있음
<자료> Facebook
[그림 1] 페이스북의 안드로이드 앱 테스트 환경
▸ 원 월드는 안드로이드 시뮬레이터를 수백 대, 때로는 수천 대 가동시키고, 다수의 인간 사용자가 모바일 앱에서 하는 조작을 로봇이 사용자 인터페이스(UI)를 통해 실행하게 함으로써, 충돌 등 이상 동작이 발생하는지 여부를 체크하게 됨
▸ 사피엔즈는 원 월드 시뮬레이터 환경에서 실행하게 되는 검사를 자동 설계하는 시스템인데, UI에 대한 테스트 작업을 무작위로 실행시키는 랜덤 퍼지(Random Fuzzy) 방식이 아니라 인간 테스터가 설계한 것과 동일한 테스트를 한다고 함
▸ 구체적으로는 ‘탐색 기반 소프트웨어 엔지니어링(Search-based Software Engineering)’이라 불리는 기법을 사용함
▸ 이는 랜덤한 것까지 포함해 무수히 존재하는 테스트 케이스 중에서 테스트 범위는 넓어지고 단계는 짧아지는 최적의 조합을 고도의 알고리즘을 이용해 찾아내 테스트를 설계하는 것임
▸ 사피엔즈는 인간이 개발한 테스트 케이스를 수행할 뿐 아니라, 테스트 케이스의 일부를 변화시키거나 교체함으로써 새로운 테스트 케이스를 자동 생성하는데, 새로 만든 테스트 케이스가 잘 기능하면 그것을 더 변경하여 더 좋은 테스트 케이스를 만들어 감
▸ 사피엔즈는 앱의 충돌 등을 알아낼 때 소스 코드의 어떤 행이 충돌을 일으키게 하는 지도 특정해 주는데, 사피엔즈가 찾아낸 버그가 실제로는 버그가 아닐 비율은 낮은 편이며, 실제 페이스북 앱의 경우 발견된 버그의 75%는 바로 수정을 필요로 하는 버그였다고 함
◾ 사피엔즈가 찾아낸 버그를 수정하는 샙픽스는 4가지 방법을 순차적으로 적용해 나가는데, 마지막 네 번째 방식이 샙픽스가 직접 패치를 생성하는 것임
▸ 첫 번째 방법은 버그가 발생하기 직전에 소스 코드에 추가된 변경 사항을 전면적으로 취소하는 것이며, 두 번째 방법은 변경된 내용을 부분적으로 취소해 보는 것임
▸ 변경된 부분을 취소해도 버그를 수정할 수 없는 경우에는 세 번째 수단으로 사람이 미리 작성해 놓은 ‘수정 템플릿 모음’ 중에서 패치를 선택해 적용하게 됨
▸ 그래도 버그를 수정할 수 없다면 네 번째 수단이 발동되는데, 사피엔즈가 소스 코드에서 버그가 존재하는 행을 특정해 알려주므로 샙픽스는 행을 수정하는 패치를 직접 만들게 되며, 페이스북은 이를 ‘돌연변이 기반의 수정(Mutation-based fix)’이라 부르고 있음
▸ 샙픽스는 동시에 여러 개의 패치를 만들 수 있는데, ‘컴파일이 가능한가’, ‘충돌을 방지했는가’, ‘새로운 충돌을 만들지는 않는가’의 관점에서 여러 패치들을 체크한 후 실제로 버그를 수정할 수 있는 패치를 찾아 냄
▸ 샙픽스가 만든 패치는 인간이 만든 테스트 케이스뿐만 아니라 사피엔즈가 자동 생성한 테스트 케이스도 사용하여 시험하며, 이 테스트를 통과하면 인간 엔지니어에게 코드에 대한 리뷰를 요청하고, 엔지니어가 리뷰를 마치면 패치가 정식으로 채택됨
◾ 페이스북은 디버깅뿐 아니라 이미 코드의 빌드와 배포까지 자동화하고 있는데, 이런 자동화 시스템이 필요한 것은 페이스북에서 매주 10만 건의 소스 코드 수정이 발생하기 때문
▸ 페이스북은 자체 개발하여 2011년에 OSS로 공개한 CI(지속적 통합) 도구 ‘Phabricator(패브리케이터)’를 사용해 코드의 빌드, 테스트 및 배포를 자동화 하고 있는데, 사람과 마찬가지로 AI도 패브리케이터를 이용해 개발 워크플로우를 자동화 하고 있음
▸ 페이스북이 디버깅을 자동화하는 것은 지속적 배포(CD)를 실행하는 기업으로서 매일 놀라운 속도로 소프트웨어를 변경해야 하고 따라서 방대한 테스트가 필요하기 때문임
▸ @Scale Conference에서 페이스북이 공개한 바에 따르면, 페이스북에서는 매주 소스 코드에 대한 커밋(1회의 코드 추가 및 수정 내역)이 약 10만 회 발생한다고 함
▸ 물론 버그 수정 횟수가 많고 페이스북이 이를 자동화 하려고 생각한 것은 버그의 원인이 단순하기 때문이기도 한데, 사피엔즈가 발견한 안드로이드용 페이스북 앱의 충돌 원인 중 가장 많은 것은 ‘NULL 포인터 참조 오류’라고 함
◾ 한편 페이스북의 디버깅 자동화 시스템은 신기술을 개발한 학계와 대규모 컴퓨팅 자원을 보유한 인터넷 대기업의 협업으로 만들어졌다는 점에서 향후 컴퓨터 과학 분야의 참조가 될 만함
▸ 사피엔즈는 원래 탐색 기반 소프트웨어 엔지니어링의 고안자로 유니버시티 칼리지 런던(UCL)의 마크 하먼(Mark Harman) 교수 연구팀이 개발을 시작한 것임
<자료> Facebook
[그림 2] 사피엔즈 시스템의 자동 테스트 기술 레벨
▸ UCL에서 개발하던 당시 사피엔즈는 테스트 환경으로 실제 안드로이드 스마트폰을 사용했는데, 연구팀은 페이스북으로 옮긴 뒤 방대한 스마트폰 시뮬레이터 환경인 ‘원 월드’를 이용할 수 있게 되었고 테스트 환경이 단숨에 대형화 되며 실질적 성과를 낼 수 있게 되었음
▸ 학계의 연구자가 대학에 없는 빅데이터와 거대 컴퓨터 자원을 찾아 대형 인터넷 기업으로 옮겨가려는 움직임은 지금까지는 주로 기계학습 등에서 두드러졌는데, 사피엔즈 사례는 향후 소프트웨어 공학 등 컴퓨터 과학의 전 분야에서 유사한 움직임이 일어날 가능성을 시사함