Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update and rename 2024-09-02-TDD to 2024-09-02-TDD.md #138

Merged
merged 1 commit into from
Sep 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions _posts/2024-09-02-TDD

This file was deleted.

65 changes: 65 additions & 0 deletions _posts/2024-09-02-TDD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
layout: single
title: "TDD란"
published: true
classes: wide
category: TDD
---

# 테스트 주도 개발(Test-Driven Development, TDD)이란

테스트 주도 개발(Test-Driven Development, TDD)이란 소프트웨어 개발 방법론으로,
먼저 테스트를 작성하고 그 테스트를 통과할 수 있는 최소한의 코드를 작성하는 방식을 의미한다.

이 방법은 코드의 품질을 높이고, 버그를 줄이며, 유지보수를 쉽게 하기 위해 고안되었다.

초기에는 **Test First Development (테스트 우선 개발)**이라고 불렸다.
그러나 "First(우선)"라는 단어는 "Last(마지막)"라는 명확한 반의어가 있어서, 테스트를 나중에 작성하는 일반적인 개발 방식과 혼동될 수 있었다.

또한, 많은 프로그래머가 코드를 먼저 작성한 후 테스트를 작성하는 경우가 많았기 때문에,
더 명확한 개념을 전달하기 위해 **Test-Driven Development (TDD, 테스트 주도 개발)**라는 용어가 사용되게 되었다.


<!--
TDD의 절차
TDD는 크게 Red-Green-Refactor로 불리는 세 가지 단계를 반복하는 방식으로 진행된다.

Red (테스트 작성 및 실패 확인):

먼저, 새로 구현할 기능이나 요구사항을 반영한 테스트를 작성한다.
이 단계에서는 기능이 아직 구현되지 않았기 때문에, 테스트가 실패해야 정상이다. 테스트가 실패함으로써 테스트 코드가 제대로 동작하는지를 확인할 수 있다.
Green (기능 구현 및 테스트 통과):

테스트를 통과할 수 있도록 최소한의 코드를 작성한다.
이 단계에서는 테스트가 성공적으로 통과되도록 하는 것이 목표다. 테스트가 통과하면 다음 단계로 넘어간다.
Refactor (리팩토링):

코드의 기능을 유지하면서 코드의 중복을 제거하거나 가독성을 높이는 리팩토링을 진행한다.
리팩토링을 마친 후에도 테스트가 통과해야 한다. 만약 테스트가 통과하지 않는다면, 리팩토링 과정에서 문제가 생긴 것이다.
이 과정을 반복하면서 점진적으로 소프트웨어를 완성해 나가는 것이다.

일반 개발 방식과의 차이점
일반적인 개발 방식에서는 보통 기능을 먼저 구현하고 나중에 테스트를 작성한다. 반면 TDD는 기능을 구현하기 전에 테스트를 먼저 작성한다는 점에서 큰 차이가 있다. 이로 인해 TDD는 개발자가 테스트를 염두에 두고 코드를 작성하도록 강제하며, 이는 코드의 품질 향상으로 이어진다.

일반 개발 방식과 TDD의 주요 차이점은 다음과 같다:

테스트 작성 순서: 일반 개발 방식에서는 코드 구현 후 테스트를 작성하는 반면, TDD에서는 테스트를 먼저 작성한 후 코드를 구현한다.
개발 접근 방식: 일반 개발 방식은 전체 시스템을 염두에 두고 코드를 작성하는 경우가 많지만, TDD는 작은 단위부터 시작하여 점진적으로 개발한다.
TDD의 효과
TDD를 통해 얻을 수 있는 주요 효과는 다음과 같다:

버그 감소: 테스트를 먼저 작성하므로, 코드 작성 중에 발생할 수 있는 오류를 미리 방지할 수 있다.
코드 품질 향상: 테스트를 통과하기 위해 최소한의 코드만 작성하게 되므로, 불필요한 코드가 줄어들고 코드의 가독성이 높아진다.
리팩토링 용이성: 이미 작성된 테스트가 있으므로, 리팩토링을 하더라도 기존 기능이 정상적으로 동작하는지 쉽게 확인할 수 있다.
사례
TDD는 많은 유명 기업들이 채택하고 있는 방법론이다. 예를 들어, 구글, 마이크로소프트, 아마존과 같은 대형 IT 기업에서는 TDD를 통해 안정적이고 확장 가능한 소프트웨어를 개발하고 있다. 특히 스타트업에서도 빠르게 변하는 요구사항에 대응하기 위해 TDD를 적용하여 개발 속도를 높이고 있다.

주요 라이브러리
프론트엔드 개발에서 TDD를 적용하기 위해 사용되는 주요 라이브러리는 다음과 같다:

Jest: 페이스북에서 개발한 JavaScript 테스트 프레임워크로, 빠르고 직관적인 테스트 환경을 제공한다.
Mocha: 유연하고 확장 가능한 테스트 프레임워크로, 다양한 플러그인을 통해 테스트 환경을 커스터마이징할 수 있다.
Chai: BDD 스타일의 어서션 라이브러리로, Mocha와 함께 사용하면 자연스러운 테스트 작성이 가능하다.
Cypress: 엔드투엔드(E2E) 테스트 도구로, 브라우저에서 실제 사용자와 같은 환경에서 테스트를 실행할 수 있다.
이러한 라이브러리들을 활용하면 프론트엔드 개발에서도 TDD를 효과적으로 적용할 수 있다.
-->
Loading