피드로 돌아가기
뱅크샐러드 iOS팀이 숨쉬듯이 테스트코드 짜는 방식 1편 - 통합 UI테스트
뱅크샐러드 기술블로그뱅크샐러드 기술블로그
Mobile

뱅크샐러드 iOS팀이 숨쉬듯이 테스트코드 짜는 방식 1편 - 통합 UI테스트

뱅크샐러드 iOS팀이 접근성 지원 강화와 LocalUITest 도입으로 기존 코드 수정 없이 통합 UI테스트 기반 확보

2022년 4월 18일12intermediate

Context

테스트 코드가 없는 레거시 코드베이스에 테스트를 도입하려면 기존 코드를 테스트 가능하도록 수정해야 하는데, 그 수정의 정확성을 검증하려면 자동화된 테스트가 필요한 닭-달걀 딜레마에 빠져있었습니다. 또한 통합 UI테스트는 네트워크 불안정, 서버 점검, 세션 만료 등으로 인해 실패하기 쉬워 신뢰성이 낮다고 인식되고 있었습니다.

Technical Solution

  • VoiceOver 접근성 지원 강화로 기존 코드 수정 없이 XCUITest 기반 마련: UIKit/SwiftUI 프레임워크 선택과 무관하게 accessibilityTrait을 통해 UI 요소를 식별 가능하도록 개선
  • LocalUITest 도입으로 개발자 진입 장벽 낮춤: CI에서 제외되는 로컬 테스트 환경을 구축해 신규 개발자가 재현 스텝 자동화 등 XCUITest 인터페이스에 점진적으로 적응
  • Smoke 테스트를 Github Action에서 4시간 주기로 실행: 가장 중요한 기능만 선별해 정기적으로 검증하고 실패 시 resultBundle과 스크린샷을 포함한 슬랙 알림으로 ios-monitoring 요원에게 즉시 전달
  • simctl을 활용한 일관된 시뮬레이터 환경 표준화: 동일한 OS와 기기 사양(예: iPhone 14)에서만 테스트 실행하여 기기별 UI 레이아웃 차이로 인한 테스트 불안정성 제거
  • 최대 글씨 크기(Accessibility XXXL) 기반 테스트 실행: 평소 수동 테스트에서 놓치기 쉬운 엣지 케이스를 자동으로 커버하여 버그 발견 확률 상향
  • 개발자센터 로그 검색 기능으로 통합 테스트 시 로깅 검증: 테스트 종료 시점에 기대한 이벤트 로그가 정확한 횟수만큼 기록되었는지 확인하는 검증 로직 추가

Key Takeaway

테스트 도입 초기에는 단위 테스트 강제 전보다 접근성 강화로 기존 코드 수정을 최소화하면서 통합 테스트를 먼저 확보한 후, LocalUITest 같은 저진입장벽 도구로 팀의 테스트 역량을 축적한 뒤 본격적인 자동화 테스트를 단계적으로 도입하는 것이 실효적입니다.


기존 테스트 코드가 전무한 iOS 프로젝트에서는 VoiceOver 접근성 작업을 먼저 수행한 후 XCUITest 기반의 통합 UI테스트를 작성하면 레거시 리팩토링 비용을 최소화할 수 있으며, LocalUITest를 개발자용 재현 도구로 운영하면서 팀의 테스트 문화를 점진적으로 성숙시킨 후 CI 기반 Smoke 테스트를 도입하는 순서가 안정적입니다.

원문 읽기