2022. 3. 11. 21:34ㆍMajor`/소프트웨어 공학
폭포수 모델 (Waterfall Model)
- SW 개발 시, 단계적으로 개발하는 방법
- 반드시 앞 단계가 먼저 완료되어야 다음 단계로 넘어갈 수 있다
- 앞 단계가 완료 : 개발 + 해당 단계에 대한 철저한 검증
- 결과가 user의 의견과 다르거나, 결함이 있을 경우 바로 전 단계로 돌아가는 "Feedback"은 존재한다
- 프로젝트 진행과정에 대한 관리는 용이하지만, 최종적 목표가 개발 후반에 구체화되기 때문에, 문제가 후반에 발견될 가능성이 크다
폭포수 모델 구성
- 각 단계 종료 시, 철저한 검증 후에 다음 단계를 진행
- 전 단계에서 결함 발견 시, 해당 단계에 대한 피드백을 받고, 각 단계별 산출물을 명확하게 정의
- 기술적 위험성이 낮거나, 유사프로젝트 경험이 많은 경우에 사용
1) 계획 (Why)
- user의 needs를 파악해서 타당성을 조사
- 그리고, SW기능 + 제약조건(비용, 리스크, 기한, ...)을 명시하는 명세서를 작성한다
- "ROI"가 굉장히 중요하다
- ROI : Return of Investement :: 투자대비 돌아오는 이득
- 현재 기술 수준으로 개발이 가능한지 파악을 해야 한다
2) 요구 분석 (What)
- user의 needs를 이해하고, 해당 needs에 대한 정확한 기능/비기능적 요구 사항을 도출
- 무엇을 개발하고, 시스템이 갖춰야 하는 조건/능력을 "요구사항 명세서"에 명시한다
>> 오류가 발생했을 경우, 요구분석 단계에서 고쳐야 한다
Why? 나중에 고치면 고치는 비용이 굉장히 많이 발생한다
3) 설계 (How)
- 분석 모델을 가지고 이를 세분화함으로써 실제 구현될 수 있는 형태로 전환
- 요구사항을 기반으로 명확하고 조직적인 구조로 설계해야 한다
1. 아키텍쳐 설계
2. 인터페이스 설계
3. 프로그램 설계
>> 구조적 설계 / 객체지향 설계 방법으로 나뉜다
4) 구현
- 설계단계에서 만들어진 설게서를 통해서 프로그램을 작성/코딩/디버킹/테스트를 수행한다
- 구현 시 코딩 표준, 테스트 절차를 준수해서 작성해야 한다 & 코드의 정적 분석을 진행
5) 시험
- 프로그램에서 발생 가능한 오류를 발견/수정하는 단계이다
6) 운영 / 유지보수
- 시스템 사용 중 발생하는 여러 변경사항에 대해 적응하고, 변화에 대비하는 과정
- 여러 오류들을 수정하고, 추가 기능 등을 개발한다
수정 유지보수
- 오류를 수정
적응 유지보수
- 환경 변화에 대응
완전 유지보수
- 기능을 개선하고 성능을 향상
예방 유지보수
- 미래 유지 보수성을 향상
장점
- 굉장히 고전적인 방법이고, 적용 사례가 많다
- 전체 과정(프로세스)의 이해가 간단하고 쉽다
- 현재 단계에 대한 이해가 빠르고 쉽다
- 문서/산출물 관리, 적용이 쉽다
단점
- 병행 작업이 안된다
- 피드백에 대한 반복 단계가 어렵다
- 테스트 단계에 발견된 중요한 에러에 대한 대응이 힘들다
- 고객의 needs를 반영하기 어렵다 : Why? 1 cycle로 개발하기 때문
- "Time to Market"이 점차 빨라짐에 따라 요즘시대에 적절하지 않다
- 분석/설계 단계가 너무 많아서 구현이 지연될 수 있다
- 문서화 작업이 너무 많아서 필요없는 문서가 많이 생산될 수 있다
활용
- 해당 분야를 잘 알 경우
- 단순한 프로젝트
- 요구사항이 적은 프로그램
고려사항
- 관리는 쉬운데, 요구사항의 변경에 대한 대응력이 떨어진다
- 단계별로 개발을 진행하기 때문에, 요구사항 단계가 끝나고 그 이후에 요구사항을 변경할 경우 수정이 어렵다
- 기술 위험이 낮고, 유사 프로젝트 경험이 있고, 요구사항이 명확할 때 좋다