화이트박스 테스트, 블록과 분기 커버리지
복습! 블랙박스 테스트란?
그 안에 무엇이 들어있는지 모르는 상태! 즉, 외부에서 기능만 아는 상태이다.
이런 기능에 대한 명세를 할때 테스트 하고 그 안에 프로그램이 어떻게 구성되어있는지는 모름 = 사용자 입장에서 테스트 (명세기반)
화이트박스 테스트란? ⭐⭐⭐
기능의 제목만 알려주고 프로그램의 원시코드를 보고 의도 하지 않은 기능이 있는지 테스트 하는 방식, 코드를 보고 테스트 하는 것으로 정적인 테스트라고 할 수 있다. (구조기반)
소스코드의 제어흐름/자료흐름/조건을 보고 프로그램의 결함이 있는지 식별한다.
*동적인 테스트와 정적인 테스트?
동적 : 실행 ,컴파일이 완료 돼서 실행 코드를 이용해 실행하는 단계
정적 : 실행 전 단계, 컴파일 단계까지
제어흐름
노드의 내용은 기본블록이다.
노드는 박스로 표현하고, 간선은 노드와 노드의 제어 진행방향으로 화살표로 표시한다. 시작노드와 끝노드는 가상의 노드로 타원으로 표시한다.
구조적 커버리지 분석 및 테스트 원리와 한계
코드를 보고 정적 분석을 한 후 모든 블럭을 한번씩 테스트 케이스를 추출한다. 이로인해 코드의 실행부분과 미실행 부분을 분적할 수 있다. 하지만 특정 세부 기능 하나 빠져있나면 오류를 검출하기 여려운 약점을 가지고 있다.
블록 커버리지 ? 분기 커버리기 ?
초록색으로 칠한 경로를 보면 B1,B2,B3의 블록 커버리지를 거쳤지만 B1→B3의 분기 커버리지는 거치지 않았다.
블록 커버리지 ❓
각각 모든 블럭들을 다 해봤는지
가장 기본적은 화이트박스 테스트 방법으로 모든 블록을 적어도 한번은 실행하도록 테스트 케이스 설계한 것이 목표이다.
블록커버리지 = 실행블록/ 전제블록 * 100% = 모든 블록 커버리지
블록을 100%했지만 분기가 빠진 경우도 있다. 따라서 블록와 분기의 경로를 다 가봤는지 중요하다.
분기커버리지 ❓
결정 커버리지 = 브랜치가 발생할때 어떤것을 선택할것인가
각 절차의 흐름들을 가봤는지
분기커버리지 = 실행분기 / 전체분기 * 100(%)
JaCoCo
Java의 블록과 분기 커버리지 측정 도구, HTML,XML, CSV형식의 문서로 보고
조건 커버리지?
조건을 따로따로 본다.
모든 조건을 적어도 한번은 실행하도록 테스트 케이스
조건커버리지 = 실행조건/전체조건*100(%)
모든 조건을 만족 시키려면 T,F가 나오도록 다 해봐야한다.
→ 커버리지가 100%가 아니면 100%이 되도록 테스트 케이스를 추가하면 된다.
100%가 된다면 단위 테스트에 의해서 전부 테스트 해 볼 수 있다.
화이트 박스는 툴을 사용하면 되지만 테스트 케이스는 제대로 만들어야 하기 때문에 블랙박스가 중요하다!
⭐⭐ 핵심 정리 ⭐⭐
<블랙 박스 테스트의 핵심>
전체 중에 동치류로 나눠서 각각 대표하는 대표값을 정해서 테스트 케이스를 만든다. 범위에 속 한 값들은 동치류 이기때문에 테스트 케이스를 최소화 한다. 하지만 경계부분에서 가장 문제점이 많이 발생하게 되는데 (부등식 같은 경우 해당) , 경계값 분석 또한 필요하다.
- 경계값분석 (동치류를 기반으로 하는 테스트 케이스) → 하나의 인자
- 페어 와이즈 테스트 = 짝 테스트 케이스 (IPO) → 인자들간의 조합 방식
<화이트 박스 테스트의 핵심>
테스트 케이스가 모든 블럭과 분기를 거치는지 테스트, java는 jacoco라는 툴이 있다.
- 블록 (block)
- 분기 (branch)