В поисках конкретных примеров того, как TDD улучшил качество и / или скорость разработки [закрыто]

14

В моей компании я пытаюсь обосновать, почему мы должны заниматься TDD. В настоящее время большинство разработчиков просто делают все возможное, чтобы выполнить проект, а затем добавляют добавочные тесты по факту, чтобы соответствовать показателям менеджера. Будем весьма благодарны за любые примеры от известных компаний, которые делают TDD и видят преимущества.

Мэтт Вест
источник
1
На самом деле, я думаю, что «добавить модульные тесты и надеюсь, что их менеджер не заметит, что они« тратят время »», чаще, чем «добавить модульные тесты, чтобы соответствовать метрикам менеджера», но я думаю, поэтому некоторые тематические исследования были бы хорошими.
Carson63000
1
Также TDD позволяет очень рано в процессе определения когда вы закончите, поскольку у вас есть все тесты, которые должны пройти.
@ user1249 TDD не говорит «напишите все тесты перед написанием любого кода». Там написано: «Напишите один тест, который не прошел, и одну вещь, чтобы он прошел, повторите при необходимости». Если вы сначала пишете все свои тесты, вы теряете тесную петлю обратной связи между тестовым и рабочим кодом, что является одной из основных причин использования TDD.
Фрэнк Шиарар

Ответы:

8

Изучение 4 проектов в IBM и Microsoft. Опубликовано в журнале Emperical Software Engineering .

Эмпирические исследования показывают, что разработка через тестирование улучшает качество

В статье, впервые опубликованной в журнале Empirical Software Engineering, сообщается: «Кажется, что TDD применим в различных областях и может значительно снизить плотность дефектов в разработанном программном обеспечении без значительного снижения производительности команды разработчиков». В исследовании сравнивались 4 проекта в Microsoft и IBM, которые использовали TDD, с аналогичными проектами, которые не использовали TDD ...

Документ включает 1 тематическое исследование в IBM и 3 из Microsoft. В каждом из тематических исследований сравниваются две команды, работающие над одним и тем же продуктом с использованием одних и тех же языков разработки и технологий, под руководством одного и того же менеджера более высокого уровня, только одна из которых использует разработку через тестирование (TDD). Ни одна из команд не знала, что они будут частью исследования во время их циклов разработки. На примере IBM следовали команды, занимающиеся разработкой драйверов устройств. Корпорация Microsoft следила за командами, работающими над Windows, MSN и Visual Studio.

В документе описываются методы работы с TDD, используемые командами как рабочие процессы с поминутной оплатой, а также рабочие процессы на уровне задач ...

rwong
источник
6

В недавней книге «Создание программного обеспечения: что работает и почему мы в это верим» есть глава, посвященная TDD. Но вы можете быть разочарованы, поскольку, если я правильно помню, исследование не выявило каких-либо реальных преимуществ TDD. Тем не менее, тематическое исследование было интересным, и книга в целом является одной из лучших книг по программному обеспечению, которые я недавно читал. Он содержит множество примеров из практики таких вещей, как парное программирование, анализ кода и т. Д.

Kevin
источник
4

Обязательно проверьте это: TDD Проверено Эффективно! Или это?

... когда Фил Хаак объявил, что исследования поддерживают эффективность TDD, я был более чем заинтересован в том, чтобы увидеть самом деле содержалось связанном отчете . Фил цитирует из резюме.

Мы обнаружили, что учащиеся, которые вначале тестировали, в среднем написали больше тестов, и, в свою очередь, студенты, написавшие больше тестов, имели тенденцию быть более продуктивными. Мы также отметили, что минимальное качество линейно возрастало с увеличением количества тестов для программистов, независимо от используемой стратегии разработки.

Фил, очевидно, прочитал остальную часть отчета и предоставляет свои любимые произведения, которые, кажется, соответствуют его названию. Однако одной из вещей, о которой я беспокоюсь, когда вижу вещи, поддерживающие новейшие и лучшие практики разработки программного обеспечения, является сильная тенденция к смещению подтверждений - поиску подтверждений текущих теорий и игнорированию контр-индикаторов.

Так что, будучи любопытным типом, и, поскольку TDD - это то, на что я слежу, чтобы увидеть, если это то, что я, возможно, захочу принять однажды, я вошел в отчет ...

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

У автора есть много положительных моментов о том, что TDD не настолько эффективен (хотя, несмотря на то, что его раскрутили до смерти)

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

посмотрите, сколько времени вы и клиент потратили на тестирование программного обеспечения вручную; сравните это с оценкой того, сколько времени потребовалось бы на автоматические тесты в стиле TDD. Карманная разница

По моему опыту, автоматизированные тесты TDD - это золото, потому что они обеспечивают страхование и устраняют огромное количество ручного тестирования

Как отметил Андрес Ф., эти преимущества можно получить только за счет автоматического тестирования, а не обязательно TDD, однако TDD требует автоматических тестов, а не запоздалой мысли или приятного для восприятия

Вынужденность сначала задуматься о тестировании также заставляет задуматься о проблемах, связанных с качеством, таких как модульность, дизайн интерфейса и т. Д., Прежде чем вы начнете писать код.

Лично я считаю, что одним из самых больших преимуществ TDD является то, что написание теста сначала сохраняет свежесть в памяти того, что на самом деле должен делать код, пока вы пишете код, а не своего рода выяснение этого. -по вы-код.

Стивен А. Лоу
источник
2
Я согласен, но также важно отметить, что прохождение модульных тестов не означает, что программное обеспечение является правильным, а только то, что оно выполняет то, за исключением модульных тестов. Если в модульном тесте есть ошибки, то в программном обеспечении также может быть ошибка. Если это не пройдет, программное обеспечение может даже быть правильным, если модульный тест глючит. Вот почему ручное тестирование также необходимо.
Тамас Селеи
1
Заявленная цель TDD - не уменьшить ручное тестирование, а улучшить дизайн. Автоматизированные тесты являются ортогональной концепцией TDD; Вы можете иметь их без TDD.
Андрес Ф.
@AndresF. ты прав; Отредактированный ответ
Стивен А. Лоу
2

Вы хотите обосновать это: предложить вам сделать это для следующего проекта, а затем учиться на нем. Если окажется, что он отлично работает для вас, то я надеюсь, что вы продолжите использовать его, и если вам потребовалось больше времени, чтобы выполнить проект и / или потратить все свое время на написание тестов вместо написания кода, то вы наверняка сбросите его как отказ.

Я думаю, что реальное решение - это (как и большинство вещей) промежуточное, вы хотите тесты, но не хотите, чтобы тесты были более важными, чем проект.

(лично я считаю, что TDD - это причуда, звучит хорошо в теории, но на практике ... не так хорошо. Я считаю, что интеграционное тестирование гораздо важнее, но это могут быть просто сложные проекты, над которыми я работаю).

gbjbaanb
источник
2

Я работаю с TDD в течение 2 лет, и там, где я работал в то время, мы все отказывались использовать, включая менеджеров. Однако вскоре это оказалось правильным решением. Преимущества, которые мы вскоре заметили, были

  • Обнаружение ошибок на ранней стадии.
  • Написание лучшего кода даже не осознавая.
  • Ваш код теперь более удобен в обслуживании, поскольку из-за того, что вы тестируете, все в маленьких кусочках (у нас были функции с 300-400 строками) глупо. Теперь макс 30 и все независимые испытания.

Менеджеры не будут знать, так как все они заинтересованы в одном: «Вы закончили». Но потом они жалуются, когда программное обеспечение продолжает ломаться, не осознавая. С хорошим охватом и разумными тестами. Это не количество, а качество, которое вы действительно можете увидеть, когда кто-то нарушает функциональность. Также, к сожалению, это сложно, если вы сами по себе. У меня была та же проблема, так как вам может потребоваться изменить код, например, базовые классы и т. Д., Чтобы вы могли сделать части программного обеспечения тестируемыми.

Я приведу вам пример. Я хотел издеваться над хранилищем, но не было интерфейса, и мне нужно внедрить хранилище в мой сервисный уровень и, следовательно, добавить / изменить конструктор по всему магазину, это оказалось большим делом, но в в конце у меня более 200 тестов, которые просто тестируют одну область системы, и они были впечатлены.

Я обычно делаю следующее:

  • У меня очень короткие тесты
  • Только 1 утверждение. Нет русской рулетки.
  • Я тестирую положительный-отрицательный и исключительный сценарий

Что касается тематических исследований, я боюсь, я не уверен, что видел их. Вы должны построить свой проект и стать вашими примерами. Они тоже могут быть впечатлены.

Я надеюсь, что это помогает

брикс
источник