테스트 공정관리

증적은 무엇을 증명하고, 무엇을 증명하지 못하는가

증적은 그 시점을 증명한다. 케이스가 충분했는지, 다른 입력에서도 그런지, 지금도 그런지는 증명하지 않는다.


테스트 결과서에 화면 캡처 스무 장이 붙어 있다. 전부 정상 화면이다. 검수는 통과했다. 두 달 뒤 운영에서 결함이 터진다.

“테스트했다면서요. 증적도 있잖아요.”

증적은 거짓말을 하지 않았다. 다만 증적이 증명한 것과, 우리가 증명됐다고 믿은 것이 달랐을 뿐이다.

이 글은 그 차이를 정리한다.


1. 증적이 실제로 증명하는 것

화면 캡처 한 장이 증명하는 것을 정확히 쓰면 이렇다.

2026년 8월 20일 14시 32분에
이 화면에서
이 입력으로
이 결과가 나왔다

그게 전부다. 그리고 이것은 결코 사소하지 않다. 분쟁이 생겼을 때, 인수인계를 할 때, “그때 무엇을 봤는가”를 답할 수 있는 유일한 기록이다.

문제는 여기서부터다. 우리는 저 문장을 자주 이렇게 읽는다.

❌ "이 기능은 정상이다"
❌ "이 화면은 테스트되었다"
❌ "이 부분은 문제없다"

세 문장 모두 증적이 말한 적 없는 내용이다.


2. 증명하지 못하는 것 — 세 가지

① 그 케이스가 충분했는가 — 설계의 문제

증적은 실행한 케이스만 보여준다. 실행하지 않은 케이스는 증적에 없다. 없는 것은 보이지 않는다.

"케이스 20건 전부 통과"
   = 우리가 생각한 20가지 상황에서는 문제가 없었다
   ≠ 문제가 없다

생각하지 못한 스물한 번째 상황은 증적 어디에도 나타나지 않는다. 증적이 없다는 사실 자체가 기록되지 않기 때문이다.

가능한 입력과 상황 전체 중 실행한 케이스 20건이 덮는 영역은 가운데 일부에 불과하며, 결함이 몰리는 경계값과 예외 영역은 증적에 기록조차 남지 않음을 나타낸 도식

증적의 개수는 커버리지가 아니다. 200장짜리 결과서가 20장짜리보다 더 넓게 확인했다는 보장은 없다. 같은 경로를 열 번 찍었을 수도 있다.

② 다른 입력에서도 그런가 — 표본의 문제

할인율 10%로 테스트했다면, 증명된 것은 10%뿐이다.

확인함    할인율 10%  →  최종금액 9,000원  ✅ 캡처 있음

확인 안 함  0%  ·  100%  ·  −5%  ·  소수점  ·  null  ·  최대값 초과

경계값과 예외가 빠진 증적은 “가운데만 확인했다”는 기록이다. 그리고 결함은 대부분 가운데가 아니라 가장자리에 있다.

③ 지금도 그런가 — 시점의 문제 ⭐

가장 중요하고, 가장 자주 잊히는 항목이다.

증적은 캡처한 순간의 스냅샷이다. 코드가 바뀌면 증적은 자동으로 낡는다. 그런데 결정적인 문제가 있다.

증적은 스스로 낡았다고 알려주지 않는다.

이 비대칭이 핵심이다.

코드가 바뀌어 결과가 달라지면
자동화 테스트빨간불이 켜진다. 누군가 반드시 본다
증적 이미지아무 일도 일어나지 않는다. 파일은 그대로 정상 화면이다

자동화 테스트는 살아 있는 증거이고, 증적 이미지는 박제된 증거다. 박제는 썩지 않는다. 그래서 언제 죽었는지 알 수 없다.


3. 그래서 생기는 실무 문제 — 증적의 역설

증적이 많을수록 → 안심한다
증적이 오래될수록 → 위험해진다

그런데 이 둘은 같이 간다.

1년 전에 만든 증적 500장은 1년 전 품질에 대한 500개의 진술이다. 그 사이 SR이 서른 건 반영됐다면, 그 500장 중 몇 장이 아직 참인지 아무도 모른다.

그리고 검수는 그 증적을 본다.

여기서 흔한 오해가 하나 더 생긴다.

❌ "증적이 있으니 회귀는 걱정 없다"

증적은 과거를 증명한다. 회귀는 현재의 문제다. 과거의 기록으로 현재를 보증할 수 없다. 증적 기반 테스트는 구조적으로 회귀 방지 수단이 될 수 없다.


4. 그럼 왜 증적을 남기는가

여기까지만 읽으면 증적이 쓸모없다는 말로 들릴 수 있다. 그렇지 않다. 증적은 목적이 다른 도구일 뿐이다.

증적이 잘하는 일설명
사실 확인분쟁 시 “그때 무엇을 봤는가”에 답할 수 있는 유일한 기록
수행의 규율증적을 요구하면 최소한 화면을 한 번은 연다. 안 하면 증적이 안 생긴다
인수인계다음 사람이 어떤 화면을 어떤 값으로 봤는지 알 수 있다
재현 단서결함 신고 시 조건을 좁혀 준다

증적은 품질 보증 수단이 아니라 커뮤니케이션·기록 수단이다.

이 구분이 이 글 전체의 결론이다. 증적을 품질 보증으로 쓰려 하면 실패하고, 기록으로 쓰면 제 몫을 한다.


5. 증적을 더 쓸모 있게 만드는 다섯 가지

① 언제 찍었는지를 코드 버전과 함께 남긴다

❌ 캡처 파일 하나
⭕ 캡처 + 커밋 해시 · 빌드 번호 · 배포 버전

이것 하나만으로 §2-③(시점 문제)의 절반이 해결된다. 증적이 어느 코드에 대한 것인지 알 수 있으면, 그 코드가 바뀌었을 때 낡았음을 판단할 수 있다.

② 무엇을 확인하려 했는지를 함께 적는다

❌ 정상 화면 캡처
⭕ 기대: 할인율 10% 입력 시 최종금액 9,000원
   실제: 9,000원          [캡처]

기대값 없는 스크린샷은 증적이 아니라 그림이다. 무엇이 맞다고 판단한 근거가 없으면, 나중에 그 판단을 검증할 수 없다.

③ 실패도 남긴다

성공만 모인 증적은 통과율이 항상 100%가 되어 어떤 품질 지표도 만들 수 없다. 다만 이것은 조직의 목적에 따라 답이 갈리는 문제라 별도 글에서 따로 다룬다.

④ 증적에 유효기간을 둔다

가장 실효성이 큰 제안이다.

증적을 대상 코드(또는 화면·기능)와 연결해 두고,
그 코드가 바뀌면 해당 증적을 자동으로 "만료" 표시한다.

→ 결과서를 열었을 때 "이 중 12장은 그 뒤 코드가 바뀌었습니다" 가 보인다

증적을 없애자는 것이 아니라, 낡았다는 사실이 보이게 하자는 것이다. 박제에 채취 날짜를 붙이는 일에 가깝다.

코드 버전 정보가 없는 증적은 모두 정상으로 보여 어느 것이 낡았는지 알 수 없지만, 커밋과 연결된 증적은 대상 코드가 바뀐 시점에 만료 표시가 되어 낡았다는 사실이 드러남을 대비한 도식

⑤ 회귀는 다른 수단에 맡긴다

증적으로 회귀를 막으려 하면 반드시 실패한다. 회귀는 반복 실행되는 것만 막을 수 있다.

증적       → 그 시점의 확인 · 기록 · 커뮤니케이션
자동화     → 반복 실행 · 회귀 방지

두 가지를 하나로 하려 들지 않는 것이 중요하다.


6. 이 글이 말하지 않는 것

  • 조직마다 증적의 정의가 다르다. 화면 캡처만 뜻하는 곳도 있고, 로그·데이터·영상을 포함하는 곳도 있다. 이 글은 이미지 중심 증적을 전제로 썼다.
  • 자동화가 항상 대안은 아니다. UI 자동화는 그 자체로 유지비가 크고, 화면이 바뀌면 함께 깨진다. “자동화하면 된다”는 결론은 이 글의 주장이 아니다.
  • 증적이 실제로 결함을 얼마나 잡는지는 측정하지 않았다. 그 답은 의견이 아니라 숫자로만 낼 수 있다. 단위테스트를 통과한 뒤 다음 단계에서 발견되는 결함의 비율(누수율)이 그 실마리가 되는데, 이후 글에서 다룰 예정이다.

정리

① 증적이 증명하는 것
   "그 시점에, 그 화면에서, 그 입력으로, 그 결과가 나왔다" — 그게 전부다

② 증명하지 못하는 것
   케이스가 충분했는가 (설계) · 다른 입력에서도 그런가 (표본) · 지금도 그런가 (시점)

③ 가장 위험한 것은 세 번째다
   증적은 스스로 낡았다고 알려주지 않는다.
   자동화 테스트는 깨지면 빨간불이 켜지지만, 증적은 틀려도 아무 일도 일어나지 않는다

④ 그래서 증적은 품질 보증 수단이 아니라 기록 수단이다
   그 용도로 쓰면 제 몫을 한다

⑤ 가장 효과가 큰 개선은 증적에 시점을 붙이는 것이다
   코드 버전과 연결하면, 낡았다는 사실이 보이기 시작한다

이 글은 「테스트 공정관리」 시리즈입니다.

이전 글 — 한국 SI의 단위테스트는 JUnit의 unit test가 아니다 다음 글 예정 — SI와 SR, 개발 요청의 두 갈래와 테스트 성격의 차이


※ 이 글은 개인의 견해이며 소속 회사의 공식 입장이 아닙니다. 특정 고객사나 프로젝트의 정보를 포함하지 않으며, 일반적으로 통용되는 절차를 정리한 것입니다.

이 글은 개인의 견해이며 소속 회사의 공식 입장이 아닙니다. 특정 고객사나 프로젝트의 정보를 포함하지 않습니다.