Тестування програм - процес виявлення помилок в програмному продукті
При розробці програмного забезпечення значна частина виробничого процесу спирається на тестування програм. Що це таке і як здійснюється подібна діяльність обговоримо в даній статті.
Що називають тестуванням?
Під цим розуміють процес, під час якого виконується програмне забезпечення з метою виявлення місць некоректного функціонування коду. Для досягнення найкращого результату навмисно конструюються важкі набори вхідних даних. Головна мета перевіряючого полягає в тому, щоб створити оптимальні можливості для відмови програмного продукту. Хоча іноді тестування розробленої програми може бути спрощено до звичайної перевірки працездатності і виконання функцій. Це дозволяє заощадити час, але часто супроводжується ненадійністю програмного забезпечення, невдоволенням користувачів і так далі.
ефективність
Те, наскільки добре і швидко знаходяться помилки, істотно впливає на вартість і тривалість розробки програмного забезпечення необхідної якості. Так, незважаючи на те, що тестери отримують заробітну плату в декілька разів меншу, ніж програмісти, вартість їх послуг зазвичай досягає 30 - 40% від вартості всього проекту. Це відбувається через чисельності особового складу, оскільки шукати помилку - це незвичайний і досить важкий процес. Але навіть якщо програмне забезпечення пройшло солідну кількість тестів, то немає 100% гарантії, що помилок не буде. Просто невідомо, коли вони виявляться. Щоб стимулювати тестерів вибирати типи перевірки, які з більшою ймовірністю знайдуть помилку, застосовуються різні засоби мотивації: як моральні, так і матеріальні.
Підхід до роботи
Відео: Тестування ПЗ. Урок 1. Мета тестування - aim of testing.
Оптимальною є ситуація, коли реалізовуються різні механізми, спрямовані на те, щоб помилок в програмному забезпеченні не було з самого початку. Для цього необхідно потурбуватись про грамотному проектуванні архітектури, чіткому технічному завданні, а також важливо не вносити корективи в зв`язку, коли робота над проектом вже розпочато. В такому випадку перед тестером стоїть завдання знаходження та визначення невеликої кількості помилок, які залишаються в кінцевому результаті. Це заощадить і час, і гроші.
Що таке тест?
Це важливий аспект діяльності перевіряючого, який необхідний для успішного виявлення недоліків програмного коду. Вони необхідні для того, щоб контролювати правильність застосування. Що входить в тест? Він складається їх початкових даних і значень, які повинні вийти як результуючі (або проміжні). Для того щоб успішніше виявляти проблеми і невідповідності, тести необхідно складати після того, як був розроблений алгоритм, але не почалося програмування. Причому бажано використовувати кілька підходів при розрахунку необхідних даних. В такому випадку зростає ймовірність виявлення помилки завдяки тому, що можна досліджувати код з іншої точки зору. Комплексно тести повинні забезпечувати перевірку зовнішніх ефектів готового програмного вироби, а також його алгоритмів роботи. Особливий інтерес надають граничні і вироджені випадки. Так, в практиці діяльності з помилками часто можна виявити, що цикл працює на один раз менше або більше, ніж було заплановано. Також важливим є тестування комп`ютера, завдяки якому можна перевірити відповідність бажаного результату на різних машинах. Це необхідно для того, щоб упевнитися, що програмне забезпечення зможе працювати на всіх ЕОМ. Крім того, тестування комп`ютера, на якому буде виконуватися розробка, є важливим при створенні мультиплатформових розробок.
Мистецтво пошуку помилок
Програми часто націлені на роботу з величезним масивом даних. Невже його необхідно створювати повністю? Ні. Широке поширення набула практика «мініатюризації» програми. В даному випадку відбувається розумне скорочення обсягу даних у порівнянні з тим, що має використовуватися. Давайте розглянемо такий приклад: є програма, в якій створюється матриця розміром 50x50. Іншими словами - необхідно вручну ввести 2500 тисячі значень. Це, звичайно, можливо, але займе дуже багато часу. Але щоб перевірити працездатність, програмний продукт отримує матрицю, розмірність якої становить 5x5. Для цього потрібно буде ввести вже 25 значень. Якщо в даному випадку спостерігається нормальна, безпомилкова робота, то це означає, що все в порядку. Хоча і тут існують підводні камені, які полягають в тому, що при мініатюризації відбувається ситуація, в результаті якої зміни стають неявними і тимчасово зникають. Також дуже рідко, але все ж трапляється і таке, що з`являються нові помилки.
переслідувані цілі
Тестування ПЗ не є легкою справою через те, що даний процес не піддається формалізації в повному обсязі. Великі програми майже ніколи не володіють необхідним точним еталоном. Тому в якості орієнтира використовують ряд непрямих даних, які, правда, не можуть повністю відображати характеристики і функції програмних розробок, що отлаживаются. Причому вони повинні бути підібрані таким чином, щоб правильний результат обчислювався ще до того, як програмний продукт буде тестований. Якщо цього не зробити заздалегідь, то виникає спокуса вважати все приблизно, і якщо машинний результат потрапить в передбачуваний діапазон, то буде прийнято помилкове рішення, що все правильно.
Перевірка в різних умовах
Як правило, тестування програм відбувається в обсягах, які необхідні для мінімальної перевірки функціональності в обмежених межах. Діяльність ведеться зі зміною параметрів, а також умов їх роботи. Процес тестування можна поділити на три етапи:
- Перевірка в звичайних умовах. В даному випадку тестується основний функціонал розробленого програмного забезпечення. Отриманий результат повинен відповідати очікуваному.
- Перевірка в надзвичайних умовах. У цих випадках мається на увазі отримання граничних даних, які можуть негативно вплинути на працездатність створеного програмного забезпечення. Як приклад можна привести роботу з надзвичайно великими чи малими числами, або взагалі, повна відсутність одержуваної інформації.
- Перевірка при виняткових ситуаціях. Вона передбачає використання даних, які лежать за гранню обробки. У таких ситуаціях дуже погано, коли програмне забезпечення сприймає їх як придатні до розрахунку і видає правдоподібний результат. Необхідно подбати, щоб у подібних випадках відбувалося відкидання будь-яких даних, які не можуть бути коректно оброблені. Також необхідно передбачити інформування про це користувача
Тестування ПЗ: види
Відео: Типовий процес розробки по Kanban
Створювати програмне забезпечення без помилок вельми важко. Це вимагає значної кількості часу. Щоб отримати хороший продукт часто застосовуються два види тестування: «Альфа» і «Бета». Що вони собою являють? Коли говорять про альфа-тестування, то під ним розуміють перевірку, яку проводить сам штат розробників в «лабораторних» умовах. Це останній етап перевірки перед тим, як програма буде передана кінцевим користувачам. Тому розробники намагаються розвернутися по максимуму. Для легкості роботи дані можуть протоколюватися, щоб створювати хронологію проблем і їх усунення. Під бета-тестуванням розуміють поставку програмного забезпечення обмеженому колу користувачів, щоб вони змогли поексплуатувати програму і виявити пропущені помилки. Особливістю в даному випадку є те, що часто ПО використовується не за своїм цільовим призначенням. Завдяки цьому несправності будуть виявлятися там, де раніше нічого не було помічено. Це цілком нормально і переживати з цього приводу не потрібно.
завершення тестування
Якщо попередні етапи були успішно завершені, то залишається провести приймальний тест. Він в даному випадку ставати простою формальністю. Під час даної перевірки відбувається підтвердження, що ніяких додаткових проблем не знайдено і програмне забезпечення можна випускати на ринок. Чим більшу важливість матиме кінцевий результат, тим уважніше повинна проводитися перевірка. Необхідно стежити за тим, щоб всі етапи були пройдені успішно. Ось так виглядає процес тестування в цілому. А тепер давайте заглибимося в технічні деталі і поговоримо про таких корисних інструментах, як тестові програми. Що вони собою являють і в яких випадках використовуються?
Автоматизоване тестування
Раніше вважалося, що динамічний аналіз розробленого ПО - це занадто важкий підхід, який неефективно використовувати для виявлення дефектів. Але через збільшення складності та обсягу програм з`явився протилежний погляд. Автоматичне тестування застосовується там, де найважливішими пріоритетами є працездатність і безпеку. І вони повинні бути за будь-яких вхідних даних. Як приклад програм, для яких доцільним є таке тестування, можна навести такі: мережеві протоколи, веб-сервер, sandboxing. Ми далі розглянемо кілька зразків, які можна використовувати для такої діяльності. Якщо цікавлять безкоштовні програми тестування, то серед них якісні знайти досить складно. Але існують зламані «піратські» версії добре зарекомендували себе проектів, тому можна звернутися до їхніх послуг.
Avalanche
Цей інструмент допомагає виявити дефекти, проходячи тестування програм в режимі динамічного аналізу. Він збирає дані і аналізує трасу виконання розробленого об`єкта. Тестеру ж надається набір вхідних даних, які викликають помилку або обходять набір наявних обмежень. Завдяки наявності хорошого алгоритму перевірки розробляється велика кількість можливих ситуацій. Програма отримує різні набори вхідних даних, які дозволяють змоделювати значне число ситуацій і створити такі умови, коли найбільш вірогідним є виникнення збою. Важливою перевагою програми вважається застосування евристичної метрики. Якщо є проблема, то помилка програми знаходиться з високою ймовірністю. Але ця програма має обмеження на зразок перевірки тільки одного позначеного вхідного сокета або файлу. При проведенні такої операції, як тестування програм, міститиметься детальна інформація про наявність проблем з нульовими покажчиками, нескінченними циклами, некоректними адресами або несправностями через використання бібліотек. Звичайно, це не повний список виявлених помилок, а тільки їх поширені приклади. Виправляти недоліки, на жаль, доведеться розробникам - автоматичні засоби для цих цілей не підходять.
Відео: Наталія руколи. Як осягнути неосяжне, або поради з тестування
KLEE
Відео: Система моніторингу Zabbix в процесах розробки та тестування
Це хороша програма для тестування пам`яті. Вона може перехоплювати приблизно 50 системних викликів і велика кількість віртуальних процесів, таким чином, виконується паралельно і окремо. Але в цілому програма не шукає окремі підозрілі місця, а обробляє максимально можливу кількість коду і проводить аналіз використовуваних шляхів передачі даних. Через це час тестування програми залежить від розміру об`єкта. При перевірці ставка зроблена на символічні процеси. Вони є одним з можливих шляхів виконання завдань в програмі, яка перевіряється. Завдяки паралельну роботу можна аналізувати велику кількість варіантів роботи досліджуваного додатки. Для кожного шляху після закінчення його тестування зберігаються набори вхідних даних, з яких починалася перевірка. Слід зазначити, що тестування програм за допомогою KLEE допомагає виявляти велику кількість відхилень, яких не повинно бути. Вона може знайти проблеми навіть в додатках, які розробляються десятиліттями.