TGViewer
Разработка с Дарьей Матвеевой Разработка с Дарьей Матвеевой @system_design_explained · 72 subscribers
Post #62 154
TDD

Последние 3 месяца активно практикую TDD в своей работе.
В этом посте опишу свой опыт.

📌 По классике процесс разработки с TDD должен выглядеть так: написание короткого теста, который падает, затем написание минимального кода, чтобы тест прошел, и затем рефакторинг написанного кода, без добавления новой логики. В идеале такие тесты, написанные перед началом разработки, должны служить своеобразной спецификацией, а код в результате все время следует этой спецификации.

〰️ Лично мне было немного сложновато следовать классической схеме, часто слишком увлекаюсь написанием кода и изменения в итерациях не всегда получаются минималистичными.
〰️ Также очень часто перед началом разработки хочется написать не короткий тест, а сразу большой, чтобы охватить все этапы тестового сценария, пока общая картина после чтения документации еще свежа и не размылась от погружения в технические детали. Но при следовании TDD, написание и выполнение теста должны быть быстрыми. Это значит что надо писать юнит-тесты, а в нашем проекте в основном используются интеграционные. Да и сама система спроектирована так, что сложно писать юнит-тесты, очень много приватных методов, а публичные часто принимают сложные объекты, завязанные на другие объекты.
〰️ Все это приводит к тому, что когда иногда интеграционных тестов становится слишком много, и они выполняются слишком долго. Пока размышляю над тем, как все-таки частично перейти на юнит-тесты.

Но несмотря на это, плюсов у TDD для меня оказалось намного больше.
✔️Во-первых, теперь к каждой задаче пишу тесты, что улучшает покрытие.
✔️Во-вторых, раньше зачастую недооценивала для себя время, нужное для написания тестов, и это выливалось в неверное планирование сроков. Теперь временные затраты оцениваю куда лучше.
✔️В-третьих, когда тест пишется после кода, сложно абстрагироваться для написания максимально непредвзятого теста. Все равно неосознанно опираешься на написанный код, и легко упустить краевые случаи.
✔️В-четвертых, появляется большая свобода в маневрах. Если по ходу разработки я хочу переписать свой код, то могу просто откатиться к предыдущему коммиту (которые надо делать после каждой итерации) и начать все заново. Не боясь, что большой кусок кода будет невозвратно сломан.

Подводя итог, для меня это крайне положительный опыт и очень продуктивная техника тестирования, которой буду придерживаться и дальше.
  • ❤ 4
  • ✍ 3
More from @system_design_explained
  1. Sep 22, 2026Нашла способ, который мгновенно и без дополнительных усилий увеличил мою продуктивность пр…
  2. Mar 27, 2026Я в ВК : https://vk.ru/dev_with_dm
  3. Mar 27, 2026Читаю в последнее время много критики микросервисов, и у меня тоже есть пример, как раз за…
  4. Mar 4, 2026В функциональных языках рекомендуется делать все объекты immutable, и, хотя на работе я пи…
  5. Dec 4, 2025Недавно занималась задачей, где нужно было реализовать оптимистическую блокировку сущности…
  6. Nov 21, 2025Обнаружила еще один плюс TDD. Согласно подходу, я пишу тест, который падает, пишу код, что…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →