회사에서 테스트 케이스를 작성하게 되었는데 막히는 일도 있고
정리하면 좋을 것 같아서 시작하게 되었다.
먼저 테스트 케이스를 작성하려면 테스트케이스에 어떤 종류가 있고
무슨 방식으로 테스트 케이스를 작성하는지 알아야 한다고 생각한다

위 그림처럼 내부 경로에 대한 지식을 보지 않고 프로그램의 외부 규격서에 의거해서
입력 데이터와 출력 데이터가 규격서에 정해진 바와 같은 결과를 얻을 수 있는지 테스트한다.
요구사항이 명확하고 얻어야하는 결과가 명확할 때 사용할 수 있다.

위 이미지 처럼 프로그램의 코드나 모듈에 접근하여 요구에 맞게 잘 동작하는가에 초점을 둔 테스트이다. 프로그램 내부 구조의 타당성 여부를 시험하고, 내부구조를 테스트해서 프로그램 루틴에 대해 시험한다.
모듈테스트(Module Test)라고도 한다.
테스트 가능한 가장 작은 단위를 개별적으로 테스트 한다
프로그램 또는 그 구성 요소인 모듈 등의 정보 시스템 하나하나의 구성 요소를 결합해서
인터페이스와 각 결합 단계에서의 기능을 확인한다. 컴포넌트나 서브시스템 단위이다.
이외에도 많은 테스트가 있다
여기서 할 부분은 화이트 박스 테스트를 진행하고
코드에 대한 단위 테스트를 진행하게 되었다.
그럼 화이트박스 테스트라고 했으니 코드는 이미 적용되어 있고
단위 테스트를 진행해야 하는데 단위테스트를 진행하는 방법이 뭘까?
크게 이렇게 이뤄진다.
애플리케이션의 구조를 이해하기 위해 논리흐름도를 작성할 수 있으나,
너무 코드가 길기 때문에 논리코드가 지저분하게 나와서
굳이 작성하지 않고 각 기능을 하는 메서드별로 테스트케이스를 작성하기로 하였다.
프로그램 내의 모든 명령문을 적어도 한번 실행해야 한다
조건문에 관계 없이 구문 실행 개수로 계산한다.
각 분기의 결정 포인트 내의 조건식이 적어도 한번은 참과 거짓의 결과를 수행해야 한다.
(문장 커버리지를 포함한다)
각 분기의 결정 포인트 내의 각 개별 조건식이 적어도 한번은 참과 거짓이 수행되어야 함.
전체 조건 뿐 아니라 개별 조건식도 참과 거짓의 결과가 한번씩 나와야 한다.
이게 말만 들었을 때는 분기 커버리지와 조건 커버리지의 차이가 잘 느껴지지 않는다.
그래서 아래 코드를 보면
if(a>0 || b<0){
System.out.println("ok");
}
이 코드를 사용한다고 하였을 때
| a | b | result | |
|---|---|---|---|
| test1 | 0 | 0 | false |
| test2 | 0 | -1 | true |
| test3 | 1 | 0 | true |
이런 진리표를 얻을 수 있다.
이 표에 분기커버리지를 적용하면
test2과 test3 둘중 하나와 test1이면 100%를 얻을 수 있다.
분기 커버리지는 if분기에서 조건문이 참/거짓을 만족하면 되기 때문이다.
하지만 조건 커버리지를 적용하면
test2,3을 적용하면 100%를 얻을 수 있다.
조건 커버리지는 분기와 다르게 결과값에 상관없이 조건문 안의 조건들이 각각 true와 false를 가져야 한다.
그래서 곧 조건!=분기가 적용되게 된다.
조건커버리지를 만족하지만 분기 커버리지는 만족하지 않을 수 있는 것이다.
이런 부분을 개선하기위해 나온 것이 조건/결정 커버리지이다.
test1,2,3을 모두 사용해야 100%를 얻을 수 있다.
지금까지 테스트 케이스 작성을 위한 준비 과정이었다.
코드를 미리 볼 수 있는 만큼 테스트 데이터를 잘 준비해서 모든 커버리지를 만족할 수 있는 케이스를
작성해야한다.