Як ви переконуєте керівництво «інвестувати» в одиничні тести?


46

Як ви переконали свого керівника дозволити вам пройти тестування?

Під "використанням" я маю на увазі, що мені дозволяють розробляти, перевіряти контроль джерела та підтримувати тестові одиниці з часом тощо

Типові заперечення керівництва:

  1. Замовник не платив за одиничні тести
  2. Проект не передбачає часу для тестування одиниць
  3. Технічна заборгованість? Яка технічна заборгованість?

Чи знаєте ви інші заперечення? Які були ваші відповіді?

Спасибі заздалегідь!


6
Про цю саму тему існує ціла глава на artofunittesting.com .
StuperUser

6
Не змішуйте тести та TDD, МОЛУЙТЕ ! Це змушує людей думати, що їм не потрібні тести, якщо вони не роблять TDD!
П Швед

1
Люди, які потребують переконливості, не переконливі. Вважайте свій сценарій втраченою причиною.
Марк Канлас

@Pavel, спершу я думав, що ти поцупиш, але ти маєш рацію. Я хочу мати "дозвіл" на тестування одиниці, періоду. TDD - це моя власна річ.
louisgab

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

Відповіді:


25

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

http://practicalagility.com/show-them-the-numbers-its-results-that-matter/

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

Мій висновок на основі цього досвіду:

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

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

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

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


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

Джо, вибач за мертве посилання. Я повторно повідомив про це у своєму особистому блозі, тому посилання має працювати зараз.
Paddyslacker

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

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

@Paddyslacker Я не згоден. Це хоч трохи курячого яйця. Якщо вам потрібен дозвіл, щоб почати писати одиничні тести, важко використовувати їх, щоб показати доказ того, що дозвіл повинен бути наданий. Це ні те, ні. Порівняння з реальними даними є набагато, набагато сильнішим аргументом. Цей альтернативний аргумент слабший, але простіший у монтажі.
JimmyJames

20

Показати рентабельність інвестицій (ROI)

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

Приклад. Функція ручного тестування X займає 30 хвилин. Написання автоматизованого тесту на це зайняло б 1 годину. Навіть якщо у нас немає помилок, нам доведеться тестувати функцію X десять разів під час проекту, оскільки його залежні шари та компоненти змінені. Тож автоматизація тесту на функцію X допоможе нам заощадити 4 години протягом життя проекту.

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

Підприємства розуміють економію часу та грошей. Ось як продати.


3
Крім того, коли додаток розгорнуто і хтось попросить зміни, набагато простіше зрозуміти, чи порушуєш ти щось зі своїми змінами.
m4tt1mus

4
@mattimus: абсолютно - автоматизований тестовий набір окупається як ануїтет; це, власне, страхування
Стівен А. Лоу

15

Якщо ви вже стикалися з ними, і з ними все не в порядку, але вам не зручно писати код без них ... тоді не запитайте знову. Просто напишіть їх і не перевіряйте їх.

Керівництво не збирається рахувати рядки коду, але вони побачать, що всі ваші чеки мають більш високі швидкості пропуску від QA (або клієнтів), і в підсумку вони запитають, чому ... тоді ви можете бути схожими на "BAM! TDD" ! "

Ви не вадитесь з проектом, процесом чи джерелом ... тому я не бачу негативної причини. Чесно кажучи, я не бачу причини, чому це відрізняється часом, ніж запускати всі ваші ручні запуски + введення + перевірити результати тестів.


4
+1: Ви все одно повинні пройти тестування. Просто напишіть одиничні тести, а не кайфуйте про те, як слід робити тестування.
S.Lott

1
Якщо їх локально не працює в командному середовищі із загальною базою коду, інші люди продовжуватимуть ламати ваші тести своїми змінами.
Альб

3
@Alb: Це ціна, яку ви платите, коли керівництво не приймає на борт - краще, ніж ніяких тестів.
Стівен Еверс

3
Браво. Будь-який тест краще, ніж тест. Якщо тест перерваний через чужу зміну, це хороший привід запитати, чому API змінився без будь-якого повідомлення.
S.Lott

"Управління не збирається рахувати рядки коду", що дуже вірно. Дякую за відповідь!
louisgab

7

1) Замовник не платив за одиничні тести

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

2) Проект не передбачає часу на TDD

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

3) Технічна заборгованість? Яка технічна заборгованість?

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

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

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


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

1
Хто додав функції / виправлення та не оновлював тести одиниць, не розумів поняття одиничного тесту.
Акіра Ямамото

Дійсно, Акіра, це одне з найбільш заплутаних питань, що зачіпають життєздатність TDD або пов'язаних з цим процесів. Майте на увазі, я, мабуть, писав це 7 років тому, дуже багато актуального. Писати (хороші, об’єктивні, стислі) тести важко. Написання тестів на кодову базу, яка не має жодної, не дуже складна. Домогтися нетехнічного управління бачити переваги важко (якщо тільки вони не прочитають статтю про це, в такому випадку ви отримаєте "метрику" до смерті. Навіть поняття того, що є одиницею, важко. Я класицист, так моя ідея одиниці не є такою ж, як у макістів (як приклад із залишеними 30 символами).
Ян

4

Для кожного клієнта, який стикається з виробничими проблемами,

  1. Напишіть тест на одиницю та надішліть електронному листу менеджеру повідомлення про те, що ви додали тест на одиницю для висвітлення сценарію.

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

  3. Скажіть йому, що якби до цього коду було проведено тестування до початку випуску коду, цього питання про виробництво ніколи б не сталося.

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


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