1 · Orientation
Где SQL входит в цикл тестирования
~0,8 ч

T-SQL как рабочий инструмент проверки, а не как тема. Для QA-инженеров, знающих основы и которым теперь нужно проверять, что система действительно записала: сверка миграций, поиск дубликатов, распознавание запроса, который зеленеет там, где должен краснеть. Всё на одной вымышленной платформе — от чужой схемы до детерминированного ассерта. Юниты открыты в любом порядке.
Занятие — на вашем языке: его ведёт ассистент.
Ассистент берёт материал курса с нашего сервера и ведёт занятие на вашем языке.
Экзамен сдаётся на сайте, без ассистента. Вопросы экзамена не переводятся: так решено для всех курсов.
порядок свободный · ступени ниже — тот порядок, который предлагает автор, а не условиеВид: карта · ступени
1 · Orientation
Где SQL входит в цикл тестирования
~0,8 ч
2 · Orientation
Чтение схемы, которую проектировали не вы
~1 ч
по замыслу автора — после «Где SQL входит в цикл тестирования»
3 · Orientation
Безопасная работа на общем тестовом стенде
~1 ч
по замыслу автора — после «Где SQL входит в цикл тестирования»
4 · Precise retrieval
SELECT, который отвечает ровно на один вопрос
~0,9 ч
по замыслу автора — после «Чтение схемы, которую проектировали не вы»
5 · Precise retrieval
NULL и логика, у которой три ответа
~1,1 ч
по замыслу автора — после «SELECT, который отвечает ровно на один вопрос»
6 · Precise retrieval
Типы, преобразования и параметры сортировки
~1 ч
по замыслу автора — после любого из: «Чтение схемы, которую проектировали не вы», «SELECT, который отвечает ровно на один вопрос»
7 · Precise retrieval
Даты, время и последний день месяца
~1,1 ч
по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «Типы, преобразования и параметры сортировки»
8 · Across tables
INNER и LEFT: какие строки соединение выбрасывает
~1 ч
по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «NULL и логика, у которой три ответа»
9 · Across tables
~1 ч
по замыслу автора — после «INNER и LEFT: какие строки соединение выбрасывает»
10 · Across tables
Когда соединение размножает строки
~1,1 ч
по замыслу автора — после «INNER и LEFT: какие строки соединение выбрасывает»
11 · Across tables
Операции над множествами как сверка
~1 ч
по замыслу автора — после любого из: «NULL и логика, у которой три ответа», «INNER и LEFT: какие строки соединение выбрасывает»
12 · Aggregation
~1 ч
по замыслу автора — после любого из: «SELECT, который отвечает ровно на один вопрос», «Когда соединение размножает строки»
13 · Aggregation
~1 ч
по замыслу автора — после «GROUP BY и пересчёт отчёта»
14 · Aggregation
~1 ч
по замыслу автора — после любого из: «Когда соединение размножает строки», «GROUP BY и пересчёт отчёта»
15 · Aggregation
Оконные функции для тестировщика
~1,1 ч
по замыслу автора — после любого из: «HAVING и поиск дубликатов», «Подзапросы и CTE»
16 · Data before and after the test
Тестовые данные: подготовка и идемпотентная очистка
~1,1 ч
по замыслу автора — после любого из: «Безопасная работа на общем тестовом стенде», «Операции над множествами как сверка»
17 · Data before and after the test
Проверка того, что приложение действительно записало
~1,1 ч
по замыслу автора — после любого из: «Оконные функции для тестировщика», «Тестовые данные: подготовка и идемпотентная очистка»
18 · Data before and after the test
Чтение представлений, процедур и триггеров
~1 ч
по замыслу автора — после любого из: «Тестовые данные: подготовка и идемпотентная очистка», «Проверка того, что приложение действительно записало»
19 · Data before and after the test
Превращение проверки в детерминированное утверждение
~1,1 ч
по замыслу автора — после любого из: «Тестовые данные: подготовка и идемпотентная очистка», «Проверка того, что приложение действительно записало»
20 · Optional
Необязательно: соберите ENGAGE локально и выполните проверки
~1,5 ч
по замыслу автора — после любого из: «Чтение схемы, которую проектировали не вы», «Превращение проверки в детерминированное утверждение»
21 · Optional
Необязательно: медленные запросы и заблокированные среды
~0,8 ч
по замыслу автора — после любого из: «Безопасная работа на общем тестовом стенде», «Даты, время и последний день месяца»
22 · Optional
Необязательно: данные клиента, PII и ИИ-ассистенты
~0,7 ч
по замыслу автора — после «Где SQL входит в цикл тестирования»
23 · Optional
Необязательно: сквозная сверка миграции
~1 ч
по замыслу автора — после 2 из: «Сироты и ссылки в никуда», «Операции над множествами как сверка», «HAVING и поиск дубликатов»
24 · Optional
Необязательно: почему схема выглядит именно так
~0,7 ч
по замыслу автора — после любого из: «Чтение схемы, которую проектировали не вы», «GROUP BY и пересчёт отчёта»
финал · в браузере, без ассистента
Экзамен
закрыт · записаться на курс
| 1 | Где SQL входит в цикл тестирования Назвать четыре момента цикла тестирования, в которых запрос к базе данных — единственное доступное доказательство | ~0,8 ч |
| 2 | Чтение схемы, которую проектировали не вы Находить незнакомую таблицу или столбец запросом к INFORMATION_SCHEMA, а не просмотром обозревателя объектов | ~1 ч |
| 3 | Безопасная работа на общем тестовом стенде Получать каждую разрушающую инструкцию из SELECT с идентичными FROM и WHERE, чтобы инструкция никогда не существовала без своего фильтра | ~1 ч |
| 4 | SELECT, который отвечает ровно на один вопрос Превращать проверочный вопрос в запрос, результат которого возможен, только если система повела себя правильно | ~0,9 ч |
| 5 | NULL и логика, у которой три ответа Объяснить, почему WHERE оставляет только строки, дающие true, и что это делает со сравнениями с NULL | ~1,1 ч |
| 6 | Типы, преобразования и параметры сортировки Читать точность и масштаб из определения столбца и строить утверждение по значению, которое столбец может хранить, а не по введённому значению | ~1 ч |
| 7 | Даты, время и последний день месяца Записывать фильтры по диапазону дат как полуоткрытые интервалы с >= и < и объяснять, почему у каждой включающей верхней границы есть граничный случай | ~1,1 ч |
| 8 | INNER и LEFT: какие строки соединение выбрасывает Выбирать между INNER и LEFT исходя из проверочного вопроса, по тесту: если правдоподобный ответ — «ни одной», нужно левое соединение | ~1 ч |
| 9 | Сироты и ссылки в никуда Писать проверки на сирот с NOT EXISTS и с антисоединением LEFT JOIN / IS NULL, проверяя не допускающий NULL ключ присоединённой таблицы | ~1 ч |
| 10 | Когда соединение размножает строки Объяснять, почему соединение по неуникальному ключу размножает строки и почему агрегат скрывает это размножение | ~1,1 ч |
| 11 | Операции над множествами как сверка Сверять две совокупности с помощью EXCEPT в обоих направлениях и объяснять, почему одно направление само по себе может сообщить об успехе сломанной миграции | ~1 ч |
| 12 | GROUP BY и пересчёт отчёта Группировать по столбцу, который делает строку уникальной, а не по столбцу, который показывает отчёт, и объяснять, что слияние делает с результатом | ~1 ч |
| 13 | HAVING и поиск дубликатов Находить дубликаты, группируя по бизнес-ключу и фильтруя через 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 ч |