Files
frontend-docs/docs/architecture/07-tdd.md
2025-03-07 14:17:37 +03:00

68 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
sidebar_position: 7
---
# Test driven development
TDD (Test-Driven Development) — это методология разработки программного обеспечения, в которой написание тестов предшествует написанию кода. Основная идея TDD заключается в том, что разработчик сначала пишет тест для новой функциональности, а затем реализует код, который делает этот тест успешным. Этот процесс повторяется для каждой новой функции или улучшения.
TDD основан на нескольких ключевых принципах, которые помогают создавать качественный, поддерживаемый и надежный код. Рассмотрим основные принципы TDD:
## 1. Красный — Зеленый — Рефакторинг (Red — Green — Refactor):
Это основной цикл TDD, который состоит из трех этапов:
1. **Красный (Red):**
- Написание теста для новой функциональности, который изначально не проходит (тест "красный", так как функциональность ещё не реализована).
- Это помогает четко определить требования к коду.
2. **Зеленый (Green):**
- Написание минимального количества кода, необходимого для того, чтобы тест прошел (тест становится "зеленым").
- На этом этапе важно не добавлять лишнюю функциональность.
3. **Рефакторинг (Refactor):**
- Улучшение кода без изменения его поведения (например, устранение дублирования, улучшение читаемости).
- Рефакторинг выполняется только после того, как все тесты проходят.
## 2. Тестируемый код:
- Код, написанный с использованием TDD, изначально проектируется так, чтобы его можно было легко тестировать.
- Это часто приводит к более модульной и слабо связанной архитектуре.
## 3. Постепенное развитие (Incremental Development):
- Функциональность добавляется небольшими шагами, каждый из которых сопровождается тестами.
- Это позволяет избежать создания сложных и труднотестируемых систем.
## 4. Тесты как документация:
- Набор тестов служит живой документацией для кода, показывая, как он должен работать.
- Это особенно полезно для новых разработчиков, которые могут быстро понять, что делает код.
## 5. Минимальный рабочий код (Minimal Working Code):
- На этапе "зеленого" теста пишется только тот код, который необходим для прохождения теста.
- Это помогает избежать переусложнения и добавления ненужной функциональности.
## 6. Частые запуски тестов:
- Тесты запускаются после каждого изменения кода, чтобы убедиться, что новая функциональность не сломала существующую.
- Это помогает быстро находить и исправлять ошибки.
## 7. Покрытие кода тестами (Code Coverage):
- TDD стремится к максимальному покрытию кода тестами, чтобы минимизировать вероятность ошибок.
- Однако важно помнить, что 100% покрытие не всегда гарантирует отсутствие багов.
## Преимущества TDD:
1. Высокое качество кода:
- Код, написанный с использованием TDD, обычно более надежен и меньше подвержен ошибкам.
2. Упрощение рефакторинга:
- Наличие тестов позволяет безопасно вносить изменения в код, не боясь сломать существующую функциональность.
3. Четкие требования:
- Тесты помогают четко определить, что именно должен делать код.
4. Раннее обнаружение ошибок:
- Ошибки обнаруживаются на ранних этапах разработки, что снижает стоимость их исправления.
5. Улучшение архитектуры:
- Код становится более модульным и слабо связанным, так как он изначально проектируется для тестирования.
## Недостатки TDD:
1. Дополнительные затраты времени:
- Написание тестов требует времени, что может замедлить начальные этапы разработки.
2. Кривая обучения:
- TDD требует определенного уровня навыков и дисциплины, что может быть сложно для новичков.
3. Не всегда подходит:
- TDD может быть избыточным для небольших проектов или прототипов.