테스트 코드(Test Code)란 무엇인가?
소프트웨어 개발 과정에서 작성된 코드가 기대한 대로 동작하는지 확인하기 위해 작성된 코드입니다. 테스트 코드는 소프트웨어의 품질을 보장하고, 개발 중에 발생할 수 있는 오류를 조기에 발견하고 수정할 수 있도록 돕는 중요한 도구입니다.
테스트 코드의 이점
그러면 테스트 코드를 작성함으로 인해, 얻는 이점은 어느 것들이 있을까요?
- 기능 검증 : 작성된 코드가 요구사항을 충족하고 의도한 대로 동작하는지 확인합니다.
- 오류 방지 : 코드 변경(리팩토링 또는 기능 추가) 중에 발생할 수 있는 기존 기능의 오류를 방지합니다.
- 자동화 : 사람이 직접 확인할 필요 없이 컴퓨터가 자동으로 코드를 테스트할 수 있도록 지원합니다.
- 코드 유지보수성 향상 : 개발자가 변경 작업을 할 때 기존 코드가 안전하게 동작하는지 확신할 수 있습니다.
테스트 코드의 종류
1.Unit Test (단위 테스트)
목적 : 가장 작은 코드 단위(함수, 메서드, 클래스 등)이 의도한 대로 동작하는지 확인
범위 : 코드의 가장 작은 단위
2.Integration Test (통합 테스트)
목적 : 서로 다른 모듈(함수, 클래스, 서비스 등)이 함께 동작할 때 문제가 없는지 확인
범위 : 여러 컴포넌트 간의 상호작용
3.UI Test (E2E 테스트)
목적 : 사용자 인터페이스(UI)와 사용자 경험(UX)이 요구사항에 부합하는지 검증
범위 : 화면, 버튼, 메뉴, 사용자 상호작용 등
테스트 코드는 Unit Test < Integration Test < UI Test 순으로 범위가 점차 넓어지므로, UI 테스트로 갈수록 작업 시간이 더 오래걸립니다.
테스트 코드가 무엇인지와 이점과 종류는 알았는데, 항상 듣는 TDD, BDD, DDD 이라는 단어를 들어보신적이 있으실 겁니다.
그러면 이 TDD, BDD, DDD가 무엇인지 알아보도록 하겠습니다.
TDD(Test-Driven Development, 테스트 주도 개발)
테스트 주도 개발로, 기능을 구현하기 전에 테스트를 먼저 작성한 후 그 테스트를 통과할 수 있도록 코드를 개발하는 방식
테스트 주도 개발은 아래와 같은 절차로 진행합니다.
1. Red(테스트 작성) : 실패할 수밖에 없는 테스트를 작성합니다. (아직 구현되지 않은 기능이므로 당연히 실패)
2. Green(기능 구현) : 테스트를 통과할 수 있도록 최소한의 코드를 작성합니다.
3. Refactor (리팩토링) : 테스트를 유지하면서 코드를 더 효율적이고 가독성 있게 리팩토링합니다.
[참고 예제 - FECONF 프론트엔드 TDD]
https://www.youtube.com/watch?v=L1dtkLeIz-M
BDD(Behavior-Driven Development, 행위 주도 개발)
사용자 행동에 초점을 맞춘 개발 방법론으로, TDD에서 발전된 형태입니다. 사용자 요구 사항을 기반으로 테스트를 작성하고, 이를 코드로 구현합니다.
행위 주도 개발은 아래와 같은 절차로 진행합니다.
1. Given : 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분
2. When : 구체화하고자 하는 그 행동
3. Then: 어떤 특정한 행동 때문에 발생할거라고 예상되는 변화에 대한 설명
[참고 사이트 - Given-When-Then 패턴 및 TDD/BDD 장단점 상세 설명]
Given-When-Then 패턴
1. Given-When-Then 패턴이란 Given-When-Then 패턴은 Test Code 스타일을 표현하는 방식을 말합니다. Given 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분 When 구체화하고
kchanguk.tistory.com
Test-Driven Development vs. Behavior-Driven Development in React
Different techniques for development in React
blog.openreplay.com
DDD (Domain-Driven Design, 도메인 주도 설계)
DDD는 소프트웨어 설계에서 도메인 모델(Domain Model)에 집중하는 접근 방식입니다. 복잡한 비즈니스 로직을 개발할 때, 비즈니스 문제를 해결하기 위한 모델을 설계하고, 이를 기반으로 소프트웨어를 구축합니다.
도메인 주도 개발의 절차 진행의 앞서 주요 개념을 설명 드리겠습니다.
1. 도메인
도메인은 비즈니스 문제나 소프트웨어가 해결하고자 하는 특정 문제 영역
ex) 전자상거래 도메인에서는 주문, 고객, 결제, 배송 등이 도메인 요소가 될 수 있습니다.
2. Ubiquitous Language (공통 언어)
도메인 전문가와 개발자가 동일한 언어를 사용하여 도메인을 표현합니다.
모델, 코드, 문서에서 동일한 언어를 사용하여 의사소통 오해를 줄이고 일관성을 유지합니다.
3. Bounded Context (경계된 컨텍스트)
도메인을 작은 논리적 단위로 나누어 관리합니다.
각 Bounded Context는 독립적인 모델과 데이터, 로직을 가지고 있으며, 서로 다른 Bounded Context 간에는 명확한 인터페이스를 통해 통신합니다. ex) 전자상거래 시스템에서는 주문 관리, 결제 처리, 배송 추적 등이 각각 Bounded Context가 될 수 있습니다.
4. Entity
고유 식별자를 가지는 객체이며, 상태와 동작을 모두 포함하며, 동일한 ID를 가진 경우 같은 엔티티로 간주됩니다.
ex) 주문, 고객, 상품 등이 엔티티가 될 수 있습니다.
5. Value Object
고유 식별자가 없고, 속성 값 자체로 동일성을 판단합니다. 값이 불변인 경우가 많습니다.
ex) 주소, 금액 등이 Value Object로 모델링됩니다.
6. Aggregate (집합체)
여러 엔티티와 값 객체를 하나의 일관된 단위로 묶은 것입니다.
ex) 주문(엔티티)과 주문 항목(엔티티 및 값 객체)은 "주문 Aggregate"로 묶일 수 있습니다.
7. Repository
Aggregate를 저장하고 검색하는 책임을 가집니다.
8. Domain Service
엔티티나 값 객체에 속하지 않는 복잡한 비즈니스 로직을 처리합니다.
도메인 주도 개발은 아래와 같은 절차로 진행합니다.
- 도메인을 이해하고 공통 언어를 정의
- 도메인을 세분화하여 각 Bounded Context를 정의
- 도메인 모델을 설계하고, 이를 코드로 구현
TDD, BDD, DDD 비교
특징 | TDD | BDD | DDD |
초점 | 코드와 테스트 | 사용자 행동과 요구사항 | 비즈니스 도메인 |
테스트 대상 | 기능 단위 | 사용자 시나리오 | 비즈니스 로직 |
목적 | 기능이 정확히 동작하는지 검증 | 사용자 요구사항이 올바르게 구현되었는지 검증 | 비즈니스 문제를 해결하는 모델 구축 |
주요 도구 | JUnit, pytest 등 | Cucumber, SpecFlow, Behave 등 | 없음 (모델 중심 설계 방법론) |
위와 같이 테스트 코드란 무엇인지 알아보았고, 개발 방법론의 대한 TDD(테스트 주도 개발), BDD(행위 주도 개발), DDD(도메인 주도 설계) 방법론에 대해서 간략히 알아보고, 비교해보았습니다.
'FrontEnd' 카테고리의 다른 글
AI가 생성하는 웹사이트 Vercel v0로 프론트개발 알아보기 (0) | 2025.02.18 |
---|---|
Shadcn/ui (0) | 2025.02.13 |
MSW(Mock Service Worker)로 효율적으로 일하기 (3) | 2025.02.13 |
Test Double에 대해 알아보자 (0) | 2025.02.12 |
Jest vs Vitest 어느 것을 사용해야 하는가? (0) | 2025.02.12 |