반응형
동적 테스트 (Dynamic Testing)
- 소프트웨어를 실행하여 테스트를 수행하여 결함을 검출하는 것
명세기반 테스트
- 블랙박스 테스트라고도 불림
- 내부 논리 구조를 참조하지 않고 사용자의 요구사항이 기술된 명세나 설계 정보 등을 이용하여 테스트케이스를 개발함.
- 대상 시스템의 명세 정보를 얻을 수 있는 한 대상에 제한이 없음. 컴포넌트 테스트, 통합 테스트, 시스템 테스트 및 인수 테스트 등 전 과정에 걸쳐 사용 가능함.
- 주요 기법:
- 동등 분할 (Equivalence Partitioning): 입력 데이터를 클래스별로 나눠 테스트하는 기법.
- 분류 트리 기법 (Classification Tree Method): 시스템의 입력 조건을 계층 구조로 나누어 테스트.
- 경곗값 분석 (Boundary Value Analysis): 경곗값을 중심으로 테스트하는 기법.
- 신텍스 테스트 (Syntax Testing): 입력 데이터의 문법 구조를 테스트하는 기법.
- 조합 테스트 (Combinatorial Testing): 다양한 입력 조합을 테스트하는 기법.
- 상태 전이 테스트 (State Transition Testing): 상태 변화와 그에 따른 출력을 테스트.
- 인과 그래핑 (Cause-Effect Graphing): 원인과 결과를 그래프로 나타내어 테스트.
- 결정표 테스트 (Decision Table Testing): 논리적인 조건과 그에 따른 행동을 표로 정리하여 테스트.
- 시나리오 테스트 (Scenario Testing): 사용자의 시나리오를 기반으로 테스트.
동등 분할 (Equivalence Partitioning)
- 소프트웨어 테스트의 핵심 방법 중 하나.
- 테스트를 효과적으로 수행하면서 테스트 케이스의 수를 최소화함.
- 입력 또는 출력 영역을 동등한 클래스로 분할하여 각 클래스에서 값 선택하여 테스트 케이스 작성.
- 동등 클래스가 정상 작동한다면 동등 클래스의 나머지 값들도 정상 작동한다고 가정
절차
- 명세서에서 입력과 출력을 식별.
- 입력 영역을 동등 클래스로 분할.
- 입력 조건이 범위인 경우: 만족하는 클래스와 만족하지 않는 클래스로 분할.
- 입력 조건이 특정 값을 기술하는 경우: 만족하는 클래스와 만족하지 않는 클래스로 분할.
- 입력 조건이 어떤 집합의 원소를 기술하는 경우: 원소를 포함하는 클래스와 미포함 클래스로 분할.
- 입력 조건이 개체 존재 여부를 따지는 경우: 존재, 미존재 클래스로 분할.
- One-to-one 동등 분할을 통해 테스트 케이스 설계.
- 각 입력 필드에 대한 검증 작업을 피함.
- 유효하지 않은 테스트 케이스 설계 시, 하나의 필드만 유효하지 않은 입력으로 구성.
- 최소화 동등 분할:
- 하나의 테스트 케이스에 여러 클래스 포함.
분류 트리 기법 (Classification Tree Method)
- 동등 분할 테스트를 체계적으로 수행하기 위해 분류 트리를 활용함.
- 테스트 대상 프로그램 행위에 영향을 줄 수 있는 특성을 도메인 지식, 경험, 명세 등을 활용하여 식별함.
- 동일한 영역을 다양한 관점에서 살펴볼 수 있도록 분류하거나 테스트 관련 에스펙트로 정의함.
절차
- 명세서 등을 분석하여 대상 클래스에 적용할 수 있는 에스펙트를 식별함.
- 각 에스펙트가 식별되지 않으면 해당 클래스의 분할을 종료함.
- 각 에스펙트에서 클래스를 여러 서브 클래스로 분할함.
- 각 서브 클래스에 대해 위 과정을 반복 수행함.
- 분류 트리의 단말 노드를 적절히 조합하여 테스트 케이스를 설계함.
경계 값 분석 (Boundary Value Analysis)
- 입력 영역 경계 근처에 있는 값들을 활용하여 테스트 케이스를 설계하는 방법.
- 동등 분할과 유사하게 입력 및 출력 영역을 여러 클래스로 분할하여 테스트를 수행함.
- 클래스의 경계와 경계 근처에 있는 값들을 사용하여 테스트 케이스를 설계함.
절차
- 명세서에서 입력 및 출력을 식별함.
- 각 입력 및 출력에 대해 동등 분할을 수행함.
- 각 분할된 클래스의 경계값을 식별함.
- 2-value BVA 또는 3-value BVA에 따라 경계값 분석을 수행함.
- 얻은 각 값에 대해 기대 출력을 명세로 구하여 테스트 케이스를 설계함.
- 테스트 케이스를 구성할 때, 한 경곗값에 대해 하나의 테스트 케이스를 구성하는 일대일 방법이나 하나의 테스트 케이스에 여러 개의 경곗값을 포함하는 최소화 방식을 사용함.
조합 테스트 (Combinatorial Testing)
- 조합 테스트는 테스트 대상 프로그램 내 여러 클래스의 각 입력 인자를 동등 분할이나 경곗값 분석 등의 방법으로 여러 클래스 또는 값으로 분할한 후, 이들을 조합하여 테스트 케이스를 구성하는 방식
조합 테스트의 4가지 방법
- Each choice 테스트:
- 각 입력 인자의 분할된 클래스에서 최소한 하나의 입력값이 테스트 케이스를 포함함.
- 테스트 케이스 수가 매우 적으며, 코드가 단일 인자에만 의존할 때 유용함.
- 페어와이즈 테스트:
- 각 입력의 값(또는 클래스)과 다른 입력의 값(또는 클래스)을 최소한 한 번은 조합하여 테스트하는 방법.
- 모든 입력 간의 가능한 상호작용을 고려하지 않고 모든 두 입력 간의 상호작용만을 고려.
- AII combinations 테스트:
- 모든 입력 인자의 모든 가능한 클래스 조합이 테스트 케이스에 포함되도록 하는 방법.
- 모든 입력의 모든 클래스 조합을 고려하여 테스트 케이스를 작성.
- Base choice 테스트:
- 기반이 되는 조합을 미리 선정하고, 그 중 하나의 인자만 변경하여 테스트 케이스를 생성하는 방법.
- 주로 사용자의 관점에서 선택될 빈도가 가장 높거나 정상 동작할 것으로 예상되는 조합을 선택.
절차
- 테스트 대상 프로그램의 입력을 식별
- 명세를 분석하여 각 입력 인자를 적절한 방법으로 여러 클래스 또는 값으로 분할.
- 적절한 조합 테스트 방법을 선택하여 입력값(또는 클래스)들을 조합.
- 각 입력 조합에 대해 명세를 분석하여 기대 결과를 할당.
결정표 테스트 (Decision Table Testing)
- 결정표 테스트는 결정표를 이용하여 테스트 케이스를 설계하는 방법으로, 결정표는 조건을 기술하는 부분과 조건의 조합에 대해 취하는 행위를 기술하는 부분으로 구성
절차
- 명세 등을 분석하여 모든 조건을 분석.
- 모든 조건의 조합에 대한 행위를 결정.
- 위 두 단계를 통해 결정표를 만듦.
- 결정표에서 가능하지 않은 조건의 조합은 배제.
- 결정표를 축약할 수 있는지 파악.
- 결정표의 각 규칙이 최소한 한 번은 테스트될 수 있도록 테스트 케이스를 생성.
- 축약된 결정표에서도 테스트 케이스가 최소 한 번은 테스트될 수 있도록 테스트 케이스를 생성.
- 각 규칙을 실행하는데 요구되는 조건의 조합을 만족하는 입력과 출력을 식별하여 테스트 케이스를 구성.
상태 전이 테스트 (State Transition Testing)
- 시스템을 상태 전이도로 모델링한 후 테스트 케이스들을 상태 전이도에서 체계적으로 선정하는 방법.
상태 전이 테스트 방식
- 상태 테스트: 상태 전이도의 모든 상태를 최소한 한 번 방문하는 테스트 케이스들을 설계
- 단일 전이 테스트: 상태 전이도의 모든 유효한 전이들을 최소한 한 번 방문하는 테스트 케이스 설계
- All transitions 테스트(0-switch 테스트): 유효한 전이를 포함해 유효하지 않은 전이들도 최소 한 번 방문하는 테스트 케이스 설계
- 다중 전이 테스트: 상태 전이도에 있는 N+1개의 전이 시퀀스들을 최소 한 번 방문하는 테스트 케이스 설계
절차
- 상태 전이도의 초기 상태를 전이 트리의 루트 노드로 설정.
- 루트 상태에서 나오는 각 전이에 대해 전이 목적 상태에 해당하는 노드를 추가하고 루트 노드에 추가된 노드로 간선을 연결.
- 목적 상태가 전이 트리에 이미 나와 있거나 종료 상태가 아니면, 동일한 과정을 각 목적 상태에 대해 반복.
시나리오 테스트 (Scenario Testing)
- 시나리오 테스트는 기존 요구사항 명세서에서 각 개별 기능에 대한 상세한 내용이 시나리오 형태로 기술되어 있다면 해당 기능을 테스트하는 방법
- 여러 번의 입출력을 순차적으로 수행하여 시스템이 요구사항에서 요구된 대로 동작하는지 확인
- 단순한 시스템의 경우 하나의 액티비티 다이어그램으로 전체 시스템의 테스트 시나리오를 표현할 수 있음
- 복잡한 행위 모델의 구축, 분석, 테스트 케이스 설계를 위해 숙련된 인력과 많은 시간 투자 또는 상용 도구의 지원이 필수
- 여유 자원이 충분하지 않은 경우 전체 시스템 단위가 아닌 요구사항 단위로 테스트 시나리오를 설계 가능
- 요구사항 간의 의존성이 크다면 의존적인 요구사항을 함께 고려하여 테스트 시나리오를 설계
절차
- 테스트하려는 프로그램의 명세를 분석하여 기본 시나리오 및 대안 시나리오를 식별합니다.
- UML 액티비티 다이어그램 등을 이용하여 식별된 시나리오들을 통합한 모델을 설계합니다.
- 모델에서 테스트 시나리오를 추출하여 테스트 케이스로 매핑합니다.
구조 기반 테스트
- 프로그램의 제어 흐름이나 자료 흐름 정보를 기반으로 하여 테스트 케이스를 설계하는 방법
- 구조적 테스트, 화이트박스 테스트, 글래스 박스 테스트로도 불림
- 일부 경로만 테스트하는 방법 사용
- 가장 이상적인 것은 프로그램의 모든 경로를 최소 한 번 실행하여 테스트하는 것
- 주요 기법
- 문장 테스트: 프로그램의 모든 문장을 최소 한 번은 실행하도록 하는 테스트입니다.
- 결정 테스트: 프로그램 상에 있는 모든 결정문의 결과가 최소 한 번은 참과 거짓이 되도록 하는 테스트입니다.
- 조건 테스트: 프로그램의 모든 조건이 최소 한 번은 true와 false가 되도록 하는 테스트입니다.
- 결정/조건 테스트: 결정 테스트와 조건 테스트를 모두 만족하는 테스트 케이스 집합을 설계합니다.
- 다중 조건 테스트: 결정이 가질 수 있는 경우뿐만 아니라 결정을 구성하는 기본 조건들이 가질 수 있는 모든 가능한 조합까지 검증합니다.
- 기본 경로 테스트: 프로그램의 모든 경로 중에서 기본 경로를 테스트하도록 요구합니다.
- 커버리지를 높이는 구조기반 테스트: 문장 테스트> 결정 테스트> 결정/조건 테스트> 다중 조건 테스트
경험 기반 테스트
- 테스트 케이스 설계를 바탕으로 테스트를 수행하지 않고 도메인에 대한 테스터의 경험, 기존 테스트 결과, 테스터의 직관으로 주로 활용하여 테스트를 수행.
- 실행 가능한 소프트웨어가 필요하고, 환경이 요구되며 소스 코드는 사용되지 않음.
- 소프트웨어의 품질 요구사항인 가용성, 확장성, 신뢰성 등을 확인
- 주요 기법
- 오류 추정: 이 방법은 테스트 케이스를 설계할 때 개발자가 범할 수 있는 실수를 추정하고 그에 따라 결함을 검출하는 방법으로 동등 분할이나 경곗값 분석 같은 명세 기반 테스트 방법과 함께 사용될 수 있음
- 오류 검출 대표 사례
- 필수 입력이 누락된 경우 - 입력 항목의 길이 제약을 위반하는 경우 - 입력 항목의 형식을 위반하는 경우 - 입력 값의 명시적 또는 묵시적 제약을 위반하는 경우
- 탐색적 테스트: 이 방법은 테스트 대상에 대한 이해를 바탕으로 테스트를 진행, 테스터는 테스트를 실행하면서 즉석에서 테스트 케이스를 결정하고 문서화 없이 테스트를 수행
- 적합한 상황
- 시스템에 대한 이해와 정보가 부족한 경우 - 빠르게 변화하는 환경에서 적응해야 하는 경우 - 에자일 방법론을 사용하는 웹 응용 프로그램과 같은 환경에서 테스트를 수행해야 하는 경우
- 오류 추정: 이 방법은 테스트 케이스를 설계할 때 개발자가 범할 수 있는 실수를 추정하고 그에 따라 결함을 검출하는 방법으로 동등 분할이나 경곗값 분석 같은 명세 기반 테스트 방법과 함께 사용될 수 있음
반응형
'공부 > CSTS' 카테고리의 다른 글
[CSTS] 2024 CSTS FL(일반등급) 합격 후기: 성공적인 공부 방법과 팁 예상 문제 출제 기준 (1) | 2024.09.04 |
---|---|
[CSTS] 1장 테스트 개요: 테스트와 품질 평가, 테스트와 품질 보증, 테스트 기본 용어 (0) | 2024.06.27 |
[CSTS] 1장 테스트 개요: 테스트의 목적 오류 결함 장애 테스트 디버깅재테스팅 (0) | 2024.06.24 |