Під час технічного прогресу вже неможливо зберігати інформацію в паперових папках на столах або книжкових полицях. Для цього буде потрібно занадто багато паперу (привіт тропічним лісам) і величезні площі приміщень для зберігання цього самого паперу. На заміну такого способу зберігання інформації прийшли дата центри з жорсткими дисками і були винайдені бази даних, де масиви інформації зберігаються, обробляються і структуруються.
Тестування баз даних: на що звернути увагу?
- 30.04.2020
- Опубліковано: Admin

Бази даних
Бази даних (БД) – це структура для зберігання, організації та обміну великої кількості даних. БД використовуються повсюдно в різних сферах діяльності: від інтернет-магазинів і до Центру управління польотами NASA. Для створення, використання і управління базами даних було винайдено цілий комплекс програм і засобів, який називається системою управління базами даних (СУБД).
СУБД – це сукупність програм, які використовуються для створення, відображення, наповнення, редагування, оновлення та видалення інформації. Найбільш популярними СУБД є – Oracle, MySQL, Microsoft SQL Server, PostgreSQL, MongoDB і багато інших.
Для кожної системи, яка впроваджується в продукт, потрібно провести ряд тестів, щоб мінімізувати майбутні проблеми при використанні. У програмних продуктах дані передаються від користувача до внутрішньої бази даних і навпаки. Тестування бази даних полягає в перевірці продуктивності, пов'язаної з базою даних, а також в перевірці надійності і цілісності даних.
Деякі аспекти під час тестування баз даних
Нижче розглянемо деякі аспекти, на які потрібно звернути увагу під час тестування:
1. Відображення даних.
Тестувальник перевіряє співставленість полів у формах користувацького інтерфейсу з аналогічними полями в таблиці БД. Зазвичай ця інформація задається в специфікації.
2. Оновлення записів в таблиці.
Кожен раз, коли певна дія виконується в зовнішньому інтерфейсі додатка, відповідна дія викликається у внутрішньому інтерфейсі. Для перевірки оновлення записів в таблиці тестувальнику можна керуватися мнемонікою CRUD.
C (Create) – коли користувач зберігає будь-яку нову транзакцію, виконується операція «INSERT».
R (Read) – коли користувач переглядає або виконує пошук будь-якої збереженої транзакції, виконується операція «SELECT».
U (Update) – коли користувач редагує існуючий запис, в БД виконується операція «UPDATE».
D (Delete) – коли користувач видаляє будь-який запис з системи, в БД виконується операція «DELETE».
3. Перевірка властивостей ACID транзакцій.
Кожна транзакція, яку виконує БД, повинна відповідати цим чотирьом властивостям: атомарності, послідовності, ізоляції та міцності.
A (Atomicity) – в разі збою однієї частини транзакції це означає, що вся транзакція не вдалася. Зазвичай це називається правилом «Все або нічого».
C (Consistency) – зберігаються тільки валідні дані, тобто транзакція завжди повинна приводити до правильного стану БД.
I (Isolation) – якщо існує кілька транзакцій і вони виконуються одночасно, результат і стан БД повинні бути такими ж, як і в разі, якщо б транзакції виконувалися одна за одною.
D (Durability) – після того, як транзакція виконана і зафіксована, ніякі зовнішні чинники, такі як втрата потужності або збій, не зможуть її змінити.
4. Цілісність даних.
Всі дані, а також їх зміни повинні відображатися всюди однаково та в зрозумілій формі. Необхідно перевірити, щоб система показувала останні зміни в таблицях однаково в усіх місцях, де вони з'являються, щоб переконатися, що вони всюди однакові.
5. Відповідність бізнес правилам.
Бази даних використовуються не тільки для зберігання даних, також вони перетворилися в дуже потужні інструменти для розробників. Велика складність в базах даних означає використання більш складних компонентів, таких як реляційні обмеження, тригери, збережені процедури і тощо. Таким чином, тестувальникам необхідно придумувати відповідні SQL-запити для перевірки цих складних об'єктів.
Основні атрибути тестування баз даних
Транзакції – це послідовність певних дій з базою даних, в якій всі дії виконуються успішно або не виконується жодна з них. Транзакція є атомарною і виконується як єдине ціле.
Схема бази даних – це структура організації даних, опис таблиць і колонок (їх типи, допустимі значення, зв'язки між таблицями і т.д.).
Тригер – це зберігаюча процедура особливого типу, яка автоматично виконується після певних дій по модифікації даних. Наприклад: додавання, видалення рядка або зміна даних у певному стовпці заданої таблиці реляційної бази даних. Тригери застосовуються для забезпечення цілісності даних і реалізації складної бізнес-логіки.
Процедури – це набір операторів або функцій, керуючих транзакціями в базі даних.
Основні типи тестування бази даних
Тестування БД можна розділити на три типи залежно від функції і структури бази даних:
- Структурне тестування бази даних – включає тестування таблиць, стовпців, схем баз даних, а також перевірку збережених процедур і тригерів.
- Функціональне тестування бази даних – це тестування працездатності бази даних з точки зору користувача. Виділяють два відомих типи функціонального тестування – тестування білого і чорного ящика.
- Нефункціональне тестування бази даних – охоплює тестування продуктивності бази даних, тестування навантаження, тестування ризиків в базі даних, стрес-тестування, а також аналіз мінімальних системних вимог.
Тестування схем баз даних охоплює перевірку і порівняння об'єктів програми та бази даних, використовуючи спеціальні інструменти. Написати прості запити для перевірки схем в базі даних можна за допомогою Microsoft SQL Server.
Тестування таблиць і стовпців охоплює наступні області тестування:
- перевіряються типи даних в БД за значеннями полів в програмному продукті;
- перевіряється довжина поля даних в базі даних по довжині типів даних в програмному продукті;
- перевіряються невідображені таблиці і стовпчики в БД, які присутні в програмному продукті;
- перевіряються на відповідність імена таблиць і стовпців бази даних бізнес-вимогам;
- перевіряються на відповідність ключі та індекси в БД бізнес-вимогам.
Тестування збережених процедур охоплює перевірку таких процедур і порівняння результатів виведення виконання команди. Дане тестування може проводитися такими інструментами: LINQ, SP Test tool і т.д. Для перевірки збережених процедур потрібно виконати наступні кроки:
- перевірити назву процедури, імена і типи параметрів;
- перевірити сигнал на виході – чи виконується виведення нульових рядків або відображаються тільки декілька записів;
- перевірити функцію збереженої процедури;
- перевірити передачу вхідних запитів для перевірки зберігання потрібних даних;
- перевірити виведення помилок при кожному неправильному використанні запиту.
Для перевірки тригерів тестувальника необхідно виконати такі дії:
- перевірити справжність імені тригера і його оновлень;
- запустити тригер з оновленими даними;
- перевірити такі функції як оновлення, вставка, видалення тригерів;
- запустити тригер з неправдивими даними та перевірити кожну помилку;
- виконати відкат транзакцій в разі виникнення збою.
Тестування продуктивності – це важливий етап при роботі з базами даних, метою якого є визначення працездатності програмного продукту під навантаженням. Нікому не сподобається система, яка обробляє не найбільший запит за час випитої чашки кави.
Для виконання даного типу тестування необхідно:
- зробити заміри термінів виконання операцій при певних (максимальних, мінімальних і середніх) навантаженнях;
- визначити кількість користувачів, які одночасно можуть працювати з продуктом;
- визначити межі прийнятної продуктивності при збільшенні навантаження;
- досліджувати продуктивність при великих, максимальних і стресових навантаженнях.
Найбільш важливими властивостями вимірювання продуктивності є:
- кількість транзакцій за певний період;
- кількість операцій за певний період;
- кількість прочитаних рядків в таблиці на одну транзакцію;
- середня кількість операцій сортування.
Стрес-тестування допомагає визначити наскільки система працездатна в умовах стресу, а також дозволяє оцінити здатність системи до відновлення, тобто повернення до звичайного стану після закінчення впливу стресу. Стресом може бути підвищення інтенсивності виконання операцій до дуже високих значень або аварійна зміна конфігурації сервера.
Для виконання стрес-тестування необхідно керуватися такими вказівками:
- написати тестові скрипти, для того щоб перевірити функцію хоча б один раз в повному обсязі;
- запускати ці скрипти протягом певного часу;
- перевіряти файл журналів на наявність збоїв або помилок.
Тестування навантаження проводять, використовуючи спеціальні інструменти, наприклад: Apache JMeter або HP LoadRunner. Вони дозволяють створювати велику кількість запитів за допомогою декількох комп'ютерів. У них реалізовані механізми авторизації віртуальних користувачів, підтримуються призначені для користувача сеанси, логування результатів тесту, різноманітна візуалізація результатів у вигляді діаграм і таблиць. За допомогою проксі-сервера імітується робота реального сервера.
Після формування необхідних запитів в інструментах навантажувального тестування задається число віртуальних користувачів, що виконують ці запити на певному проміжку часу. Система моніторингу дозволяє спостерігати за тим, в який момент часу і при якій кількості віртуальних користувачів сервер починає займати додаткові ресурси.
Функціональне тестування – перевіряється функціональність БД з боку користувача. Необхідно перевірити, щоб всі транзакції і операції, які здійснює користувач, відповідали технічним вимогам. Виділяють два типи перевірки функціональності баз даних – тестування чорного і білого ящика.
Тестування чорного ящика охоплює перевірку інтеграції бази даних для перевірки функціональності. Тест-кейси для перевірки прості і використовуються для тестування вхідних і вихідних даних з функції. Для перевірки функціональності бази даних використовуються різні методи, такі як метод побудови причинно-наслідкових зв'язків, розподіл по еквівалентності і аналіз граничних значень.
Тестування білого ящика має на увазі перевірку внутрішньої структури бази даних, користувач не знає деталей специфікації. White Box Testing виконує модульне тестування функцій бази даних, тригерів, уявлень, SQL-запитів. На даному етапі тестування можуть бути виявлені та усунені внутрішні помилки в базі даних.
Тестування БД через інтерфейс часто зводиться до оцінки його доброзичливості до користувача. Перевіряється відповідність назв кнопок та призначених їм операцій, посилання, переходи, вбудовані в інтерфейс, валідація даних, що вводяться.
Виконавши такі прості кроки, можна знайти помилки, використовуючи тестування БД через інтерфейс:
- написати запити через інтерфейс і виконати їх;
- знайти існуючий запис в комірці, змінити його та зберегти запис;
- вставити новий елемент в меню інтерфейсу, заповнити інформацію і зберегти дані;
- видалити або перемістити існуючу комірку з інформацією;
- повторити всі ці кроки з неприпустимими/невалідними даними і подивитися як реагує БД.
База даних є основною і важливою частиною практично кожної програми, тому дуже важливо протестувати її заздалегідь, перевіривши правильність і безпеку баз даних. Тестування бази даних вимагає пильної уваги, відповідної підготовки, гарних навичок написання SQL-запитів, знань про структуру бази даних і практичних навичок.
Тестування бази даних дозволяє мінімізувати ризики, які пов'язані з цілісністю даних, здатністю системи реагувати на навантаження або стрес, до введення програмного продукту в експлуатацію.
