소프트웨어 생명 주기(Software Life Cycle)란?
소프트웨어를 체계적으로 개발하고, 관리하기 위해 개발 과정을 단계별로 나누어 구분한 것입니다.
일반적으로 소프트웨어 개발 과정은 아래와 같이 이루어집니다.
[요구사항 분석 -> 시스템 명세 -> 설계 -> 구현 -> 테스트 -> 유지보수]
소프트웨어 생명 주기는 여러가지 모형이 있는데 이 모형에 따라 개발 과정은 달라집니다.
예) 폭포수 모형, 프로토타입 모형, 나선형 모형, 애자일 모형
1. 요구사항 분석(Requirement Analysis)
- 개발할 소프트웨어의 기능과 제약조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의하는 단계입니다.
- 개발해야 할 소프트웨어의 성격을 정확히 이해하고 개발 방법과 필요한 자원과 예산을 예측해야 합니다.
- 기능(Function), 행위(Behavior), 데이터(Data) 측면에서 요구 사항을 체계적이고 구체적으로 분석하고, 실제 개발될 소프트웨어가 실행될 환경에 대해서도 분석, 검토를 수행합니다.
- 요구 명세서를 정확하게 작성해야 합니다.
2. 시스템 명세(System Specification)
- 시스템이 무엇을 수행해야 하는가를 정의하는 단계입니다.
- 시스템 기능 명세서를 작성하여 입력 데이터, 처리내용, 생산 결과가 무엇인지를 정의합니다.
- 시스템 기능 명세서를 작성해야 합니다.
3. 설계(Design)
- 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정하는 단계입니다.
- 개발할 소프트웨어의 전반적인 아키텍쳐를 구상하고, 구성 요소간 사용할 프로토콜을 정의하며, 사용자 인터페이스를 결정합니다. 또한 데이터베이스를 사용할 경우 데이터베이스 스키마를 설계합니다.
- 프로그램 구현을 위한 구체적인 자료구조와 알고리즘을 결정합니다.
- 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계로 구분할 수 있습니다.
- 시스템 구조 설계 : 시스템을 구성하는 내부 프로그램이나 모듈 간의 관계와 구조 설계
- 프로그램 설계 : 프로그램 내의 각 모듈에서의 처리 절차나 알고리즘을 설계
- 사용자 인터페이스 설계 : 사용자가 시스템을 사용하기 위해 보여지는 부분 설계
※ 설계 방식
* 하향식 설계(Top-down Design)
- 하위 단계로 갈수록 더 구체적으로 세부 문제를 정의합니다.
- 마지막으로 최하위 단계로 분할(divide)된 작은 단위의 문제들을 각각 처리함으로써 전체 문제를 해결(conquer)합니다.
* 상향식 설계(Bottom-up Design)
- 최하위 단계의 작은 단위를 먼저 해결하고, 이를 이용해 상위 단계의 문제를 해결합니다.
- 최하위 단위의 문제들에 대해 기존에 개발되어 있는 문제해결 도구를 재사용하는 경우 개발 기간과 비용 단축, 신뢰성 확보 가능합니다.
* 객체지향 설계(Object-oriented Design)
- 하위 단위의 문제해결 도구를 재사용한다는 점에서 상향식 설계와 유사합니다.
- 작은 단위의 문제에 대해 문제해결을 위한 데이터와 처리방법을 묶어서 객체를 만들고, 객체를 재사용합니다.
4. 구현(Implements)
- 설계 단계에서 논리적으로 결정한 문제해결 방법(알고리즘)을 특정 프로그래밍 언어를 사용하여 실제 프로그램을 작성하는 단계입니다.
- 프로그래밍 언어 선택, 기법, 스타일, 순서 등을 결정해야 합니다.
- 사용자의 요구, 프로그래머의 능력, 현재 사용중인 언어, 컴파일러의 가용성과 품질, 지원 가능한 개발도구, 언어의 호환성, 개발 경험 등을 고려하여 선택해야 합니다.
5. 테스트(Testing)
- 시스템의 최소 구성요소가 되는 모듈들에 대해 개별적으로 시행하여 요구사항 명세서에 기술된 기능을 제대로 수행하는지를 테스트합니다.
- 숨어있는 오류를 찾아내어 시스템 완성도를 높이는 단계입니다.
- 테스트 단계는 단위 테스트, 통합 테스트, 인수 테스트로 진행됩니다.
- 단위 테스트(Unit Test) : 구현된 개별 모듈에 대해 테스트를 시행하여 요구사항 명세서에 맞게 제대로 수행하는지를 테스트
- 통합 테스트(Integration Test) : 각 모듈들을 통합해서 제대로 동작하는지 여부를 시행하는 테스트
- 인수 테스트(Acceptance Test) : 시스템을 완성된 제품으로 보고 실제 데이터를 사용해 테스트
: 실질적으로 시스템이 사용되기 위해 마지막으로 시행되는 테스트(알파 테스트(관리자, 개발자), 베타 테스트(사용자))
6. 유지 보수(Maintenance)
- 시스템이 인수되고, 설치된 후 일어나는 모든 활동을 의미합니다.
- 프로그램 오류 수정, 시스템 디자인 수정, 새로운 요구사항 추가, 시스템 사용환경 변화에 대한 교정 등
[참고 사이트] 참고 사이트(1), 참고 사이트(2), 참고 사이트(3)
'개발' 카테고리의 다른 글
[개발] 기능 정의서 개요 (0) | 2021.05.10 |
---|---|
[개발] Use Case 다이어그램 이란?? (0) | 2021.04.22 |
UML(Unified Modeling Language)다이어그램 이란?? (0) | 2021.04.15 |
MVC패턴이란? (0) | 2021.04.07 |