소프트웨어 개발 수명주기(Software Development Life Cycle)

소프트웨어 개발 수명주기(Software Development Life Cycle)

소프트웨어 개발 수명주기는 애플리케이션을 개발하고 배포하는 작업을 설명한다. 6개의 단계로 구성되어 있으며 여러 모델이 있다.

단계

  1. 요구 사항 분석
    • 개발할 소프트웨어의 기능과 제약 조건, 목표 등을 정의
    • 소프트웨어의 성격을 이해
    • 개발 방법과 자원, 예산을 예측 후 요구명세서 작성
  2. 시스템 명세 단계
    • 시스템이 어떻게 동작하는지 정의
    • 입력 자료, 처리 내용, 생성되는 출력 정의
  3. 설계
    • 2단계에서 정의한 기능을 실제로 수행할 수 있도록 수행 방법 결정
    • 시스템 구조 설계
      • 시스템을 구성하는 내부 프로그램이나 모듈 간의 관계와 구조 설계
    • 프로그램 설계
      • 프로그램 내의 각 모듈에서의 처리 절차나 알고리즘 설계
    • 사용자 인터페이스 설계
      • 사용자가 시스템을 사용하기 위해 보여지는 부분 설계
  4. 구현
    • 3단계에서 결정한 문제 해결 방법을 프로그래밍 언어로 실제 프로그램을 작성
    • 구조화 프로그래밍
      • 지정문과 조건문, 반복문만을 사용하여 작성
      • 순차 구조, 선택 구조, 반복 구조로 제어 구조 표현
      • 구조가 명확해서 정확성 검증과 테스트 및 유지보수 용이
    • 모듈러 프로그래밍
      • 프로그램을 여러 개의 작은 모듈로 나누어 계층 관계로 구성
      • 모듈별로 개발과 테스트 및 유지보수 가능
      • 모듈 재사용 가능
  5. 테스트
    • 개발한 시스템이 요구사항을 만족하는지, 실행 결과와 예상 결과가 맞는지 검사하고 평가
    • 단위 테스트
      • 시스템의 최소 구성요소가 되는 모듈에 대해 개별적 시행
    • 통합테스트
      • 단위 테스트를 통과한 모듈을 연결하여 전체 시스템으로 완성하여 통합적으로 시행
    • 인수 테스트
      • 완성된 시스템을 인수하기 위해 실제 자료를 사용한 최종 테스트
  6. 유지보수
    • 시스템이 인수되고 설치된 후 일어나는 모든 활동
    • 이후에 있는 커스터마이징, 구현, 테스트 등 포함
    • 소프트웨어 생명주기에서 가장 긴 기간
    • 수정형 유지보수
      • 사용 중 발견한 오류 수정
    • 적응형 유지보수
      • 시스템과 관련한 환경적 변화에 적응하기 위한 재조정 작업
    • 완전형 유지보수
      • 시스템의 성능을 향상시키기 위한 개선 작업
    • 예방형 유지보수
      • 앞으로 발생할지 모를 변경사항을 수용하기 위한 대비 작업

모델

폭포수 모델(Waterfall model)

  • 소프트웨어 개발 초기부터 시작하여 각 단계 진행
  • 이전 단계가 완전히 끝날 때까지 다음 단계 시작 불가
  • 프로세스 각 단계에 대한 연속성과 실행 가능성을 분석할 때 도움
  • 사용자 요구사항 적용을 확인할 때 많은 시간 소요

원형 모델(Prototyping)

  • 폭포수 모델의 단점 보완
  • 점진적으로 시스템 개발
  • 사용자의 요구사항을 정확히 파악하기 어려울 때 사용
  • 샘플을 먼저 개발한 후 피드백을 받고 샘플을 폐기 후 개발
  • 대규모 프로젝트에는 부적합

주먹구구식 모델(Build and Fix model)

  • 요구사항 분석, 설계 등의 단계없이 개발 시작
  • 만족할 때까지 수정 작업 진행
  • 프로젝트 진행 파악, 개발 및 유지보수 어려움

나선형 모델(Spiral model)

  • 폭포수 모델과 원형 모델의 장점 수용 & 위험 분석 추가
  • 프로젝트 수행할 때 발생하는 위험 최소화
  • 중간 중간 위험 분석을 하며 문제가 있을 경우 프로젝트 중단
  • 프로젝트 관리가 복잡

V 모델

  • 폭포수 모형에 시스템 검증과 테스트, 작업 강조
  • 모듈의 상세 설계를 단위 테스트 과정에서 검증
  • 시스템 설계는 통합 테스트 단계에서 검증
  • 사용자의 요구는 시스템 테스트 과정에서 검증
  • 반복이 없어 변경을 다루기 어려움

애자일 모델(Agile model)

  • 고객의 요구 사항 변화에 유연하게 대응하는 일정 주기를 가지고 반복
  • 고객과의 소통에 초점을 맞춤
  • 스프린트라는 짧은 개발 주기 반복
  • 개발 주기마다 결과에 대한 고객의 평가와 요구 수용
  • 개발 주기에는 고객이 우선수위를 부여