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

Simonova sql server-enginetesting

May 22, 2015

Download

Documents

LiloSEA
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Simonova sql server-enginetesting

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

Microsoft SQL ServerRedmond, WA, USA

Page 2: Simonova sql server-enginetesting

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

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

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

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

Page 3: Simonova sql server-enginetesting

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

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

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

info/competitor-compare.aspx

Page 4: Simonova sql server-enginetesting

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

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

(Central Services)

Page 5: Simonova sql server-enginetesting

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

SDET – Software Development Engineer

in TestPM – Program ManagerSDE – Software Development Engineer

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

Page 6: Simonova sql server-enginetesting

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)

Utilitie

s (DB

CC

, B

ack

up

/Resto

re, B

CP

, …)

Page 7: Simonova sql server-enginetesting

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

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

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

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

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

Page 8: Simonova sql server-enginetesting

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

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

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

Page 9: Simonova sql server-enginetesting

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

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

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

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

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

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

Page 10: Simonova sql server-enginetesting

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

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

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

Page 11: Simonova sql server-enginetesting

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

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

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

Page 12: Simonova sql server-enginetesting

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

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

эффективного тестирования

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

Page 13: Simonova sql server-enginetesting

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

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

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

компонентов

Page 14: Simonova sql server-enginetesting

Пример статического тестаСоздание индекса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: Simonova sql server-enginetesting

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

Create Index

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

Insert Create Table

Diff results DBCCAuto File

Schema

Data GenCluster \ Non-cluster, Column

Page 16: Simonova sql server-enginetesting

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

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

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

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

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

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

Page 17: Simonova sql server-enginetesting

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

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

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

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

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

Page 18: Simonova sql server-enginetesting

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

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

etc. DDL DML

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

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

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

Page 19: Simonova sql server-enginetesting

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

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

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

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

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

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

Page 20: Simonova sql server-enginetesting

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

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

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

Page 21: Simonova sql server-enginetesting

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

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

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

Page 22: Simonova sql server-enginetesting

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

функционалОбеспечивают замедленное выполнение

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

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

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

Trace flags

Page 23: Simonova sql server-enginetesting

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

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

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

Sleep Abort thread Abort transaction Kill server Associate callback function

Page 24: Simonova sql server-enginetesting

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

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

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

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

Page 25: Simonova sql server-enginetesting

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

Участник 1

Участник 2

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

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

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

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

3. Commit

3. Commit

Page 26: Simonova sql server-enginetesting

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

Участник 1

Участник 2

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

й

1. Будь готов

1. Будь готов

3. Rollback

3. Rollback

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

XEvent -> Kill Server

Page 27: Simonova sql server-enginetesting

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

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

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

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

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

Page 28: Simonova sql server-enginetesting

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

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

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

Page 29: Simonova sql server-enginetesting

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

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

Health monitor

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

Page 30: Simonova sql server-enginetesting

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

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

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

Page 31: Simonova sql server-enginetesting

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

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

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

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

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

Page 32: Simonova sql server-enginetesting

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

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

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

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

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

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

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

Патент

Page 33: Simonova sql server-enginetesting

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

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

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

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

Page 34: Simonova sql server-enginetesting

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

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

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

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

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

Page 35: Simonova sql server-enginetesting

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

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

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