Thief of Wealth
Published 2020. 7. 9. 15:52
12. 블랙박스 테스트 개발/QA

* 용어정리

요구사항: 사용자가 제품에 기대하는 기능 혹은 품질 특성

테스트 시나리오: 테스트 될 수 있는 기능, 테스트가 필요한 상황

테스트케이스: 입력 + 사전조건 => 예상출력+사후조건

테스트 절차서 : 테스트 케이스의 실행 절차

 

 

테스트 케이스 설계 예시

 

ex) 항공권 예약 시스템

 

요구조건

1) 국내선 예약이 가능해야 한다.

- 지역 입력이 가능해야 한다

- 출발 날짜를 선택할 수 있어야 한다.

- 만 2세~12세 소아의 탑승료는 성인의 50%여야 한다.

2) 국제선 예약이 가능해야 한다.

 

테스트시나리오

1) 하나의 도시에서 다른 도시로 왕복 비행을 할 경우

2) 공항이 없는 도시로 향하는 비행기표를 예약할 경우

3) 좌석이 없는 상태에서 비행기표를 예약할 경우

4) 어른 1명과 3세 아이를 예약할 경우

5) 마일리지로 예약할 경우

 

 

테스트 케이스

테스트 케이스 입력 사전조건 사후조건 예상출력
여행종류 출발도시 도착도시 출발일 복귀일
1 편도 서울 부산 2020.01.02 - 남은 좌석이 있어야 한다. 좌석이 하나 줄어들어야 한다. 예약 완료
2 왕복 서울 제주도 2020.03.02 2020.03.05      

 

 

테스트 절차

1) www.koreanair.co.kr에  접속한다.

2) 국내선 탭을 클릭한다.

3) 여행 종류를 선택한다.

4) 출발도시와 도착도시를 입력한다.

5) 출발일과 복귀일을 입력한다.

6) 예약완료 버튼을 누른다.

 

참고)

1개의 요구사항에는 n개의 테스트시나리오가 있을 수 있고

1개의 테스트시나리오에는 n개의 테스트 케이스가 있을 수 있고

n개의 테스트 케이스에 대하여 1개의 테스트 절차가 있을 수 있다.

 

 

=> 여기서 이제 테스트 케이스를 잘 설계해야한다.

모든 경우의 수의 테스트 케이스를 테스트 하자니 비용이 많이 들어 현실적으로 불가능하기 떄문이다.

 

즉, 충분한 테스트 커버리지를 유지하면서 테스트 개수를 줄이기 위한 방법이 필요하다.

 

테스트 케이스 설계 기법 분류

 

테스트

1) 정적테스트 (메모리에 프로그램을 올리지 않고 문서상으로 소스코드 상으로)

    - 정적분석

    - 리뷰

        - 인스펙션

        - 워크쓰루

 

2) 동적테스트 (코드를 메모리에 올려서 실행되는 테스트)

    - 명세기반 테스트

        - 동등 분할

        - 경계값 분석

        - 페어와이즈

        - 상태 전이

        - 결정테이블

 

    - 구조기반 테스트

        - 문장 커버리지

        - 분기 커버리지

        - 조건 커버리지

        - 조건/분기 커버리지

        - 다중조건 커버리지

 

    - 경험기반 테스트

        - 에러 추정

        - 탐색적 테스트

        - 체크리스트

        - Ad Hoc

 

 

 

블랙박스 테스트 vs  화이트박스 테스트

 

- 블랙박스 테스트 (명세기반 테스트, 경험기반 테스트)

* 소프트웨어 요구사항 또는 사용자 요구를 기반으로 하여 시스템을 검증

* 주로 소프트웨어 시스템의 행동에 대해 테스트 노력을 검증한다.

* 입력이 주어지고 기대한 결과가 나오면 테스트 성공이다.

 

- 화이트 박스 테스트 (구조기반 테스트)

* 소프트웨어 내부 구조와 동작을 검증하는 것에 집중 (주로 단위 테스트)

* 기본적으로 프로그래밍 언어에 대한 지식이 필수적이다.

* 입력이 주어지고 기대한 결과가 나오는지 확인할 뿐만 아니라 내부가 정확하게 동작하는 지도 테스트한다.

 

ex) 

명세 : 입력값이 짝수라면 그 값의 반을 출력하고 그렇지 않으면 입력 값 그대로를 출력하는 프로그램

 

int foo (int param) {

  int result;

  result = param/2;

  return result;

}

 

=> 모든 짝수에 대해서 올바르게 동작함

=> 화이트 박스 테스트를 통해 오류가 검출되지 않을 수 있다.

Why? : 화이트박스는 명세를 고려하지 않기 때문이다.

=> 블랙박스 테스트를 통해 오류가 검출될 확률이 높아진다.

 

ex)

명세: 입력을 그대로 출력하는 프로그램

 

void foo(int param){

  if(param < 1024) printf("%d", param);

  else printf("%d KB", param/124);

}

 

=> 1024보다 작은 모든 정수에 대해서는 올바르게 작동함

=> 블랙박스 테스트를 통해 오류가 검출되지 않을 수 있음.

=> 화이트박스 테스트를 통해 오류가 검출될 확률이 높아진다.

 

 

 

 

블랙박스 테스트란?

 

- 소프트웨어의 내부 구현 정보에 대한 지식없이 내부 코드 구조를 보지 않고 소프트웨어의 기능을 확인하는 테스트 

- 소프트웨어 요구사항 및 명세서를 기반으로 테스트

- 모든 종류의 소프트웨어 시스템을 테스트 가능하다.

- 내부 코드 구현에 대한 지식없이 입력과 출력에 집중하여 테스트

- 전체 소프트웨어 테스트 레벨에서 적용이 가능하다. (단위, 통합, 시스템, 인수 등)

 

 

블랙박스 테스트 케이스 설계 기법들

1) 동등클래스 분할

2) 경계 값 분석

3) 페어와이즈 테스트

4) 상태전이 테스트

5) 결정 테이블 테스트

 

 

 

1) 동등클래스 분할

: 프로그램의 입력 데이터를 동일한 동작이 예상되는 동등 클래스로 분할하고, 각 클래스로부터 대표값을 선택하여 테스트 케이스로 이용하는 방법.

 

ex) 점수를 입력하면 성적이 출력되는 프로그램.

점수 성적
90~100
80~89
70~79
60~69
0~59
그 외 에러

 

=> 입력 영역을 90~100, 80~89 ~~~ , 그외 이렇게 6개의 동등 클래스로 분할가능

=> 각 동등클래스 마다 하나 이상의 값을 선정한다. ex) 95,83,71,69,1,AA

=> 동등클래스 방법은 선정된 입력값에서 오류가 발생하면 클래스에 속한 다른 값에서도 오류가 발생한다는 점을 가정한다.

 

ex) 동등클래스 분할 예

- 입출력에 대한 유효한 값과 유효하지 않은 값.

- 음수, 양수, 0의 정수에 대한 숫자값

- 공백이거나 데이터가 있는 문자열 값.

- 공백이거나 데이터가 있는 리스트

- 파일이 존재하거나 없는 상태 또는 파일의 읽기,쓰기 등이 가능한 상태.

- 연도값이 2000년 이후 또는 이전 또는 날짜 표기가 연도만 있는지 월,일이 다 포함되어 있는지 등의 표기

- 달마다 요일의 날 수가 28,30,31일 등의 다른 표기

- 데이터 파일의 종류 (텍스트, 그래픽, 비디오 등)

- 파일의 입력 출력 위치 (하드드라이브, USB, CD-ROM)등.

 

 

2) 경계 값 분석.

: 동등 클래스에서 입력 값을 선정할 때, 경계 값을 포함하여 테스트 케이스를 도출하는 방법.

- 다수의 오류들이 입력영역의 경계에서 발생한다.

- 대부분의 경우 동등 클래스 분할과 함께 사용한다.

- 입력 혹은 사전 조건이 값의 범위로 주어지는 경우.

- 입력 조건이 몇 개의 값으로 주어지는 경우.

- 입력 조건이 파일, 리스트, 테이블과 같은 정렬된 집합 형태인 경우.

- 그외 개인의 독창성과 직관에 따라 경계에 해당하는 여러 값들을 찾아낸다.

 

3) 페어와이즈 테스트

: 페어와이즈 테스트는 모든 가능한 입력값들의 조합들을 테스트하는 대신 모든 짝들의 조합을 테스트하는 방법이다.

- 가능한 모든 입력 값들의 조합으로 테스트하는 것은 비현실적이다.

- 가능한 모든 입력값들의 조합과 비슷한 테스팅 효과를 얻을 수 있다.

- 대부분의 결함이 두 입력 값의 상호작용에 기인하므로, 가능한 모든 입력값의 조합을 테스트한 것과 비슷한 효과를 얻는다.

- 상대적으로 적은 양의 테스트 세트 구성이 용이하다.

- 입력 변수 개수와 입력 가능 값이 많을 수록 테스트 케이스 도출 복잡도가 높다.

- IPO알고리즘을 이용하여 테스트 케이스를 도출가능하다.

 

(1) 처음 두 입력 변수의 모든 쌍을 구한다.

(2) 그 외의 모든 입력 변수의 쌍의 집합을 구하고 이를 AP라고 한다.

(3) 처음 두 입력 변수의 쌍에, 그 다음 입력 변수를 하나씩 리스트하고 포함된 쌍을 AP에서 삭제한다.

(4) AP에서 가장 많은 짝을 제거할 수 있는 값을 할당한다. 모든 짝이 AP에서 삭제 될 때까지 반복한다.

 

 

4) 상태 전이 테스트

: 시스템의 상태 전이도를 기반으로 테스트 케이스를 도출하는 방법이다.

 

(1) 대상 시스템의 상태 전이도를 모델링한다.

(2) 상태 전이도로부터 전이 트리를 만든다.

(3) 전이 트리로부터 각 전이 경로를 테스트하는 테스트 케이스를 생성한다.

(4) 비정상적인 전이를 테스트하는 테스트케이스를 생성한다.

 

- 전이트리 만드는법

(1) 상태 전이도의 초기 상태를 루트 노드로 나타낸다.

(2) 루트 노드로부터 나오는 각 전이에 대해, 다음 상태에 해당하는 노드를 추가하고 간선으로 연결한다.

(3) 추가한 노드가 전이 트리에 이미 나와 있거나 종료 상태가 아니면, 위의 과정을 각 노드에 대해 수행한다.

(상태 간 전이가 루프를 형성하는 경우, 전이 트리에 표시하는 루프의 수에 따라 전이 트리가 확장될 수 있다.)

 

0-Switch-Level인지 1-Switch-Level인지에 따라서 다름 (책 참고)

비정상 테스트 케이스를 생성하는건 Switch-Level 과 상관없다.

 

 

5) 결정 테이블 테스트

: 입력 조건의 모든 조합에 대한 시스템의 액션을 고려하여 테스트 케이스를 도출하는 방법

- 복잡한 논리적 관계를 표현하기 좋음

- 누락된 요구사항 검사 시 용이하다. (빠진 요구사항을 체크가능함.)

 

작성법

(1) 시스템의 행동에 영향을 주는 조건을 분석한다.

(2) 조건은 왼쪽 위에, 행동은 왼쪽아래에 위치하는 테이블을 만든다.

(3) 모든 조건의 조합을 모두 나열하고, 그에 해당하는 행동을 기입한다.

(4) 일어날 수 없는 조건의 조합을 테이블에서 삭제한다. (불필요한거 삭제)

(5) 그외, 동일한 행동을 유발하는 조건의 조합을 찾아서 테스트 케이스를 줄인다. (중복 삭제)

 

 

 

 

 

'개발 > QA' 카테고리의 다른 글

14. 블랙박스 테스트 3  (0) 2020.07.10
13. 블랙박스 테스트2  (0) 2020.07.10
11. 화이트박스 테스트  (0) 2020.07.08
10. 테스트 실행  (0) 2020.07.08
9. 테스트 분석 및 설계  (0) 2020.07.08
profile on loading

Loading...