반응형
테스트 코드란 무엇인가
소프트웨어 기능과 동작을 테스트하는데 사용되는 코드를 말한다.
개발자가 요구사항에 맞게 개발한 기능이 의도대로 정확히 동작하는지 검증하는 절차를 코드화 해놓은 것이 테스트 코드이다
테스트 코드를 왜 작성해야 하나?
Add Function 관점
- 신규 기능 개발 과정 중 예상하지 못햇던 문제를 미리 발견할 수 있다
- 작성한 코드가 의도한 대로 동작하는지 검증할 수 있다
Refactoring 관점
- 단순 구조적 변경(중복 제거, 캡슐화)을 적용했을 때 이전과 동일하게 기능이 정상 동작 여부를 확인할 수 있다
- 코드 수정이 필요한 상황에서 유연하고 안정적인 대응을 할 수 있다
테스트의 종류
테스트의 종류는 테스트 대상 범위나 성격에 따라 크게 3가지로 구분 된다
UI, Service(Integration), Unit Test 등으로 구분된다
UI, Service(Integration), Unit Test 순으로 테스트의 속도와 비용은 줄어들고 테스트의 크기(또는 범위)는 더 많아 진다
Unit Test
- 가장 작은 단위로 기능을 나누어 기능을 테스트하는 기법
- 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트를 말한다
- 모듈은 애플리케이션을 구성하는 객체의 기능을 의미함
- 예를 들면, 웹 페이지의 로그인 기능 중 User의 ID와 Password를 입력 받아 회원 여부를 확인하는 메서드에 대한 독립적인 테스트가 1개의 단위 테스트가 될 수 있다
- 즉 단위 테스트는 애플리케이션을 구성하는 하나의 기능을 더 작은 단위로 쪼갠 하나의 메서드가 올바르게 동작하는지를 독립적으로 테스트하는 것을 말한다
장점
- 단위 테스트는 회귀성을 보장하기 때문에 코드 수정에 따른 불안감을 해소할 수 있다
- 언제든지 빠르고 쉽게 테스트 할 수 있기 때문에 신규 기능 또는 리팩토링에 대한 불안감을 낮출 수 있따
- 코드 자체가 API의 기능을 설명하는 문서의 기능을 제공할 수 있다
단점
- 객체는 객체 간의 협력을 통해서 기능을 완성시킨다. 하지만, 단위 테스트 코드 작성 시 이러한 의존성 문제를 해결을 해야 하는 불편함이 있다
통합 테스트
- 통합 테스트는 모듈을 통합하여 독립적으로 하나의 기능을 수행할 수 있는 단위를 만드는 과정에서 서로 다른 모듈 혹은 객체 간 상호작용의 유효성을 검증하는 테스트를 말한다
인수(UI) 테스트
- 대형 테스트로 분류되는 UI 테스트는 실제 사용자들이 사용하는 화면에 대한 테스트를 하여 서비스의 기능이 정상적으로 작동하는지 검증하는 테스트를 말한다.
TDD; 테스트 주도 개발
전통적인 개발 방식과 다르게 실패하는 테스트 코드로 시작해서 시작해서 리팩토링으로 종료되는 일련의 스프린트 방식을 여러번 거쳐서 요구사항을 충족하는 코드를 점진적으로 완성 시켜가는 개발 방법론을 말한다.
TDD 개발의 장점
- 디버깅 시간을 단축시킬 수 있다
- 작성한 코드가 가지는 불아정성을 개선하여 생산성을 높일 수 있다
- 재설계 시간을 단축할 수 있다
- 추가 구현이 용이하다
- 각 테스트가 요구사항을 직접 식별하므로 코드와 요구사항이 긴밀하게 연결된다
TDD 개발의 단점
- 시간이 너무 많이 소요된다
테스트 개발의 생명주기; TDD 흐름
- 작은 단위의 Test Case의 요구사항을 만족하지만, 정상적으로 실행이 되지 않는 코드를 작성한다(Red)
- 정상 동작을 하면서 Test Case 통과하는 테스트 코드로 수정한 후 테스트 통과여부를 확인(Green)
- 테스트를 통과한 뒤에는 개선할 코드가 있으면 리팩토링
- 리팩토링을 수행한 뒤에는 다시 테스트를 실행해서 기존 기능이 망가지지 않았는지 확인(Yellow)
반응형
'TDD' 카테고리의 다른 글
| Jest 많이 썼던 내용들 정리 (1) (5) | 2024.10.24 |
|---|---|
| 간단한 게시판 만들면서 TDD 맛보기 (POST 요청) (1) | 2024.09.01 |
| Jest; JUnit 어노테이션을 참고한 (0) | 2024.08.31 |
| 단위 테스트: 기본 개념 (0) | 2024.08.31 |
| 예제; 암호 검사기 (0) | 2024.08.31 |