grep

QA

DeviceFarm AI를 사용한 QA 테스트 자동화

han.kang카카오

2025년 9월 19일

원문에서 보기 ↗

하나의 앱으로 쇼핑, 결제, 금융까지 모든 것을 해결하는 ‘슈퍼앱’ 시대. 기능이 많아질수록 QA가 검증해야 할 시나리오는 기하급수적으로 늘어납니다. 모든 경로를 사람이 직접 테스트하는 것은 불가능에 가깝습니다.

이에 개발 업계에서는 스크립트 기반 자동화(Appium, Selenium 등)를 도입하고는, 이내 새로운 문제에 부딪혔습니다.

결국 스크립트 기반의 자동화 테스트는 ‘가끔 도움이 되는’ 수준에 머물러 있고, 여전히 테스트는 자동화 되지 않고, 많은 시간과 리소스가 사용되고 있었습니다.

기존 UI 테스트의 도전 과제

많은 기업과 팀이 Appium 등 기존 UI 테스트 자동화 도구를 도입했지만, 다음과 같은 문제로 인해 실제 현업에서는 자동화의 효과를 제대로 누리기 어려운 부분이 있습니다.

AI를 사용한 UI Test 사례

최근에는 LLM과 AI 기반 도구를 활용해 기존 방식의 한계를 넘어서는 연구 및 사례가 있습니다.¹

DeviceFarm QA 에이전트

최근 AI와 LLM의 발전은 이러한 테스트 자동화의 새로운 가능성을 열어주고 있습니다. 글로벌 IT 기업들도 AI 기반의 테스트 자동화를 시도하고 있는 가운데, 카카오는 기존에 구축해서 활용 중인 DeviceFarm⁵ 인프라를 활용하여 AI 기반 UI 테스트 자동화 프로젝트를 시작하게 되었습니다.

이 장에서는 AI 기반 UI 테스트 자동화 시스템을 개발하면서 얻은 경험과 실제 구현 사례를 공유하고자 합니다.

QA 에이전트를 통한 AI 기반 테스트 자동화

DeviceFarm QA 에이전트는 기존의 수동 테스트나 스크립트 기반 자동화의 한계를 극복하기 위해 탄생한 AI 기반 UI 테스트 자동화 솔루션입니다.

DeviceFarm은 웹 기반 원격 디바이스 테스트 환경을 제공하며, Appium 스크립트 실행과 수동 테스트를 모두 지원합니다. QA 에이전트는 이 DeviceFarm 서비스 위에서 동작하며, QA 엔지니어가 작성한 자연어 테스트케이스를 해석하여 스스로 테스트를 수행하고, 그 결과를 상세히 리포트합니다.

QA 에이전트는 LLM을 활용해 테스트케이스를 이해하고, DeviceFarm에서 제공하는 안드로이드 애플리케이션의 접근성(Accessibility) 정보와 스크린샷 API를 통해 앱의 현재 상태를 정확히 파악합니다. 이 정보를 바탕으로 다음 단계를 결정하고, 테스트가 올바르게 수행되었는지 자동으로 검증하는 과정을 반복합니다.

AI가 '사람의 말’을 이해하게 만들기

AI가 테스트를 수행하려면, 먼저 ‘무엇을’ 해야 하는지 정확히 알아들어야 합니다. QA 에이전트는 사람이 작성한 모호한 테스트 시나리오를 LLM이 명확하게 이해할 수 있는 구조화된 단계(Step)로 정제하는 것부터 시작합니다.

이처럼 각 단계의 목표와 성공 기준을 명확히 정의해야만, AI는 자신이 무엇을 해야 하고, 언제 성공했는지를 판단할 수 있습니다.

핵심 동작 원리: 보고, 생각하고, 실행하기

구조화된 테스트케이스를 입력받은 QA 에이전트는 [인식 → 결정 → 실행]의 순환 구조를 반복하며 자율적으로 테스트를 수행합니다.

인식: 화면을 어떻게 ‘보는가’?

사람이 화면을 눈으로 보듯, QA 에이전트는 접근성(Accessibility) API와 스크린샷 두 가지 정보를 함께 사용해 현재 화면을 파악합니다. 각각의 정보가 필요할 때 DeviceFarm의 API를 호출해서, 필요한 정보를 얻습니다.

접근성 API를 통해 가져온 데이터를 가공을 진행합니다. 테스트 수행에 필요한 데이터 위주로 정규화를 수행하며 XML로 변환합니다.

필요 시에는 아이콘 식별 및 OCR을 사용해, XML에 아이콘 및 텍스트 정보를 추가합니다.

결정: LLM은 어떻게 ‘생각하는가’?

화면 분석이 끝나면, QA 에이전트는 이 정보를 LLM에게 넘겨 다음 행동을 결정하게 합니다. 이 과정의 핵심은 프롬프트 엔지니어링입니다. LLM에게는 테스트 목표, 이전 행동 요약, 그리고 현재 화면 분석 정보가 포함된 프롬프트가 전달됩니다.

LLM은 주어진 정보를 종합하여 다음 행동을 논리적인 명령어 형식으로 출력합니다. 예를 들어, ‘내비’ 탭을 누르라는 판단을 내리면 다음과 같은 결과를 반환합니다.

{ "action": "tap", "element_id": 12, "reason": "내비 탭을 누른다" }

실행 및 검증: 로봇은 어떻게 ‘움직이는가’?

LLM이 결정한 논리적 명령어는 QA 에이전트 시스템으로 전달되어 물리적인 실행 좌표로 변환됩니다. 예를 들어, element_id: 12 정보는 해당 UI 요소의 화면상 위치(bounds)를 기반으로 실제 탭(tap)할 좌표 (x: 1000, y: 500)로 변환됩니다.

이 좌표 기반의 명령은 DeviceFarm API를 통해 실제 디바이스에서 수행됩니다. QA 에이전트는 탭, 스와이프, 텍스트 입력 등 사용 가능한 모든 액션을 API 형태로 미리 알고 있습니다.

액션이 실행된 후, QA 에이전트는 다시 인식 단계로 돌아가 화면에 어떤 변화가 일어났는지 확인합니다. 이 과정을 반복하며 최종 성공 기준을 만족할 때까지 테스트를 진행합니다. 이러한 구조 덕분에 QA 에이전트는 UI가 일부 변경되거나 예상치 못한 팝업이 나타나더라도 목표를 기반으로 테스트를 계속 이어나가는 회복탄력성(Resilience)을 갖게 됩니다.

2-4. 테스트케이스별 결과 제공

QA 에이전트의 진화

QA 에이전트는 여기서 멈추지 않고 더 지능적인 테스트 자동화를 위해 계속해서 개발을 진행하고 있습니다.

RAG 도입으로 서비스의 '의도’를 파악하는 AI

테스트 케이스 생성

궁극적으로 QA 에이전트는 테스트케이스를 생성하는것을 목표로 합니다. APK 파일을 분석해 앱의 모든 기능을 파악하는 상향식 관점과 RAG를 통해 핵심 비즈니스 시나리오를 추출하는 상향식, 하향식 관점 둘 다에서 테스트가 필요한 부분을 스스로 찾아내 검증하는 것입니다. 사람이 개입하지 않아도 서비스의 맥락에 맞는 테스트를 자동으로 생성하고 실행하여 커버리지를 극대화하는 방향으로 나아가려고 합니다.


각주

  1. [출처] https://devocean.sk.com/blog/techBoardDetail.do?ID=166778
  2. [출처] https://autodroid-sys.github.io/
  3. [출처] https://mp.weixin.qq.com/s/QhzqBFZygkIS6C69__smyQ
  4. [출처] https://firebase.blog/posts/2025/04/app-testing-agent
  5. 카카오 사내의 Appium 기반 모바일 테스트 자동화 시스템