SW 테스팅을 처음 배우는 초보자라면 “테스트는 개발이 끝난 뒤에 하는 것”이라고 생각하기 쉽습니다. 하지만 V-모델은 품질보증, QA, 테스트자동화까지 이어지는 테스팅의 역할을 개발 초기부터 이해하도록 도와주는 기본 모델입니다. 이 글에서는 V-모델이 무엇인지, 테스트 레벨과 V&V가 어떤 의미인지, 실무에서 어떻게 활용할 수 있는지 단계별로 정리합니다.

V-모델이란 무엇인가
V-모델은 소프트웨어 개발 단계와 그에 대응하는 테스트 단계를 V자 형태로 연결해 보여주는 모델입니다. 왼쪽은 요구사항 분석, 설계, 구현으로 내려가는 개발 활동을 나타내고, 오른쪽은 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트처럼 검증 활동이 올라가는 구조를 가집니다.
핵심은 단순히 “개발 후 테스트한다”가 아니라, 각 개발 단계에서 어떤 테스트를 준비해야 하는지를 미리 생각하게 만드는 데 있습니다.
예를 들어 요구사항을 작성하는 단계에서는 나중에 인수 테스트에서 확인할 기준을 함께 고민해야 합니다. 아키텍처나 상세 설계를 작성할 때는 통합 테스트와 단위 테스트에서 무엇을 검증할지 생각해야 합니다. 즉, V-모델은 개발 산출물과 테스트 활동을 연결해 품질을 관리하는 사고방식입니다.
V-모델의 역할: 초보자가 꼭 이해해야 할 핵심
V-모델의 가장 중요한 역할은 개발 단계별로 테스팅을 어떻게 접근해야 하는지 쉽게 보여주는 것입니다. 초보 QA나 개발자에게는 테스트 레벨의 차이를 이해하는 데 특히 유용합니다.
V-모델을 통해 얻을 수 있는 핵심 관점은 다음과 같습니다.
- 테스트는 개발 마지막 단계의 확인 작업만이 아니다.
- 요구사항, 설계, 코드 각각에 대응하는 테스트 활동이 있다.
- 테스트 레벨은 검증 대상과 목적에 따라 구분된다.
- 개발 초기에 결함을 발견하거나 예방할수록 수정 비용이 낮아진다.
- Verification과 Validation은 서로 다른 질문에 답한다.
실무에서 자주 발생하는 문제 중 하나는 테스트를 너무 늦게 시작하는 것입니다. 개발이 거의 끝난 뒤 QA가 투입되면 요구사항 자체가 잘못되었거나 설계가 누락된 문제를 뒤늦게 발견하게 됩니다. 이 경우 단순 버그 수정이 아니라 일정, 구조, 기획까지 흔들릴 수 있습니다. V-모델은 이런 상황을 줄이기 위해 “초기 단계부터 품질을 생각하라”는 메시지를 줍니다.
테스트 레벨의 의미와 V-모델에서의 위치
V-모델을 이해하려면 테스트 레벨의 의미를 알아야 합니다. 테스트 레벨은 테스트 대상과 목적에 따라 구분되는 테스트 활동의 층위입니다.
대표적인 테스트 레벨은 다음과 같습니다.
1. 단위 테스트
- 함수, 클래스, 모듈 등 가장 작은 단위를 검증합니다.
- 주로 개발자가 작성하며, 테스트자동화와 가장 밀접합니다.
- 예: 할인율 계산 함수가 입력값에 따라 정확한 금액을 반환하는지 확인
2. 통합 테스트
- 여러 모듈이나 컴포넌트가 함께 동작하는지 확인합니다.
- API 연동, DB 연결, 서비스 간 데이터 흐름을 검증합니다.
- 예: 회원가입 API가 사용자 정보 저장 후 인증 메일 발송 기능과 정상 연동되는지 확인
3. 시스템 테스트
- 전체 시스템이 요구사항대로 동작하는지 확인합니다.
- 실제 사용자 시나리오에 가까운 흐름을 점검합니다.
- 예: 사용자가 상품 검색, 장바구니 담기, 결제까지 완료할 수 있는지 확인
4. 인수 테스트
- 사용자의 비즈니스 요구와 기대를 만족하는지 확인합니다.
- 고객, PO, 비즈니스 담당자 관점의 검증이 포함됩니다.
- 예: 관리자가 월별 매출 리포트를 원하는 기준으로 확인할 수 있는지 검증
초보자 입장에서 중요한 점은 “모든 테스트가 같은 목적을 갖지 않는다”는 것입니다. 단위 테스트는 코드 내부 로직에 가깝고, 인수 테스트는 사용자의 실제 목적에 가깝습니다. V-모델은 이 차이를 한눈에 보여줍니다.
개발 초기 단계에서 테스팅을 수행한다는 의미
개발 초기 단계에서 테스팅을 수행한다는 말은 반드시 실행 가능한 프로그램을 테스트한다는 뜻만은 아닙니다. 코드가 없어도 테스트 활동은 가능합니다.
예를 들어 요구사항 단계에서는 다음과 같은 질문을 할 수 있습니다.
- 요구사항이 모호하지 않은가?
- 서로 충돌하는 조건은 없는가?
- 테스트 가능한 형태로 작성되어 있는가?
- 성공과 실패 기준이 명확한가?
- 예외 상황이 정의되어 있는가?
이런 활동은 리뷰, 정적 테스트, 요구사항 검토에 해당합니다. 실행 없이 문서와 설계를 검토하는 것도 중요한 테스팅입니다.
예를 들어 “사용자는 빠르게 로그인할 수 있어야 한다”라는 요구사항은 테스트하기 어렵습니다. 반면 “사용자는 올바른 아이디와 비밀번호 입력 후 2초 이내에 로그인 완료 화면으로 이동해야 한다”라고 작성하면 검증 기준이 명확해집니다.
이처럼 개발 초기의 테스팅은 결함을 실행 단계에서 찾기 전에 요구사항과 설계 단계에서 예방하는 활동입니다.
결함 예방 관점에서 V-모델이 중요한 이유
QA 실무에서 가장 비용이 많이 드는 결함은 늦게 발견된 결함입니다. 단순 UI 오타처럼 가벼운 결함도 있지만, 요구사항 해석이 잘못되어 전체 기능이 다시 개발되어야 하는 경우도 있습니다.
V-모델은 결함을 뒤늦게 발견하는 것이 아니라, 단계별로 예방하도록 돕습니다.
예를 들어 다음과 같은 흐름을 생각해 볼 수 있습니다.
- 요구사항 단계에서 누락된 예외 조건 발견
- 설계 단계에서 데이터 흐름의 모순 발견
- 구현 단계에서 단위 테스트로 로직 오류 발견
- 통합 단계에서 API 계약 불일치 발견
- 시스템 테스트에서 사용자 시나리오 오류 발견
만약 “비밀번호 재설정 링크는 30분 후 만료되어야 한다”는 조건이 요구사항에 빠져 있었다면, 시스템 테스트 단계에서야 보안 문제가 드러날 수 있습니다. 하지만 요구사항 리뷰 단계에서 이 조건을 확인했다면 개발 전에 수정할 수 있습니다.
결함 예방 차원의 테스팅은 QA만의 일이 아닙니다. 기획자, 개발자, 디자이너, QA가 함께 품질을 앞단에서 고려해야 효과가 큽니다.
V&V의 의미: Verification과 Validation 구분하기
V-모델을 이해할 때 자주 나오는 개념이 V&V입니다. V&V는 Verification과 Validation을 의미합니다.
Verification은 “제품을 올바르게 만들고 있는가?”에 대한 질문입니다. 즉, 산출물이 명세, 설계, 기준을 따르고 있는지 확인합니다.
예를 들어 다음은 Verification에 가깝습니다.
- 요구사항 문서에 필수 항목이 모두 포함되어 있는가?
- 설계서가 아키텍처 원칙을 따르는가?
- 코드가 코딩 컨벤션을 지키는가?
- API 응답 형식이 명세와 일치하는가?
반면 Validation은 “올바른 제품을 만들고 있는가?”에 대한 질문입니다. 즉, 실제 사용자나 비즈니스 목적을 만족하는지 확인합니다.
예를 들어 다음은 Validation에 가깝습니다.
- 사용자가 실제로 원하는 흐름으로 결제를 완료할 수 있는가?
- 관리자 화면이 운영 업무에 충분히 편리한가?
- 기능이 비즈니스 목표를 달성하는 데 도움이 되는가?
- 고객이 요구한 인수 조건을 만족하는가?
초보 QA가 흔히 하는 실수는 Verification만 확인하고 Validation을 놓치는 것입니다. 명세서대로 동작하더라도 사용자가 원하는 결과를 얻지 못하면 품질이 좋다고 보기 어렵습니다.
테스트자동화와 V-모델의 연결
V-모델은 전통적인 개발 모델처럼 보이지만, 테스트자동화 전략을 세울 때도 유용합니다. 어떤 테스트를 어느 레벨에서 자동화할지 결정하는 기준을 제공하기 때문입니다.
일반적으로 자동화 효과가 큰 영역은 반복성이 높고 결과 판정이 명확한 테스트입니다.
- 단위 테스트: 자동화 우선순위가 높음
- API 통합 테스트: 회귀 테스트 자동화에 효과적
- UI 테스트: 핵심 사용자 시나리오 중심으로 선별 자동화
- 인수 테스트: 비즈니스 규칙이 명확한 경우 자동화 가능
다만 모든 테스트를 자동화하는 것이 정답은 아닙니다. UI가 자주 바뀌는 초기 제품에서 화면 자동화만 과도하게 만들면 유지보수 비용이 커질 수 있습니다. V-모델 관점에서는 각 테스트 레벨의 목적을 먼저 정하고, 반복성과 안정성을 기준으로 자동화 대상을 선정하는 것이 좋습니다.
예를 들어 결제 금액 계산 로직은 단위 테스트로 자동화하는 것이 적합합니다. 반면 신규 이벤트 페이지의 시각적 완성도는 수동 확인이 더 효율적일 수 있습니다.
실전 적용 방법: 프로젝트에서 V-모델 활용하기
실무에서 V-모델을 적용한다고 해서 반드시 문서를 두껍게 만들 필요는 없습니다. 중요한 것은 각 개발 단계에서 대응되는 테스트 관점을 놓치지 않는 것입니다.
프로젝트에 바로 적용할 수 있는 방법은 다음과 같습니다.
1. 요구사항 작성 시 테스트 기준을 함께 정의한다
- “정상 동작”뿐 아니라 예외 조건과 실패 조건도 작성합니다.
- 완료 기준을 테스트 가능한 문장으로 바꿉니다.
2. 설계 리뷰에 QA가 참여한다
- 데이터 흐름, 상태 전이, 외부 연동 지점을 확인합니다.
- 나중에 통합 테스트에서 문제가 될 부분을 미리 식별합니다.
3. 개발 중 단위 테스트 범위를 정한다
- 핵심 비즈니스 로직은 단위 테스트 대상으로 우선 지정합니다.
- 단순 getter/setter보다 계산, 조건 분기, 권한 체크 로직에 집중합니다.
4. 통합 테스트 포인트를 사전에 목록화한다
- API, DB, 메시지 큐, 외부 서비스 연동을 점검합니다.
- 장애 응답, 타임아웃, 중복 요청 같은 예외 상황도 포함합니다.
5. 시스템 테스트는 사용자 시나리오 중심으로 설계한다
- 기능 단위 체크리스트만으로 끝내지 않습니다.
- 실제 사용자가 목표를 달성하는 흐름을 검증합니다.
6. 인수 기준을 이해관계자와 합의한다
- QA가 혼자 판단하지 않고 PO, 기획자, 고객과 기준을 맞춥니다.
- “이 정도면 출시 가능하다”의 기준을 명확히 합니다.
V-모델은 폭포수 방식 프로젝트에만 쓰는 오래된 개념이 아닙니다. 애자일, 스크럼 환경에서도 스프린트 단위로 요구사항, 설계, 구현, 테스트의 대응 관계를 점검하는 데 사용할 수 있습니다.
초보 QA를 위한 V-모델 체크리스트
아래 체크리스트는 초보 QA가 프로젝트에 투입되었을 때 바로 활용할 수 있는 항목입니다.
- 요구사항이 테스트 가능한 문장으로 작성되어 있는가?
- 정상 케이스와 예외 케이스가 모두 정의되어 있는가?
- 각 요구사항에 대응하는 테스트 레벨이 정해져 있는가?
- 단위 테스트가 필요한 핵심 로직이 식별되어 있는가?
- 통합 테스트가 필요한 외부 연동 지점이 정리되어 있는가?
- 시스템 테스트 시나리오가 실제 사용자 흐름을 반영하는가?
- 인수 테스트 기준이 고객 또는 비즈니스 담당자와 합의되었는가?
- 테스트자동화가 필요한 반복 테스트가 구분되어 있는가?
- 결함 발생 시 어느 단계의 누락인지 회고할 수 있는가?
- Verification과 Validation 관점이 모두 포함되어 있는가?
이 체크리스트를 사용하면 테스트 케이스 작성 전에 품질 리스크를 더 넓게 볼 수 있습니다. 특히 초보자는 화면에 보이는 기능만 확인하는 경향이 있는데, V-모델 체크리스트를 활용하면 요구사항과 설계 단계의 문제까지 질문할 수 있습니다.
주의할 점: V-모델을 오해하면 생기는 문제
V-모델은 유용하지만 잘못 이해하면 오히려 실무에 부담을 줄 수 있습니다.
첫째, V-모델을 문서 중심 프로세스로만 이해하면 안 됩니다. 핵심은 문서 양이 아니라 개발 단계와 테스트 활동의 연결입니다. 작은 팀이라면 간단한 표나 이슈 템플릿만으로도 충분히 적용할 수 있습니다.
둘째, 테스트를 오른쪽 단계에서만 수행한다고 생각하면 안 됩니다. V-모델 그림에서는 테스트 실행이 오른쪽에 있지만, 테스트 계획과 설계는 왼쪽 단계부터 시작되어야 합니다.
셋째, 모든 프로젝트에 동일한 깊이로 적용하려고 하면 비효율적입니다. 금융, 의료, 자동차처럼 안전성과 규제가 중요한 분야는 엄격한 추적성이 필요할 수 있습니다. 반면 초기 스타트업 제품은 핵심 기능과 리스크 중심으로 가볍게 적용하는 것이 현실적입니다.
넷째, 자동화를 무조건 많이 하는 것이 좋은 품질보증은 아닙니다. 자동화는 반복 검증을 빠르게 해주지만, 요구사항의 타당성이나 사용자 경험의 적절성을 대신 판단해주지는 못합니다.
어떤 상황에서 V-모델을 써먹을 수 있을까
V-모델은 다음과 같은 상황에서 특히 도움이 됩니다.
- QA 초보자가 테스트 레벨을 체계적으로 이해해야 할 때
- 프로젝트 초반에 테스트 전략을 세워야 할 때
- 요구사항 누락과 설계 결함이 자주 발생할 때
- 테스트자동화 대상을 정해야 할 때
- 인수 테스트 기준이 불명확해 출시 판단이 어려울 때
- 개발자와 QA 사이에 테스트 책임 범위가 모호할 때
예를 들어 “QA가 어디까지 봐야 하나요?”라는 질문이 자주 나오는 조직이라면 V-모델을 기준으로 역할을 나눌 수 있습니다. 개발자는 단위 테스트와 일부 통합 테스트를 책임지고, QA는 시스템 테스트와 인수 기준 검증을 중심으로 보되, 요구사항 리뷰와 설계 리뷰에도 참여하는 구조를 만들 수 있습니다.
이렇게 하면 QA가 단순히 마지막에 버그를 찾는 역할이 아니라, 제품 품질을 앞단부터 관리하는 품질보증 역할로 확장됩니다.
자주 묻는 질문
Q1. V-모델은 폭포수 개발에서만 사용하는 개념인가요?
아닙니다. V-모델은 전통적인 개발 모델에서 자주 설명되지만, 핵심 개념은 애자일 환경에서도 사용할 수 있습니다. 스프린트 단위로 요구사항을 정의하고, 설계와 구현을 진행하며, 각 단계에 맞는 테스트 관점을 연결하면 됩니다. 중요한 것은 큰 문서가 아니라 “이 요구사항은 어떤 테스트로 검증할 것인가”를 초기에 생각하는 것입니다.
Q2. 초보 QA는 V-모델에서 어디에 집중해야 하나요?
처음에는 테스트 레벨의 차이를 이해하는 데 집중하는 것이 좋습니다. 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트가 각각 무엇을 검증하는지 구분해야 합니다. 그다음 요구사항을 읽을 때 “이 내용은 어떻게 확인할 수 있을까?”, “예외 상황은 무엇일까?”, “사용자 목적을 만족하는가?”를 질문하는 습관을 들이면 됩니다.
Q3. 테스트자동화는 V-모델의 어느 단계에서 고려해야 하나요?
테스트자동화는 개발이 끝난 뒤에 생각하면 늦습니다. 요구사항과 설계 단계에서부터 반복 검증이 필요한 영역을 식별해야 합니다. 예를 들어 계산 로직, 권한 체크, API 응답 검증처럼 결과가 명확하고 반복 실행이 필요한 테스트는 자동화 후보가 됩니다. 반면 자주 바뀌는 화면이나 주관적 판단이 필요한 UX 검증은 수동 테스트가 더 적합할 수 있습니다.
Q4. Verification과 Validation을 쉽게 구분하는 방법은 무엇인가요?
Verification은 “명세대로 만들었는가?”를 확인하는 활동이고, Validation은 “사용자에게 필요한 것을 만들었는가?”를 확인하는 활동입니다. 예를 들어 로그인 버튼을 누르면 명세서에 정의된 API가 호출되는지는 Verification에 가깝습니다. 사용자가 로그인 과정을 불편하지 않게 완료할 수 있는지는 Validation에 가깝습니다. 좋은 QA는 두 관점을 모두 봐야 합니다.
Q5. V-모델을 적용하면 테스트 시간이 더 오래 걸리지 않나요?
초기에는 리뷰와 테스트 설계 시간이 늘어나는 것처럼 느껴질 수 있습니다. 하지만 요구사항 누락이나 설계 오류를 늦게 발견했을 때의 재작업 비용을 줄일 수 있습니다. 특히 출시 직전 큰 결함이 발견되어 일정이 밀리는 경험이 잦다면, V-모델 기반의 초기 테스트 활동은 오히려 전체 프로젝트 시간을 줄이는 데 도움이 됩니다.
마무리
| 항목 | 정리 |
|---|---|
| V-모델의 핵심 역할 | 개발 단계와 테스트 단계를 연결해 테스팅 접근 방법을 구조적으로 보여준다 |
| 초보자가 얻을 수 있는 점 | 테스트 레벨, 품질보증 역할, 결함 예방 관점을 쉽게 이해할 수 있다 |
| 개발 초기 테스팅의 의미 | 코드 실행 전에도 요구사항 리뷰, 설계 검토, 테스트 기준 정의를 통해 결함을 예방한다 |
| V&V 구분 | Verification은 명세대로 만들었는지, Validation은 사용자에게 맞는 제품인지 확인한다 |
| 테스트자동화 적용 | 반복성 높고 결과가 명확한 단위 테스트, API 테스트부터 우선 고려한다 |
| 실무 활용 포인트 | 요구사항 단계부터 테스트 기준을 정의하고, 설계 리뷰와 인수 기준 합의에 QA가 참여한다 |
| 주의할 점 | 문서 형식에 매몰되지 말고 프로젝트 리스크와 목적에 맞게 가볍고 실용적으로 적용한다 |

저는 대학에서 컴퓨터 관련 학과 학생들을 가르치고 있는 교수 김기태입니다. Spring Boot, React, Python 등을 활용한 풀스택 웹 개발과 최신 AI 서비스 설계를 주로 다루고 있으며, 학생들이 현업 실무에 바로 적용할 수 있는 기술 역량을 키울 수 있도록 강의와 실습을 설계하고 있습니다.


