JAVA 테스트케이스 (0)

승환·2024년 12월 29일

📌 작성 이유

회사에서 테스트 케이스를 작성하게 되었는데 막히는 일도 있고
정리하면 좋을 것 같아서 시작하게 되었다.


📌 사용한 언어 및 프레임워크

  • JAVA Junit

테스트 케이스의 종류와 방법

먼저 테스트 케이스를 작성하려면 테스트케이스에 어떤 종류가 있고
무슨 방식으로 테스트 케이스를 작성하는지 알아야 한다고 생각한다

블렉박스 테스트(Black-Box Test)


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

화이트박스 테스트(White-Box Test)


위 이미지 처럼 프로그램의 코드나 모듈에 접근하여 요구에 맞게 잘 동작하는가에 초점을 둔 테스트이다. 프로그램 내부 구조의 타당성 여부를 시험하고, 내부구조를 테스트해서 프로그램 루틴에 대해 시험한다.

단위 테스트(Unit Test)

모듈테스트(Module Test)라고도 한다.
테스트 가능한 가장 작은 단위를 개별적으로 테스트 한다

통합 테스트(Intergration Test)

프로그램 또는 그 구성 요소인 모듈 등의 정보 시스템 하나하나의 구성 요소를 결합해서
인터페이스와 각 결합 단계에서의 기능을 확인한다. 컴포넌트나 서브시스템 단위이다.
이외에도 많은 테스트가 있다


여기서 할 부분은 화이트 박스 테스트를 진행하고
코드에 대한 단위 테스트를 진행하게 되었다.
그럼 화이트박스 테스트라고 했으니 코드는 이미 적용되어 있고
단위 테스트를 진행해야 하는데 단위테스트를 진행하는 방법이 뭘까?


테스트 과정

  1. 원시 코드를 통해 애플리케이션의 구조를 이해
  2. 검증 기준(커버리지) 선정
  3. 각 경로를 구동시키는 테스트 데이터 준비

크게 이렇게 이뤄진다.
애플리케이션의 구조를 이해하기 위해 논리흐름도를 작성할 수 있으나,
너무 코드가 길기 때문에 논리코드가 지저분하게 나와서
굳이 작성하지 않고 각 기능을 하는 메서드별로 테스트케이스를 작성하기로 하였다.

검증 기준(커버리지) 선정

문장 커버리지(Statement Coverage)

프로그램 내의 모든 명령문을 적어도 한번 실행해야 한다
조건문에 관계 없이 구문 실행 개수로 계산한다.

결정(선택), 분기 커버리지(Branch Coverage)

각 분기의 결정 포인트 내의 조건식이 적어도 한번은 참과 거짓의 결과를 수행해야 한다.
(문장 커버리지를 포함한다)

조건 커버리지(Condition Coverage)

각 분기의 결정 포인트 내의 각 개별 조건식이 적어도 한번은 참과 거짓이 수행되어야 함.

조건/결정 커버리지(Condition/Decicion Coverage)

전체 조건 뿐 아니라 개별 조건식도 참과 거짓의 결과가 한번씩 나와야 한다.

이게 말만 들었을 때는 분기 커버리지와 조건 커버리지의 차이가 잘 느껴지지 않는다.
그래서 아래 코드를 보면

if(a>0 || b<0){
System.out.println("ok");
}

이 코드를 사용한다고 하였을 때

abresult
test100false
test20-1true
test310true

이런 진리표를 얻을 수 있다.
이 표에 분기커버리지를 적용하면

test2과 test3 둘중 하나와 test1이면 100%를 얻을 수 있다.
분기 커버리지는 if분기에서 조건문이 참/거짓을 만족하면 되기 때문이다.

하지만 조건 커버리지를 적용하면
test2,3을 적용하면 100%를 얻을 수 있다.
조건 커버리지는 분기와 다르게 결과값에 상관없이 조건문 안의 조건들이 각각 true와 false를 가져야 한다.

그래서 곧 조건!=분기가 적용되게 된다.
조건커버리지를 만족하지만 분기 커버리지는 만족하지 않을 수 있는 것이다.

이런 부분을 개선하기위해 나온 것이 조건/결정 커버리지이다.
test1,2,3을 모두 사용해야 100%를 얻을 수 있다.


정리

지금까지 테스트 케이스 작성을 위한 준비 과정이었다.
코드를 미리 볼 수 있는 만큼 테스트 데이터를 잘 준비해서 모든 커버리지를 만족할 수 있는 케이스를
작성해야한다.

profile
왕초보 학부생

0개의 댓글