증분 모델 (Incremental Model)

전체 시스템을 여러 개의 작은 부분(증분)으로 나누어 순차적으로 개발하고 제공하는 접근 방식. 각 증분은 완전한 기능을 갖춘 소프트웨어의 일부분으로, 사용자에게 점진적으로 제공

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '14px'}, 'flowchart': {'width': 800, 'height': 600, 'diagramPadding': 15}}}%%
graph TD
    %% 시작점
    Start([프로젝트 시작]) --> Initial[초기 요구사항 분석]
    
    %% 증분 1: 핵심 기능
    subgraph Inc1 [증분 1: 핵심 기능]
        R1[요구분석] --> D1[설계]
        D1 --> I1[구현]
        I1 --> T1[테스트]
        T1 --> V1[검증]
    end
    
    %% 증분 2: 확장 기능
    subgraph Inc2 [증분 2: 확장 기능]
        R2[요구분석] --> D2[설계]
        D2 --> I2[구현]
        I2 --> T2[테스트]
        T2 --> V2[검증]
    end
    
    %% 증분 3: 최종 기능
    subgraph Inc3 [증분 3: 최종 기능]
        R3[요구분석] --> D3[설계]
        D3 --> I3[구현]
        I3 --> T3[테스트]
        T3 --> V3[검증]
    end

    %% 증분 간 연결
    Initial --> Inc1
    V1 --> Inc2
    V2 --> Inc3
    V3 --> End([프로젝트 완료])

    %% 산출물 연결
    V1 -.제품 릴리즈 1.-> Rel1[동작하는 핵심 시스템]
    V2 -.제품 릴리즈 2.-> Rel2[확장된 시스템]
    V3 -.최종 릴리즈.-> Rel3[완성된 시스템]

    %% 피드백 루프
    Rel1 -.피드백.-> R2
    Rel2 -.피드백.-> R3

    %% 스타일 정의
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:1px
    classDef phase fill:#e1f5fe,stroke:#01579b,stroke-width:1px
    classDef milestone fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px
    classDef release fill:#fff3e0,stroke:#e65100,stroke-width:1px

    class Start,End,Initial milestone
    class R1,D1,I1,T1,V1,R2,D2,I2,T2,V2,R3,D3,I3,T3,V3 phase
    class Rel1,Rel2,Rel3 release

    style Inc1 fill:#f0f4f8,stroke:#666,stroke-width:1px
    style Inc2 fill:#e1f5fe,stroke:#666,stroke-width:1px
    style Inc3 fill:#e8f5e9,stroke:#666,stroke-width:1px

주요 단계

  1. 요구사항 분석: 현재 증분에 포함될 기능을 정의.
  2. 설계: 시스템 아키텍처와 상세 설계를 수행.
  3. 구현: 실제 코드를 작성.
  4. 테스트: 구현된 기능을 테스트하고 버그를 수정.
  5. 통합 및 배포: 새로운 증분을 기존 시스템과 통합하고 사용자에게 제공.

특징

  1. 단계적 개발: 전체 시스템을 여러 개의 증분으로 나누어 개발.
  2. 순차적 제공: 각 증분을 완성할 때마다 사용자에게 제공.
  3. 기능 우선순위: 중요도나 우선순위에 따라 증분을 계획.
  4. 반복적 프로세스: 각 증분마다 요구사항 분석부터 테스트까지의 과정을 반복.
  5. 점진적 기능 확장: 각 증분마다 새로운 기능이 추가되거나 기존 기능이 개선.

장점

  1. 조기 제품 출시: 첫 번째 증분부터 사용 가능한 제품을 제공할 수 있다.
  2. 유연한 변경 관리: 각 증분 사이에 요구사항 변경을 반영할 수 있다.
  3. 위험 감소: 중요한 기능을 먼저 개발하여 주요 위험을 조기에 해결할 수 있다.
  4. 사용자 피드백 활용: 각 증분 후 사용자 피드백을 받아 다음 증분에 반영할 수 있다.
  5. 병렬 개발 가능: 여러 팀이 동시에 다른 증분을 개발할 수 있다.

단점

  1. 전체 아키텍처 설계 필요: 초기에 전체 시스템의 아키텍처를 설계해야 한다.
  2. 인터페이스 관리 복잡성: 증분 간 인터페이스 관리가 복잡할 수 있다.
  3. 문서화 부담: 각 증분마다 문서화가 필요하여 작업량이 증가할 수 있다.
  4. 전체 비용 증가: 여러 번의 통합과 테스트로 인해 전체 비용이 증가할 수 있다.

적합한 프로젝트 유형

  • 주요 요구사항은 명확하지만 세부사항은 변경될 수 있는 프로젝트
  • 빠른 시장 출시가 필요한 프로젝트
  • 새로운 기술이나 기능을 점진적으로 도입하고자 할 때
  • 자금이나 인력 등의 자원이 제한적인 경우

참고 및 출처