vyvchy
    Теми розділу

    01 · Основи тестування

    Ризик-орієнтоване тестування

    Зміст

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

    Глава з бейджем «поглиблення»: при першому проході її можна пропустити і повернутися, коли плануватимеш тестування сам — перед senior-співбесідою або коли вперше доведеться різати регресію під дедлайн. Це канонічна глава про ризики на сайті: інші розділи посилаються сюди, а тут зібрано повний виклад.

    Що таке ризик

    Ризик (risk) — це потенційна подія або умова з негативними наслідками в майбутньому. Ключове слово — «потенційна»: ризик існує до того, як щось зламалося. «Платіжний модуль переписали на нового провайдера, і там можуть бути дефекти» — це ризик. «Оплата карткою Visa падає з помилкою 500» — це вже дефект, ризик реалізувався.

    У ризику два атрибути:

    • Ймовірність (likelihood) — наскільки реально, що подія станеться. Завжди між нулем і одиницею: якщо подія неможлива — ризику немає, якщо вже сталася — це не ризик, а проблема.
    • Вплив (impact) — наскільки боляче буде, якщо станеться: гроші, користувачі, репутація, закон.

    Разом ці два атрибути визначають рівень ризику (risk level); на практиці його часто рахують як добуток: рівень = ймовірність × вплив. Саме рівень ризику визначає, скільки уваги тестування приділить конкретній частині продукту.

    Продуктові vs проєктні ризики

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

    АспектПродуктовий ризик (product risk)Проєктний ризик (project risk)
    Про щоЯкість самого продуктуХід проєкту: строки, бюджет, люди
    ПрикладНекоректний розрахунок знижки; втрата даних при міграції; вразливість в авторизаціїКлючовий розробник звільнився; тестовий стенд не готовий; вимоги запізнюються
    Хто відчуєКористувач і бізнес після релізуКоманда до релізу
    Що з ним робить тестуванняЗнижує: перевірки саме там, де ризикСамо по собі не знижує — це зона менеджменту

    Продуктові ризики ще називають ризиками якості (quality risks): це сценарії, у яких продукт не виконує обіцяного. Саме з ними працює ризик-орієнтоване тестування: рівень продуктового ризику вирішує, що тестувати, наскільки глибоко і в якому порядку.

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

    Аналіз ризиків: ймовірність × вплив

    Керування ризиками — не одноразова вправа, а цикл: спершу аналіз (знайти й оцінити), потім контроль (зменшити й відстежувати), і так по колу, бо кожен реліз змінює картину.

    картина змінилась

    Ідентифікація
    що може піти не так

    Оцінювання
    ймовірність × вплив

    Зменшення
    тестування, рев'ю, флаги

    Моніторинг
    нові дані з прогонів і проду

    картина змінилась

    Ідентифікація
    що може піти не так

    Оцінювання
    ймовірність × вплив

    Зменшення
    тестування, рев'ю, флаги

    Моніторинг
    нові дані з прогонів і проду

    Ідентифікація — зібрати список «що може піти не так». Джерела: вимоги і user story, архітектурні зміни, історія дефектів, скарги користувачів, досвід команди. Важливо: оцінка ризиків — крос-функційна робота. Розробник знає, де код складний і де він «різав кути»; продакт знає, яка фіча приносить гроші; підтримка знає, на що скаржаться. Матриця, складена одним тестувальником наодинці, систематично зміщена.

    Оцінювання — кожному ризику виставити ймовірність і вплив. На що спиратися:

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

    Результат зручно класти в матрицю ризиків — таблицю ймовірність-на-вплив. У найпростішому робочому варіанті вистачає шкали з трьох значень:

    Ймовірність ↓ Вплив →НизькийСереднійВисокий
    Високасередній пріоритетвисокийкритичний
    Середнянизькийсереднійвисокий
    Низькамінімальнийнизькийсередній

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

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

    Що змінює рівень ризику

    Рівень ризику — не звіт заради звіту, він керує чотирма практичними рішеннями:

    1. Порядок. Найризиковіше тестуємо першим. Якщо тестування зупиниться достроково (а воно зупиняється завжди), непокритим лишиться найдешевше.
    2. Глибина і техніка. Ризик — головний критерій вибору техніки тест-дизайну: для критичного кута — таблиці рішень, граничні значення, переходи станів, сесії дослідницького тестування; для мінімального — чеклист. Детальний розбір «тип задачі → техніка» — у розділі «Тест-дизайн», глава про вибір і комбінування технік.
    3. Обсяг. Скільки конфігурацій, локалей, браузерів перевіряти — теж функція ризику, а не «скільки встигнемо».
    4. Форма. Критичні зони заслуговують на автоматизовану регресію і моніторинг у проді; для мінімальних досить разової перевірки.

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

    Регресія за браку часу

    Класична ситуація і улюблене питання співбесід: реліз завтра, повна регресія займає три дні, у тебе чотири години. Що робити? Погана відповідь — «прогнати скільки встигну з початку списку». Хороша — зрізати обсяг за ризиком:

    4 години на регресію

    1. Смоук критичних бізнес-потоків
    гроші, дані, вхід

    2. Зони, зачеплені змінами релізу
    аналіз впливу: що чіпали розробники

    3. Історично крихкі місця
    де дефекти скупчуються

    4. Решта — за залишком часу
    і чесний звіт, що лишилося поза обсягом

    4 години на регресію

    1. Смоук критичних бізнес-потоків
    гроші, дані, вхід

    2. Зони, зачеплені змінами релізу
    аналіз впливу: що чіпали розробники

    3. Історично крихкі місця
    де дефекти скупчуються

    4. Решта — за залишком часу
    і чесний звіт, що лишилося поза обсягом

    Перший ярус — незалежно від того, що змінювалось: якщо зламано вхід чи оплату, решта не має значення. Другий ярус будується з аналізу впливу змін (impact analysis): дивимось перелік змін релізу (пул-реквести, тікети) і питаємо розробників, які модулі зачеплено, — регресуємо навколо них. Третій — принцип скупчення дефектів: де падало раніше, впаде знову. Четвертий ярус чесно ріжеться.

    В автоматизованій регресії той самий підхід реалізується тегами за рівнем ризику — тоді «зрізаний» прогін стає однією командою:

    // Тег у назві — рівень ризику зони, яку перевіряє тест
    test('оплата карткою списує кошти і створює замовлення @critical', async ({ page }) => {
      // ...
    });
    
    test('зміна аватарки оновлює фото в профілі @low', async ({ page }) => {
      // ...
    });
    # За браку часу ганяємо лише критичний зріз
    npx playwright test --grep @critical

    І обовʼязкова частина відповіді, яку кандидати губляться сказати: зрізаний обсяг — це рішення, про яке треба повідомити. «Я встиг перевірити X і Y, поза обсягом лишилось Z, ризик такий-то» — без цього менеджмент вважає, що регресія була повною.

    Ризики і рішення про реліз

    Тестування не ухвалює рішення про реліз — воно постачає інформацію для рішення. Це принципово: QA не «дозволяє» і не «забороняє» реліз, бо не володіє всією картиною (вартість затримки, обіцянки клієнтам, конкуренти). Зате QA — єдиний, хто може чесно описати залишковий ризик (residual risk): що не перевірено, які дефекти лишилися відкритими і чим це загрожує.

    Добрий звіт перед релізом відповідає на три питання:

    • Що перевірено і з яким результатом (критичні потоки — зелені?).
    • Що НЕ перевірено і чому (не встигли, не було середовища) — і який там потенційний вплив.
    • Які відомі дефекти їдуть у реліз (severity, обхідні шляхи) — див. главу про баг-репорти.

    Формальний бік — критерії виходу (exit criteria) з тест-плану: «100% критичних кейсів пройдено, нуль відкритих дефектів severity critical». Але критерії — індикатор, а не автомат: буває, що всі критерії виконано, а релізити не можна (щойно знайшли підозрілу поведінку в оплаті), і навпаки — критерії провалено, а релізять, бо вартість затримки вища за залишковий ризик.

    Останнє, що варто тримати в голові сеньйору: тестування — не єдиний спосіб знизити ризик. Фіче-флаг (вимкнути фічу за секунду без релізу), поступове розкочування на відсоток користувачів, моніторинг і алерти, готовий план відкату — усе це зменшує вплив відмови вже після релізу. Іноді «релізимо під флагом на 5% користувачів з алертом на помилки оплати» — краще рішення, ніж «ще тиждень тестуємо».

    Мова бізнесу з менеджментом

    Найчастіша причина, чому аргументи QA не працюють: тестувальник говорить артефактами, а менеджмент думає наслідками. «У нас 47 відкритих багів і pass rate 82%» — для бізнесу шум: не зрозуміло, страшно це чи ні. Переклад на мову ризиків: «Потік оплати нестабільний: у двох сценаріях з десяти замовлення не створюється. Якщо релізимо так — частина покупців не зможе заплатити, це прямі втрати виручки з першого дня».

    Робоча формула: сценарій відмови → хто і як постраждає → що пропоную. Кожен елемент конкретний: не «можуть бути проблеми», а «промокод застосується двічі»; не «користувачам буде погано», а «кожне замовлення з промокодом мінус 20% до маржі».

    І друге правило: приносити варіанти з цінами, а не вето. «Релізити не можна» — глухий кут, після якого QA виглядає гальмом. Варіанти виглядають так: (а) зсуваємо реліз на два дні і закриваємо дефекти оплати; (б) релізимо вчасно, але промокоди під фіче-флагом вимкнено до фіксу; (в) релізимо як є і приймаємо ризик подвійних знижок, моніторимо суми замовлень. Рішення ухвалює бізнес — але тепер усвідомлено. Це і є головна цінність risk-based підходу поза тест-дизайном: він дає QA і менеджменту спільну мову. Числові зрізи для таких розмов — у главі про метрики і звітність.

    Типові помилки

    • Виглядає як «ризик — це severity бага», а насправді ризик існує до дефекту: це ймовірність × вплив майбутньої відмови. Severity — атрибут уже знайденого дефекту. Ризиками керують до і під час тестування, severity виставляють за фактом.
    • Виглядає як «risk-based = тестуємо менше, економимо», а насправді це перерозподіл тих самих зусиль: глибше там, де боляче, поверхово там, де ні. Якщо після впровадження підходу сумарна глибина просто впала — це не risk-based, а секвестр.
    • Виглядає як «склали матрицю на старті проєкту — і готово», а насправді ризики живуть: новий провайдер, переписаний модуль, свіжа статистика дефектів змінюють і ймовірності, і впливи. Матриця без перегляду за пів року описує неіснуючий продукт.
    • Виглядає як «QA вирішує, чи готовий реліз», а насправді QA описує залишковий ризик, а рішення ухвалює бізнес. Команда, де QA «не пускає» релізи, отримує війну; команда, де QA дає картину ризиків, отримує усвідомлені рішення.
    • Виглядає як «оцінку ризиків зробить тестувальник сам, він же знає продукт», а насправді поодинока оцінка зміщена: без розробника не видно складності коду, без продакта — реальної ціни відмови. Оцінка ризиків — командна вправа, хай навіть на 30 хвилин.

    Підсумок

    • Ризик = ймовірність × вплив, і він існує до того, як щось зламалося. Рівень ризику — головний аргумент у відповіді на «чому ти тестуєш саме це і саме так».
    • Продуктові ризики — про якість продукту, їх знижує тестування. Проєктні — про хід проєкту (строки, люди, стенди), їх лікує менеджмент і планування.
    • Матриця ризиків керує порядком, глибиною, вибором техніки і формою перевірок. Risk-based — перерозподіл зусиль, а не їх скорочення.
    • За браку часу регресію ріжуть за ярусами: критичні бізнес-потоки → зони змін → історично крихкі місця → решта. Зрізаний обсяг обовʼязково озвучується.
    • Тестування інформує рішення про реліз, але не ухвалює його. Валюта розмови з бізнесом — сценарій відмови і його ціна, а не кількість багів і pass rate.

    Що питають на співбесіді

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

    Джерела

    • ISTQB CTFL Syllabus v4.0 — глава покриває розділ 5.2 «Risk Management»: означення ризику та його атрибутів, продуктові й проєктні ризики, аналіз і контроль продуктових ризиків.
    • Глосарій ISTQB — канонічні означення термінів product risk, project risk, risk level, risk-based testing.
    • ISO 31000:2018 — Risk management — Guidelines — загальний стандарт керування ризиками з тим самим базовим циклом «ідентифікація → оцінювання → обробка → моніторинг».