development

테스트 가능성 vs. 자동화 가능성: 왜 대부분의 자동화 시도는 시작도 하기 전에 실패하는가

테스트 가능성 vs. 자동화 가능성: 왜 대부분의 자동화 시도는 시작도 하기 전에 실패하는가

Testability vs. Automatability: 자동화 실패를 막는 마지막 퍼즐

QA/테스트 실무에서 “자동화”는 늘 매력적인 해답처럼 보이지만, 왜 많은 팀의 자동화 프로젝트는 실제 구현에 들어가기도 전에 실패 스멜이 나는 경우가 많습니다. 그리고 늘 성공적인 자동화는 의심 받는 경우가 많기도 합니다.


그 핵심 원인은 Testability(테스트 가능성)Automatability(자동화 가능성)을 고려하지 못하는 경우가 많습니다.


1. 두 개념의 본질적 차이

많은 팀이 "코드로 구현할 수 있는가?"를 먼저 묻습니다. 이것이 Automatability입니다.

반면 Testability는 "이 시스템이 검증하기 쉬운 구조를 갖추고 있는가?"를 묻습니다.

  • Testability (테스트 가능성): 시스템이 검증에 얼마나 협조적인가를 의미합니다. 관측 가능성(Observability)과 제어 가능성(Control)이 핵심입니다.

  • Automatability (자동화 가능성): 특정 도구나 프레임워크를 사용해 수동 동작을 스크립트로 재현할 수 있는 기술적 가능성을 뜻합니다.

2. 자동화가 ‘시작도 전에’ 실패하는 시나리오

  1. 속도와 KPI 중심의 접근: 테스트 가능성(데이터 통제, 결정성)이 확보되지 않은 상태에서 "자동화 커버리지 80%" 같은 수치적 목표를 쫓으면 억지스러운 스크립트가 양산됩니다.

    사실 이 숫자는 얼마든지 사기칠 수 있고, 비슷한 케이스를 대량 양산할 수 있어서, 목표 달성으로 평가가 주어진다면 숫자 맞추기에 혈안되어서 실제 커버리지와 버그 발견에는 큰 의견없이 거의 비슷한 해피케이스만 도달하게 되어 실무적으로는 의미도 없고, 만드는 사람 입장에서도 동기부여 되지 않습니다.

    많은 조직과 관리자들이 빠지는 함정이기도 해요.

  2. 누적되는 유지보수 부채: 일반적인 UI 자동화는 레이아웃, 텍스트, 위치만 바뀌어도 본질적으로 깨지기 쉬운 구조를 가지고 있습니다. 여기에 대응을 많이 한다고 해도, 대규모 개편이나 중간에 시스템 점검, 팝업등이 튀어나오는 예외케이스는 무한대에 가깝습니다.

    커버리지 %가 높아지고 커버하는 테스트케이스가 많아질 수록  결국 테스트를 수행하는 시간보다 고치는 시간이 더 길어집니다.

    따라서 이런 경우 테스트 자동화 무용론이 나오기도 합니다.
    또한 요즘처럼 애자일 스러운 시스템에서, 만들고 실험하고 바꾸는게 일상인 경우 자동화에 대한 메리트가 더욱 의심받기도 합니다.

  3. 리포트 신뢰도 저하: 실패 신호가 발생했을 때 이것이 버그인지, 환경 문제인지, 혹은 불안정한 스크립트 때문인지 구분하기 어렵다면 팀은 점차 리포트를 외면하게 됩니다.

    버그였으나 PASS라고 리포트 되는 경우, 버그는 아니지만 UI가 달라서 실패로 나타나는 알람 등, 올바르지 않은 알람 특히 새벽이나 자는 시간 크리티컬한 알람이라고 잘못 알려주는 경우는 더 심각해집니다.

    어디까지 알림을 발송할지, 그것을 누가 모니터링할지도 잘 고민해야 합니다.
    따라서 리포트나 실행 주기도 너무 잦다고 꼭 좋은것은 아닙니다.


3. 실무 의사결정을 위한 비교 가이드

비교 항목 Automatability (자동화 가능성) Testability (테스트 가능성)
핵심 질문 도구가 이 동작을 수행할 수 있는가? 시스템이 검증에 협조적인가?
주요 관심사 라이브러리, 프레임워크, 스크립트 기술 아키텍처, 데이터 제어, API 노출
도입 효과 단기적인 실행 자동화 장기적인 유지보수성 및 신뢰도 향상
실패 징후 "도구가 해당 기능을 지원하지 않음" "테스트 결과가 매번 달라 신뢰할 수 없음"


4. 실전 적용 체크리스트

✓ 도입 속도 (Efficiency)

  • 테스트 경로가 단순한가? (UI보다 API/서비스 레벨 검증이 가능한가)
  • 테스트 데이터 준비와 정리가 자동화/스크립트화 되어 있는가?

    일반적인 경우 자주 변하지 않은 메인 플로우, 또는 사람이 반복적으로 봐야하는 부분을 먼저 시도하길 추천 합니다.

✓ 유지보수 공수 (Maintainability)

  • 변경이 잦은 영역(UI 레이아웃 등)에 과도하게 의존하고 있지는 않은가?
  • 불안정한 테스트를 즉시 격리할 수 있는 구조가 마련되어 있는가?
    변경이 잦은 영역은 이 또한 언제든 기계보다는 사람이 테스트하는게 더 이득일 수 있습니다. 따라서 안정화 된 영역 먼저 시도하는 것이 좋습니다.

✓ 리포트 신뢰도 (Reliability)

  • 실패 시 원인 분류를 돕는 로그, 스냅샷, 트레이스가 명확히 제공되는가?
  • 재시도 정책이 단순히 에러를 숨기는 것이 아니라 진단을 돕는가?
    리포트는 받아보는 사람이 필요한 정보만을 남기고, 언제든 디테일한 정보를 참조할 수 있도록 2~3단계의 스텝을 주어 나누어 발송할 것을 권장합니다.

5. FAQ

Q1. 자동화가 가능하면 테스트 가능성도 높은 것 아닌가요?
아닙니다. UI 요소를 클릭하는 것은 가능(Automatability)할 수 있지만, 클릭 후 DB에 데이터가 정확히 쌓였는지 확인할 API나 로그가 없다면 테스트 가능성(Testability)은 매우 낮은 상태입니다.

Q2. 테스트 가능성을 높이기 위해 개발 코드를 수정해도 되나요?
네, 적극 권장됩니다. 테스트 전용 ID를 부여하거나 상태 제어용 백도어 API를 만드는 것은 제품의 품질을 높이고 장기적인 QA 비용을 낮추는 투자입니다.

Q3. 이미 구축된 자동화가 자주 깨진다면 무엇부터 해야 할까요?
스크립트를 수정하기 전에 '리포트 신뢰도'를 점검하세요. 원인 파악이 안 되는 테스트는 과감히 격리하고, 실패 신호가 정확히 제품의 결함을 지표화할 수 있도록 관측 가능성을 개선해야 합니다.

결론: 지속 가능한 QA를 위하여

자동화는 단순히 도구를 잘 다루는 문제가 아닙니다. 도입 속도, 유지보수 공수, 리포트 신뢰도라는 세 가지 축을 바탕으로 우리 시스템이 테스트를 수용할 준비가 되었는지 먼저 진단해야 합니다. 기술적 실현 가능성보다 시스템의 테스트 가능성에 먼저 투자할 때, 자동화는 비로소 팀의 자산이 됩니다.

우리 팀의 시스템은 현재 얼마나 '테스트에 협조적'인가요? 다음 단계로 넘어가기 전 이 질문에 답해 보시기 바랍니다.