Підручник з тестування баз даних

⚡ Розумний підсумок

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

  • 🗄️ Ключовий принцип: Тестування бази даних перевіряє роботу серверної частини, яка містить критично важливі для бізнесу дані — ті, які користувачі ніколи не бачать, але на які завжди покладаються.
  • 🎯 Фокус висвітлення: Структурне тестування перевіряє схему, ключі, індекси, збережені процедури, тригери; функціональне тестування перевіряє цілісність та безпеку даних; нефункціональне тестування перевіряє навантаження та стрес.
  • 📊 Статистика продуктивності: Тести навантаження та стрес-тести кількісно визначають ризик і виявляють мінімальне обладнання, необхідне для задоволення очікувань зацікавлених сторін щодо часу реагування.
  • 🛠️ Стратегія оснащення: Поєднуйте інструменти тестування з урахуванням SQL, пакети програм для оцінки продуктивності, такі як LoadRunner, та JMeter, та юніт-фреймворки, такі як DBUnit, для багаторівневого покриття.
  • 💡 Найкраща практика: Перевіряйте кожну вимогу в базі даних за допомогою відстежуваних тестових випадків та створюйте резервні копії даних перед руйнівними сценаріями, такими як стрес-тести.

Тестування бази даних

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

Що таке тестування бази даних?

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

Огляд тестування баз даних

Чому тестування бази даних є важливим?

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

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

  1. Додаток зберігає кожну транзакцію в базі даних і коректно відображає її користувачеві.
  2. Під час операції інформація не втрачається.
  3. Жодні частково завершені або перервані операції не зберігаються.
  4. Жодна неавторизована особа не може отримати доступ до інформації користувача.

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

Відмінності між тестуванням інтерфейсу користувача та тестуванням даних

Тестування інтерфейсу користувача проти тестування даних

Тестування інтерфейсу користувачаТестування баз даних / даних
Також відоме як тестування графічного інтерфейсу користувача (GUI) або фронтенд-тестування.Також відоме як бекенд-тестування або тестування даних.
Стосується елементів, видимих ​​для користувача та з якими він взаємодіє — форм, презентацій, графіків, меню та звітів (створених за допомогою VB, VB.NET, VC++, Delphi та аналогічні фронтенд-інструменти).Стосується елементів, прихованих від користувача — внутрішніх процесів та сховищ, таких як механізми СУБД (Oracle, SQL Server, MySQL).
Включає перевірку текстових полів, випадаючих списків, календарів, кнопок, навігації сторінками, відображення зображень та загального зовнішнього вигляду.Включає перевірку схеми, таблиць, стовпців, ключів та індексів, збережених процедур, тригерів та конфігурації сервера бази даних.
Тестувальнику потрібні знання бізнес-домену, а також знайомство з інструментами розробки та фреймворками автоматизації.Тестувальнику потрібен ґрунтовний досвід роботи з серверами баз даних та мовою структурованих запитів (SQL).

СТАТТІ ПО ТЕМІ

Типи тестування бази даних

Типи тестування бази даних

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

  1. Структурне тестування
  2. Функціональне тестування
  3. Нефункціональне тестування

Тестування структурної бази даних

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

Що таке тестування схеми?

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

Ключові контрольні точки для тестування схеми:

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

Корисні інструменти для перевірки схем баз даних:

  • Блок DBD інтегрований з Ant — добре підходить для тестування картографії.
  • SQL Server дозволяє тестувальникам перевіряти схему, пишучи прості запити замість коду.

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

Таблиця бази даних, Тестування стовпців

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

Тестування ключів та індексів

  1. Перевірте, чи потрібне primary key та зовнішній ключ існують обмеження на необхідні таблиці.
  2. Переконайтеся, що посилання зовнішнього ключа вказують на дійсні записи.
  3. Перевірте, чи тип даних первинного ключа відповідає типу даних відповідних зовнішніх ключів у пов'язаних таблицях.
  4. Переконайтеся, що правила іменування ключів та індексів відповідають стандартам проекту.
  5. Перевірте розмір та довжину індексованих полів.
  6. Перевірте, чи потрібне кластеризовано та некластеризовані індекси створюються на таблицях, визначених вимогами.

Тестування збережених процедур

  1. Переконайтеся, що команда розробників дотримувалася необхідних правил кодування, обробки винятків та помилок для кожної збереженої процедури в кожному модулі.
  2. Перевірте, чи всі умови та цикли виконуються на основі вхідних даних, наданих під час тестування.
  3. Переконайтеся, що операція TRIM застосовується щоразу, коли дані витягуються з потрібних таблиць.
  4. Вручну виконайте кожну збережену процедуру та перевірте, чи результат відповідає очікуванням.
  5. Переконайтеся, що ручне виконання оновлює поля базової таблиці відповідно до вимог тестованої програми.
  6. Перевірте, чи виконання збереженої процедури неявно викликає необхідні тригери.
  7. Виявити будь-які невикористані збережені процедури.
  8. Перевірити поведінку для вхідних даних NULL на рівні бази даних.
  9. Переконайтеся, що кожна збережена процедура та функція виконується успішно, коли тестована база даних порожня.
  10. Перевірити наскрізну інтеграцію модулів збережених процедур відповідно до вимог застосунку.

Корисні інструменти для тестування збережених процедур включають LINQ і Тест SP утиліта

Тригерне ​​тестування

  1. Перевірте, чи дотримувалися необхідні правила кодування під час розробки тригерів.
  2. Підтвердьте, що тригери спрацьовують лише для потрібних транзакцій DML.
  3. Перевірте, чи тригер правильно оновлює дані після спрацьовування.
  4. Перевірте необхідну функціональність тригерів оновлення, вставки та видалення в тестовій програмі.

Перевірки сервера баз даних

Перевірки сервера баз даних

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

Тестування функціональної бази даних

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

Основні умови, які потрібно перевірити під час перевірки бази даних:

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

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

Перевірка цілісності та узгодженості даних

  1. Перевірте, чи логічно організовані дані.
  2. Переконайтеся, що збережені дані відповідають бізнес-вимогам.
  3. Виявити будь-які непотрібні дані в тестованому застосунку.
  4. Перевірте, чи дані, оновлені з інтерфейсу користувача, правильно потрапляють до бази даних.
  5. Підтвердьте операції TRIM над даними перед вставкою.
  6. Перевіряйте, чи кожна транзакція відповідає бізнес-специфікації та дає очікуваний результат.
  7. Підтверджуйте успішні фіксації після завершення транзакцій.
  8. Підтвердити правильність відкату, коли транзакція завершується невдачею.
  9. Підтвердіть правильність відкату в транзакціях, що охоплюють гетерогенні бази даних.
  10. Перевірте, чи кожна транзакція відповідає процедурам проектування, визначеним у системних вимогах.

Вхід і безпека користувача

  1. Перевірте, чи програма блокує спроби входу за допомогою: (a) недійсного імені користувача + дійсного пароля, (b) дійсного імені користувача + неправильного пароля та (c) недійсного імені користувача + неправильного пароля.
  2. Переконайтеся, що кожен користувач може виконувати лише ті операції, які визначені його роллю.
  3. Переконайтеся, що конфіденційні дані захищені від несанкціонованого доступу.
  4. Переконайтеся, що існують різні ролі користувачів з різними наборами дозволів.
  5. Переконайтеся, що кожен користувач має рівень доступу, зазначений у бізнес-вимогах.
  6. Переконайтеся, що конфіденційні дані — паролі, номери кредитних карток, особисті ідентифікатори — шифруються в стані спокою та ніколи не зберігаються у вигляді звичайного тексту. Усі облікові записи повинні використовувати складні паролі, які важко вгадати.

Нефункціональне тестування

Нефункціональне тестування у контексті бази даних охоплює тестування навантаження, стрес-тестування, тестування безпеки, тестування на зручність та тестування на сумісністьТестування навантаження та стрес-тестування — обидві форми тестування продуктивності — служать двом конкретним цілям:

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

Тестування навантаження

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

  1. Включіть найчастіше виконувані транзакції користувачів, оскільки їхня продуктивність впливає на всі інші транзакції.
  2. Включіть принаймні одну транзакцію без редагування, щоб розрізняти продуктивність читання та продуктивність запису.
  3. Включіть транзакції, які сприяють досягненню основної бізнес-цілі — саме тут невдачі мають найбільший вплив.
  4. Включіть принаймні одну транзакцію редагування, щоб розрізняти продуктивність запису та продуктивність читання.
  5. Виміряйте час відгуку за максимального прогнозованого навантаження віртуального користувача.
  6. Вимірюйте затримку вибору записів у великих масштабах.

Поширені інструменти для навантажувального тестування включають LoadRunner Professional, WinRunner та Apache JMeter.

Що таке стрес-тестування бази даних?

Стрес-тестування бази даних застосовує велике навантаження до бази даних, доки вона не вийде з ладу. Це визначає точку поломки системи. Стрес-тестування вимагає ретельного планування, щоб уникнути виснаження ресурсів спільної інфраструктури. Стрес-тестування також називається випробування на тортури or випробування на втомуДивіться ширше навчальний посібник зі стрес-тестування для фону. Звичайні інструменти включають LoadRunner Professional та JMeter.

Найкращі інструменти для тестування баз даних (2026)

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

КатегоріяІнструментBest For
Блок тестуванняDBUnit, tSQLtПовторювані тести схем та збережених процедур, інтегровані з Ant або конвеєрами збірки.
Навантаження та стресLoadRunner Professional, Apache JMeterМоделювання віртуальних користувачів з великими обсягами роботи в умовах виробничого навантаження.
Порівняння данихПорівняння даних SQL у Redgate, Apache DBUtilsПеревірка того, що дві бази даних містять ідентичні дані після міграції або ETL.
Генерація макетних данихМокару, DatatectСтворення реалістичних тестових наборів даних, що дотримуються референційної цілісності.
Управління схемоюLiquibase, FlywayМіграції з контролем версій та тестування відкату в різних середовищах.
Редактор SQL / спеціальна перевіркаDBeaver, Azure Студія даних, SSMSІнтерактивне створення запитів під час дослідницького тестування бази даних.

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

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

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

Міфи та помилкові уявлення про тестування баз даних

Міфи проти реальності тестування баз даних

МіфРеальність
Тестування баз даних вимагає глибоких знань і є надто виснажливим, щоб його виправдати.Ефективне тестування бази даних забезпечує довгострокову функціональну стабільність. Зусилля багаторазово окупаються зменшенням кількості реагування на інциденти.
Тестування бази даних створює додаткове вузьке місце в роботі.Це виявляє приховані дефекти на ранній стадії та покращує загальну якість програми, усуваючи вузькі місця замість того, щоб створювати їх.
Тестування бази даних уповільнює процес розробки.Інвестиції в тестування баз даних пришвидшують розробку, виявляючи дефекти схеми та цілісності до того, як вони поширяться каскадом.
Тестування баз даних є надмірно дорогим.База даних (і SQL) тестування — це довгострокова інвестиція у стабільність застосунку та захист від дорогих збоїв у виробництві.

Кращі практики

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

Див. також — Запитання та відповіді на співбесіді з тестування бази даних.

Поширені запитання

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

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

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

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

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

Підсумуйте цей пост за допомогою: