35
Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010 Дмитрий Андреев dmitryan@microsoft. com

Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Embed Size (px)

DESCRIPTION

Майкрософт, по совету наших пользователей, пересмотрел линейку продуктов VSTS и объединил издание для разработчиков с изданием для баз данных. VSTS 2010 предоставляет разработчикам ряд возможностей для улучшения процесса разработки БД, упрощения работы со структурами баз данных, генерации тестовых данных и организации развертывания и тестирования с помощью инструментария по управлению сборками. Интерпретация схемы объектов и взаимозависимостей между объектами БД позволяет разработчикам находить и устранять ошибки на более ранних стадиях проектирования. Интеграция исходников БД и кода приложения значительно упростит процесс разработки без дополнительных материальных затрат. В докладе будет рассказано о том, как организовать процесс разработки базы данных в Visual Studio Team System 2010 в контексте новых возможностей.

Citation preview

Page 1: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Дмитрий Андреев[email protected]

Page 2: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение

Page 3: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Очень важные вопросы

Где находится «истинная» схема?Эксплуатационная база?Что насчет исправлений?Что будем делать с следующей версией?

Как вести версии базы данных?Что делать с тестовыми данными?Как проверить логику базы данных?Какие средства использовать для сравнения схем?Как развертывать БД и как делать апгрейд?

Page 4: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

4

Visual Studio 2010

ПроблемаГде «истинная» схема?

Как вести версии?

Как проводить тестирование?

Как управлять изменениями?

РешениеГде угодно. Схема это исходный проект.Так же как и в привычных программных проектах.Генерация тестовых данных. Юнит тестирование баз данных.Рефакторинг, сравнение схем.

Page 5: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Правда о «истинной схеме»

Эксплуатационная база – единственная верная схема соответствующая версии вашей эксплуатационной системыВозможны исправления для этой базы.Разработка будущей версии ведется безотносительно к эксплуатационной версииПатч для эксплуатационной версии это возникновение:

Новой эксплуатационной версии базыНовой версии эксплуатационной системы

Патч+«Старая версия БД»=релиз билд

Page 6: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение

Page 7: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Проектная модель

Проект базы данных (Visual Studio Project) отражает эволюционирующую схемуПроект содержит DDL скрипты (*.SQL файлы)Контроль версий ведется на уровне исходных текстов этих скриптовКлюч к успеху:

Автоматическая генерация тестовых данныхЮнит тестирование

Page 8: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Жизненный цикл

SQL Server

Database

DatabaseProject

Template

SQL Script

DatabaseProject

Импорт схемы

Создание нового проекта

Реверс сущ

ествую

щего

скрипта

Page 9: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Жизненный цикл: классика ALM

DatabaseProject

Edit

Refactor

Compare

Data Gen

Test

Compare

BuildDeploy

Page 10: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Проблема с контролем версий

CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

class AuctionApplication( int id; void MethodA();)

class AuctionApplication( int id; void MethodA();)

DatabaseDatabase

class AuctionApplication( int id; void MethodA(); void MethodB();)

class AuctionApplication( int id; void MethodA(); void MethodB();)

class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)

class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)

Revision History

AppApp

V 1 V 2 V 3

ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)

ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)

ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)

ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)

Page 11: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Ручное ведение версий-- version 1 Add table dbo.AuctionIF OBJECT_ID (N'dbo.Auction', N'U') IS NULLBEGINCREATE TABLE dbo.Auction(

id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)END-- version 2 Add PK Au_PKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_PK' AND type = 'PK')BEGIN

ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)END-- version 3 Add UC Au_SKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_SK' AND type = ‘UQ')BEGIN

ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)END

-- version 1 Add table dbo.AuctionIF OBJECT_ID (N'dbo.Auction', N'U') IS NULLBEGINCREATE TABLE dbo.Auction(

id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)END-- version 2 Add PK Au_PKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_PK' AND type = 'PK')BEGIN

ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)END-- version 3 Add UC Au_SKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_SK' AND type = ‘UQ')BEGIN

ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)END

Page 12: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Верный подход к ведению версий

CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

LogicalDatabaseLogical

Database

class AuctionApplication( int id; void MethodA();)

class AuctionApplication( int id; void MethodA();)

class AuctionApplication( int id; void MethodA(); void MethodB();)

class AuctionApplication( int id; void MethodA(); void MethodB();)

class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)

class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)

Revision History

AppApp

V 1 V 2 V 3

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)

Page 13: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Инкрементальное Развертывание

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)

Эксплуатируемая система

Эксплуатируемая система

Логическая база

Логическая база

Revision HistoryV 1 V 2 V 3

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)

CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)

Новая системаНовая

система ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)

Page 14: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Демонстрация

Page 15: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение

Page 16: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Тестовые данные и Q&A

Почему бы не использовать эксплуатационные данные?

Они могут быть не верны!Не позволят протестировать «острые углы».Не позволят проверить изменения в схемах данных!

Какие тестовые данные необходимы?Случайные!Детерминируемые.Распределенные соответствующим образом

Количественно (сто первичных ключей -> десять тысяч дочерних записей)Качественно (длина строк, границы числовых значений и дат,…)

Page 17: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Тестовые данные и Q&A

Какие отличия необходимы для тестовых данных

ФункциональныеНагрузочные

ВерсионированиеНеобходимы разные тестовые данные и тесты для разных схемНеобходимы даже разные тестовые планы для одной и той же схемы

Page 18: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Генерация тестовых данных

Основные инструментыГенерация данных для таблицКоличество записей

Генераторы для различных типов полей

String, RegEx, data boundМожно написать свой собственный генераторТонкие настройки генераторов

Page 19: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Демонстрация

Page 20: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение

Page 21: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Юнит тестирование

Автоматическая генерация юнит-тестов для

Хранимых процедур, Функций, Триггеров

Валидация результатов тестов (asserts)T-SQL Server based

RAISEERROR

Ожидаемые значения Не пустые результатыКоличество записейВремя выполнения

Предварительные и пост скрипты

Page 22: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Юнит тестирование

Автоматизированное развертывание

Перед запуском тестов будет сформирована БД

По соответствующему плану генерации тестовых данных будет создана основа для проверки

Page 23: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Демонстрация

Page 24: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение

Page 25: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Управление изменениями

РефакторингСравнение схемСравнение данных

Page 26: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Демонстрация

Page 27: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение

Page 28: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Развертывание

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

Через сравнение схемы

Взаимодействие с администратором БД

Новый подходПредставляем: Data Tier Application Project System

Page 29: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Database Project vs. Data Tier Project

Data-tier Application Project V1

Visual Studio

SQL Server 2008 R2

Build

.dacpac

Стандартный проект БД

Visual Studio

.dbschema.sql

SQL Server 2005, 2008, 2008 R2

Build

DeployDeploy

Генерация скриптов

Page 30: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Database Project vs. Data Tier Project

Стандартный проект БД Data-tier Application Projects V1

Целевые приложения

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

Поддержка БД SQL 2005, 2008, 2010 и БД третьих производителей

SQL 2008 R2; планируется поддержка SQL 2008.

Сложность схемы Не ограниченная До тысячи обьектов

Апгрейд(schema + data)

Проект генерирует .sql скрипты которые обновляют схему. Данные остаются на месте или подвергаются миграционным операциям в зависимости от сценариев апгрейда.

.sql скриптов нет. Единый пакет для развертывания или апгрейда содержащий всю необходимую информацию.Данные сохраняются в автоматическом режиме.

Типы поддерживаемых SQL обьектов

Полная поддержка Частичная поддержка

IntelliSense, Debugging,T-SQL Editor

Одинаковые возможности

Page 31: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

31

DBA

SQL Server Management Studio

9

Managed Instances

HR

ControlPoint

SALE

S

Разработка Развертывание MANAGE

Visual Studio 2010

Разработчик

FinAppProd DB

DBA

SQL Server Management Studio

FinAppDev DB1

Reverse Engineer

DAC

2

Create policies

3

Deploy /

Upgrade DAC

4

.dacpac

Compile

+ Build

5

Hand-off to DBA

6

Deploy /

Upgrade DAC

7

Manage, Register, Uninstall, Extract,

Upgrade DAC

8

Page 32: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Демонстрация

Page 33: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение

Page 34: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Заключение

Разработка БД может быть полностью интегрирована в стандартный процесс ALMИнструментальные средства позволяют легко создавать объекты БД благодаря IntelliSense, встроенному отладчикуГибкие варианты развертывания могут снизить затраты на управление эксплуатационными БД

Page 35: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010

Вопросы?