TDD / Тестує занадто велике навантаження / технічне обслуговування?


24

Так ви це чули багато разів від тих, хто не по-справжньому розуміє цінностей тестування. Щоб почати все, я є послідовником Agile і Testing ...

Нещодавно я обговорював виконання TDD на переписуванні продукту, де нинішня команда не практикує одиничне тестування на будь-якому рівні, і, ймовірно, ніколи не чула про техніку впорскування залежностей або тестові зразки / дизайн тощо (ми навіть не отримаємо для очищення коду).

Тепер я повністю відповідальний за перезапис цього продукту, і мені кажуть, що спроби його в моді TDD будуть просто робити кошмаром технічного обслуговування та неможливим для підтримки команди. Крім того, оскільки це додаткова програма (не веб-базована), додавання тестів є безглуздим, оскільки бізнес-драйв змінюється (зміна означає, що це, звичайно, поліпшення), тести стануть застарілими, інші розробники, які приходять на проект у майбутньому не підтримуватиме їх і стане більше тягарем для їх виправлення тощо.

Я можу зрозуміти, що TDD в команді, яка наразі не має жодного досвіду тестування, не звучить добре, але мій аргумент у цьому випадку полягає в тому, що я можу навчити свою практику для тих, хто мене оточує, але ще більше, я знаю, що TDD робить краще програмне забезпечення. Навіть якби я розробляв програмне забезпечення за допомогою TDD і відкидав усі тести на передачу його команді технічного обслуговування, це, безумовно, буде кращим підходом, ніж взагалі не використовувати TDD?

Мене збили, як я вже говорив, що робив TDD для більшості проектів для команди, яка ніколи про це не чула. Думка про "інтерфейси" та дивно виглядаючі конструктори DI відлякує їх ...

Чи хтось, будь ласка, допоможе мені в тому, що зазвичай є дуже короткою розмовою про спробу продати TDD і мій підхід до людей? У мене, як правило, дуже короткий аргумент, перш ніж впасти на коліна до компанії / команди.


3
РУН! ЛИШЕ! Кожен, хто не може зрозуміти, чому автоматичні тести полегшать їхнє життя в довгостроковій перспективі, потрібно вилучити голову (-и) з «ти-знаєш-куди».
MattC

6
@MattC TDD! = Автоматизовані тести
Неманья Трифунович

@Nemanja Trifunovic: Ага ... хто практикує TDD, використовуючи ручні тести? "Я запустив додаток, але немає кнопки для натискання!" "Так; це червоне в червоному, зелене, рефактор!"
Стівен Еверс

2
@SnOrfus: Існують автоматизовані тести без TDD. Деякі приклади: автоматизовані інтеграційні тести, регресійні тести, стрес-тести.
Nemanja Trifunovic

2
@Martin, мені було б цікаво продовжувати коментар (або допис у блозі), який обговорює, що ти в кінцевому підсумку робив і як добре (чи ні) це працювало для тебе у довгостроковій перспективі.
StevenV

Відповіді:


36

спроби в моді TDD, просто зроблять це кошмаром технічного обслуговування та неможливим для підтримки команди.

Ви не можете виграти цей аргумент. Вони складають це. На жаль, і у вас немає реальних фактів. Будь-який наданий вами приклад може бути оскаржений.

Єдиний спосіб зробити це - мати код, який має меншу вартість обслуговування.

Крім того, оскільки це додаткова програма (а не веб-версія), додавати тести безглуздо,

Усі говорять про це. Це може бути частково правдою. Якщо програма досить добре розроблена, передня частина робить дуже мало.

Однак, якщо програма погано розроблена, передня частина робить занадто багато і її важко перевірити. Це проблема дизайну, а не проблема тестування.

по мірі зміни бізнес-драйву (під змінами вони означають покращення, звичайно), тести стануть застарілими, інші розробники, які в майбутньому прийдуть до проекту, не підтримуватимуть їх і стануть для них більш тягарем для виправлення тощо.

Це той самий аргумент, як і вище.


Ви не можете виграти аргумент. Тому не сперечайтесь.

"Я повністю відповідальний за перепис цього продукту"

В такому разі,

  1. Додайте тести все одно. Але додайте тести поступово. Не витрачайте тривалий час на тести, написані першими. Перетворимо трохи. Тестуйте трохи. Перетворіть трохи більше. Перевірте ще трохи.

  2. Використовуйте ці тести, поки хтось не зрозуміє, що тестування працює, і не запитаєте, чому все так добре.

У мене був такий самий аргумент щодо переписування (від C ++ до Java), і я просто використовував тести, хоча вони мені сказали, що не хочу.

Я дуже швидко розвивався. Я попросив конкретні приклади правильних результатів, які вони надіслали в електронних таблицях. Я перетворив електронні таблиці в unittest.TestCase (не розповідаючи їх) і використовую їх для тестування.

Коли були в тестуванні прийняття користувачем - і були виявлені помилки - я просто попросив переглянути таблиці, виправити та розширити електронні таблиці з прикладами, щоб охопити проблеми, виявлені під час тесту на прийняття. Я перетворив виправлені електронні таблиці в unittest.TestCase (не повідомляючи їх) і використовую їх для тестування.

Нікому не потрібно детально знати, для чого ти успішний.

Просто будь успішним.


Дуже надихаюча відповідь там С.Лотт :). Мені було важко сказати архітектором компанії, що я буду "створювати зайві накладні витрати". Мені не видно, що я затягував проект із будь-якими їм невідомими, що в кінцевому підсумку, якщо проект запізниться, вони можуть просто вказати пальцем на тестування, яке я провів і закінчив контракт. Як ви кажете, підкрадати їх, підтверджуючи, як це допомогло, можливо, це правильний шлях. Ви абсолютно праві з точки зору аргументу, я не маю підстав, і вони теж не мають.
Мартін Блер

Чому передня панель робить занадто велику проблему дизайну? В даний час багато технологій, таких як AJAX, роблять багато в передній частині.
卢 声 远 Шеньюань Лу

@ 卢 声 远 Shengyuan Lu: Важко перевірити GUI "погляд". Ви можете протестувати шрифти та кольори. Однак вигадки браузера дуже важко перевірити точне розміщення та розмір за допомогою автоматизованого тестування.
С.Лотт

@Martin Blore: "ні вони". Точно. Той, хто каже, що тестування якось магічно додасть ризик, божевільний. Вам доведеться протестувати все одно - це неможливо. Ви можете добре пройти тестування (використовуючи TDD) або погано та випадково. Планування поганих, випадкових випробувань мені здається більш ризикованим. Але немає ніяких підстав для обговорення, поки "най-кажуть" не матимуть практичного досвіду.
S.Lott

5

Ви можете переконати таких людей (якщо взагалі є) з практичної точки зору, демонструючи цінність TDD у реальному житті. Наприклад, беручи за приклад деяку нещодавню помилку та показуючи, як побудувати тест одиниці, який гарантує 100%, що ця помилка ніколи не з’явиться більше. І тоді, звичайно, напишіть ще десяток одиничних тестів, щоб запобігти появі цілого класу подібних помилок (і хто знає, можливо, в дорозі навіть виявлення ще декількох дрімаючих помилок у коді).

Якщо це не спрацює за короткий термін, вам потрібно працювати над цим довше, просто виконуючи TDD і пильно пишучи одиничні тести над своїми завданнями. Потім складіть кілька простих статистичних даних через півроку або близько того (якщо це можливо у вашому оточенні), щоб порівняти частоту помилок у коді / завданнях, виконаних різними розробниками (анонімізовано, щоб запобігти відчуженню ваших колег). Якщо ви можете зазначити, що у вашому коді було виявлено значно менше помилок, ніж у інших, у вас може бути сильний момент продати як керівництву, так і іншим розробникам.


Це чудова ідея Пітер, дякую за це. У моєму поточному проекті є команда тестування, тому я впевнений, що було б досить легко фіксувати помилки, знайдені у віхах випусків тощо
Martin Blore

3

Ви повинні бути практичними щодо цих речей, TDD - це приємна річ у теорії, але якщо ви не оновлюєте свої тести на все, що додається, у цьому мало сенсу - ніхто не хоче запускати тест, який повідомляє про зламані код, коли його тест, який не оновлювався! Як наслідок, це може бути занадто дорогим для їх виконання - ви не будете єдиним розробником, який працює над цим кодом.

У клієнта є тестова команда .. ну, немає ніякої проблеми в перекладі тестового навантаження з розробника на тестери - саме для цього вони існують, і якщо вони знайдуть помилки через свої тести (можливо, у них багато автоматизовані інструменти тестування), то писати одиничні тести на вашому рівні мало сенсу. Щоб знайти помилки, знадобиться трохи більше часу, але вони знайдуть ті примхливі помилки "інтеграції", які б не використовували ваші тести.

Можливо, саме тому вони не дбають про тестування одиниць.

Нарешті, TDD - це нова річ, коли я був хлопцем, у нас ніколи не було тестування, і ми писали код, який працював. Блок тестування змушує деяких людей відчувати себе тепло і нечітко, але це абсолютно не вимога правильного коду.

PS. Я бачу ще одне з ваших питань, де ви критикуєте шари абстракції, і тут ви критикуєте відсутність конструкторів DI! Складіть свою думку :)


2

Оскільки все змінюється так швидко, як ви сказали, поясніть їм, що воно буде використовуватися для тестування регресії. Що дозволить заощадити багато головних болів при введенні нових помилок, оскільки хтось порушив рядок коду, який був написаний 10 років тому, щоб вирішити проблему, яка виникає 1 з кожні 10 000 000 виконання певної функції, яка викликається лише в тому випадку, якщо системний годинник увімкнено клієнт відрізняється більше ніж на 3 хвилини, ніж годинник серверної системи. Просто запитайте їх, скільки клієнтів вони можуть дозволити собі втратити через баггі програмного забезпечення.


2

Вкажіть, що пошук помилки під час розробки коштує X, під час тестування 10X та після розгортання 100X. Подивіться, чи вони принаймні дозволять вам провести пілотне тестування, коли ви реалізуєте TDD у конкретному модулі, а потім слідкуйте за порівняннями з іншими модулями під час їх розробки, тестування, розгортання та підтримки. Надаючи адекватні дані, ви зможете продемонструвати, наскільки менше зусиль було використано для створення коду в модулі TDD. Удачі.


2

Так, підтримка тестів - це тягар. Оновлення їх, оновлення тестових даних: все це забирає ваш час.

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


2
Я думаю, що це один з найважливіших моментів, який потрібно зробити для наймовців, які стверджують, що TDD - це марна трата часу та непотрібні витрати. Справа не в тому, що TDD не витрачає часу. Справа в тому, що це інвестиції, які запобігають майбутнім витратам, які на порядок більше
сара

2

Тест на свердловину - це тягар, але його добре носити. Краще заздалегідь виконати деяку роботу, яка б заощадила багато часу, коли виникає проблема виробництва або під час міграції. Я завжди хочу пройти тест, навіть якщо це невеликий тягар, але я хочу носити цей тягар.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.