Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
База данных: полное объяснение для QA инженера
Определение и сущность
База данных (БД) — это организованное хранилище структурированной информации, которое обеспечивает быстрый поиск, добавление, обновление и удаление данных. Это не просто файл на диске, а система управления данными с определёнными правилами, индексами и механизмами контроля.
Для QA инженера база данных — это одна из критических компонент, которую мы должны понимать. Невозможно полностью протестировать приложение, не понимая, как оно хранит и манипулирует данными.
Основные компоненты БД
1. Таблицы и Записи
Таблица — это двумерная структура данных с колонками (поля) и строками (записи).
Пример: таблица "Пользователи"
id | имя | email | возраст
----+----------+------------------+--------
1 | Иван | ivan@example.com | 28
2 | Мария | maria@example.com| 32
3 | Пётр | petr@example.com | 25
- Колонка (поле) — хранит определённый тип данных (текст, число, дата)
- Строка (запись) — одна единица информации о сущности
- Первичный ключ (Primary Key) — уникальный идентификатор записи (обычно id)
2. Типы данных
БД поддерживает различные типы данных:
- VARCHAR(255) — текст переменной длины (строка)
- INTEGER — целое число
- DECIMAL(10,2) — число с плавающей точкой (цена, координаты)
- DATETIME — дата и время
- BOOLEAN — логическое значение (да/нет)
- TEXT — большой текст
- JSON — структурированные данные
3. Отношения между таблицами
Внешний ключ (Foreign Key) — связь между таблицами.
Пример:
Таблица: Комментарии
id | текст | user_id | post_id
---+--------------------+---------+--------
1 | Отличная статья! | 1 | 5
2 | Не согласен | 3 | 5
Здесь user_id и post_id — это внешние ключи, которые ссылаются на id в других таблицах.
4. Индексы
Индекс — это структура данных для ускорения поиска.
Без индекса: БД сканирует все миллионы строк (долго) С индексом: БД находит строку по id за микросекунды
Тестирование производительности часто выявляет проблемы с отсутствующими индексами.
Типы баз данных
1. Реляционные БД (RDBMS)
Примеры: PostgreSQL, MySQL, Oracle, SQL Server
Характеристики:
- Данные организованы в таблицы
- Строгая структура (схема)
- ACID гарантии (транзакции надёжны)
- Язык: SQL
Для QA: это самый частый тип БД, который мы тестируем. Нужно уметь писать SQL запросы для проверки данных.
2. NoSQL БД
Примеры: MongoDB, Redis, Elasticsearch, DynamoDB
Характеристики:
- Гибкая структура (JSON документы)
- Горизонтальное масштабирование
- BASE гарантии (итоговая согласованность)
Для QA: всё более популярны, требуют другого подхода к тестированию. Вместо SQL используются специфичные запросы.
3. Графовые БД
Пример: Neo4j
Для QA: редко встречаются, используются для социальных сетей, рекомендаций.
Операции с БД (CRUD)
CREATE (Создание)
INSERT INTO users (имя, email, возраст)
VALUES ('Алексей', 'alex@example.com', 30);
READ (Чтение)
SELECT * FROM users WHERE возраст > 25;
UPDATE (Обновление)
UPDATE users SET email = 'newemail@example.com' WHERE id = 1;
DELETE (Удаление)
DELETE FROM users WHERE id = 1;
Почему QA инженер должен знать БД
1. Проверка целостности данных
Пример: пользователь удалил аккаунт
- Все его комментарии должны быть удалены (CASCADE delete)
- Его лайки должны быть удалены
- Статистика постов должна обновиться
Это проверяется прямо в БД SQL запросами:
SELECT COUNT(*) FROM comments WHERE user_id = 123;
-- Должно вернуть 0 после удаления пользователя
2. Проверка консистентности
Пример: заказ в статусе "оплачено", но сумма в таблице платежей не совпадает с суммой заказа. Это ловится при прямой проверке БД.
3. Производительность и оптимизация
Если запрос в БД выполняется 30 секунд вместо 0.3 — это баг. Мы можем анализировать slow query logs и выявлять проблемы.
4. Безопасность
SQL Injection — вторая по частоте уязвимость после XSS. QA должен знать, как тестировать приложение на SQL injection.
Пример потенциально опасного кода:
-- Опасно!
query = "SELECT * FROM users WHERE email = '" + user_input + "'";
-- Если user вводит: ' OR '1'='1
-- То запрос становится:
-- SELECT * FROM users WHERE email = '' OR '1'='1'
-- Это вернёт ВСЕ пользователей!
5. Откат данных (Rollback)
После тестирования нужно привести БД в исходное состояние. Мы используем транзакции и откаты:
BEGIN TRANSACTION;
-- Создаём тестовые данные
INSERT INTO users ...
ROLLBACK; -- Отменяем всё
Практические навыки для QA
1. Написание SQL запросов
-- Найти всех пользователей с более чем 10 комментариями
SELECT u.*, COUNT(c.id) as comment_count
FROM users u
LEFT JOIN comments c ON u.id = c.user_id
GROUP BY u.id
HAVING COUNT(c.id) > 10;
2. Проверка после операций
- После создания записи: проверить, что она в БД с правильными данными
- После обновления: убедиться, что старые данные перезаписаны
- После удаления: проверить, что записей действительно нет
3. Работа с фреймворками для БД тестов
- DBUnit (Java)
- Databases (Python)
- Sequelize (Node.js)
4. Инструменты для работы с БД
- PostgreSQL Client — psql
- MySQL Client — mysql
- DBeaver — GUI для просмотра БД
- Adminer — веб-интерфейс для БД
Ошибки, которые часто ловим при тестировании БД
- Дублирование записей — при создании заказа создаются две записи вместо одной
- Orphaned records — осиротелые записи, когда удалена родительская запись, но дочерние остались
- Race conditions — две операции одновременно обновляют одну запись
- Data migration issues — при обновлении версии БД данные повреждаются
- Неправильный cascading — при удалении пользователя остаются его заказы/комментарии
Заключение
База данных — это сердце приложения. Без понимания её структуры и операций невозможно проводить глубокое тестирование. За 10+ лет работы я видел, как баги в БД ломали приложение даже когда frontend и backend выглядели корректно.
Каждый уважающий себя QA инженер должен уметь:
- Написать базовый SQL запрос
- Проверить целостность данных в БД
- Найти и проанализировать медленные запросы
- Понимать схему БД приложения
Это не означает, что QA должен быть DBA, но базовые навыки критичны.