Тестування блоку та інтеграції: як воно може стати рефлектом


27

Усі програмісти в моїй команді знайомі з тестуванням одиниць та інтеграцією. Ми з цим усі працювали. У нас всі письмові тести. Деякі з нас навіть відчули покращене почуття довіри до власного коду.

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

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

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

Моє запитання таке: чи існують методи, з якими ви експериментували, які допомагають створити динаміку / імпульс всередині команди, що приводить до того, що люди, природно, хочуть створити та підтримувати ці тести?


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

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

2
@superM LOL! Я знаю, що ти маєш на увазі. Надмірну політичну коректність отримує моя коза. Я схильний писати або повністю гендерно нейтрально, або використовувати "він" виключно просто тому, що це природно пов'язати такі посилання з власною гендерною ознакою. Однак мій коментар мав на меті бути більш застосованим, а не конкретно викликати конкретних осіб. ;)
С.Робінс

1
Я зачистив деякі коментарі. + -1 коментарі - це чистий шум, і цього слід уникати, коли вони не додають нічого корисного до публікації - прочитайте нашу сторінку привілеїв для коментарів і будь ласка, проводите такі розмови в Software Engineering Chat . Що стосується образливих коментарів, будь ласка, позначте їх як такі.
янніс

Відповіді:


13

Ніхто з нас насправді не відчуває себе погано, коли одночасно з фактичним кодом не пишемо одиничні тести.

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

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


+1 за зміну культури, і чи хотів би я ще один +1 надати вам для наведення прикладу. Гарна відповідь.
Ерік Дітріх

5

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

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

Особисто для мене це було просто відкриття структури StoryQ для BDD в DotNet, що зробило її занадто простою ігноруванням, і мене цілком перебрало за тест «перший бар’єр» між тестом і порівняно з тестом. Згодом я знову підтвердив свій вибір, коли знайшов NCrunch для Visual Studio. Половина битви іноді полягає не в продажі ідеї, а в простому зниженні зусиль, необхідних для впровадження радикальної зміни звичок ... і навіть тоді це може зайняти небагато часу та роботи. Однак цих самих особистих тригерів було недостатньо, щоб перешкодити наближенню моїх колег у той час, які все ще пишуть стільки ж свого тестового коду одночасно або навіть після коду їхньої реалізації.

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

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


3

Ніхто з нас насправді не відчуває себе погано, коли одночасно з фактичним кодом не пишемо одиничні тести

Не впевнені, що ви маєте на увазі під "одночасно", але як щодо їх написання перед фактичним кодом?

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

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

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

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

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


3
Ще одна приємна користь для TDD (особливо з інструментом безперервного тестування) - швидкий зворотний зв'язок. У великій базі коду, де складання та запуск програмного забезпечення може бути на порядку хвилин, TDD / CT різко прискорює зворотний зв'язок і, таким чином, розвиток.
Ерік Дітріх

0

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

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

чим активніше щось робити, тим менше шансів, що це ви зробите з цього звичку


0

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

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


0

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

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

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

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

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

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