Типи та рівні тестування

Типи тестування

Це доволі складне питання, оскільки існує більше сотні типів тестування. Тому наразі метою є отримати узагальнене та трохи спрощене розуміння з приводу цього питання (типи та рівні тестування). Метою є побачити узагальнену картину, якщо можна так сказати. Звісно запропонований підхід найімовірніше буде серйозно розкритикований.

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

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

Статичне тестування (Static) не передбачає запуск ПЗ на виконання. Динамічне тестування (Dynamic), навпаки, передбачає запуск ПЗ на виконання. До статичного тестування відносять техніки перегляду (неформальні перегляди, наскрізні проходження, технічні огляди, інспекції), а також статичний аналіз (контроль потоку та потоки даних). У динамічному тестування виділено чотири великі групи тестування: білої скриньки, чорної скриньки, тестування засноване на досвіді та тестування пов’язане зі змінами.

Тестування білої скриньки (White-Box) базується на структурі та виводить тести з реалізації або внутрішньої структури системи (наприклад, коду, архітектури, робочих процесів і потоків даних). Основна мета тестування білої скриньки – охопити базову структуру тестами до прийнятного рівня.

Тестування чорної скриньки (Black-box) базується на специфікаціях і одержує тести з зовнішньої документації щодо об’єкта тестування. Основна мета тестування чорної скриньки – перевірити поведінку системи на відповідність її специфікаціям.

Функціональне тестування (Functional) оцінює функції, які повинен виконувати компонент або система. Функції – це «те, що» повинен робити тестовий об’єкт. Основною метою функціонального тестування є перевірка функціональної повноти, функціональної правильності та функціональної відповідності.

Нефункціональне тестування (Non-functional) оцінює атрибути, відмінні від функціональних характеристик компонента або системи. Нефункціональне тестування — це перевірка того, “наскільки добре поводиться система”. Основною метою нефункціонального тестування є перевірка характеристик якості нефункціонального програмного забезпечення (продуктивність, зручність використання, відновлення, сумісність, безпека).

Тестування засноване на досвіді (Experience-based). При застосуванні методів тестування, заснованих на досвіді, тестові випадки створюються на основі навичок та інтуїції тестувальника, а також його досвіду роботи з подібними програмами та технологіями. Ці методи можуть бути корисними для виявлення тестів, які нелегко ідентифікувати за допомогою інших більш систематичних методів. Залежно від підходу та досвіду тестувальника, ці методи можуть досягти різного ступеня охоплення та ефективності. Покриття може бути важко оцінити, і його неможливо виміряти за допомогою цих методів.

Тестування пов’язане зі змінами (Change-related). Коли в систему вносяться зміни або для виправлення дефекту, або через нову чи змінну функціональність, слід провести тестування, щоб підтвердити, що зміни виправили дефект або реалізували функціональні можливості належним чином і не спричинили жодних непередбачуваних несприятливих наслідків.

Рівні тестування

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

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

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

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

Тестування системної інтеграції зосереджено на тестуванні інтерфейсів тестованої системи та інших систем і зовнішніх сервісів. Тестування системної інтеграції вимагає відповідних тестових середовищ, бажано подібних до робочого середовища.

Приймальне тестування зосереджено на перевірці та демонстрації готовності до розгортання, що означає, що система відповідає бізнес-потребам користувача. В ідеалі приймальне тестування має виконуватися користувачами. Основними формами приймального тестування є: приймальне тестування користувача (UAT), операційне приймальне тестування, договірне та нормативне приймальне тестування, альфа-тестування та бета-тестування.

Типи та рівні тестування

В цьому відео поговоримо про типи та рівні тестування
00:05 Типи тестування
19:59 Рівні тестування

Життєвий цикл тестування ПЗ (STLC)

Життєвий цикл тестування програмного забезпечення (STLC) – це систематичний підхід до тестування програмного забезпечення, щоб переконатися, що воно відповідає вимогам і мінімізувати ризик наявності дефектів в ньому. Це процес, який включає серію кроків або фаз, і кожна фаза має конкретні цілі та результати. STLC використовується для забезпечення високої якості, надійності програмного забезпечення та відповідності потребам кінцевих користувачів.

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

Етапи STLC включають планування тесту, аналіз тесту, розробку тесту, налаштування тестового середовища, виконання тестуванн, закриття тестування та повторне тестування дефектів. Кожен із цих етапів включає певні дії та результати, які допомагають забезпечити ретельне тестування програмного забезпечення та відповідність вимогам кінцевих користувачів.

Загалом STLC є важливим процесом, який допомагає забезпечити якість програмного забезпечення та забезпечує систематичний підхід до тестування. Це дозволяє організаціям випускати високоякісне програмне забезпечення, яке відповідає потребам їхніх клієнтів.

Аналіз вимог

Аналіз вимог є першим кроком життєвого циклу тестування програмного забезпечення (STLC). На цьому етапі команда із забезпечення якості вивчає вимоги, наприклад те, що має бути перевірено. Якщо чогось не вистачає або щось є незрозумілим, тоді команда із забезпечення якості зустрічається із зацікавленими сторонами, щоб краще зрозуміти вимоги.

Діяльність, яка виконується на етапі аналізу вимог, включає:

  • Перегляд документа вимог до програмного забезпечення (SRD) та інших пов’язаних документів
  • Опитування зацікавлених сторін для збору додаткової інформації
  • Виявлення будь-яких двозначностей або невідповідностей у вимогах
  • Виявлення будь-яких відсутніх або неповних вимог
  • Виявлення будь-яких потенційних ризиків або проблем, які можуть вплинути на процес тестування
  • Створення матриці відстеження вимог (RTM)

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

Планування тестування

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

Діяльність, яка виконується на етапі планування тесту, включає:

  • Визначення цілей та обсягу тестування
  • Розробка стратегії тестування: вибір методів і технік тестування, які будуть використовуватися
  • Визначення середовища тестування та необхідних ресурсів
  • Визначення тестових випадків, які будуть виконані, і тестових даних, які використовуватимуться
  • Оцінка часу та витрат, необхідних для тестування
  • Визначення результатів тестування та етапів
  • Розподіл ролей і обов’язків між командою тестування
  • Розгляд та затвердження плану тестування

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

Розробка тестових кейсів

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

Діяльність, яка виконується на етапі розробки тестового прикладу, включає:

  • Визначення тестів, які будуть розроблені
  • Написання тестів, які є ясними, лаконічними та легкими для розуміння
  • Створення тестових даних, які будуть використовуватися в тестових випадках
  • Визначення очікуваних результатів для кожного тесту
  • Перегляд і перевірка тестів
  • Оновлення матриці відстеження вимог (RTM) для пов’язання вимог з тестовми випадками

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

Налаштування тестового середовища

Налаштування тестового середовища є важливою частиною STLC. По суті, середовище тестування визначає умови, за яких тестується програмне забезпечення. Це незалежна діяльність, і її можна розпочати разом із розробкою тестів.

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

Після розробки тестових кейсів та налаштування тестового середовища починається фаза виконання тестування. На цьому етапі команда тестування починає виконання тестів на основі підготовлених тест кейсів під час попередньої фази.

Діяльність, яка виконується на етапі виконання тестування, включає:

  • Виконання тестів: тестові випадки та сценарії, створені на етапі розробки тесту, запускаються в програмному забезпеченні для виявлення будь-яких дефектів або проблем.
  • Аналіз результатів тесту: результати виконання тесту аналізуються для визначення продуктивності програмного забезпечення та виявлення будь-яких дефектів або проблем.
  • Реєстрація дефектів: будь-які дефекти або проблеми, виявлені під час виконання тесту, реєструються в системі відстеження дефектів.
  • Повторне тестування дефектів: будь-які дефекти, виявлені під час виконання тесту, перевіряються повторно, щоб переконатися, що їх було виправлено.
  • Звіт про тестування: результати тестування документуються та повідомляються відповідним зацікавленим сторонам.

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

Завершення тестування

Завершення тестування є завершальним етапом життєвого циклу тестування програмного забезпечення (STLC), на якому завершуються та документуються всі дії, пов’язані з тестуванням. Основна мета етапу закриття тестування полягає в тому, щоб переконатися, що всі дії, пов’язані з тестуванням, завершено та що програмне забезпечення готове до випуску.

Наприкінці етапу закриття тестування команда тестувальників повинна мати чітке уявлення про якість і надійність програмного забезпечення, і будь-які дефекти або проблеми, які були виявлені під час тестування, повинні бути усунені. Етап закриття тесту також включає документування процесу тестування та будь-яких отриманих уроків, щоб їх можна було використати для покращення майбутніх процесів тестування

Основні дії, які відбуваються на етапі завершення тестування, включають:

  • Підсумковий звіт про тестування: створюється звіт, який підсумовує загальний процес тестування, включаючи кількість виконаних тестів, кількість знайдених дефектів і загальний відсоток проходження/відмови.
  • Відстеження дефектів: дефекти, виявлені під час тестування, відстежуються та управляються, доки вони не будуть усунені.
  • Очищення тестового середовища: тестове середовище очищається, а всі тестові дані та тестові артефакти архівуються.
  • Звіт про завершення тестування: створюється звіт, який документує всі дії, пов’язані з тестуванням, які мали місце, включаючи цілі тестування, обсяг, розклад і використані ресурси.
  • Передача знань: знання про програмне забезпечення та процес тестування надаються решті команди та будь-яким зацікавленим сторонам, яким може знадобитися ця інформація для підтримки програмного забезпечення в майбутньому.
  • Відгуки та вдосконалення: Зворотній зв’язок, відгуки пов’язані із процесом тестування збираються та використовуються для покращення майбутніх процесів тестування

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

Тестовий процес

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

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

Тестовий моніторинг і контроль. Моніторинг тестування передбачає постійну перевірку всіх тестових дій і порівняння фактичного прогресу з планом. Тестовий контроль передбачає виконання дій, необхідних для досягнення цілей тестування.

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

Тестовий аналіз часто підтримується використанням тестових методів. Аналіз тестів відповідає на питання «що тестувати?» з точки зору вимірних критеріїв покриття.

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

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

Виконання тесту включає виконання тестів відповідно до графіка виконання тесту (тестових прогонів). Виконання тесту може бути ручним або автоматизованим. Виконання тесту може приймати різні форми, включаючи безперервне тестування або сеанси парного тестування. Фактичні результати тесту порівнюються з очікуваними. Результати тестування реєструються. Аномалії аналізуються, щоб визначити їх ймовірні причини.

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

Життєвий цикл тестування ПЗ

В цьому відео поговоримо про STLC
00:05 STLC
01:13 Фази STLC
02:16 Аналіз вимог
04:36 Планування тестування
06:59 Розробка тестових кейсів
09:04 Налаштування тестового середовища
10:24 Виконання тестування
12:32 Завершення тестування
16:36 Тестовий процес

Принципи тестування ПЗ

Для забезпечення ефективного тестування слід дотрумуватися основних принципів тестування. Є сім загальних принципів тестування.

Принципи тестування:

  • Раннє тестування
  • Тестування показує наявність дефектів
  • Вичерпне тестування неможливе
  • Кластеризація дефектів
  • Парадокс пестицидів
  • Тестування залежить від контексту
  • Відсутність помилок є хибою

Раннє тестування

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

Тестування показує наявність дефектів

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

Вичерпне тестування неможливе

Вичерпне тестування неможливе.  Неможливо з точки зору часу і фінансових можливостей протестувати всі можливі комбінації вхідних даних, сценарії тощо. Тому потрібно визначити оптимальний обсяг тестування на основі оцінки ризику програми.

Кластеризація дефектів

Кластеризація дефектів стверджує, що невелика кількість модулів містить більшість виявлених дефектів. Це застосування принципу Парето до тестування програмного забезпечення: приблизно 80% проблем виявляються в 20% модулів.

Парадокс пестицидів

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

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

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

Тестування залежить від контексту

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

Відсутність помилки є хибою

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

Принципи тестування