프로세스(Process) : 소프트웨어 개발을 위한 일련의 절차와 활동
방법론(Methodology) : 프로세스를 수행할 구체적인 방법
따라서 프로세스는 방법론에 의해 수행이 된다.
# SW 개발 생명주기
SDLC(Software Development Life Cycle)
- 소프트웨어 개발의 전 과정을 의미하고 소프트웨어 개발 생명주기라고 한다.
- 일반적으로 단계는 아래와 같이 구성되어 있다.
- 이런 개발 생명주기를 어떤 절차로 진행할 것인가가 프로세스, 프로세스를 수행할 접근법, 원칙을 방법론이라 한다.
#프로세스
소프트웨어 개발 프로세스를 일반화해 프로젝트에 적용할 수 있도록 만든 것이 모델이며 대표적으로
폭포수 모델, 프로토타입 모델, 나선형 모델, 애자일 모델 등이 있다.
폭포수 모델
- 각 단계는 순차적으로 진행되고 단계가 완료되어야지 다음 단계로 넘어간다.
- 다음 단계로 넘어가면 다시 돌아갈 수 없다
- 관리가 용이하고 단계별 산출물 관리가 용이하다.
- 요구사항의 변화가 적은 프로젝트에 적합하다.
- 기간과 비용 산정에 유리하다.
- V모델이라는 모델도 있는데, 이 모델은 폭포수 모델에서 검증단계를 추가함으로 오류를 줄이는데 도움이 된다.
프로토타입 모델
먼저 프로토타입이란 보통 아이디어나 제품 설계를 검증하기 위한 시작품의 의미로 사용된다.
- 초기 단계에서 시스템의 일부분을 빠르게 구현해 요구사항을 확인하는 방법이다.
- 개발자와 사용자 간의 원활한 의사소통을 통해 요구사항을 정확히 파악할 수 있다.
- 요구사항의 변화가 많은 프로젝트에 적합하다.
- 반복적인 개발 때문에 비용산정과 개발기간 산정이 어려워질 수 있다.
- 프로토타입이 완전한 개발이 아니기 때문에 실제 결과물과의 간극으로 인해 문제가 발생할 수 있다.
나선형 모델
- 요구분석 -> 위험분석 -> 개발 -> 사용자 평가 과정을 반복하며 개발하는 모델
- 위험분석을 통해 프로젝트 중단과 같은 위험을 최소화할 수 있다.
- 사용자 평가가 반영된 반복적인 개발을 통해 요구사항의 변화에 유연하게 대처할 수 있다.
- 반복적인 진행으로 인해 프로젝트 기간이 길어질 수 있다.
- 위험관리를 위한 추가적인 전문가 등의 추가 비용이 발생할 수 있다.
UP(Unified Process)
UML을 기반으로 하는 객체지향 소프트웨어 개발 프로세스이다.
반복적, 점진적 소프트웨어 개발 프로세스로 가장 잘 알려지고 많이 문서화된 통합프로세스가 RUP(Rational UP)이다.
기본적으로 아래와 같은 구조를 가지고 있다
- 기본적인 SDLC를 점진적으로 반복 수행하는 모델 (V, 나선형 모델로부터 발전)
- Inception, Elaboration, Construction, Transition 4개의 Phase로 구성되어 있다.
- 각 Phase는 분석 -> 설계 -> 구현 -> 테스트 -> 배포를 반복한다.
- 초기 단계에서는 분석, 설계 비중이 높고 후반 단계에서는 구현, 테스트 비중이 높아진다.
- 요구사항의 변화가 많은 프로젝트에 적합하다.
- 초기 단계부터 어느 정도의 구현이 발생하므로 소프트웨어 품질 향상에 도움이 된다.
- 프로세스 자체가 복잡하고 비용이 많이 들어가므로 제대로 수행되기 위해서는 체계적인 시스템과 전문가가 필요하다.
- 기본적으로 Phase가 진행될수록 리스크는 줄어들고 프로젝트의 가치는 증가해야 한다.
애자일 모델
RUP가 널리 확산되는 시점에 RUP의 복잡성과 비용이 많이 들어가고 개발의 가치보단 문서, 산출물을 중심으로 하는 문제가 제기되었고, 이에 대한 방안으로 애자일 모델이 개발되었다.
애자일은 개발의 핵심 가치를 아래와 같이 제시한다.
- 프로세스와 도구보다 개인과 상호작용
- 문서보다 작동하는 소프트웨어
- 계약 협상보다 고객과의 협력
- 계획을 따르기보단 변화에 능동적으로 대처하기
애자일 프로세스 기반의 다양한 방법론이 존재하고, 대표적으로 XP, Scrum, Lean, Kanban, FDD 등이 있다.
현재의 대표적인 프로세스 모델은 애자일 모델이다.
완전히 정형화된 모델이 아닌 다양한 방법론을 조합하는 형태로 많이 사용되고 있다.
애자일 프로세스의 특징
- SW개발의 궁극적인 목표는 고객이 만족하는 SW개발이다.
- 동작 가능한 SW를 짧으면 2주, 길어도 2개월 내에 개발하여 고객의 피드백을 수용하여 개발한다.
- 프로세스가 진행되는 동안 고객과 개발자가 지속적으로 소통하며 요구사항을 반영해야 한다.
- 빠른 프로토타이핑과 반복적이고 잦은 출시가 목표이다.
#방법론
방법론은 프로세스를 구현하기 위한 구체적인 접근법, 원칙 등을 의미한다.
애자일에서는 스크럼이 유명하다.
OOAD(Object Oriented Analysis and Design)
객체지향 분석 및 설계라는 뜻을 가졌다.
객체지향 방법론은 프로그램을 객체와 객체 간의 인터페이스 형태로 구성하기 위해 문제 영역에서 객체, 클래스 및 이들 간의 관계를 식별해 설계 모델로 변환하는 방법론이다.
현실 세계를 인간이 이해하는 방식으로 시스템에 적용하는 개념으로
이를 위해 객체, 클래스, 메시지를 기본 모형으로 제시했고 이를 통해 문제 영역을 추상화하여 모델링한다.
- 객체란 현실세계에서 어떤 구체적 의미를 구성하는 하나의 실제 단위인 특정 물체나 개념이다.
- 객체 지향이란 현실세계를 이해하는 방법으로 분석, 설계, 구현에 적용한다.
- 객체는 속성과 메소드로 구성되어 있다.
- 현실세계로부터 객체를 추출하고 추상화하여 클래스를 정의하고 관계를 기술해 나가는 것이 객체 모델링이다.
- 분석 설계의 결과로 모델이 나오고 구현을 통해 실체화된다.
객체지향 분석
요구사항에서 객체를 뽑아내는 분석으로 클래스와 객체의 관점에서 도메인을 분석한다.
- 도메인 컨셉을 이해하고 객체를 도출
- 모델은 무엇인가?
- 현실 세계를 단순화하고 모델링
- 추상화된 시스템
- 모델링은 반드시 기능적, 성능, 안정성을 요구사항으로 하는 측면에서 검토되어야 한다.
객체지향 설계
정적 관점 : 소프트웨어 객체들을 정의하는 것
동적 관점 : 요구사항을 충족하기 위해 객체들이 어떻게 협력하는지 정의하는 것
제공해야 할 기능을 찾고 세분화하고 기능을 알맞은 객체에 할당하는 과정.
기능은 최대한 캡슐화하여 구현하고 객체 간에 메소드 요청을 어떻게 주고받을지 결정한다.
- 설계 클래스 다이어그램은 도메인에 존재하지 않는 다양한 솔루션 클래스(엔티티, 제어, 데이터 접근) 포함
- 설계 클래스를 관련 그룹으로 묶어 패키지 다이어그램 작성
- 클래스 사이의 관계나 속성 이름, 속성 타입, 메서드 시그니처 등 파악
- 설계 클래스 다이어그램의 품질을 높이기 위해 응집도와 결합도 고려
스크럼(Scrum)
애자일 방법론 중 하나로 프로젝트를 여러 개의 반복적인 개발 주기인 스프린트로 나누어 진행한다.
기본 개념
- 소프트웨어 개발보다는 팀의 개선과 협업을 강조하는 방법론
- 경험적인 관리기법으로 정형화된 틀이 있는 것은 아니다.
- 매일 15분 정도의 회의를 포함한다.
- 개발주기는 1~4주 정도로 짧게 잡고 주기마다 실제 실행 가능한 결과를 제공한다.
Product Owner
- 제품이나 서비스에 대한 책임자
- 제품의 비전을 제시하고 고객의 대변인 역할을 수행
- Product Backlog를 제시하고 우선순위를 결정한다.
Scrum Master
- 팀을 보호하기 위해 일을 하는 사람
- 애자일 코치 역할을 수행
Project Backlog
- 제품의 요구사항 목록
- 제품의 요구사항을 우선순위에 따라 정렬한 목록
- 제품의 요구사항을 User Story로 작성한다.
- User Story는 복잡한 업무 명세가 아닌 사용자가 사용하는 관점에서의 가치를 중심으로 작성한다.
Sprint
- 반복 개발 주기
- 각 스프린트 목표에 도달하기 위한 작업 목록을 Sprint Backlog로 작성한다.
- 스프린트 백로그 : 스프린트 목표에 도달하기 위한 작업 목록
- 일일 스크럼: 매일 어제 한 일과 오늘 할 일 해결해야할 문제 등을 공유하는 회의
- 스프린트 리뷰: 스프린트 마지막날 개발 내용을 시연하고 검토
- 스프린트 회고: 스프린트 마지막날 좋았던 점, 개선 사항 등을 도출