SQL для QA-інженерів: T-SQL у щоденному тестуванні
T-SQL як робочий інструмент перевірки, а не як тема. Для QA-інженерів, які знають основи й тепер мають перевіряти, що система справді записала: звірка міграцій, пошук дублікатів, розпізнавання запиту, який зеленіє там, де мав би червоніти. Усе на одній вигаданій платформі — від чужої схеми до детермінованого асерту. Юніти відкриті в будь-якому порядку.
Заняття — вашою мовою: його веде асистент.
- Матеріал: англійська
- Іспит: англійська — складається на сайті, без перекладу
Як це влаштовано
Асистент бере матеріал курсу з нашого сервера й веде заняття вашою мовою.
Іспит складається на сайті, без асистента. Питання іспиту не перекладаються: так вирішено для всіх курсів.
Шлях курсом
· юнітів: 24порядок вільний · сходинки нижче — той порядок, який пропонує автор, а не умоваВигляд: карта · щаблі
Щабель 1
~0,8 год
1 · Orientation
Де SQL входить у цикл тестування
~0,8 год
Щабель 2
~2,7 год
за задумом автора — після «Де SQL входить у цикл тестування»
2 · Orientation
Читання схеми, яку проєктували не ви
~1 год
3 · Orientation
Безпечна робота на спільному тестовому стенді
~1 год
22 · Optional
Необов'язково: дані клієнта, PII та ШІ-асистенти
~0,7 год
Щабель 3
~0,9 год
4 · Precise retrieval · за задумом автора — після «Читання схеми, яку проєктували не ви»
SELECT, що відповідає рівно на одне питання
~0,9 год
Щабель 4
~2,1 год
Precise retrieval
5 · за задумом автора — після «SELECT, що відповідає рівно на одне питання»
NULL і логіка, що має три відповіді
~1,1 год
6 · за задумом автора — після будь-якого із: «Читання схеми, яку проєктували не ви», «SELECT, що відповідає рівно на одне питання»
Типи, перетворення та параметри сортування
~1 год
Щабель 5
~2,1 год
7 · Precise retrieval · за задумом автора — після будь-якого із: «SELECT, що відповідає рівно на одне питання», «Типи, перетворення та параметри сортування»
Дати, час і останній день місяця
~1,1 год
8 · Across tables · за задумом автора — після будь-якого із: «SELECT, що відповідає рівно на одне питання», «NULL і логіка, що має три відповіді»
INNER і LEFT: які рядки з'єднання відкидає
~1 год
Щабель 6
~3,9 год
9 · Across tables · за задумом автора — після «INNER і LEFT: які рядки з'єднання відкидає»
~1 год
10 · Across tables · за задумом автора — після «INNER і LEFT: які рядки з'єднання відкидає»
Коли з'єднання розмножує рядки
~1,1 год
11 · Across tables · за задумом автора — після будь-якого із: «NULL і логіка, що має три відповіді», «INNER і LEFT: які рядки з'єднання відкидає»
Операції над множинами як звірка
~1 год
21 · Optional · за задумом автора — після будь-якого із: «Безпечна робота на спільному тестовому стенді», «Дати, час і останній день місяця»
Необов'язково: повільні запити й заблоковані середовища
~0,8 год
Щабель 7
~2,1 год
12 · Aggregation · за задумом автора — після будь-якого із: «SELECT, що відповідає рівно на одне питання», «Коли з'єднання розмножує рядки»
~1 год
16 · Data before and after the test · за задумом автора — після будь-якого із: «Безпечна робота на спільному тестовому стенді», «Операції над множинами як звірка»
Тестові дані: підготовка та ідемпотентне очищення
~1,1 год
Щабель 8
~2,7 год
13 · Aggregation · за задумом автора — після «GROUP BY і перерахунок звіту»
~1 год
14 · Aggregation · за задумом автора — після будь-якого із: «Коли з'єднання розмножує рядки», «GROUP BY і перерахунок звіту»
~1 год
24 · Optional · за задумом автора — після будь-якого із: «Читання схеми, яку проєктували не ви», «GROUP BY і перерахунок звіту»
Необов'язково: чому схема виглядає саме так
~0,7 год
Щабель 9
~2,1 год
15 · Aggregation · за задумом автора — після будь-якого із: «HAVING і пошук дублікатів», «Підзапити та CTE»
Віконні функції для тестувальника
~1,1 год
23 · Optional · за задумом автора — після 2 із: «Сироти й посилання в нікуди», «Операції над множинами як звірка», «HAVING і пошук дублікатів»
Необов'язково: наскрізна звірка міграції
~1 год
Щабель 10
~1,1 год
17 · Data before and after the test · за задумом автора — після будь-якого із: «Віконні функції для тестувальника», «Тестові дані: підготовка та ідемпотентне очищення»
Перевірка того, що застосунок насправді записав
~1,1 год
Щабель 11
~2,1 год
Data before and after the test · за задумом автора — після будь-якого із: «Тестові дані: підготовка та ідемпотентне очищення», «Перевірка того, що застосунок насправді записав»
Щабель 12
~1,5 год
20 · Optional · за задумом автора — після будь-якого із: «Читання схеми, яку проєктували не ви», «Перетворення перевірки на детерміноване твердження»
Необов'язково: зберіть ENGAGE локально й виконайте перевірки
~1,5 год
Іспит
закрито · записатися на курс
фінал · у браузері, без асистента
Іспит
Шлях курсом словами
- Щабель 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 год |
| 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 год |
