TDD (Test-Driven Development / 테스트 주도 개발)
소프트웨어 개발 방법론 중 하나로, 테스트 코드를 먼저 작성한 후 실제 기능을 구현하는 방식으로 진행
특징
- 테스트 우선 개발
기능 구현 전에 테스트 코드를 작성
- 반복적인 과정
테스트 작성 > 실패 확인 > 코드 작성 > 테스트 통과 > 리팩터링 과정을 반복
- 작은 단위 작업
기능을 작은 단위로 나누어 개발하며, 각 단위에 대해 테스트를 작성
- 자동화된 테스트
작성된 테스트는 자동으로 실행됨
사용 시기
- 안정성과 신뢰성이 중요한 프로젝트
- 긴 개발주기 또는 복잡한 시스템
- 리팩터링과 유지보수가 필요한 경우
구성 요소
- 테스트 코드 (요구사항을 검증하는 코드)
- 실제 구현 코드 (테스트를 통과하기 위한 기능 구현)
- 테스트 프레임워크 (Jest, Mocha, JUnit 등)
장점
- 버그 감소
- 코드 품질 향상
- 리팩터링 안전성
- 개발자 간 커뮤니케이션 향상
단점
- 초기 비용 증가 (테스트 작성과 실행에 추가 시간이 필요)
- 테스트 관리 필요 (유지보수 과정에서 테스트 코드도 수정이 필요)
- 복잡한 테스트 작성 (테스트하기 어려운 기능 (UI, 비동기 로직 등)은 작성하기 어려움
프로젝트 구조 예시
src/
├── services/
│ └── calculator_service.ts
├── controllers/
│ └── calculator_controller.ts
tests/
├── services/
│ └── calculator_service.test.ts
├── controllers/
│ └── calculator_controller.test.ts
JavaScript / TypeScript
- 범위
웹 프론트엔드, 백엔드
- 단위 테스트
Jest (React 컴포넌트의 렌더링 및 함수 동작 테스트 / TypeScript 유틸리티 함수의 입력 및 출력 검증)
Vitest (React 컴포넌트의 렌더링 및 함수 동작 테스트 / TypeScript 유틸리티 함수의 입력 및 출력 검증)
- 통합 테스트
React Testing Library (React 컴포넌트 테스트)
Vue Test Utils (Vue 컴포넌트 테스트)
- E2E 테스트 (사용자가 애플리케이션을 실제로 사용하는 것처럼 전체 워크플로우를 테스트 하는 것)
Cypress (브라우저 동작 테스트)
Playwright (크로스 브라우저 및 비동기 동작 검증)
Python
- 범위
백엔드
- 단위 테스트
Pytest (모델 및 API 뷰 함수 테스트 / 모듈 함수 및 클래스 동작 검증)
- 통합 테스트
Pytest + Django 내장 테스트 프레임워크 (REST API 및 데이터베이스 상호작용 테스트 / Django ORM 쿼리 테스트)
Pytest + Flask 내장 테스트 프레임워크 (REST API 및 데이터베이스 상호작용 테스트)
- E2E 테스트
Selenium (브라우저 동작 테스트)
Playwright (크로스 브라우저 및 비동기 동작 검증)
Java
- 범위
웹 프론트엔드, 백엔드
- 단위 테스트
JUnit (Spring Boot 서비스와 레포지터리 테스트 / Java 유틸리티 메서드 동작 검증)
- 통합 테스트
Junit + Spring 내장 테스트 프레임워크 (REST API 컨트롤러와 서비스 계층 간 데이터 흐름 검증 / Spring MVC 웹 애플리케이션 테스트)
- E2E 테스트
Selenium (브라우저 동작 테스트)
Swift / Kotlin
- 범위
앱 프론트엔드 (iOS 및 Android)
- 단위 테스트
XCTest (iOS / 뷰 동작 검증)
JUnit (Android / 뷰 동작 검증)
- 통합 테스트
XCUnitTest (iOS / 버튼 클릭 및 화면 전환 테스트)
Espresso (Android / 버튼 클릭 및 화면 전환 테스트)
- E2E 테스트
Appium (앱 동작 테스트 / 푸시 알림 흐름 테스트)
PHP
- 범위
백엔드
- 단위 테스트
PHPUnit (PHP 클래스 메서드와 비즈니스 로직 테스트)
- 통합 테스트
PHPUnit + Laravel Test Framework (API 호출 및 데이터베이스 데이터 흐름 검증 / 미들웨어와 서비스 계층 간 테스트)
- E2E 테스트
Laravel Dusk (브라우저 기반 UI 테스트)
Ruby
- 범위
웹 프론트엔드, 백엔드
- 단위 테스트
RSpec (Rails 모델과 컨트롤러 로직 테스트 / Ruby 유틸리티 메서드 검증)
- 통합 테스트
RSpec + Capybara (Rails 앱에서 데이터베이스와 API 통합 테스트 / 사용자 입력과 출력 흐름 검증)
- E2E 테스트
Selenium (브라우저 동작 테스트)
Cypress (전체 사용자 시나리오 검증)
React Native
- 범위
앱 프론트엔드
- 단위 테스트
Jest + React Native 내장 테스트 프레임워크 (컴포넌트 렌더링 테스트 / 상태 변화에 따른 UI 업데이트 검증)
- 통합
React Native Testing Library (여러 컴포넌트가 함께 렌더링되는 시나리오 검증 / API 호출 / 상태 관리 / 네비게이션 흐름 테스트)
- E2E
Detox (React Native 전용 E2E 테스트 도구 / 앱의 실제 실행 상태에서 사용자 흐름 검증)
Appium (크로스 플랫폼 E2E 테스트 도구 / iOS 및 Android 환경에서 동일한 테스트 스크립트로 앱 테스트 가능 / 네이티브 기능과의 상호작용 테스트)
'Development > Development' 카테고리의 다른 글
| 오픈 소스 라이선스 가이드 (0) | 2025.06.16 |
|---|---|
| 바이브 타면서 코딩하는법 (14) | 2025.06.10 |
| ts로 구현하는 소프트웨어 개발 디자인 패턴 총 정리 (1) | 2025.06.09 |
| 객체 지향 설계 원칙 (SOLID / DRY / YAGNI / KISS) (2) | 2025.05.27 |
| firebase testlab 스크립트에 대해 알아보자 (2) | 2025.05.01 |