Visual Studio Team Edition for Database Professionals Michael Juřek Software Architect Microsoft s.r.o.
Agenda Proč nová edice VS? Změnový proces – principy Databázový projekt Testování databází Nasazení změn Integrace – týmový vývoj
Co jsme slyšeli... Správa změn v databázi je obtížná... Vývojové týmy často pracují s neaktuální verzí databáze Nalezení chyb na konci vývojového cyklu je nákladné (vs. jejich nalezení včas) Vysoké náklady na podporu, pokud databázová změna vnese chybu do aplikace Nouzový návrat k předchozí verzi trvá dlooooooouho Problémy v komunikaci mezi vývojáři a správcem databáze Nutnost lepší komunikace a integrace
Typická situace Více rolí, více lidí Architekt databáze Definuje strukturu dat DB Developer Píše kód používající databázi Často vytváří též uložené procedury apod. DB Administrator Kontroluje produkční databázi Provádí finální revizi všech změn
Vytváří kód v databázi Vytváří testy Provádí refactoring Spouští testy Ukládá změny Provádí revizi změn Porovnává s produkční verzí Vytváří skripty pro nasazení Nasazuje do produkce Vytvoření nového DB projektu Import existující DB do projektu Plán vygenerování testovacích dat Vytvoření Vývoj Nasazení ArchitektVývojářSprávce Typická situace
Visual Studio Team System Business Analyst PMO Operations CIO Application Support Architect Project Manager Tester Designer Developer DB Pro Team Edition for Database Professionals Rozšíření o databázový týmRozšíření o databázový tým Změnové řízení pro databázeZměnové řízení pro databáze Rozšíření týmového vývoje a spolupráceRozšíření týmového vývoje a spolupráce Integrovaný vývoj zvyšuje kvalituIntegrovaný vývoj zvyšuje kvalitu
Visual Studio Team System 2008 Change Management Work Item Tracking Reporting Project Portal Visual Studio Team Foundation Server Integration Services Project Management Process and Architecture Guidance Dynamic Code Analyzer Visual Studio Team System Architecture Edition Static Code Analyzer Code Profiler Application Designer System Designer Logical Datacenter Designer Visual Studio Team System Development Edition Visual Studio Industry Partners Team Build Deployment Designer Unit Testing (C#, VB.NET) Code Coverage Team Explorer (includes Team Foundation Server CAL) Visual Studio Professional Edition Load Testing Web Testing Visual Studio Team System Test Edtiion Class Designer (in Visual Studio Standard Edition and higher) Visio for Enterprise Architects (in MSDN Premium Subscription) Visual Studio Team System Database Edition Offline Database Project Schema Compare DB Rename Refactoring Data Generator Data Compare Unit Testing (T-SQL) Code Metrics Manual Testing Test Case Management
Agenda Proč nová edice VS? Změnový proces – principy Databázový projekt Testování databází Nasazení změn Integrace – týmový vývoj
Současný přístup Obtížná zpráva změn Produkční databáze je „master“ pro data i pro schéma Správce nemá průběžný přístup k připravovaným změnám Změny prováděné v produkci často nejsou přeneseny zpět do vývoje Produkční databáze Management Studio Ladění Monitorování “Master“ pro data i pro schéma Schéma Změny schématu
Změny schématu spravovány ve VSTS – je „master“ pro schéma Produkční databáze je „master“ pouze pro data Správce může průběžně dostávat plánované změny k revizi Master“ pro schéma Off-lineOff-line Pod systémem pro správu zdroj. kóduPod systémem pro správu zdroj. kódu Schéma Změny schématu Změny jsou nasazovány plánovaně, s dobrou spravovatelností Komunikace pomocí vygenerovaných skriptů Produkční databáze Management Studio Ladění Monitorování “Master“ pro data Nový přístup
Výhody nového přístupu Databázové schéma je pod evoluční projektovou kontrolou Aplikace a databázové schéma jsou spravovány a verzovány společně Vývoj (i jednotlivý vývojář) pracuje v izolaci, do produkce se nasazují pouze celkové změny ověřené testováním Využití VSTS/TFS pro podporu týmové infrastruktury: Správa kódu, work items, automatický build, testování, reportování,...
Vytvoření projektového prostředí DatabaseProject Import schématu Produkce Check-in do systému správy kódu Vývoj Produkční databáze Testovací databáze SCM
Izolovaný iterativní vývoj Sand box SCM SynchronizaceSynchronizace Check-outCheck-out Edit/RefactorEdit/Refactor TestTest Check-inCheck-in Práce je prováděna, kontrolována a auditovatelně zaznamenána pomocí Work ItemsPráce je prováděna, kontrolována a auditovatelně zaznamenána pomocí Work ItemsProdukce Vývoj
Build SCM Denní build Test Get Latest Testovací databáze Výstup denního buildu Může být použito rovněž při průběžném systému buildů Produkce Vývoj
Nasazení DatabaseProject Synchronizace podle Label SCM SQL skript Build Nasazení Doladění skriptu, porovnání změn Testování, ověření Produkce Vývoj Testovací databáze
Vytvoření prostředí Import schématu produkční DB Začlenění do správy zdrojového kódu Build/Deploy
Agenda Proč nová edice VS? Změnový proces – principy Databázový projekt Testování databází Nasazení změn Integrace – týmový vývoj
DatabaseProject Import schématu databáze Import existujících SQL skript souborů Nový projekt SQLScript DatabaseProjectTemplate SQL Server Database Deploy SQL Script SQL Server Database Build Deploy Množina.SQL souborů s DDL fragmenty Role databázového projektu
Databázový projekt „Master“ pro schéma databáze v projektu Volitelně může být pod kontrolou zdrojového kódu (TFS, VSS,...) V řešení spolu s kódem – společný životní cyklus Kolekce.SQL souborů (skriptů a objektů schématu) v hierarchii složek: Soubor = jednotka změny
SQL skripty V principu libovolné T-SQL ve složce Scripts nebo jejích podsložkách Pre-Deployment / Post-Deployment: Dvě speciální složky Obsahují skripty prováděné před/po nasazení změn Vždy jeden skript má Build Action nastavenou na Predeploy/Postdeploy T-SQL Editor – v podstatě identický s editorem v SQL Management Studiu: Validate vs. Execute, SQLCMD režim, Client Statistics, Results as Grid/Text/File, color- coding,...
Objekty schématu Zvláštní případ T-SQL skriptů: Jeden CREATE/ALTER... příkaz v dávce Projekt obsahuje všechny uživatelské objekty v SQL databázi Jiná množina typů pro SQL 2000 a 2005 Způsoby vytvoření: Import schématu z existující databáze („reverse engineer“) Import existujících SQL skriptů „Ručně“ pomocí připravených šablon
Vlastnosti projektu Project Settings Verze databáze (2000/2005) Výchozí schéma a collation Povolení full-textu a SQLCLR Build Spojení do databáze pro nasazení, jméno databáze Cesta, kde budou generovány skripty Možnosti nasazení Database Properties Řada různých nastavení databáze (Auto-shrink, Recovery model, ANSI nastavení a mnoho dalších) Filegroups (od SR1) Nastavení souborů a skupin souborů Variables (od SR1) Proměnné ve stylu SETVAR pro sqlcmd.exe pro použití v Pre/Post- deployment skriptu References (od SR1) Možnost používat proměnné zastupující jméno serveru/databáze pro referencovaný databázový projekt v řešení anebo databázový metafile nakopírovaný z jiného řešení
Databázový projekt Struktura projektu Solution Explorer vs. Schema View Detekce chyb v projektu
Data Generation Plans Schema Objects Functions Stored Procedures TablesViewsSecurityRolesUsersRoles Application Roles Database Roles Storage File Groups Full Text Catalogs Types User-defined Data Types ScriptsPost-DeploymentPre-Deployment Struktura projektu – SQL 2000
Data Generation Plans Schema Objects AggregatesAssemblies Database Triggers FunctionsSecurity Asymmetric Keys CertificatesEndpointsRoles Application Roles Database Roles Schemas Symmetric Keys Users Service Broker Contracts Event Notifications Message Types Queues Remote Service Binding RoutesServices Schema Objects… Storage File Groups Full Text Catalogs Partition Functions Partition Schemes Stored Procedures SynonymsTablesTypes User-defined Data Types User-defined Types (CLR) XML Schema Collections ViewsScriptsPost-DeploymentPre-Deployment Struktura projektu – SQL 2005
Šablony (templates) Pro každý typ objektu v projektovém systému je k dispozici šablona Specifická pro SQL 2000 nebo 2005 Pokud je to možné, šablony se snaží obsahovat platný T-SQL skript Samozřejmě je obvykle nutné ho upravit Slouží jako dobrý výchozí bod
Chybové stavy Chyby/varování se objevují v okně Error List Každá položka v projektu může být v jednom ze tří stavů: Clean Ikona bez jakékoliv dekorace Dirty Ikona objektu s červeným vykřičníkem Skript/DDL nebyl rozpoznán nebo má špatnou syntaxi Nasazení (Deploy) projektu není možné Warning Ikona objektu se žlutým varovným trojúhelníkem Skript/DDL není interpretován/implementován Ve finální verzi by se tento stav neměl vyskytovat Nasazení (Deploy) je možné
Vnořené objekty Tabulky, pohledy, funkce, procedury,... Obsahují „logické“ vnořené objekty, které jsou často formálně nezávislé, i když bez svého „rodiče“ nemají smysl Dva typy vnořených objektů: S vlastním příkazem CREATE... Indexy, triggery,... V okně Solution Explorer samostatně, v okně Schema View vnořené Bez vlastního příkazu CREATE... Sloupce, parametry,... V okně Solution Explorer nejsou, v okně Schema View vnořené
Během importu schématu nebo SQL skriptu se vždy vytvářejí nejmenší možné fragmenty, např.: CREATE TABLE [dbo].[Territories] ( [TerritoryID] [nvarchar] (20) NOT NULL, [TerritoryDescription] [nchar] (50) NOT NULL, [RegionID] [int] NOT NULL ) ON [PRIMARY] ALTER TABLE [dbo].[Territories] ADD CONSTRAINT [PK_Territories] PRIMARY KEY NONCLUSTERED ([TerritoryID]) ON [PRIMARY] ALTER TABLE [dbo].[Territories] ADD CONSTRAINT [FK_Territories_Region] FOREIGN KEY ([RegionID]) REFERENCES [dbo].[Region] ([RegionID]) Vytvořené SQL fragmenty
Analýza SQL skriptu Dvě hlavní fáze: Phase-1 Parsing Získání identifikátoru objektu a jeho typu Phase-1 Interpretation Získání dodatečných informací (schemabinding apod.) Phase-1 SQL Server Compile Validation Validace DDL fragmentu oproti lokální instanci SQL databáze Phase-2 Parsing Vytvoření AST (Abstract Syntax Tree) pro DDL fragment Phase-2 Interpretation Získání detailních informací z AST Udržované paměťové struktury Seznam objektových symbolů Strom vzájemné závislosti objektů
P1 Parsing P1 Interpre- tation SchemaManager DesignDB P2 Parsing P2 Interpre- tation SchemaManager ErrorList WarningList Failed Failed Failed FailedFailed Failed Success SuccessSuccess Success Success UpdateSchemaContext Add to SchemaContext Success Analýza SQL skriptu
Pojmenování souborů Vše je.SQL soubor Asociovaný s T-SQL editorem Základní jmenná konvence: JmenoObjektu.TypObjektu.SQL TypObjektu není vhodné měnit Je to možné, ale způsobuje to problémy JmenoObjektu lze změnit standardní operací Rename v okně Solution Explorer Např. Schema.JmenoObjektu.TypObjektu.SQL Předdefinovaná strukturu složek: Maximálně shodná s SQL Management Studio Lze ji libovolně měnit !!!
Refactoring schématu “Refactoring databáze je provedení malé změny v databázovém schématu, která zlepší design databáze, ale nezmění její sémantiku.” Agile Database Development, Scott Ambler Příklad: Změna jména objektu ve schématu pro lepší konzistenci, standardizaci, udržovatelnost, srozumitelnost,...
Rename refactoring Změna jména tabulky, sloupce,... Všechny typy objektů ve schématu Speciální varianta pro změnu referencovaného serveru anebo databáze Změna provedena ve všech závislých objektech a místech Schema objects, Data generation, Unit Tests, SQL Scripts Změny jsou atomické Preview před provedením změn
Rename – záchranné sítě Preview Prevence je vždy nejlepší Refactoring Log Záznam o provedených změnách Unit Testing Mějte připravené unit testy, které po přejmenování spustíte pro kontrolu Version Control Všechny předchozí verze schématu jsou v systému správy kódu pro možnost návratu změn Schema Compare Analýza a schválení změn před přesunem do „ostřejší“ databáze
Vylepšení v Power Tools 1.0 Dependency Viewer: Pomůcka pro sledování závislostí Nové operace: Move Schema, Expand Wildcard, Fully Qualify Name Přejmenování se promítne i do definic typových DataSetů Refactor Command Generator Projde záznamy o refactoringu a vytvoří T-SQL skript s sp_rename, ten pak lze pustit pred Schema Compare
Rename refactoring Přejmenování tabulky Přejmenování sloupce
Agenda Proč nová edice VS? Změnový proces – principy Databázový projekt Testování databází Nasazení změn Integrace – týmový vývoj
Testovací data Vygenerování realistické datové základny pro testovací (funkční i výkonnostní) scénáře Deterministické – se stejnými parametry vygeneruje vždy stejnou sadu dat Respektuje schéma databáze a při generování se jím řídí Rozšiřitelné – můžete vytvořit vlastní generátory a/nebo distribuce hodnot
Kroky pro generování dat Základní kroky: Vybrat vhodný generátor Vybrat vhodnou distribuci hodnot Nastavit parametry generátoru Zvolit počet generovaných řádků Volitelně nastavit poměr řádků mezi tabulkami spojenými relací Výchozí nastavení: Každý sloupec má nastavený jednoduchý generátor odpovídajícího typu Foreign Key generátor pro klíče do jiných tabulek Unikátnost hodnot odvozena ze schématu Typ distribuce Uniform
Spuštění generování dat Ověření Bezpečnostních požadavků Pokud nejsou splněny, dojde k chybě Schéma cílové databáze proti DGEN schématu Není-li shoda, dojde k chybě Volitelně vymazání tabulek Vyžadováno pro opakovatelnost generování Paralelní sekvence INSERT příkazů Respektuje relace v tabulkách Počet spojení závisí na počtu nezávislých tabulek Konfigurovatelné chování při chybě
Dostupné generátory dat Jednoduché náhodné generátory typů: Řetězcové typy - (n)(var)char, (n)text Číselné typy – tinyint, smallint, int, bigint, real, float, decimal, numeric, money Binární typy – (var)binary, image Datum a čas UniqueIdentifier (GUID) Bit Složitější generátory SQL Computed Value – např. identita Foreign Key – podle ID v jiné tabulce Regular Expression – podle výrazu Data Bound – podle výsledku dotazu
Dostupné distribuce dat
Úprava generování Jednoduchá parametrizace Rozsah hodnot, podíl prázdných hodnot apod. Pokročilá parametrizace RegEx – nastavení regulárního výrazu Data Bound Generator – T-SQL vracející přípustné hodnoty Rozšiřitelnost – vývoj vlastních tříd Vlastní generátor (Generator) Vlastní distribuce (Distribution)
Podepište párem klíčů (strong name) Nakopírujte na jedno z těchto míst: Global Assembly Cache %ProgramFiles%\Microsoft Visual Studio 8\DBPro\Extensions %ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies Zaregistrujte v: %ProgramFiles%\Microsoft Visual Studio 8\DBPro\VaseJmeno.Extensions.xml </extensions> Nasazení vlastních rozšíření
Vylepšení v Power Tools 1.0 Sequential Data Bound Generator – bere řádky postupně (ne náhodně) Pohodlné editory pro nastavení Data Bound a Regex generátorů Editor RegEx generátoru umožňuje interaktivně testovat výsledek Editor RegEx generátoru se snaží interpretovat CHECK CONSTRAINT sloupečku a navrhnout odpovídající regulární výraz
Generování dat Vytvoření plánu generování Spuštění plánu Kontrola výsledku
Statická analýza T-SQL Obsažena v Power Tools 1.0 Odhalí nejčastější nedostatky v kódu Vhodné před zahájením vytváření vlastních testů
Databázové unit testy Chyba a nutnost navrácení do předchozího stavu znamenají dlouhou noc pro administrátora Staví na funkci unit testů v týmových edicích Visual Studia 2005 Společný framework pro testování aplikační i datové vrstvy Je možné využít deterministicky vygenerovaná data Integrované nasazení a generování dat
Vytváření unit testů Testy jsou vytvářeny v designéru pomocí T-SQL: Podobný princip jako WinForms designer Na pozadí generován VB.NET / C# kód Standardní metody, atributy,... v kódu Standardní ADO.NET přístup Je možné testovat: Uložené procedury, funkce, triggery Automatické generování T-SQL kódu z okna Schema View Jakýkoliv vlastní T-SQL
Možnosti vytváření testů Speciální skripty: Test initialize / cleanup – pro testovací třídu Pre-Test / Post-Test – pro každou metodu Validace testů (assertions) Serverová Použití příkazu RAISERROR Klientská – nastavení podmínek (Non) Empty ResultSet Row Count Scalar Value Execution Time Inconclusive Vlastní validační třída
Možnosti spuštění testů Přístupné přes Test / Database Test Configuration... Spojení do databáze Možnost různých spojení pro validaci a pro spouštění testů (např. kvůli bezpečnosti) Automatické nasazení Možnost automatického nasazení před provedením testů Automatické generování dat Možnost vygenerování testovacích dat podle generovacího plánu
Rozšiřitelnost testů Vygenerovaný C# / VB.NET kód lze upravovat, např. Přidat vlastní validační logiku Nad rámec výchozí sady pravidel Podpora parametrizace Např. z datového zdroje (data driven) Správa transakcí Např. vytvoření transakčního rozsahu před testy a rollback změn po dokončení testů Extra kroky před/po testu/testech
Databázový unit test Vygenerování testu Nastavení podmínek Spuštění testu
Agenda Proč nová edice VS? Změnový proces – principy Databázový projekt Testování databází Nasazení změn Integrace – týmový vývoj
Nasazení změn Různé kroky procesu pro přenos změn: Projekt -> Vývojová databáze Vývojová databáze -> Testovací databáze Testovací databáze -> Produkční databáze Různé možnosti přenosu změn: Schema Compare / Data Compare Generování změnových skriptů a jejich kontrolované spuštění proti cílové databázi Deploy z Visual Studia Deploy při automatickém buildu (MSBuild)
Schema Compare Porovnání a eventuální přenos změn schématu: Mezi projektem a databází Mezi dvěma databázemi Vizuální rozhraní: Návrh Create / Update / Drop / Skip akce Porovnání definičních skriptů po řádcích Výstup: Řada detailních možností nastavení Možnost provedení změn v cílové databázi SQL DDL skript v novém okně SQL DDL skript do souboru
Data Compare Porovnání a eventuální přenos změn dat: Mezi dvěma databázemi (výběr tabulek a pohledů) Vizuální rozhraní: Identical Records / Different Records / Only in Source / Only in Target pro každý objekt Rozsah generování skriptu: Výběr objektů Výběr jednotlivých řádků Výstup: Řada možností nastavení Možnost provedení změn v cílové databázi SQL DML skript v novém okně SQL DML skript do souboru
Nasazení změn Schema Compare Data Compare
K dispozici pro MSBuild Task:SqlBuildTaskSqlDeployTaskDataGeneratorTask SqlSchemaCompareTask (Power Tools 1.0) SqlDataCompareTask (Power Tools 1.0) Target: Build – generuje SQL skript Deploy – spuštění proti cílové databázi K dispozici Pre-/Post-Deployment skripty
Převzetí nastavení z definice projektu msbuild NorthwindOnline.dbproj /t:build Specifikace cílového serveru msbuild NorthwindOnline.dbproj /t:build /p:TargetConnectionString="Data Source=(local)\sql80;Integrated Security=True;Pooling=False;" /p:TargetDatabase="NorthwindOnline TestRun" Sestavení
Nasazení Převzetí nastavení z definice projektu msbuild NorthwindOnline.dbproj /t:deploy Specifikace cílového serveru msbuild NorthwindOnline.dbproj /t:deploy /p:Configuration="Update Deployment" /p:TargetConnectionString="Data Source=(local)\sql80;Integrated Security=True;Pooling=False;"
Deploy v MSBuild Příklad Nezapomenout definovat v souboru.dbproj: TargetDatabaseTargetConnectionString
Agenda Proč nová edice VS? Změnový proces – principy Databázový projekt Testování databází Nasazení změn Integrace – týmový vývoj
Co je Team Foundation Server? Integrovaná platforma pro spolupráci při projektech vývoje software. Source Code Control Work Item Tracking Build Automation Team Communications Reporting
Týmový vývoj Databázový projekt je v principu stejný jako C# / VB.NET projekt a může využívat stejných služeb: Řízení projektu pomocí Work Items Verzované úložiště skriptů Automatický build (+nasazení) Testování Reportování o průběhu projektu Sdílení informací na portále
Integrace s TFS Automatický build Využití work items Správa verzí schématu Unit testy
Závěrem Řízení změnového procesu pro schéma databáze Testování databází Nasazení změn mezi prostředími Integrovaný týmový vývoj
© 2004 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.