Для чого використовують тест

Для чого використовують тест



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

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

Усі статті виходитимуть з хештегом #базова теорія@zapiskisedogotestera. Це дозволить знайти їх серед інших.

Пропоную почати з визначення тестування, його цілей та принципів.

Звідки взагалі виникла потреба у тестуванні? Люди роблять помилки. Одні з них можуть бути незначними, інші мати руйнівні наслідки. Все, що виробляється людиною, може містити помилки (так ми, люди, влаштовані). Саме тому будь-який продукт потребує перевірки – тестування.

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

Тестування – це …

Тестування (testing) — це процес, що містить у собі всі активності життєвого циклу, як динамічні, так і статичні щодо планування, підготовки та оцінки програмного продукту та пов'язаних з цим результатів робіт з метою визначити, що вони відповідають описаним вимогам, показати, що вони підходять для заявлених цілей і визначення дефектів [глосарий ISTQB].

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

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

Цілі тестування

Цілі тестування сильно залежать від цілей самого проекту. Але можна виділити основні спільні цілі:

  1. Перевірка, чи всі вказані вимоги виконані.
    Що це означає? Кожен продукт має технічне завдання (ТЗ) у тому чи іншому вигляді. Саме воно визначає, як виглядатиме програма. ТЗ задає відповідні вимоги, а ми, як тестувальники, маємо перевірити, що всі вимоги з ТЗ не лише реалізовані, а й працюють правильно.
  2. Створення впевненості у рівні якості об'єкт тестування.
    Безпосереднє тестування не впливає на якість продукту. Грубо кажучи, якість – це задоволення очікувань користувачів. А задоволення залежить від багатьох чинників.
    Проте, пошук та виправлення дефектів дозволяє продукту працювати саме так, як він був задуманий. І, як мінімум, можна сказати, що якщо програма працює коректно та відповідає заданим критеріям, то досягнуто певного рівня якості об'єкта тестування.
  3. Запобігання дефектам.
    Тестування – не лише пошук багів на вже реалізованому продукті. Існує також тестування на ранніх етапах, наприклад, тестування документації.
    Заздалегідь протестувавши теж ТЗ, тестувальник може вказати на потенційні проблеми, які можуть виникнути внаслідок розробки програми. А знаючи про такі проблеми заздалегідь, можна уникнути реальних багів у майбутньому.
  4. Виявлення відмов та дефектів.
    Тут все просто: пошук багів у програмному забезпеченні (ПЗ) є невід'ємною частиною тестування.
  5. Надання зацікавленим особам достатньої інформації, що дозволяє їм ухвалити обґрунтовані рішення (особливо щодо рівня якості об'єкта тестування).
    Тестування – це все-таки послуга. Ми як тестувальники не впливаємо безпосередньо на виправлення дефектів. Але можемо показати поточний стан продукту, виражене у кількості багів, шляхом оформлення баг-репортів. Зацікавлені особи (наприклад, керівник проекту) можуть оцінити поточні проблеми та прийняти рішення про випуск або не випуск продукту.
  6. Зниження рівня ризику неналежної якості програмного забезпечення (наприклад, пропущені збої у роботі).
    Чим краще тестування, тим менший ризик пропуску критичних багів. Отже, ризик виникнення неналежної якості ПЗ зменшується.

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

За останні п'ятдесят років було запропоновано низку принципів тестування, які є загальним посібником для тестування загалом:

  1. Тестування демонструє наявність дефектів, а чи не їх відсутність.
    Тестування може показати, що дефекти є, але не може довести, що їх немає. Тестування знижує ймовірність наявності дефектів, що у програмному забезпеченні, але, навіть якщо дефекти були виявлено, тестування не доводить його коректності. Чому? Бо є пункт 2.
  2. Вичерпне тестування недосяжно.
    Повне тестування з допомогою всіх комбінацій вводів і передумов фізично нездійсненно, крім виняткових випадків. Замість спроби вичерпного тестування повинні використовуватися аналіз ризиків, методи тестування та розстановка пріоритетів, щоб зосередити зусилля на тестування.
    Елементарно, спробуйте порахувати, скільки зусиль необхідно докласти, щоб перевірити всі комбінації калькулятора. І навіть якщо ви продумаєте абсолютно всі варіанти, завжди знайдеться ще один, про який ви не знаєте.
  3. Раннє тестування зберігає час та гроші.
    Активності з тестування мають бути розпочаті якомога раніше у життєвому циклі розробки програмного забезпечення. Це дозволяє знаходити дефекти на ранніх стадіях.
    Раннє тестування іноді називають "зсувом вліво" по ISTQB. Тестування на ранніх етапах життєвого циклу розробки програмного забезпечення допомагає скоротити або виключити дорогі зміни. Хоча б тому, що вчасно помічену помилку в ТЗ виправити набагато простіше, ніж коли з цього ТЗ вже буде розроблено функціональність.
  4. Кластеризація дефектів (Накопичення дефектів).
    Зазвичай, невелика кількість модулів містить більшість дефектів, виявлених під час тестування перед випуском. Тобто баги мають властивість накопичуватися десь в одному місці і, якщо знайшли цікаву помилку у функціоналі, є велика ймовірність знайти поруч ще одну.
  5. Парадокс (ефект) пестициду.
    Якщо ті самі тести будуть виконуватися знову і знову, зрештою ці тести більше не будуть знаходити нових дефектів. Для виявлення нових помилок може знадобитися зміна існуючих тестів та тестових даних, а також написання нових тестів.
    Тести більше не ефективні при виявленні дефектів, так само як пестициди через деякий час більше не є ефективними при боротьбі зі шкідниками.
  6. Тестування залежить від контексту.
    Тестування виконується по-різному, залежно від контексту.Наприклад, програмне забезпечення управління виробництвом, в якому критично важлива безпека, тестується інакше, ніж мобільний додаток електронної комерції.
  7. Помилка про відсутність помилок.
    Деякі організації очікують, що тестувальники зможуть виконати всі можливі тести та знайти всі можливі дефекти, але принципи 2 та 1 кажуть нам, що це неможливо.
    Крім того, помилково очікувати, що просте знаходження та виправлення великої кількості дефектів забезпечить успіх продукту. Наприклад, ретельне тестування всіх зазначених вимог та виправлення всіх виявлених дефектів може призвести до створення системи, яка буде важкою у використанні, не відповідатиме потребам та очікуванням користувачів або буде гіршою порівняно з іншими конкуруючими системами.

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

Які бувають етапи та види тестування: докладний розбір

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

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

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

Чому важливо тестувати програми

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

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

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

Автотестування на JavaScript з нуля

Які бувають етапи тестування

Як правило, у більшості проектів етапи тестування схожі. Давайте по черзі їх розберемо.

Опрацювання вимог до продукту

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

Аналіз вимог

Аналіз вимог дозволяє з'ясувати, які можливі ризики чи складності можуть виникнути під час тестування. Також на цьому етапі можна виявити можливі невідповідності або недостатньо ясні вимоги, які вимагають уточнення розробників або замовника.

Розробка стратегії та плану тестування

Коли всі вимоги продукту зрозумілі, залишається розробити план тестування. До нього входить:

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

Читайте також: Гід за професією тестувальник: чим займається фахівець у сфері QA, скільки заробляє і що треба знати

Створення тестової документації

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

Тестування

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

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

Експлуатація та підтримка

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

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

Читайте також: Які навички потрібні тестувальнику та як їм стати

QA-інженер з нуля до автоматизатора

Які бувають види тестування

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

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

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

Кожен із видів тестування спрямований на перевірку різних аспектів програмного забезпечення. Умовно їх можна розділити на шість груп — розглянемо їх. А щоб розібратися у видах тестування було простіше, пояснимо їх принцип на прикладі звичайної кулькової ручки.

За характером сценаріїв

Сценарій у тестуванні - це опис того, як користувач взаємодіятиме з готовим продуктом. До цієї групи входять два види тестування: позитивні сценарії та негативні.

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

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

За критеріями запуску програми чи коду

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

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

За ступенем автоматизації тестування

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

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

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

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

Ці сценарії запускаються на спеціальних інструментах для автоматизації тестування, які емулюють дії користувача та аналізують результати виконання.

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

По об'єктам тестування

Ця група поєднує у собі види, які передбачають визначення того, які частини програми чи системи піддаються тестуванню.

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

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

Функціональне тестування поділяється на підвиди:

  • Unit-тестування (також модульне тестування) — проводиться під час створення вихідного коду. На цьому етапі тестуються окремі компоненти програми.
  • Інтеграційне тестування.На наступному етапі тестується те, як компоненти майбутнього застосування взаємодіють між собою.
  • Системне тестування (End-to-end тестування).На цьому етапі фахівці тестують всі компоненти програми як єдиний додаток Тестувальники перевіряють, що продукт коректно обробляє різні сценарії та ситуації.
  • Приймальне тестуванняВони перевіряють, чи відповідає проект їх очікуванням і вимогам.

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

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

Читайте також: Я знав, що бути тестувальником моє покликання: історія Кирила Куртова

Нефункціональне тестування поділяється на підвиди:

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

За рівнем знання системи

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

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

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

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

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

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

Цей підхід дозволяє об'єднати переваги обох типів тестування та забезпечити більш повне та всебічне тестування програмного забезпечення.

Під групу "за ступенем знання системи" також підходить ще кілька видів тестування:

  • Тестування з документації (або формальне тестування) — ґрунтується на аналізі документів, створених під час розробки — специфікації, вимоги та дизайн. Тестувальники вивчають ці документи, щоб зрозуміти, як має працювати програмне забезпечення, а потім створюють тестові сценарії та тестові випадки для перевірки відповідності програми цим вимогам та специфікаціям.
  • Інтуїтивне тестування - Виконується на основі інтуїції та досвіду тестувальника, а не за суворим планом тестування.

За часом проведення тестування

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

  1. Альфа-тестування — це етап тестування програмного забезпечення, який відбувається перед його офіційним випуском та передбачає перевірку продукту всередині компанії-розробника або обмеженою групою тестувальників. Альфа-тестування допомагає виявити можливі проблеми та помилки перед наданням продукту користувачеві.
  2. Димове тестування — це швидка перевірка програмного забезпечення, яку виконують після внесення значних змін чи оновлень у код. Цей вид тестування нагадує "пробний запуск" програми, щоб переконатися, що основні функції працюють без критичних помилок.
  3. Якщо після димового тестування продукт додають якусь фічу або просто хочуть переконатися, що всі попередні функції працюють правильно, то проводять регресійне тестування. Тестувальники переконуються, що нова функція працює правильно і виконує свої завдання так, як очікується, а решта не викликає нових помилок.
  4. Приймальне тестування виконують представники замовника, щоби переконатися, що продукт вийшов якісним, і що за нього можна заплатити гроші. Щоб успішно пройти приймальне тестування зазвичай потрібно просто виконати тести, які доводять відповідність програми вимогам.
  5. І останній етап - бета-тестування. Тестувальники надають готову програму обмеженій групі реальних користувачів, які можуть із нею повзаємодіяти. Користувачі виявляють додаткові проблеми, отримати зворотний зв'язок від користувачів та покращити програму перед її остаточним випуском для широкої аудиторії.

Підсумок

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

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

Залежно від того, який продукт потрібно перевірити та які ресурси є, тестувальники використовують різні підходи. Ми розділили види тестування на шість груп:

  1. За характером сценаріїв: тестування позитивних сценаріїв, тестування негативних сценаріїв
  2. За критеріями запуску програми чи коду: статичне тестування, динамічне тестування
  3. За ступенем автоматизації тестуванняКабіна: ручне тестування, автоматизоване тестування.
  4. По об'єктам тестування: функціональне тестування (куди входить unit-тестування, інтеграційне тестування, системне тестування, приймальне тестування та тестування інтерфейсу користувача) та нефункціональне тестування (куди входить тестування навантаження, тестування на проникнення, тестування сумісності, стрес-тестування, тестування на відмовостійкість, тестування ).
  5. За рівнем знання системи: тестування «чорної скриньки», тестування «білої скриньки», тестування «сірої скриньки», тестування документації (або формальне тестування) та інтуїтивне тестування.
  6. За часом проведення тестування: альфа-тестування, димове тестування, регресійне тестування, приймальне тестування, бета-тестування.

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

Познайомтеся із тестуванням безкоштовно

Подібні статті

Останні статті

Категорії