테스트 코드

기능을 개발한 후 의도대로 정확하게 작동하는 지 검증하는 코드.

 

 

장점:

  • 예상 동작과 실제 동작을 비교하여 빠르고 정확한 테스트가 가능해 초기 개발의 디버깅이 쉬워진다.
  • 애플리케이션이 확장되거나 구조가 변경되더라도 올바르게 작동하는 지 확인 가능하다.
  • 잘 만든 테스트 케이스는 API 기능을 쉽게 파악할 수 있게 해 그 자체로 애플리케이션에 대한 문서로 사용 가능하다.
  • 테스트의 자동화가 가능하다.

 

단점:

  • 테스트 코드까지 작성해야해 개발 시간이 길어진다.
  • 어플리케이션의 변경 사항을 테스트 코드에도 적용해야하기 때문에 이에 대한 유지보수 부담이 증가한다.

 

종류:

  • 단위 테스트(Unit Test)

- 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트를 말하며, 일반적으로 실무에서 테스트 코드라 함은 단위 테스트를 의미한다.

- 프로그램을 작은 단위로 쪼개 어디서 문제가 발생했는지 정확하게 동작하는지 빠르게 확인 가능해 디버깅 시간 단축할 수 있다.

- 리펙토링을 하여도 작은 기능 혹은 메소드 단위이기에 빠르게 문제 여부를 파악하여 안정성을 확보할 수 있다. 

- 테스트에 대한 시간과 비용을 절약 할 수 있다.

 

- 좋고 깨끗한 테스트 코드가 따르는 FIRST 규칙

① Fast : 테스트는 빠르게 동작하며 자주 돌릴 수 있어야 한다.

② Independent : 각각의 테스트는 독립적이며 서로 의존하면 안된다.

③ Repeatable : 어느 환경에서도 반복 가능해야 한다.

④ Self-Validation :  테스트는 bool값으로 결과를 출력해 자체 검증이 되어야 한다.

⑤ Timely : 실제 코드를 구현하기 직전에 구현해야 한다.

 

 

  • 통합 테스트

- 단위 테스트가 끝나고 각 모듈을 결합하면서 하는 테스트

- 개발자가 변경할 수 없는 부분(외부 라이브러리)까지 묶어 검증이 가능하며 단위 테스트때 발견이 어려웠던 버그를 찾을 수 있다.

- 더 많은 코드를 테스트 하기 때문에 단위 테스트보다 어디서 문제가 발생했는지 확인하는 게 어렵다. 

 

- 종류 :

1. 빅뱅 접근법: 시스템을 구성하는 모듈을 각각 따로 구현하고 전체 시스템을 한번에 테스트 하는 방식. 단시간 테스트를 수행할 수 있다는 장점이 있지만, 결함의 격리가 어렵다. 실제 모듈로 진행

 

2. 점증적 접근법: 

① 상향식 : 최하위 모듈부터 합쳐가며 차례대로 최상위 모듈까지 테스트 하는 방식. 결함 격리가 쉽고, 드라이버(Driver)로 테스트를 진행한다.

② 하향식 : 최상위 모듈부터 합쳐가며 차례대로 최하위 모듈까지 테스트 하는 방식, 결함 격리가 쉽고, 스텁(Stub)으로 테스트를 진행한다..

 

3. 샌드위치 접근법

- 상향식과 하향식의 장점을 이용한 방식으로 대규모 프로젝트에서 사용하며, 병렬 테스트가 가능해 시간이 절약된다. 스텁과 드라이버의 필요성이 높으며 시간을 절약하는 대신 비용이 많이 들어간다.

 

* Driver : 완성된 모듈 혹은 컴포넌트를 "임시로 호출"하는 소프트웨어 컴포넌트 혹 테스트 툴. 더미 제어자.

* Stub : 아직 완성되지 않은 모듈 혹은 컴포넌트를 대체하도록 구현한 "임시 모듈 혹은 컴포넌트". 더미 모듈.

 

 

  • E2E(End To End) 테스트

- Endpoint 간의 테스스라 하여 서비스를 사용하는 사용자 입장이 되어 진행하는 테스트. 실제 사용자의 실행 환경과 유사한 환경에서 진행.

- 사용자 관점의 테스트가 가능하며 직접 사용자에게 노출되는 부분을 점검할 수 있다.  

- 다양한 애플리케이션의 의존관계가 정확이 작동하는지 확인할 수 있다.

 

 

 

 

테스트 코드 작성 시 장단점과 테스트 종류 별 특징

장점예상 동작과 실제 동작을 비교하여 빠르고 정확한 테스트가 가능하기 때문에 초기 개발의 디버깅이 쉬워집니다.어플리케이션이 변경(기능 확장 또는 리팩터링 등)되더라도 올바르게 작동

velog.io

 

 

테스트코드 종류 및 장단점

장점빠르고 정확한 테스트 가능 (예상 동작 VS 실제 동작)테스트 자동화 가능배포 절차 시 테스트 코드가 수행되어 동작 검증리팩토링 후 기존 동작에 대한 보증수표!!!단점개발 시간이 오래 걸

velog.io

 

 

#테스트 코드를 어떻게 만들어야 할까에 관련해 참고할 링크들

 

테스트 코드는 어떻게 만들까

신입으로 입사하신 분들이 테스트 코드를 어떻게 만들어야 하는지를 종종 물어보셔서, 공유도 하고 내 머리 속에 정리도 할 겸 이 글을 써본다. 이 글은 유닛 테스트 코드를 많이 만들어보신 분

cottonblue.tistory.com

 

 

스프링부트 테스트

스프링 부트 Unit Test 및 Integration Test | 테스트코드를 작성하는 일은 정말 중요하다. 하지만, 필자에게 아직도 너무 어려운 일이 바로 테스트 코드를 작성하는 일이다. TDD 를 잘하는 개발자는 필

brunch.co.kr

 

+ Recent posts