2. 소프트웨어 수명주기
계획 -> 분석 -> 설계 -> 구현 -> 시험,디버깅 -> 운영/유지보수
What: 계획, 분석
How: 설계, 구현, 시험, 디버깅, 운영/유지보수
(1) 소프트웨어의 생명주기 개요
- 소프트웨어 제작 공정 과정이다.
- 시스템 개발주기(System Development Life Cycle: SDLC)라 부른다
- 개발 단계에서 점차 변화해 가면서 나오는 소프트웨어 형상(configuration)을 기사화한다.
- 소프트웨어가 개발되기 위해 정의되고 사용이 완전히 끝나 폐기될때까지의 전 과정이다.
(2) 일반적인 소프트웨어 생명주기
1) 정의 단계
- 무엇(What)을 개발할 것인지를 명확히 밝히는 단계
- 시스템 정의와 프로젝트 계획 및 사용자 요구분석을 하는 단계
- 관리자와 사용자의 참여가 가장 높은 단계
2) 개발 단계
- 어떻게(How) 개발할 것인지에 대한 절차를 밝히는 단계
- 설계와 구현, 시험 단계
- 설계는 품질에 많은 영향을 미치는 단계
3) 지원 단계 (유지보수 단계)
- 수정 및 변경에 관한 문제를 다루는 단계
- 가장 오랜 시간이 들며 비용이 가장 많이 들어가는 단계
- 유지보수의 유형 : 완전, 수정, 적응, 예방 유지보수
(3) 소프트웨어 수명주기 모형(폭포수형 모형(선형순차모형, 전형적인 생명주기 모형 : Boehm, 1979))
1) 개요
- 소프트웨어의 개발 시 프로세스에 체계적인 원리를 도입할 수 있는 첫 방법론이다.
- 적용사례가 많고 널리 사용된 방법이다.
- 단계별 산출물이 명확하다.
- 각 단계의 결과가 확인된 후에 다음 단계로 진행하는 단계적, 순차적, 체계적인 접근 방식이다.
- 기존 시스템 보안에 좋다.
- 응용 분야가 단순하거나 내용을 잘 알고 있는 경우 적용한다.
비전문가가 사용할 시스템을 개발하는 데 적합하다.
2) 단계
[1] 계획단계
- 문제를 파악하고 시스템의 특성을 파악하여 비용과 기간을 예측한다.
- 개발의 타당성을 분석하고 전체 시스템이 갖추어야 할 기본기능과 성능 요건을 파악한다.
문제제기
예측(비용, 일정)
팀구성
[2] 요구 분석 단계
- 사용자 요구를 정확히 분석, 이해하는 과정으로 구현될 시스템의 기능이나 목표, 제약사항 등 정확히 파악한다.
- 소프트웨어의 기능, 성능, 신뢰도 등 목표 시스템의 품질을 파악하는 것이다.
요구사항 파악
요구사항 = 기능 -> 기능요구
비기능요구 -> 성능, ...등
[3] 설계 단계
- 요구사항을 하드웨어 또는 소프트웨어 시스템으로 분배하는 과정이다.
- 모든 시스템의 구조를 결장하게 되는데, 소프트웨어 설계는 프로그램의 데이터 구조, 소프트웨어 구조, 인터페이스 표현, 알고리즘의 세부 사항들에 초점을 맞춰 진행한다.
- 한 개 이상의 실행 가능한 프로그램으로 변환할 수 있는 형태로 소프트웨어의 기능을 표현한것이다.
기본설계(개략설계)
상세설계 -> 구조, 알고리즘
[4] 구현 단계
- 설계의 각 부분을 실제로 프로그래밍 언어를 이용하여 코드화하는 단계이다.
- 각 모듈(module) 단위로 코딩을 한다.
코딩
프로그래밍
[5]시험 단계
- 각 프로그램 단위의 내부적으로 이상 여부 및 입력에 따라 요구되는 결과로 작동하는지의 여부를 확인한다.
오류수정
[6] 운영(operation) 및 유지보수(maintenancce) 단계
- 사용자에게 전달되어 실제로 사용되며, 전달 이후에 발생하는 변경이 있다면 변경 요구를 수용하고 계속적인 유지를 해주어야 한다.
인수인계
3) 폭포수 모델의 문제점
- 단계별로 구현되지만, 병행되어 진행되거나 다시 거술러 올라 갈 수 없으며, 반복을 허용하지 않는다.
- 실제 프로젝트가 순차적이라기보다는 반복적인 성향을 가지므로 개발 모델로 적합하지 않은 경우가 많다. 그래서 실제 프로젝트 수행 시 이 모델의 연속적 단계를 따르는 경우가 드물다.
- 시초에 사용자들의 모든 요구사항들을 명확히 설명하는 것이 어렵다.
- 모든 분석은 프로젝트가 시작되기 전에 완성되어야 한다. 즉, 프로그램의 모든 요구사항을 초기에 완전히 파악하도록 요구하므로 개발 프로젝트의 불명확성을 미연에 방지할 수 없다.
- 개발 과정 중에 발생하는 새로운 요구나 경험을 설계에 반영하기 힘들다.