나랑 now
[CSTS 요약] 6 소프트웨어 생명 주기 모델과 테스트 본문
소프트웨어 생명 주기: 소프트웨어를 개발하는 체계에 관한 추상적 표현
순차적 또는 병렬적인 일련의 단계로 구성
순차적 개발 모델
대표적으로 폭포수 모델과 V-모델이 있음
폭포수 모델
모든 소프트웨어 생명 주기 모형 중 가장 오래된 모형
소프트웨어 개발을 요구사항 분석에서 시작하여 설계, 코딩, 테스트, 유지보수 전 과정을 체계적이고 순차적으로 접근
사용자의 요구사항이 개발자에게 익숙한 경우나 요구사항 변경이 개발 도중에 빈번하게 이루어지지 않는 경우 적합
- 요구사항 분석: 개발하려는 소프트웨어에 대한 요구사항을 수집하고 문제를 이해 및 분석하여 명세화하는 단계
요구되는 기능, 성능 및 인터페이스를 이해하여 프로그램의 특성 파악 필요
주요 산출물: 요구사항 명세 - 구조 설계 단계: 소프트웨어의 전체적인 구조 결정 단계
시스템을 구성하는 요소(모듈, 데이터베이스 등)들 간의 의존성 파악하여 상호 연결
주요 산출물: 설계 명세(시스템의 전체적인 아키텍처를 보여줌) - 상세 설계 단계: 각 모듈의 알고리즘 세부 사항, 구체적인 데이터 표현, 루틴과 데이터 간의 인터페이스 결정
주요 산출물: 모둘 명세를 포함하는 상세 설계 명세 - 코딩: 프로그래밍 언어 등을 사용하여 기계가 해독할 수 있는 형태로 반환하는 단계
주요 산출물: 프로그램 - 테스팅: 완성된 시스템의 결함 검출위해 테스트 수행 단계
장점: 개발과정 거치며 소프트웨어에 관해 문서와 정보가 많이 산출되므로 테스트 작업에 필요한 정보 쉽게 얻을 수 있음
단점: 테스트 작업을 코딩 단계 후의 한 단계로만 취급하여 전체 프로젝트의 비용 및 개발 일정에 심각한 영향 끼칠 수 있음
V모델
폭포수 모델이 개발 중심 모델인 데 반해 V-모델은 테스트를 개발과 동등하게 취급한 모델
생명 주기를 크게 개발에 관련된 단계들과 테스트에 관련된 단계들로 명확하게 구분
테스트 활동은 개발과 함께 동시에 시작됨
단위 테스트에서 구현 정보 및 상세 설계 정보 이용하여 각 모듈이 올바르게 기능을 수행하는지 판별
통합 테스트는 모듈 간의 인터페이스를 테스트하는 것이 주목적으로, 모듈 간의 의존관계를 보여주는 구조 설계 문서 필요
시스템 테스트는 모듈들을 통합하여 완전한 시스템이 구성될 때 개발자가 수행하는 테스트
인수 테스트는 결함 검출보다는 사용자 관점에서 요구사항에 맞게 개발되었는지 확인
진화적 개발 모델
이터레이션(Iteration)과 점진적(Incremental) 개발 원칙에 바탕
시스템의 구성요소 중 핵심 부분을 개발한 후, 각 구성요소와 추가 요구사항을 여러 이터레이션을 통해 개선 발전시켜 최종 완성품 개발
많은 이터레이션으로 구성되며 각 이터레이션의 결과물이 고객에게 전달되어 평가받고 이를 바탕으로 소프트웨어 개선
수해하는 각 이터레이션마다 테스트 수행 계획 작성하며 해당 계획에 따라 테스트 수행
각 이러테이션은 순차적 모델과 같이 요구사항 분석, 설계, 구현, 테스팅과 같은 단계들로 구성되며 각 개발 단계에서 테스트 관련 프로세스 수행됨
진화적 모델처럼 반복적•점진적으로 개발하는 모델의 예로는 나선형 개발 모델이 있음
나선형 모델: 요구사항이 개발 초기 완전하게 정의되어 있지 않고 부분적으로 정의된 경우 반복적으로 요구사항을 정제하고 확장하는 과정을 사용자가 받아들일 수 있는 완전한 시스템이 개발될 때까지 반복
나선형 모델은 기술적으로 어렵거나 고객의 비즈니스 가치를 최상으로 만드는 요구사항들에 대해 우선 프로토타입을 개발하고, 프로토타입에 대한 테스트 및 사용자의 평가를 거쳐 다음 개발 주기 시작
필요에 따라 이전 주기에 개발했던 프로토타입이 기능적으로 확장되거나 폐기되어 새로운 프로토타입이 개발될 수 있음
새로운 개발 주기가 시작될 때마다 위험 분석을 수행하기 때문에 잠재적인 위험 분야 파악하여 해결 가능
위 과정을 반복하여 시스템이 제공해야 하는 기능들이 파악되는 시점에서 V-모델에 따라 시스템 개발
매 단계 적당한 테스트가 이루어지므로 개발 과정에서 많은 문제점을 해결할 수 있는 기회 제공
소프트웨어 프로세스 한 주기마다 사용자에게 피드백을 받기 때문에 개발 이후 심각한 결함이 발견되는 문제가 생길 가능성이 거의 없음
다음 개발 주기에 수행되는 설계나 테스트에 고객 평가 반영할 수 있는 자료 획득
애자일 개발 모델
애자일 방법론이 추구하는 가치(애자일 선언Agile Manifesto)
- 사람 및 상호 의사 교환이 프로세스나 도구보다 우선한다
- 동작하는 소프트웨어가 포괄적인 문서보다 우선한다
- 고객과의 협력이 계약 협상보다 우선한다
- 변화에 반응하는 것이 계획을 따르는 것보다 우선한다
애자일 개발 방법론은 진화적 개발 모델과 같이 반복적이면서 점진적인 개발 접근 방식(Iterative and Incremental Development, IDD)을 따름
- 짧은 이터레이션으로 고객이 소프트웨어에 대한 일의 진척 정도를 확인 가능(동작하는 소프트웨어가 포괄적인 문서보다 우선시)
- 각 이터레이션의 개발 요구사항은 고객에게 가장 높은 비즈니스 가치를 가져다주는 요구사항 구현에 높은 우선순위를 둠
(고객과의 협력이 계약 협상보다 우선) - 각 이터레이션 시작시 자주 변경될 수 있는 고객의 요구사항 탄력적으로 처리(변화에 반응하는 것이 계획을 따르는 것보다 우선시)
테스트 주도 개발(Test-Driven Development, TDD)
프로그램에 대한 테스트 케이스를 먼저 작성하고, 해당 테스트케이스로 테스팅 되는 실제 프로그램 코드를 나중에 작성하는 방식
테스트 되지 않는 코드가 없어 결함의 발생 가능성 상당히 줄일 수 있음
테스트 선고려 코딩으로 테스트 용이성이 높은 코드가 산출되며 변경 요구에 쉽게 대응할 수 있도록 설계되는 효과
테스트 케이스는 대상 테스트 모듈을 사용하는 입장에서 작성되기 때문에 테스트 케이스 자체가 요구사항을 분명하게 드러냄
'자격증 > CSTS' 카테고리의 다른 글
[CSTS 요약] 8 정적 테스트 (0) | 2024.01.31 |
---|---|
[CSTS 요약] 7 테스트 자동화 (0) | 2024.01.30 |
[CSTS 요약] 5 위험 기반 테스트 (0) | 2024.01.24 |
[CSTS 요약] 4 품질 특성과 비기능 테스트 (1) | 2024.01.23 |
[CSTS 요약] 3 소프트웨어 개발 단계와 테스트 (0) | 2024.01.23 |