Тестирование баз данных состоит из тестирования черного ящика, тестирования белого ящика и тестирования ACID (атомарность, согласованность, изолированность и надежность). В этом гайде даны определения, описания, и примеры.
Что такое тестирование баз данных
Тестирование баз данных чаще всего называется бэкэнд-тестированием (подробно), или тестированием данных. Отличается от тестирования интерфейса тем, что в данном случае тестировщика совершенно не волнует визуальный интерфейс. Основная задача — проверить правильность работы внутренних процессов, и скорость, точность и безопасность работы с данными.
Тестирование базы данных чаще всего проверяет схему баз данных, таблицы и триггеры. Оно подвергает базу данных нагрузке, и может также включать выполнение сложных запросов, для тщательной проверки возможностей и быстродействия.
Также тестируется работа Системы Управления базами данных (СУБД), таких как Oracle и SQL Server.
Что такое схема базы данных
Это логическая структура, описывающая организацию и взаимосвязь данных в базе.
Она описывает, как данные хранятся, как к ним обращаются и как ими управляют в СУБД. Схема описывает типы данных, ограничения и отношения между объектами: таблицы, представления, индексы и триггеры.
Схема базы данных имеет решающее значение для целостности и непротиворечивости данных. Схема предоставляет разработчикам и администраторам баз данных основу для организации и структурирования данных. Она также помогает обеспечить соответствие данных определенным требованиям, таким как валидность, безопасность и доступность данных. Корректная схема баз данных нужна для оптимизации данных для эффективного управления данными, совершенствования бизнес-операций и принятия решений.
Почему это важно
Потому что:
- Некоторые ошибки можно найти только с помощью тестирования БД
- Некоторые пользовательские пути могут быть проверены только путем тестирования БД
- Повышает стабильность и безопасность
- Обеспечивает согласованность данных
Быстрый пример
Представьте, что вы открываете приложение онлайн-банкинга на своем телефоне (или на самом деле откройте). Теперь переведите небольшую сумму денег из расчетной карты на сберегательную. Какие действия произведены за эти несколько секунд?
- Приложение отправило информацию о транзакции в базу данных.
- Ни копейки не потерялось по дороге.
- Приложение не упало и не вылетело с ошибкой.
- Транзакция прошла безопасно.
- Деньги теперь лежат на вашем другом счете.
Все эти функции выполняются в базе данных. Поэтому тестирование баз данных очень важно – если в базе данных случится критический сбой, все приложение упадет. Информация не будет отправлена и получена,или не защищена. Или, внешне кажется, что приложение нормально работает (можно ходить по окнам и даже производить транзакции), но ничего не происходит.
Тестирование баз данных предотвращает подобные ситуации. Ни обстановки пожара, ни пропажи денег со счетов.
Принципы тестирования баз данных
Слово «принципы» объясняет «почему», а не «как». Здесь следует понять две важные вещи:
- Свойства ACID:
- Атомарность
- Согласованность
- Изолированность
- Надежность
- Целостность данных
Что значит ACID
Это самая безопасная версия кислоты, о которой вы когда-либо слышали. ACID расшифровывается как Атомарность, Согласованность, Изоляция, и Надежность (Atomicity, Consistency, Isolation и Durability).
Каждая транзакция в базе должна соответствовать этим принципам.
Транзакция — это группа задач. Даже самая простая транзакция, типа банковского перевода в предыдущей части, всегда включает в себя несколько задач более низкого порядка. Проверка четырех главных ACID-характеристик должна гарантировать, что любая транзакция завершена точно, полно и целостно.
Смысл ACID
- Принцип Атомарности (Atomicity) гласит, что любая транзакция должна рассматриваться как атомарная единица (неделимая). В нехимических айти-терминах это означает, что каждая транзакция должна быть полностью завершена, иначе ошибка. Такое внимательное отношение к каждой транзакции позволяет избежать неприятных ситуаций, когда например денежный перевод завершается наполовину (?). Звучит напряженно, не так ли? Благодаря свойству атомарности, если транзакция завершается на полпути, если что-то идет не так, вся транзакция считается ошибочной. И деньги возвращаются назад. Нет проблемы.
- Принцип Согласованности (Consistency) требует, чтобы база данных оставалась согласованной после завершения транзакции. Ни одна транзакция не должна негативно влиять на прочие данные в базе. Пример: положив деньги на свой счет, вы не должны иметь никакой возможности снять деньги с чужого счета.
- Изоляция предотвращает пересечение потоков. Она гарантирует, что в случае одновременного выполнения нескольких транзакций каждая из них будет рассматриваться так, как будто это единственная транзакция в базе данных. Никто не должен получать чужие финансовые данные.
- Принцип Надежности требует, чтобы база данных могла, например, сохранять все последние транзакции, на случай если произойдет системный сбой (если есть серьезные причины предполагать такой сбой). Например, если вы сделаете денежный перевод, а через десять минут база данных поломается, как вы узнаете, что нужно повторить перевод? Требования по надежности снимают проблемы у пользователей приложения.
Целостность данных
Проверка того, что все последние данные обновляются во всех местах. Существует четыре критерия, которые в совокупности гарантируют целостность данных. Для обеспечения должного уровня целостности данных тестировщик должен проверить, что:
- Данные можно верифицировать
- Данные доступны для поиска
- Данные точны
- Данные полны
Если данные отвечают этим четырем требованиям, то они, скорее всего, соответствуют должному уровню целостности данных.
Язык управления базами данных (DML)
Язык управления (манипулирования) данными (DML) — это компьютерный язык, используемый для управления данными в БД. DML используется для выполнения таких задач, как вставка, обновление, удаление и извлечение данных из базы. DML представляет собой набор команд и функций SQL, которые позволяют пользователям работать с данными в БД, изменять и получать эти данные, в соответствии с заданными критериями.
DML является важной составляющей любой системы управления базами данных, позволяя выполнять операции без понимания структуры БД, и технологии, вокруг которой она построена.
DML-команды применяются вместе с командами языка описания данных (DDL), который предназначен для создания и изменения объектов базы данных, таких как таблицы, представления и индексы. DDL и DML составляют основные компоненты системы баз данных, позволяя пользователям создавать, изменять и манипулировать данными, безопасным, эффективным и надежным способом. Использование DML в управлении базами данных позволяет хранить, управлять и анализировать большие объемы данных, что делает его важнейшим инструментом для бизнеса в современном мире, ориентированном на данные.
Подходы
Теперь, когда мы знаем главные принципы, можно ознакомиться с подходами к тестированию. Скорее всего, вы уже слышали о некоторых из этих подходов. Выше я упоминал, что если вы уже знаете главные виды QA-тестирования, то без проблем разберетесь с тестированием баз данных.
Существует три вида тестирования баз данных:
- Структурное
- Функциональное
- Нефункциональное
Внутри этих трех типов тестирования есть свои подтипы.
Структурное тестирование
Структурное тестирование проверяет элементы дата-репозитория (хранилища данных). Эти элементы скрыты от конечных пользователей. Тестировщики баз данных выполняют эти тесты путем написания SQL-запросов. Далее задачи.
Тестирование правильности сопоставления данных (маппинга)
Сопоставление структур данных — это процесс установления связей между ними. Тестирование отображения данных, также называемое тестированием схемы, позволяет проверить внешнюю и внутреннюю стороны приложения (бэкенд и фронтенд). Они проверяют, правильно ли они общаются друг с другом.
Например, если вы заполняете форму регистрации на сайте, правильное сопоставление данных приведет к тому, что заполненные данные из веб-формы будут правильно перенесены в базу данных приложения. Имя, электронная почта и пароль будут сохранены там, где они должны быть сохранены. Тестирование маппинга подтвердит, что все работает.
Существует несколько инструментов сопоставления данных, с которыми будет работать QA-тестировщик. Краткий список инструментов:
Тестирование таблиц
Выполняется несколько проверок структуры маппинга.
- Проверяется связь нужных полей на фронтенде и бэкенде.
- Проверяется длина полей в БД.
- Проверка, есть ли в базе данных не отображаемые, но нужные таблицы и столбцы.
Проверка сервера БД
Позволяет убедиться, что конфигурация сервера соответствует требованиям. Проверка (валидация) сервера также должна гарантировать, что все, кто пытается получить доступ к определенным областям сервера базы данных, прошли соответствующую авторизацию. Это важная мера обеспечения безопасности базы данных для ее пользователей. Также может производиться нагрузочная проверка — может ли сервер обрабатывать нужное количество транзакций одновременно.
Например, при проверке сервера финансового приложения необходимо убедиться, что сервер способен обрабатывать финансовые операции, (определенного требованиями) количества пользователей, и что все пользователи могут получать доступ только к своим данным.
Функциональное тестирование
Это проверка того, что база данных соответствует спецификациям клиента, и что действия конечного пользователя будут соответствовать этим требованиям. Это означает, что тестировщику придется много притворяться конечным пользователем — ходить по путям пользователя.
Тестирование черного ящика
Это стратегия тестирования программного обеспечения, при которой внутренности тестируемой программной системы неизвестны тестировщику. Не имея понимания, как устроено приложение, тестировщик будет работать с ним, как конечный пользователь.
Тестирование черного ящика проводится при тестировании баз данных, поскольку оно позволяет найти ошибки в стандартных юзкейсах. Это максимальное тестирование в роли конечного пользователя.
Тестирование белого ящика
Тестирование белого ящика — это противоположность тестированию черного ящика. При тестировании белого ящика тестировщик полностью понимает внутреннюю структуру и дизайн тестируемого приложения. Поэтому он подходит к тестированию как инспектор. Тестирование белого ящика иногда называют еще тестированием стеклянного ящика, поскольку тестировщик может наблюдать взаимодействия между модулями (юнитами) в процессе тестирования. В отличие от тестирования черного ящика, тестировщик, работающий по принципу белого ящика, может не волноваться насчет проблем с пользовательским опытом.
Юнит-тестирование
Юнит-тестирование — метод тестирования программного обеспечения, который подразумевает тестирование отдельных модулей (юнитов) или компонентов приложения в изоляции от остальной системы. Такое тестирование предназначено для проверки отдельных объектов базы данных, таких как таблицы, представления, хранимые процедуры и функции. Тестируя эти объекты в изоляции, можно убедиться, что каждый объект функционирует так, как задумано.
Модульные тесты в случае баз данных обычно состоят в написании автоматизированных тестов, которые выполняют определенные SQL-команды на объекте или модуле базы данных и проверяют, что возвращаются ожидаемые результаты. Например, модульный тест хранимой процедуры может включать передачу процедуре набора входных параметров и проверку правильности полученных данных. Это позволяет убедиться, что любой объект базы данных работает так как ожидалось, и что любые изменения в схеме базы данных или коде приложения не приведут к непредвиденным последствиям и ошибкам.
Нефункциональное тестирование
Нефункциональные тесты проверяют производительность базы под нагрузкой, в стрессовых условиях, и показывают возможности оптимизации.
Нагрузочное тестирование базы данных
Это тип тестирования производительности базы данных, который проверяет, не повлияет ли большое количество пользователей на производительность базы данных. QA-тестер выполняет множество нагрузочных запросов снова и снова, имитируя большую пользовательскую базу.
Стресс-тестирование
Стресс-тесты — это нагрузочные тесты, но еще более сильные. Изучается точка отказа системы. База данных получает внезапно большой трафик.
Вам наверняка знакомо ощущение, когда при загрузке сайта или открытии приложения вы наблюдали бесконечный экран загрузки, или коды каких-то ошибок. Это чаще всего происходит из-за перегрузки.
Автоматизация
Ручное тестирование БД требовало бы слишком много времени и людей и стоило бы слишком много денег. Поэтому такое тестирование автоматизируется.
База по базам. Очень большой справочный гайд по базам данных и SQL