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

    10 · Performance testing

    Вимоги до продуктивності: NFR, SLA, SLO, SLI

    Зміст

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

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

    Звідки беруться вимоги до продуктивності

    Спершу — що саме вимога обіцяє. Продуктивність (performance efficiency) у каноні означає не «швидкість», а нефункціональну характеристику ISO 25010 з трьома підхарактеристиками, і кожна дає свій предмет виміру.

    ПідхарактеристикаЩо обіцяє вимога
    Часова поведінка (time behavior)відповісти на ввід у заданий час і за заданих умов; найпоширеніша ціль перф-тесту
    Утилізація ресурсів (resource utilization)скільки ресурсу система зʼїдає — досліджують, якщо доступність ресурсів визнано ризиком
    Ємність (capacity)поведінка на межах: кількість користувачів або обсяги даних; оцінюється придатність архітектури

    Глосарій дає точні означення трьох суміжних понять: продуктивність — ступінь, у якому система виконує свої функції з ефективним використанням ресурсів за заданих умов, пропускної здатності й часу; ємність — ступінь, у якому максимальні межі параметра відповідають вимогам; масштабованість — ступінь, у якому систему можна підлаштувати під змінну ємність. Усі три підхарактеристики впливають на здатність масштабуватися, і наслідок для формулювання прямий: вимога «має бути швидко» не покриває ні утилізації, ні ємності. Система, яка відповідає за 200 мс, але робить це на 99% CPU, таку вимогу формально виконує — хоча запасу на перший же сплеск у неї немає.

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

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

    Скільки метрик брати — теж вимога, а не смак: кожна потребує засобу для послідовного збору й звітування, тож канон вимагає визначити досяжний набір під цілі тесту (робочий підхід — GQM, Goal-Question-Metric: спершу цілі, потім питання, за якими видно, що цілей досягнуто; канон одразу називає й межу методу — GQM пасує процесу перф-тестування не завжди, бо частина метрик описує здоровʼя системи й із цілями прямо не повʼязана). Друга межа вже з боку самого виміру, і вона фізична: забагато вимірів робить аналіз важким і негативно впливає на фактичну продуктивність застосунку.

    Робити це треба на початку: для послідовних моделей розробки канон називає ідеальною практикою включити критерії продуктивності до , визначених на самому початку проєкту. Сенс роботи дока k6 описує як зміну режиму: у багатьох організаціях продуктивність лишається невідчутною, і вони реагують, лише коли стається погане, — а автоматизація існує рівно для того, щоб перевести команду з реактивного режиму в проактивний. Доведена до кінця вимога виглядає буденно — саме такі формулювання дока наводить як приклади: «менш ніж 1% запитів повертають помилку», «95% запитів мають час відповіді нижче 200 мс», «конкретний ендпойнт завжди відповідає протягом 300 мс».

    SLI, SLO і SLA — три різні артефакти

    Три абревіатури постійно вживають як синоніми, і канон SRE пояснює чому: термін SLA перевантажений і набув різних значень залежно від контексту, тож SLI та SLO варті окремого ретельного означення.

    ТермінОзначенняЩо це фізично
    SLI — індикатор рівня сервісу (service level indicator)ретельно означена кількісна міра якогось аспекту наданого рівня сервісуметрика
    SLO — ціль рівня сервісу (service level objective)цільове значення або діапазон значень для рівня сервісу, який міряється індикаторомчисло на цій метриці
    SLA — угода про рівень сервісу (service level agreement)явний або неявний контракт із користувачами, що включає наслідки виконання або невиконання SLO, які він міститьконтракт із наслідком

    Природна структура цілі — SLI ≤ ціль або нижня межа ≤ SLI ≤ верхня межа. А відрізнити SLO від SLA можна одним питанням: «що станеться, якщо ціль не виконано?» Немає явного наслідку — це майже напевно SLO. Наслідки найлегше впізнати, коли вони фінансові (знижка або штраф), але бувають і інші: Google Search не має публічної SLA — «ми не підписували контракт із усім світом», — хоча наслідки недоступності цілком реальні, це удар по репутації й падіння рекламного доходу.

    Ні

    Так: знижка, штраф

    Що важливо користувачу

    SLI — кількісна міра аспекту сервісу

    SLO — цільове значення на цьому SLI

    Є явний наслідок невиконання?

    Лишається SLO

    Це вже SLA

    Бюджет помилок — дозволена частота невиконання SLO

    Поріг прогону — зліпок цілі на час тесту

    Ні

    Так: знижка, штраф

    Що важливо користувачу

    SLI — кількісна міра аспекту сервісу

    SLO — цільове значення на цьому SLI

    Є явний наслідок невиконання?

    Лишається SLO

    Це вже SLA

    Бюджет помилок — дозволена частота невиконання SLO

    Поріг прогону — зліпок цілі на час тесту

    Які метрики стають індикаторами — теж не довільно. Найпоширеніший SLI — запиту; поряд стоять частота помилок як частка всіх отриманих запитів і (system ) у запитах за секунду, а набір залежить від класу системи (для систем зберігання це затримка, доступність і довговічність). Виміри часто агрегуються: сирі дані збирають за вікном і перетворюють на швидкість, середнє або . Іноді доступний лише — клієнтська затримка часто релевантніша для користувача, але виміряти буває можливо лише серверну, і це чесно фіксують у формулюванні. Застереження те саме, що з метриками прогону: не варто брати в SLI кожну метрику з системи моніторингу.

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

    Анатомія числа: від «має працювати швидко» до перевірної вимоги

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

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

    Яким зрізом. Тут працює перцентиль: φ-квантиль — значення спостереження з рангом φ*N серед N спостережень, де 0,5-квантиль зветься медіаною, а 0,95-квантиль — 95-м перцентилем. Середнє в цю роль не годиться — воно приховує, що більшість запитів швидкі, а довгий хвіст набагато, набагато повільніший (глава про метрики). Якщо важлива форма кривої, одного зрізу мало, і канон радить задавати кілька цілей одразу: «90% викликів завершаться менш ніж за 1 мс», «99% — менш ніж за 10 мс», «99,9% — менш ніж за 100 мс». А для різнорідних навантажень пишуть окремі цілі на клас: пакетній обробці важлива , інтерактивному клієнту — затримка.

    За яких умов і в якій точці. Це те, що викидають найчастіше, а без нього суперечку «виконано чи ні» не розвʼязати. Правило коротке: ціль має вказувати, як її міряють і за яких умов вона чинна. Канонічний приклад — «99% (усереднено за 1 хвилину) викликів Get RPC завершаться менш ніж за 100 мс (виміряно на всіх бекенд-серверах)»; щоб не переписувати умови щоразу, канон радить тримати набір шаблонів з інтервалом агрегації, частотою вимірів і точкою виміру затримки.

    Точка виміру — не формальність. Інструмент розводить три різні «часи»: Elapsed time міряє від моменту перед відправленням запиту до отримання останньої відповіді, Latency — до першої, а Connect Time із TLS із Latency автоматично не віднімається. І окремо: JMeter не включає час рендерингу й не виконує клієнтський код, наприклад JavaScript. Тому вимога «сторінка відкривається за 2 секунди» протокольним прогоном не перевіряється взагалі — вимірюється інша величина, а розрив між нею і тим, що бачить користувач, показує життєвий цикл запиту. Вікно й спосіб збору теж мусять стояти у вимозі: попередньо порахований квантиль не можна перерахувати під інше вікно, а квантилі не можна агрегувати — усереднення готових квантилів із кількох інстансів дає статистично беззмістовні значення.

    Разом вимога перестає бути реченням і стає набором полів — саме в такій формі її можна віддати в поріг прогону, де k6 для метрик типу Trend приймає avg, min, max, med і p(N):

    type PerformanceRequirement = {
      transaction: string;   // "checkout"
      aggregation: string;   // "p(95)" — зріз розподілу
      operator: '<' | '<=';
      value: number;         // 500
      unit: 'ms' | 'ratio';
      load: string;          // "200 запитів/с, профіль checkout-peak"
      measuredAt: string;    // "сервер, час до останнього байта"
      window: string;        // "усереднено за 1 хвилину"
    };

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

    «При 200 RPS»: навантаження — частина вимоги, а не її контекст

    Число часу відповіді без навантаження нічого не означає: те саме p95 на порожній системі й на піку відрізняється в рази. Тому друга половина вимоги — (load profile). Він специфікує активність, якої система під тестом може зазнати на проді, і складається з визначеної кількості екземплярів, які виконують дії заздалегідь заданих протягом заданого періоду; коли екземплярами є користувачі, вживають термін «віртуальні користувачі» (virtual users), а глосарій формулює те саме як документацію з кількістю , набором транзакцій і періодом. Термінологічна деталь: профіль навантаження — це і є «сценарій», канон каже прямо, що агрегування операційних профілів дає профіль навантаження, який зазвичай так називають.

    Будується він із чотирьох складників — ціль тесту, операційні профілі, відомі проблеми пропускної здатності й конкурентності, кількість і розподіл у часі, — а розподіл має канонічні форми: рівномірне наростання (ramp-up), рівномірне спадання (ramp-down), миттєві зміни (steps) і заздалегідь визначені розподіли, де обсяг наслідує денні або сезонні бізнес-цикли. Тобто «піковий трафік» у вимозі — це посилання на форму розподілу, а не окремий тест. Для вимоги критично, щоб профіль був відтворюваним, і порада інструмента тут категорична: тримайтеся простих патернів — «наростання, плато, спадання» вистачає для всіх видів тесту, — і уникайте «американських гірок», бо результати мають бути порівнянними й інтерпретовними. Технічно мікс виражається кількома сценаріями k6, кожен зі своїм патерном планування й екзекʼютором.

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

    Поріг: критерій pass/fail самого прогону

    Поріг (threshold) — це критерій pass/fail, який ви задаєте для метрик свого тесту; якщо продуктивність системи під тестом не задовольняє його умов, тест завершується зі статусом провалу. Призначення сформульоване прямо: тестувальники часто використовують пороги, щоб кодифікувати свої SLO. Поріг — це та сама ціль, записана мовою, яку розуміє .

    Вираз порога обчислюється в true або false і має форму <aggregation_method> <operator> <value>: avg < 200, count >= 500, p(90) < 300. Пара, яка покриває найтиповіший випадок, — http_req_failed: ['rate<0.01'] і http_req_duration: ['p(95)<200']: нижче 1% і 95% запитів швидші за 200 мс. Доступні агрегації залежать від : Counter дає count і rate, Gaugevalue, Raterate, Trendavg, min, max, med і p(N). Механіка гейта проста й тому надійна: усі пороги виконано — код виходу 0, провалено хоч один — ненульовий; довга форма дозволяє ще й обірвати прогін на провалі (abortOnFail).

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

    Ні

    Так

    Чек на тіло відповіді

    rate-метрика частки невдалих чеків

    Чи є поріг на цю метрику?

    Прогін зелений, код виходу 0

    Вираз обчислюється в true або false

    false — провал тесту, ненульовий код виходу

    Ні

    Так

    Чек на тіло відповіді

    rate-метрика частки невдалих чеків

    Чи є поріг на цю метрику?

    Прогін зелений, код виходу 0

    Вираз обчислюється в true або false

    false — провал тесту, ненульовий код виходу

    Граблі, які інструмент називає прямо: не задавайте кілька порогів на одну метрику, повторюючи той самий ключ обʼєкта. Пороги — властивості JavaScript-обʼєкта, тож два ключі з однаковим імʼям задати не можна, і решта буде мовчки проігнорована; кілька умов пишуть масивом — RTT: ['p(99)<300', 'p(70)<250', 'avg<200']. Це реальний клас дефекту в конфігурації тесту: прогін зелений, бо половина критеріїв не перевірялася.

    Звідки береться саме це число — питання не до інструмента: критерії приймання мають бути встановлені для всіх релевантних вимірів і привʼязані до загальних цілей перф-тесту, SLA і базових значень. І остання межа: поріг — не SLO. SLO живе на проді й міряється тижнями та місяцями, поріг — його зліпок на час прогону, і його значення часто суворіше, бо стенд менший, а вибірка коротша. Чи робити з порога гейт релізу в й що таке — предмет окремої глави про перф-тести в CI/CD; тут поріг цікавить нас лише як критерій, за яким сам прогін оголошується пройденим або проваленим.

    Baseline: вимога у формі «не гірше, ніж було»

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

    Точкою відліку працює базовий вимір (performance baseline) — набір метрик, які використовують для порівняння поточних і раніше досягнутих вимірів продуктивності. У каноні він стоїть серед критеріїв приймання поряд із цілями тесту й SLA і дає змогу продемонструвати конкретні поліпшення та/або підтвердити досягнення критеріїв. Деталь, яку легко проґавити: базовий вимір створюють, за потреби на знеособлених даних із бази, — він не «береться з проду», і саме тому його можна відтворити. Наслідок для контролю жорсткий: порівнювати можна лише прогони на тому самому середовищі й тих самих даних, а після переїзду стенда старий baseline перестає бути baseline.

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

    Бюджет помилок: чому 100% — хибна ціль

    Це рівень розмови, який відрізняє кандидата, що вміє формулювати вимоги, від кандидата, що вміє ними керувати. Бюджет помилок (error budget) — чітка обʼєктивна метрика, що визначає, наскільки ненадійним сервісу дозволено бути протягом кварталу; його спільно визначають дві команди на основі SLO. Коротше означення того ж механізму — дозволена частота, з якою SLO можна не виконати.

    Починається все з від стовідсоткової цілі. Наполягати, що SLO виконуватимуться 100% часу, і нереалістично, і небажано: це може знизити темп інновацій і розгортань, вимагати дорогих, надмірно консервативних рішень — або і те, і те. Понад певну точку зростання надійності гірше, а не краще, і причин дві. Ціна: вартість не зростає лінійно, інкрементне поліпшення може коштувати у 100 разів більше за попередній крок. Сприйняття: користувач із 99%-надійним смартфоном не відрізнить надійності сервісу 99,99% від 99,999%.

    Механіка — чотири кроки. Продуктовий менеджмент визначає SLO на квартал; фактичний аптайм міряє нейтральна третя сторона — система моніторингу; різниця між цими двома числами і є бюджет ненадійності, що лишився; поки виміряний аптайм вищий за SLO, нові релізи можна викочувати. Арифметика на прикладі: якщо SLO — успішно обслужити 99,999% усіх запитів за квартал, бюджет становить 0,001%, і проблема, через яку впало 0,0002% очікуваних запитів, витрачає 20% квартального бюджету.

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

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

    • «У нас SLA 99,9%» → виглядає як контракт, а насправді майже завжди це SLO: спитайте, що станеться, якщо ціль не виконано. Немає явного наслідку — знижки, штрафу — немає й угоди.
    • «Візьмемо за ціль наші поточні 300 мс» → виглядає як реалізм, а насправді це спосіб застрягти в підтримці системи, яка вимагає героїчних зусиль: канон прямо забороняє виводити ціль із поточної продуктивності.
    • «Ціль — 100% успішних запитів» → виглядає як турбота про якість, а насправді ціль нереалістична й небажана: вона зупиняє темп змін, а користувач із 99%-надійним пристроєм різниці не помітить.
    • «Вимога: p95 < 500 мс» → виглядає як число, а насправді це половина числа: без навантаження, точки виміру й вікна агрегації метрика часу відповіді не придатна до дії — канон вимагає доуточнення часом доби, кількістю одночасних користувачів і обсягом даних.
    • «Сторінка має відкриватися за 2 секунди — перевіримо навантажувальним прогоном» → виглядає як пряма перевірка, а насправді протокольний інструмент не включає час рендерингу й не виконує клієнтський код: ви виміряєте іншу величину, ніж обіцяли користувачу.
    • «Додали чек на тіло відповіді — тепер прогін валиться на помилках» → виглядає як гейт, а насправді невдалі чеки лише накопичують частку. Гейтом чек стає в парі з порогом на його rate-метрику.
    • «Поставили два пороги на одну метрику» → виглядає як суворіший критерій, а насправді другий ключ обʼєкта затирає перший мовчки, і половина умов не перевіряється. Кілька умов задають масивом.
    • «Помилок було 12 штук — це мало» → виглядає як оцінка, а насправді помилки міряють часткою від усіх виконаних запитів (метрика типу Rate, поріг rate<0.01): 12 помилок на 100 запитів і на 100 000 — різні події.

    Підсумок

    • SLI, SLO і SLA — три різні артефакти: метрика, число на ній і контракт із наслідком. Питання «що станеться, якщо ціль не виконано» розводить друге й третє за один хід.
    • Вимога — це набір полів, а не речення. Транзакція, зріз розподілу, поріг, навантаження, точка виміру й вікно агрегації; без будь-якого з них суперечку «виконано чи ні» не розвʼязати.
    • Навантаження входить у вимогу. Число часу відповіді чинне лише для названого профілю, а ємність вимірюється тільки з обмовкою «і при цьому все ще виконує заявлені цілі».
    • Поріг — критерій pass/fail самого прогону, а не SLO. Він кодифікує ціль мовою ранера й віддає вердикт кодом виходу; чек без порога лишається індикатором, а порівняльна вимога «не гірше, ніж було» працює лише на тому самому середовищі й тих самих даних.
    • Бюджет помилок перетворює надійність на керовану величину. 100% — хибна ціль, а вичерпаний бюджет — заздалегідь погоджена підстава зупинити релізи.

    Можливі питання

    • «Чим SLA відрізняється від SLO і SLI?» — сильна відповідь називає три різні сутності (метрика, ціль, контракт) і дає критерій розрізнення: наявність явного наслідку невиконання. Бонус — приклад сервісу без публічної SLA, у якого наслідки все одно є.
    • «Замовник каже: має працювати швидко. Що робите далі?» — дивляться, чи перетворите ви побажання на перевірну вимогу. Очікують перелік полів: транзакція, перцентиль, поріг, навантаження, точка виміру, вікно. Слабка відповідь зупиняється на «попрошу конкретне число».
    • «Вимог до продуктивності немає. Звідки їх узяти?» — перевіряють процес, а не інтуїцію. Сильна відповідь іде від стейкхолдерів і критеріїв приймання, згадує, що починати треба від того, що важливо користувачам, а не від того, що вимірне, і що виводити ціль із поточної продуктивності не можна.
    • «Прогін зелений. Це означає, що вимогу виконано?» — дивляться на розуміння механіки гейта: чи є пороги взагалі, чи не затерто їх дублем ключа і чи був чек на змістовність відповіді.
    • «Що таке error budget і навіщо він QA?» — очікують означення через SLO, арифметику «ціль 99,999% означає бюджет 0,001%» і головне — наслідок: вичерпаний бюджет є погодженою підставою зупинити релізи, а перф-регресія їсть той самий бюджет.
    • «У нас немає абсолютних цілей, є лише порівняння з минулим релізом. Це нормально?» — перевіряють, чи знаєте ви, що порівняльна вимога легітимна, і чи назвете її умову: той самий стенд, ті самі дані, зафіксований базовий вимір.

    Джерела

    Звідки беруться вимоги до продуктивності

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.1: продуктивність як ISO 25010, три підхарактеристики й вплив усіх трьох на масштабованість; §4.1.1: стейкхолдери задають цілі, термінологію і критерії, розведення користувацьких і технічних цілей; §2.1: підхід GQM і його межа, ціна кожної зайвої метрики; §4.1.2: забагато вимірів шкодить і аналізу, і самій продуктивності; §3.4: критерії продуктивності як частина критеріїв приймання від початку проєкту.
    • Google SRE Book — Chapter 4. Service Level Objectives — як обирати цілі: від того, що важливо користувачам, а не від того, що вимірне; заборона виводити ціль із поточної продуктивності; «цілей якнайменше» і «почати з вільної та затягувати».
    • ISTQB Glossary — означення performance efficiency, capacity і scalability як трьох окремих понять.
    • web.dev — Why does speed matter? — планку очікувань задають найкращі сервіси, якими користувач користується щодня, а не конкуренти.
    • Grafana k6 — Thresholds — приклади готових формулювань вимоги, до яких зводиться робота зі стейкхолдерами.
    • Grafana k6 — Automated performance testing — продуктивність у багатьох організаціях лишається невідчутною, і вони реагують, лише коли стається погане; мета автоматизації — перехід від реактивного режиму до проактивного.

    SLI, SLO і SLA — три різні артефакти

    • Google SRE Book — Chapter 4. Service Level Objectives — означення SLI, SLO і SLA та причина розводити їх; структура цілі; питання «що станеться, якщо не виконано» і приклад із відсутністю публічної SLA в Google Search; перелік поширених SLI та їх набори за класами систем; агрегація вимірів; застереження про клієнтську й серверну затримку; ефект опублікованої цілі.
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.1.2: SLA серед критеріїв приймання поряд із цілями тесту й базовими значеннями; §2.1: дотримання або частота порушень SLA як бізнес-метрика прогону.

    Анатомія числа: від «має працювати швидко» до перевірної вимоги

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.2: транзакція як одиниця виміру часу відповіді; §2.1: метрика часу відповіді потребує доуточнення часом доби, кількістю одночасних користувачів і обсягом оброблюваних даних.
    • Google SRE Book — Chapter 4. Service Level Objectives — вимога вказувати спосіб виміру й умови чинності, канонічний приклад формулювання, кілька цілей для опису форми кривої й окремі цілі на клас навантаження, шаблони з інтервалом агрегації, частотою вимірів і точкою виміру; середнє приховує довгий хвіст.
    • Apache JMeter — User's Manual: GlossaryElapsed time, Latency і Connect Time як три різні виміри; відсутність часу рендерингу й виконання клієнтського коду.
    • Prometheus — Histograms and summaries — означення φ-квантиля через ранг; заборона перераховувати готовий квантиль під інше вікно й агрегувати квантилі між інстансами.
    • Grafana k6 — Thresholds — агрегації, доступні для метрик типу Trend, і синтаксис p(N), у якому вимога стає порогом.

    «При 200 RPS»: навантаження — частина вимоги, а не її контекст

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.4: означення профілю навантаження, чотири складники й чотири форми розподілу в часі; §4.1.2: агрегування операційних профілів дає профіль навантаження, який називають сценарієм; §1.2: ємність як кількість користувачів або транзакцій із дотриманням заявлених цілей.
    • ISTQB Glossary — профіль навантаження як документація з кількістю віртуальних користувачів, набором транзакцій і періодом; ємність як відповідність максимальних меж параметра вимогам.
    • Grafana k6 — Scenarios — кілька незалежних сценаріїв із власними екзекʼюторами як інструментальна форма міксу.
    • Grafana k6 — Load test types — порада тримати прості патерни навантаження, застереження проти «американських гірок» і вимога отримати порівнянні й інтерпретовні результати.

    Поріг: критерій pass/fail самого прогону

    • Grafana k6 — Thresholds — поріг як критерій pass/fail і кодифікація SLO, форма виразу й приклади, агрегації за типами метрик, коди виходу, abortOnFail, заборона дублювати ключ і форма масиву.
    • Grafana k6 — Checks — невдалі чеки не валять тест, облік частки, rate-метрика чека й вимога поєднати чек із порогом; відповідь 200 з повідомленням про помилку.
    • Grafana k6 — Metrics — типи метрик Counter, Gauge, Rate і Trend, від яких залежить доступна агрегація порога.
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.1.2: критерії приймання для всіх релевантних вимірів і їх привʼязка до цілей тесту, SLA та базових значень.

    Baseline: вимога у формі «не гірше, ніж було»

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.1.2: baseline як набір метрик для порівняння, місце серед критеріїв приймання і створення базового виміру на знеособлених даних; §4.1.1: очікувані поліпшення проти попередніх циклів як питання до стейкхолдерів.
    • Grafana k6 — Automated performance testing — порівняння з базовим виміром, спостереження за трендом і виявлення регресій релізів як три окремі цілі регулярних прогонів.
    • Grafana k6 — Load test types — порада починати зі смоук-тесту, щоб валідувати скрипт і поведінку системи на кількох користувачах.

    Бюджет помилок: чому 100% — хибна ціль

    • Google SRE Book — Chapter 3. Embracing Risk — означення бюджету помилок, чому надмірна надійність гірша, нелінійна вартість і межа сприйняття користувача, механіка в чотири кроки з арифметикою прикладу, конфлікт стимулів розробки й експлуатації, керування темпом релізів і свідоме послаблення цілі.
    • Google SRE Book — Chapter 4. Service Level Objectives — бюджет як дозволена частота невиконання SLO і нереалістичність цілі «100% часу».

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.