Study_Note

software life cycle model 본문

QA_study

software life cycle model

12월7일생 2023. 12. 6. 17:00
728x90

 

 

 

Software 생명 주기 모델

 

다양한 소프트웨어들은 고유한 설계 기법과 개발 과정을 갖고 있지만, 대부분은 공통적인 소프트웨어 개발 수명주기(SDLC, Software Development Life Cycle)를 따르고 있습니다. 이러한 SDLC에는 여러 모델이 있지만, 주로 사용되는 두 가지 모델인 폭포수 모델(Waterfall Model)과 V-모델(V-Model)가 있습니다.

1. 폭포수 모델 (Waterfall Model)
   - 특징 : 선형적인 접근 방식으로, 각 단계가 이전 단계의 결과물을 기반으로 진행됩니다.
   [단계] 
     1. 요구 사항 분석
     2. 설계
     3. 구현
     4. 테스트
     5. 유지보수
   [장점]  간단하고 이해하기 쉬우며 순차적 진행이 가능합니다.
   [단점] 요구 사항 변경이 어렵고, 최종 제품이 나올 때까지 피드백이 부족합니다.

2. V-모델 (V-Model)
   - [특징] 폭포수 모델을 기반으로 하며, 각 개발 단계와 대응하는 검증/검토 단계가 쌍을 이룹니다.
   - [단계]
     1. 요구 사항 분석
        - ↓
     2. 시스템 설계
        - ↓
     3. 소프트웨어 설계
        - ↓
     4. 코딩
        - ↓
     5. 테스트
   - [장점] 폭포수 모델의 단점을 개선하고 검증 단계를 강조하여 품질을 높일 수 있습니다.
   - [단점] 프로젝트 초기에 명확한 요구 사항이 필요하며, 유연성이 부족할 수 있습니다.

이러한 모델들은 프로젝트의 특성과 요구 사항에 따라 선택되며, 최근에는 점진적이고 반복적인 개발 방법들이 더욱 인기를 얻고 있습니다.

 

 

소프트웨어 개발 수명주기란?

소프트웨어 개발 수명주기(SDLC, Software Development Life Cycle)는 소프트웨어를 계획, 개발, 유지보수 등의 단계를 포함하는 전체 과정을 설명하는 프로세스 모델입니다. 이는 소프트웨어를 개발하고 유지하는 데 필요한 활동과 작업의 순서를 결정하는데 사용됩니다.

SDLC는 주로 다음과 같은 주요 단계로 구성됩니다:

1. 요구 사항 분석 (Requirements Analysis)
   - 시스템이나 소프트웨어에 대한 요구 사항을 수집, 분석, 문서화합니다.
   - 이 단계에서는 사용자와 개발자 간에 의사소통이 중요하며, 프로젝트의 범위와 목표가 정의됩니다.

2. 설계 (Design)
   - 이전 단계에서 수집된 요구 사항을 기반으로 시스템이나 소프트웨어의 구조와 구조를 계획합니다.
   - 아키텍처, 사용자 인터페이스, 데이터베이스 구조 등이 설계됩니다.

3. 구현 (Implementation)
   - 설계된 구조를 기반으로 코드를 작성하고 프로그램을 개발합니다.
   - 이 단계에서는 프로그래밍 언어 및 개발 도구를 사용하여 소프트웨어를 실제로 만듭니다.

4. 테스트 (Testing)
   - 개발된 소프트웨어를 테스트하여 요구 사항을 충족시키고 오류를 찾아내고 수정합니다.
   - 테스트는 다양한 수준에서 수행될 수 있으며, 사용자가 기대한 대로 동작하는지 확인됩니다.

5. 유지보수 (Maintenance)
   - 소프트웨어가 사용되면서 발생하는 버그 수정, 기능 추가, 성능 향상 등의 작업을 수행합니다.
   - 소프트웨어의 수명 주기 중에 필요한 지속적인 관리와 개선이 이루어집니다.

 

SDLC는 프로젝트 관리 및 품질 보증을 위해 사용되며, 소프트웨어의 생명 주기 동안의 각 단계에서 특정 작업과 활동을 수행하는 데 도움을 줍니다. 다양한 SDLC 모델이 존재하며, 프로젝트의 특성과 요구에 따라 적절한 모델이 선택됩니다.

 

대부분의 개발자들은 소프트웨어 개발 수명주기를 기반으로 프로그래밍을 합니다. 이는 프로젝트를 계획하고 진행하기 위한 구조적인 방법을 제공합니다. 그러나 광범위한 개발 프로세스는 프로그램이 복잡해지기 쉽기 때문에, 이를 "분할해서 정복"하는 원칙을 적용하는 것이 중요합니다.

"분할해서 정복"은 복잡한 문제를 더 작은 부분으로 나누어 처리함으로써 해결하는 전략입니다. 이 접근 방식은 다양한 이점을 제공합니다:

  1. 문제 해결의 용이성: 큰 문제를 작은 부분으로 나누어 해결하면 각 부분이 더 간단하고 관리하기 쉬운 문제로 전환됩니다.
  2. 진척도 측정 및 관리: 작은 부분에 대한 진척도를 추적하고 측정하기 쉽습니다. 이로써 프로젝트의 전체 진행 상황을 파악하는 데 용이합니다.
  3. 동시 개발 가능: 작은 모듈들은 병렬적으로 개발될 수 있어 여러 팀이 동시에 작업할 수 있습니다.
  4. 유지보수 용이성: 코드가 모듈화되면 유지보수가 훨씬 용이하며, 특정 모듈의 수정이 전체 시스템에 미치는 영향이 제한됩니다.

이러한 이유로 현대 개발에서는 대부분의 경우 소프트웨어 개발을 수명주기에 기반으로 하면서도, "분할해서 정복"의 원칙을 적용하여 프로젝트를 보다 효율적으로 관리하고 진행합니다.

 

소프트웨어 개발 수명주기 모델(SDLC Model)은 앞서 말씀 드린 소프트웨어 개발 수명주기를 기반으로 만들어졌으며, 각 단계마다 목적이나 해야하는 일이 다 르고. 단계별로 작업 내용을 문서화시켜 관리하는 것이 특징입니다.

 

소프트웨어 개발 수명주기 모델(SDLC Model)은 소프트웨어를 계획, 개발, 유지보수하기 위한 프로세스 모델로, 각 단계에서의 목적과 작업을 명확히 정의하여 효과적인 프로젝트 관리를 가능케 합니다. 여러 모델 중에서 폭포수 모델(Waterfall Model)과 V-모델(V-Model)에 대해 살펴보겠습니다.

1. 폭포수 모델(Waterfall Model)
   [특징] 선형적인 진행 방식으로, 각 단계가 이전 단계의 결과물을 기반으로 진행됩니다.
   [단계]
     1. 요구 사항 분석 : 시스템의 요구 사항을 수집하고 문서화합니다.
     2. 설계 : 시스템 구조와 구조를 계획하고 문서로 작성합니다.
     3. 구현 : 설계된 시스템을 코드로 구현합니다.
     4. 테스트 : 개발된 소프트웨어를 테스트하여 오류를 찾고 수정합니다.
     5. 유지보수 : 테스트 후에 필요한 유지보수 및 업데이트를 수행합니다.
   [장점] 간단하고 직관적이지만, 요구 사항 변경이 어려울 수 있습니다.

2. V-모델(V-Model)
   [특징] 폭포수 모델을 기반으로 하며, 각 개발 단계에 대응하는 검증/검토 단계가 쌍을 이룹니다.
   [단계]
     1. 요구 사항 분석 : 요구 사항 수집과 검증을 수행합니다.
     2. 시스템 및 소프트웨어 설계 : 설계 단계와 함께 검증 및 검토가 이루어집니다.
     3. 코딩 및 구현 : 코딩과 함께 모듈 테스트를 진행합니다.
     4. 테스트 : 시스템 테스트와 통합 테스트를 수행합니다.
   [장점] 개발 및 테스트를 병렬로 수행할 수 있어 품질을 향상시킬 수 있습니다.
   [단점] 초기에 명확한 요구 사항이 필요하며, 프로세스 간의 강한 의존성이 존재합니다.

이러한 모델들은 각각의 특징을 가지고 있어 프로젝트의 특성과 요구에 따라 선택되며, 명확한 단계별 작업 내용을 문서화하여 효과적인 관리와 개발을 지원합니다.

 

 

폭포수 모델(Waterfall Model)

폭포수 모델(Waterfall Model)은 아래로 선형하게 진행되는 프로세스로, 폭포수처럼 단계적으로 내려가는 형태에서 이름을 따온 소프트웨어 개발 모델입니다. 이 모델은 소프트웨어 개발 수명주기를 간결하게 모델링한 것으로, 각 단계를 순차적으로 진행하며 한 단계를 완벽히 마무리한 뒤에 다음 단계로 진행해야 한다는 특징을 가지고 있습니다.

 


중요한 특징
1. 순차적 진행

각 단계는 이전 단계의 결과물을 기반으로 하여 완료됩니다. 순차적인 진행으로 인해 한 단계를 완벽하게 끝내지 않으면 다음 단계로 진행하지 않습니다.

2. 상세한 문서화

각 단계는 상세한 문서화를 통해 프로젝트에 참여하는 인원들이 현황을 파악할 수 있도록 합니다. 모델의 간결한 접근 방식으로 인해 개발 프로세스를 쉽게 이해할 수 있습니다.

3. 문제 수정 어려움

한 번 진행된 단계로 다시 돌아가기 어렵다는 점이 단점으로 작용합니다. 이는 마치 폭포를 다시 올라가기 어려운 것과 유사합니다.

장점과 단점
[장점] 간결하고 이해하기 쉬운 모델로, 각 단계의 완성을 통해 프로젝트의 진행 상황을 명확히 파악할 수 있습니다.
  
[단점] 문제가 발생하더라도 이전 단계로 되돌아가기 어려워 조기에 발견된 결함이나 장애를 수정하기 어렵습니다. 특히 테스터의 입장에서는 각 단계에서의 참여가 어려워 조기에 발견된 문제를 해결하기 어렵다는 단점이 있습니다.

폭포수 모델은 간결한 구조와 순차적 진행 방식으로 프로젝트를 관리할 수 있는 장점을 가지고 있지만, 문제의 조기 발견과 수정에 제약이 따르는 단점도 고려해야 합니다.

 

V-모델(V Model)

V-모델(V Model)은 폭포수 모델(Waterfall Model)의 확장된 형태로, 각 개발 단계에 대응하는 테스트 단계가 상세하게 정의되어 있는 모델입니다. 이 모델에서 가장 주목할 만한 차이점은 개발 생명주기의 각 단계에 대해 테스트 단계가 세분화되어 있다는 점입니다. 이 세분화된 테스트 단계들이 알파벳 V자 형태를 이루어 V-모델이라 불리게 되었습니다.

주요 특징과 장점
1. 세부 테스트 단계

V-모델은 각 개발 단계에 대응하여 세부적인 테스트 단계를 정의합니다. 이로써 개발과 테스트가 상호 연결되면서 높은 품질의 소프트웨어를 개발할 수 있습니다.
   
2. 초기 테스트 참여

테스터들은 프로젝트 시작 시에 코딩 이전에 테스트 활동에 참여합니다. 이로써 초기에 오류나 결함을 발견하여 조기 수정이 가능해지며, 전체 프로젝트 비용과 시간을 절감할 수 있습니다.
   
3. 문서화와 품질 향상

각 단계별로 상세한 문서화를 통해 작업이 진행되기 때문에 프로젝트 이해도가 높아지고, 품질 향상에 기여합니다.

테스트 단계
[요구 사항 분석과 검증] 요구 사항의 정확성과 완전성을 검증하는 단계.
[시스템 및 소프트웨어 설계 검증] 설계된 시스템과 소프트웨어의 정확성을 검증하는 단계.
[코딩 및 모듈 테스트] 각 모듈이 기능을 정확히 수행하는지 테스트하는 단계.
[통합 테스트] 모듈들이 함께 작동할 때의 통합 테스트.
[시스템 테스트] 전체 시스템이 요구 사항을 충족하는지 확인하는 단계.

중요한 고려 사항
[목표 설정] 각 테스트는 명확한 목표를 가지고 있으며, 각 프로그램의 목적을 고려하여 목표를 설정하는 것이 중요합니다.
  
[테스트 목적 이해] 테스트하는 입장에서 각 테스트의 목적을 명확히 이해하고 설정하여 품질 좋은 소프트웨어를 개발하는 데 기여합니다.

이렇게 V-모델은 효율적이고 품질 높은 소프트웨어 개발을 위해 각 단계를 세부적으로 관리하고, 초기 테스트 참여로 인한 이점을 제공합니다.

 

출처 : 위키백과

V-모델 이미지에서 각 개발 단계는 각각의 테스트 단계로 연결되어 있습니다. 

세분화된 테스트는 각 부분별로, 다음과 같은 목적을 가지고 테스트하게 됩니다.

 

Verification(검증)과 Validation(확인)은 V-모델에서 중요한 두 가지 단계로 나뉩니다. 이 두 용어는 각각 "우리는 시스템을 정확하게 구축하고 있을까요?"와 "우리는 정확한 시스템을 구축하고 있을까요?"라는 다른 질문을 나타냅니다. 이 두 측면은 프로세스에서 서로 다른 목표를 가지고 있습니다.

 

Verification(검증)

   [목적] 시스템이나 구성 요소가 초기에 설정된 조건을 만족하는지 확인하는 것.
   [진행 방식] 주로 산출물(문서, 코드 등)을 평가하고 검토하여 품질을 확인하는 과정.
   [활동]요구 사항 명세서, 설계 명세서, 코드 등을 대상으로 평가, 검토, 점검 등을 수행.
   [특징] 주로 구현 이전에 이루어지며, 검토 형태로 진행되어 본질적으로는 "우리가 시스템을 올바르게 구축하고 있 가?"를 확인.

 

Validation(확인)

   [목적] 시스템이 특정 요구 사항을 만족시키는지 확인하는 것.
   [진행 방식] 소프트웨어를 실행하여 실제적인 동작을 평가하는 과정.
   [활동] 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트 등을 통해 요구 사항을 충족하는지 확인.
   [특징] 구현 이후에 이루어지며, 주로 컴퓨터 기반 테스팅으로 "우리가 올바른 시스템을 구축하고 있는가?"를 확인.

Verification은 주로 산출물을 평가하고 품질을 보장하며, Validation은 실제 소프트웨어를 실행하여 요구 사항을 충족시키는지 확인합니다. 두 과정은 프로세스의 다른 단계에서 이루어지며, 함께 수행되어야 최종적으로 올바른 시스템을 개발할 수 있습니다.

'QA_study' 카테고리의 다른 글

why perfect testing is impossible  (0) 2023.12.18
requirements engineering  (1) 2023.12.08
decision table testing  (0) 2023.07.31
boundary value analysis test  (0) 2023.07.28
equivalence partitioning testing  (0) 2023.07.28