소프트웨어 개발 방법론
: 소프트웨어 개발을 효과적으로 진행하기 위한 계획, 관리, 실행 방법을 정의하는 접근 방식
1. 구조적 방법론 (Structured Development)
: 시스템을 기능별로 나누어 개발하고, 이를 통합하는 방법론
- 분할과 정복 접근 방식을 사용한다.
- 프로세스 중심의 하향식 방법론으로, Nassi-Shneiderman 차트를 사용하여 구조적 프로그래밍을 표현한다.
- 복잡한 조건을 시각적으로 명확히 식별할 수 있어 논리의 기술에 중점을 둔다.
2. 정보공학 방법론 (Information Engineering Development)
: 대형 정보 시스템을 체계적으로 개발하는 방법론
- 관리 절차와 작업 기법을 체계화하여 개발 주기를 활용한다.
- 대형 프로젝트를 수행하는 데 유용하며, 시스템의 개발 및 관리가 체계적이다.
3. 객체지향 방법론 (Object-Oriented Development)
: 시스템을 '객체'라는 기본 단위로 분석하고 설계하는 방법론
- 객체, 클래스, 메시지를 사용하여 시스템을 구성하며, 복잡한 현실 세계를 사람이 이해하는 방식으로 모델링한다.
- 높은 재사용성과 모듈화가 가능하며, 유지보수가 용이하다.
4. 컴포넌트 기반 방법론 (CBD; Component Based Development)
: 기존 소프트웨어 컴포넌트를 재사용하여 새로운 응용 프로그램을 개발하는 방법론
- 개발 기간 단축과 생산성 향상을 목표로 하며, 소프트웨어 재사용이 가능하다.
- 새로운 기능 추가가 쉬워 확장성 있는 개발이 가능하다.
5. 애자일 방법론 (Agile Development)
: 절차보다는 사람 중심으로, 변화에 유연하고 신속하게 적응하며 시스템을 개발하는 경량 개발 방법론
- 반복적인 개발 주기와 피드백을 통해 빠르게 고객의 요구 사항에 대응한다.
- 효율적이고, 변화에 빠르게 적응할 수 있는 특성이 있다.
6. 제품 계열 방법론 (Product Line Development)
: 특정 제품군에 적용할 공통 기능을 정의하여 개발하는 방법론
- 임베디드 소프트웨어 개발에 적합하며, 영역 공학과 응용 공학으로 나뉜다.
- 영역 공학: 영역 분석, 설계 및 핵심 자산 구현
- 응용 공학: 제품 요구 분석, 설계 및 제품 구현
- 제품군 간 공통된 기능을 재사용하여 개발 효율성을 높인다.
애자일(Agile; 기민한) 방법론
: 작업 계획을 짧은 단위로 세운 뒤 제품 개발 & 수정 사이클을 반복함으로써 유연하고도 신속하게 개발하는 방법론
- 주문 ➪ 디자인 ➪ 기능구현 ➪ 테스팅 ➪ 배포" x ∞
- 반복적이고 점진적인 개발을 통해 고객의 요구사항을 빠르게 반영하고, 변화에 유연하게 대응하는 것을 목표로 한다.
- 개발 과정을 여러 번의 작은 반복(스프린트)으로 나누어, 매 반복마다 기능을 추가하거나 개선한다.
- 요구사항이나 계획이 변경될 수 있음을 인정하고, 이를 적시에 반영한다.
- 각 반복마다 결과물을 만들어 고객에게 제공하고, 그에 대한 피드백을 받아 다음 작업에 반영한다.
애자일 방법론의 주요 요소
1. 스크럼 (Scrum)
: 작은 팀 단위로 작업을 나누고, 정해진 시간 동안 완성 가능한 작업 목표를 반복적으로 수행하는 방식
- 팀 협업을 중시하며, 일정한 주기(스프린트)로 작업을 계획하고 평가한다.
- 매일 정기적인 회의를 통해 진행 상황을 점검한다.
- 핵심 구성 요소
- 스프린트(Sprint): 짧은 개발 주기(보통 1~4주)
- 스프린트 계획 회의(Sprint Planning): 목표와 작업을 계획
- 데일리 스탠드업 미팅(Daily Standup): 매일 진행 상황 점검 및 장애 요인 논의
- 스프린트 리뷰(Sprint Review): 결과물을 검토하고 피드백 수집
- 스프린트 회고(Sprint Retrospective): 개선점 논의 및 다음 스프린트 준비
2. 스프린트 (Sprint)
: 스크럼에서 사용하는 짧은 개발 주기, 일정 기간 동안 구체적인 작업 목표를 달성하는 단위
- 일정 기간 동안 작업 목표가 고정된다.
- 작업 완료 후 피드백을 반영해 다음 스프린트를 개선한다.
3. 칸반 (Kanban)
: 작업의 흐름과 진행 상태를 시각적으로 관리하는 방법론
- 작업 항목을 보드에 시각적으로 표시(To Do, In Progress, Done)
- 작업의 병목 현상을 파악하고, 효율적으로 관리한다.
- 대기 중인 작업을 최소화 한다.(WIP 제한)
4. XP (Extreme Programming)
: 소프트웨어 품질을 극대화하고, 변화에 유연하게 대응하기 위한 개발 실천 중심의 방법론
- 페어 프로그래밍: 두 명의 개발자가 하나의 코드 작업을 함께 수행
- 테스트 중심 개발(TDD): 코드를 작성하기 전에 테스트를 먼저 설계
- 짧은 반복 주기: 작은 단위의 작업을 빠르게 완료
- 계속되는 고객 피드백: 고객과 밀접한 협업을 통해 요구 사항 반영
5. 번다운 차트 (Burndown Chart)
: 스프린트 기간 동안 남은 작업량을 시각적으로 보여주는 그래프
- 작업 진척 상황을 한 눈에 파악할 수 있다.
- 목표 달성 가능성을 예측하고, 일정 관리를 돕는다.
6. 제품 백로그 (Product Backlog)
: 프로젝트에서 구현할 모든 작업 항목(기능, 수정 사항 등)의 목록
- 우선순위가 높은 작업부터 처리한다.
- 지속적으로 갱신 및 개선한다.
7. 사용자 스토리 (User Story)
: 사용자의 관점에서 작성된 간단한 요구 사항 기술 방식
- "사용자로서, 나는 [무엇을 하고 싶다] 그래서 [어떤 가치를 얻는다]." 식으로 기술한다.
- ex) "사용자로서, 나는 이메일로 알림을 받고 싶다. 그래서 중요한 정보를 놓치지 않는다."
애자일 방법론의 등장 배경
- 애자일 방법론은 기존의 워터폴(Waterfall) 방식의 단점을 보완하기 위해 등장했다.
워터폴(Waterfall; 폭포수) 방법론
: 개발 과정에서 단계를 순차적으로 진행하는 전통적인 개발 방법론
- 주문 ➪ 디자인 ➪ 기능구현 ➪ 테스팅 ➪ 배포
- 각 단계가 완료된 후에야 다음 단계로 넘어갈 수 있기 때문에 시간과 비용의 낭비가 증가한다는 단점이 있다.
애자일 방법론 VS 워터폴 방법론
구분
|
애자일(Agile) 방법론
|
워터폴 방법론
|
요구사항관리
|
지속적인 요구사항 개발 및 변경수용
|
초기 요구사항 수집 및 엄격한 변경관리
|
계획 수립
|
두 단계 계획(찾은 계획 수립 & 갱신) 경험 기반 프로세스
|
상세한 계획 수립(Up-Front) 계획 기반 프로세스
|
설계
|
적시(Just-in-time)설계
|
상세한 사전(Up-Front) 설계
|
문서화
|
경량 프로세스 및 문서화보다 코드를 강조
|
중량 프로세스 및 상세한 문서화 강조
|
역할
|
전체 팀워크 중시
|
엄격한 역할 분리
|