ㅡ 소프트웨어 개발 프로세스 주요 모델 6가지
- 폭포수 모델 (Waterfall Model)
- 프로토타입 모델 (Prototype Model)
- 점증적 모델 (Incremental Model)
- 나선형 모델 (Spiral Model)
- 진화적 모델 (Evolutionary Model)
- 애자일 모델 (Ajile Model)
각 프로젝트는 적절한 계획을 가지고 진행되어야 비용을 최소화할 수 있다.
주요 개발 프로세스인 위 6가지 모델을 핵심 정리한다.
(꼭 위 6가지로 대표되는 것은 아니고, 나는 교수님께서 이렇게 정리해주었다)
어느 상황에 어느 모델이 적합한지, 각 모델의 특징과 장단점은 무엇인지 정리한다.
ㅡ 폭포수 모델 (Waterfall Model)
keyword : 엄근진
적합한 상황
- 국방, 원자력 등 대규모 시스템 공학 프로젝트에 적합하다.
- 요구사항이 명확하여 요구사항 변경이 잘 이루어지지 않는 경우에 적합하다.
- 자원이 한정 & 제약사항 있을 경우
- 위험성이 적고 기존 사례가 많은 경우
특징
- 단계가 선형적, 순차적이다.
- 단계간 중복이나 상호작용이 없다.
- 각 단계의 결과는 다음단계 시작 전 점검한다.
- 현재 단계의 결과는 바로 이전 단계로 피드백한다.
ㄴ 결과물 정의가 중요하다.
단점
- 진행 중 변경을 수용하기 어렵다.
- 단계 전환에 큰 노력이 든다.
ㄴ진행이 지연되기 십상이다.
- 많은 문서작업을 제대로 해야 한다.
- 재사용을 기대하기 어렵다.
ㅡ 프로토타입 모델 (Prototype Model)
keyword : 일단 대충 파악
적합한 상황
- 요구사항이 불명확하거나 지속적 검증이 필요한 경우 적절하다.
- 또는 프로젝트 수행 자체에 대한 결정이 어려울때 타당성 검증용도로 쓴다.
특징
- 폭포수 모델의 엄격함을 개선한 모델이다.
폭포수 모델이 절차를 따르며 완벽히 단계를 수행하는 것과는 달리,
프로토타입 모델은 '개선해감'을 목표로 한다.
- 시험적이며 빠르게 요구사항을 이해한다.
분류
- 실험적 프로토타입 (Throwaway, Experimental)
: 일단 요구사항을 프로토타이핑하여 개발의 타당성을 검증한다.
: 실제 개발시에는 이 실험적인 프로토타입은 폐기한다. 안쓴다. 검증용이다.
- 진화적 프로토타입 (Evolutionary)
: 프로토타입을 (폐기하지 않고) 발전시켜간다.
: 대표 예) 나선형 모델
ㅡ 점증적 모델 (Incremental Model)
keyword : 여러번 릴리즈, 빠른 출시
적합한 상황
- 시장에 빠르게 출시해야 할 경우에 적합하다. 이를 위해 여러 번 릴리즈한다.
- 소프트웨어 외의 여러 요소(하드웨어, UI)를 고려해야 할 때도 적합하다.
- 당연히 요구사항 확정이 어려운 경우에도 좋다.
특징
- 개발 사이클이 짧다.
ㄴ시장에 빠르게 출시하기 위해 여러번 릴리즈한다.
ㄴ각 릴리즈마다 개발의 초점을 집중할 수 있다.
릴리즈의 방법
- 새로운 기능을 추가하여 릴리즈 (점증적으로 릴리즈)
- 기존 기능의 완성도를 높여 릴리즈 (반복적으로 릴리즈)
ㅡ 나선형 모델 (Spiral Model)
keyword : 위험분석
적합한 상황
- 위험부담이 큰 대규모 시스템 개발에 적합하다.
아래와 같이 리스크를 줄이는 매커니즘을 가지기 때문이다.
나선을 돌 때마다 실패위험을 줄인다.
특징
- 반복적으로 개발과 테스트한다.
- 점증적으로 릴리즈하며 위험을 최소화한다.
- 위험 분석 단계가 중요하다.
진화 단계
- 계획 수립 : 목표, 기능 선택, 제약조건 결정
- 위험 분석 : 기능선택의 우선순위, 위험요소의 분석
- 개발
- 평가
단점 (유의점)
- 프로젝트 관리와 위험분석이 특히 중요하다.
ㅡ 진화적 모델 (Evolutionary Model)
keyword : 요구사항 분석 반복
적합한 상황
- 초기에 사용자의 요구사항을 파악하기 힘들거나 구현이 어려운 경우에 적합하다.
특징
- 진화함에 따라 요구사항이 뚜렷해진다.
- 요구사항 분석을 계속 반복하며 완성도를 높여나간다.
- UP(Unified Process)의 개발 프로세스를 가지며, UP를 여러번 반복하며 진화해간다.
UP는 Inception, Elaboration, Construction, Transition의 4단계로 이루어진다.
(도입, 정련, 구현, 전환(릴리즈))
유의점은, 위 4단계에 따라 하는 일이 뚜렷하게 구분되지 않는다는 것이다.
즉, 설계-구현-테스트-설치-운영 등의 과정이 전 단계에 걸쳐 자유롭게 일어난다.
점증적 모델과 진화적 모델의 차이가 뭐냐?
- 점증적 모델 : "설계말고 릴리즈만 반복함"
[요구사항수집-명세-계획]이 먼저 이루어진 뒤에, 그 계획 가지고 release1, release2, .. 를 만들어나간다. 즉 요구사항의 수집은 각 release에서 하는 것이 아니라 이미 완료된 상태에서 release를 여러번 해나간다.
- 진화적 모델 : "설계~릴리즈 자체를 반복하며 진화 (즉 UP를 여러번 반복하며 진화)"
[요구사항 분석]을 여러번 시행하도록 되어있다.
UP가 반복되는데, 각 UP에서 요구사항 분석을 매번 시행 가능하다.
recall) UP는 4단계로 이루어져있고, 그 4단계 하에 병렬적으로 개발프로세스(설계~릴리즈)가 진행된다
ㅡ 애자일 (Agile)
keyword : 빠른 개발
적합한 상황
- 비교적 소규모 프로젝트
- 빠른 개발 착수
- 단기간 내 요구사항 만족
특징
- 짧고 사소한 릴리즈를 자주 반복함을 추구
- 그래서 실사용자의 피드백을 자주 받게 된다.
- 설계에 대한 결정을 미루고, 더 많은 지식이 쌓였을 때 설계를 개선한다.
- 중간에 설계가 변경되어도 수용이 쉽다.
- 문서는 최소화하고, 코드 자체가 문서인 격이다.
- 형식적인 문서보다 지속적인 대화를 추구
애자일 프로세스의 방법은 크게 두가지로 분류한다
1. 익스트림 프로그래밍
2. 스크럼 방법론
아래서 정리한다.
① 익스트림 프로그래밍
- 최초의, 극단적인 애자일 프로세스
- 릴리즈 간격이 2~4주로 짧다.
- 메타포를 사용한다.
(팀원 공동이 동일한 개념을 공유하고 이해하는 것이 중요하다. 형식&정형화된 것이 중요한 것이 아니다.)
- TDD
- 리팩토링 : 재구성하고 설계를 개선해나간다. (동작 변경 이야기가 X)
- 팀에 실사용자(고객)이 참여하여 상시 의문점을 받는다.
- 코딩 표준이 중요하다. 애자일은 설계가 약하기 때문에 표준을 통일해야 한다.
- 6단계로 이루어진다. Planning, Analysis, Design, Excecution, Warpping, Closure
② 스크럼 방법론
- 럭비에서 스크럼을 짜듯 협업하는 방식으로 애자일 방법론을 적용한다.
- 단결과 팀워크를 중요시한다.
- 구성요소는 다음과 같다
: 백로그(할 일 목록)
: 스프린트(Iteration 의미)
: (매일 잠깐) 스크럼 회의
: (스프린트 종료 후 산출물을) 리뷰
: (방법론 자체에 대한) 스프린트 회고
1. 백로그(할 일 목록)를 만든다
2. sprint 팀이 플래닝미팅을 하며, 해당 sprint의 백로그가 주어진다.
4. 1~4주에 걸쳐 backlog에 대한 sprint 활동 (개발)을 진행한다.
-> 이때, 매일매일 회의한다 (scrum meeting)
5. 스프린트 종료 후에는 산출물을 리뷰한다.
[소프트웨어공학]
여기까지 소프트웨어 개발 프로세스 6가지를 간단히 정리했다.
'기타' 카테고리의 다른 글
[소프트웨어공학] 클래스 모델링의 방법과 절차 (0) | 2022.10.23 |
---|---|
[소프트웨어공학] UML 다이어그램 중 클래스 다이어그램 이해하기 (0) | 2022.10.23 |
모니터나 hdmi 없이 라즈베리파이 화면 원격으로 보기 | 그리고 wifi 자동 설정 (28) | 2022.05.16 |
라즈베리파이 hdmi 모니터 연결 실패 | 해결과 아직 난제인 것... (0) | 2022.05.12 |
[Java] BOJ 2469 | 사다리타기 (0) | 2022.04.05 |