1.테스트 코드를 작성하는 이유

- 개발 과정에서 미리 오류를 발견할 수 있다.
- 애플케이션 보다 빠르게 가동할 수 있다.
- 테스트 코드를 통해 코드를 보다 명료하게 작성할 수 있다.
2.종류
1)단위 테스트(Unit Test)
- 개별 모듈을 독립적으로 테스트 하는 방식이다.
- 소스 코드의 가장 작은 단위인 함수, 메소드, 클래스 등 개별적인 부분을 테스트 한다.
- 주로 프로그래머가 작성하며, 모듈이 예상대로 동작하는지를 확인한다.
- 단위 테스트는 보통 모의 객체(Mock Object)와 같은 외부 의존성을 대체하여 독립적으로 실행될 수 있도록 설계한다.
2)통합 테스트(Integration Test)
- 애플리케이션의 다양한 모듈을 결합해 진행 하므로 전체 모듈의 로직이 의도한 대로 동작하는지 테스트 할 수 있다.
- 다수의 모듈이나 컴포넌트가 함께 동작할 때 그들 간의 상호작용을 검증한다.
- 여러 모듈이 연결되어 시스템 전체적인 기능을 테스트하며, 인터페이스와 데이터 흐름 등을 확인한다.
- 일반적으로 단위 테스트 이후에 수행되며, 각각의 모듈이 정상적으로 상호작용하는지를 확인한다.
3)시스템 테스트(System Test)
- 완전한 소프트웨어 시스템이 예상된 환경에서 정상적으로 작동하는지를 검증한다.
- 사용자 요구사항과 기능 명세에 대한 준수 여부를 확인하며, 전체 시스템을 대상으로 한 종단 간 검증을 포함한다
- 시스템 테스트는 개발 및 인수 전 단계에서 수행되어 최종 사용자 관점에서 소프트웨어가 올바르게 동작하는지 평가하기 위해 진행된다.
4)인수(Acceptance) 테스트
- 고객 또는 사용자가 요구한 기능과 비즈니스 요구사항에 대해 최종적으로 승인하는 것이다
- 사용자 관점에서 시스템이 예상대로 동작하는지 확인하여 전체적인 용도와 목적에 부합하는지 평가한다.
- 인수 테스트는 일반적으로 실제 환경에서 수동 또는 자동화된 방식으로 진행된다.
5)회귀(Regression) 테스트
- 변경 사항 또는 수정 사항 후에 이전에 정상 동작한 기능들이 여전히 올바르게 작동하는지 확인하기 위한 테스트이다.
- 변경 사항의 영향 범위 확인: 회귀 테스트를 통해 새로운 기능 추가, 버그 수정, 코드 리팩터링 등으로 인해 변경된 코드가 다른 기능들에 어떤 영향을 미치는지 확인한다.
- 버그 재현 및 수정 검증: 이전에 발견되었던 버그나 문제점을 수정하고 나서 회귀 테스트를 실행하여 해당 버그가 제대로 해결되었는지 검증하여 일관성을 유지하는지 확인한다.
- 안정성 유지: 회귀 테스트를 실행하여 소프트웨어 시스템 전체의 안정성을 유지한다.
3.테스트 크기
-
전통 적인 분류 기준

-
구글 분류

1)소형 테스트
- 단일 서버
- 단일 프로세스
- 단일 스레드
- 디스크 I/O 사용해선 안됨
2)중형 테스트
- 단일 서버
- 멀티 프로세스
- 멀티 스레드
- 데이터 베이스를 사용하여 테스트 한 경우 포함 된다.
3)대형 테스트
- 대규모 시스템이나 복잡한 소프트웨어 환경에서 소프트웨어의 성능, 안정성, 호환성 등을 평가하기 위해 수행된다.
- E2E(End-to-End) 처럼 시스템의 전체적인 흐름을 테스트하는 접근 방식이 대표적이다.
4.테스트 순서
- 단위테스트 →통합테스트→시스템 테스트→인수테스트→회귀 테스트
5.테스트 코드 작성 방법
1)Given-When-Then 패턴
- Given-When-Then 패턴은 소프트웨어 테스트에서 매우 널리 사용되는 테스트 기법 중 하나입니다. 이 패턴은 테스트 케이스 작성 시 세 가지 부분으로 나누어 작성한다.
- 이러한 Given-When-Then 패턴은 테스트 케이스를 보다 명확하고 구체적으로 작성하고, 테스트 결과와 실패 원인을 보다 쉽게 파악할 수 있게 해준다.
- 또한, 테스트케이스 통제에서 유연성을 갖도록 구성할 수 있어 비즈니스 요구 사항, 사용 케이스 등이 포함되어 있다.
(1)Given
- 테스트 환경을 설정하는 단계이다.
- 테스트에 필요한 모든 전제 조건, 초기 상태와 입력 값을 설정한다.
(2)When
- 테스트를 실행하는 단계이다.
- 테스트 대상이 수행해야 하는 액션 또는 작업(즉, 입력)을 수행합니다.
(3)Then
- 테스트 결과를 확인하는 단계이다.
- 테스트 대상이 수행한 액션 또는 작업의 결과, 상태, 반환 값 등이 예상한 대로 있는지 검증한다.