К содержимому
L-SYSTEM

рекомендовансредний

SQL для QA-инженеров: T-SQL в повседневном тестировании

T-SQL как рабочий инструмент проверки, а не как тема. Для QA-инженеров, знающих основы и которым теперь нужно проверять, что система действительно записала: сверка миграций, поиск дубликатов, распознавание запроса, который зеленеет там, где должен краснеть. Всё на одной вымышленной платформе — от чужой схемы до детерминированного ассерта. Юниты открыты в любом порядке.

Занятие — на вашем языке: его ведёт ассистент.

  • Материал: английский
  • Экзамен: английский — сдаётся на сайте, без перевода
Как это устроено

Ассистент берёт материал курса с нашего сервера и ведёт занятие на вашем языке.

Экзамен сдаётся на сайте, без ассистента. Вопросы экзамена не переводятся: так решено для всех курсов.

Как подключить ассистента

Путь по курсу

· юнитов: 24

порядок свободный · ступени ниже — тот порядок, который предлагает автор, а не условиеВид: карта · ступени

7 · Precise retrieval

Даты, время и последний день месяца

~1,1 ч

по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «Типы, преобразования и параметры сортировки»

12 · Aggregation

GROUP BY и пересчёт отчёта

~1 ч

по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «Когда соединение размножает строки»

14 · Aggregation

Подзапросы и CTE

~1 ч

по замыслу автора — после любого из: «Когда соединение размножает строки», «GROUP BY и пересчёт отчёта»

финал · в браузере, без ассистента

Экзамен

закрыт · записаться на курс

Путь по курсу словами
  • Ступень 1 · Где SQL входит в цикл тестирования — ~0,8 ч
  • Ступень 2 · Чтение схемы, которую проектировали не вы — по замыслу автора — после «Где SQL входит в цикл тестирования»; ~1 ч
  • Ступень 2 · Безопасная работа на общем тестовом стенде — по замыслу автора — после «Где SQL входит в цикл тестирования»; ~1 ч
  • Ступень 2 · Необязательно: данные клиента, PII и ИИ-ассистенты — по замыслу автора — после «Где SQL входит в цикл тестирования»; необязательный; ~0,7 ч
  • Ступень 3 · SELECT, который отвечает ровно на один вопрос — по замыслу автора — после «Чтение схемы, которую проектировали не вы»; ~0,9 ч
  • Ступень 4 · NULL и логика, у которой три ответа — по замыслу автора — после «SELECT, который отвечает ровно на один вопрос»; ~1,1 ч
  • Ступень 4 · Типы, преобразования и параметры сортировки — по замыслу автора — после любого из: «Чтение схемы, которую проектировали не вы», «SELECT, который отвечает ровно на один вопрос»; ~1 ч
  • Ступень 5 · Даты, время и последний день месяца — по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «Типы, преобразования и параметры сортировки»; ~1,1 ч
  • Ступень 5 · INNER и LEFT: какие строки соединение выбрасывает — по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «NULL и логика, у которой три ответа»; ~1 ч
  • Ступень 6 · Сироты и ссылки в никуда — по замыслу автора — после «INNER и LEFT: какие строки соединение выбрасывает»; ~1 ч
  • Ступень 6 · Когда соединение размножает строки — по замыслу автора — после «INNER и LEFT: какие строки соединение выбрасывает»; ~1,1 ч
  • Ступень 6 · Операции над множествами как сверка — по замыслу автора — после любого из: «NULL и логика, у которой три ответа», «INNER и LEFT: какие строки соединение выбрасывает»; ~1 ч
  • Ступень 6 · Необязательно: медленные запросы и заблокированные среды — по замыслу автора — после любого из: «Безопасная работа на общем тестовом стенде», «Даты, время и последний день месяца»; необязательный; ~0,8 ч
  • Ступень 7 · GROUP BY и пересчёт отчёта — по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «Когда соединение размножает строки»; ~1 ч
  • Ступень 7 · Тестовые данные: подготовка и идемпотентная очистка — по замыслу автора — после любого из: «Безопасная работа на общем тестовом стенде», «Операции над множествами как сверка»; ~1,1 ч
  • Ступень 8 · HAVING и поиск дубликатов — по замыслу автора — после «GROUP BY и пересчёт отчёта»; ~1 ч
  • Ступень 8 · Подзапросы и CTE — по замыслу автора — после любого из: «Когда соединение размножает строки», «GROUP BY и пересчёт отчёта»; ~1 ч
  • Ступень 8 · Необязательно: почему схема выглядит именно так — по замыслу автора — после любого из: «Чтение схемы, которую проектировали не вы», «GROUP BY и пересчёт отчёта»; необязательный; ~0,7 ч
  • Ступень 9 · Оконные функции для тестировщика — по замыслу автора — после любого из: «HAVING и поиск дубликатов», «Подзапросы и CTE»; ~1,1 ч
  • Ступень 9 · Необязательно: сквозная сверка миграции — по замыслу автора — после 2 из: «Сироты и ссылки в никуда», «Операции над множествами как сверка», «HAVING и поиск дубликатов»; необязательный; ~1 ч
  • Ступень 10 · Проверка того, что приложение действительно записало — по замыслу автора — после любого из: «Оконные функции для тестировщика», «Тестовые данные: подготовка и идемпотентная очистка»; ~1,1 ч
  • Ступень 11 · Чтение представлений, процедур и триггеров — по замыслу автора — после любого из: «Тестовые данные: подготовка и идемпотентная очистка», «Проверка того, что приложение действительно записало»; ~1 ч
  • Ступень 11 · Превращение проверки в детерминированное утверждение — по замыслу автора — после любого из: «Тестовые данные: подготовка и идемпотентная очистка», «Проверка того, что приложение действительно записало»; ~1,1 ч
  • Ступень 12 · Необязательно: соберите ENGAGE локально и выполните проверки — по замыслу автора — после любого из: «Чтение схемы, которую проектировали не вы», «Превращение проверки в детерминированное утверждение»; необязательный; ~1,5 ч

Программа · 24 юнита

1Где SQL входит в цикл тестирования

Назвать четыре момента цикла тестирования, в которых запрос к базе данных — единственное доступное доказательство

~0,8 ч
2Чтение схемы, которую проектировали не вы

Находить незнакомую таблицу или столбец запросом к INFORMATION_SCHEMA, а не просмотром обозревателя объектов

~1 ч
3Безопасная работа на общем тестовом стенде

Получать каждую разрушающую инструкцию из SELECT с идентичными FROM и WHERE, чтобы инструкция никогда не существовала без своего фильтра

~1 ч
4SELECT, который отвечает ровно на один вопрос

Превращать проверочный вопрос в запрос, результат которого возможен, только если система повела себя правильно

~0,9 ч
5NULL и логика, у которой три ответа

Объяснить, почему WHERE оставляет только строки, дающие true, и что это делает со сравнениями с NULL

~1,1 ч
6Типы, преобразования и параметры сортировки

Читать точность и масштаб из определения столбца и строить утверждение по значению, которое столбец может хранить, а не по введённому значению

~1 ч
7Даты, время и последний день месяца

Записывать фильтры по диапазону дат как полуоткрытые интервалы с >= и < и объяснять, почему у каждой включающей верхней границы есть граничный случай

~1,1 ч
8INNER и LEFT: какие строки соединение выбрасывает

Выбирать между INNER и LEFT исходя из проверочного вопроса, по тесту: если правдоподобный ответ — «ни одной», нужно левое соединение

~1 ч
9Сироты и ссылки в никуда

Писать проверки на сирот с NOT EXISTS и с антисоединением LEFT JOIN / IS NULL, проверяя не допускающий NULL ключ присоединённой таблицы

~1 ч
10Когда соединение размножает строки

Объяснять, почему соединение по неуникальному ключу размножает строки и почему агрегат скрывает это размножение

~1,1 ч
11Операции над множествами как сверка

Сверять две совокупности с помощью EXCEPT в обоих направлениях и объяснять, почему одно направление само по себе может сообщить об успехе сломанной миграции

~1 ч
12GROUP BY и пересчёт отчёта

Группировать по столбцу, который делает строку уникальной, а не по столбцу, который показывает отчёт, и объяснять, что слияние делает с результатом

~1 ч
13HAVING и поиск дубликатов

Находить дубликаты, группируя по бизнес-ключу и фильтруя через HAVING COUNT(*) > 1

~1 ч
14Подзапросы и CTE

Различать скалярные подзапросы, подзапросы-производные таблицы и коррелированные подзапросы и определять, где каждый из них даёт сбой

~1 ч
15Оконные функции для тестировщика

Объяснять, чем оконная функция отличается от GROUP BY, и выбирать между ними исходя из вопроса

~1,1 ч
16Тестовые данные: подготовка и идемпотентная очистка

Писать скрипты подготовки, которые идемпотентны, изолированы и самоидентифицируемы, с очисткой в начале, а не в конце

~1,1 ч
17Проверка того, что приложение действительно записало

Перечислять радиус поражения записи — каждую таблицу, которую операция должна затронуть, — до написания любого проверочного запроса

~1,1 ч
18Чтение представлений, процедур и триггеров

Получать определение представления, процедуры, функции или триггера и искать во всех телах модулей ссылки на таблицу или столбец

~1 ч
19Превращение проверки в детерминированное утверждение

Выбирать между булевой, скалярной и множественной формой утверждения, по умолчанию используя запрос нарушений

~1,1 ч
20Необязательно: соберите ENGAGE локально и выполните проверки

Развернуть локальный экземпляр SQL Server и создать базу данных ENGAGE из прилагаемого скрипта

~1,5 ч
21Необязательно: медленные запросы и заблокированные среды

Читать четыре распространённых оператора плана и интерпретировать разрыв между оценочным и фактическим количеством строк

~0,8 ч
22Необязательно: данные клиента, PII и ИИ-ассистенты

Определять, что считается данными клиента на проекте профессиональных услуг, помимо персональных данных

~0,7 ч
23Необязательно: сквозная сверка миграции

Проводить многоуровневую сверку — совокупность, итоги, разность множеств, дубликаты, ссылки, распределение — и формулировать, чего не может обнаружить каждый уровень

~1 ч
24Необязательно: почему схема выглядит именно так

Сформулировать единственное правило, лежащее в основе нормализации, и перевести его в версию тестировщика: дублированные факты означают путь в коде, который является тестовым случаем

~0,7 ч