○ 소프트웨어 생명 주기(Software Life Cycle)  
- 소프트 웨어 개발 단계와 방법을 이해하고 체계적으로 개발, 관리하기 위해서 소프트웨어의 개발 과정을 단계별로 구분해 놓은 것.
소프트웨어 개발 주기(Software Delopment Cycle) 라고도 함


1. 요구 분석 단계

- 개발할 소프트웨어의 기능과 제약조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의
- 개발해야 할 소프트웨어의 성격을 정확히 이해하고 개발 방법과 필요한 자원, 예산을 예측
- 요구 명세서 작성

2. 시스템 명세 단계
- 시스템이 무엇을 수행해야 하는가를 정의
- 소프트웨어의 입력 자료는 무엇이며, 입력 자료로 처리하는 내용과 그 결과 생성되는 출력이 무엇인지를 정의
- 시스템 기능 명세서 작성

3. 설계 단계
- 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정
-  구분
: 시스템 구조 설계(시스템을 구성하는 내부 프로그램이나 모듈간의 관계와 구조를 설계)
: 프로그램 설계(프로그램 내의 각 모듈에서의 처리 절차나 알고리즘 설계)
: 사용자 인터페이스 설계(시스템을 사용하는 사용자에게 보이는 부분에 대한 설계)
- 시스템 설계 방법
* 하향식 설계 방법(top-down design)
- 하위 단계로 갈수록 좀 더 구체적으로 세부 문제를 정의
- 최하위 단계로 분할된 작은 단위의 문제들을 각각 처리함으로써 전체 문제를 해결
   분할 정복(Divide and Conquer)이라 함
* 상향식 설계 방법(bottom-up design)
- 최하위 단계에 있는 작은 단위를 먼저 결정하고 이를 이용하여 상위 단계의 문제를 해결
- 하위 단계의 문제들에 대해 기존 알고리즘을 재사용할 수 있는 경우 개발기간과 비용 단축,신뢰성 확보
* 객체지향 설계 방법(object-oriented design)
- 작은 단위의 문제해결을 위한 자료와 처리방법을 묶어서 객체를 만들고, 이를 연결하여
재사용함

4. 구현 단계
- 설계 단계에서 논리적으로 결정한 문제 해결 방법(알고리즘)을 C, C++, JAVA 등의 프로그래밍 언어를 사용하여 실제로 프로그램을 작성하는 단계
- 프로그래밍 기법
* 구조화 프로그래밍
- 순차구조, 선택구조, 반복구조의 세 가지 제어구조로 표현
- 정확성 검증, 테스트, 유지보수가 쉬움
* 모듈러 프로그래밍
- 프로그램을 기능별로 나누어서 계층 관계를 갖도록 구성
- 모듈별로 개발, 테스트, 유지 보수, 재사용 가능

5. 테스트 단계
- 설계한대로 동작하는지 테스트하여 시스템의 완성도를 높임
- 단계별 시행
*단위 테스트(unit test)
- 시스템의 최소 구성요소가 되는 모듈들에 대해 개별적으로 시행
*통합 테스트(integration test)
- 최소의 모듈을 연결하여 작은 구성요소로 통합 테스트한 후, 점진적으로 다른 구성요소를
연결하면서 전체 시스템을 테스트
- 점진적 테스트 방법 : 하향식 테스트(최하위 단계까지 반복 시행하면서 테스트)
                             : 상향식 테스트(최상위 단계까지 반복 시행하면서 테스트)
*인수 테스트(acceptance test)
- 실제 자료를 사용하여 시스템을 테스트
- 방법 : 알파테스트(시스템을 사용할 환경에 설치한 후 사용자들이 직접 사용하며 테스트)
         : 베타테스트(제품 판매 전, 제품을 사용할 의사가 있는 잠정적 고객들이 실제로 사용
                           해 보도록 하여 개발자가 찾지 못한 오류를 찾아냄)

6. 유지 보수 단계
- 프로그램 오류 수정, 디자인 수정, 기능 추가, 교정 등의 모든 활동
- 유지 보수의 유형 : 수정형, 적응형, 완전형, 예방형

# 성공적인 소프트웨어란?
정확하고, 사용 환경의 변화에 대한 적응이 쉽고, 보안 기능이 있으며, 널리 사용되는 S/W



*출처 - C로 배우는 쉬운 자료구조(이지영 저, 한빛미디어)

Posted by 클로버,,