Дмитрий Андреев dmitryan@microsoft.com. Введение Проект БД и жизненный цикл БД Генерация тестовых данных Юнит-тестирование Управление изменениями Развертывание.

Презентация:



Advertisements
Похожие презентации
SQL 2012 И ГИБКИЕ МЕТОДЫ КОМАНДНОЙ РАЗРАБОТКИ C TFS Добро пожаловать в команду! Alexander Yakovlev
Advertisements

База данных База данных – это конкретная предметная область, описанная с помощью таблиц.
CREATE TABLE Ident_table ( ID int IDENTITY(1, 1), some_values varchar(50)); IDENTITY [ ( seed, increment ) ]
Введение в SQL (НЕ select) Затрагиваемые темы Роль языка SQL. Части SQL Роль языка SQL. Части SQL Администрирование БД: привилегии (DCL) Администрирование.
Лекция 3 Домены Ограничения на значения столбцов Создание, изменение и удаление таблиц Ключи и ссылочная целостность Защита таблиц.
Лекция 16 Лекция 16 Основы SQL. Описание отношений, доменов, ограничений целостности, представлений данных. Реализация операций реляционной алгебры в SQL.
Генерация скрипта создания базы данных с учетом зависимостей Автор : Максим Масунов, 545 группа Санкт - Петербургский государственный университет Математико.
БАЗЫ ДАННЫХ ЛЕКЦИЯ 12. тема: ОСНОВЫ ЯЗЫКА SQL Общие сведения SQL структурированный язык запросов (Structured Query Language)
Система контроля прав доступа При помощи процедур и триггеров в MySQL.
SQL. Создание базы данных CREATE DATABASE ALTER DATABASE DROP DATABASE.
высокая степень универсальности и продуманности интерфейса визуального программирования, который рассчитан на работу с пользователями самой различной.
Team System - фреймворк для автоматизации тестирования от Microsoft Футорняк Елена Apriorit Сообщество Тестировщиков Днепропетровска 29/09/2011.
Обеспечение целостности данных Процедурное. Хранимые процедуры Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут.
Реляционные базы данных N-арное отношение – подмножество декартова произведения N множеств возможных значений (доменов, типов данных, атрибутов) Изображение.
Создание Web страниц Урок 12: PHP & MySQL Павел Бочаров.
PL/SQL Триггер блок PL/SQL, выполняемый неявно каждый раз, когда происходит конкретное событие.
Triggers для mysql. Что есть триггер? Триггер - это хранимая процедура особого типа, исполнение которой обусловлено наступлением определенного события.
Инструменты VS 2010 для работы с XML языком XML редактор. XSLT отладчик XSLT Profiler, инструмент позволяющий разработчикам измерять, оценивать и решать.
Процедуры Базы данных: учебный курс Некоторые операции, рассматриваемые как неделимые, трудно выразить с помощью одного запроса к БД. Примеры: занести.
Генерация хранимых процедур MySQL на основе BPEL Мерабишвили Георгий гр. 544 Научный руководитель: Терехов А.Н. Рецензент: Тимохин Д.В.
Транксрипт:

Дмитрий Андреев

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

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

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

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

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

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

SQL Server Database Database Project Template SQL Script Database Project Импорт схемы Создание нового проекта Реверс существующего скрипта

Database Project Edit Refactor Compare Data Gen Test Compare Build Deploy

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

-- version 1 Add table dbo.Auction IF OBJECT_ID (N'dbo.Auction', N'U') IS 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 -- version 1 Add table dbo.Auction IF OBJECT_ID (N'dbo.Auction', N'U') IS 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

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 ) Logical 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 HistoryAppApp V 1 V 2V 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 )

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

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

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

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

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

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

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

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

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

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

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

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

Data-tier Application Project V1 Visual Studio SQL Server 2008 R2 Build.dacpac Стандартный проект БД Visual Studio.dbschema SQL Server 2005, 2008, 2008 R2 Build Deploy Генерация скриптов

Стандартный проект БДData-tier Application Projects V1 Целевые приложенияБизнес критические системыПриложения уровня подразделения Поддержка БДSQL 2005, 2008, 2010 и БД третьих производителей SQL 2008 R2; планируется поддержка SQL Сложность схемыНе ограниченнаяДо тысячи обьектов Апгрейд (schema + data) Проект генерирует.sql скрипты которые обновляют схему. Данные остаются на месте или подвергаются миграционным операциям в зависимости от сценариев апгрейда..sql скриптов нет. Единый пакет для развертывания или апгрейда содержащий всю необходимую информацию. Данные сохраняются в автоматическом режиме. Типы поддерживаемых SQL обьектов Полная поддержкаЧастичная поддержка IntelliSense, Debugging, T-SQL Editor Одинаковые возможности

31 DBA SQL Server Management Studio Managed Instances HR Control Point SALES Разработка Развертывание MANAGE Visual Studio 2010 Разработчик FinApp Prod DB DBA SQL Server Management Studio FinApp Dev DB Reverse Engineer DAC Create policies Deploy / Upgrade DAC Deploy / Upgrade DAC.dacpac Compile + Build Compile + Build Hand-off to DBA Deploy / Upgrade DAC Deploy / Upgrade DAC Manage, Register, Uninstall, Extract, Upgrade DAC

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

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