High Tech — Low Test. Проблеми сучасного тестування і як їх позбутися

Усім привіт, мене звати Олександр. Я працюю у сферах тестування, автоматизації та розробки вже трохи понад 10 років. За цей час я бачив різне: аутсорс та аутстаф проєкти, великі продуктові компанії та банки. Я був тест-інженером та автоматизатором, був SDET’ом, керівником команди інженерів та розробником.

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

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

Дисклеймери:

  1. Стаття висловлює тільки мої персональні погляди, а не погляди мого роботодавця.
  2. Стаття опирається тільки на мій досвід та досвід, отриманий від спілкування з іншими спеціалістами в індустрії.
  3. Існує ненульова ймовірність, що описані у статті проблеми зовсім вас не стосуються: у вас є ідеальний проєкт, чудові стосунки з колегами та й взагалі, світ магії та чаклунства. В такому випадку — гайда у коментарі ділитися своїм досвідом!

Photo by Jeremy Bezanger on Unsplash

Що змінилося в індустрії за 10 років

За десять минулих років ми були свідками великого «бусту» технологій — безпілотні авто, штучний інтелект, AR та VR, блокчейн, дрони, роботи. Дуже багато тестування й автоматизації перейшло з десктопу на веб, а потім і на мобільні пристрої.

Від Waterfall моделі практично усі перейшли до Agile та Scrum.

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

Починаючи з автотестів — закінчуючи репортинг системами та паралельним запуском тестів у докері чи навіть десь далеко «у хмарах».

Але разом з тим, багато речей і тверджень залишилися без змін.

Ось деякі з «вічних» тем, що постійно вирують у середовищі тестувальників:

  • «Ручне тестування померло!»
  • «Давайте все завтоматизуємо! Через UI — то найкраще!»
  • «SDET — то є вершина еволюції тест інженера! Хочу бути як у Гуглі!»
  • «Та я один рік трошки попрацюю у тестуванні, а потім піду у розробку. Бо відразу у розробку мене не взяли.»
  • «Заробітна плата у тестувальників — на самому дні!»
  • «Test engineering — то робота для низькокваліфікованих спеціалістів!»

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

Але чому склалася така ситуація в індустрії? Чи може бути, що проблеми дещо в іншому? Які все ж таки проблеми бачу я?

Проблеми сучасного тестування

Проблеми умовно я поділю на дві великі групи.

Перша група: Гонитва за технологіями

  • Концентрація тільки на короткотривалих цілях. Багато інженерів віддають перевагу швидким рішенням, скажімо так, «палок». Особливо полюбляють таке ставлення до автотестів. Швидко написали «абияк» та й побігли на новий проєкт.
  • Resume-driven development. Проєкти (та нова робота) розглядаються не с позиції поглибити технічні знання, здобути навички та реальний досвід, та навіть не с позиції «розв’язати проблему бізнесу» — а тільки, щоб здобути рядок з модною технологією у резюме.
  • Культ «зелених пайплайнів». У цьому випадку тест-інженери, що успішно включили тести у пайплайн, починають робити усе, щоб тести були зеленими. Найчастіше це виливається в ігнорування чи навіть видалення особливо нестабільних тестів. А по факту, за кожним нестабільним тестом може бути потенційна проблема.
  • Фреймворк-орієнтована автоматизація. У деяких проєктах інженери настільки прагнуть написати ідеальний фреймворк — що забувають про самі тести. В результаті, маємо 3-6 місяців розробки зовсім без тестів, попри те, що для замовника це прямий показник відсутності користі від автоматизації.
  • Пошук «срібних куль». Деякі інженери створюють успішний фреймворк на одному проєкті (в одному контексті), а потім починають його тягти в усі інші. Причому не свідомо використовувати частини напрацювань, а бездумно «натягувати» інструменти там, де вони зовсім не потрібні.

Друга група: Недостатній рівень навичок та знань

  • Базові технічні знання

Дуже часто на співбесідах доволі сеньйорні кандидати легко відповідають на будь-які запитання стосовно тестування. Можуть тобі намалювати «піраміду», розказати усі техніки тест-дизайну в світі та знають, як написати найідеальніший баг репорт. Але коли ти починаєш ставити запитання про базові технічні аспекти (наприклад, як працює HTTP чи мережі) — кандидати швидко втрачають впевненість.

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

  • Програмування та архітектура

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

Інша частина — ті, хто все ж таки навчились чогось, але концентрують свої сили тільки у межах UI автотестів. Світ поза цими тестами наче й не існує.

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

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

Я вже не говорю про те, що без знання складових частин системи неможливо вказати команді на погане тестабіліті. Тому ми й продовжуємо писати «кілометрові» та крихкі XPath-локатори, бо ID-елементів ніхто не додав.

  • Знання бізнесу та продукту

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

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

Але саме користувачі можуть надати багато корисної інформації щодо найбільш ризикованих частин застосунку або дати зворотний зв’язок щодо usability-системи.

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

  • І наостанок — персональний розвиток інженерів.

Щодо персонального розвитку, інженери зазвичай діляться на дві категорії:

  1. «Нащо мені вчитися програмувати? Це ж зробить мене менш скілованим тестувальником!»
  2. «Я нібито і хочу вчитися, але чекаю свого річного фідбеку. Менеджер чи лід прийдуть та напишуть мені, що треба вчити.»

Але тут криється найголовніший момент. За персональний розвиток навичок, знань та вашої кар’єри відповідальні ТІЛЬКИ ВИ САМІ!

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

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

Замкнуте коло невпевненості

То ж які питання можуть виникати у середньостатистичного тестувальника чи автоматизатора на більшості проєктів?

  • «Я не можу писати код — я ж не розробник...»
  • «Хто я взагалі такий, щоб говорити з Архітектором про архітектуру чи testability компонентів системи?»
  • «Девопси відключили нестабільні тести у пайплайні — ну, вони ж більше знають, як воно повинно бути...»
  • «Менеджер продовжує запитувати мене: що конкретно ти тестуєш? Нащо це? А це?»
  • «Бізнес тільки й прагне „зрізати кости“ та позвільняти увесь відділ непотрібних тестувальників....»
  • «Звідки я взагалі знаю, які проблеми у юзерів нашого софту?»

В результаті більшість тест-інженерів потрапляють в таке собі коло невпевненості.

  • Тестувальники не можуть нормально довести команді, іншим інженерам, менеджменту та бізнесу свою справжню користь. Брак технічних та бізнес-знань заважає побудувати довіру в команді;
  • Демотивація тест-інженерів росте. Разом із демотивацією поширюються думки перейти в розробку або у той самий менеджмент. Або взагалі піти з цього айті! (Я не говорю, що перехід — то щось страшне. Але в деяких випадках, перехід можна й не робити);
  • Багато досвідчених та сеньйорних інженерів залишають індустрію тестування або взагалі переходять тільки на тренінги. Кейсів успішних тестувальників, автоматизаторів стає все менше. Кейси, коли тест-інженери дійсно впливають на продукт, процеси, вносять технічні удосконалення, — можна перерахувати на пальцях. Досягнення та розповіді на конференціях зводяться до «ну, ми заюзали оцей фреймворк чи оцю тулзу для тест-менеджменту — тепер всьо у шоколаді». Нема кому писати круті тулзи та бібліотеки. Нема кому тестувати дійсно складний та науковий софт. Нема кому робити наукові дослідження у сфері тестування;
  • Індустрія продовжує думати, що тестувальник — це той, хто «тільки натискає кнопки й нічого практично не шарить». Молоді тест інженери бачать ту ж картину, та ще швидше демотивуються;

Як змінити ситуацію на краще

  • Самостійно готуй план свого професійного розвитку: які навички здобути, що вивчити, як це знадобиться у роботі. Якщо ти можеш здобути знання та навички у компанії — круто. Якщо категорично не можеш — шукай інший проєкт чи компанію. Вибір завжди є. Він у твоїх руках.
  • Навчися програмувати. Я не говорю тут про скіли на рівні сіньйор девелопера. Але вміння написати скрипт може прибрати багато одноманітної роботи з деплойменту чи конфігурації. Вміння читати та розуміти чужий код дає більше розуміння того, як взагалі працює система та які кейси ще не покриті.
  • Поглиблюй свої знання по архітектурі застосунків та систем. Почни з системи, яку тестуєш зараз. Декомпозуй її. Розбери архітектурні діаграми. Подумай, як і де окремий компонент може «впасти» та як система в цілому буде на це реагувати. Поговори на цю тему з вашим архітектором.
  • Якщо ти створюєш скрипти чи автотести, завжди запитуй себе: хто та як буде використовувати мій код (тести)? Чи достатньо зрозуміло написано? Чи є деталізований репорт? Як легко буде розібратися у коді новому інженеру?
  • Вивчай, як користувачі працюють з вашою системою. Яка у вашого продукту бізнес-модель? Які найбільш ризикові частини є? Вся ця інформація допоможе тобі тестувати саме те, що важливо користувачеві, та заощаджувати гроші бізнесу.

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

👍ПодобаєтьсяСподобалось20
До обраногоВ обраному7
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Спасибі за статтю. По ділу. Зараз на дану тему таких мало.

Що можна де додати до цього всього (до цієї болі :) ).
1. QA спеціаліст це інженер. Інженерія передбачає справді доволі високі технічні навички. Як то кажуть, деви сильні знаннями вглиб, інженери з якості — вшир. І це нормально.
2. Якість таких інженерів за крайні десять років мого спостереження — падає. Серед причин можу назвати кількість «інженерів» після різноманітних курсів «тестувальник через місяць» і тд. Люди намагаються піти в ІТ сферу, чи світчаються, але зміна професії передбачає не кількамісячного досвіду, а досвіду років. Відповідно новоспечених інженерів стає багато, а якість низька.
3. Кожен має виконувати свою частину роботи добре. І на високому рівні. Так, у тестувальника інше бачення продукту, ніж у дева, бо це відверто інший світогляд, чи що. Але при цьому якість виконання роботи від цього не має страждати.
Якщо деви відчувають непотрібність роботи тестувальника, то зазвичай дев ще не дозрів до розуміння користі таких інженерів та допомоги. Але часто буває, що просто тестувальник справді низького рівня, про що я писав вище.
Хоча це саме стосується кодерів, які тільки і займаються копіпастами зі стековерфлоу.
4. Багато хто не розуміє відмінності між тестуванням і забезпеченням якості. Якщо лише прийшов в ІТ , ти виконуєш доволі рутинні і монотонні задачі. Очевидно, що про забезпечення якості продукту ще мови йти не може. Лише з досвідом, коли ти засвоїв на практиці всю теоретичну частину тестування, коли ти прокачав себе в технологіях, в програмуванні і тд, то тільки тоді ти можеш на якомусь n-му проекті вже бачити цілісні картини розробки. І тільки тоді ти стаєш інженером, який може будувати процеси і наблизитись саме до забезпечення якості
5. І так, тестувальник не має на меті знайти всі проблеми. Це неможливо по всім канонам . Його мета в превентивних заходах, а також зменшені кількості проблем продукту, пошуку критичних моментів.

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

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

Бо немає практики — та й сенсу запам’ятовувати. Сенсу немає — бо зазвичай на таких співбесідах питають усе що можна. Але не те — що зараз використовується на проєкті. Тому користі від таких знань за «зазубрювань» — вкрай малувато.

Тестувальники не можуть нормально довести команді, іншим інженерам, менеджменту та бізнесу свою справжню користь.

Это действительно так! Если польза от работы девелоперов в большинстве случаем очевидна — они имплементят «бизнес нидсы» и добавляют «бизнес велью», то какой профит от QA?
Логика говорит что профит от QA в том, что он ЭКОНОМИТ деньги, которые бизнес мог бы потерять из-за вовремя не найденных проблем. То есть это как страховка: если заплатил за страховку и заболел — страховка пригодилась. Если не заболел — получается зря потратил деньги.
Если на QA сэкономили, но клиенты не жалуются на баги — то все прекрасно! А если на QA потратили много денег, все вылизали, клиенты не жалуются на баги ... то получили то же самое, но дороже.
Отсюда первое правило: что бы оправдать свои деньги — QA нужно находить действительно опасные для бизнеса проблемы!
А какие самые опасные проблемы для бизнеса? В первую очередь — секьюрити. Если система, например, позволяет подставить ИД любого юзера в URL и делать с ним что хочешь — это не баг, это катастрофа! Во вторую очередь — финансы. Неправильное округление копеек может за месяц (когда это обнаружится) вылиться в шестизначные убытки.
НО что бы находить такие проблемы — QA не достаточно просто «тыцать кнопки», как обезьянка. Он должен прекрасно понимать и HTTP, и базу, и математику, и что где как работает. Он должен уметь писать запросы в базу, мониторить HTTP реквесты, смотреть разметку страниц и т.д.
Второе правило: QA должен помогать девелоперу, а не отнимать его время.
Представьте что QA пишет баг: «Я нажал на кнопку — показало спинер и ничего не происходит. Вот скриншот спинера». Теперь девелоперу нужно как-то зарепродюсить эту проблему. При том что произойти могло все что угодно. Он потратит время, найдет подозрительное место, починит, вернет QA, тот проверит ... а через два дня пере-откроет потому что опят увидел спинер (совсем по другой причине!).
Что должен делать хороший QA что бы помочь девелоперу: подробно записывать все действия, возможно снимать видео, при появлении ошибки уметь собрать максимум информации: из консоли браузера, из упавшего HTTP реквеста, из лог файлов или из базы. Все это нужно делать сейчас, «по горячим следам», а не долго искать потом. При возможности — сделать бэкап базы, снепшот виртуалки или просто оставить свои тестовые данные для девелопера и не менять их. Имея всю эту информацию девелопер возможно сразу будет понимать в какой строке ошибка и почему. Он сможет починить у себя, проверить на тестовых данных от QA и закрыть баг за час.
Третье правило: Цель тестирования — проверить правильную работу, а не поломать.
Если QA нашел баг на проде, который до него не нашли за год работы — то скорее всего он не молодец, а лопух! Потому что тестирует то, что пользователей вообще не беспокоит. При этом где-то рядом может не работает кнопочка «лайк» и юзеры очень страдают от этого!
Что бы тестировать то, что надо — QA должен еще и разбираться в требованиях бизнеса и поведении юзеров. Понимать разницу между браузерами, между разными форматами и разрешениями экрана на устройствах, уметь пользоваться эмуляторами.
Подводя итог этого лонгрида: полезный QA — это не манки — тестер за 2 бакса в час. Это специалист, который должен знать не меньше девелопера!
Поэтому я знаю про такую историю: девелоперы постоянно жаловались на QA из Индии. Пытались тех научить смотреть в консоль браузера, писать ошибки — но бестолку. В результате менеджмент решил так: поскольку девелоперы прекрасно знают как что работает, они понимают где могут быть самые критичные ошибки, они знают как собрать информацию об ошибках, знают как подготовить тестовые данные в базе — то пускай они и тестируют!
Естественно, девелоперы не любят делать руками одну и ту же работу — поэтому они сразу придумали как автоматизировать не только тестирование, но и создание багов с видео, логами и всей нужной инфой. Ночью запускается — утром девелоперы разбирают баги и фиксят.
Раз в спринт выделяют несколько часов на ручное тестирование всей командой — чисто что бы посмотреть глазами юзеров и попробовать что-то нетривиальное.

Раз в спринт выделяют несколько часов на ручное тестирование всей командой — чисто что бы посмотреть глазами юзеров и попробовать что-то нетривиальное.

А ось це помилка.
По-перше, очима юзерів не вийде бо юзери і деви цього продукту радикально різні люди, вірогідно ще й з різних країн та культур. Звісно якщо мова не йде про розробку продуктів для девелоперів. По-друге, це нудно, нецікаво і, як будь-яка нудна і нецікава робота, буде робитися «на відчепись».

По-друге, це нудно, нецікаво і, як будь-яка нудна і нецікава робота, буде робитися «на відчепись».

Именно поэтому выбран такой формат:
— во-первых не больше 2х — 3х часов
— во-вторых одновременно всей командой
— в-третьих все на связи.
— участвуют БА и менеджеры что бы сразу подсказывать что нормальное поведение, а что — нет
— тут же идет репетиция демо
То есть что бы не было скучно это такой себе митинг — «хакатон». Заодно девелоперы лучше знакомятся с теми фичами, которые имплементили другие. Есть элемент соревнования в том, что бы найти проблему в чужом функционале и «потыкать пальцем».

Інколи в мене виникає таке відчуття, що девелопер — то дуже дивне створіння.

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

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

Додатково — QA інженер може сідати з девелопером та обговорювати можливі проблеми та як їх запобігати та перевіряти.

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

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

Недостатню оплату для ручного тестера можна перекрити двома роботами, якщо програмування не твоє.

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

Але саме користувачі можуть надати багато корисної інформації щодо найбільш ризикованих частин застосунку або дати зворотний зв’язок щодо usability-системи.

Можна запитати статистику по продукту в бізнес-аналітика.

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

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

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

Тестери вираховують бюджети проектів?

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

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

Можна запитати статистику по продукту в бізнес-аналітика.

Згоден, можна. За 10 років своєї роботи, бачив бізнес аналітика на проєкті лише раз. Але то був навіть не бізнес, а функціональний аналітик (працював напряму з трейдерами та збирав вимоги від них. Доречі — я не пропоную тут виконувати чужу роботу — та збирати вимоги самому. Чим більше та глибше тестувальник знає продукт (особливо те, як продукт використовують користувачі) — тим більш корисні тести він може створити (та видалити найменш корисні).

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

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

Тестери вираховують бюджети проєктів?

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

Підписатись на коментарі