일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- testing method
- 테스트 케이스
- QA
- Test Case
- SQA
- selenium
- test
- 셀레니움
- 품질
- 테스트케이스
- 테스트
- 위험 기반 테스트
- RBT
- maintainability test
- ISTQB
- 파이썬
- csts
- Software life cycle model
- regression test
- agile
- risk-based testing
- seleium
- Testing
- 유지보수성 테스트
- Python
- testcase
- 테스트 설계 기법에 따른 분류
- 애자일
- 비기능테스트
- 자동화
- Today
- Total
Study_Note
classification according to test design techniques - dynamic testing 본문
테스트 설계 기법에 따른 분류 - 동적 테스트
(Classification according to test design techniques - dynamic testing)
테스트는 테스트 설계 기법에 따라 정적 테스트와 동적 테스트로 나뉩니다. 여기서 정적 테스트는 리뷰와 정적 분석으로 구분되며, 동적 테스트는 명세 기반 테스트, 구조 기반 테스트, 그리고 경험 기반 테스트로 분류됩니다.
동적 테스트(dynamic testing)
동적 테스트는 결함을 찾기 위해 소프트웨어를 실행하는 방법입니다. 이때, 적절한 입력값 또는 테스트 케이스를 선택하는 것이 중요합니다. 소프트웨어의 어느 부분에 결함이 있는지 확실히 알 수 없으므로 가능한 많은 경우의 수를 조사하여 테스트 케이스를 결정해야 할 것으로 보입니다. 그러나 소프트웨어는 매우 복잡하고 다양한 상황이 존재하기 때문에 모든 경우를 테스트하는 것은 현실적으로 불가능합니다. 따라서 테스트 비용을 절감하면서도 결함을 놓치지 않기 위해 가능한 한 적은 수의 테스트 케이스를 사용하는 것이 중요합니다.
동적 테스트는 테스트할 상황을 결정하는 방법에 따라 세 가지 유형으로 분류됩니다.
- 명세 기반 테스트
테스트 케이스를 작성할 때 요구 사항 또는 명세서를 기반으로 합니다. 이는 소프트웨어가 정확히 기능하고 있는지 확인하는 데 중점을 둡니다. - 구조 기반 테스트
소프트웨어의 내부 구조에 따라 테스트 케이스를 설계합니다. 이는 코드의 특정 부분이나 경로를 테스트하여 결함을 찾는 데 주로 사용됩니다. - 경험 기반 테스트
테스터의 경험과 직관에 의존하여 테스트 케이스를 결정합니다. 이는 이전에 발견된 결함이나 유사한 상황에서 얻은 지식을 기반으로 합니다.
이렇게 다양한 방법을 통해 테스트 케이스를 설계하여 효율적으로 동적 테스트를 수행할 수 있습니다.
명세 기반 테스트와 구조 기반 테스트
명세 기반 테스트는 소스 코드를 참고하지 않고 테스트 케이스를 결정하는 방법입니다. 예를 들어, 임의의 입력값을 생성하여 테스트하는 임의(random) 테스트 방법은 소스 코드를 사용하지 않으므로 명세 기반 테스트에 속합니다.
구조 기반 테스트는 반면에 구현된 소스 코드를 참고하여 테스트 케이스를 결정합니다. 소스 코드의 특정 문장이나 경로를 실행하기 위한 입력값을 결정하는 경우, 해당 테스트는 구조 기반 테스트로 간주됩니다.
명세 기반 테스트 | 구조 기반 테스트 |
동등 분할 | 문장 테스트 |
분류 트리 기법 | 결정 테스트 |
경계값 분석 | 조건 테스트 |
신택스 테스트 | 결정/조건 테스트 |
조합 테스트 | 다중 조건 테스트 |
상태 전이 테스트 | 변경 조건/결정 테스트 (MCDC) |
인과 그래핑 | 기본 경로 테스트 |
결정표 테스트 | |
시나리오 테스트 |
각각의 명세 기반 테스트 기법 설명
- 동등 분할 (Equivalence Partitioning)
- 입력 값의 유효한 범위를 나누어 각각의 등가 분할에 해당하는 대표값을 선택하여 테스트 케이스를 설계하는 기법입니다.
- 예를 들어, 입력값이 1에서 100까지의 범위를 갖는 경우, 유효한 범위를 1~50, 51~100과 같이 나누어 대표값을 선택하여 테스트 케이스를 작성합니다.
- 분류 트리 기법 (Classification Tree Method)
- 테스트 케이스를 생성하기 위해 입력 조건을 분류하여 트리 구조로 나타내고, 이를 기반으로 테스트 케이스를 설계하는 기법입니다.
- 입력 조건 간의 관계를 나타내는 트리를 만들어 테스트 시나리오를 파악합니다.
- 경계값 분석 (Boundary Value Analysis)
- 입력 값의 경계 부근에서 발생할 수 있는 오류를 감지하기 위해 입력 값의 경계, 즉 최솟값, 최댓값, 경계 값에 대해 테스트 케이스를 설계하는 기법입니다.
- 예를 들어, 입력 값의 범위가 1에서 100까지인 경우, 0, 1, 2, 99, 100 등의 경계 값을 중심으로 테스트를 수행합니다.
- 신택스 테스트 (Syntax Testing)
- 소프트웨어의 구문적인 측면을 테스트하는 기법으로, 입력값의 형식이나 구조를 검증합니다.
- 예를 들어, 입력 값이 정해진 형식에 맞는지 여부를 확인하는 테스트입니다.
- 조합 테스트 (Combination Testing)
- 다양한 입력 값의 조합에 따른 효과를 검사하기 위해 가능한 모든 입력 값의 조합을 테스트하는 기법입니다.
- 예를 들어, 두 가지 입력값이 각각 A, B, C인 경우, A와 B의 모든 조합을 테스트합니다.
- 상태 전이 테스트 (State Transition Testing)
- 시스템의 상태 전이를 기반으로 테스트 케이스를 설계하는 기법으로, 시스템의 상태가 변경될 때 발생할 수 있는 오류를 식별합니다.
- 예를 들어, 사용자가 버튼을 클릭하여 상태가 변경되는 경우, 각 상태 전이마다 발생할 수 있는 오류를 테스트합니다.
- 인과 그래핑 (Cause-Effect Graphing)
- 입력 조건과 결과 사이의 인과 관계를 분석하여 테스트 케이스를 설계하는 기법으로, 입력 조건이 결과에 어떻게 영향을 미치는지를 이해합니다.
- 결정표 테스트 (Decision Table Testing)
- 여러 입력 조건과 그에 따른 동작을 표로 나타내어 모든 조건의 조합을 테스트하는 기법입니다.
- 각 입력 조건과 결과에 대한 가능한 모든 조합을 고려하여 테스트 케이스를 작성합니다.
- 시나리오 테스트 (Scenario Testing)
- 특정 시나리오에 따라 소프트웨어가 예상대로 작동하는지를 검증하는 테스트 기법입니다.사용자의 특정 행동 또는 시나리오에 대해 테스트 케이스를 설계하여 시스템의 동작을 확인합니다.
구조 기반 테스트 기법 설명
- 문장 테스트 (Statement Testing)
- 소스 코드의 각 문장을 최소한 한 번 이상 실행하도록 하는 테스트 케이스를 설계하는 기법입니다.
- 프로그램의 모든 문장을 실행하여 코드의 문법적 오류나 기본적인 로직 오류를 검증합니다.
- 결정 테스트 (Decision Testing)
- 조건문에서 참과 거짓으로 분기되는 각 결정(조건문)을 최소한 한 번은 수행되도록 하는 테스트 케이스를 설계하는 기법입니다.
- 모든 조건문의 각 분기점이 실행되고, 각 분기마다 참과 거짓을 모두 확인하여 모든 분기를 테스트합니다.
- 조건 테스트 (Condition Testing)
- 각 조건문의 각 조건(피연산자)이 참과 거짓을 모두 만족하도록 하는 테스트 케이스를 설계하는 기법입니다.
- 조건문의 각 조건이 모든 가능한 조건에 대해 테스트되도록 설계합니다.
- 결정/조건 테스트 (Decision/Condition Testing)
- 결정 테스트와 조건 테스트를 결합한 테스트 기법으로, 각 결정문과 각 조건문의 모든 조건이 실행되도록 하는 테스트 케이스를 설계합니다.
- 모든 조건문의 조건이 참과 거짓을 모두 만족하며, 모든 결정문이 실행되도록 테스트합니다.
- 다중 조건 테스트 (Multiple Condition Testing)
- 복잡한 조건문의 각 조건에 대해 모든 조합을 테스트하는 기법입니다.
- 여러 개의 조건이 함께 결합된 경우, 모든 조건의 조합을 검사하여 테스트 케이스를 설계합니다.
- 변경 조건/결정 테스트 (Modified Condition/Decision Coverage, MCDC)
- 결정 테스트와 조건 테스트를 결합하여 수정된 조건/결정을 커버하는 테스트 케이스를 설계하는 기법입니다.
- 각 조건이 참과 거짓을 변경하고, 각 결정문이 참과 거짓을 각각 변경할 때 프로그램의 각 부분이 올바르게 동작하는지 확인합니다.
- 기본 경로 테스트 (Basis Path Testing)
- 프로그램의 모든 가능한 경로를 테스트하는 기법으로, 각 경로가 최소 한 번 실행되도록 하는 테스트 케이스를 설계합니다.
- 제어 흐름 그래프를 사용하여 모든 노드와 간선을 커버하는 테스트를 수행합니다.
경험 기반 테스트
경험 기반 테스트는 기존의 테스트 경험, 시스템 및 해당 도메인에 대한 경험을 활용하여 수행하는 테스트 방법을 말합니다.
오류 추정(error guessing)
경험 기반 테스트에서의 "오류 추정"은 테스터가 자신의 경험과 이해를 기반으로 시스템에서 발생할 수 있는 오류를 예측하고 파악하는 과정을 의미합니다. 이는 과거의 테스트 경험을 토대로 시스템의 특정 부분에서 발생할 가능성이 높은 오류를 식별하고, 이에 대한 대비책을 마련하는 것을 목적으로 합니다. 이러한 접근 방식은 테스트의 효율성과 효과성을 높일 수 있으며, 시스템의 안정성과 신뢰성을 높이는 데 기여할 수 있습니다.
오류 추정을 예시와 함께 설명하겠습니다.
가정하에 전자상거래 웹 애플리케이션을 테스트하는 상황을 고려해봅시다. 이전 프로젝트에서 경험한 내용과 도메인 지식을 활용하여 오류를 추정해보겠습니다.
- 과거 경험에 근거한 추정
- 이전 프로젝트에서 유사한 전자상거래 시스템을 테스트할 때, 주문 처리 모듈에서 주문이 중복으로 처리되는 오류가 발생한 적이 있었습니다. 이 경험을 바탕으로 이번 프로젝트에서도 주문 처리 모듈을 중점적으로 테스트하여 중복 주문 오류를 방지할 필요가 있습니다.
- 도메인 지식을 활용한 추정
- 전자상거래 시스템의 도메인에서는 결제 시스템이 중요합니다. 신용카드 결제 시스템의 경우, 유효하지 않은 카드 정보를 입력했을 때 거래가 거부되어야 합니다. 따라서 테스트 과정에서 이러한 유효성 검사를 강화하는 것이 중요할 것입니다.
- 유사 시나리오 기반 추정
- 이전 프로젝트에서는 특정 상품을 장바구니에 담고 결제 과정에서 장바구니가 비워지지 않는 오류가 발생한 적이 있습니다. 이러한 유사한 시나리오에서 배운 교훈을 토대로 이번 프로젝트에서는 장바구니와 결제 시스템을 함께 테스트하여 이러한 오류를 방지할 수 있습니다.
이러한 예시를 통해 오류 추정은 과거 경험, 도메인 지식 및 유사 시나리오를 활용하여 특정한 오류가 발생할 가능성을 미리 파악하고 대비할 수 있는 효과적인 방법임을 이해할 수 있습니다.
탐색적 테스트
탐색적 테스트는 테스트를 계획하는 대신 테스터가 시스템을 자유롭게 탐색하고 테스트 케이스를 실시간으로 작성하고 실행하는 방식의 테스트입니다. 이 방법은 미리 계획된 테스트 케이스보다는 테스터의 직관과 창의성에 의존합니다.
탐색적 테스트의 주요 특징은 다음과 같습니다
- 자율성과 유연성
- 테스터는 자유롭게 시스템을 탐색하며 테스트를 수행합니다. 특정한 테스트 계획이나 스크립트에 구속되지 않고 필요에 따라 테스트 케이스를 실시간으로 수정하거나 추가할 수 있습니다.
- 탐색적 휴리스틱 활용
- 테스터는 탐색적 휴리스틱을 사용하여 시스템을 조사하고 테스트를 수행합니다. 이는 테스터의 경험, 지식, 직관을 기반으로 테스트 케이스를 작성하고 실행하는 것을 의미합니다.
- 학습과 발견
- 탐색적 테스트는 시스템에 대한 학습과 오류 발견을 동시에 수행합니다. 테스트 과정에서 발견된 오류들은 실시간으로 기록되고 분석되어 개선에 활용될 수 있습니다.
- 유연한 범위 설정
- 탐색적 테스트는 테스터의 판단에 따라 테스트 범위를 조정할 수 있습니다. 특정 기능이나 영역에 집중할 수도 있고, 전체 시스템을 탐색할 수도 있습니다.
탐색적 테스트는 전통적인 테스트 방법론과 함께 사용되거나 독립적으로 사용될 수 있으며, 특히 변화가 빈번하거나 요구사항이 명확하지 않은 프로젝트에서 유용하게 활용될 수 있습니다.
'CSTS' 카테고리의 다른 글
testing method - regression test (0) | 2024.03.12 |
---|---|
testing method - software life cycle model & testing (0) | 2024.03.11 |
classification according to test design techniques - static testing (1) | 2024.02.13 |
classification by test type (0) | 2024.02.07 |
classification by test level (0) | 2024.02.02 |