Тестування програмного забезпечення, або випробування програмних систем, — це системний процес вивчення програмного продукту. Його завдання — визначити, наскільки фактична поведінка програми збігається з очікуваною. Для цього використовують обмежений набір перевірок, який називають тестами. Міжнародний стандарт ISO/IEC TR 19759:2005 дає подібне визначення й підкреслює контрольну роль тестування.
За роки в професійній спільноті з'явилося багато визначень, кожне підкреслює свій аспект. Гленфорд Майерс акцентував увагу на виконанні програми для пошуку помилок. Інші спеціалісти розглядали тестування як дисципліну для підвищення надійності за розумних витрат. С. Канер бачив у тестуванні джерело інформації про якість для різних зацікавлених сторін. У загальному й цілому тестування — це не лише пошук дефектів, але й комплексна оцінка відповідності продукту вимогам та очікуванням користувачів.

Історія розвитку тестування програмного забезпечення
Історія тестування тісно пов'язана з розвитком самої розробки програм. У початковий період, під час створення перших обчислювальних систем, тестування було суворо формалізованим: дані, процедури та результати фіксувалися детально. Тестування традиційно виділялося в окремий етап і часто виконувалося тими ж спеціалістами, хто писав код.
У 1960‑х роках популярною була ідея всеохоплюючого тестування — перевірки всіх шляхів виконання та всіх вхідних даних. Швидко з'ясувалося, що це нереалістично: комбінацій вхідних даних та шляхів виконання занадто багато, а архітектурні та специфікаційні помилки таким способом часто не виявляються. Концепція виявилася теоретично цікавою, але практично непридатною.
У 1970‑х роках відбувався перехід до трактування тестування як демонстрації коректності або підтвердження правильності роботи. На практиці доведення коректності виявилося трудомістким і неповним, тому його застосування обмежилося, наприклад, приймальними випробуваннями.
Пізніше, у другій половині 1970‑х, парадигма змістилася: тестування стали розглядати переважно як процес пошуку помилок. Тест вважався вдaлим, якщо він знаходив раніше невідомі дефекти. Такий підхід дав практичний ефект, оскільки стимулював активний пошук проблем і підвищував якість продукту.
У 1980‑ті роки до завдань тестування додалося попередження дефектів. Проєктування тестів визнали засобом запобігання помилок, а сам процес — керованим і протяжним на всьому циклі розробки. Тести стали охоплювати вимоги, архітектуру, код і самі тестові сценарії. Поява перших інструментів автоматизації у середині 1980‑х розширила можливості перевірок і знизила трудомісткість рутинних операцій.
У 1990‑ті тестування перетворилося на комплексну дисципліну, що включає планування, проектування, підготовку та виконання тестів і середовищ. У цей період розвивалися середовища автоматизації, системи управління тестами та інструменти навантажувального тестування. З розширенням мережевих та веб‑додатків виникла потреба в гнучких підходах, які відповідали змінам у розробці.

Цілі та завдання тестування програмного забезпечення
Головна мета тестування — надати об'єктивну інформацію про якість продукту зацікавленим сторонам, щоб прийняти рішення про випуск або доробку. Для цього вирішують конкретні завдання:
Нижче перераховані основні завдання тестування:
- виявлення дефектів;
- перевірка відповідності вимогам;
- оцінка якості продукту;
- зниження ризиків.
Підтвердження готовності до випуску зазвичай описується окремо, оскільки це підсумкове рішення, яке базується на зібраних результатах тестування.
Основні принципи тестування
Ефективне тестування спирається на ряд загальноприйнятих принципів. Їх знання допомагає будувати процес логічно та економічно:
- Тестування показує наявність дефектів, але не їх відсутність.
- Повне тестування неможливе.
- Чим раніше починається тестування, тим дешевше усувати помилки.
- Дефекти концентруються в обмеженій кількості частин системи.
- Повторення одних і тих же тестів знижує їх ефективність.
- Підходи до тестування залежать від контексту та призначення системи.
- Відповідність вимогам не гарантує задоволеність користувачів.
Стандарти у галузі тестування
Існують міжнародні стандарти, які вирівнюють термінологію, процеси та вимоги до документації. Вони допомагають командам застосовувати перевірені практики та говорити однією мовою під час організації тестування.
Класифікація видів та методів тестування
Тестування охоплює багато підходів, які зручно класифікувати за різними ознаками. Це спрощує вибір методів для конкретного завдання.
За об'єктом тестування
Нижче наведено основні види тестування за об'єктом перевірки:
- функціональне тестування;
- тестування продуктивності;
- конфігураційне тестування;
- юзабіліті‑тестування;
- тестування безпеки;
- тестування локалізації;
- тестування сумісності.
Види навантажувального тестування виділені окремо:
- навантажувальне тестування;
- стрес‑тестування;
- тестування стабільності.
За знанням внутрішньої будови системи
Підходи розрізняються за обсягом інформації про внутрішню будову системи, доступної тестувальникові:
- тестування білого ящика;
- тестування чорного ящика;
- тестування сірого ящика.
За ступенем автоматизації
Тестові перевірки можна виконувати різними способами:
- ручне тестування;
- автоматизоване тестування;
- напівавтоматизоване тестування.
За ступенем ізольованості
Тестування розділяють залежно від масштабу перевірюваних одиниць:
- тестування компонентів;
- інтеграційне тестування;
- системне тестування.
За часом проведення тестування
Розрізняють типи тестування за стадією розробки:
- альфа‑тестування;
- димове тестування;
- тестування нової функції;
- підтверджуюче тестування;
- регресійне тестування;
- приймальне тестування;
- бета‑тестування.
За ознакою позитивності сценаріїв
Сценарії розділяють за очікуваним характером вхідних даних:
- позитивне тестування;
- негативне тестування.
За ступенем підготовленості до тестування
Тестові підходи розрізняються за наявністю документації та структурованістю:
- тестування за документацією;
- інтуїтивне (ad hoc) тестування.
Рівні тестування
Тестування будується за рівнями з різними цілями та обсягом перевірок:
- тестування компонентів;
- інтеграційне тестування;
- системне тестування;
- альфа‑тестування;
- бета‑тестування.
Статичне та динамічне тестування
Методи розрізняються за тим, чи виконується код під час перевірки:
- динамічне тестування;
- статичне тестування.
Регресійне тестування
Регресійне тестування проводять після змін у коді, щоб переконатися, що виправлення або нові функції не порушили вже діючу функціональність. Це можна виконувати вручну або автоматизувати, що особливо корисно для великих та часто оновлюваних систем.

Тестові сценарії
Тестові сценарії — це набір кроків із умовами та очікуваним результатом для перевірки конкретної функції. Добре продумані сценарії забезпечують системність та повторюваність перевірок і зосереджуються на критичних ділянках системи.
Тестування білого ящика, чорноого ящика і сірого ящика
Ці терміни описують ступінь доступу до внутрішніх частин системи під час підготовки та виконання тестів:
- тестування білого ящика;
- тестування чорного ящика;
- тестування сірого ящика.
Альфа‑ і бета‑тестування стосуються стадій публікації та обсягу аудиторії, тоді як тестування білого, чорного та сірого ящика описують методи підготовки та виконання тестів.
Покриття коду
Покриття коду — метрика білого ящика, що показує, яка частина вихідного коду була виконана під час тестування. Розрізняють основні типи покриття:
Нижче наводяться способи вимірювання покриття коду:
- покриття операторів;
- покриття умов;
- покриття шляхів;
- покриття функцій.
Високий рівень покриття не гарантує повного відсутності дефектів, але знижує ризик пропуску помилок у критичних частинах коду.
Роль тестування в життєвому циклі розробки програмного забезпечення
Тестування має бути інтегроване в процес розробки, а не сприйматися як фінальна перевірка. Сучасні практики передбачають участь тестувальників на етапах вимог, проектування, кодування та подальшої верифікації. Такий зсув убік лівого боку дозволяє знаходити та усувати проблеми раніше і дешевше.
Інструменти тестування
Інструменти автоматизують рутинні операції та допомагають керувати процесом. Основні категорії інструментів подані нижче:
- системи управління тестами;
- інструменти автоматизації тестування;
- інструменти для навантажувального тестування;
- інструменти статичного аналізу коду;
- системи відстеження помилок.
Кожна категорія вирішує окремий набір завдань: планування, виконання, вимірювання продуктивності, виявлення вразливостей та управління дефектами.
Професія тестувальника
Тестувальник — це спеціаліст, який глибоко занурюється в продукт, вимоги та користувацькі сценарії. Він виступає представником інтересів користувача, прагнучи підвищити якість та зручність. Для успішної роботи потрібні аналітичне мислення, уважність, вміння працювати з документацією та інструментами автоматизації. Роль вимагає постійного навчання та адаптації до технологій та методологій розробки.

