Тестирование в Microsoft SQL Server

35
Катерина Симонова Разработчик отдела тестирования Microsoft SQL Server Redmond, WA, USA

description

Тестирование в Microsoft SQL Server. Катерина Симонова Разработчик отдела тестирования Microsoft SQL Server Redmond, WA, USA. Содержание. Немного о продукте Microsoft SQL Server Структура организации Microsoft SQL Server Процесс тестирования Инновации в процессе тестирования - PowerPoint PPT Presentation

Transcript of Тестирование в Microsoft SQL Server

Page 1: Тестирование в Microsoft SQL Server

Катерина СимоноваРазработчик отдела тестирования

Microsoft SQL ServerRedmond, WA, USA

Page 2: Тестирование в Microsoft SQL Server

СодержаниеНемного о продукте Microsoft SQL

ServerСтруктура организации Microsoft SQL

ServerПроцесс тестированияИнновации в процессе тестирования

Разработка тестовИсполнение тестов

Page 3: Тестирование в Microsoft SQL Server

MS SQL ServerВысокопроизводительная СУБДПреимущества MS SQL Server

Легкость в настройке и сопровожденииОтказоустойчивость и надежность

Основные конкурентыOracleIBM DB2MySQLhttp://www.microsoft.com/sqlserver/en/us/product-info/

competitor-compare.aspx

Page 4: Тестирование в Microsoft SQL Server

Организация MS SQL Server~1200 человекОсновные группы:

SQL Engine (~250 человек)Data Programmability & ManageabilityBusiness IntelligenceData WarehousingГруппа поддержки и сопровождения

(Central Services)

Page 5: Тестирование в Microsoft SQL Server

Кадровый составОсновные позиции

SDET – Software Development Engineer

in TestPM – Program ManagerSDE – Software Development Engineer

Соотношение количества SDE к SDET ~ 1:1

Page 6: Тестирование в Microsoft SQL Server

SQL Server engineLanguage Processing

(Parse/Bind, Statement/Batch Execution)Query Optimization

(Plan Generation, Statistics, Costing)

Query Execution(Query Operators, Memory Grants,

Parallelism)Storage Engine (Access Methods, Database Page Cache,

Locking, Transactions, …)SQLOS

(Schedulers, Buffer Pool, Memory Management, Synchronization Primitives)

Utilities (D

BC

C,

Backup/R

estore, BC

P, …)

Page 7: Тестирование в Microsoft SQL Server

Карьера SDETКарьерный рост

Формальная лестница уровней и ранговLead vs. Individual ContributorSenior SDET (Test architect, консультант)

МотивацияРазвитие и ростИнтересные проектыБюджет на тренинги (~5% времени ~ 1 неделя в год)

Оценка по результатамСвободный графикPerformance reviewsPeer reviews

ЦенностиМногообразие опыта и идей - diversity

Page 8: Тестирование в Microsoft SQL Server

Важность тестирования

Почему тестирование для нас так важно?

Почему мы можем делиться опытом?

Page 9: Тестирование в Microsoft SQL Server

Задачи SDETПоддержка существующих версий продукта:

Тестирование Service Packs \ Cumulative UpdatesРабота над новыми версиями:

Участие в Virtual TeamТестирование новой функциональности

Планирование Разработка тестовых спецификаций, участие в

дизайне и создании функциональных спецификаций Формулирование требований к тестируемости

Разработка тестов Прогон тестов Принятие решения о готовности проекта Сопровождение тестов

Page 10: Тестирование в Microsoft SQL Server

Типы тестированияФункциональное тестирование

(Functional)Нагрузочное тестирование (Stress)Тестирование производительности и

масштабируемости (Performance and scalability)

Page 11: Тестирование в Microsoft SQL Server

Идеология тестированияТесты создаются из многократно

используемых компонентовГотовые сценарии запускаются и

проверяются автоматически

Page 12: Тестирование в Microsoft SQL Server

Инновации в тестированииРазработка тестов

Разделение тестового кода на компонентыАвтоматическая генерация тестов“Умная” проверкаОснащение продукта необходимыми средствами

эффективного тестированияСоздание инструментов для эффективного

исполнения и проверки тестов SQL Dumper AutoVerify

Page 13: Тестирование в Microsoft SQL Server

Разработка тестовСтатические тесты

НедостаткиСложность сопровожденияНеполное покрытие кода

Динамические тесты Тестирование на основе моделиСоздание библиотеки общих

компонентов

Page 14: Тестирование в Microsoft SQL Server

Пример статического тестаСоздание индекса1. CREATE TABLE table …2. INSERT INTO table …3. CREATE CLUSTERED INDEX index ON

table …4. Проверка мета-данных 5. DBCC CHECKDB …6. DROP INDEX index7. Повторная проверка мета-данных8. DROP TABLE table

Page 15: Тестирование в Microsoft SQL Server

Динамический тест: pipeline

Create Index

Проверка мета-данных

Insert Create Table

Diff results DBCCAuto File

Schema

Data GenCluster \ Non-cluster, Column

Page 16: Тестирование в Microsoft SQL Server

Библиотека компонентовКаждый компонент

Узко специализированРазрабатывается экспертом на основе глубоких

знаний о работе подсистемы сервераУдовлетворяет требованиям, предъявляемым к

коду продуктаСоответствие принятым стандартам

разработки кодаСоответствие принятым процессам в

организацииBranches \ Builds

Page 17: Тестирование в Microsoft SQL Server

ВерификацияПроверка на основе контрольной суммы

Изменение в коде приводит к массивным ошибкам в тестах

“Умная” проверкаИспользовать “свидетеля” для сравнения

результатовПроверять только то, что точно определено

и фиксировано

Page 18: Тестирование в Microsoft SQL Server

Тестирование на основе моделиМодель

Описывает возможные действия по отношению к системе Transaction operations: begin tran, commit, rollback, savepoint

etc. DDL DML

Описывается как граф переходов из одного состояния в другое с использованием аннотаций для описания pre-conditions

Конфигурируема и принимает параметры Число потоков Типы нагрузки и команд ...

Движок модели случайным образом проходит по графу

Page 19: Тестирование в Microsoft SQL Server

Статические и динамические тестыСтатические тесты

+ Легки в создании+ Гарантируют выполнение определенных

сценариев- Сложны в поддержке и понимании-Предоставляют ограниченное покрытие кода

(code coverage)Динамические тесты

+ Существенно расширяют покрытие кода- Не гарантируют покрытия кода- Требуют начальное время на изучение (learning

curve)- Сложны для анализа проблем

Page 20: Тестирование в Microsoft SQL Server

Инструментарий (Supportability)Стандартные инструменты мониторинга

внутреннего состояния сервера, доступные клиентамDMVs Catalog Views \ System Tables \ stored

proceduresServer log (ERRORLOG)Memory dumpsWindows Event logXEvents \ SQL Trace events

Page 21: Тестирование в Microsoft SQL Server

Инструментирование продукта для тестированияНе все критические сценарии можно

гарантировано достичь без контроля над исполнением кода

Инструментирование продукта (testability hooks) позволяет контролировать выполнение определенной последовательности операций

Page 22: Тестирование в Microsoft SQL Server

Изменяют поведение продукта требуемым образомВключают \ выключают определенный функционалОбеспечивают замедленное выполнение

определенных методов \ добавляют паузу Имитируют server crash Включают расширенную диагностику

Типы trace flagsДокументированные – для клиентовНедокументированные – для внутреннего

тестирования / CSSТолько для тестирования

Trace flags

Page 23: Тестирование в Microsoft SQL Server

XEvents• SQL Extended Events – события, генерируемые

сервером при исполнении определенного кода Появились в SQL Server 2008

Обработка событий пользователем Записывать события в файл Назначить Synchronous Target

Sleep Abort thread Abort transaction Kill server Associate callback function

Page 24: Тестирование в Microsoft SQL Server

XEvents• Особенности XEvents

Не изменяют функциональность Легковесны – не влияют на

производительность Пользователь может привязать

определенное действие к любому Xevent -встроенное или тестовое

Page 25: Тестирование в Microsoft SQL Server

Использование XEvents для проверки устойчивости к сбоям2-phase commit

Участник 1

Участник 2

Менеджер транзакций

1. Будь готов!

1. Будь готов!

2. Всегда готов!2. Всегда готов!

3. Commit

3. Commit

Page 26: Тестирование в Microsoft SQL Server

Использование XEvents для проверки устойчивости к сбоям

Участник 1

Участник 2

Менеджер транзакци

й

1. Будь готов

1. Будь готов

3. Rollback

3. Rollback

2. Всегда готов2. Всегда готов

XEvent -> Kill Server

Page 27: Тестирование в Microsoft SQL Server

Инструменты для тестированияStackhasher

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

возможном stack trace Simulated exceptions Out-of-resource errors Interrupts (control-C)

FuzzingПроверяет работу сервера с некорректными и

случайными входными данными Programming interfaces SQL statements File formats Network protocols

Page 28: Тестирование в Microsoft SQL Server

Автоматизация тестированияВсе тесты автоматизированыТысячи машин различной архитектуры для

разного типа тестирования Отдельная группа (Central services),

ответственная за обеспечение работоспособности всей инфраструктуры

Page 29: Тестирование в Microsoft SQL Server

Цикл исполнения тестовЗапустить тесты

Система запуска тестов:• OS \ Архитектура • SQL Version: Branch \ Build • Test storeСистема исполнения тестов:• Выбор машины• Установка ОС \ SQL Server• Запуск тестов

Health monitor

AutoVerify:Анализ сбоев и обработка результатов

Page 30: Тестирование в Microsoft SQL Server

Автоматизация тестированияСистема мониторинга

Управляет запуском тестов и следит за ходом их выполнения

При обнаружении сбоев создает отчет о всех обнаруженных сбоях и ошибках

Page 31: Тестирование в Microsoft SQL Server

AutoVerifyАвтоматически создает отчет об ошибках (file

bug)Анализирует проблему по Call StackПросматривает базу существующих проблем,

выясняя известна ли текущая проблемаНазначает новый баг соответствующему

разработчикуСобирает достаточно отладочной

информации для оффлайн-анализа проблемы

Page 32: Тестирование в Microsoft SQL Server

AutoVerifyРасширяемая архитектура

Изначально использовался только для asserts \ AVsСейчас используется при обнаружении повреждения

данных, ошибках в стресс-тестах, функциональных ошибках

За последние 3 годаПроанализировано ~267 000 проблем;

создано ~16 000 багов; сэкономлено ~30 000 человеко-часов

~50% багов при функциональном тестировании создано автоматически

~90% багов при стресс-тестировании создано автоматически

Патент

Page 33: Тестирование в Microsoft SQL Server

SQL DumperВызывается в случае ошибки сегментации

(Access Violation) или assert и создает файл дампа памяти (*.mdmp)

Собирает информацию об объектах из оперативной памяти, необходимую для offline-отладки

С клиентских машин информация о сбоях автоматически отправляется в Microsoft программой Watson (при согласии клиента)

Page 34: Тестирование в Microsoft SQL Server

ЗаключениеТестирование – серьезная дисциплина,

которой должно уделяться должное внимание ещё на этапе проектирования программного продукта

Автоматизация тестирования сокращает затраты организации на разработку ПО

Множество интересных задачДинамическая генерация тестовПовышение эффективности работы отдела

тестирования Поддержание существующего кода Разработка нового кода Эффективное исполнение тестов

Page 35: Тестирование в Microsoft SQL Server

Спасибо!О докладчике

Образование СУНЦ УрГУ УГТУ-УПИ, РТФ, инженер University of Vermont, MS in Computer Science

C 2007 года – Microsoft, SDET SQL Serveremail: [email protected]