제 4장 테스트 기법
제 4장 테스트 기법
4.1 테스트 기법의 종류
테스트 기법의 목적은 테스트 컨디션, 케이스, 데이터 식별을 지원하는 것이다. 테스트 기법의 선택은 다음과 같은 여러 요소를 기반으로 이루어진다.
컴포넌트, 시스템의 복잡도, 규제, 요구사항, 리스크 수준, 테스터의 지식과 역량, 사용 가능한 도구, 시간과 예산, 소프트웨어 개발 수명주기 모델 등
일부 기법은 특정 상황 및 레벨에 적합한 반면, 모든 테스트 레벨에 적합한 기법도 있다. 테스트 케이스 작성시 다양한 테스트 기법을 조합하여 사용한다. 테스트 기법의 사용은 비공식적 형식부터 매우 공식적인 형식까지 다양핳다. 적절한 수준의 공식성은 테스트 및 개발 프로세스의 성숙도, 시간, 요구사항 등 테스팅의 정황에 따라 결정된다.
4.1.1 테스트 기법의 종류와 특성
블랙박스 테스트 기법 (행위 기법 또는 행위 기반 기법)은 적절한 테스트 베이시스에 대한 분석을 기반으로 한다. 이 기법은 기능, 비기능 테스팅에 모두 적용할 수 있다. 블랙박스 기법은 테스트 대상 내부 구조를 고려하지 않고, 입력-출력에 집중한다.
화이트박스 테스트 기법 (구조 기법 또는 구조 기반 기법)은 아키텍처, 내부 구조, 대상 코드 분석을 기반으로 한다. 화이트박스 기법은 테스트 대상의 내부 구조와 처리에 집중한다.
경험 기반 테스트 기법은 개발자-테스터-사용자 경험을 활용해 테스트를 설계, 구현, 실행한다. 이 기법은 블랙박스 + 화이트박스 테스트 기법 결합해 사용한다.
블랙박스 테스트 기법의 일반적인 특징
테스트 컨디션, 케이스, 데이터는 소프트웨어 요구사항, 명세서, 유스케이스, 사용자 스토리와 같은 테스트 베이시스로부터 도출한다.
테스트 케이스는 요구사항과 요구사항 구현 결과물 간 차이와 편차를 식별하는 데 사용한다.
커버리지는 테스트 베이시스에서 테스트 된 항목과 기법을 기반으로 측정한다.
화이트박스 테스트 기법의 일반적인 특성
테스트 컨디션, 케이스, 데이터는 코드, 소프트웨어 아키텍처, 설계 또는 소프트웨어 구조와 관련된 기타 정보를 포함한 테스트 베이시스로부터 도출한다.
커버리지는 선택한 구조 내 테스트 항목과 베이시스에 적용된 기법을 기준으로 측정한다.
경험 기반 테스트 기법의 일반적인 특성
테스트 컨디션, 케이스, 데이터는 개발자나 테스터 등 이해관계자의 지식과 경험과 같은 테스트 베이시스로부터 도출한다.
4.2 블랙박스 테스트 기법
4.2.1 동등 분할 (Equivalence Partitioning)
동등 분할은 특정 파티션(partitions)혹은 클래스의 모든 변수는 동일한 방식으로 처리된다는 가정으로 데이터를 분할한다. 유효한 값, 비 유효한 값 모두에 대해 동등 분할을 구성할 수 있다.
유효값이란 컴포넌트나 시스템에 입력되는 값이다. 유효한 값을 포함하는 동등한 파티션을 '유효 동등 분할' 이라고 한다.
비유효값이란 컴포넌트나 시스템이 거부하는 값이다. 유효하지 않은 값을 포함하는 동등한 파티션을 '비유효 동등 분할'이라고 한다.
분할은 입력, 출력, 내부, 시간관련 값, 인터페이스 매개변수를 포함해 테스트 대상과 관련된 모든 데이터 요소에 대해 식별 가능
필요한 경우 모든 파티션은 하위 파티션으로 나눌 수 있다.
모든 값은 동등 분할에 포함되어야 하며, 하나의 값은 하나의 동등 분할에 속한다.
비유효 동등 분할을 테스트 케이스로 만들 때 장애가 마스크에 가려지는 것을 방지하기 위해 개별 테스트 해야한다. 동시에 여러 장애가 발생할 경우 겉으로 드러나는 하나의 장애로 나머지가 인식되지 않아 장애가 가려지는 경우가 발생한다.
동등 분할 기법으로 100% 커버리지 달성하기 위해 식별한 모든 분할의 각 분할에서 최소 한 개의 값을 사용해 테스트 케이스를 작성해야 한다. 동등 분할 커버리지는 백분율로 표기하며, 최소 한 개의 값으로 테스트한 동등 분할 수를 식별한 모든 동등 분할 수로 나눠 계산한다. 동등 분할은 모든 테스트 레벨에 적용할 수 있다.
4.2.2 경계값 분석 (BVA, boundary value analysis)
동든 분할의 확장 형태로 각 파티션이 순서화되어 숫자, 연속 데이터로 구성된 경우에만 적용할 수 있다. 분할의 최소/최대 값이 해당 분할의 경계값이 된다.
ex) 입력 방법을 키패트로 제한. 입력 유효 범위는 1에서 5까지. 따라서 3가지 동등 분할이 준재. 비유효, 유효, 비유효. 분할의 경계값은 1과 5. 비유효 경계값은 각각 6과 0.
당연히 동등 분할 경계에서 동작이 중간 값보다 잘못된 확률이 높다. 경계값 분석과 테스팅을 통해 소프트웨어 결함을 식별할 수 있다. 경계값 분석은 모든 테스트 레벨에 적용할 수 있다. 이 기법은 일반적으로 숫자와 연관된 요구사항을 테스트하는 데 적용된다.
4.2.3 결정 테이블 테스팅 (Decision Table Testing)
결정 테이블은 시스템이 구현해야 하는 복잡한 비즈니스 규칙을 기록하기에 좋은 방법. 테스터는 시스템의 조건(입력)과 예상 동작(출력)을 식별한다. 이것은 테이블의 행을 형성해 일반적으로 조건은 위에 기대결과는 아래에 배치한다. 각 열은 하나의 결정 규칙으로 특정 조건의 고유한 조합과 기대 결과로 정의하고, 참 또는 거짓으로 표기한다.
결정테이블의 일반적인 표기법
Y, N, -(NA) 조건의 값이 중요하지 않다는 것을 의미
기대 결과
X 행동이 일어난다는 것을 의미 (Y,T,1 ,,)
공백, 행동이 일어나지 않는다는 것을 의미
전체 결정 테이블엔 모든 조건 조합을 초함하는 테스트 사례가 있다. 결과에 영향을 미치지 않은 조합 등을 삭제하면 테스트 케이스 수가 상당히 줄어들 수 있다. 결정 테이블 장점은 중요한 모든 조건 조합을 식별하는 데 도움이 된다는 것. 요구사항 누락된 부분을 찾는데 도움이 된다. 이 역시 모든 테스트 레벨에 적용할 수 있다.
4.2.4 상태 전이 테스팅 (State Transition Testing)
컴포넌트나 시스템은 현재 조건이나 기존 이력에 따라 다르게 반응한다. '기존 이력'은 '상태'라는 개념을 활용해 요약한다. 상태전이 다이어그램은 소프트웨어의 가능한 상태뿐만 아니라 소프트웨어가 상태 간 어떻게 진입하고 빠져나오는 지 전이 방법을 보여준다.
상태 전이 테이블은 상태 간 모두 전이뿐만 아니라, 전이 관련 이벤트, 결과 조치를 보여준다. 일반적으로 유효한 전이만 보여주며, 비유효 전이는 표시하지 않는다. 테스트 상태의 일반적 순서를 커버하거나, 모든 상태를 실행하거나 특정 상태 전이 순서를 실행하거나 불가능한 상태 전이를 테스트하도록 설계할 수 있다.
메뉴 기반 애플리케이션이나 임베디드 업계에서 널리 사용하고 있다. 상태의 개념은 추상적이다.
4.2.5 유스케이스 테스팅 (Use Case Testing)
유스케이스에서 테스트를 도출할 수 있으며, 소프트웨어 항목 간 상호작용을 설계하는 특정 방법이다. 유스케이스는 소프트웨어 기능에 대한 요구사항을 통합한다.
각 유스케이스는 대상이 하나 이상의 액터와 협력해 수행할 수 있는 동작을 명시한다. 상호작용과 활동으로 설명하기도 하며, 적절한 경우 사전조건, 사후조건 및 자연어로 설명할 수도 있다. 유스케이스엔 기본 동작의 변형이 포함된다. (예외 동작 및 오류 처리)
4.3 화이트 박스 테스트 기법
테스트 대상의 내부 구조를 기반으로 하며 모든 테스트 레벨에서 적용할 수 있지만, 이 절에서 언급하는 두 가지 코드 관련 기법은 단위 테스트 레벨에서 가장 일반적으료 사용한다.
4.3.1 구문 테스팅과 커버리지
구문 테스팅은 코드의 잠재적 실행 가능한 구문을 실행한다. 커버리지는 백분율로 계산하며 테스트 실행 구문 수를 테스트 대상 모든 실행 가능 구문 수로 나누어 계산한다.
4.3.2 결정 테스팅과 커버리지
결정 테스팅은 코드에 존재하는 결정문을 실행하고 결과에 따라 실행되는 코드를 테스트한다. 이를 달성하기 위해 테스트 케이스는 결정문에서 시작되는 제어 흐름을 따라 실행된다.
4.3.3 구문 및 결정 테스팅의 가치
100% 구문 커버리지를 달성하면 코드에 존재하는 모든 실행 가능한 구문을 최소 한 번씩은 테스트했다는 것을 의미하지만, 모든 결정 로직을 테스트했다는 것을 보장하지 않는다.
구문 커버리지는 다른 테스트에 의해 실행되지 않은 코드 결함을 찾는 데 도움이 된다. 결정 커버리지는 다른 테스트가 참과 거짓 결과 모두를 테스트하지 않은 결함을 찾는데 도움이 된다. 100% 결정 커버리지는 100% 구문 커버리지를 보장하지만, 반대의 경우는 성립하지 않는다.
4.4 경험 기반 테스트 기법
테스터의 기술 역량과 직관 그리고 유사한 어플리케이션과 기술에 대한 경험을 기반으로 도출. 체계적인 다른 기법으로 찾기 어려운 테스트를 식별하는 데 도움이 된다. 커버리지 평가엔 어려우며 측정 불가할 수도 있다.
4.4.1 오류 추정
테스터의 지식을 기반으로 오류,걸함 및 장애 발생을 예측하는 기술
어플리케이션 과거 동작
발생하기 쉬운 오류의 유형
다른 어플리케이션에서 발생한 장애
오류 추정 기법은 발생 가능한 오류, 결함, 장애 목록을 작성하고 원인이 되는 결함을 노출하는 테스트를 설계하는 것이다. 이런 오류, 결함, 장애 목록은 지식을 기반으로 작성할 수 있다.
4.4.2 탐색적 테스팅
비공식 테스트를 실행 중에 동적으로 설계, 시행, 기록하고 평가한다. 테스트 결과는 컴포넌트나 시스템에 대해 더 많이 학습하고, 더 많은 테스트가 필요한 영역에 대한 테스트를 작성하는 데 활용한다.
세션 기반 테스팅을 사용하여 활동을 구성하기도 하며, 정해진 시한동안 수행하며 테스트 목적이 포함된 차터를 활용해 방향을 설정한다. 세션 시트에 수행 단계외 발견 사항을 기록한다.
시간적 압박이 있을 때 가장 유용하며 다른 공식 테스팅 기법 보완하는 데도 유용하다. 다른 블랙박스, 화이트박스, 경험 기반 기법과 통합하여 사용할 수 있다.
4.4.3 체크리스트 기반 테스팅
테스트 컨디션을 커버하기 위해 테스터가 새로운 체크리스트를 작성하거나 확장한다. 기능 및 비기능 테스팅을 포함한 다양한 테스트 유형을 지원하기 위해 작성할 수 있다. 이런 체크리스트는 상위 수준으로 작성되기에 어느 정도 가변성이 있고, 커버리지가 늘 순 있지만 재현 가능성은 줄어들 수 있다.