Тестування продуктивності або навантаження?

  1. Тестування навантаження (load testing)
  2. Тестування стабільності (stability testing)
  3. Тестування відмовостійкості (failover testing)
  4. Тестування відновлення (recovery testing)
  5. Стресове тестування (stress testing)
  6. Тестування обсягів (volume testing)
  7. Тестування масштабованості (scalability testing)
  8. Тестування потенційних можливостей (capacity testing)
  9. Конфігураційне тестування (configuration testing)
  10. Тестування порівняння (compare testing)

Сьогодні ми трохи поговоримо про теорію тестування. Дуже часто можна почути питання: «Як же правильно говорити: Тестування навантаження або Тестування продуктивності? І чим одне від іншого відрізняється? ». У російськомовному середовищі терміни « Тестування навантаження »І« Тестування продуктивності »переплутані, і не завжди зрозуміло звідки що взялось.

Software testing consists of the dynamic verification that a program provides

expected behaviors on a finite set of test cases, suitably elected from the usually infinite execution domain.

IEEE Guide to Software Engineering Body of Knowledge, SWEBOK V3. 0, 2014]

Або по-російськи:

Тестірованіепрограммногообеспеченіязаключаетсявдінаміческойпроверкетого,

чтопрограммаобеспечіваетожідаемоеповеденіенаограніченномнаборетестов,

обичновибраннихізбесконечногоспіскатестовопределеннимобразом.

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

На малюнку нижче представлена ​​класифікація видів тестування

Класифікацію тестування можна продовжувати і далі, розділяючи на ще більш атомарні одиниці дані типи тестування. Основна складність при класифікації видів тестування полягає в тому, що в основному всі стандарти існують англійською мовою, і при перекладі термінів можуть виникати колізії взаємозалежності від того, як той чи інший термін буде переведений на російську мову. У зв'язку з цим, крім російського перекладу виду тестування в дужках буде вказуватися його англійське найменування. В рамках даної статті ми розглянемо більш докладно тестування продуктивності (Performance Testing).

Вважається, що тестування продуктивності [1] - це те тестування, яке не є функціональним. Існує безліч видів тестування продуктивності. Класифікація видів тестування продуктивності будується на основі того, які цілі переслідує певний вид тестування. Як правило тестування продуктивності переслідує не одну, а кілька цілей в зв'язку з тим, багато типів тестування в ході його проведення поєднуються з іншими цілями або повторюються кілька разів в ході циклу тестування. Основна відмінність тестування продуктивності також полягає в тому, що воно відбувається тільки після повного функціонального тестування. Помилки функціональністю не виправляються в ході тестування продуктивності. Для даного виду тестування найчастіше виділяється окремий навантажувальний стенд, що повторює копію промислового стенду. У зв'язку з масовим поширенням Agile методологій тестування продуктивності також інтегрується в життєвий цикл розробки програмного забезпечення.

На малюнку нижче показана основна класифікація видів тестування продуктивності.

На малюнку нижче показана основна класифікація видів тестування продуктивності

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

№ Вид тестування Вид тестування по англійський Питання на який відповідає тестування 1 Навантажувальне тестування Load Testing [2] Чи достатньо швидко працює система? 2 Тестування стабільності Stability Testing [3] Чи достатньо надійно працює система на довгому інтервалі часу? 3 Тестування відмовостійкості Failover Testing [4] Чи зможе система переміститися сама на інший сервер в разі збою основного сервера? 4 Тестування відновлення Recovery Testing [5] Як швидко відновиться система? 5 Стресовий тестування Stress Testing [6] Що станеться при незапланованої навантаженні? 6 Тестування обсягів Volume Testing [7] Як буде працювати система, якщо обсяг бази даних каліцтва в 100 разів? 7 Тестування масштабованості Scalability Testing [8] Як буде збільшитися навантаження на компоненти системи при збільшенні числа користувачів? 8 Тестування потенційних можливостей Capacity Testing [9] Яка кількість користувачів може працювати? 9 Конфігураційне тестування Configuration Testing [10] Як змусити систему працювати швидше? 10 Тестування порівняння Compare Testing [11] Яке обладнання і ПЗ вибрати?

Тестування навантаження (load testing)

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

Це найбільш поширений і відомий тип тестування, і тому в російськомовному середовищі він на слуху. Часто в рунеті, особливо ті, хто не в темі QA, під навантажувальним тестуванням розуміють всі види випробувань. Але, в англомовній літературі, це всього лише підвид тестування продуктивності.

Розглянемо його докладніше: У ролі навантаження може виступати кількість користувачів, а також кількість операцій на сервері.

Продуктивність при цьому визначається наступними факторами:

  • швидкістю роботи програмного забезпечення;
  • швидкістю роботи апаратного забезпечення;
  • швидкістю роботи мережі.

Під час тестування можуть здійснюватися такі операції, що дозволяють більш точно виміряти продуктивність і визначити «вузьке місце» системи [12] :

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

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

Після знаходження максимальної продуктивності рекомендується її «підтвердити». Для цього проводиться додатковий тест з наступним профілем:

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

Тестування стабільності (stability testing)

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

В ході тестування основний акцент робиться на вимір

  • відсутність витоків пам'яті;
  • відсутність перезапусків серверів;
  • відсутність перезапусків програмного забезпечення;
  • будь-які помилки, пов'язані з накопиченням даних;
  • відсутність відключень або збоїв в роботі мережевого обладнання.

відсутність витоків пам'яті;   відсутність перезапусків серверів;   відсутність перезапусків програмного забезпечення;   будь-які помилки, пов'язані з накопиченням даних;   відсутність відключень або збоїв в роботі мережевого обладнання

Тестування відмовостійкості (failover testing)

Тестування відмовостійкості (failover testing) - даний вид тестування продуктивності дозволяє перевірити поведінку системи є наслiдком збою серверів або при інших несприятливих факторах. Таке тестування особливо важливо в системах, що працюють в режимі 24/7, тому що в разі їх виходу з ладу можливі втрати клієнтів, репутації, грошей і т.п.

Під час тестування перевіряються наступні операції:

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

Тестування відновлення (recovery testing)

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

В ході тестування вимірюються наступні показники:

  • час, за яке система відновиться після збою;
  • коректність відновлених даних.

Стресове тестування (stress testing)

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

В ході тестування вимірюється:

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

можливість і час регенерації системи - можливість і час повернення системи до нормального стану після стресових навантажень;   коректність логування помилок і повідомлень про їх виникненні;   продуктивність системи при стресовому навантаженні;   оцінка впливу збоїв тестованої системи на зовнішні системи

Тестування обсягів (volume testing)

Об'ємне тестування (volume testing) - тестування дозволяє оцінити продуктивність системи при збільшенні обсягів даних як самого додатка, так і його бази даних. Основне питання, на який відповідає даний вид тестування продуктивності: «Що буде завтра з цим додатком або через рік при збільшенні числа користувачів і / або збільшення збережених призначений для користувача і системних даних?».

Під час тестування вимірюються наступні параметри:

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

Тестування масштабованості (scalability testing)

Тестування масштабованості (scalability testing) [13] - дане тестування проводиться для перевірки можливостей масштабування додатки під будь-яким видом навантаження. Також необхідно перевіряти продуктивність системи під час масштабування.

Види масштабування, які перевіряються в ході тестування:

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

Тестування потенційних можливостей (capacity testing)

Тестування потенційних можливостей (capacity testing) - є почасти підвидом тестування масштабованості. Якщо в тестування масштабованості основне питання, яке ставиться: наскільки добре справляється система з зростаючою кількістю користувачів (навантаження). То в даному випадку питання звучить наступним чином: скільки користувачів (з яким навантаженням) може працювати з системою при цьому час відгуку і інші параметри продуктивності повинні знаходиться в межах допустимих значень? Даний вид тестування дозволяє визначити стратегію масштабування і взагалі зрозуміти, а чи варто масштабувати систему?

Конфігураційне тестування (configuration testing)

Конфігураційне тестування (configuration testing) [14] - даний вид тестування перевіряє продуктивність системи на різних апаратних і програмних конфігураціях. В ході тестування вимірюються основні показники продуктивності системи при середніх і граничних значеннях навантаження. Дане вид тестування продуктивності дозволяє переконається, що на інших конфігураціях апаратного і програмного забезпечення система буде працювати з однаковою продуктивністю.

Тестування порівняння (compare testing)

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

Тестування дозволяє відповісти на такі питання як:

  • яку СУБД вибрати?
  • яке обладнання вибрати (платформа, виробник, ціна і т.д.)?
  • як вплинуть на роботу програми оновлення та патчі?

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

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

Приходьте: https://conf.pflb.ru

І чим одне від іншого відрізняється?
Даний вид тестування дозволяє визначити стратегію масштабування і взагалі зрозуміти, а чи варто масштабувати систему?
Ке обладнання вибрати (платформа, виробник, ціна і т.д.)?
К вплинуть на роботу програми оновлення та патчі?
А який потрібно використовувати для конкретно нашої системи?
А чому?
А скільки робити за часом тести стабільності?
А чи потрібно проводити тестування ізольовано або в комплексі з інтеграцією?