1. Види тестування

Функціональне тестування Нефункціональне тестування Тестування змін 2. Рівні тестування 3. Технології тестування Тестування програми як "білої скриньки" та "чорної скриньки" Тестування нефункціональних параметрів програми 4. Інструменти для зняття скріншотів Для Windows Для Mac Сторонні програми скріншотери: Теорія тестування, частина 1 (підхід, технології, рівні)

План

1. Види тестування. 2. Рівні тестування 3. Технології тестування. 4. Підходи до тестування. 5. Інструменти для зняття скріншотів. Відмінність завдань тестування призводить до необхідності використовувати різноманітні типи (види) тестування. Прийнято поділяти тестування на види за такими категоріями: за об'єктами (елементами) тестування, часто поділ на види тестів за цим критерієм називають поділом тестування на рівні; по глибині тестування, тобто поділ тестових випробувань на типи проводиться залежно від кількості часу та обсягу компонентів програмного продукту, що тестуються. Тим не менш, основна класифікація тестів на види проводиться у відповідність до традиційних показників якості, які перевіряються за їх допомогою.

1. Види тестування

Усі види тестування програмного забезпечення, залежно від цілей, можна умовно розділити на такі групи: Функціональні Нефункціональні Пов'язані зі змінами Функціональне тестування Це перевірка, наскільки успішно працює ПЗ та виконує всі ті функції, які були закладені в нього розробником і за які власне платить користувач. Навіть якщо в обговоренні функціонального набору з користувачем, певні функції клієнт не врахував, розробник зобов'язаний врахувати їх, якщо вони відповідають тому ПЗ, яке придбав замовник. А тестувальник, в свою чергу, зобов'язаний ці функції перевірити на наявність багів та дати на виправлення останні. Найпоширенішими видами функціональних тестів є: Функціональне тестування (Functional testing) Тестування безпеки (Security and Access Control Testing) Тестування взаємодії (Interoperability Testing) Нефункціональне тестування В основі - перевірка відповідності властивостей додатку його нефункціональним вимогам. Відповідно цей вид тестування передбачає перевірку властивостей, які напряму не відносяться до функціональності системи, але складають її додаткову вигоду. Нефункціональне тестування передбачає перевірку зокрема надійності, продуктивності, зручності та безпеки програмного забезпечення.

Основними видами нефункціональних тестів є:

Усі види тестування продуктивності: навантажувальне тестування (Performance and Load Testing) стресове тестування (Stress Testing) тестування стабільності чи надійності (Stability / Reliability Testing) об'ємне тестування (Volume Testing) Тестування установки (Installation testing) Тестування зручності користування (Usability Testing) Тестування на відмову та відновлення (Failover and Recovery Testing) Конфігураційне тестування (Configuration Testing) Тестування змін Цей вид тестування передбачає перевірку змін у ПЗ після виявлення та усунення багів, будь-яких змін в технічному середовищі чи банально - в замовленні користувача.

Тестування змін складається з п'яти основних підвидів:

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

Проводити класифікацію видів тестування, також прийнято за такими ознаками: За знанням системи (доступності коду): Тестування чорної скриньки (black box). Тестування проводиться без доступу до вихідного коду; Тестування білої скриньки (white box). Тестування проводиться з доступом до вихідного коду та з можливістю модифікації коду; Тестування сірої скриньки (grey box). Є об'єднання двох вище перерахованих видів тестування. Розробник тестів має доступ до вихідного коду, але при безпосередньому виконанні тестів доступ до коду зазвичай не потрібен.

По об'єкту тестування: функціональне тестування (functional testing). Перевірка функцій та характеристик ПЗ, що розробляється на основі проектної документації; Тестування продуктивності (performance testing). Перевіряє працездатність системи під навантаженням. Може служити для перевірки та підтвердження інших атрибутів якості системи, таких як масштабованість, надійність та споживання ресурсів.

Виділяються такі підвиди: навантажувальне тестування (load testing), стрес-тестування (stress testing), тестування стабільності (stability testing); Юзабіліті-тестування (usability testing). Мета даного виду тестування полягає у визначенні ступеня зручності та практичності користувальницького інтерфейсу; Тестування безпеки (Security Testing). Перевірка надійності системи від можливих ризиків та загроз (втрата, конфіденційність, цілісність та доступність даних);

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

Тестування сумісності (compatibility testing) Перевірка можливості програми взаємодіяти з різними програмними продуктами, операційними системами та оточенням. За ступенем автоматизації:

Ручне тестування (manual testing). Тестування проводиться без інструментів автоматизації;

Автоматизоване тестування (Automated Testing). Тестування всіх рівнях виконується з допомогою засобів автоматизації;

Напівавтоматизоване тестування (semiautomated testing).

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

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

Альфа-тестування. Внутрішнє тестування (імітація реальної роботи із системою штатними розробниками).

Бета-тестування. Зовнішнє пробне використання із залученням відібраних користувачів.

Димове тестування (smoke testing). Мінімальний набір тестів на очевидні помилки;

Тестування нової функціональності (New Feature Testing). Тестуються нові функції системи;

Регресійне тестування (regression testing). Перевірка змін зроблених у системі для підтвердження того факту, що існуюча раніше функціональність працює як і раніше;

Приймальне тестування (acceptance testing). Метою приймального тестування є оцінка готовності системи щодо його випуску ринку чи передачі клієнту. Може включати альфа-тестування (alpha testing) і бета-тестування (beta testing).

За ознакою позитивності сценаріїв: Позитивне тестування (positive testing). Перевірка позитивних (правильних) сценаріїв користувача. На вхід подається дозволені (очікувані) дані;

Негативне тестування (negative testing). Перевіряє реакцію системи на введення негативних (не дозволених) даних.

За ступенем підготовленості до тестування: Тестування з документації (formal testing). Тестування програми проводиться за заздалегідь підготовленими даними (тест-кейси, чек-листи, специфікація і т.д.)

Тестування ad hoc або інтуїтивне тестування (ad hoc testing) - тестування проводиться за повної відсутності документації, без плану та мети;

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

Далі ми розглянемо докладніше один із видів тестування, а саме функціональне тестування. Це основний вид тестування, спрямований на перевірку всіх вимог, тому ми розглянемо його першим. У наступних уроках детально розглядатимемо інші види тестування.

Функціональне тестування - це вид тестування, при якому виявляється некоректна / неправильна робота функціонала програми. Цей вид тестування займає 90% часу, відведеного на тестування.

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

Повноцінне системне/функціональне тестування є трудомістким процесом і може займати до 80% всього бюджету проекту з тестування. (Ф.Брукс)

Тестування функціональності може проводитись у двох аспектах:

вимоги

бізнес-процеси.

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

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

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

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

Інтеграційне тестування (Integration testing) - тестуються інтерфейси між компонентами, підсистемами чи системами. За наявності резерву часу цієї стадії тестування ведеться ітераційно, з поступовим підключенням наступних підсистем.

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

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

Рішення про проведення приймального тестування приймається, коли: продукт досягнув необхідного рівня якості; замовник ознайомлений із Планом Приймальних Робот (Product Acceptance Plan) або іншим документом, де описано набір дій, пов'язаних із проведенням приймального тестування, дата проведення, відповідальні. Фаза приймального тестування триває доти, доки замовник не виносить рішення про відправлення програми на доопрацювання або видачу програми.

3. Технології тестування Технологій тестування існує безліч. Умовно їх можна віднести до статичних чи динамічних.

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

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

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

Серед методів тестування зазвичай виділяють кілька найпоширеніших: метод "чорної скриньки" (Black box testing) метод "білої скриньки" (White box або «glass-box» testing) метод "сірої скриньки" (Grey box) Тестування нефункціональних аспектів програми Тестування програми як "білої скриньки" та "чорної скриньки" У термінології професіоналів тестування (програмного та деякого апаратного забезпечення) фрази "тестування білої скриньки" і "тестування чорної скриньки" відносяться до того, чи має розробник тестів і тестувальник доступ до вихідного коду ПЗ, що тестується, або ж тестування виконується через інтерфейс користувача або прикладний програмний інтерфейс, наданий модулем, що тестується.

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

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

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

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

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

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

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

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

Тестування якості інтернаціоналізації та локалізації програмного забезпечення. Користуватися цими методами можна і потрібно щоб отримати якісний продукт. 4. Інструменти для зняття скріншотів Під час проведення різних видів тестування Вам необхідно буде фіксувати всі знайдені дефекти та бажано робити сриншоти або записувати дефекти на відео. Інструментів для зняття скріншотів і запису відео безліч. Розглянемо деякі з них: Для Windows На комп'ютері: натисніть "Print Screen". (весь екран у буфері обміну) На ноутбуці: одночасно натисніть клавішу "Fn" і "Print Screen". (весь екран у буфері обміну) Print Screen+Alt (весь екран у буфері обміну) "Windows"+"Shift"+"S" (виділення та збереженняфрагментів екрана у буфері обміну) Для Mac Command+Shift+3 (весь екран у файл на робочому столі) Command+Shift+4 (виділена область у файл) Command+Shift+4+пробіл ( вікно програми у файл) Сторонні програми скріншотери: Snagit VideoProc Камтасія Інструмент для відсікання Рекордер екрану FastStone Capture Цзин Скітч Greenshot TinyTake Світловий постріл Скрінпресо Знімок екрана Captor SnapDraw Gadwin PrintScreen Steam PicPick SnapCrab