테스트케이스(Test Case)
태그 :
- 개념
- - 특정한 프로그램 경로를 실행 해 보거나, 특정 요구사항에 준수하는 지를 확인하기 위해 개발된 입력 값, 실행 조건, 그리고 예상된 결과의 집합 - 테스트하려는 시스템이 수행해야 하는 액션들로 구성되는 일련의 단계를 의미, 이러한 단계를 테스트 프로시저 또는 테스트 스크립트라고 함.
Ⅰ. SW 품질향상을 위한 테스트 도구 테스트 케이스의 개요
- 테스트 케이스 (Test Case)의 정의
- 특정한 프로그램 경로를 실행 해 보거나, 특정 요구사항에 준수하는 지를 확인하기 위해 개발된 입력 값, 실행 조건, 그리고 예상된 결과의 집합
- 테스트하려는 시스템이 수행해야 하는 액션들로 구성되는 일련의 단계를 의미, 이러한 단계를 테스트 프로시저 또는 테스트 스크립트라고 함.
나 . 테스트 케이스 설계의 중요성
- 테스트 오류 방지 : 테스트 수행의 많은 문제들은 테스트 케이스 설계의 미흡함에서 발생.
- 경제성 : 직관적으로 테스트를 수행 인력, 시간의 낭비 초래.
Ⅱ. 소프트웨어 테스트 케이스의 구성
- 소프트웨어 테스트 케이스의 구성 요소
항목 |
설명 |
식별자 (Identifier) |
항목 식별자, 일련 번호 |
테스트 항목 (Test Item) |
테스트할 모듈 또는 기능 |
입력 명세 (Input Specification) |
입력 값 또는 조건 |
출력 명세 (Output Specification) |
테스트 케이스 실행 시 기대되는 출력 값 결과 |
환경설정(Environmental Needs) |
테스트 수행할 때 필요한 하드웨어나 소프트웨어 환경 |
특수절차 요구(Special Procedure requirement) |
테스트 케이스 수행 시 특별히 요구되는 절차 |
의존성 기술 (Inter-case Dependencies) |
테스트 케이스간의 의존성 |
2. 소프트웨어 테스트 중 테스트 케이스의 위치
- 테스트 계획 à 테스트 설계 명세 à 테스트 케이스 명세
Ⅲ. 테스트 케이스 설계 유형 및 테스트 케이스 작성 방법
- 테스트 케이스 설계 유형
테스트 구분 |
테스트 기법 |
내용 |
블랙 박스 테스트 |
동등분할 |
- 여러 테스트 케이스 중 실제로 수행할 대표적인 테스트 케이스를 선택하는 방법 - 각 시험 사례 유형마다 최소의 시험 사례 작성 |
경계 값 분석 |
- 입력 값의 경계 값에서 오류 발생 가능성이 높다는 통계에 의한 케이스 작성 |
|
원인 결과 그래프 |
- 입력 데이터 간의 관계가 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용성 높은 시험 사례를 발견 - 동등 분할과 경계 값 분석의 단점인 입력환경의 복잡성을 완전하게 고려할 수 없는 점 보완 |
|
오류 예측 |
- 각 시험 기법이 놓치기 쉬운 오류들을 감각 및 경험으로 찾아보는 것 |
|
Pairwise 테스팅 |
- 가능한 모든 입력 값을 테스트하는 것은 비현실적 - 모든 입력 값들의 조합대신 모든 짝의 조합을 테스트 - 모든 입력 값을 테스트 하는 것과 비슷한 효과 |
|
화이트 박스 테스트 |
제어 구조 시험 |
- 프로그램의 논리적 복잡도를 측정한 후 이 척도에 따라 수행시킬 기본 경로들의 집합을 정의 - 시험영역을 최대화 시키며 독립 경로들의 자동 발견 |
|
루프 시험 |
- 프로그램 루프 구조에 국한해서 실시하는 시험 - 초기화 결함, 인덱싱 및 증가 결함, 루프의 경계에서 나타나는 경계 오류 발견 |
2. 테스트 케이스 작성 절차
- 테스트 계획 검토 → 자료 확보 → 위험 평가 및 우선순위 → 테스트 요구사항 정의 → 테스트 케이스 구조 설계 → 테스트 방법 결정 → 테스트 케이스 정의 → 테스트 케이스 타당성 검토 → 테스트 수행
3. 블랙박스 테스트와 화이트 박스 테스트의 비교
- 공통점
동적 테스트 기법 |
- 원시코드를 수행시켜 오류를 찾는 방법, 프로그램을 통한 테스트 수행 |
품질 향상 |
- 원시 코드의 품질 향상 - 원시 코드 시스템 내부 논리(화이트 박스), 성능 및 IF (블랙 박스) 중심 체크 |
상호보완 |
- 내부 로직의 정확성은 화이트 박스, IF 정확성은 블랙박스로 동시병행 수행을 통해 상호보완 |
- 차이점
비교항목 |
화이트 박스 테스트 |
블랙 박스 테스트 |
분류관점 |
개발자 중심 내부 논리경로 위주, 알고리즘 위주 구현 기반 |
사용자 중심 데이터 위주 입출력 위주 명세 기반 |
주요 테스트 |
구조, 모듈 테스트 |
기능테스트, IO 테스트 |
테스트 기법 |
제어구조, 루프제어, 경로 시험, 결정조건 |
동등 분할, 경계값 분석, 원인결과 그래프, 오류 예측 |
테스트 포인트 |
프로그램 문장 및 라인 영역, 분기영역, 조건 영역 확인 |
테스트 오라클 (입출력에 대한 올바른 예상 출력) 필요 |
결함 형태 |
초기화 결함 런타임 메모리 Leak 인덱싱 및 증가 결함 |
부정확하거나 누락기능 성능결함, IF 오류 자료구조나 외부 DB 접근 오류 |
Ⅳ. 코드에 대한 테스트 케이스
- 제어 흐름도
2. 테스트 경로
가. Path1 : 1 → A → 2 → B → A → 3 → B → 5
나. Path2 : 1 → A → 2 → B → A → 4 → B → 5
다. Path3 : 1→ A → 3 → B → 5
라. Path4 : 1 → A → 4 → B → 5
3. 테스트 경로에 의한 테스트 케이스
가. Path1
단 계 |
입력 |
예상결과 |
1: SelectPlayIndex |
Index = 3 |
- |
A: Switch(CheckFileType) |
- |
Index != end |
2: PlayMusic |
- |
- |
B: index!=end&& stopOption != YES |
- |
(Index != end stopOption != YES) = TRUE index++ |
A: Switch(CheckFileType) |
- |
Index = end |
3: PlayMusic stopPlay=YES |
- |
- |
B: index!=end&& stopOption != YES |
- |
(index != end && stopOption != YES) = FALSE |
5: StopPlay |
- |
종료 |
나. Path2
단 계 |
입력 |
예상결과 |
1: SelectPlayIndex |
Index = 1 or 2 |
- |
A: Switch(CheckFileType) |
- |
Index != end |
2: PlayMusic |
- |
- |
B: index!=end&& stopOption != YES |
- |
(Index != end stopOption != YES) = TRUE index++ |
A: Switch(CheckFileType) |
Index = 0 |
- |
4: DisplayErr |
- |
DisplayErr stopOption = YES |
B: index!=end&& stopOption != YES |
- |
(index != end && stopOption != YES) = FALSE |
5: StopPlay` |
- |
종료 |
다. Path3
단 계 |
입력 |
예상결과 |
1: SelectPlayIndex |
Index=4 |
- |
A: Switch(CheckFileType) |
- |
Index = end |
3: PlayMusic stopPlay=YES |
- |
Index = end stopOption = YES index++ |
B: index!=end&& stopOption != YES |
- |
(index != end && stopOption != YES) = FALSE |
5: StopPlay |
- |
종료 |
라. Path4
단 계 |
입력 |
예상결과 |
1: SelectPlayIndex |
Index = 0 |
- |
A: Switch(CheckFileType) |
- |
Index = 0 |
4: DisplayErr |
- |
DisplayErr stopOption = YES |
B: index!=end&& stopOption != YES |
- |
index != end && stopOption != YES) = FALSE |
5: StopPlay |
- |
종료 |