테스트 설계기법
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)
결정 커버리지 (Decision Coverage) / 분기 커버리지 (Branch Coverage)
조건 커버리지 (Condition Coverage)
결정/조건 커버리지 (Decision/Condition Coverage)
다중 조건 커버리지 (Multiple Condition Coverage)
경로 커버리지 (Path Coverage)
2.3. 경험 기반 테스트 기법 (Experience-based Testing)
공식적인 명세나 코드 구조보다는 테스터의 지식, 경험, 직관, 그리고 이전에 발견된 결함에 대한 정보를 바탕으로 테스트 케이스를 설계하고 수행하는 기법입니다. 문서화되지 않은 영역이나 예상치 못한 시나리오에서 결함을 발견하는 데 유용할 수 있습니다.
오류 추정 (Error Guessing)
탐색적 테스트 (Exploratory Testing)
체크리스트 기반 테스트 (Checklist-based Testing)
CSTS 자격증 시험에서는 이러한 테스트 설계 기법들의 개념, 적용 방법, 그리고 각 기법의 장단점을 명확히 이해하고 있어야 합니다. 또한 주어진 상황에 가장 적합한 테스트 설계 기법을 선택하고 적용할 수 있는 능력을 평가합니다.