Як створити середовище, коли виправлення тестів вважається пріоритетним?


22

Я інженер програмного забезпечення середньої компанії. У нас досить міцна тестова платформа, що працює на TeamCity. Він робить одиничні тести на кожній контрольній і щоденній одиничній пробі / БВТ.

Проблема полягає в тому, що у нас дуже багато зламаних одиничних тестів.

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

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

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

Який найкращий спосіб почати заохочувати інших виправляти свої тести та визначати пріоритетність фіксації тестів у своїх спринтах?

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


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

Насправді у нас є автоматичний пістолет nerf ... але збірка не зламана, просто тести блоку :)
Codeman

7
Порушення одиничних тестів повинно означати розрив конструкції. ;)
Єроен Ванневель

2
@ Ӎσᶎ: Бай-енд важливий, але ви не можете отримати вкладку для вирішення проблеми, поки люди фактично не знають про проблему. У цьому випадку потреби в закупівлі спочатку надходять лише від керівників команд та менеджерів. Покупка розробників може відбутися пізніше і, як правило, тоді, коли система побудови створена, щоб окремі розробники платили за власні помилки.
Aaronaught

2
Якщо пончики зазнали невдачі, тостуйте. :-)
Росс Паттерсон

Відповіді:


28

Зробіть так, що неможливо насправді нічого випустити без фіксації тестів.

  1. Не вдалося зібрати, якщо якісь тести не вдалися.
  2. Не вдалося зібрати, якщо будь-які тести ігноруються.
  3. Не вдалося зібрати, якщо тестове покриття опуститься нижче певного рівня (тому люди не можуть просто видалити тести, щоб обійти його).
  4. Використовуйте сервер CI, щоб робити версії версій, і дозволяти тільки збірки з падіння збірки сервера переходити до UAT / інсценізації / виробництва / будь-чого.

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

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

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

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

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


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

@ user40989: Я вас чую. Культура - це те, що ти маєш культивувати. Якщо ви хочете, щоб люди зрозуміли, наскільки важливі тести, іноді доводиться робити так, щоб люди не могли їх ігнорувати. Як тільки люди звикнуть до високого рівня покриття коду та зелених тестів, вони не захочуть повертатися назад, і тоді ваші власні розробники будуть застосовувати його для нових рекрутів. Ну, сподіваємось. Анал-затримуюча команда допомагає та / або будує майстра та / або менеджера. :)
Aaronaught

FWIW: Весь наш процес випуску автоматизований, і люди не думають про те, щоб зламати тести. Команда команди зливається з майстром, потім запускає збірку релізів і надсилає запит на просування до системних адміністраторів, які буквально натискають кнопку для розгортання артефактів збірки та запуску автоматизованих тестів браузера та API. Ніхто не скаржиться на цей процес, ніколи, тому що це економить час - ми витрачали 2 тижні, метушившись над випуском, зараз це, в основному, рукоділля. Це те, що я маю на увазі під культивуванням культури - всі знають, що додаткові 2 хвилини, щоб виправити тест, заощадять через 2 години.
Aaronaught

10

Тести, які не спрацьовують, не є проблемою. Вони є симптомом .

Справжня проблема полягає в культурі. Вам потрібно м'яко ступати: ось дракони . Ви не можете змінити культуру самостійно, і те, що пискляве колесо, зрештою, зробить вас ізгоєм. Буквально.

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

Немає простої відповіді.


Будучи пискним колесом, змусило мене вести команду. Може, у вашому писку щось не так? Але, з усією серйозністю, це говорить про зовсім іншу проблему культури не з командою розробників, а з керівництвом компанії. Якщо відповідь керівництва на палаючий вогонь - надягати сонцезахисні окуляри, то просто вийди звідти чорт. Але якщо ви насправді цех розробок , на відміну від корпоративного ІТ-відділу, який вибиває програмне забезпечення з центру витрат, цілком ймовірно, що менеджери дбають про такі речі, як, наскільки часто та безпечно ви можете випускати на ринок.
Aaronaught
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.