Я хотів задати саме це питання, щоб побачити, скільки компаній насправді практикують TDD.
У 11 років я займався професійним програмуванням, лише останні два організації навіть знали про TDD (це було майже 5 років, до цього часу TDD не був таким популярним, як сьогодні). Я вирішу погоню і відповім на ваше запитання, перш ніж перейти до мого торгового поля для TDD :)
В останній компанії, в якій я працював (он-лайн академічний видавець гуманітарних та наукових колекцій), ми знали, що нам потрібно практикувати TDD, але ми там ніколи не потрапляли. На захист у нас була база коду на 250 тис., Тому додавання тестів до нестабільної кодової бази такого розміру здавалося непереборним (я відчуваю провину, набравши це зараз!). Навіть найкращі з нас помиляються .
Кожен, хто зробив навіть невелику кількість TDD, знає, наскільки болючими можуть бути тести на переозброєння коричневого коду, нестабільного коду ... Основними причинами є неявні залежності (ви не можете потягнути всі важелі, щоб стверджувати результати з коду - ви не можете знущатися сценарії) та порушення принципу єдиної відповідальності (тести складні, надумані, вимагають занадто великої настройки та важко зрозуміти ).
Ми тимчасово збільшили нашу команду з контролю якості (від одного, можливо, двох людей до півдесятка чи більше), щоб протестувати платформу перед будь-яким випуском. Це було надзвичайно дорого, мудро і фінансово, на деякі випуски знадобиться три місяці, щоб пройти «тестування». Вже тоді ми знали, що ми доставляємо проблеми, вони просто не були "блокаторами" або "критичними", а "високими пріоритетами".
Якщо у вас є багаторічний комерційний досвід, ви оціните, що кожна компанія ставить перед собою критичні завдання, а потім винайде більш високий рівень пріоритетності над цим, і, швидше за все, вище, ніж над цим, особливо коли хтось зверху натискає на функцію / помилку. Я відступаю ...
Я радий повідомити, що я практикую TDD в моїй теперішній компанії (телекомунікаційний, веб-розробка та розробка мобільних додатків) у поєднанні з Jenkins CI для надання інших звітів про статичний аналіз (висвітлення коду є найбільш корисним після затвердження тестових пакетів) . Проекти, на яких я використовував TDD, - це платіжна система та сіткова обчислювальна система.
Крок продажів ...
Часто це може бути важкою боротьбою, яка виправдовує автоматизоване тестування для нетехнічних членів команди. Написання тестів додасть більше роботи в процесі розробки, але ... час, який ви вкладете в тестування зараз, ви заощадите на витратах на обслуговування пізніше. Ви дійсно просто позичаєте час . Чим довше продукт використовується, тим більша економія - і це допоможе вам уникнути великих перезаписів .
Тест спочатку означає, що ви кодуєте спочатку свої наміри, а потім підтверджуєте, що ваш код виконує цей намір. Це забезпечує фокус і переганяє ваш код виконувати лише те, що призначено, і не більше (читати не слід). Це одночасно виконана специфікація та документація (якщо ваш тест добре написаний, а тести повинні бути такими ж читабельними / чистими, як і ваш системний код, якщо не більше!).
Непрограмісти (часто) не матимуть цього розуміння, тому TDD не має для них великої цінності, і він розглядається як ярлик для одноразового використання до більш ранньої дати випуску.
Програмування - це наш домен, і, на мій погляд, це змушує нас , як професіоналів, брати участь у консультуванні щодо найкращих практик, таких як TDD. Не для того, щоб керівники проектів вирішили, чи робиться це для скорочення часу на розробку, це поза їх юрисдикцією . Точно так само вони не кажуть вам, яку рамку, рішення кешування або алгоритм пошуку використовувати, вони не повинні говорити вам, чи слід використовувати автоматичне тестування.
На мою думку, галузь розробки програмного забезпечення (в цілому) в даний час порушена, той факт, що наявність тестів для вашого програмного забезпечення НЕ є нормою.
Малюйте це в інших галузях промисловості: медичній, авіаційній, автомобільній, косметичній, м'яких іграшках, алкогольних напоях тощо. Я попросив свого нареченого назвати галузь, де вони не тестують товар, і вона не змогла!
Можливо, це несправедливо сказати, що ніяких тестувань не відбувається, тому що це робиться ... але в компаніях без автоматизованого тестування це дуже ручний / людський (читати незграбний і часто схильний до помилок) процес.
Я б заперечував у вашому питанні ...
Зазвичай вони хотіли, щоб розробка почалася негайно, або після короткого дизайнерського рішення. Більш схожий на Agile.
Будучи "Agile" не передбачає проходження без тестів, першим учасником, переліченим на agilemanifesto.org, є Кент Бек , творець XP та TDD!
Дві книги, які я дуже рекомендую, якщо ви зацікавлені в TDD, або просто не прочитали їх і є захопленим програмістом (це всі читають правильно?;)
Вирощування об'єктно-орієнтованого програмного забезпечення, керованого тестами
Чистий код - серія Роберта К. Мартіна ("Дядько Боб")
Ці дві книги компліментують одна одній і конденсують багато сенсу на кілька сторінок.
Дякуємо, що задали це питання :)