Search

'Search-based Software Engineering'에 해당되는 글 1건

  1. 2018.11.14 페이스북, AI로 소프트웨어 버그 수정하는 SapFix 시스템 공개

※ 아래 글은 정보통신기술진흥센터(IITP)가 발간하는 주간기술동향 1872호(2018. 11. 14. 발행)에 기고한 원고입니다.


▶ IITP에서 PDF 포맷으로 퍼블리싱한 파일을 첨부합니다. 가독성이 좋으니 참고하시기 바랍니다.

페이스북, AI로 소프트웨어 버그 수정하는 SapFix 시스템 공개.pdf



페이스북은 인공지능(AI)이 소프트웨어를 테스트하고 버그를 찾아 수정 패치를 개발하는 ‘SapFix(샙픽스)’ 시스템을 개발했으며 조만간 OSS(오픈소스소프트웨어)로 공개할 계획


페이스북은 지난 9월 실리콘밸리에서 개최된 대규모 시스템 개발 연구모임인 ‘@Scale Conference’에서 안드로이드용 앱의 버그를 수정해 주는 패치를 자동으로 생성해주는 디버깅 시스템 ‘SapFix(샙픽스)’를 공개하였음


샙픽스는 AI가 자동으로 앱을 테스트하여 버그를 찾고 수정 패치를 개발한 다음, 새로운 테스트 케이스를 만들어 다시 테스트 한 후 인간 엔지니어의 리뷰를 요구하는 시스템인데, 페이스북은 최근 조만간 샙픽스를 포함한 전체 디버깅 시스템을 OSS로 공개할 것이라 발표


페이스북의 디버깅 자동화 연구는 오래된 것이어서, 이미 20156월에 정적 코드 분석 도구인 ‘Infer(인퍼)’OSS로 공개한 바 있고, 샙픽스 공개에 앞서 올해 5월에 안드로이드 및 iOS용 모바일 앱의 테스트 자동화 도구인 ‘Sapienz(사피엔즈)’를 공개한 바 있음


버그 수정 자동화 도구인 샙픽스가 추가됨으로써 페이스북은 AI를 이용한 디버깅의 완전 자동화를 실현하게 되었음


전체 디버깅 자동화 시스템은 사피엔즈와 인퍼가 자동으로 버그를 찾아내면 샙픽스가 그 버그를 수정하는 패치를 개발하고, 샙픽스가 만든 패치에 버그가 없는지 다시 사피엔즈와 인퍼가 테스트 한 다음 통과하면 인간 엔지니어에 리뷰를 요청하는 구조임


페이스북은 20179월부터 자체 모바일 앱에 대해 사피엔즈로 자동 테스트를 시작했으며, 현재는 페이스북’, ‘인스타그램’, ‘워크플레이스’, ‘메신저등 여러 안드로이드용 앱에 테스트를 적용하고 있고, 올해 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] 사피엔즈 시스템의 자동 테스트 기술 레벨


페이스북은 20171, 하먼 교수 연구팀 중 일부가 UCL에서 스핀아웃하여 설립한 스타트업 매직(MaJiCKe)’을 인수했는데, 매직의 멤버 전원이 페이스북으로 이적했고 사피엔즈에 이어 샙픽스 개발에도 참여했다고 함

UCL에서 개발하던 당시 사피엔즈는 테스트 환경으로 실제 안드로이드 스마트폰을 사용했는데, 연구팀은 페이스북으로 옮긴 뒤 방대한 스마트폰 시뮬레이터 환경인 원 월드를 이용할 수 있게 되었고 테스트 환경이 단숨에 대형화 되며 실질적 성과를 낼 수 있게 되었음


학계의 연구자가 대학에 없는 빅데이터와 거대 컴퓨터 자원을 찾아 대형 인터넷 기업으로 옮겨가려는 움직임은 지금까지는 주로 기계학습 등에서 두드러졌는데, 사피엔즈 사례는 향후 소프트웨어 공학 등 컴퓨터 과학의 전 분야에서 유사한 움직임이 일어날 가능성을 시사함