Вид тестування, згідно з даними ISTQB (International Software Testing Qualifications Board) – це засіб чіткого визначення мети конкретного рівня для програми або проєкту.
Вид тестування сфокусований на конкретну мету тестування, яка може бути перевіркою функції, що виконується компонентом або системою в цілому. Мета тестування може бути спрямована на перевірку елементів нефункціонального тестування (надійність, зручність використання), структури, архітектури компонентів або системи в цілому, а також на елементи, в залежності від змін в системі, наприклад, перевірка виправлення конкретного дефекту (підтверджувальне або повторне тестування) або перевірка випадкових змін (регресійне тестування).
Залежно від потреб процес тестування повинен бути організований відповідним чином. Отже, ми можемо визначити 4 види тестування програмного забезпечення:
- функціональне тестування (Functional testing);
- нефункціональне тестування (Non-functional testing);
- структурне тестування (Structural testing);
- тестування змін (Change related testing).
Функціональне тестування
Сьогодні складно недооцінити важливість функціонального тестування, адже саме ця дія спрямована на тестування всіх функцій системи для підтвердження, що кожна функція програми працює відповідно до документації.
Елементи функціонального тестування:
- підготовка тестових даних виходячи з описаної документації;
- бізнес-вимоги, як частина функціонального тестування;
- отримання результатів на основі специфікації;
- проходження тест-кейсів;
- аналіз фактичних та очікуваних результатів.
Функціональне тестування може бути проведено відповідно до специфікації, а також і на основі бізнес-процесу, тобто відповідно до знань системи.
Переваги функціонального тестування:
- в рамках тестування ми «копіюємо» безпосереднє використання системи;
- тестування, як правило, проводиться в умовах близьких до реальних.
Недоліки:
- існує ймовірність пропустити кілька помилок логіки програмного забезпечення під час перевірки функціоналу програми.
Нефункціональне тестування
Якщо в рамках функціонального тестування ми відповідаємо на питання «Чи працює система?», то нефункціональне відповідає на питання: «Як добре працює система?». Нефункціональне тестування направлено на перевірку тих аспектів ПЗ, які можуть бути описані в документації, але не відносяться до функцій програмних продуктів.
Нефункціональне тестування складається з підвидів:
- Тестування стабільності – Stability testing – перевірка працездатності додатку при тривалому тестуванні з очікуваним рівнем навантаження.
- Юзабіліті тестування – Usability testing – дослідження для визначення зручності використання ПЗ.
- Тестування ефективності – Efficiency testing – перевірка необхідних обсягів коду і ресурсів QA, що використовуються програмою для виконання окремої функції.
- Тестування ремонтопридатності – Maintainability testing – цей підвид нефункціонального тестування визначає наскільки легко підтримувати працездатність системи.
- Перевірка портативності – Portability testing – тестування доступності перенесення окремого компонента або всього програмного забезпечення з одного оточення на інше (Windows 8.1 -> Windows 10, Windows -> MacOS).
- Тестування «пра-витоків» – Baseline testing – перевірка документації та специфікації, за якою будуть написані тест-кейси. До цього підвиду тестування можна віднести й тестування вимог.
- Приймальне тестування – Compliance/Acceptance testing – перевірка продукту на відповідність критеріям готовності.
- Тестування документації – Documentation testing – перевірка всієї створеної в рамках тестування документації (від майстер тест-плану до тест-кейсів).
- Тестування витривалості системи – Endurance testing – тестування системи при високому навантаженні протягом тривалого періоду часу з метою вивчення її поведінки.
- Тестування навантаження – Load testing – як правило, проводиться з метою визначення поведінки ПЗ під очікуваним рівнем навантаження.
- Тестування продуктивності – Performance testing – перевірка швидкості роботи ПЗ або його окремих функцій.
- Тестування сумісності – Compatibility testing – тестування системи під час роботи в різних середовищах: «залізо», софт частина тощо.
- Тестування безпеки – Security testing – проводиться для відповіді на питання «Чи є додаток безпечним/захищеним чи ні?».
- Об'ємне тестування – Volume testing – тестування ПЗ з використанням баз даних певного розміру.
- Стрес тестування – Stress testing – це тестування в обмежених умовах, наприклад, перевірка поведінки системи (відсутність крешів) за умов нестачі ресурсів комп’ютера (оперативної пам’яті або місця на HDD/SSD дисках).
- Тестування швидкості відновлення – Recovery testing – проводиться з метою визначення швидкості відновлення системи у разі софтверного креша (падіння програмного забезпечення) або помилки «заліза».
- Тестування локалізації, інтернаціоналізація – Localization testing – перевірка ПЗ на відповідність мовних, культурних та/або релігійних норм. Локалізація – перевірка відображення усіх перекладених текстів програмного забезпечення.
Структурне тестування
Структурне тестування направлено на тестування структури системи або компонента. Цей вид тестування, як правило, відносять до тестування «білого» та «сірого» ящиків, оскільки ми перевіряємо, що відбувається всередині системи або додатка.
Методи структурного тестування:
- Строкове покриття (Statement Coverage) – перевірка застосування усіх операторів в програмі на використання (хоча б один раз).
- Покриття шляху (Path Coverage) – метод тестування, призначений для задоволення критеріїв охоплення кожного логічного шляху через програму.
- Покриття рішення (Branch Coverage) – перевіряє, чи має кожна умова розгалуження для програми дійсні чи хибні значення;
- Покриття умови (Condition Coverage) – метод, схожий на Branch Coverage, основна відмінність полягає в перевірці стану покриття для умовних і неумовних гілок.
Переваги:
- можливість виявити та видалити «зайвий» код;
- можливість виявлення потенційних помилок на ранній стадії;
- забезпечує більш ретельне тестування ПЗ;
- не потребує високих витрат людино-годин.
Недоліки:
- вимагає знання коду та інструментів тестування.
Тестування змін
При тестуванні змін в системі дуже важливо зрозуміти різницю та межу між поняттями регресійне тестування (Regression testing) та повторне тестування (Retesting).
Регресійне тестування (Regression testing) проводиться з метою перевірки працездатності функціоналу, що існує, та перевірки на відсутність сторонніх помилок після оновлення білда (внесення правок або доповнень в систему).
Повторне тестування (Retesting) – проводиться для підтвердження виправлення помилки та роботи даного функціоналу.
Regression testing | Retesting |
Regression testing
Регресійне тестування виконується тільки при додаванні нової фічі (додаткова функціональність ПЗ) або істотній зміні функціоналу системи. |
Retesting
Ретест виконується в тому ж оточенні й з тими ж даними, але на новому білді. |
Regression testing
Регрес можна проводити паралельно з повторним тестуванням. |
Retesting
Повторне тестування має вищий пріоритет та має бути виконано до регресійного. |
Regression testing
Тест-кейси можуть бути автоматизовані. |
Retesting
Тест-кейси не можуть бути автоматизовані. |
Regression testing
В рамках регресійного тестування тест-кейси, які були відмічені раніше як «Passed», повинні бути перевірені повторно. |
Retesting
В рамках повторного тестування (ретест) перевіряються тест-кейси тільки зі статусом «Failed». |
Регресійне тестування (Regression testing)
Переваги:
- підтверджує відсутність багів після додавання фічі або правки коду;
- може бути виконано з використанням інструментів автоматизації;
- допомагає поліпшити якість продукту.
Недоліки:
- даний вид тестування може бути дуже трудомістким.
Повторне тестування (Retesting)
Переваги:
- підтверджує виправлення помилки й коректну роботу функціонала;
- підвищує загальну якість продукту;
- вимагає менше часу на верифікацію;
- не вимагає яких-небудь нових налаштувань середовища тестування.
Недоліки:
- тест-кейси для повторного тестування можуть бути виявлені тільки після першого раунду тестування;
- тест-кейси для повторного тестування не можуть бути автоматизовані;
- вимагає додаткового часу для проходження вже пройдених раніше тест-кейсів.
Знання видів тестування – це необхідна навичка тестувальника, вона дає розуміння підходів щодо тестування програмного забезпечення, допомагає добре спланувати тестування, а також класифікувати знайдені помилки.