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

Содержание

Слайд 2

Содержание

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

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

Слайд 3

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

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

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

Слайд 4

Visual Studio 2010

Проблема

Где «истинная» схема?
Как вести версии?
Как проводить тестирование?
Как управлять изменениями?

Решение

Где угодно.

Visual Studio 2010 Проблема Где «истинная» схема? Как вести версии? Как проводить
Схема это исходный проект.
Так же как и в привычных программных проектах.
Генерация тестовых данных. Юнит тестирование баз данных.
Рефакторинг, сравнение схем.

Слайд 5

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

Эксплуатационная база – единственная верная схема соответствующая версии вашей

Правда о «истинной схеме» Эксплуатационная база – единственная верная схема соответствующая версии
эксплуатационной системы
Возможны исправления для этой базы.
Разработка будущей версии ведется безотносительно к эксплуатационной версии
Патч для эксплуатационной версии это возникновение:
Новой эксплуатационной версии базы
Новой версии эксплуатационной системы
Патч+«Старая версия БД»=релиз билд

Слайд 6

Содержание

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

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

Слайд 7

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

Проект базы данных (Visual Studio Project) отражает эволюционирующую схему
Проект содержит DDL

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

Слайд 8

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

SQL Server Database

Database
Project
Template

SQL Script

Database
Project

Импорт схемы

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

Реверс существующего
скрипта

Жизненный цикл SQL Server Database Database Project Template SQL Script Database Project

Слайд 9

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

Database
Project

Edit

Refactor

Compare

Data Gen

Test

Compare

Build

Deploy

Жизненный цикл: классика ALM Database Project Edit Refactor Compare Data Gen Test Compare Build Deploy

Слайд 10

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

CREATE TABLE dbo.Auction
(
id INT NOT NULL,
name

Проблема с контролем версий CREATE TABLE dbo.Auction ( id INT NOT NULL,
VARCHAR(25) NOT NULL,
start DATETIME NULL,
len INT NULL
)

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

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

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

Revision History

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_SK UNIQUE (name)

Слайд 11

Ручное ведение версий

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

Ручное ведение версий -- version 1 Add table dbo.Auction IF OBJECT_ID (N'dbo.Auction',
NULL
BEGIN
CREATE TABLE dbo.Auction
(
id INT NOT NULL,
name VARCHAR(25) NOT NULL,
start DATETIME NULL,
len INT NULL
)
END
-- version 2 Add PK Au_PK
IF 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_SK
IF 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

Слайд 12

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

CREATE TABLE dbo.Auction
(
id INT NOT NULL,

Верный подход к ведению версий CREATE TABLE dbo.Auction ( id INT NOT
name VARCHAR(25) NOT NULL,
start DATETIME NULL,
len INT NULL
)

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

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

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

Revision History

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 UNIQUE,
start DATETIME NULL,
len INT NULL
)

Слайд 13

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

CREATE TABLE dbo.Auction
(
id INT NOT NULL PRIMARY KEY,
name

Инкрементальное Развертывание CREATE TABLE dbo.Auction ( id INT NOT NULL PRIMARY KEY,
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 PRIMARY KEY,
name VARCHAR(25) NOT NULL,
start DATETIME NULL,
len INT NULL
)

Revision History

V 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
)

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

Слайд 15

Содержание

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

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

Слайд 16

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

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

Тестовые данные и Q&A Почему бы не использовать эксплуатационные данные? Они могут
верны!
Не позволят протестировать «острые углы».
Не позволят проверить изменения в схемах данных!
Какие тестовые данные необходимы?
Случайные!
Детерминируемые.
Распределенные соответствующим образом
Количественно (сто первичных ключей -> десять тысяч дочерних записей)
Качественно (длина строк, границы числовых значений и дат,…)

Слайд 17

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

Какие отличия необходимы для тестовых данных
Функциональные
Нагрузочные
Версионирование
Необходимы разные тестовые данные

Тестовые данные и Q&A Какие отличия необходимы для тестовых данных Функциональные Нагрузочные
и тесты для разных схем
Необходимы даже разные тестовые планы для одной и той же схемы

Слайд 18

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

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

Генерация тестовых данных Основные инструменты Генерация данных для таблиц Количество записей Генераторы
RegEx, data bound
Можно написать свой собственный генератор
Тонкие настройки генераторов

Слайд 20

Содержание

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

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

Слайд 21

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

Автоматическая генерация юнит-тестов для
Хранимых процедур, Функций, Триггеров
Валидация результатов тестов (asserts)
T-SQL

Юнит тестирование Автоматическая генерация юнит-тестов для Хранимых процедур, Функций, Триггеров Валидация результатов
Server based
RAISEERROR
Ожидаемые значения
Не пустые результаты
Количество записей
Время выполнения
Предварительные и пост скрипты

Слайд 22

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

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

Юнит тестирование Автоматизированное развертывание Перед запуском тестов будет сформирована БД По соответствующему
данных будет создана основа для проверки

Слайд 24

Содержание

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

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

Слайд 25

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

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

Управление изменениями Рефакторинг Сравнение схем Сравнение данных

Слайд 27

Содержание

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

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

Слайд 28

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

Стандартный подход
Генерация скриптов изменений
Через сравнение схемы
Взаимодействие с администратором БД
Новый подход
Представляем: Data Tier

Развертывание Стандартный подход Генерация скриптов изменений Через сравнение схемы Взаимодействие с администратором
Application Project System

Слайд 29

Database Project vs. Data Tier Project

Data-tier Application Project V1

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

.sql

Database Project vs. Data Tier Project Data-tier Application Project V1 Стандартный проект БД .sql

Слайд 30

Database Project vs. Data Tier Project

Database Project vs. Data Tier Project

Слайд 31

Разработка

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

MANAGE

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

Слайд 33

Содержание

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

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

Слайд 34

Заключение

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

Заключение Разработка БД может быть полностью интегрирована в стандартный процесс ALM Инструментальные
легко создавать объекты БД благодаря IntelliSense, встроенному отладчику
Гибкие варианты развертывания могут снизить затраты на управление эксплуатационными БД
Имя файла: Разработка,-тестирование-и-развертывание-баз-данных-в-Visual-Studio-Team-System-2010-Дмитрий-Андреев-dmitryan@microsoft.com.pptx
Количество просмотров: 503
Количество скачиваний: 0