소프트웨어를 실행하는 방식으로 테스트를 수행
요구 사항은 어떤 입력에 대한 기대 결과를 명시
입력을 넣었을 때 기대 결과와 다른 결과가 발생하는 경우
소프트웨어 결함이 있다고 판단
명세 기반 방법
프로그램의 내부 논리 구조를 참조하지 않고
사용자의 요구 명세나 설계 정보를 이용
시스템의 명세 정보를 얻을 수 있는 한 적용 대상에 제한이 없으며
테스트 전 과정에 걸쳐 사용 가능
구조 기반 방법
제어 흐름이나 자료 흐름 정보를 이용
프로그램의 내부 구조 정보를 기반으로 테스트 케이스를 설계
구조적 테스트, 화이트박스 테스트, 글래스 테스트
경험 기반 테스트
테스트 케이스 설계 X
도메인에 대한 테스터의 경험, 테스트 결과, 테스터의 직관을 주로 활용하여 테스트
오류 추정 , 탐색적 테스트
제어 흐름이나 자료 흐름 정보를 이용하여 테스트 케이스를 설계
프로그램의 내부 구조 정보를 기반으로 테스트 케이스를 설계

모든 문장 최소 한 번 실행
| 전체조건식 | 개별조건식 A | 개별조건식 B |
|---|---|---|
| F | T | F |
| F | F | T |
문장 커버리지 계산

문장 커버리지 장 단점

= 분기 커버리지
전체조건식 T and F
| 전체조건식 | 개별조건식 A | 개별조건식 B |
|---|---|---|
| F | T | F |
| T | T | T |
결정 커버리지 계산


개별조건식 각각 T and F
| 전체조건식 | 개별조건식 A | 개별조건식 B |
|---|---|---|
| F | T | F |
| F | F | T |
조건 커버리지 계산


결정 테스트와 조건 테스트를 모두 만족
| 전체조건식 | 개별조건식 A | 개별조건식 B |
|---|---|---|
| F | F | F |
| T | T | T |
조건/결정 커버리지 계산



개별조건식의 모든 조합식을 실행
| 전체조건식 | 개별조건식 A | 개별조건식 B |
|---|---|---|
| T | T | T |
| F | T | F |
| F | F | T |
| F | F | F |
문장 테스트, 결정 테스트, 조건 테스트 및 결정 조건 테스트를 모두 포용
다중 조건 커버리지 계산



명세 기반 테스트
= 블랙박스 테스트
= 기능 테스트
프로그램의 내부 논리 구조를 참조하지 않고
사용자의 요구사항 명세나 설계 정보 등을 이용하여 테스트 케이스를 개발
대상 시스템의 명세 정보를 얻을 수 있는 한, 적용 대상에 제한이 없음
개발 전 과정에 걸쳐 사용 가능 (단통시인)
명세 기반 테스트의 이점
프로그램 코드가 아닌
명세를 바탕으로 테스트 케이스를 설계하므로
규모가 큰 테스트에도 효과적
테스터가 구현 언어라든지 알고리즘 같은
구현에 관한 지식이 없어도 테스트를 수행가능
사용자 관점에서 테스트를 수행하기 때문에
효과적으로 결함을 검출
명세 결함(일관성이나 애매모호한 점)이 드러나는 기회
명세가 완성되는 순간 테스트 케이스들을 설계 가능
누락 결함(Missing function error) 검출가능성이 높아짐
Equivalence partitioning
테스트 케이스의 개수를 줄이기에 효과적인방법
소프트웨어 테스트의 근간을 이루는 방법
몇 개의 동등 클래스로 분할하여
각 클래스에서 하나의 값을 선택
유효하지 않은 입출력도 고려
동등분할 수행 절차
명세에서 입출력 식별
각 입력/출력 영역을 동등 클래스들로 분할
각 동등 클래스에서 하나의 대푯값을 선정
동등분할 수행 예시 01


동등분할 방법
One-to-One 동등 분할
입출력의 1 대 1 관계를 명시적 표시
[예시]

만약 프로그램이 이 테스트 케이스를 타당하게 입력으로 받아 처리한다면
만약 프로그램이 이들을 입력으로 받아들이지 않는다면
유효하지 않은 테스트 케이스를 설계하는 경우에는
한 번에 하나의 필드만 유효하지 않은 입력으로 구성
최소화 동등분할 방법
하나의 테스트 케이스에 여러 개의 동등분할 클래스 포함
One-to-One 동등 분할 방식보다 테스트 케이스의 수를 줄일수 있음
테스트 케이스는 One-to-One 방식으로 설계하고,
유효한 테스트 케이스는 최소화 동등 분할 방식을 이용하는 것도 방법

Boundary Value Analysis
입력 영역 경계 근처에 있는 값들을 이용하여 테스트 케이스를 설계
클래스의 경계와 경계 근처에 있는 값들을 사용하여 테스트 케이스를 설계
경곗값 부근에 있는 것을 테스트로 사용하여
결함 발견 효용성이 높음
경계값 분석 방법
2-value BVA
3-value BVA
경계값 분석 수행 절차
명세에서 입출력 식별
입출력 영역을 동등 클래스들로 분할
분할된 클래스들 경곗값 식별
경계값 분석 실행 (2-value BVA / 3-value BVA)
결과값에 대한 기대 출력을 명세로 구하여
테스트 케이스를 설계
경계값 분석 예시
Combinatorial test
조합테스트 방법
Each choice 테스트
각각 1개의 입력값에 대해 입력이 가능한 값을
최소한 1회 이상 사용하여 테스트
테스트 케이스 수가 매우 적은 편
여러 인자의 상호작용을 고려 X
페어와이즈 테스트
1개의 입력쌍(2개)에 대해 입력이 가능한 값을
최소한 1회 이상 사용하여 테스트
모든 입력에 대해 존재할 수 있는 모든 상호작용을 고려하지 않고
두 개의 입력 간에 가능한 모든 상호작용만을 고려
ALL combinations 테스트
Base choice 테스트
기반이 되는 조합 미리 선정하여 고정하고
고정하지 않은 나머지 입력값들 중에 한개만 변경하여 테스트
사용자의 관점에서 선택될 빈도가 가장 높고,
정상 동작할 수 있는 것을 선정
선정된 기반 테스트에서
하나의 인자에만 변경을 주며
나머지는 기반 테스트의 값으로 고정
조합테스트 절차
입력 식별
동등 클래스끼리 분할
적절한 조합 테스트 방법을 선정하여 입력값 조합
각 입력 조합에 대해 명세를 분석하여 기대 결과를 할당
Decision table test
각 규칙이 최소한 한 번은 테스트 될 수 있도록 테스트 케이스들을 생성
결정표는 조건과 행위를 기술하는 부분으로 구성

결정표 테스트 절차
모든 조건을 분석
모든 조건의 조합에 대한 행위를 결정
결정표 수립
가능하지 못한 조건의 조합은 배제
결정표 축약
결정표의 각 규칙이 최소한 한 번은 테스트될 수 있도록 테스트 케이스 생성



State-transition test
상태 전이도 (ex.형광등)

원 : 시스템 상태
검은 원 : 시스템의 시작점
화살표 : 상태 간의 전이
“/” 다음에 나오는 명령 : 시스템 행위
상태 전이 테스트 종류
상태 테스트(State test)
모든 상태를
최소한 한 번 방문하는 설계
단일 전이 테스트(Single transitions text, 0-switch 테스트)
모든 유효한 전이를
최소한 한 번 방문하는 설계
All transitions 테스트
유효한 전이+유효하지 않은 전이를
모두 최소한 한 번 방문하는 설계
다중 전이 테스트(Multiple transition test, N-switch text)
A->B->C->D->E
A->Z->C->D->E
두개의 루트가 있을때
A이면서 B인 조건을 만족하는 상황을 테스트 (복수 조건)
상태 전이 테스트 절차
상태 전이도 모델링
상태 전이도에서 전이 트리 도출
전이 트리에서 유효한 전이 경로에 대한 테스트 케이스 생성
유효하지 않은 전이에 대한 테스트 케이스 생성
상태 전이 테스트 예시

[절차1]

[절차2]

[절차3]

[절차4]

기존의 테스트 경험, 테스트 대상이 되는
시스템 및 해당 도메인에 대한 경험 등을 바탕으로 수행하는 테스트 방법
개발자가 범할 수 있는 실수를 추정하고
이에 따른 결함이 검출되도록 테스트 케이스를 설계
매우 직관적이고 상황에 따라 적합한 방식으로 수행되므로
일반화된 기법과 절차 정의 X.
명세 기반 테스트의
동등 분할이나 경곗값 분석 방법과 함께 사용 가능
테스터의 직관과 경험을 활용하여
결함이 발생할 것을 예측하여 테스트 하는 방법
테스트 대상에 대한 이해 필요
일반적인 구현 오류에 대한 지식 필요
과거 데이터 및 테스트 결과 평가가 있다면 참고 가능
테스트케이스 설계 X 상태로,
테스트 대상에 대한 이해, 테스트 케이스 설계, 테스트 실행을 한번에 병행
테스트 대상에 대한 이해를 바탕으로 즉석에서 테스트 케이스를 결정하고
문서화 없이 해당 테스트를 바로 수행
애자일 방법을 사용하는 웹 응용 시스템의 테스트에 적합
세션 기반 테스팅을 활용하여 테스트를 구조화