Питання #1 Види тестування?

Існує кілька ознак, за якими класифікують тестування програмного забезпечення на види тестування. Згідно книги Тестування. Основні визначення. Дідковської. Методичний посібник КПІ.

За об’єктом тестування виділяють наступні види тестування ПЗ:

  • функціональне тестування (functional testing);
  • дослідницьке тестування (exploratory testing);
  • тестування продуктивності (performance testing);
  • навантажувальне тестування (load testing);
  • димне тестування (smoke testing);
  • стрес-тестування (stress testing);
  • тестування стабільності (stability / endurance / soak testing);
  • тестування зручності використання (usability testing);
  • тестування інтерфейсу користувача (ui testing);
  • тестування безпеки (security testing);
  • тестування локалізації (localization testing);
  • тестування сумісності (compatibility testing).

У залежності від переслідуваних цілей види тестування можна умовно розділити на наступні типи:

  • функціональне тестування (functional);
  • нефункціональне тестування (non-functional);
  • тестування пов’язане зі змінами.

За знанням системи:

  • тестування чорного ящика (black box);
  • тестування білого ящика (white box);
  • тестування сірого ящика (gray box).

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

  • ручне тестування (manual testing);
  • автоматизоване тестування (automated testing);
  • напівавтоматизоване тестування (semiautomated testing).

За ступенем ізольованості компонентів:

  • компонентне (модульне) тестування (component / unit testing);
  • інтеграційне тестування (integration testing);
  • системне тестування (system / end-to-end testing).

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

  • Альфа-тестування (alpha testing):
  • тестування нової функціональності (new feature testing);
  • регресійне тестування (regression testing);
  • тестування при здачі (acceptance testing);
  • Бета-тестування (beta testing).

За ознакою позитивності сценаріїв:

  • позитивне тестування (positive testing);
  • негативне тестування (negative testing).

За ступенем підготовленості до тестування:

  • тестування за документацією (formal testing);
  • Ad Hoc Testing (інтуїтивне) тестування (ad hoc testing). 

Щоб простіше було розставити усі ці види тестування «по поличках» у мізках, та розуміти що потрібно робити і тестувати на проекті? Вкотре дублюємо приклад із видами тестування від пана Портнова:

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

  • Коли відбувається тестування? Фази тестування.
  • Що є те що ми тестуємо. Предмет тестування.
  • Як тестувати? Як вибирати тести? Тест дизайн.
  • Які Якості системи ми хочемо перевірити? Мета тестування.
  • Де тестувати? Тестове середовище.
Типи Тестування
Майнд мап Види Тестування Програмного Забезпечення структуровано

Сама Testing Types майд мапа у великому зручному форматі знаходиться за цим посиланням.

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

Питання #2 Що таке Функціональне тестування?

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

Функціональні тести можуть проводитися на усіх рівнях тестування (компонентному, інтеграційному, системному, приймальному). Як ми вже вище згадували, як правило, ці функції описуються в вимогах, функціональних специфікаціях або у вигляді випадків використання системи (Use case).

Питання #3 Нефункціональне тестування і які типи нефункціонального тестування знаєте?

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

Питання #4 Що таке тестування сценаріїв?

Scenario testing (Тестування сценаріїв) — це тип тестування, в якому тестування складних тестових потоків спрощується шляхом розбиття на частини (сценарії, потоки, flow). Такий підхід допомагає перевірити програму від початку до кінця (end-to-end).

Питання #5 За ступенем автоматизації, які види тестування назвете?

На основі методу тестового виконання: ручний або автоматизований види тестування.

Ручне тестування — ручне тестування є типом тестування, в якому тестовий випадок виконується вручну людиною.

Автоматизоване тестування. Тестування автоматизації — це тип тестування, в якому тестування виконується з використанням різних інструментів автоматизації та скриптів.

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

Питання #6 Які переваги автоматизованого тестування?

  1. Налаштоване Автоматизоване Тестування відбувається швидко і заощаджує значну кількість часу.
  2. Ретельно написані сценарії тестування виключають можливості виникнення помилок під час процесу тестування. Окрім того автоматизоване тестування позбавляє тест-інженера від рутини, на тих ділянках роботи, де люди втомлюються та роблять від цього помилки.
  3. Випробування можуть бути заплановані на вечір за допомогою інструментів CI, таких як Jenkins, які також можуть бути налаштовані на надання щоденних результатів тестів відповідним зацікавленим сторонам.
  4. Автоматизоване тестування є набагато менш ресурсомістким. Після того, як тести автоматизовані, виконання тестування майже не вимагає часу QA engineer. Тим самим у QA -ів звільняється більше часу на інші завдання.

Питання #7 Які є недоліки автоматизованого тестування?

  1. Вимагає наявність у компанії кваліфікованих QA engineer із автоматизації тестування — інколи це є дороге задоволення.
  2. Щоб стартувати із автоматизованим тестуванням відразу потрібно докласти додаткові зусилля для написання тестових автоматизованих скриптів, так званих фреймворків.
  3. Тестування є обмеженим покриттям, яке передбачають пройти своїм кодом автоматизовані скрипти. Ці тести можуть пропустити деякі помилки, які легко будуть ідентифіковані людиню (QA engineer). Окрім того у автоматизованих скриптів, як у будь-якої машини не має почуття прекрасного, поєднання кольорів, відчуття балансі і комфорту.
  4. Навіть із деякими незначними змінами у програмному забезпеченні, необхідне постійне оновлення та підтримка працездатності автоматизованих сценаріїв (фреймворків).

Більш детальніше про ключові аспекти Автоматизованого Тестування, пропонуємо дізнатися у статті: Автоматизоване тестування WEB-додатків – ключові поняття

Курси Автоматизованого Тестування QualityAssuranceGroup пропонує на Java та  Python мовах програмуванняКурси ІТ.

Питання #8 Що таке тестування на основі досвіду?

Experience based testing (Тестування на основі досвіду) — це коли тестові методи  та техніки тестування програмного забезпечення повністю базуються на досвіді або інтуїції тестера. Дві найбільш поширені форми тестування на основі досвіду — Ad-hoc тестування та Exploratory testing.

Питання #9 Що таке Ad-Hoc тестування?

Ad-Hoc Testing — це вид неформального, імпровізованого тестування програмного забезпеченя. Синонімами Ad-Hoc тестування є довільне та інтуїтивне тестування.

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

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

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

Найчастіше Ad-Hoc тестування виконується коли власник не оперує конкретними цілями, потребами, вимогами до свого програмного продукту. Звісно у нього не має навіть натяку на щось подібне до проектної документації.

Питання #10 Що таке Exploratory Testing?

Exploratory testing або дослідницьке тестуванняце одночасне вивчення програмного продукту, проектування тестів і їх виконання.

Згідно ISTQB по Джеймсу Баху дослідницьке тестування — це спосіб проектування тестів, при якому тестувальник активно контролює проектування тестів в той час, як ці тести виконуються, і використовує отриману під час тестування інформацію для для проектування нових наступних і поліпшених тестів.

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

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

Тест — це те, що дає нову інформацію про програму. Один той самий тест виконаний двічі вже не можна назвати тестом, скоріше за все це вже буде перевірка. [Джеймс Бах]

Питання #11 Яка різниця між Exploratory та Ad-Hoc Testing?

Різниця між Ad-Hoc і Exploratory Testing в тому, що теоретично, Ad-Hoc тестування може провести будь-хто, а для проведення Exploratory тестування необхідна фахова майстерність і володіння певними техніками тестування.

Питання #12 Що таке Monkey тестування?

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

Головна мета Monkey Testing якомога швидше, використовуючи різні варіації вхідних даних, порушити роботу системи або викликати її зупинку «crash» (простими словами — зламати). Наприклад, мавпячий тест може вводити довільні рядки в поля вводу, імітувати одночасне натискання по кнопках, хаотичні скроли тощо.

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

Питання #13 Яка різниця між Monkey та Ad-Hoc тестуванням?

У разі проведення Ad-Hoc тестування, хоча й немає заздалегідь визначених або документально підтверджених тестів, тестувальники мають мати деяке розуміння програми. У разі Monkey тестування мавпи випробувачі не повинні мати ніякого розуміння програми.

Питання #14 Що таке тестування Горили?

Gorilla Testing — це тестування окремих модулів або функціональних можливостей програми, щоб перевірити їх надійність. Не має жодного зв’язку із Monkey Testing. Мається на увазі що горила — важка тварина і може щось зламати за 1 підхід. Цей тип тестування перейшов у тестування ПЗ з виробництва електроніки та перевірки її якості.

Питання #15 Що таке Fuzz Testing (Fuzzing)?

Fuzz testing — це метод «грубої сили» від білих хакерів. Попередник Автоматизованого Тестування та Тестування Безпеки. Суть Fuzz testing надзвичайно проста, полягає в тому що на вхід програми надсилаються масиви випадкових, не валідних і не очікуваних даних — які називаються Fuzz (Фаззери) з метою взлому, падіння, зависання, порушення внутрішньої логіки і перевірок в коді програми, витоку пам’яті.

При цьому про внутрішній устрій програми тестувальнику нічого не відомо. Для цього фреймворки фаззерів, наприклад Sulley (фреймворк для створення складних структур даних) перебирає астрономічну кількість варіантів комбінацій (як неважко здогадатися, повний перебір зростає експоненціально від розміру вхідних даних O (c  n), c> 1).

Fuzz testing хороший спосіб перевірити систему, перестрахуватися і виявити у ній слабкі місця до атак вірусів, троянів, шкідливих програм, Dos-атак, SQL injection, Тестування Безпеки взагалом.

Оу, лежить серце до такого виду тестування? — на цей випадок у нас є цікава хакерська  книжечка в бібліотеці FUZZING, ИССЛЕДОВАНИЕ УЯЗВИМОСТЕЙ МЕТОДОМ ГРУБОЙ СИЛЫ”

Питання # 16 Що таке Performance Testing?

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

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

Питання # 17 Що таке Load Testing?

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

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

Питання # 18  Відмінності між Load and Performance testing?

Існують думки у мережі, що цього типу тестування виділяти не слід, бо бачите це «дубль» самого Performance Testing. Але у нас дещо інша думка стосовно Load Testing.

Тестування продуктивності  це більш комплексне поняття. Коли ми говоримо про Performance Testing, то ми маємо наувазі перевірку системи за різних умов: нормальних показниках, максимальному навантаженні згідно документації та гітотечичних (стресових) умов.

Тестування навантаження (Load Testing) виконується тільки для нормальних умов!!!

Питання # 19 Що таке Stress Testing?

Stress Testing  це також один із типів Performance Testing. Стрес-тестування передбачає тестування продуктивності, шляхом збільшення робочого навантаження на програму більше ніж очікується створення штучного контрольованого стресу для неї 😆 Стрес-тестування проводиться для виявлення витоків пам’яті та перевірки надійності програми.

Питання # 20 Що таке Volume Testing?

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

Питання # 21 Що таке Reliability Testing?

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

Питання # 22 Що таке Soak Testing?

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

Endurance Testing, Stability Testing   синоніми до Soak Testing.

Питання #23 Що таке Spike Testing?

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

Питання #24 Що таке Usability Testing?

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

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

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

Користуючись нагодою, рекомендуємо до прочитання ще одну книгу: Дизайн привычных вещей, Дональд Норман

Питання #25 Що таке UI Testing?

Інтерфейс користувача це зовнішній вигляд програми. А як відомо зустрічають по «одежі». Отже, UI Testing (Тестування інтерфейсу) це вид тестування, який має на меті знайти дефекти графічного інтерфейсу користувача та перевіряти, чи відповідає GUI специфікаціям. 

UI Testing (Тестування користувацького) інтерфейсу включає в себе:

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

Питання #26 Що таке Accessibility Testing?

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

Питання #27 Що таке тестування сумісності?

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

Наприклад:

  • Мережевими пристроями;
  • Периферія (принтери, мишка, USB, веб-камери);
  • Операційними системами (Unix, Windows, MacOS, …);
  • Бази даних (Oracle, MS SQL, MySQL, …);
  • Системним програмним забезпеченням (веб-сервер, файрволл, антивірус, …);
  • Браузерами (Internet Explorer, Firefox, Opera, Chrome, Safari).

Питання #28 Що таке тестування конфігурації?

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

Питання #29 Що таке тестування локалізації?

Тестування локалізації  це тестування за яким ми оцінюємо налаштування програми (локалізовану версію програми) на певній мові. Наприклад, чи правильно зроблений переклад?«Кракозябри» не з’являються? Стандарт мови правильно увімкнули? Для кирилиці UTF-8.

Питання #30 Що таке тестування глобалізації?

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

Питання #31 Що таке Rapid Testing або негативне тестування?

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

З цією метою тестер застосовує спроби виконання програми:

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

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

Питання #32 Що тке Happy path testing?

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

Питання #33 Що таке A / B Testing?

A / B Testing  вид тестування в якому два варіанти програмного продукту піддаються впливу кінцевих користувачів а потім аналізується поведінка користувачів у кожному варіанті, і по результатах вибирається та використовується кращий варіант. Хороший інструмент для моніторингу A / B Testing в режимі реального часу однойменний вбудований інструмент в Google Аналітиці. 

Split testing — те саме що A / B testing.

Питання #34 Що таке тест на паралелі?

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

Питання #35 Що таке All pair Testing?

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

Питання #36 Що таке Failover Testing?

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

Питання #37 Що таке Robustness Testing?

Robustness Testing (Тестування на правильність) — це тип тестування, який виконується для визначення надійності програми, тобто здатності системи граціозно поводитися у випадку помилкових стадій випробувань та тестового введення. Це так як прощатися не по Англійськи, а по Французьки 🙂 Якщо програма видає відмову або помилку, вона повинна поводити себе логічно і надавати відповідне повідомлення чи пояснення причини завершення роботи.

Продовження: Види тестування — Super-puper шпаргалка тестувальнику на співбесіду (Частина 5)

Related posts

2 коментарі

Leave a Comment

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.