본문 바로가기
CS

SDLC (Software Development Life Cycle) : 소프트웨어 생명 주기 | SDLC Model | 소프트웨어 개발 방법론

by memeseo 2022. 6. 20.

- SDLC?
: 소프트웨어 생명 주기(수명 주기)는 개발과 유지보수 등에 필요한 작업들을 체계적으로 정리한 개발 방법론의 바탕으로, 개발을 위한 정의, 운용, 유지보수 등의 과정을 단계별로 나눈것이다.

- SDLC 모델

1. 폭포수 모델 (Waterfall Model)
2. 프로토타이핑 모델 (Prototyping Model)
3. 나선형 모델 (Spiral Model)
4. 반복적 모델


1. 폭포수 모델

: 폭포수 모델의 특징은 이전 단계로 돌아갈 수 없다는 전제를 깔아두고 시작한다. 그러므로 각 단계 마다 결과를 검토하고 승인하는 과정을 확실하게 마쳐야 한다.

(1) 가장 오래되고 폭 넓게 사용되는 전통적인 모델 (= 고전적 생명 주기 모형)
(2) 한 단계가 마무리 되어야 다음 단계로 넘어가는 '선형 순차적' 모형
(3) 메뉴얼 작성 필요
(4) 각 단계를 마친 후 다음 단계를 위한 결과물이 명확하게 나와야 함.
(5) 두 개 이상의 과정을 병행하여 수행하지 않는다.

*순서

타당성 검토 > 계획 > 요구 분석 > 설계 > 구현 > 시험 > 유지 보수



2. 프로토타이핑 모델

: 고객이 중요시 여기는 기능을 우선으로 간단한 시제품을 만들고 이 것을 바탕으로 고객의 의견을 듣고 개선하고 보완해 나가는 모델. 주로 고객의 요구사항이 모호하거나, 변경이 가능성이 많은 경우 사용한다.

(1) 폭포수 모델의 단점을 보완하기 위해 만들어진 모델. (개발 완료 후 오류가 발견되는 단점)
(2) 사용자 중심의 프로세스 모델
(3) 고객의 요구사항 상세히 파악 가능
(4) 프로토타입을 통해 고객과 원활한 의사소통 진행 가능.
(5) 폭포수 모델 vs 프로토타입핑 모델 비교

* 순서

요구 수집 > 빠른 설계 > 프로토타입 구축 > 고객 평가 > 조정 > 구현



3. 나선형 모델

: 폭포수 모델과 프로토타이핑 모델의 장점을 더하고 위험 분석 기능을 추가한 모델. 시스템 개발 시 위험을 최소화 하기 위해 점진적으로 완벽한 시스템을 개발해 나간다.

(1) 리스크 최소화를 위해 '위험 분석' 단계가 존재.
(2) 점진적으로 단계를 '반복' 수행해 나간다.
(3) 위험 부담이 큰 '대형 시스템' 구축에 적합.

*순서

목표 설정 > 위험 분석 > 구현 및 테스트 > 고객평가 > 다음 단계 수립



3. 반복적 모델

반복적 모델은 크게 증분형(Incremental)진화형(Evloutional) 모델 두 가지로 나뉜다.

3-1. 증분형 모델 (Incremental Model) - 폭포수 모델의 변형된 형태

: 한 시스템을 기능별 분리해 여러 서브 시스템으로 쪼갠다. 쪼개진 서브 시스템을 구현하고 릴리즈하고 또 다른 서브 시스템을 구현 하고 릴리즈 해나간다. 이를 증분형 모델이라고 한다.

3-2. 진화형 모델 (Evolutional Model) - 프로토타이핑 모델과 유사

: 하나의 프로토타입의 시스템을 만든 후 기능을 덧붙여 나가는 방식이다. 작은 눈덩이를 굴려서 하나의 커다란 눈덩이를 만든다고 이해하면 쉽다.



- 소프트웨어 개발 방법론

1. 구조적 방법론
2. 정보공학 방법론
3. 객체지향 방법론
4. 컴포넌트 기반 방법론
5. 애자일 방법론


1. 1970년대 - 구조적 방법론 (대표 : 폭포수 모델)
: 소프트웨어 모듈화의 활성화를 시작으로 기능적인 분할을 시도하여 Top-down Programming을 수행하는 개발방법

(1) 특징
- 구조적인 프로그래밍 작성
- 정형화된 분석 절차
- 쉽게 이해할 수 있고, 검증할 수 있는 프로그램 코드 생성 목적
- 모듈 중심
- 하향식 기능 분해
- 프로세스 중심
- 재사용성 및 유지보수성 낮음

(2) 절차

타당성 검토 > 계획 > 요구사항 > 설계 > 구현 > 시험 > 운용 및 유지 보수


2. 1980년대 - 정보공학 방법론 (대표 : 프로토타이핑 모델)
: 데이터 중심의 80년대 자료구조 중심 방법론. 구조적 방법론 극복.

(1) 특징
- 기업 중심 계획
- 생명주기를 이용해 대형 프로젝트 수행
- 데이터 중심
- 자료 구조 중심
- 데이터와 프로세스가 균형적
- 기능적 설계를 벗어나지 못함
- 재사용성 및 유지보수성 낮음

(2) 절차

수직적 구조 방법론 : 정보 전략 계획 > 업무 영역 분석 > 업무 시스템 설계 > 기술 설계
수평적 구조 방법론 : 데이터 > 업무 활동 > 상호 작용


3. 1990년대 - 객체지향 방법론 (대표 : 반복적 개발)
: 소프트웨어 생명주기에 객체지향 개념 접목해 일관된 모델로 개발. 분석, 설계, 구현의 전 과정을 객체 중심으로 진행.

(1) 특징
- 객체지향 기법을 활용해 시스템 구축
- 객체 중심 (캡슐화, 추상화 기술 필요)
- 자연스럽고 유연하며 재사용 용이
- 전문가 부족

(2) 절차

개발 준비 > 분석 > 설계 > 구현 > 시험 > 전개 > 인도


4. 2000년대 - 컴포넌트 기반 방법론 (a.k.a CBD 개발 방법론)
: 개발된 S/W 컴포넌트를 조립, 시스템을 개발하여 객체지향의 단점인 S/W 재사용성을 극대화한 개발 방법론이다. 컴포넌트는 인터페이스로 접근 가능하고 독립적인 기능을 수행하는 모듈로써 교체가 가능한 소프트웨어 부품이다.


(1) 특징
- 컴포넌트를 조립해 애플리케이션을 만든다.
- 공공 행정 정보 시스템 개발에 많이 활용.
- 재사용성, 생산성, 품질이 높음
- 비용 저렴, 위기 개선
- 테스트 호나경 부족, 컴포넌트 평가 및 인증 환경 미흡

(2) 절차

개발 준비 > 분석 > 설계 > 구현 > 시험 > 전개 > 인도


5. 애자일 방법론
: 애자일 방법론은 기존 방법론들이 너무 절차를 중시한 나머지 변화에 대응하기 어려웠던 단점을 개선하기 위해 나왔다. 애자일 방법론은 '절차'보다는 '사람'을, '문서'보다는 '작동하는 소프트웨어'를, 미리 철저하게 '계획'하기 보다는 '변화'에 민첩한 대응을, '계약'과 '협상'에 얽매이기 보다는 '고객과의 협력'을 중요하게 생각한다.

(1) 특징
- 반복적인 개발을 통한 잦은 출시를 목표.
- 기본 모형 (폭포수, 프로토타이핑, 나선형 모델)의 문제점 보안
- 점증적 개발
- 출시 주기를 짧게해 다양한 요구 변화에 대응
- 가볍고 실용적인 소프트웨어 개발 방법론

(2) 원칙
- 소통 : 차트, 정보 공유, 회의
- 협력 : 협조, 고객과 대화로 문제 해결
- 적응 : 변화 수용, 융통성
- 지속 : 검증 반복 , 점증 개발
- 가치 전달 : 위험도 높은 작업 우선, 비용 감소
- 피드백 : 자주 출시, 고객 평가

(3) 절차

요구사항 > 설계 > 구현 > 시험


5-1. 애자일 방법론의 종류

1. 익스트림 프로그래밍 (XP, Extreme Programming)
2. 스크럼 (Scrum)
3. 린 (Lean)

5-1-1. 익스트림 프로그래밍 (XP)
: 애자일 모형으로 개발하는 대표적인 방법이며, 1~3주의 반복(Iteration) 주기를 갖는다.

(1) 특징
- 문서화를 강조하지 않고 변경을 추구하며, 개발 초기부터 검사를 병행한다.
- 의사소통의 개선과 즉각적 피드백에 의한 단순 코딩으로 품질을 높힌다.

(2) XP의 5가지 가치 : "용단의피존" !!!!!!
- 용기
- 단순함
- 의사소통
- 피드백
- 존경

(3) XP의 12가지 기본 원리
1. 짝 프로그래밍 (Pair Programming) : 다른 사람과 페어로 개발하여 공동 책임을 지님
2. 공동 코드 소유 (Collective Ownership) : 시스템에 있는 코드는 누구나 언제든 수정 가능
3. 지속적인 통합 (CI; Continuos Integration) : 여러 번 소프트웨어를 통합하고 빌드해야 함
4. 계획 세우기 (Planning Process) : 고객이 원하는 가치를 정의하고, 개발에 필요한 건 무엇이며, 어떤 곳에서 지연이 될 수 있는지 알려줘야 함
5. 작은 릴리즈 (Small Release) : 작은 시스템을 먼저 만들고, 짧은 단위로 업데이트
6. 메타포어 (Metaphor) : 공통 이름 체계를 통해 의사소통을 원활히
7. 간단한 디자인 (Simple Design) : 요구사항에 적합한 단순한 시스템을 설계
8. 테스트 기반 개발 (TDD; Test Drive Develop) : 테스트를 먼저 수행하고, 통과할 수 있는 코드를 작성
9. 리팩토링 (Refactoring) : 기능을 바꾸지 않으면서 중복제거, 단순화 등을 위해 코드를 재구성
10. 40시간 작업 (40-Hour Work) : 피곤으로 인한 실수가 없도록 주 40시간만 일합시다
11. 고객 상주 (On Site Customer) : 개발자들의 질문에 즉각 대답해줄 수 있는 고객이 풀타임 상주해야 함
12. 코드 표준 (Coding Standard) : 코딩 표준을 두고 효과적으로 개발

5-1-2. 스크럼
: 매일 정해진 시간, 정해진 장소에서 단기간 개발을 목표로 하는 애자일 방법론 중 하나이다.

(1) 특징
- 상호 점진적 개발 방법론
- 솔루션에 포함할 기능 및 개선점에 대한 우선 순위를 부여한다.
- 개발 주기는 30일 정도로 조절하고 개발 주기마다 실제 동작할 수 있는 결과를 제공하라.
- 개발 주기마다 적용할 기능이나 개선에 대한 목록을 제공하라.
- 날마다 15분 정도 회의를 가져라. 항상 팀 단위로 생각하라.
- 원활한 의사소통을 위하여, 구분 없는 열린 공간을 유지하라.

(2) 스크럼 용어
- 백로그 : 제품에 대한 요구사항
- 스프린트 : 짧은 기간 내 반복적으로 개발.
- 데일리(스크럼) 미팅 : 매일 To-Do List 계획수립. 번다운 차트 작성
- 스크럼 마스터 : 프로젝트 리더
- 스프린트 회고 : 각자 반성하고 개선점 확인
- 번 다운 차트 : 남아있는 백로그 대비 시간을 시각적으로 표현 (백로그를 수직, 시간을 수평)

5-1-3. 린
: 낭비 요소를 제거해 품질을 향상시키는 애자일 방법론.

(1) 린의 7가지 원칙 *낭품지확인사전!!!!!
1. 낭비제거
2. 품질 내재화
3. 지식 창출
4. 늦은 확정
5. 빠른 인도
6. 사람 존중
7. 전체 최적화

6. 2010년대 - 제품 계열 방법론

(1) 특징
- 특정 제품에 적용하고 싶은 공통된 기능 정의 개발
- 임베디드 소프트웨어(제품의 특정 기능에 맞게 특화되어서 제품 자체에 포함된 소프트웨어) 작성시 유용