Нефункціональне тестування
Нефункціональне тестування оцінює атрибути, відмінні від функціональних характеристик компонента або системи. Нефункціональне тестування — це перевірка того, «наскільки добре поводиться система». Основною метою нефункціонального тестування є перевірка нефункціональних характеристик якості програмного забезпечення. Тестування продуктивності відноситься до нефункціонального тестування.
Нефункціональні характеристики
Ще раз згадаємо нефункціональні характеристики. Стандарт ISO/IEC 25010 надає таку класифікацію нефункціональних характеристик якості програмного забезпечення:
- Ефективність виконання/продуктивності (Performance efficiency)
- Сумісність (Compatibility)
- Зручність використання (Usability)
- Надійність (Reliability)
- Безпека (Security)
- Зручність супроводу (Maintainability)
- Портативність (Portability)
Тестування продуктивності
Тестування продуктивності (Performance testing) — це процес тестування програмного забезпечення, який використовується для перевірки швидкості, часу відгуку, стабільності, надійності, масштабованості та використання ресурсів програмного додатка під певним навантаженням. Основною метою тестування продуктивності є виявлення та усунення вузьких місць продуктивності програмного додатку.
Тестування продуктивності зосереджено на перевірці програмного забезпечення:
- Швидкість (Speed) – визначає, чи швидко реагує програма
- Масштабованість (Scalability) – визначає максимальне навантаження на користувача, яке може витримати програма.
- Стабільність (Stability) – визначає, чи програма стабільна за різних навантажень
Значення тестування продуктивності
Метою тестування продуктивності є усунення вузьких місць продуктивності.
Тестування продуктивності проводиться, щоб надати зацікавленим сторонам інформацію про їх програмний додаток щодо швидкості, стабільності та масштабованості. Тестування продуктивності виявляє, що потрібно покращити, перш ніж продукт виходить на ринок.
Тестування продуктивності визначить, чи відповідає програмне забезпечення вимогам щодо швидкості, масштабованості та стабільності за очікуваних робочих навантажень. Програми, що виходять на ринок із низькими показниками продуктивності через відсутність або погане тестування продуктивності, ймовірно, здобудуть погану репутацію та не досягнуть очікуваних цілей продажів.
Крім того, критично важливі додатки, такі як програми космічного запуску або рятувальне медичне обладнання, повинні бути перевірені на продуктивність, щоб переконатися, що вони працюють протягом тривалого періоду часу без відхилень.
Типи тестування продуктивності
Тестування навантаження (Load testing) – перевіряє здатність програми працювати при очікуваному навантаженні користувача. Мета полягає в тому, щоб виявити вузькі місця продуктивності .
Стрес-тестування (Stress testing) – передбачає тестування програми за екстремальних робочих навантажень, щоб побачити, як вона справляється з великим трафіком або обробкою даних. Мета полягає в тому, щоб визначити точку зламу програми.
Тестування витривалості (Endurance testing) – проводиться, щоб переконатися, що програмне забезпечення може витримати очікуване навантаження протягом тривалого періоду часу.
Тестування стрибків (Spike testing) – перевіряє реакцію програмного забезпечення на раптові великі стрибки навантаження, створювані користувачами.
Тестування об’єму (Volume testing) – створюється велика кількість записів у базі і даних і моніториться поведінка системи. Мета – перевірити поведінку системи у разі зміни обсягів даних в базі даних.
Тестування масштабованості (Scalability testing) – визначити ефективність програмного додатку у разі збільшення кількості користувачів.
Проблеми продуктивності
Більшість проблем із продуктивністю пов’язані зі швидкістю, часом відгуку, часом завантаження та поганою масштабованістю. Швидкість часто є одним із найважливіших атрибутів програми. Додаток, що працює повільно, втратить потенційних користувачів. Тестування продуктивності гарантує, що програма працює досить швидко, щоб зберегти увагу та інтерес користувача.
- Тривалий час завантаження – зазвичай час завантаження – це початковий час, потрібний програмі для запуску. Як правило, це має бути зведено до мінімуму.
- Поганий час відгуку – час відгуку – це час, який проходить від моменту введення користувачем даних у програму до моменту, коли програма виводить відповідь на цей вхід. Загалом це має бути дуже швидко. Знову ж таки, якщо користувачеві доводиться чекати занадто довго, він втрачає інтерес.
- Погана масштабованість – програмний продукт страждає від поганої масштабованості, якщо він не може працювати з очікуваною кількістю користувачів або коли він не вміщує достатньо широке коло користувачів.
- Вузькі місця – вузькі місця – це перешкоди в системі, які погіршують загальну продуктивність системи. Вузьке місце — це коли помилки кодування або проблеми з апаратним забезпеченням спричиняють зниження пропускної здатності за певних навантажень. Вузьке місце часто спричинене одним несправним розділом коду. Ключ до вирішення проблеми з вузьким місцем полягає в тому, щоб знайти частину коду, яка спричиняє сповільнення, і спробувати її виправити. Вузькі місця, як правило, усуваються шляхом виправлення погано запущених процесів або додавання додаткового обладнання. Деякі поширені вузькі місця продуктивності: завантаження ЦП, використання пам’яті, використання мережі, обмеження операційної системи, використання диска.
Процес тестування продуктивності
Крок 1) Визначте середовище тестування. Знайте середовище тестування та доступні інструменти тестування. Зрозумійте деталі обладнання, програмного забезпечення та мережевих конфігурацій, які використовувалися під час тестування, перш ніж розпочати процес тестування. Це допоможе тестувальникам створювати ефективніші тести. Це також допоможе визначити можливі проблеми, з якими можуть зіткнутися тестувальники під час процедур тестування продуктивності.
Крок 2) Визначте критерії прийнятності ефективності. Це включає цілі та обмеження щодо пропускної здатності, часу відповіді та розподілу ресурсів. Також необхідно визначити критерії успіху проєкту поза цими цілями та обмеженнями. Тестувальники повинні мати повноваження встановлювати критерії ефективності та цілі, тому що часто специфікації проєкту не включатимуть достатньо широкий вибір контрольних показників ефективності. Іноді їх може не бути взагалі. Якщо можливо, пошук схожої програми для порівняння є хорошим способом встановити цілі продуктивності.
Крок 3) Планування та розробка тестування продуктивності. Визначте, як використання буде відрізнятися серед кінцевих користувачів, і визначте ключові сценарії для перевірки можливих випадків використання. Необхідно змоделювати різноманітних кінцевих користувачів, спланувати дані тестування продуктивності та визначити, які показники збиратимуться.
Крок 4) Налаштування тестового середовища. Підготуйте середовище тестування перед виконанням. Крім того, організуйте інструменти та інші ресурси.
Крок 5) Впровадження тестів. Створіть тести продуктивності відповідно до вашого тестового дизайну.
Крок 6) Виконайте тести. Виконувати та контролювати тести.
Крок 7) Проаналізуйте, налаштуйте та повторно перевірте. Проаналізуйте результати тестів. Потім виконайте налаштування та перевірте ще раз, щоб побачити, чи є покращення чи зниження продуктивності.
Деякі показники тестування продуктивності
Використання процесора (Processor Usage) – кількість часу, який процесор витрачає на виконання активних потоків.
Використання пам’яті (Memory use) – обсяг фізичної пам’яті, доступний процесам.
Дисковий час (Disk time) – час, протягом якого диск зайнятий виконанням запиту на читання або запис.
Пропускна здатність (Bandwidth) – оказує кількість бітів на секунду, які використовуються мережевим інтерфейсом.
Приватні байти (Private bytes) – кількість байтів, виділених процесом, які не можуть бути спільно використані іншими процесами. Вони використовуються для вимірювання витоків пам’яті та використання.
Деякі інструменти тестування продуктивності
Тестування продуктивності завжди проводиться лише для систем клієнт-сервер. Це означає, що будь-яка програма, яка не є клієнт-серверною архітектурою, не потребує тестування продуктивності.
На ринку доступний широкий вибір інструментів тестування продуктивності. Інструмент, який ви виберете для тестування, залежатиме від багатьох факторів, таких як типи підтримуваних протоколів, вартість ліцензії, вимоги до обладнання, підтримка платформи тощо.
- LoadNinja. Цей cloud інструмент навантажувального тестування дає змогу командам записувати та миттєво відтворювати комплексні навантажувальні тести. Команди можуть збільшити охоплення тестуванням і скоротити час тестування навантаження.
- BlazeMeter. Це потужний інструмент тестування продуктивності. Тестувальники можуть використовувати такі розширені функції, як імітаційні служби, дані синтетичних тестів, тестування та моніторинг API. Масштабується до 2 мільйонів користувачів.
- LoadRunner – це популярний інструмент тестування продуктивності. Цей інструмент здатний симулювати сотні тисяч користувачів, навантажуючи додатки, щоб визначити їх поведінку під очікуваними навантаженнями. У Loadrunner є генератор віртуальних користувачів, який імітує дії живих користувачів.
- Jmeter – один з провідних інструментів, який використовується для навантажувального тестування веб-серверів і серверів додатків.
В цьому відео поговоримо про тестування продуктивності (тип нефункціонального тестування чорної скриньки):
00:27 Нефункціональне тестування
00:51 Нефункціональні характеристики
01:22 Тестування продуктивності
02:20 Значення тестування продуктивності
03:42 Типи тестування продуктивності
07:03 Проблеми продуктивності
09:42 Процес тестування продуктивності
13:27 Деякі показники для тестування продуктивності
14:54 Деякі інструменти для тестування продуктивності