Колега не бажає використовувати одиничні тести "як це більше кодувати"


25

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

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

То який найкращий шлях вперед для мене?


3
Відраза до написання одиничних тестів, можливо, має менше спільного з вашим колегою, ніж із систематичними накладними витратами на загальні варіанти тестових одиниць.
mario

2
@james: Перегляньте мою відповідь на @ m.edmondson.
doppelgreener

Добре !! Менша конкуренція для вас !!

@Jonathan - досить справедливо, я виправлений
ozz

@ m.Edmondson - нова робота .... це трохи мовою в щоках була частина мого коментаря, але це звучить як вдале місце для роботи.
ozz

Відповіді:


23

Вона не усвідомлює переваги тестування одиниць, і ось що потрібно змінити:

  • Її усвідомлення.

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

Ви можете спробувати обговорити з нею про всі переваги і вислухати всі її зустрічні аргументи. Зачекайте, поки вона закінчить говорити, перш ніж почати говорити самостійно.

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

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


20
Полюбіть список одного предмета. +1
Арман

1
Ця відповідь була б ідеальною, якби ви зупинилися відразу після списку. +1 :)
Тім Пост

Привіт Вітаю Тім за 2-ю позицію на виборах ТА!

6
Я відчував, що цей список заслужив власну кругову діаграму.
Томаш

Вам також може знадобитися змінити її готовність пересилати помилок. Деякі способи уникнення дефектів можуть зробити краще тестування важливішим.
каменеметал

15

Напишіть одиничний тест (не кажіть їй)

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

Ховатися...


1
+1 За вказівку на те, що помилки неминучі, і заховати їх.
Ніл

+1 Написання повного набору одиничних тестів для одного конкретного фрагмента коду може виявити достатньо проблем з кодом, які в будь-якому випадку демонструють переваги. Я пам’ятаю, як переглядав презентацію про те, як можна використовувати одиничні тести для підтримки інтерфейсу / специфікацій API / поведінки через повне перезапис коду ...
JBRWilkinson

3
@JBRWilkinson: Мерб (колишня рамка веб-додатків Ruby) зробив саме це. Хоча не з одиничними тестами, а з функціональними тестами. Архітектура виросла "органічно", і хоча рамки були приємні у використанні , це було не приємно підтримувати та розширювати . А оскільки ремонтопридатність та розширюваність насправді були двома основними точками продажу над її конкурентом Ruby on Rails, їм, очевидно, потрібно було щось зробити. І те, що вони робили, було буквально до rm -rfджерел і тестових каталогів, зберігаючи лише функціональні тести, і просто проходити їх повторно один за одним.
Йорг W Міттаг

11

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

Тому вона не «пише більше коду», вона робить менше вручну.


1
залежить, якщо у вас є тестова команда, яка робить все для вас :)
gbjbaanb

11

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

Але що, коли завтра чи на наступному тижні в коді буде внесено невелику (чи велику ...) зміну? Чи з радістю ваш колега повторював би одні й ті ж ручні тести після кожної зміни, щоб переконатися, що нічого не порушено? Або вона вважає за краще «коди і молитися»?

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

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

Однак, якщо вона не переконана, можливо , вам доведеться займатись збиранням важких фактів . Такі факти можуть бути

  • коефіцієнти дефектів у коді, написаному вами проти її
  • написання набору одиничних тестів проти її коду та документування знайдених помилок.

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


Дуже малоймовірно - хоча невідомо мати довгі сторінки тестових планів (відмінні документи)
billy.bob

@ m.edmondson, так, це було просто риторичним питанням :-)
Péter Török

+1 для повторюваності Я агресивний рефактор (ер), і мені подобається те, що я можу знайти регресії дуже швидко, коли повністю перепишу розділ коду.
Майкл К

3

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

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


Ми на .NET 1 (жарт, який я знаю) - чи можна тут реалізувати одиничні тести?
billy.bob

1
@ m.edmondson: Щось на зразок NUnit, можливо? ( nunit.org )
доктор Ганнібал Лектер

@dr Hannibal Lecter - Так, я думаю, що у нас є копія цього місця десь я бачу, чи можу я її знайти
billy.bob

4
Для ефективності одиничних тестів не потрібно використовувати певний набір. Я написав їх просто в python для дзвінків проти програми c ++ і перевірки отриманих значень. Рамка, звичайно, допомагає, але це не є необхідністю.
TZHX

3

Грати в захисника чортів: у неї є крапка. Я зазвичай ставлю це як:

Автоматичні тести вирішують проблеми великого коду з ще більшим кодом.

Обгрунтування:

  • дослідження про співвідношення швидкості відмов та метрики ОО , заголовок результату: "Після контролю розміру [класу] жодна з досліджуваних нами показників більше не асоціювалася зі схильністю до відмов" . (У дослідженні обговорюється розмір класу. Чи поширюється цей ефект на розмір бази коду? Можливо. На мою думку )
  • Емпірично великі проекти мають тенденцію рухатися вперед повільно. "5K рядків протягом ночі в новому проекті" проти "10 рядків / день на великому". Чи вказує це на "опір" змінам, що збільшуються, залежно від розміру бази коду?
  • Ми завжди проголошуємо "кращої мови немає, це залежить від проблеми". Однією з основних вимог є легко моделювати проблемні об'єкти та операції легко мовою, яку вибираєте. Хіба це не пропонує вибрати мову, де вираження вашої проблеми є більш складним, гірше , і чи це знову не співвідноситься з кінцевим розміром бази коду?

Зараз є декілька аргументів, щоб легко стріляти проти цього. Дозвольте звернутися до тих, про які я можу придумати:

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

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


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


2

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

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

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

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

Якщо команда не може досягти консенсусу, що ви повинні писати одиничні тести, то я пропоную вам знайти іншу команду розробників, з якою працювати;)


2

Вона начальник?

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

Хіба вона не начальник?

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

Справа з документами, коли TDD міг заощадити час та $$ MONEY $$.

Цей клоп представився. Це було б спіймане, перш ніж жити. Витратити 2 години на профілактику врятувало б нам 10 годин лікування. Це сталося тут і тут, і тут. Ті 10 годин роботи, які врятували б підприємство 30 чоловік годин. Ось такі великі гроші.


1
Намагатися виконувати одиничні тести згори - це як змусити чоловіка їсти більше овочів. Вони в кращому випадку дотримуватимуться неохоче і впадуть назад у старі звички, коли ви перестанете дивитися. Краще поводьтеся з розробниками, як з чуйними дорослими, і повідомте їм, що корисні тести корисні.
nikie

1

Це залишає мене в позиції чогось модифікувати

Чому?

Вони створили проблему. Вони повинні це вирішити.

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

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

Нічого не зміниться, якщо вони не відчують біль низької якості.


> Вони створили проблему => Вони повинні її вирішити. Іноді люди, найближчі до полотна, не можуть побачити всю картину. Складання одиничного тесту мало б трохи роботи, але не обов'язково прибирати роботу інших. Можливість навести приклад.
JBRWilkinson

1
@JBRWilkinson: Хоча правда - і те, що я часто роблю - це не впливає на культурні зміни. Якщо хтось відмовляється робити тести, існує культура, яка робить цю відмову (а) можливою та (б) посиленою як гарною поведінкою. Мовчазне взяття на себе тягаря виправлення чужого безладу не виправить основні причини.
S.Lott

Хоча я погоджуюся з тим, що членам команди було б непридатним просто викручувати шалений код і розраховувати на інших, що займаються їхнім безладом, я вважаю, що шкідливо сприймати "якщо ви порушите його, то вам належить". Ви не хочете, щоб люди боялися зміни та вдосконалення коду. Натомість зосередьтеся на поширенні належних практик та створіть набір звукових тестів. Тоді ви можете працювати над створенням «спільної власності». Це код кожного. Всі це виправляють, кожен вдосконалює і бере на себе відповідальність.
сара

1

Вона цілком правильна, одиничні тести - це "більше коду".

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

Киньте виклик їй:

  1. Що станеться, якщо хтось, хто не знайомий з кодом, щось змінить.
  2. Що станеться, якщо хтось недосвідчений щось змінить.
  3. Витрати на підтримку системи не вимірюються тим, скільки часу потрібно для створення. Це довгострокова пропозиція. Подумайте про загальну вартість володіння.
  4. Її оцінка (якщо це було потрібно до початку кодування) повинна містити вимогу написати одиничні тести. Ділові люди не створюють вимог, які вимагають безпосередньо тестів на одиницю, але вони мають неявну вимогу до якості та вимагають, щоб майбутні зміни не були заповнені помилками або той самий програміст змінив джерело.

Я не впевнений, що купую "це більше код" просто так. Це може бути. Мабуть, часто так і є. Але це не повинно бути. Хороший тестовий набір допоможе вам і в написанні менше коду для початку (ви знаєте, коли закінчите, і можете зупинитись відразу), а також допомагає вам переробляти та мінімізувати код частіше. Це призводить до безлічі тестів і не так багато виробничого коду, на відміну від жодних тестів і великого безладного коду виробничого коду, який ніколи не очиститься.
сара

1

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

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


1

Покажіть їй, наскільки допомагають одиничні тести, створивши самостійні тести.

Як казав святий Франциск одного разу: "Проповідуйте завжди. Коли потрібно, використовуйте слова".

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

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

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