//구글콘솔 광고 추가가
들어가기 전 알아둬야 할 4.2 용어 설명, 4.3 용어 설명
: 이해에 중점. 부족하면 용어설명 글 참고.
동등분할 테스트 정의 및 원리 :
- 테스트 항목의 입력과 출력이 여러 개의 독립된 영역으로 구분되는 경우에 적용.
- 동일한 영억 내에서는 어떠한 값을 선택해도 결과가 항상 같다는 원리 이용.
- 모든 영역에서 최소 하나 이상의 (대표) 값을 선택해 테스트.
ex> 배터리 용량 테스트, 성적 학점 결과 60점 밑 F, 70점 밑 D,... C, B, A.

경계값 분석 : 2개 선택, 3개 선택이 있음.
- 2 value일 경우 최댓값과 최솟값의 바로 밖(1,10이면 0.9, 1, 10, 10.1).
- 3 value일 경우 최대값과 최소값의 안, 밖(1, 10이면 0.9, 1, 1.1, 9.9, 10, 10.1)

결정 테스트는 모순되는 규칙을 찾을 수 있어야 함.

구문 테스팅 : 테스트 케이스가 구문을 실행하도록 설계하는 화이트박스 테스트 설계 기법.
결정 테스팅 : 테스트 케이스가 결정 결과값을 실행하도록 설계하는 화이트박스 테스트 기법.
* 결정 테이블 테스팅은 블랙박스 설계 기법(테스트 케이스가 결정 테이블에 표시된 조건과 결과 행위 조합을 실행하도록 설계)
다중 조건 테스팅 : 테스트 케이스가 원자 조건의 결과 조합을 실행하도록 설계된 화이트박스 테스트 기법.
조건 테스팅 : 테스트 케이스가 원자 조건의 결과를 실행하도록 설계된 화이트박스 테스트 기법.

분기 테스팅 : 프로그램을 제어 흐름 그래프로 변환했을 때 제어 흐름 그래프의 모든 간선을 최소한 한 번은 실행하는 테스트 케이스가 테스트 케이스 집합에 포함되도록 요구. 분기 커버리지를 만족하면 문장 커버리지를 만족함(반대로는 안돼.) - 모든 간선 실행 시 모든 노드를 실행하기 때문.

슈도 코드(== 의사 코드) : 프로그램을 작성할 때 각 모듈이 작동하는 논리를 표현하기 위한 언어.
개념 : 프로그램 코드를 작성할 때 사용하기 위해, 프로그램의 진행 과정을 단계별로 기록해 놓은 것. 알고리즘이 수행될 내용을 인간의 언어로 간략하게 설명해 놓은 것을 말한다. (pseudo(가짜의, 유사) + code)

 

4.2 블랙박스 테스트 기법
많이 사용되는 블랙박스 테스트 기법 4가지
  • 동등 분할
  • 경계값 분석
  • 결정 테이블 테스팅
  • 상태 전이 테스팅
4.2.1 동등 분할
동등 분할 : 
- 테스트 대상이 하나의 분할(== 동등 분할)에 포함된 모든 요소를 동일한 방식으로 처리할 것이라는 가정하에 데이터를 분할 단위로 나눈다.
근거 이론: 동등 분할에 속한 특정 값을 테스트하는 테스트 케이스로 결함을 식별할 수 있다면, 같은 동등 분할의 다른 어떤 값을 테스트하는 테스트 케이스라도 해당 결함을 식별할 수 있어야 한다는 것.
>> 따라서 각 분할에 대해 하나의 테스트만 수행하면 충분하다.
- 입력, 출력, 형상 항목, 내부 값, 시간 관련 값, 인터페이스 매개변수 등 테스트 대상과 관련된 모든 데어터 요소에 대해 식별할 수 있다. 분할은 연속적이거나, 연속적이지 않을 수도 있으며, 정렬돼 있거나, 유한 또는 무한일 수도 있다. 분할은 서로 겹치지 않아야 하며, 값이 없는 공집합일 수는 없다.
- 테스트 대상이 단순하다면 동등 분할을 적용하기가 쉬울 수도 있지만 실제로는 테스트 대상이 다양한 값을 어떻게 처리하는지 이해하기 어려울 때가 많아서 분할 식별은 신중하게 해야 한다.

유효 분할 : 유효한 값을 포함하는 분할.
비유효 분할 : 유효하지 않은 값을 포함하는 분할.
!! 유효한 값과 유효하지 않은 값의 정의는 팀과 조직마다 다를 수 있다. !!
>> 테스트 대상이 처리해야 하는 값 또는 명세에 처리가 정의된 값을 유효값으로 해석가능. 비유효 값은 테스트 대상이 무시하거나 거부해야 하는 값, 또는 테스트 대상 명세에 처리 방법이 정의되어 있지 않은 값으로 해석할 수 있음.

동등 분할에서 커버리지 항목은 각 분할이 된다!
>> 이 기법으로 100% 커버리지를 달성하려면 테스트 케이스로 각 분할을 최소 한 번씩 다뤄서 식별한 모든 분할(비유효 분할 포함)이 실행되도록 해야 함.
>> 커버리지는 하나 이상의 테스트 케이스로 실행한 분할 수를, 식별한 총 분할 수로 나눈 값으로 측정하며 백분율로 표시함.

대부분의 테스트 대상은 여러 분할 집합을 가지고 있기 때문에 하나의 테스트 케이스는 여러 분할 집합에 속한 분할을 다루게 된다. 분할 집합이 다수인 경우 가장 간단한 커버리지 기준을 이치 초이스 커버리라고 한다.
이치 초이스 커버리지는 테스트 케이스가 모든 분할 집합의 각 분할을 최소 한 번은 실행할 것을 요구하며, 분할의 조합을 고려하지 않는다.

 

4.2.2 경계값 분석
경계값 분석 : 동등 분할의 경계 실행을 기반으로 하는 기법. 정렬된 분할에만 사용가능. 분할의 최솟값과 최댓값이 경계값이 됨. 경계값 분석에서 두 값이 같은 분할에 속하는 경우, 둘 사이의 모든 값도 해당 분할에 속해야 함.

분할의 경계에 있는 값을 개발자가 다룰 때 오류를 범할 가능성이 높기 때문에 경계값 분석은 분할의 경계에 있는 값에 초점을 두게 됨.
>> 경계값 분석으로 많이 찾는 결함 : 구현된 경계가 의도한 위치보다 위나 아래에 잘못 배치됐거나 아예 누락된 결함.

실러버스에서 다루는 경계값 분석 2가지 유형 - 두 개 선택(2-value), 세 개 선택(3-value) 경계값 분석.
>> 100% 커버리지 달성을 위해 실행해야 하는 경계별 커버리지 항목의 수에서 차이가 남.
두 개 선택 경계값 분석 - 각 경계값에 대해 두 개의 커버리지 항목을 도출.
- 경계값과 인접 분할에 속한 가장 가까운 값이 커버리지 항목.
- 100% 커버리지를 달성하려면, 테스트 케이스로 모든 커버리지 항목, 즉 식별한 모든 경계값을 실행해야 한다.
- 커버리지는 실행한 경계값의 수를 식별한 경계값의 총수로 나눈 값으로 백분율로 표시한다.
세 개 선택 경계값 분석 - 각 경계값에 대해 세 개의 커버리지 항목을 도출.
- 경계값과 이웃한 양쪽의 값 모두가 커버리지 항목.
>> 세 개 선택 경계값 분석에서는 경계값이 아닌 커버리지 항목도 있을 수 있음.
- 100% 커버리지를 달성하려면, 테스트 케이스로 모든 커버리지 항목, 즉 식별한 경계값과 그 이웃 값을 실행해야 한다.
- 커버리지는 실행한 경계값과 이웃한 값의 수를, 식별한 경계값과 이웃 값의 총수로 나눈 값으로 측정하며 백분율로 표시한다.
세 개 선택 경계값 분석은 두개 선택 경계값 분석으로 발견하지 못한 결함을 식별할 수 있으므로 두개 선택 경계값 분석보다 더 엄격하다고 할 수 있다.

 

4.2.3 결정 테이블 테스팅
결정 테이블 : 다중 조건 조합으로 달라지는 결과를 나타내는 시스템 요구사항이 제대로 구현되었는지 테스트하는 데 사용. 비즈니스 규칙과 같은 복잡한 논리를 기록하는 효과적인 방법.

결정 테이블을 만들 때 조건들과 그에 따른 시스템의 동작 결과를 정의하며 이것이 테이블의 행을 구성한다. 열은 각각 하나의 결정 규칙을 나타내며, 어떤 고유한 조건 조합을 연관 동작과 함께 정의한다.

제한-입력 결정 테이블 : 모든 조건과 동작 결괏값(관련 없거나 실행 불가능한 값 제외)을 부울값으로 표시.
확장-입력 결정 테이블 : 조건 및 동작 결괏값의 일부 또는 전부가 복수의 값(ex> 숫자 범위, 동등 분할, 불연속 값)을 취할 수 있다.

< 조건의 표기법 >
▶ T : 참- 조건이 충족 O. 
▶ F : 거짓- 조건 충족 X.
▶ - : 조건값이 결과에 영향 X.
▶ N/A : 해당 규칙에서 조건이 실행 불가능함을 의미.
< 결과 동작 >
▶ X : 동작이 발생해야 함을 의미.
▶ 공백 : 동작이 발생하지 않아야 함을 의미.

전체 결정 테이블에는 모든 조건 조합을 포함할 수 있는 충분한 열이 있다. 실현 불가능한 조건 조합열을 삭제해 테이블을 더 단순화할 수 있다. 일부 조건이 결과에 영향을 미치지 않는 열들을 하나로 병합해 테이블을 최소화할 수 있다.
결정 테이블 테스팅에서 커버리지 항목은 실현 가능한 조건 조합을 가진 열이 된다. 이 기법으로 100% 커버리지를 달성하려면, 테스트 케이스가 이런 열을 모두 실행해야 한다.
커버리지는 실행된 열의 수를 실행 가능한 열의 총수로 나눈 값으로 측정하며 백분율로 표시한다.

결정 테이블 테스팅의 강점 :
>> 간과했을 수도 있는 조합을 포함한 모든 조건 조합을 식별하는 체계적인 방법을 제공한다는 점.
>> 누락되거나 모순되는 요구사항을 찾는 데 도움.
결정 테이블 테스팅의 단점 :
>> 조건의 수에 따라 규칙의 수는 기하급수적으로 늘어나기 때문에, 조건이 많으면 모든 결정 규칙을 실행하는 데 오랜 시간이 걸릴 수 있음.
>> 보완 : 실행해야 하는 규칙의 수를 줄이기 위해 결정 테이블을 최소화하거나, 리스크 기반 접근법을 사용. 

 

4.2.4 상태 전이 테스팅
상태 전이 테스팅 : 가능한 상태와 유효한 상태 전이를 표시해 시스템 동작을 모델링.
전이는 하나의 이벤트에 의해 발생, 별도의 가드 조건이 있을 수 있다. 즉각적인 것으로 간주되며 가끔 소프트웨어의 어떤 동작으로 연결되기도 함.
< 전이를 표시하는 형식 >
: "이벤트 [가드 조건] /동작". 가드 조건과 동작이 없거나 테스터와 관련 없는 경우 생략 가능.

상태 테이블은 상태 전이 다이어그램을 다르게 표현한 모델.
- 행은 상태를 나타내고, 열은 이벤트(가드 조건이 있다면 함께)를 나타낸다. 테이블의 각 항목은 전이를 나타내며, 목표 상태는 물론 가드 조건, 정의된 경우에는 결과 동작도 포함된다.
- 상태 테이블은 유효하지 않은 전이를 빈 항목으로 명확하게 보여준다.

상태 전이 다이어그램이나 상태 테이블을 기반으로 하는 테스트 케이스는 보통 일련의 이벤트 순서와 그 결과로 생기는 상태 변화로 표현된다. 하나의 테스트 케이스는 대부분의 경우 여러 개의 상태 전이를 포함.

< 상태 전이 테스팅의 세 가지 커버리지 측정 기준 >
모든 상태 커버리지 커버리지 항목 : 상태들.
- 100% 달성하려면 테스트 케이스로 모든 상태를 확인해야 함.
- 커버리지는 확인한 상태 수를 상태 총수로 나눈 값으로 측정하고 백분율 표시.
유효 전이 커버리지
(가장 널리 사용하는 커버리지 조건)
커버리지 항목 : 유효 전이.
- 100% 달성하려면 테스트 케이스가 모든 유효 전이를 실행해야 함.
- 커버리지는 실행된 유효 전이 수를 총 유효전이 수로 나눈 값으로 측정하고 백분율로 표시.
모든 전이 커버리지 커버리지 항목 : 상태 테이블에 표시된 모든 전이들.
- 100%를 달성하려면 테스트 케이스로 모든 유효 전이를 실행하고, 유효하지 않은 비 유효 전이의 실행도 시도해야 함.
- 커버리지는 실행된 테스트 케이스로 수행하거나, 커버하려고 시도한 유효 및 비 유효 전이 수를 총 유효 및 비유효 전이 수로 나눈 값으로 측정하고 백분율로 표시.
모든 상태 커버리지는 일반적으로 모든 전이를 실행하지 않고도 달성할 수 있기 때문에, 유효 전이 커버리지보다 약하다.
모든 전이 커버리지를 100% 달성하면, 모든 상태 커버리지와 유효 전이 커버리지도 모두 보장된다.

 

4.3 화이트박스 테스트 기법
: 간단하면서 널리 사용되는 화이트박스 테스트 기법 2가지.
  • 구문 테스팅
  • 분기 테스팅
4.3.1 구문 테스팅과 구문 커버리지
< 구문 테스팅 > 
- 커버리지 항목: 실행 가능한 구문.
- 목적: 코드 구문을 실행하는 테스트 케이스를 설계해서 허용할 수 있는 수준의 커버리지를 달성하는 것.
- 커버리지는 테스트 케이스가 실행한 구문 수를 코드의 실행 가능한 구문 총수로 나누어 계산하며 백분율로 표시.

100% 구문 커버리지를 달성하면 코드의 모든 실행 가능한 구문을 적어도 한 번은 실행했다는 것이 보장.
But, 테스트 케이스로 구문을 실행했다고 해서 결함이 반드시 식별되는 것은 X.
ex. 데이터에 종속적인 결함(예: 분모를 0으로 설정한 경우에만 실패하는 나눗셈)은 식별하지 못할 수 있음.
100% 구문 커버리지가 모든 결정 논리를 테스트했다고 보장하는 것도 X.
ex. 코드의 모든 분기가 실행되지 않았을 수도 있음.

 

4.3.2 분기 테스팅과 분기 커버리지
< 분기 테스팅 >
- 커버리지 항목 : 분기.
- 목적 : 코드의 분기를 실행하는 테스트 케이스를 설계해서 허용할 수 있는 수준의 커버리지를 달성하는 것.
- 커버리지는 테스트 케이스가 실행한 분기 수를 분기 총수로 나눈 값으로 측정하며 백분율로 표시.

100% 분기 커버리지를 달성하면 코드의 모든 분기를 테스트 케이스로 실행하게 됨.
But, 테스트 케이스로 분기를 실행한다고 해서 반드시 결함을 식별할 수 있는 것은 X.
ex. 코드의 특정 경로를 실행해야 하는 결함은 감지하지 못할 수 있음.

분기 커버리지는 구문 커버리지를 포함한다. 
100% 분기 커버리지를 달성하는 테스트 케이스 집합은 100% 구문 커버리지도 달성. 그 반대는 성립 X.

 

4.3.3 화이트박스 테스팅의 가치
화이트박스 테스팅의 강점 테스트 중 전체 소프트웨어 구현을 고려하므로 소프트웨어 명세가 모호하거나 뒤떨어지고 불완전한 경우에도 결함을 쉽게 감지할 수 있음.
화이트박스 테스팅의 단점 소프트웨어가 하나 이상의 요구사항을 구현하지 않는 경우, 화이트박스 테스팅은 그것이 누락됐다는 결함을 식별하지 못할 수 있음.
화이트박스 기법은 정적 테스팅에 사용할 수 있다.
아직 실행할 준비가 되지 않은 코드 외에도 슈도 코드 또는 제어 흐름 그래프로 모델링할 수 있는 기타 상위 수준 및 하향식 논리를 검토하는 데 적합.

블랙박스 테스팅만 수행해서 실제 코드 커버리지 측정치를 얻을 수 없다. 
화이트박스 커버리지 측정치는 객관적인 커버리지 측정값을 제공하고 커버리지를 높이기 위해 추가로 필요한 테스트를 만들기 위해 필요한 정보를 제공해서 결국 코드 신뢰도를 높일 수 있게 해 줌.

 

 

 

728x90

+ Recent posts