Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
СУБД (Система управления базами данных)
Что такое СУБД?
СУБД — это программное обеспечение, которое позволяет хранить, организовать, обновлять и получать данные. Это посредник между приложением и физическим хранилищем данных на диске.
Основные функции СУБД
1. Хранение данных
- Сохранение информации на диск в структурированном виде
- Гарантия, что данные не потеряются при отключении питания
- Пример: когда вы сохраняете профиль в приложении, он идет в СУБД
2. Безопасность
- Аутентификация: только авторизованные пользователи могут получить доступ
- Шифрование чувствительных данных
- Логирование всех операций (кто, когда и что изменил)
3. Согласованность данных
- ACID свойства обеспечивают целостность
- Атомарность: операция либо полностью выполнена, либо откачена
- Пример: при переводе денег со счета на счет, либо оба счета обновлены, либо ничего
4. Быстрый доступ
- Индексы помогают находить данные за миллисекунды
- Без индексов придется сканировать миллионы записей
- Пример: вы ищете пользователя по email — СУБД использует индекс и находит за 0.5ms
5. Масштабируемость
- Поддержка миллиардов записей
- Репликация для отказоустойчивости
- Распределение нагрузки между серверами
Типы СУБД
Реляционные СУБД (Relational Database)
Данные хранятся в таблицах с строками и столбцами.
Примеры:
- PostgreSQL (open source, мощная, бесплатная)
- MySQL (популярная, простая, бесплатная)
- Oracle Database (коммерческая, очень мощная)
- Microsoft SQL Server (коммерческая, интегрирована с Windows)
Пример таблицы:
users table:
id | name | email | age
1 | John | john@mail.com | 30
2 | Jane | jane@mail.com | 28
NoSQL СУБД (Non-relational)
Данные хранятся в других форматах: документы, графы, ключ-значение.
Примеры:
- MongoDB (документы в формате JSON)
- Redis (быстрое хранилище ключ-значение для кеша)
- Elasticsearch (поиск по большим объемам текста)
- Neo4j (граф для социальных сетей)
Облачные СУБД
- Firebase (от Google, для мобильных приложений)
- AWS RDS (управляемая PostgreSQL/MySQL)
- Azure Cosmos DB (глобально распределенная)
Для чего QA тестирует СУБД?
1. Корректность данных
Проверяю, что:
- Данные сохраняются правильно
- После сохранения они соответствуют тому, что я отправил
- Обновление данных работает корректно
- Удаление удаляет именно нужные записи
Пример: создам пользователя с name=John, проверю базу — там точно name=John?
2. Целостность данных
Тестирую ACID свойства:
- Атомарность: операция либо полностью выполнена, либо откачена
- Изоляция: две одновременные операции не мешают друг другу
- Готовность: данные всегда в консистентном состоянии
Пример: два пользователя одновременно переводят деньги со счета. СУБД должна гарантировать, что операции не перемешаются.
3. Производительность
Проверяю, что:
- Запросы выполняются быстро (< 100ms для обычных операций)
- Система масштабируется при растущем количестве данных
- Индексы работают эффективно
Пример: есть таблица с 1 млн записей. Запрос по индексированному полю должен вернуться за 1-5ms, а не 5 секунд.
4. Отказоустойчивость
Тестирую сценарии:
- Что происходит при отключении основного сервера?
- Может ли реплика автоматически взять на себя нагрузку?
- Восстанавливаются ли данные после сбоя?
5. Безопасность
Проверяю:
- SQL injection: могу ли я вставить вредоносный SQL код?
- Доступ: может ли пользователь А видеть данные пользователя B?
- Шифрование: передаются ли чувствительные данные в открытом виде?
Пример SQL injection: если я введу email = admin' --', система должна обработать это безопасно, а не выполнить комментарий.
Инструменты для тестирования СУБД
Для PostgreSQL/MySQL:
- psql / mysql CLI — прямой доступ к БД
- DBeaver / DataGrip — визуальный клиент
- pgAdmin / phpMyAdmin — веб-интерфейс
Для проверки:
- Запрос SELECT для проверки данных
- Explain план для анализа производительности
- Логи СУБД для отладки
Примеры команд:
SELECT * FROM users WHERE id = 1;
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 100;
DELETE FROM users WHERE id = 1;
Типичные проблемы при тестировании
Проблема 1: Race condition
Два запроса одновременно обновляют одну запись. Какой результат победит?
Решение: использовать транзакции и уровни изоляции.
Проблема 2: N+1 queries
Для каждого пользователя из списка я делаю отдельный запрос адреса. Для 1000 пользователей — 1000 запросов.
Решение: JOIN или батчинг запросов.
Проблема 3: Медленные запросы
Запрос выполняется 10 секунд вместо 100ms.
Решение: добавить индекс, переписать запрос, кешировать результаты.
Проблема 4: Утечка данных
Пользователь видит данные других пользователей из БД.
Решение: правильная фильтрация в WHERE clause, ограничение прав доступа.
Примеры из практики
Проект: платежная система
- Проверяю, что при двойном нажатии кнопки Оплатить платеж не счисляется дважды
- Это достигается за счет уникального constraint в БД
- Тестирую simultaneity: отправляю два запроса в одну миллисекунду
Проект: CRM система
- Находу query, который выполнялся 15 секунд
- Анализирую EXPLAIN план, вижу что сканирует 2млн записей без индекса
- Рекомендую добавить индекс на поле status
- После этого запрос выполняется 50ms
Заключение
Для QA СУБД — это не просто хранилище данных, это критический компонент, который:
- Гарантирует корректность информации
- Обеспечивает безопасность
- Влияет на производительность всей системы
Поэтому тестирование БД — это обязательная часть работы QA инженера, особенно для критичных операций типа платежей, персональных данных и финансов.