ㅈㄱㅈ/ㅊㄴㅅㄴ

테스트 설계기법

SBP 2025. 4. 26. 22:59
CSTS 테스트 설계 기법 상세

CSTS 자격증 시험: 테스트 설계 기법 상세

CSTS 자격증 시험에서 중요한 부분 중 하나는 효과적인 테스트 케이스를 설계하기 위한 다양한 기법들을 이해하고 적용하는 것입니다. 테스트 설계 기법은 크게 정적 기법과 동적 기법으로 나뉘며, 동적 기법은 다시 테스트 대상에 대한 정보 활용 방식에 따라 명세 기반, 구조 기반, 경험 기반 기법으로 세분화됩니다.

1. 정적 테스트 설계 기법 (Static Test Design Techniques)

소프트웨어를 실행하지 않고 요구사항, 설계 문서, 소스 코드 등의 산출물을 분석하여 결함을 찾는 데 중점을 둡니다.

  • 리뷰 (Review):
    소프트웨어 개발 산출물을 여러 사람이 검토하여 잠재적인 문제점, 불일치, 표준 위배 등을 식별하는 조직적인 활동입니다. 공식적인 절차에 따라 수행되는 인스펙션(Inspection), 비교적 비공식적인 워크쓰루(Walkthrough), 기술적인 내용을 검토하는 기술 리뷰(Technical Review), 경영진이 프로젝트 현황을 파악하는 관리 리뷰(Management Review) 등 다양한 형태가 있습니다. 개발 초기에 결함을 발견하여 수정 비용을 절감하는 데 효과적입니다.
  • 정적 분석 (Static Analysis):
    자동화된 도구를 사용하여 소스 코드의 문법 오류, 코딩 표준 준수 여부, 잠재적인 런타임 오류(예: 데드 코드, 메모리 누수) 등을 코드를 실행하지 않고 분석하는 기법입니다. 일관성 없는 코딩 스타일이나 복잡도 측정 등 코드의 품질 특성을 평가하는 데도 사용됩니다.

2. 동적 테스트 설계 기법 (Dynamic Test Design Techniques)

소프트웨어를 실행하여 실제 동작을 확인하고 예상 결과와 비교함으로써 결함을 찾는 기법입니다. 테스트 케이스 설계의 기반에 따라 다음과 같이 나뉩니다.

2.1. 명세 기반 테스트 기법 (Specification-based Testing) / 블랙박스 테스트 (Black-box Testing)

소프트웨어의 내부 구조나 구현 방식을 알지 못한 채 외부에서 관찰 가능한 동작이나 명세(요구사항, 설계 문서 등)를 기반으로 테스트 케이스를 설계합니다. 소프트웨어가 "무엇을" 수행하는지에 초점을 맞춥니다.

동등 분할 (Equivalence Partitioning)

유효하거나 유효하지 않은 입력값 또는 출력값의 도메인을 서로 동등하다고 판단되는 여러 개의 그룹(동등 클래스)으로 나눕니다. 각 동등 클래스에서 대표값 하나 또는 소수의 값을 선택하여 테스트 케이스로 사용함으로써 테스트 케이스의 수를 효과적으로 줄이면서도 많은 결함을 발견할 가능성을 높입니다.

경곗값 분석 (Boundary Value Analysis)

오류가 입력값 또는 출력값의 경계 근처에서 자주 발생한다는 경험에 기반한 기법입니다. 동등 분할에 의해 나누어진 각 동등 클래스의 경계값 자체와 경계값 바로 안팎의 값을 선택하여 테스트 케이스를 설계합니다. 동등 분할 기법과 함께 사용될 때 효과적입니다.

결정 테이블 테스트 (Decision Table Testing)

여러 조건의 다양한 조합에 따라 시스템이 어떤 동작을 수행해야 하는지를 나타내는 결정 테이블을 작성하고, 이 테이블을 기반으로 테스트 케이스를 도출하는 기법입니다. 복잡한 비즈니스 규칙이나 조건 논리를 테스트하는 데 유용합니다. 가능한 모든 조건 조합에 대한 테스트 시나리오를 체계적으로 파악할 수 있습니다.

상태 전이 테스트 (State Transition Testing)

시스템 또는 컴포넌트가 가질 수 있는 상태와 특정 이벤트 발생 시 상태가 어떻게 전이되는지를 모델링한 상태 전이 다이어그램이나 상태 테이블을 기반으로 테스트 케이스를 설계합니다. 유효하거나 유효하지 않은 상태 전이, 도달 불가능한 상태 등을 테스트하여 시스템의 상태 기반 동작 오류를 발견하는 데 사용됩니다.

유스케이스 테스트 (Use Case Testing)

사용자가 시스템과 상호작용하여 특정 목표를 달성하는 과정을 기술한 유스케이스 명세를 기반으로 테스트 케이스를 도출합니다. 시스템의 기능적인 경로를 실제 사용자 관점에서 테스트하는 데 중점을 둡니다. 기본 흐름과 대체 흐름을 포함하는 다양한 시나리오를 테스트할 수 있습니다.

2.2. 구조 기반 테스트 기법 (Structure-based Testing) / 화이트박스 테스트 (White-box Testing)

소프트웨어의 내부 코드 구조, 로직, 제어 흐름, 데이터 흐름 등을 분석하여 테스트 케이스를 설계합니다. 코드가 "어떻게" 구현되어 있는지에 초점을 맞추며, 특정 코드 구문이나 경로의 실행 여부를 기준으로 테스트 커버리지를 측정하고 관리합니다.

문장 커버리지 (Statement Coverage)

소스 코드 내의 실행 가능한 모든 문장(Statement)이 테스트 스위트에 의해 최소 한 번 이상 실행되도록 테스트 케이스를 설계하는 기법입니다. 가장 기본적인 구조 기반 커버리지 기준입니다.

결정 커버리지 (Decision Coverage) / 분기 커버리지 (Branch Coverage)

소스 코드 내의 모든 결정 지점(예: if 문, while 문)에서 가능한 모든 분기(참/거짓)가 테스트 스위트에 의해 최소 한 번 이상 실행되도록 테스트 케이스를 설계하는 기법입니다. 문장 커버리지보다 강력한 커버리지 기준을 제공합니다.

조건 커버리지 (Condition Coverage)

결정문 내의 각 개별 조건식(예: `a > 0` 또는 `b < 10`)이 테스트 스위트에 의해 최소 한 번은 참, 한 번은 거짓 값을 가지도록 테스트 케이스를 설계하는 기법입니다. 결정문 전체의 결과와는 독립적으로 각 개별 조건식의 평가에 초점을 맞춥니다.

결정/조건 커버리지 (Decision/Condition Coverage)

결정 커버리지 기준과 조건 커버리지 기준을 모두 만족하도록 테스트 케이스를 설계하는 기법입니다. 결정 커버리지와 조건 커버리지의 장점을 결합한 형태입니다.

다중 조건 커버리지 (Multiple Condition Coverage)

결정문 내의 모든 개별 조건식들의 가능한 모든 논리적인 조합이 테스트 스위트에 의해 한 번 이상 실행되도록 테스트 케이스를 설계하는 기법입니다. 가장 강력한 커버리지 기준 중 하나이지만, 필요한 테스트 케이스 수가 기하급수적으로 늘어날 수 있습니다.

경로 커버리지 (Path Coverage)

프로그램의 시작점부터 종료점까지 가능한 모든 독립적인 실행 경로가 테스트 스위트에 의해 한 번 이상 실행되도록 테스트 케이스를 설계하는 기법입니다. 이론적으로 가장 완벽한 커버리지이지만, 현실적으로 모든 경로를 테스트하는 것은 불가능한 경우가 많습니다.

2.3. 경험 기반 테스트 기법 (Experience-based Testing)

공식적인 명세나 코드 구조보다는 테스터의 지식, 경험, 직관, 그리고 이전에 발견된 결함에 대한 정보를 바탕으로 테스트 케이스를 설계하고 수행하는 기법입니다. 문서화되지 않은 영역이나 예상치 못한 시나리오에서 결함을 발견하는 데 유용할 수 있습니다.

오류 추정 (Error Guessing)

과거 경험, 일반적인 오류 발생 경향, 유사 시스템에서의 결함 정보 등을 바탕으로 소프트웨어에 결함이 존재할 가능성이 높은 부분을 예상하고, 해당 부분을 집중적으로 테스트하기 위한 테스트 케이스를 설계하는 기법입니다. 개발자가 흔히 저지르는 실수 유형을 파악하는 것이 중요합니다.

탐색적 테스트 (Exploratory Testing)

테스트 계획, 테스트 설계, 테스트 실행, 결과 분석 및 학습 활동이 동시에 진행되는 테스트 접근 방식입니다. 사전에 상세한 테스트 케이스를 작성하기보다는 테스터가 시스템을 직접 사용하고 탐색하면서 실시간으로 테스트 아이디어를 발전시키고 테스트를 수행합니다. 테스터의 역량과 창의성이 중요하며, 새로운 결함을 빠르게 발견하는 데 효과적일 수 있습니다. 종종 테스트 차터(Test Charter)와 함께 수행되어 테스트의 목표와 범위를 명확히 합니다.

체크리스트 기반 테스트 (Checklist-based Testing)

사전에 정의된 체크리스트(과거 프로젝트 경험, 도메인 지식, 표준 등에 기반)를 활용하여 테스트를 수행하는 기법입니다. 중요한 테스트 항목들을 놓치지 않고 일관성 있게 테스트하는 데 도움이 됩니다.

CSTS 자격증 시험에서는 이러한 테스트 설계 기법들의 개념, 적용 방법, 그리고 각 기법의 장단점을 명확히 이해하고 있어야 합니다. 또한 주어진 상황에 가장 적합한 테스트 설계 기법을 선택하고 적용할 수 있는 능력을 평가합니다.