노트

테스트 피라미드

Test Pyramid

설계#testing · 연결된 개념 10개

쉽게 말하면

테스트 피라미드는 건강검진처럼 싸고 빠른 기본 검사는 많이, 비싸고 오래 걸리는 정밀 검사는 꼭 필요한 것만 하자는 비율 그림이에요. 바닥은 단위 테스트, 꼭대기는 E2E 테스트예요.

비유가 깨지는 곳 모양 자체가 정답은 아니에요. 프런트엔드에선 통합 테스트에 무게를 둔 테스팅 트로피도 쓰여요. 요지는 싼 테스트로 대부분의 버그를 잡고 비싼 테스트는 전체가 도는지 확인하는 데만 쓰는 거예요.

테스트를 어떤 비율로 갖출지를 피라미드 모양으로 나타낸 모델. 마이크 콘이 『Succeeding with Agile』에서 소개했다. 아래로 갈수록 빠르고 싸서 많이, 위로 갈수록 느리고 비싸서 적게 둔다.

  • 단위 테스트(바닥, 가장 많이)(Unit Test): 함수·클래스를 격리해 검사한다. 매우 빠르고 쓰기 쉬워 대부분을 차지한다
  • 통합 테스트(가운데)(Integration Test): 여러 모듈이나 DB·API 같은 실제 의존성을 일부 포함해 연동을 검사한다. API 테스트가 여기 든다(DRF API 테스트)
  • E2E 테스트(꼭대기, 가장 적게)(End-to-End Test): 브라우저에서 사용자 시나리오를 처음부터 끝까지 검사한다. 가장 느리고 비싸고 잘 깨지므로 핵심 흐름만 남긴다

아이스크림 콘(Ice-Cream Cone)

비율이 뒤집혀 E2E와 수동 테스트가 가장 많은 상태. 피드백이 느리고 테스트가 툭하면 깨져 유지하기 힘들다.

다른 관점

프런트엔드에서는 구현 세부보다 사용자 관점의 통합 테스트에 무게를 두자는 "테스팅 트로피(Testing Trophy)" 같은 변형도 쓰인다. 사용자처럼 화면을 다루는 React Testing Library와 네트워크를 흉내 내는 MSW로 API 모킹가 이 방식을 받친다. 어느 모양이든 요지는 같다. 빠르고 싼 테스트로 대부분의 버그를 잡고, 비싼 테스트는 "전체가 정말 도는가"를 확인하는 데만 쓴다.

테스트를 기계적으로 늘리기보다 겹치는 커버리지를 줄이는 것도 중요하다(테스트 냄새, 구성요소 줄이기).

참고: Test Pyramid 마틴 파울러

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 테스트 주도 개발 (TDD)

    코드를 쓰기 전에 실패하는 자동화된 테스트부터 쓰고, 그 테스트를 통과시킨 뒤 중복을 없애는 짧은 주기를 반복하는 개발 방식. 켄트 벡이 정리했다.

  • 심플 디자인

    켄트 벡이 XP(Extreme Programming)에서 제시한 단순한 설계의 네 가지 규칙. 우선순위 순으로 ① 모든 테스트를 통과하고 ② 의도를 드러내고 ③ 중복이 없고 ④ 요소가 가장 적다. 마틴 파울러가 이렇게 정리한 형태가 널리 쓰인다.

  • 디자인 패턴

    반복해서 나타나는 설계 문제에 대한 검증된 해결 구조와 그 이름. 복사해 쓰는 완성 코드가 아니라 객체들이 협력하는 방식을 설명하는 어휘다. 1994년 이른바 GoF(Gang of Four, 네 명의 저자)의 책 『Design Patterns: Elements of Reusable Object-Oriented Software』가 23개 패턴을 정리하며 널리 퍼졌다.

  • 몰입 영역과 난이도 조절

    과제가 너무 쉬우면 지루하고 너무 어려우면 불안하다. 그 사이의 몰입 영역에서 실력이 가장 잘 는다.

  • Lighthouse 성능 점수 읽기

    Lighthouse 성능 점수는 다섯 지표의 가중 평균이다. 한 지표를 개선했는데 점수가 떨어지는 일이 생기는 이유와, 점수를 분포로 봐야 하는 이유.

보기 옵션