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

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

    Метрики тестування і звітність

    Зміст

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

    На співбесідах тема спливає у двох формах: пряме «які метрики тестування ви використовували і навіщо» і підступніше «як зрозуміти, що тестування можна завершувати». Друге — теж про метрики: про критерії виходу з тест-плану і про те, чим виміряти їх досягнення. У силабусі ISTQB CTFL 4.0 цій темі присвячено розділ 5.3 «Test Monitoring, Test Control and Test Completion».

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

    • Де ми відносно плану? Виконано 180 з 240 запланованих кейсів, темп — 30 на день: закінчимо за два дні, у графік влазимо.
    • Яка якість продукту зараз? 4 відкриті критичні дефекти, усі в модулі оплати; крива нових багів другий день не спадає.
    • Чи можна завершувати? Критерії виходу кажуть «100% критичних кейсів пройдено, немає відкритих blocker/critical» — звіряємо факт із порогом і отримуємо відповідь «так/ні», а не «начебто можна».

    Тобто метрика — інструмент рішення. Якщо число нікому не допомагає нічого вирішити, його збір — ритуал, а не робота.

    І тут головна пастка теми, яку люблять перевіряти на співбесідах. Закон Ґудгарта (Goodhart's law), у популярному формулюванні: коли міра стає ціллю, вона перестає бути хорошою мірою. Щойно з метрики роблять KPI, люди починають оптимізувати число, а не те, що воно мало вимірювати:

    • KPI «кількість заведених багів» → потік тривіальних дублікатів і косметики, бо десять дрібниць «дорожчі» за один складний баг у логіці.
    • KPI «кількість тест-кейсів на день» → кейси дробляться на атомарні кроки заради лічильника.
    • Ціль «pass rate не нижче 98%» → нестабільні тести не лікують, а видаляють або скипають — звіт зеленіє, продукт ні.

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

    Покриття вимог: репортинговий кут

    Покриття вимог (requirements coverage) — відсоток вимог, для яких існують тести. Методика, яка за цим стоїть — матриця трасування (requirements traceability matrix, RTM), пошук непокритих вимог і тестів-сиріт, — детально розібрана в розділі «Тест-дизайн» у главі про покриття вимог і трасування. Тут нас цікавить кут звітності: які цифри з трасування виносити в звіт і як їх не перебрехати.

    У звіті покриття — це не одне число, а три різні:

    1. Покрито тестами — для скількох вимог узагалі є перевірки. 36 з 40 вимог → 90%. Решта 4 — або свідомо поза скоупом, або дірка в дизайні.
    2. Виконано — скільки покритих вимог уже перевірено в цьому циклі.
    3. Пройшло — скільки перевірених вимог справді працює.

    Плутати їх — класична маніпуляція (іноді ненавмисна): «покриття 90%» звучить заспокійливо, навіть якщо виконано половину, а пройшла третина. Сильний звіт показує всі три зрізи: «покрито 90%, виконано 75%, пройшло 68%, у 3 вимогах відкриті критичні дефекти».

    І пастка глибини: покриття рахує наявність тесту, а не його достатність. Одна вимога — один happy-path кейс — і на папері 100%, хоча негативні сценарії й межі ніхто не чіпав. Стовідсоткове покриття вимог не означає якісний продукт ще й тому, що самі вимоги можуть бути неповними — це absence-of-defects fallacy із семи принципів тестування.

    Метрики дефектів

    Дефекти — найбагатше джерело метрик, бо баг-трекер і так усе фіксує: коли завели, де, коли закрили. Три метрики, які реально питають і реально використовують:

    МетрикаЯк рахуєтьсяПро що сигналить
    Щільність дефектів (defect density)Кількість дефектів на одиницю розміру: модуль, фічу, тисячу рядків кодуДе в продукті скупчення ризику
    Escape rate / DDPDDP — частка дефектів, знайдених до релізу, від усіх відомих; escape rate — дзеркальна частка тих, що втекли в продакшнНаскільки ефективно тестування ловить баги
    Час життя дефекту (defect age)Час від виявлення до закриття, з розбивкою за статусамиДе вузьке місце процесу роботи з багами

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

    Escape rate — частка дефектів, які «втекли» в продакшн повз тестування. Дзеркальна метрика — відсоток виявлення дефектів (defect detection percentage, DDP): скільки з усіх відомих багів команда знайшла до релізу. Знайшли 90 до релізу, користувачі принесли ще 10 після → DDP 90%, escape rate 10%. Це чи не найчесніша метрика якості самого тестування, але з обмеженням: рахується постфактум, коли пізно щось міняти в цьому релізі. Її цінність — у тренді між релізами: DDP падає → тестування деградує або продукт ускладнюється швидше, ніж росте покриття.

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

    Pass rate, fail rate і динаміка

    Pass rate — частка пройдених тестів серед виконаних. Найпопулярніша метрика і найлегша для неправильного читання.

    Перше: стежте за знаменником. Тести бувають не лише passed і failed — ще blocked і skipped (статуси виконання розібрані в главі про тестові середовища й виконання). «95% pass» від виконаних і «95% pass» від усіх запланованих — дуже різні звіти: у другому випадку 30 заблокованих кейсів просто випали з картинки разом із функціональністю, яку вони мали перевірити.

    Друге: pass rate — число без ваги. 95% зелених нічого не каже, поки не відомо, що саме в червоних 5%: п'ять екзотичних крайових кейсів — одна ситуація, п'ять кроків чекауту — зовсім інша. Тому поруч із відсотком у звіті завжди має бути розшифровка фейлів за пріоритетом.

    Третє: у автопрогонах pass rate спотворюють флакі-тести — ті, що падають і проходять без змін у коді (детальний розбір — у розділі «Автоматизація»). Прогін, який «полагодився» після ретраю, у наївній статистиці виглядає як passed, і реальна стабільність сьюти залишається невидимою. Тому Playwright у JSON-звіті чесно рахує flaky окремою категорією:

    import { readFileSync } from 'node:fs';
    
    // stats із JSON-репортера Playwright: expected / unexpected / flaky / skipped
    const { stats } = JSON.parse(readFileSync('results.json', 'utf-8'));
    
    const executed = stats.expected + stats.unexpected + stats.flaky;
    const passRate = ((stats.expected / executed) * 100).toFixed(1);
    
    console.log(`Pass rate: ${passRate}%, flaky: ${stats.flaky}, skipped: ${stats.skipped}`);

    Якщо звіт показує лише «зелений/червоний» без flaky — метрика вже трохи бреше.

    Четверте й головне: сила pass rate — у динаміці. Один знімок «зараз 87%» майже безглуздий; крива за два тижні — ні. Класична картина здорової стабілізації перед релізом: крива виконаних тестів росте, крива нових дефектів спадає, крива закритих наздоганяє криву заведених. Якщо за три дні до релізу нові баги прибувають швидше, ніж закриваються старі, — реліз у зоні ризику, хоч би яким був поточний відсоток зелених.

    Test summary report

    Підсумковий звіт про тестування (test summary report, у термінах ISTQB — test completion report) — документ, який закриває цикл тестування: реліз, спринт, етап. Його антипод — звіт-дамп: простиня чисел, з якої читач не може ухвалити жодного рішення. Хороший звіт будується від зворотного — від рішення, яке ухвалює читач: «релізимо чи ні, і що ризикуємо, якщо так».

    Робочий скелет (шаблони описані в стандарті ISO/IEC/IEEE 29119-3, але на практиці це зазвичай сторінка у вікі):

    • Скоуп: що тестували і — обов'язково — що не тестували й чому. Пропущений скоуп, який спливе після релізу, б'є по довірі сильніше за будь-який баг.
    • Звірка з критеріями виходу з тест-плану: досягнуто / не досягнуто, по пунктах.
    • Ключові метрики: покриття вимог (три зрізи), pass rate із розшифровкою фейлів, динаміка дефектів.
    • Відкриті дефекти й залишкові ризики: що відомо-зламане їде в реліз, з якою ймовірністю й ціною. Це місток до ризик-орієнтованого тестування — мова, якою розмовляють із менеджментом.
    • Відхилення від плану: що пішло не так і чого це навчило (стенд лежав два дні, вимоги приїхали пізно).
    • Висновок: рекомендація QA — go / no-go / go з умовами.

    Окремо від підсумкового живе звіт про прогрес (test progress report) — регулярний, короткий, для команди: що зробили, що заплановано, що блокує. Різні читачі — різна деталізація: команді потрібні номери багів і стенди, стейкхолдеру — ризики й дата. Надіслати менеджменту той самий текст, що й команді, — типова помилка: звіт, який читачу треба перекладати, не працює. Звітність автопрогонів — артефакти фейлів, тріаж, нотифікації — має свою специфіку, це окрема тема розділу «Автоматизація».

    Моніторинг і контроль

    Метрики та звіти — не самоціль, а сенсори в контурі керування. ISTQB розводить два поняття: моніторинг тестування (test monitoring) — безперервний збір і порівняння фактичного прогресу з планом, і контроль тестування (test control) — коригувальні дії, коли факт розійшовся з планом. Моніторинг без контролю — це спідометр в авто без керма.

    Так

    Ні

    Критерії виходу досягнуто

    Тест-план: критерії входу й виходу

    Виконання тестів

    Моніторинг: збір метрик

    Факт відповідає плану?

    Контроль: коригувальні дії

    Test summary report

    Так

    Ні

    Критерії виходу досягнуто

    Тест-план: критерії входу й виходу

    Виконання тестів

    Моніторинг: збір метрик

    Факт відповідає плану?

    Контроль: коригувальні дії

    Test summary report

    Типові контрольні дії, які варто вміти назвати на співбесіді:

    • Перепріоритезувати тести за ризиком: часу мало — ріжемо хвіст, а не критичний шлях.
    • Перекинути ресурси: щільність дефектів показала гарячий модуль — туди йде додаткова пара очей.
    • Ескалювати: стенд лежить третій день — це вже не проблема QA, а ризик релізу, і вирішується він не в тестовій команді.
    • Переглянути скоуп або дату: чесне «не встигаємо перевірити X до п'ятниці» з варіантами — а не мовчазне невстигання.
    • Змінити критерії входу/виходу — свідомо і письмово, а не «ну, 95% теж норм». Самі критерії — частина STLC і фіксуються ще на плануванні.

    Цикл замикається: план задає пороги → виконання генерує дані → моніторинг порівнює → контроль коригує → підсумковий звіт фіксує результат і годує планування наступного циклу.

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

    • Виглядає як якість — «у нас 100% pass rate», а насправді це може бути сьюта зі слабкими перевірками, вирізаними червоними тестами й скипнутими нестабільними. Pass rate вимірює відповідність тестам, а не якість продукту.
    • Виглядає як продуктивність — «Оля завела 40 багів, а Іван 12», а насправді порівняння людей за кількістю багів вимірює, хто тестував сирий модуль, і за законом Ґудгарта швидко перетворює баг-трекер на смітник дублікатів.
    • Виглядає як «усе перевірено» — «покриття вимог 100%», а насправді це «на кожну вимогу існує хоча б один тест»: глибина покриття, негативні сценарії і якість самих вимог за дужками.
    • Виглядає як інформативний звіт — таблиця з 15 метрик, а насправді читач не може ухвалити з неї жодного рішення. Звіт без висновку й рекомендації — це дамп, а не звітність.
    • Виглядає як стабільність — знімок «сьогодні 92%», а насправді без тренду це число німе: 92% на шляху вгору і 92% після триденного падіння з 99% — протилежні сигнали.

    Підсумок

    • Метрика — інструмент рішення: якщо число не допомагає нікому нічого вирішити, його не варто збирати.
    • Закон Ґудгарта: метрика, що стала ціллю чи KPI людини, перестає вимірювати те, для чого створювалась. Метрики — про продукт і процес, не про людей.
    • Кожна метрика бреше наодинці: покриття — без глибини, pass rate — без ваги фейлів і знаменника, щільність — без інтенсивності тестування. Читати їх треба набором і в динаміці.
    • Test summary report будується від рішення читача (go/no-go), а не від наявних цифр: скоуп, звірка з критеріями виходу, залишкові ризики, рекомендація.
    • Моніторинг збирає дані, контроль діє: без коригувальних дій метрики — декорація.

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

    • «Які метрики тестування ви використовували?» — інтерв'юер чекає не перелік назв, а зв'язку «метрика → рішення»: покриття вимог, щоб знайти дірки в тест-дизайні; динаміка дефектів, щоб оцінити готовність релізу. Перелік без «навіщо» — слабка відповідь.
    • «Як зрозуміти, що тестування можна закінчувати?» — перевіряють, чи знаєте ви про критерії виходу і чим їх вимірюють; бонус — чесне «тестування не закінчується, а зупиняється» з відсилкою до вичерпного тестування, яке неможливе.
    • «100% тестів пройшло — продукт якісний?» — класична перевірка критичного мислення: сильний кандидат розкладе, чому pass rate не дорівнює якості (слабкі тести, непокриті вимоги, absence-of-defects fallacy).
    • «Чи можна оцінювати тестувальників за кількістю заведених багів?» — питання на закон Ґудгарта; очікують «ні» з поясненням, як саме метрика зіпсує поведінку.
    • «Що напишете у звіті, якщо реліз завтра, а критичний баг не пофікшено?» — дивляться на зрілість: факти, ризик мовою бізнесу, варіанти й рекомендація — замість паніки або мовчазного «зелений звіт».
    • «Чим test progress report відрізняється від test summary report?» — периферійне, але просте: регулярний пульс для команди проти підсумкового документа для рішення про реліз.

    Джерела

    • ISTQB CTFL 4.0 Syllabus — розділ 5.3 «Test Monitoring, Test Control and Test Completion»: метрики, звіти про прогрес і завершення.
    • ISTQB Glossary — канонічні означення: metric, defect density, defect detection percentage (DDP), test progress report, test completion report.
    • ISO/IEC/IEEE 29119-3:2021 — Software testing — Part 3: Test documentation: шаблони тестової документації, включно зі звітами про прогрес і завершення.
    • Playwright: Reporters — офіційна документація репортерів, зокрема JSON-звіт зі статистикою expected/unexpected/flaky/skipped.