✔︎ 화이트 박스 테스팅은 테스트 대상의 내부 구조를 기반으로 한다.
모든 테스트 레벨에서 적용가능하나 실라버스에서 언급하고 있는 두 가지 코드 관련 기법(구문, 결정 테스팅)은 단위 테스트 레벨에서 가장 일반적으로 사용된다.
높은 안전성, 무결성 환경에서 더 높은 커버리지를 달성을 위해 다른 기법들이 있지만 그러한 기법은 심화이기때문에 따로 포스팅해서 다룰 예정이다.
공통점 : 효율적인 다이나믹 테스팅을 진행
차이점: 테스트 베이시스가 다름 (화이트: 구조 산출물, 블박 : 명세서, 경험기반: 테스터의 경험)
블랙박스테스트 :
동등분할,
경계값 분석,
결정 테이블 테스팅(일반평문언어로 된 요구사항명세서에서 원인, 결과를 찾아 원인의 조합을통해 테스트케이스 도출) ,
상태 전이 테스팅(상태,전이,이벤트),
유즈 케이스(기본경로,예외경로테스팅)을 적용해서 테스트케이스를 도출한다.
void test (int x) {
system.out("첫번째 줄"); // 1번
if (x > 0) { // 2번
system.out("두번째 줄"); // 3번
}
system.out("마지막 줄"); // 4번
}
위 함수에 매개값을 음수 "-1"을 주게 되면 3번째 구문이 실행되지 않는다. 고로 구문 커버리지는 75%이다.
String test(String text){
String result; //1번
if(text == "아연이"){ //2번
result = "success"; //3번
log.info(result); //4번
}else{
result = "fail"; //5번
log.info(result); //6번
}
return result; //7번
}
위 함수에 매개값으로 "아연이"를 매개값으로 주게 되면 실행되는 구문은 1,2,3,4,7번.
5,6번은 else문으로 실행되지 않으므로 구문 커버리지 계산은 5/7 즉 71%가 된다.
구문 커버리지 계산은 테스트 중에 실제로 어떤 라인들이 실행되었는지를 기반으로 하므로, 실제로 코드 커버리지를 측정하는 도구를 사용하여 확인하는 것이 가장 정확하다.
※ 구문과 결정커버리지의 차이점
결정 커버리지가 구문 커버리지보다 강도가 있음
구문커버리지는 결정을 고려하지 않는다. 실행구문들만 테스트를 하는 것.
func getGrade(int score) {
String grade = ""
if score >= 90 {
grade = "A"
} else if score >= 80 {
grade = "B"
} else if score >= 70 {
grade = "C"
} else {
grade = "F"
}
return grade
}
// 테스트 케이스
print(getGrade(score: 95)) // 테스트 케이스 1: A 학점
print(getGrade(score: 85)) // 테스트 케이스 2: B 학점
print(getGrade(score: 75)) // 테스트 케이스 3: C 학점
print(getGrade(score: 60)) // 테스트 케이스 4: F 학점
reference : https://ios-development.tistory.com/1387
4가지 모든 분기를 커버하고 있으므로 브랜치 커버리지 100%이다.
(결정 테스팅과 브랜치 테스팅은 의미가 조금 다르다.)
100% 구문 커버리지 달성 = 코드에 존재하는 모든 실행 가능한 구문을 최소한 한 번씩은 테스트했다. 그러나 모든 결정 로직을 테스트했다는 것을 보장하지는 않는다.
구문 테스팅은 결정 테스팅보다 커버리지가 낮다.
100% 결정 커버리지 달성 = 명확한 거짓 구문이 명시되지않은 경우(if문에 else문이 없는 경우)에도 결과가 참, 거짓 경우를 포함한 모든 결정 결과가 실행되었다.
구문 커버리지 = 다른 테스트에 의해 실행되지 않은 코드의 결함을 찾는 데 도움.
결정 커버리지 = 다른 테스트가 참과 거짓 결과 모두를 테스트하지 않은 코드의 결함을 찾는 데 도움.
100% 결정 커버리지는 100% 구문 커버리지를 보장. 반대는 성립하지 않음.
화이트박스 테스팅에는 제어 흐름 테스팅과 기본 경로 테스팅이 있다.
실라버스에는 제어 흐름 테스팅만 다루고 있고 기본 경로 테스팅은 강의시간에 강사님이 설명해주신 적이 있다. 기본 경로 테스팅은 복잡도 계산하는 방법이며 집중해서 들었지만, 사실 어렵다. 이번 ISTQB 시험이 끝나면 제어 흐름 테스팅의 심화부분과 기본 경로 테스팅에 대해서 다시 공부해서 관련 포스팅 올리겠다.