SWEBOK V4.0a에 따르면 소프트웨어 개발 생명주기(software development life cycle, SDLC)는 소프트웨어를 처음 개발하는 과정이다. 소프트웨어 제품 생명주기의 운용, 유지보수, 폐기 활동은 SDLC보다 훨씬 긴 기간에 걸치고, SDLC의 활동보다 더 많은 노력과 자원을 쓴다.[1]
ISO/IEC/IEEE 24765:2017은 소프트웨어 개발 주기(software development cycle)를, 소프트웨어 제품을 개발하기로 정한 때 시작해 소프트웨어를 인도할 때 끝나는 기간으로 정의한다. 이 기간에는 보통 요구, 설계, 구현, 테스트 단계와 때로 설치·점검 단계가 들고, 개발 접근 방식에 따라 단계가 겹치거나 반복된다. 이 용어가 개발자가 더는 개선하지 않을 때까지의 기간이나 소프트웨어 생명주기 전체를 뜻하기도 한다고 덧붙인다.[2]
이 표준은 소프트웨어 생명주기를 사용자나 고객의 필요에서 시작해 제품을 더는 쓰지 않거나 쓸 수 없게 될 때 끝나는 주기로 정의한다.[2] SWEBOK V4.0a에 따르면 소프트웨어 공학에서 개발은 생명주기의 한 단계로, 이해관계자의 필요에 맞춰 소프트웨어 시스템을 만들거나 바꾸는 단계다.[1]
단계와 마일스톤
ISO/IEC/IEEE 12207:2026은 생명주기의 단계(stage)가 주요 진척·달성 마일스톤과 관련되고, 단계끼리 흔히 겹친다고 둔다.[3] 생명주기 모델과 프로세스의 관계는 소프트웨어 프로세스에서 다룬다.
ISO/IEC/IEEE 24765:2017은 마일스톤을 진척을 재는 데 쓰는 예정된 사건으로 정의하고, 큰 마일스톤의 예로 인수자 승인, 명세의 기준선 설정, 시스템 통합 완료, 제품 인도를 든다.[2] SWEBOK V4.0a에 따르면 진척은 주요 프로젝트 마일스톤을 이루었을 때나, 제품 증분을 내는 반복 개발 주기를 마쳤을 때 평가한다.[1]
예측형, 점진, 진화형 생명주기
예측형 생명주기는 범위, 일정, 비용을 생명주기 초기에 정하고, 구현할 요구가 크게 바뀌지 않는 닫힌 집합이라고 가정한다. 매우 예측적인 SDLC는 개발 프로세스를 선형 순서로 수행하고, 앞 단계는 필요할 때만 고친다. 폭포수 모델을 적용한 프로젝트는 몇 달이나 몇 년 일한 뒤 프로젝트 끝에 소프트웨어를 한 번 인도했다.[1]
점진 생명주기는 일련의 반복으로 기능을 차례로 더해 가고, 마지막 반복을 마쳐야 인도물이 완성으로 볼 만한 기능을 갖춘다. 다른 개발 단계를 시작하기 전에 요구를 정해 닫는 예측형으로 운영할 수도 있다.[1] ISO/IEC/IEEE 24765:2017은 점진 개발(incremental development)을, 요구 정의, 설계, 구현, 테스트를 차례로가 아니라 겹치고 반복하며 수행해 소프트웨어 제품 전체를 점진적으로 완성하는 개발 기법으로 정의한다.[2]
SWEBOK V4.0a에 따르면 진화형 생명주기에서는 제품이나 서비스가 수명 동안 바뀐다. 요구와 고객의 필요가 바뀌어서일 수도 있고, 요구를 완결된 한 묶음이 아니라 여러 반복에 걸쳐 제품에 넣어서일 수도 있다.[1]
Prototyping
ISO/IEC/IEEE 24765:2017은 prototyping을, 하드웨어나 소프트웨어의 일부나 전체를 예비판으로 먼저 만들어 사용자 피드백을 받거나, 실현 가능성을 가리거나, 타이밍 같은 문제를 조사하는 개발 기법으로 정의한다. 이 표준에 따르면 prototype은 복잡한 사용자 인터페이스를 개선하고 명세하거나, 실현 가능성을 연구하거나, 요구를 찾아내는 데 쓸 사용자 피드백을 얻으려고 쓴다. 개발 초기에 prototype을 만들어 피드백과 분석을 일찍 얻는 데 중점을 둔 prototyping은 rapid prototyping으로 정의한다.[2]
SWEBOK V4.0a에 따르면 prototyping은 대개 미완성이거나 기능을 최소한만 갖춘 판을 만들어 새 기능을 시험하거나 요구와 사용자 인터페이스에 대한 피드백을 받는 활동이고, 가장 덜 이해된 부분부터 이해하려고 이 방법을 고른다. prototype은 버릴 코드나 종이 산출물, 동작하는 설계를 발전시킨 것, 실행 가능한 명세로 만들 수 있고, 대개 큰 재작업이나 리팩터링 없이는 최종 제품이 되지 않는다. prototype은 대개 완성 제품에 기대하는 아키텍처, 성능 같은 품질 특성을 모두 갖추어 만들지 않는다.[1]