V 모델

개발 단계와 테스트 단계를 병행하여 진행하는 검증(Verification)과 확인(Validation) 중심의 접근 방식이다.
폭포수 모델의 변형으로, 각 개발 단계에 대응하는 테스트 단계를 명시하여 검증과 확인을 강조한다.

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '14px'}, 'flowchart': {'width': 600, 'height': 400, 'diagramPadding': 15}}}%%
graph TB
    %% 개발 단계 (왼쪽)
    subgraph Development [개발 단계]
        R[요구사항 분석] --> SD[시스템 설계]
        SD --> AD[아키텍처 설계]
        AD --> MD[모듈 설계]
        MD --> CODE[구현]
    end

    %% 테스트 단계 (오른쪽)
    subgraph Testing [검증 단계]
        CODE --> UT[단위 테스트]
        UT --> IT[통합 테스트]
        IT --> ST[시스템 테스트]
        ST --> AT[인수 테스트]
    end

    %% 개발-테스트 단계 간 검증 관계
    R -.검증 및 확인.-> AT
    SD -.검증 및 확인.-> ST
    AD -.검증 및 확인.-> IT
    MD -.검증 및 확인.-> UT

    %% 각 단계별 산출물
    subgraph Artifacts [주요 산출물]
        %% 개발 단계 산출물
        subgraph DevDoc [개발 문서]
            RD[요구사항 명세서]
            SDD[시스템 설계서]
            ADD[아키텍처 설계서]
            MDD[모듈 설계서]
        end
        
        %% 테스트 단계 산출물
        subgraph TestDoc [테스트 문서]
            UTD[단위 테스트 계획/결과]
            ITD[통합 테스트 계획/결과]
            STD[시스템 테스트 계획/결과]
            ATD[인수 테스트 계획/결과]
        end
    end

    %% 단계와 산출물 연결
    R --- RD
    SD --- SDD
    AD --- ADD
    MD --- MDD
    UT --- UTD
    IT --- ITD
    ST --- STD
    AT --- ATD

    %% 스타일링
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px
    classDef development fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    classDef testing fill:#fff3e0,stroke:#e65100,stroke-width:2px
    classDef artifact fill:#f5f5f5,stroke:#666,stroke-width:2px
    classDef verification stroke-dasharray: 5,5

    %% 클래스 적용
    class R,SD,AD,MD,CODE development
    class UT,IT,ST,AT testing
    class RD,SDD,ADD,MDD,UTD,ITD,STD,ATD artifact

style Development fill:#f8f9fa,stroke:#666,stroke-width:2px
style Testing fill:#f8f9fa,stroke:#666,stroke-width:2px
style Artifacts fill:#fafafa,stroke:#666,stroke-width:2px,stroke-dasharray: 5
style DevDoc,TestDoc fill:#f5f5f5,stroke:#666,stroke-width:2px

주요 단계

개발 단계 (왼쪽)

  1. 요구사항 분석: 고객의 요구사항을 수집하고 분석.
  2. 시스템 설계: 전체 시스템의 아키텍처를 설계.
  3. 아키텍처 설계: 고수준 설계로, 모듈 간 상호작용과 데이터 흐름을 정의.
  4. 모듈 설계: 저수준 설계로, 각 모듈의 상세 기능과 로직을 설계.
  5. 구현: 실제 코드를 작성.

테스트 단계 (오른쪽)

  1. 단위 테스트: 개별 모듈의 기능을 검증.
  2. 통합 테스트: 모듈 간 상호작용을 검증.
  3. 시스템 테스트: 전체 시스템의 기능과 성능을 검증.
  4. 인수 테스트: 고객의 요구사항 충족 여부를 최종 검증.

특징

  1. V자 형태의 구조: 개발 단계가 왼쪽에서 아래로 내려가고, 테스트 단계가 오른쪽으로 올라가는 V자 모양을 형성.
  2. 단계별 대응: 각 개발 단계에 대응하는 테스트 단계가 존재.
  3. 조기 결함 발견: 각 단계마다 테스트를 수행하여 결함을 빠르게 발견하고 수정할 수 있다.
  4. 체계적인 문서화: 각 단계에서 상세한 문서화를 통해 작업을 진행.

장점

  1. 결함을 조기에 발견하여 수정 비용을 절감할 수 있다.
  2. 체계적인 접근으로 프로젝트 관리가 용이.
  3. 각 단계별 문서화로 추적 가능성이 높다.
  4. 테스트 활동을 프로젝트 초기부터 계획하여 품질을 향상시킨다.

단점

  1. 요구사항 변경에 대한 유연성이 부족.
  2. 각 단계가 이전 단계에 종속되어 있어 진행이 경직될 수 있다.
  3. 대규모 프로젝트에서는 관리가 복잡해질 수 있다.

적합한 프로젝트 유형

요구사항이 명확하고 변경이 적은 프로젝트에 적합하며, 특히 안전이 중요한 산업(예: 항공우주, 국방)에서 자주 사용.
품질 보증과 체계적인 개발 프로세스를 중시하는 프로젝트에 효과적.


참고 및 출처