개발 프로세스

소프트웨어 시스템이나 애플리케이션 개발 및 유지보수할 목적으로 수행되는 활동의 절차


개발 프로세스 목적


개발에 대한 전체적인 가이드라인을 제공


개발 프로세스 발전


개발 프로세스


소프트웨어 개발 프로세스 모델은 소프트웨어 개발 생명주기(SDLC, Software Develpment Life Cycle)을 기반으로 만들어짐

개발 프로세스


  • 요구분석 및 시스템 명세 작성
    • 문제분석 단계
    • 개발할 소프트웨어의 기능과 제약조건, 목표 등을 사용자와 함께 정확히 정의
    • 소프트웨어의 성격을 정확히 이해, 개발 방법과 필요한 자원 및 예산 예측 후 요구명세 작성
  • 설계
    • 정의한 기능을 실제로 수행하기 위한 방법을 논리적으로 결정
    • 크게 시스템, 프로그램, UI(User Interface) 설계로 나뉨
      • 시스템 구조설계
        • 시스템을 구성하는 내부 프로그램이나 모듈 간의 관계와 구조 설계
      • 프로그램설계
        • 프로그램 내 각 모듈에서의 처리 절차나 알고리즘 설계
  • 구현
    • 문제 해결 방법을 프로그래밍언어로 실제 프로그램 작성
    • 프로그래밍 기법은 구조화 프로그래밍과 모듈러 프로그래밍으로 나뉨
      • 구조화 프로그래밍
        • 조건문, 반복문을 사용하여 프로그램 작성
        • 순차구조, 선택구조, 반복구조의 세 가지 제어구조로 표현.
        • 구조가 명확, 정확성 검증과 테스트 및 유지보수가 쉬운 장점
      • 모듈러 프로그래밍
        • 프로그램을 여러 개의 작은 모듈로 나누어 계층 관계로 구성
        • 모듈별로 개발과 테스트 및 유지보수 가능
        • 모듈의 재사용
        • e.g. react의 컴포넌트
  • 테스트
    • 시스템이 요구사항을 만족하는지, 실행 결과가 예상한 결과와 정확하게 맞는지 검사, 평가
  • 배포 및 유지보수
    • 시스템이 인수되고 설치된 후(배포) 일어나는 모든 활동
    • 소프트웨어 생명주기에서 가장 긴 기간
    • 유지보수의 유형 4가지
      • 수정형 유지보수
        • 사용 중에 발견한 프로그램의 오류 수정
      • 적응형 유지보수
        • 시스템과 관련한 환경적 변화에 적응하기 위한 재조정
      • 완전형 유지보수
        • 시스템의 성능 향상
      • 예방형 유지보수
        • 앞으로 발생할지 모를 변경 사항 대비

실제 개발 착수는 구현부터, 실제 개발 환경에서는 환경에 따라 각각의 단계가 또 세밀하게 나뉘어져 있기도 하고, 그 안에서의 단계가 반복되기도 함


전통적 개발 프로세스


워터폴(Waterfall) 방식


방향으로만 프로세스가 진행되는 개발 과정

워터폴 기본 모델


실제 출시 기한을 정해놓고 순차적으로 프로세스 진행

어플리케이션을 완성해 배포하여 유저에게 전달되는 시간이 오래걸림

실제 디자인 또는 개발된 화면을 시각적으로 확인할 수 있는 단계는 이미 많은 단계가 지나온 시점. 따라서, 그나 수정 사항이 생기면 다시 처음으로 돌아감, 비용 및 시간 문제 발생

대부분 출시 시점에 소프트웨어의 신뢰성 및 안정성 보장 어려움, 배포 직후에도 수많은 버그 가능성

안정성 개선 차원에서 다양한 테스트들을 도입

  • 시스템 테스트 - 최종 시스템이 요구사항을 만족하는지 확인. 만족하지 않는다면 다시 요구분석 단계로 돌아가 새로 개발을 하기도
  • 알파 테스트 - 최종 시스템을 개발 현장에서 비공개로 테스트, 주문형 제품의 경우 개발진과 클라이언트 사이에서 동의가 이루어질 때까지 수행. 대기업의 경우 전문 QA팀이 존재.
  • 베타 테스트 - 고객의 실제 사용 환경에서 수행되는 테스트, 선별된 유저들이 해당 제품을 사용. 에러나 버그가 발견되면 수정

전통적 개발 프로세스 한계

사용자가 항상 최신 상태로 업데이트를 해줘야 하고, 버그 수정(patch)된 버전을 유저에게 즉각적 전달 어려움


모던 개발 프로세스


애자일(Agile) 방식


스프린트(sprint)’ 라고 불리는 짧은 주기의 개발 사이클 반복

애자일 방식 모델


요구사항이 변하는 것을 당연한 전제

SaaS(Software as a Service, 서비스형 소프트웨어)를 개발하는 데에 적합


SaaS


클라우드 서비스 피라미드


클라우드 서비스의 한 방식, 브라우저에 접속하기만 해도 새 버전을 즉시 사용 가능

애플리케이션부터 서버, 가상화, 스토리지, 네트워킹까지 전부 공급자 쪽에서 관리

  • 사용자 업데이트 불필요
  • 하루에 여러 번의 배포 가능
  • 빠른 배포 속도

전통적인 개발 프로세스 VS 모던 개발 프로세스

  워터폴 애자일
장점 프로세스가 길고 순서가 잡혀 있으므로 팀의 규모에 상관 없이 따르기 쉬움
개발 주기가 정해져 있으므로 새로운 프로젝트를 안정적으로 시작 가능
요구 사항이 확정되어 있으므로 프로젝트를 실행하기 수월하며, 개발 목표를 자주 변경하지 않아도 됨
프로젝트의 전 과정에 필요한 예산 및 자원이 초기에 확정되어 예상 결과와 리스크를 통제하기 훨씬 쉬움
빠르면서 유연
짧고 반복적인 스프린트로 구성되어 있어 품질에 초점을 맞출 수 있으므로 빠르게 결함을 인지하고 수정 가능
스프린트를 통한 짧은 반복 과정으로 개발 과정 중에 신속히 제품 변경 가능
단점 개발이 순차적으로 진행되므로 앞 단계가 완성되지 않으면 다음 단계로 넘어갈 수 없어 개발 속도가 느리고 유연성이 떨어짐
테스팅 단계에 이르러서 이슈가 발견되는 경우가 많음
개발 요구 사항이 초기에 확정되므로 범위 변경이 자유롭지 못함
스프린트에 대한 경험이 있으며 빠른 반복 작업에 익숙한 스크럼 마스터가 필요함
고객이 수많은 변경 사항을 검토해야만 하는 번거로움
팀원이 잘 조직되어 있지 않거나 자립성이 떨어지는 경우 애자일론을 채택할 시 문제
  워터폴 애자일
상황 높은 예측 가능성, 순차적인 프로젝트 타임라인, 사전 확정 예산 필요
프로젝트 팀의 경험이 적음
요구사항이 간단, 타임라인이 긴 프로젝트
고성능 소프트웨어 개발 중에서도 특히 소프트웨어 개발
고품질의 결과물과 지속적인 개선에 초점
결과물에 대해 빠른 피드백 필요
기업 개발상의 변경이나 리스크에 덜 민감
제한적인 시간과 자원 탓에 협업이 자유롭지 못한 고객
크고 복잡한 회사들이 프로세스를 간소화해 변화에 더욱 신속하게 대응하고자 할 때
고객 및 외부 관계자와 정기적으로 긴밀한 협업 수행

댓글남기기