Тестирование в microsoft sql server
DESCRIPTION
Тестирование в Microsoft SQL Server. Катерина Симонова Разработчик отдела тестирования Microsoft SQL Server Redmond, WA, USA. Содержание. Немного о продукте Microsoft SQL Server Структура организации Microsoft SQL Server Процесс тестирования Инновации в процессе тестирования - PowerPoint PPT PresentationTRANSCRIPT
Катерина СимоноваРазработчик отдела тестирования
Microsoft SQL ServerRedmond, WA, USA
СодержаниеНемного о продукте Microsoft SQL
ServerСтруктура организации Microsoft SQL
ServerПроцесс тестированияИнновации в процессе тестирования
Разработка тестовИсполнение тестов
MS SQL ServerВысокопроизводительная СУБДПреимущества MS SQL Server
Легкость в настройке и сопровожденииОтказоустойчивость и надежность
Основные конкурентыOracleIBM DB2MySQLhttp://www.microsoft.com/sqlserver/en/us/product-info/
competitor-compare.aspx
Организация MS SQL Server~1200 человекОсновные группы:
SQL Engine (~250 человек)Data Programmability & ManageabilityBusiness IntelligenceData WarehousingГруппа поддержки и сопровождения
(Central Services)
Кадровый составОсновные позиции
SDET – Software Development Engineer
in TestPM – Program ManagerSDE – Software Development Engineer
Соотношение количества SDE к SDET ~ 1:1
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, …)
Карьера SDETКарьерный рост
Формальная лестница уровней и ранговLead vs. Individual ContributorSenior SDET (Test architect, консультант)
МотивацияРазвитие и ростИнтересные проектыБюджет на тренинги (~5% времени ~ 1 неделя в год)
Оценка по результатамСвободный графикPerformance reviewsPeer reviews
ЦенностиМногообразие опыта и идей - diversity
Важность тестирования
Почему тестирование для нас так важно?
Почему мы можем делиться опытом?
Задачи SDETПоддержка существующих версий продукта:
Тестирование Service Packs \ Cumulative UpdatesРабота над новыми версиями:
Участие в Virtual TeamТестирование новой функциональности
Планирование Разработка тестовых спецификаций, участие в
дизайне и создании функциональных спецификаций Формулирование требований к тестируемости
Разработка тестов Прогон тестов Принятие решения о готовности проекта Сопровождение тестов
Типы тестированияФункциональное тестирование
(Functional)Нагрузочное тестирование (Stress)Тестирование производительности и
масштабируемости (Performance and scalability)
Идеология тестированияТесты создаются из многократно
используемых компонентовГотовые сценарии запускаются и
проверяются автоматически
Инновации в тестированииРазработка тестов
Разделение тестового кода на компонентыАвтоматическая генерация тестов“Умная” проверкаОснащение продукта необходимыми средствами
эффективного тестированияСоздание инструментов для эффективного
исполнения и проверки тестов SQL Dumper AutoVerify
Разработка тестовСтатические тесты
НедостаткиСложность сопровожденияНеполное покрытие кода
Динамические тесты Тестирование на основе моделиСоздание библиотеки общих
компонентов
Пример статического тестаСоздание индекса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
Динамический тест: pipeline
Create Index
Проверка мета-данных
Insert Create Table
Diff results DBCCAuto File
Schema
Data GenCluster \ Non-cluster, Column
Библиотека компонентовКаждый компонент
Узко специализированРазрабатывается экспертом на основе глубоких
знаний о работе подсистемы сервераУдовлетворяет требованиям, предъявляемым к
коду продуктаСоответствие принятым стандартам
разработки кодаСоответствие принятым процессам в
организацииBranches \ Builds
ВерификацияПроверка на основе контрольной суммы
Изменение в коде приводит к массивным ошибкам в тестах
“Умная” проверкаИспользовать “свидетеля” для сравнения
результатовПроверять только то, что точно определено
и фиксировано
Тестирование на основе моделиМодель
Описывает возможные действия по отношению к системе Transaction operations: begin tran, commit, rollback, savepoint
etc. DDL DML
Описывается как граф переходов из одного состояния в другое с использованием аннотаций для описания pre-conditions
Конфигурируема и принимает параметры Число потоков Типы нагрузки и команд ...
Движок модели случайным образом проходит по графу
Статические и динамические тестыСтатические тесты
+ Легки в создании+ Гарантируют выполнение определенных
сценариев- Сложны в поддержке и понимании-Предоставляют ограниченное покрытие кода
(code coverage)Динамические тесты
+ Существенно расширяют покрытие кода- Не гарантируют покрытия кода- Требуют начальное время на изучение (learning
curve)- Сложны для анализа проблем
Инструментарий (Supportability)Стандартные инструменты мониторинга
внутреннего состояния сервера, доступные клиентамDMVs Catalog Views \ System Tables \ stored
proceduresServer log (ERRORLOG)Memory dumpsWindows Event logXEvents \ SQL Trace events
Инструментирование продукта для тестированияНе все критические сценарии можно
гарантировано достичь без контроля над исполнением кода
Инструментирование продукта (testability hooks) позволяет контролировать выполнение определенной последовательности операций
Изменяют поведение продукта требуемым образомВключают \ выключают определенный функционалОбеспечивают замедленное выполнение
определенных методов \ добавляют паузу Имитируют server crash Включают расширенную диагностику
Типы trace flagsДокументированные – для клиентовНедокументированные – для внутреннего
тестирования / CSSТолько для тестирования
Trace flags
XEvents• SQL Extended Events – события, генерируемые
сервером при исполнении определенного кода Появились в SQL Server 2008
Обработка событий пользователем Записывать события в файл Назначить Synchronous Target
Sleep Abort thread Abort transaction Kill server Associate callback function
XEvents• Особенности XEvents
Не изменяют функциональность Легковесны – не влияют на
производительность Пользователь может привязать
определенное действие к любому Xevent -встроенное или тестовое
Использование XEvents для проверки устойчивости к сбоям2-phase commit
Участник 1
Участник 2
Менеджер транзакций
1. Будь готов!
1. Будь готов!
2. Всегда готов!2. Всегда готов!
3. Commit
3. Commit
Использование XEvents для проверки устойчивости к сбоям
Участник 1
Участник 2
Менеджер транзакци
й
1. Будь готов
1. Будь готов
3. Rollback
3. Rollback
2. Всегда готов2. Всегда готов
XEvent -> Kill Server
Инструменты для тестированияStackhasher
Проверяет обработку исключений на сервереВызывает определенные действия в каждом
возможном stack trace Simulated exceptions Out-of-resource errors Interrupts (control-C)
FuzzingПроверяет работу сервера с некорректными и
случайными входными данными Programming interfaces SQL statements File formats Network protocols
Автоматизация тестированияВсе тесты автоматизированыТысячи машин различной архитектуры для
разного типа тестирования Отдельная группа (Central services),
ответственная за обеспечение работоспособности всей инфраструктуры
Цикл исполнения тестовЗапустить тесты
Система запуска тестов:• OS \ Архитектура • SQL Version: Branch \ Build • Test storeСистема исполнения тестов:• Выбор машины• Установка ОС \ SQL Server• Запуск тестов
Health monitor
AutoVerify:Анализ сбоев и обработка результатов
Автоматизация тестированияСистема мониторинга
Управляет запуском тестов и следит за ходом их выполнения
При обнаружении сбоев создает отчет о всех обнаруженных сбоях и ошибках
AutoVerifyАвтоматически создает отчет об ошибках (file
bug)Анализирует проблему по Call StackПросматривает базу существующих проблем,
выясняя известна ли текущая проблемаНазначает новый баг соответствующему
разработчикуСобирает достаточно отладочной
информации для оффлайн-анализа проблемы
AutoVerifyРасширяемая архитектура
Изначально использовался только для asserts \ AVsСейчас используется при обнаружении повреждения
данных, ошибках в стресс-тестах, функциональных ошибках
За последние 3 годаПроанализировано ~267 000 проблем;
создано ~16 000 багов; сэкономлено ~30 000 человеко-часов
~50% багов при функциональном тестировании создано автоматически
~90% багов при стресс-тестировании создано автоматически
Патент
SQL DumperВызывается в случае ошибки сегментации
(Access Violation) или assert и создает файл дампа памяти (*.mdmp)
Собирает информацию об объектах из оперативной памяти, необходимую для offline-отладки
С клиентских машин информация о сбоях автоматически отправляется в Microsoft программой Watson (при согласии клиента)
ЗаключениеТестирование – серьезная дисциплина,
которой должно уделяться должное внимание ещё на этапе проектирования программного продукта
Автоматизация тестирования сокращает затраты организации на разработку ПО
Множество интересных задачДинамическая генерация тестовПовышение эффективности работы отдела
тестирования Поддержание существующего кода Разработка нового кода Эффективное исполнение тестов
Спасибо!О докладчике
Образование СУНЦ УрГУ УГТУ-УПИ, РТФ, инженер University of Vermont, MS in Computer Science
C 2007 года – Microsoft, SDET SQL Serveremail: [email protected]