[2, 6장 출제 기준 항목(7문제)]

[2.1 테스트 분류와 테스팅 방법 개요]
1. 테스트 분류
- 테스트 레벨(컴포넌트, 통합, 시스템, 인수), 테스트 유형(기능, 품질), 테스트 설계 기법
2. 테스팅 방법
- 개발 생명 주기, 프로젝트 단계(개발 또는 유지보수)
[2.2 테스트 분류]
1. 개요

- 테스트 레벨 : 컴포넌트 테스트, 통합 테스트, 시스템 테스트, 인수 테스트
- 테스트 설계 기법 : 정적테스트, 동적 테스트
- 테스트 유형 : 기능 테스트, 비기능 테스트(성능, 신뢰성, 보안..)
2. 테스트 레벨에 의한 분류
- 컴포넌트(Component) / 단위(Unit) 테스트 : 시스템을 구성하는 단위 모듈을 테스트 대상으로 하여 개별 단위 모듈을 독립적으로 테스트 한다.
- 통합(Intergration) 테스트 : 시스템을 구성하는 단위 모듈들이 정확하게 통합되었는지에 초점을 준다. 시스템 내부 구성 모듈과 이들 간의 관계를 정의한 구조 설계 명세서를 바탕으로 테스트가 진행된다.
- 시스템(System) 테스트 : 전체 시스템을 테스트 대상으로 하여 테스트가 진행된다. 요구사항 명세서에 명시된 방식대로 시스템이 동작하는지 확인하는 데 초점을 둔다.
- 인수(Acceptance) 테스트 : 시스템 테스트와 마찬가지로 전체 시스템을 하나의 단위로 보고 테스트가 진행된다.
그러나 시스템 테스트와 달리인수 테스트는 고객/사용자의 관점에서 고객이 기대하는 방식으로 소프트웨어가 동작하는지 확인
*4개의 레벨 테스트는 일반적인 소프트웨어의 개발 단계, 즉 요구분석, 구조설계(아키텍처 설계), 상세 설계와 밀접한 연관이 있다.

3. 테스트 유형에 의한 분류
*요구사항 명세서 : 기능 요구사항과 품질 요구 사항을 포함
테스트 유형
1) 기능 테스트(Functional Test)
- 기능 요구 사항 측면의 결함 검출 및 충족 여부 확인을 목적
- 모든 테스트 수준(컴포넌트, 통합, 시스템, 인수 테스트)에서 진행
2) 비기능 테스트 (Non-Functional Test)
- 성능, 보안성, 신뢰성 등 품질 요구사항 측면의 결함 검출 및 충족 여부 확인을 목적
- 일반적으로 시스템 테스트와 인수 테스트 수준에서 진행
*ISO 25010 소프트웨어 품질 모델 : 소프트웨어가 갖춰야 하는 다양한 품질 특성에 관한 표준을 정의 한것
| 주특성 | 부특성 |
| 기능 적합성 | 완전성, 정확성, 타당성 |
| 사용성 | 타당성 식별력, 학습성, 운영 용이성, 사용자 오류 보호, 사용자 인터페이스 미학, 접근성 |
| 성능 효율성 | 시간 행동(Time-Behaviour), 자원 활용성, 수용성(Capacity) |
| 호환성 | 공존성, 상호운영성 |
| 신뢰성 | 성숙성, 가용성, 장애 허용성, 회복 가능성 |
| 보안성 | 기밀성, 무결성, 부인방지, 책임성, 진본성 |
| 유지보수성 | 모듈성, 재사용성, 분석성, 변경 용이성, 테스트 용이성 |
| 이식성 | 적응성, 설치 용이성, 대치 용이성 |
4. 테스트 설계 기법에 따른 분류
1) 정적 테스트(Static Test) : 테스트 대상을 실행하지 않는 방식으로 테스트를 수행. 대표적인 방법은 리뷰, 정적 분석이 있다.
- 리뷰(Review)
○ 소프트웨어의 다양한 산출물에 존재하는 결함을 검출하거나 프로젝트의 진행 상황을 점검, 전문가 그룹이 수행
○ 리뷰를 효과적으로 수행하기 위하여 정해진 절차를 따르는데 순서
경영진 준비 → 리뷰 계획 → 리뷰 절차 개요 설명 → 작업물 개요 설명 → 개별 준비 → 그룹 검토 → 재작업 → 후속작업
○ 정적 테스트 - 리뷰 유형
| 리뷰 유형 | 설명 |
| 관리 리뷰 | 프로젝트 진행 상황에 대한 검토를 바탕으로 일정, 인력, 범위 등에 대한 통제 및 의사 결정을 지원 |
| 기술 리뷰 | 정의된 계획 및 명세를 준수하고 있는지에 대한 검토를 수행 |
| 인스펙션(Inspection : 점검) | 문제(anomaly)를 식별하고 문제에 대한 올바른 해결(Resolution)을 검증 |
| 워크쓰루(Walk-Through : 차근차근히 설명해주다) | 문제를 식별하고 더 나아가서 대안 조사, 개선 활동, 학습 기회 제공을 수행 |
| 감사(Audit : 감사, 심사) | 객관적인 표준과 규제에 대한 준수를 독립적으로 평가 |
- 정적 분석(Static Analysis)
○ 산출물(주로 소스 코드)의 구조적 속성을 이용하여 자동화 된 방식으로 도구에 의해 수행된다.
| 리뷰 유형 | 설명 |
| 코딩 표준 | MISRA-C, MISRA-C++ 등의 코딩 표준에 대한 준수 여부 검사 |
| 복잡도 측정 | 사이클로매틱 복잡도 등, 프로그램의 복잡도 측정 |
| 자료 흐름 분석 | 프로그램 자료 흐름에 이상(Anomaly) 존재 여부 분석 |
2) 동적 테스트(Dynamic Test) : 동적 테스트는 테스트 대상을 실행하여 결함을 검출하는 방법, 적절한 입력값, 즉 테스트 케이스를 결정

- 명세 기반 테스트
○ 명세 기반 테스트는 소스 코드를 참고하지 않고 테스트 케이스를 결정
○ 동등 분할, 분류 트리 기법, 경계값 분석, 신택스(Syntax)테스트, 조합 테스트, 상태전이 테스트, 인과 그래핑, 결정표 테스트, 시나리오 테스트 - 구조 기반 테스트
○ 구조 기반 테스트는 구현된 소스 코드를 참고해서 테스트 케이스를 결정
○ 소프트웨어의 내부 구조(코드, 설계 등)를 기반으로 테스트 케이스를 설계하고 수행
○ 문장 테스트, 결정 테스트, 조건 테스트, 결정/조건 테스트, 다중 조건 테스트, 변형 조건/결정 테스트(MCDC), 기본 경로 테스트 - 경험 기반 테스트
○ 기존의 테스트 경험, 테스트 대상이 되는 시스템 및 해당 도메인에 대한 경험 등을 바탕으로 수행하는 방법
○ 오류 추정(Error Guessing)
- 개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하는 방법
○ 탐색적 테스트(Exploratory Test)
- 테스트, 학습, 설계를 동시에 수행하는 소프트웨어 테스트 방법론
- 미리 정의된 테스트 계획이나 테스트 케이스 없이, 테스터가 동시에 학습하고, 테스트를 설계하고, 테스트를 실행하면서
소프트웨어를 탐색적으로 검증하는 방식
- 문서화 없이 해당 테스트를 바로 수행, 테스터의 지식에 의존, 애자일 방법
# 오류 추정 기법 예
| 상황 | 설명 |
| 필수 입력 | 필수 입력 항목인 경우 값이 입력되지 않는 상황을 테스트 한다. |
| 입력 항목의 길이 | 입력 항목의 길이에 제약이 있는 경우, 더 작거나 더 긴 항목이 입력되는 상황을 테스트 한다. |
| 입력 항목의 형식 | 입력 항목에 대한 형식을 위반하는 상황을을 테스트 한다. |
| 입력값의 명시적 제약사항 | 입력 항목의 값에 대하여 명시적으로 정해진 범위를 위반하는 상황을 테스트한다. |
| 입력값의 묵시적 제약사항 | 입력 항목의 값에 대하여 명시되지 않았지만 상식적으로 가정되는 범위를 위반하는 상황을 테스트 한다. |
[2.4. 테스팅 방법]
1. 리그레션(Regression : 회귀) 테스트
- 변경 후에 수행되는 테스트로, 소프트웨어에 가해진 변경이 의도하지 않게 결함을 만들지는 않았는지, 시스템이 기존의 요구사항을 충족하는지 검증하기 위하여 수행
- 리그레션 테스트 전략, Retest-all 전략, 선택적 리그레션 테스트 전략, 테스트 최소화 전략, 테스트 우선 순위화 전략
- 소프트웨어가 변경되면 각 레벨 테스트 순서대로(컴포넌트, 통합, 시스템, 인수) 각 레벨 마다 리그레션 테스트틀 수행한다.
2. 소프트웨어 생명 주기 모델과 테스트
1) 순차적 생명 주기 모델
- 각 개발 단계를 순차적으로 완료한 후에 다음 단계로 넘어가는 모델, 한 단계가 끝나기 전에는 다음 단계를 시작할 수 없다.
- 폭포수 모델
○ 구현이 완료된 후에 테스트가 시작
○ 장점은 모든 자료가 존재
○ 단점은 검출된 결함을 해결하는데 많은 비용과 시간이 소요
○ 요구사항 분석 → 설계 → 구현 → 테스트 → 배포 → 유지보수 - V모델
○ 개발 시작과 함께 테스트도 시작
○ 각 개발 단계에서 발생하는 결함을 검출할 수 있는 테스트 레벨이 존재
○ 개발 단계와 테스트 단계를 병렬적으로 연결, 각 개발 단계의 결과물이 해당되는 테스트 단계를 통해 검증하는 특징을 가짐
○ 마치 알파벳 "V"자 모양과 유사하게 생겨서 V모델이라 불림
2) 진화적 개발 모델(Evolutionary Development Model)
- 한 번에 완벽하게 개발하는 것이 아닌, 여러 번의 반복적인(Iterative) 주기를 거쳐 점진적(Incremental)으로 완성나가는 방식
- 각 반복 주기마다 이전 버전보다 더 완전한 소프트웨어가 만들어짐
- 애자일 개발 방법론(Agile Development Methodology)
○ 진화적 개발 모델처럼 반복적이고 점진적인 개발 접근 방식.
○ 애자일 방법론은 일반적으로 테스트 주도 개발(Test-Driven Development, TDD)을 적용
○ TDD와 더불어 애자일 개발에서 중요한 실천 규칙인 지속적인 통합(CI, Continuous Intergration)이 있다.
*테스트 주도 개발(Test-Driven Development, TDD) : 프로그램에 대한 테스트 케이스를 먼저 작성하고, 이 테스트 케이스를 통과하는 실제 프로그램의 코드를 나중에 작성하는 방식
3. 위험 기반 테스트(Risk-Based Test)
- 위험 기반 테스트는 소프트웨어 테스트 전략 및 활동을 잠재적인 위험의 가능성과 심각도에 따라 우선순위를 결정하고 집중하는 접근 방식. 즉, 결함이 발생했을 때 비즈니스에 더 큰 손실을 초래할 가능성이 높은 영역을 먼저 그리고 더 집중적으로 테스트하는 것
- 피처에 대한 위험 분석을 바탕으로 테스트에 대한 계획과 설계 그리고 실행 등의 활동을 수행
4. 모델 기반 테스트(Model-Based Test)
- 모델 기반 테스트는 소프트웨어의 예상되는 동작이나 구조를 추상화한 모델을 기반으로 자동으로 테스트 케이스를 생성하고 실행하는 테스트 방법론.
- 사람이 직접 테스트 케이스를 설계하는 대신, 모델을 활용하여 효율적이고 체계적인 테스트를 수행하는 것이 핵심
- 테스트 계획에서 종료까지 대부분의 활동을 자동화 할 수 있음
- 다양한 유형의 문제를 이른 시점에 식별하는 방법으로 개발 단계 산출물의 결함을 검출할 수 있음
- 장애가 발생했을 때 많은 비용이 유발되는 자동차, 의료등 안전 필수(Safety Critical) 소프트웨어를 대상으로 수행됨
- 의사 결정표, UML 상태 다이어그램, UML 액티비티 다이어그램을 비롯한 정형적 표현법 사용
'자격증 > CSTS FL(일반)' 카테고리의 다른 글
| [8장] 정적 테스트(7문제) (0) | 2025.05.02 |
|---|---|
| [2, 6장] 소프트웨어 생명 주기 모델과 테스트(7문제) (0) | 2025.05.02 |
| [3, 4장] 품질 특성과 비기능 테스트(11문제) (0) | 2025.05.02 |
| [3, 4장] 소프트웨어 개발 단계와 테스트(11문제) (0) | 2025.05.02 |
| [1장] 테스트 개요(7문제) (0) | 2025.04.30 |